audk/QuarkPlatformPkg/Acpi/DxeSmm/SmmPowerManagement/SmmPowerManagement.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;
}