123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- /** @file
- Provides cache info for each package, core type, cache level and cache type.
- Copyright (c) 2020 Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include <PiDxe.h>
- #include <Library/BaseLib.h>
- #include <Library/DebugLib.h>
- #include <Library/UefiBootServicesTableLib.h>
- #include <Library/CpuCacheInfoLib.h>
- #include <InternalCpuCacheInfoLib.h>
- /**
- Get EFI_MP_SERVICES_PROTOCOL pointer.
- @param[out] MpServices A pointer to the buffer where EFI_MP_SERVICES_PROTOCOL is stored
- @retval EFI_SUCCESS EFI_MP_SERVICES_PROTOCOL interface is returned
- @retval EFI_NOT_FOUND EFI_MP_SERVICES_PROTOCOL interface is not found
- **/
- EFI_STATUS
- CpuCacheInfoGetMpServices (
- OUT MP_SERVICES *MpServices
- )
- {
- EFI_STATUS Status;
- Status = gBS->LocateProtocol (&gEfiMpServiceProtocolGuid, NULL, (VOID **)&MpServices->Protocol);
- ASSERT_EFI_ERROR (Status);
- return Status;
- }
- /**
- Activate all of the logical processors.
- @param[in] MpServices MP_SERVICES structure.
- @param[in] Procedure A pointer to the function to be run on enabled logical processors.
- @param[in] ProcedureArgument The parameter passed into Procedure for all enabled logical processors.
- **/
- VOID
- CpuCacheInfoStartupAllCPUs (
- IN MP_SERVICES MpServices,
- IN EFI_AP_PROCEDURE Procedure,
- IN VOID *ProcedureArgument
- )
- {
- EFI_STATUS Status;
- Status = MpServices.Protocol->StartupAllAPs (MpServices.Protocol, Procedure, FALSE, NULL, 0, ProcedureArgument, NULL);
- if (Status == EFI_NOT_STARTED) {
- //
- // EFI_NOT_STARTED is returned when there is no enabled AP.
- // Treat this case as EFI_SUCCESS.
- //
- Status = EFI_SUCCESS;
- }
- ASSERT_EFI_ERROR (Status);
- Procedure (ProcedureArgument);
- }
- /**
- Get detailed information of the requested logical processor.
- @param[in] MpServices MP_SERVICES structure.
- @param[in] ProcessorNum The requested logical processor number.
- @param[out] ProcessorInfo A pointer to the buffer where the processor information is stored
- **/
- VOID
- CpuCacheInfoGetProcessorInfo (
- IN MP_SERVICES MpServices,
- IN UINTN ProcessorNum,
- OUT EFI_PROCESSOR_INFORMATION *ProcessorInfo
- )
- {
- EFI_STATUS Status;
- Status = MpServices.Protocol->GetProcessorInfo (MpServices.Protocol, ProcessorNum, ProcessorInfo);
- ASSERT_EFI_ERROR (Status);
- }
- /**
- Get the logical processor number.
- @param[in] MpServices MP_SERVICES structure.
- @retval Return the logical processor number.
- **/
- UINT32
- CpuCacheInfoWhoAmI (
- IN MP_SERVICES MpServices
- )
- {
- EFI_STATUS Status;
- UINTN ProcessorNum;
- Status = MpServices.Protocol->WhoAmI (MpServices.Protocol, &ProcessorNum);
- ASSERT_EFI_ERROR (Status);
- return (UINT32)ProcessorNum;
- }
- /**
- Get the total number of logical processors in the platform.
- @param[in] MpServices MP_SERVICES structure.
- @retval Return the total number of logical processors.
- **/
- UINT32
- CpuCacheInfoGetNumberOfProcessors (
- IN MP_SERVICES MpServices
- )
- {
- EFI_STATUS Status;
- UINTN NumberOfProcessor;
- UINTN NumberOfEnabledProcessor;
- Status = MpServices.Protocol->GetNumberOfProcessors (MpServices.Protocol, &NumberOfProcessor, &NumberOfEnabledProcessor);
- ASSERT_EFI_ERROR (Status);
- return (UINT32)NumberOfProcessor;
- }
|