ShadowMicrocodePatchByPcd (CpuMpData);\r
}\r
}\r
+\r
+/**\r
+ Get the cached microcode patch base address and size from the microcode patch\r
+ information cache HOB.\r
+\r
+ @param[out] Address Base address of the microcode patches data.\r
+ It will be updated if the microcode patch\r
+ information cache HOB is found.\r
+ @param[out] RegionSize Size of the microcode patches data.\r
+ It will be updated if the microcode patch\r
+ information cache HOB is found.\r
+\r
+ @retval TRUE The microcode patch information cache HOB is found.\r
+ @retval FALSE The microcode patch information cache HOB is not found.\r
+\r
+**/\r
+BOOLEAN\r
+GetMicrocodePatchInfoFromHob (\r
+ UINT64 *Address,\r
+ UINT64 *RegionSize\r
+ )\r
+{\r
+ EFI_HOB_GUID_TYPE *GuidHob;\r
+ EDKII_MICROCODE_PATCH_HOB *MicrocodePathHob;\r
+\r
+ GuidHob = GetFirstGuidHob (&gEdkiiMicrocodePatchHobGuid);\r
+ if (GuidHob == NULL) {\r
+ DEBUG((DEBUG_INFO, "%a: Microcode patch cache HOB is not found.\n", __FUNCTION__));\r
+ return FALSE;\r
+ }\r
+\r
+ MicrocodePathHob = GET_GUID_HOB_DATA (GuidHob);\r
+\r
+ *Address = MicrocodePathHob->MicrocodePatchAddress;\r
+ *RegionSize = MicrocodePathHob->MicrocodePatchRegionSize;\r
+\r
+ DEBUG((\r
+ DEBUG_INFO, "%a: MicrocodeBase = 0x%lx, MicrocodeSize = 0x%lx\n",\r
+ __FUNCTION__, *Address, *RegionSize\r
+ ));\r
+\r
+ return TRUE;\r
+}\r