SmmPowerManagement.c 2.5 KB

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