mirror of https://github.com/acidanthera/audk.git
114 lines
2.5 KiB
C
114 lines
2.5 KiB
C
/** @file
|
|
|
|
This is QNC Smm Power Management driver
|
|
|
|
Copyright (c) 2013-2015 Intel Corporation.
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
|
|
**/
|
|
|
|
#include "SmmPowerManagement.h"
|
|
|
|
//
|
|
// Global variables
|
|
//
|
|
EFI_SMM_CPU_PROTOCOL *mSmmCpu = NULL;
|
|
EFI_GLOBAL_NVS_AREA *mGlobalNvsAreaPtr = NULL;
|
|
EFI_MP_SERVICES_PROTOCOL *mMpService = NULL;
|
|
EFI_ACPI_SDT_PROTOCOL *mAcpiSdt = NULL;
|
|
EFI_ACPI_TABLE_PROTOCOL *mAcpiTable = NULL;
|
|
|
|
EFI_GUID mS3CpuRegisterTableGuid = S3_CPU_REGISTER_TABLE_GUID;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
InitializePowerManagement (
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN EFI_SYSTEM_TABLE *SystemTable
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Initializes the SMM Handler Driver
|
|
|
|
Arguments:
|
|
|
|
ImageHandle -
|
|
|
|
SystemTable -
|
|
|
|
Returns:
|
|
|
|
None
|
|
|
|
--*/
|
|
{
|
|
EFI_STATUS Status;
|
|
EFI_SMM_SW_DISPATCH2_PROTOCOL *SwDispatch;
|
|
EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsAreaProtocol;
|
|
|
|
//
|
|
// Get SMM CPU protocol
|
|
//
|
|
Status = gSmst->SmmLocateProtocol (
|
|
&gEfiSmmCpuProtocolGuid,
|
|
NULL,
|
|
(VOID **)&mSmmCpu
|
|
);
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
//
|
|
// Get the Sw dispatch protocol
|
|
//
|
|
Status = gSmst->SmmLocateProtocol (
|
|
&gEfiSmmSwDispatch2ProtocolGuid,
|
|
NULL,
|
|
(VOID**)&SwDispatch
|
|
);
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
//
|
|
// Get Global NVS Area Protocol
|
|
//
|
|
Status = gBS->LocateProtocol (&gEfiGlobalNvsAreaProtocolGuid, NULL, (VOID **)&GlobalNvsAreaProtocol);
|
|
ASSERT_EFI_ERROR (Status);
|
|
mGlobalNvsAreaPtr = GlobalNvsAreaProtocol->Area;
|
|
|
|
//
|
|
// Locate and cache PI AcpiSdt Protocol.
|
|
//
|
|
Status = gBS->LocateProtocol (
|
|
&gEfiAcpiSdtProtocolGuid,
|
|
NULL,
|
|
(VOID **) &mAcpiSdt
|
|
);
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
|
|
//
|
|
// Locate and cache PI AcpiSdt Protocol.
|
|
//
|
|
Status = gBS->LocateProtocol (
|
|
&gEfiAcpiTableProtocolGuid,
|
|
NULL,
|
|
(VOID **) &mAcpiTable
|
|
);
|
|
ASSERT_EFI_ERROR (Status);
|
|
|
|
|
|
//
|
|
// Get MpService protocol
|
|
//
|
|
Status = gBS->LocateProtocol (&gEfiMpServiceProtocolGuid, NULL, (VOID **)&mMpService);
|
|
ASSERT_EFI_ERROR (Status);
|
|
//
|
|
// Initialize power management features on processors
|
|
//
|
|
PpmInit();
|
|
|
|
return Status;
|
|
}
|