PeiMePolicyLib.c 8.5 KB

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