]> git.proxmox.com Git - mirror_edk2.git/blob - QuarkPlatformPkg/Acpi/DxeSmm/SmmPowerManagement/SmmPowerManagement.c
3a63223c14391bef5c5be135ef14be78a55b532c
[mirror_edk2.git] / QuarkPlatformPkg / Acpi / DxeSmm / SmmPowerManagement / SmmPowerManagement.c
1 /** @file
2
3 This is QNC Smm Power Management driver
4
5 Copyright (c) 2013-2015 Intel Corporation.
6
7 SPDX-License-Identifier: BSD-2-Clause-Patent
8
9
10 **/
11
12 #include "SmmPowerManagement.h"
13
14 //
15 // Global variables
16 //
17 EFI_SMM_CPU_PROTOCOL *mSmmCpu = NULL;
18 EFI_GLOBAL_NVS_AREA *mGlobalNvsAreaPtr = NULL;
19 EFI_MP_SERVICES_PROTOCOL *mMpService = NULL;
20 EFI_ACPI_SDT_PROTOCOL *mAcpiSdt = NULL;
21 EFI_ACPI_TABLE_PROTOCOL *mAcpiTable = NULL;
22
23 EFI_GUID mS3CpuRegisterTableGuid = S3_CPU_REGISTER_TABLE_GUID;
24
25 EFI_STATUS
26 EFIAPI
27 InitializePowerManagement (
28 IN EFI_HANDLE ImageHandle,
29 IN EFI_SYSTEM_TABLE *SystemTable
30 )
31 /*++
32
33 Routine Description:
34
35 Initializes the SMM Handler Driver
36
37 Arguments:
38
39 ImageHandle -
40
41 SystemTable -
42
43 Returns:
44
45 None
46
47 --*/
48 {
49 EFI_STATUS Status;
50 EFI_SMM_SW_DISPATCH2_PROTOCOL *SwDispatch;
51 EFI_GLOBAL_NVS_AREA_PROTOCOL *GlobalNvsAreaProtocol;
52
53 //
54 // Get SMM CPU protocol
55 //
56 Status = gSmst->SmmLocateProtocol (
57 &gEfiSmmCpuProtocolGuid,
58 NULL,
59 (VOID **)&mSmmCpu
60 );
61 ASSERT_EFI_ERROR (Status);
62
63 //
64 // Get the Sw dispatch protocol
65 //
66 Status = gSmst->SmmLocateProtocol (
67 &gEfiSmmSwDispatch2ProtocolGuid,
68 NULL,
69 (VOID**)&SwDispatch
70 );
71 ASSERT_EFI_ERROR (Status);
72
73 //
74 // Get Global NVS Area Protocol
75 //
76 Status = gBS->LocateProtocol (&gEfiGlobalNvsAreaProtocolGuid, NULL, (VOID **)&GlobalNvsAreaProtocol);
77 ASSERT_EFI_ERROR (Status);
78 mGlobalNvsAreaPtr = GlobalNvsAreaProtocol->Area;
79
80 //
81 // Locate and cache PI AcpiSdt Protocol.
82 //
83 Status = gBS->LocateProtocol (
84 &gEfiAcpiSdtProtocolGuid,
85 NULL,
86 (VOID **) &mAcpiSdt
87 );
88 ASSERT_EFI_ERROR (Status);
89
90
91 //
92 // Locate and cache PI AcpiSdt Protocol.
93 //
94 Status = gBS->LocateProtocol (
95 &gEfiAcpiTableProtocolGuid,
96 NULL,
97 (VOID **) &mAcpiTable
98 );
99 ASSERT_EFI_ERROR (Status);
100
101
102 //
103 // Get MpService protocol
104 //
105 Status = gBS->LocateProtocol (&gEfiMpServiceProtocolGuid, NULL, (VOID **)&mMpService);
106 ASSERT_EFI_ERROR (Status);
107 //
108 // Initialize power management features on processors
109 //
110 PpmInit();
111
112 return Status;
113 }