PeiMePolicyLib.c 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. /** @file
  2. This file is PeiMePolicy library.
  3. Copyright (c) 2019 - 2020 Intel Corporation. All rights reserved. <BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include "PeiMePolicyLibrary.h"
  7. #include <Library/ConfigBlockLib.h>
  8. /**
  9. Load default settings for ME config block in pre-mem phase.
  10. @param[in] ConfigBlockPointer The pointer to the config block
  11. **/
  12. VOID
  13. LoadMePeiPreMemDefault (
  14. IN VOID *ConfigBlockPointer
  15. );
  16. /**
  17. Load default settings for ME config block in PEI phase.
  18. @param[in] ConfigBlockPointer The pointer to the config block
  19. **/
  20. VOID
  21. LoadMePeiDefault (
  22. IN VOID *ConfigBlockPointer
  23. );
  24. STATIC COMPONENT_BLOCK_ENTRY mMeCompontBlockPreMemBlocks [] = {
  25. {&gMePeiPreMemConfigGuid, sizeof (ME_PEI_PREMEM_CONFIG), ME_PEI_PREMEM_CONFIG_REVISION, LoadMePeiPreMemDefault}
  26. };
  27. STATIC COMPONENT_BLOCK_ENTRY mMeCompontBlockBlocks [] = {
  28. {&gMePeiConfigGuid, sizeof (ME_PEI_CONFIG), ME_PEI_CONFIG_REVISION, LoadMePeiDefault}
  29. };
  30. /**
  31. Load default settings for ME config block in pre-mem phase.
  32. @param[in] ConfigBlockPointer The pointer to the config block
  33. **/
  34. VOID
  35. LoadMePeiPreMemDefault (
  36. IN VOID *ConfigBlockPointer
  37. )
  38. {
  39. ME_PEI_PREMEM_CONFIG *MePeiPreMemConfig;
  40. MePeiPreMemConfig = ConfigBlockPointer;
  41. MePeiPreMemConfig->HeciTimeouts = 1;
  42. MePeiPreMemConfig->Heci1BarAddress = 0xFED1A000;
  43. MePeiPreMemConfig->Heci2BarAddress = 0xFED1B000;
  44. MePeiPreMemConfig->Heci3BarAddress = 0xFED1C000;
  45. //
  46. // Test policies
  47. //
  48. MePeiPreMemConfig->SendDidMsg = 1;
  49. MePeiPreMemConfig->KtDeviceEnable = 1;
  50. }
  51. /**
  52. Load default settings for ME config block in PEI phase.
  53. @param[in] ConfigBlockPointer The pointer to the config block
  54. **/
  55. VOID
  56. LoadMePeiDefault (
  57. IN VOID *ConfigBlockPointer
  58. )
  59. {
  60. ME_PEI_CONFIG *MePeiConfig;
  61. MePeiConfig = ConfigBlockPointer;
  62. MePeiConfig->EndOfPostMessage = EOP_SEND_IN_DXE;
  63. MePeiConfig->MeUnconfigOnRtcClear = 1;
  64. }
  65. /**
  66. Dump values of ME config block in pre-mem phase.
  67. @param[in] MePeiPreMemConfig The pointer to the config block
  68. **/
  69. VOID
  70. EFIAPI
  71. PrintMePeiPreMemConfig (
  72. IN ME_PEI_PREMEM_CONFIG *MePeiPreMemConfig
  73. )
  74. {
  75. DEBUG_CODE_BEGIN ();
  76. DEBUG ((DEBUG_INFO, "------------------------ ME_PEI_PREMEM_CONFIG -----------------\n"));
  77. DEBUG ((DEBUG_INFO, " Revision : 0x%x\n", MePeiPreMemConfig->Header.Revision));
  78. ASSERT (MePeiPreMemConfig->Header.Revision == ME_PEI_PREMEM_CONFIG_REVISION);
  79. DEBUG ((DEBUG_INFO, " HeciTimeouts : 0x%x\n", MePeiPreMemConfig->HeciTimeouts));
  80. DEBUG ((DEBUG_INFO, " DidInitStat : 0x%x\n", MePeiPreMemConfig->DidInitStat));
  81. DEBUG ((DEBUG_INFO, " DisableCpuReplacedPolling : 0x%x\n", MePeiPreMemConfig->DisableCpuReplacedPolling));
  82. DEBUG ((DEBUG_INFO, " SendDidMsg : 0x%x\n", MePeiPreMemConfig->SendDidMsg));
  83. DEBUG ((DEBUG_INFO, " DisableHeciRetry : 0x%x\n", MePeiPreMemConfig->DisableHeciRetry));
  84. DEBUG ((DEBUG_INFO, " DisableMessageCheck : 0x%x\n", MePeiPreMemConfig->DisableMessageCheck));
  85. DEBUG ((DEBUG_INFO, " SkipMbpHob : 0x%x\n", MePeiPreMemConfig->SkipMbpHob));
  86. DEBUG ((DEBUG_INFO, " HeciCommunication2 : 0x%x\n", MePeiPreMemConfig->HeciCommunication2));
  87. DEBUG ((DEBUG_INFO, " KtDeviceEnable : 0x%x\n", MePeiPreMemConfig->KtDeviceEnable));
  88. DEBUG ((DEBUG_INFO, " Heci1BarAddress : 0x%x\n", MePeiPreMemConfig->Heci1BarAddress));
  89. DEBUG ((DEBUG_INFO, " Heci2BarAddress : 0x%x\n", MePeiPreMemConfig->Heci2BarAddress));
  90. DEBUG ((DEBUG_INFO, " Heci3BarAddress : 0x%x\n", MePeiPreMemConfig->Heci3BarAddress));
  91. DEBUG_CODE_END ();
  92. }
  93. /**
  94. Dump values of ME config block in PEI phase.
  95. @param[in] MePeiConfig The pointer to the config block
  96. **/
  97. VOID
  98. EFIAPI
  99. PrintMePeiConfig (
  100. IN ME_PEI_CONFIG *MePeiConfig
  101. )
  102. {
  103. DEBUG_CODE_BEGIN ();
  104. DEBUG ((DEBUG_INFO, "------------------------ ME_PEI_CONFIG -----------------\n"));
  105. DEBUG ((DEBUG_INFO, " Revision : 0x%x\n", MePeiConfig->Header.Revision));
  106. ASSERT (MePeiConfig->Header.Revision == ME_PEI_CONFIG_REVISION);
  107. DEBUG ((DEBUG_INFO, " MctpBroadcastCycle : 0x%x\n", MePeiConfig->MctpBroadcastCycle));
  108. DEBUG ((DEBUG_INFO, " EndOfPostMessage : 0x%x\n", MePeiConfig->EndOfPostMessage));
  109. DEBUG ((DEBUG_INFO, " Heci3Enabled : 0x%x\n", MePeiConfig->Heci3Enabled));
  110. DEBUG ((DEBUG_INFO, " DisableD0I3SettingForHeci : 0x%x\n", MePeiConfig->DisableD0I3SettingForHeci));
  111. DEBUG ((DEBUG_INFO, " MeUnconfigOnRtcClear : 0x%x\n", MePeiConfig->MeUnconfigOnRtcClear));
  112. DEBUG_CODE_END ();
  113. }
  114. /**
  115. Print PEI ME config block
  116. @param[in] SiPolicyPpiPreMem The RC Policy PPI instance
  117. **/
  118. VOID
  119. EFIAPI
  120. MePrintPolicyPpiPreMem (
  121. IN SI_PREMEM_POLICY_PPI *SiPolicyPpiPreMem
  122. )
  123. {
  124. DEBUG_CODE_BEGIN ();
  125. EFI_STATUS Status;
  126. ME_PEI_PREMEM_CONFIG *MePeiPreMemConfig;
  127. Status = GetConfigBlock ((VOID *) SiPolicyPpiPreMem, &gMePeiPreMemConfigGuid, (VOID *) &MePeiPreMemConfig);
  128. ASSERT_EFI_ERROR (Status);
  129. DEBUG ((DEBUG_INFO, "\n---------------------- Me Config Block Pre-Mem Print Begin -----------------\n"));
  130. PrintMePeiPreMemConfig (MePeiPreMemConfig);
  131. DEBUG ((DEBUG_INFO, "\n---------------------- Me Config Block Pre-Mem Print End -------------------\n"));
  132. DEBUG_CODE_END ();
  133. }
  134. /**
  135. Print PEI ME config block
  136. @param[in] SiPolicyPpi The RC Policy PPI instance
  137. **/
  138. VOID
  139. EFIAPI
  140. MePrintPolicyPpi (
  141. IN SI_POLICY_PPI *SiPolicyPpi
  142. )
  143. {
  144. DEBUG_CODE_BEGIN ();
  145. EFI_STATUS Status;
  146. ME_PEI_CONFIG *MePeiConfig;
  147. Status = GetConfigBlock ((VOID *) SiPolicyPpi, &gMePeiConfigGuid, (VOID *) &MePeiConfig);
  148. ASSERT_EFI_ERROR (Status);
  149. DEBUG ((DEBUG_INFO, "\n---------------------- Me Config Block Print Begin -----------------\n"));
  150. PrintMePeiConfig (MePeiConfig);
  151. DEBUG ((DEBUG_INFO, "\n---------------------- Me Config Block Print End -------------------\n"));
  152. DEBUG_CODE_END ();
  153. }
  154. /**
  155. Get ME config block table total size.
  156. @retval Size of ME config block table
  157. **/
  158. UINT16
  159. EFIAPI
  160. MeGetConfigBlockTotalSizePreMem (
  161. VOID
  162. )
  163. {
  164. return GetComponentConfigBlockTotalSize (&mMeCompontBlockPreMemBlocks[0], sizeof (mMeCompontBlockPreMemBlocks) / sizeof (COMPONENT_BLOCK_ENTRY));
  165. }
  166. /**
  167. Get ME config block table total size.
  168. @retval Size of ME config block table
  169. **/
  170. UINT16
  171. EFIAPI
  172. MeGetConfigBlockTotalSize (
  173. VOID
  174. )
  175. {
  176. return GetComponentConfigBlockTotalSize (&mMeCompontBlockBlocks[0], sizeof (mMeCompontBlockBlocks) / sizeof (COMPONENT_BLOCK_ENTRY));
  177. }
  178. /**
  179. MeAddConfigBlocksPreMem add all config blocks.
  180. @param[in] ConfigBlockTableAddress The pointer to add config blocks
  181. @retval EFI_SUCCESS The policy default is initialized.
  182. @retval EFI_OUT_OF_RESOURCES Insufficient resources to create buffer
  183. **/
  184. EFI_STATUS
  185. EFIAPI
  186. MeAddConfigBlocksPreMem (
  187. IN VOID *ConfigBlockTableAddress
  188. )
  189. {
  190. DEBUG ((DEBUG_INFO, "Me AddConfigBlocks. TotalBlockCount = 0x%x\n", sizeof (mMeCompontBlockPreMemBlocks) / sizeof (COMPONENT_BLOCK_ENTRY)));
  191. return AddComponentConfigBlocks (ConfigBlockTableAddress, &mMeCompontBlockPreMemBlocks[0], sizeof (mMeCompontBlockPreMemBlocks) / sizeof (COMPONENT_BLOCK_ENTRY));
  192. }
  193. /**
  194. MeAddConfigBlocks add all config blocks.
  195. @param[in] ConfigBlockTableAddress The pointer to add config blocks
  196. @retval EFI_SUCCESS The policy default is initialized.
  197. @retval EFI_OUT_OF_RESOURCES Insufficient resources to create buffer
  198. **/
  199. EFI_STATUS
  200. EFIAPI
  201. MeAddConfigBlocks (
  202. IN VOID *ConfigBlockTableAddress
  203. )
  204. {
  205. DEBUG ((DEBUG_INFO, "ME AddConfigBlocks. TotalBlockCount = 0x%x\n", sizeof (mMeCompontBlockBlocks) / sizeof (COMPONENT_BLOCK_ENTRY)));
  206. return AddComponentConfigBlocks (ConfigBlockTableAddress, &mMeCompontBlockBlocks[0], sizeof (mMeCompontBlockBlocks) / sizeof (COMPONENT_BLOCK_ENTRY));
  207. }