diff options
42 files changed, 3353 insertions, 1956 deletions
diff --git a/EdkModulePkg/EdkModulePkg.fpd b/EdkModulePkg/EdkModulePkg.fpd index a04f3c7484..28f9017f2f 100644 --- a/EdkModulePkg/EdkModulePkg.fpd +++ b/EdkModulePkg/EdkModulePkg.fpd @@ -36,6 +36,143 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. <FlashDefinitionFile>dummy.fdf</FlashDefinitionFile> </Flash> <FrameworkModules> + <ModuleSA SupArchList="IA32 X64 EBC IPF" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674" ModuleGuid="1EC0F53A-FDE0-4576-8F25-7A1A410F58EB"> + <Libraries> + <Instance ModuleGuid="ff5c7a2c-ab7a-4366-8616-11c6e53247b6" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="a86fbfca-0183-4eeb-aa8a-762e3b7da1f3" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="8c690838-7a22-45c4-aa58-a33e3e515cd4" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="9dbf6f25-0da2-4a1d-8e12-e78de6ab4d0e" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="9ba1d976-0624-41a3-8650-28165e8d9ae8" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="fd44e603-002a-4b29-9f5f-529e815b6165" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="a804239b-4155-446f-acc8-f0825d74908c" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="926c9cd0-4bb8-479b-9ac4-8a2a23f85307" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="fa177ff7-1fc7-458d-a358-d9d62ae61cec" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="9643128f-ac24-4b3e-b6be-d8849a306153" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="27d67720-ea68-48ae-93da-a3a074c90e30" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="e6e9c1f8-2c8a-4f4b-a27c-c382e4bb8e67" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="b5a05743-9b71-489b-a0ed-a0eb3950d23b" ModuleVersion="1.0" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" PackageVersion="0.3"/> + <Instance ModuleGuid="E4541241-8897-411a-91F8-7D7E45837146" ModuleVersion="1.0" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674" PackageVersion="0.3"/> + <Instance ModuleGuid="54D2878F-25CD-4a2b-8420-EBD18E609C76" ModuleVersion="1.0" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674" PackageVersion="0.3"/> + </Libraries> + <PcdBuildDefinition> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdMaximumUnicodeStringLength</C_Name> + <Token>0x00000001</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>1000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdMaximumAsciiStringLength</C_Name> + <Token>0x00000002</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>1000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdDebugPropertyMask</C_Name> + <Token>0x00000005</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT8</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>0x0f</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdSpinLockTimeout</C_Name> + <Token>0x00000004</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>10000000</Value> + </PcdData> + <PcdData ItemType="PATCHABLE_IN_MODULE"> + <C_Name>PcdDebugPrintErrorLevel</C_Name> + <Token>0x00000006</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>0x80000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdMaximumLinkedListLength</C_Name> + <Token>0x00000003</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>1000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdReportStatusCodePropertyMask</C_Name> + <Token>0x00000007</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT8</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>0x07</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdDebugClearMemoryValue</C_Name> + <Token>0x00000008</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT8</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>0xAF</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdVpdBaseAddress</C_Name> + <Token>0x00010010</Token> + <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>0x0</Value> + </PcdData> + <PcdData ItemType="FEATURE_FLAG"> + <C_Name>PcdDxePcdDatabaseTraverseEnabled</C_Name> + <Token>0x00010021</Token> + <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>BOOLEAN</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>TRUE</Value> + </PcdData> + <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseSerial</C_Name>
+ <Token>0x00010022</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value>
+ </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseMemory</C_Name>
+ <Token>0x00010023</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value>
+ </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseOEM</C_Name>
+ <Token>0x00010024</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value>
+ </PcdData>
+ <PcdData ItemType="PATCHABLE_IN_MODULE">
+ <C_Name>PcdStatusCodeMemorySize</C_Name>
+ <Token>0x00010025</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT16</DatumType>
+ <MaxDatumSize>2</MaxDatumSize> + <Value>1</Value>
+ </PcdData>
+ </PcdBuildDefinition> + <ModuleSaBuildOptions> + <FvBinding>FV_RECOVERY</FvBinding> + <FfsFormatKey>PE32_PEIM</FfsFormatKey> + </ModuleSaBuildOptions> + </ModuleSA> <ModuleSA SupArchList="IA32" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674" ModuleGuid="80CF7257-87AB-47f9-A3FE-D50B76D89541"> <Libraries> <Instance ModuleGuid="ff5c7a2c-ab7a-4366-8616-11c6e53247b6" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> @@ -4133,6 +4270,380 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. <FfsFormatKey>BS_DRIVER</FfsFormatKey> </ModuleSaBuildOptions> </ModuleSA> + <ModuleSA SupArchList="X64 EBC IPF" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674" ModuleGuid="FEDE0A1B-BCA2-4A9F-BB2B-D9FD7DEC2E9F"> + <Libraries> + <Instance ModuleGuid="331deb15-454b-48d8-9b74-70d01f3f3556" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="ff5c7a2c-ab7a-4366-8616-11c6e53247b6" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="bda39d3a-451b-4350-8266-81ab10fa0523" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="27d67720-ea68-48ae-93da-a3a074c90e30" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="3ddc3b12-99ea-4364-b315-6310a2050be5" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="fd44e603-002a-4b29-9f5f-529e815b6165" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="f12b59c9-76d0-4661-ad7c-f04d1bef0558" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="4674739d-3195-4fb2-8094-ac1d22d00194" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="a86fbfca-0183-4eeb-aa8a-762e3b7da1f3" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="3a004ba5-efe0-4a61-9f1a-267a46ae5ba9" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="b5a05743-9b71-489b-a0ed-a0eb3950d23b" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="926c9cd0-4bb8-479b-9ac4-8a2a23f85307" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="E4541241-8897-411a-91F8-7D7E45837146" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/> + <Instance ModuleGuid="54D2878F-25CD-4a2b-8420-EBD18E609C76" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/> + <Instance ModuleGuid="b1ee6c28-54aa-4d17-b705-3e28ccb27b2e" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/> + </Libraries> + <PcdBuildDefinition> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdMaximumUnicodeStringLength</C_Name> + <Token>0x00000001</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>1000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdMaximumAsciiStringLength</C_Name> + <Token>0x00000002</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>1000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdDebugPropertyMask</C_Name> + <Token>0x00000005</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT8</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>0x0f</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdSpinLockTimeout</C_Name> + <Token>0x00000004</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>10000000</Value> + </PcdData> + <PcdData ItemType="PATCHABLE_IN_MODULE"> + <C_Name>PcdDebugPrintErrorLevel</C_Name> + <Token>0x00000006</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>0x80000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdMaximumLinkedListLength</C_Name> + <Token>0x00000003</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>1000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdDebugClearMemoryValue</C_Name> + <Token>0x00000008</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT8</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>0xAF</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdReportStatusCodePropertyMask</C_Name> + <Token>0x00000007</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT8</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>0x07</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdVpdBaseAddress</C_Name> + <Token>0x00010010</Token> + <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>0x0</Value> + </PcdData> + <PcdData ItemType="FEATURE_FLAG"> + <C_Name>PcdDxePcdDatabaseTraverseEnabled</C_Name> + <Token>0x00010021</Token> + <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>BOOLEAN</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>TRUE</Value> + </PcdData> + <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseEfiSerial</C_Name>
+ <Token>0x00010026</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseHardSerial</C_Name>
+ <Token>0x00010027</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseRuntimeMemory</C_Name>
+ <Token>0x00010028</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseDataHub</C_Name>
+ <Token>0x00010029</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseOEM</C_Name>
+ <Token>0x00010024</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value>
+ </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInSerial</C_Name>
+ <Token>0x0001002a</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInRuntimeMemory</C_Name>
+ <Token>0x0001002b</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInDataHub</C_Name>
+ <Token>0x0001002c</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInOEM</C_Name>
+ <Token>0x0001002c</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="PATCHABLE_IN_MODULE">
+ <C_Name>PcdStatusCodeRuntimeMemorySize</C_Name>
+ <Token>0x0001002d</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT16</DatumType>
+ <MaxDatumSize>2</MaxDatumSize> + <Value>128</Value> + </PcdData>
+ </PcdBuildDefinition> + <ModuleSaBuildOptions> + <FvBinding>FV_RECOVERY</FvBinding> + <FfsFormatKey>BS_DRIVER</FfsFormatKey> + </ModuleSaBuildOptions> + </ModuleSA> + <ModuleSA SupArchList="IPF" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674" ModuleGuid="FEDE0A1B-BCA2-4A9F-BB2B-D9FD7DEC2E9F"> + <Libraries> + <Instance ModuleGuid="331deb15-454b-48d8-9b74-70d01f3f3556" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="ff5c7a2c-ab7a-4366-8616-11c6e53247b6" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="bda39d3a-451b-4350-8266-81ab10fa0523" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="27d67720-ea68-48ae-93da-a3a074c90e30" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="3ddc3b12-99ea-4364-b315-6310a2050be5" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="fd44e603-002a-4b29-9f5f-529e815b6165" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="f12b59c9-76d0-4661-ad7c-f04d1bef0558" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="4674739d-3195-4fb2-8094-ac1d22d00194" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="a86fbfca-0183-4eeb-aa8a-762e3b7da1f3" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="3a004ba5-efe0-4a61-9f1a-267a46ae5ba9" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="b5a05743-9b71-489b-a0ed-a0eb3950d23b" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="926c9cd0-4bb8-479b-9ac4-8a2a23f85307" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> + <Instance ModuleGuid="E4541241-8897-411a-91F8-7D7E45837146" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/> + <Instance ModuleGuid="54D2878F-25CD-4a2b-8420-EBD18E609C76" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/> + <Instance ModuleGuid="b1ee6c28-54aa-4d17-b705-3e28ccb27b2e" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/> + <Instance ModuleGuid="61999c3c-72a5-4506-a4ff-4271d18a1d14" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/> + + </Libraries> + <PcdBuildDefinition> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdMaximumUnicodeStringLength</C_Name> + <Token>0x00000001</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>1000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdMaximumAsciiStringLength</C_Name> + <Token>0x00000002</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>1000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdDebugPropertyMask</C_Name> + <Token>0x00000005</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT8</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>0x0f</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdSpinLockTimeout</C_Name> + <Token>0x00000004</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>10000000</Value> + </PcdData> + <PcdData ItemType="PATCHABLE_IN_MODULE"> + <C_Name>PcdDebugPrintErrorLevel</C_Name> + <Token>0x00000006</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>0x80000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdMaximumLinkedListLength</C_Name> + <Token>0x00000003</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>1000000</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdDebugClearMemoryValue</C_Name> + <Token>0x00000008</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT8</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>0xAF</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdReportStatusCodePropertyMask</C_Name> + <Token>0x00000007</Token> + <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT8</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>0x07</Value> + </PcdData> + <PcdData ItemType="FIXED_AT_BUILD"> + <C_Name>PcdVpdBaseAddress</C_Name> + <Token>0x00010010</Token> + <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>UINT32</DatumType> + <MaxDatumSize>4</MaxDatumSize> + <Value>0x0</Value> + </PcdData> + <PcdData ItemType="FEATURE_FLAG"> + <C_Name>PcdDxePcdDatabaseTraverseEnabled</C_Name> + <Token>0x00010021</Token> + <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName> + <DatumType>BOOLEAN</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>TRUE</Value> + </PcdData> + <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseEfiSerial</C_Name>
+ <Token>0x00010026</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType> + <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseHardSerial</C_Name>
+ <Token>0x00010027</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseRuntimeMemory</C_Name>
+ <Token>0x00010028</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseDataHub</C_Name>
+ <Token>0x00010029</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseOEM</C_Name>
+ <Token>0x00010024</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value>
+ </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInSerial</C_Name>
+ <Token>0x0001002a</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInRuntimeMemory</C_Name>
+ <Token>0x0001002b</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInDataHub</C_Name>
+ <Token>0x0001002c</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInOEM</C_Name>
+ <Token>0x0001002c</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <MaxDatumSize>1</MaxDatumSize> + <Value>FALSE</Value> + </PcdData>
+ <PcdData ItemType="PATCHABLE_IN_MODULE">
+ <C_Name>PcdStatusCodeRuntimeMemorySize</C_Name>
+ <Token>0x0001002d</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT16</DatumType>
+ <MaxDatumSize>2</MaxDatumSize> + <Value>128</Value> + </PcdData>
+ </PcdBuildDefinition> + <ModuleSaBuildOptions> + <FvBinding>FV_RECOVERY</FvBinding> + <FfsFormatKey>BS_DRIVER</FfsFormatKey> + </ModuleSaBuildOptions> + </ModuleSA> + + <ModuleSA SupArchList="X64" PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674" ModuleGuid="80CF7257-87AB-47f9-A3FE-D50B76D89541"> <Libraries> <Instance ModuleGuid="ff5c7a2c-ab7a-4366-8616-11c6e53247b6" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/> diff --git a/EdkModulePkg/EdkModulePkg.spd b/EdkModulePkg/EdkModulePkg.spd index 8c3197e60c..218156b58d 100644 --- a/EdkModulePkg/EdkModulePkg.spd +++ b/EdkModulePkg/EdkModulePkg.spd @@ -24,10 +24,6 @@ <IncludeHeader>Include/Library/CustomDecompressLib.h</IncludeHeader>
<HelpText/>
</LibraryClass>
- <LibraryClass Name="EdkBsDataHubStatusCodeLib">
- <IncludeHeader>Include/Library/EdkBsDataHubStatusCodeLib.h</IncludeHeader>
- <HelpText/>
- </LibraryClass>
<LibraryClass Name="EdkDxeSalLib">
<IncludeHeader>Include/Library/EdkDxeSalLib.h</IncludeHeader>
<HelpText/>
@@ -44,10 +40,6 @@ <IncludeHeader>Include/Library/EdkIfrSupportLib.h</IncludeHeader>
<HelpText/>
</LibraryClass>
- <LibraryClass Name="EdkMemoryStatusCodeLib">
- <IncludeHeader>Include/Library/EdkMemoryStatusCodeLib.h</IncludeHeader>
- <HelpText/>
- </LibraryClass>
<LibraryClass Name="EdkPeCoffLoaderLib">
<IncludeHeader>Include/Library/EdkPeCoffLoaderLib.h</IncludeHeader>
<HelpText/>
@@ -56,14 +48,6 @@ <IncludeHeader>Include/Library/EdkPeCoffLoaderX64Lib.h</IncludeHeader>
<HelpText/>
</LibraryClass>
- <LibraryClass Name="EdkRtMemoryStatusCodeLib">
- <IncludeHeader>Include/Library/EdkRtMemoryStatusCodeLib.h</IncludeHeader>
- <HelpText/>
- </LibraryClass>
- <LibraryClass Name="EdkRtPlatformStatusCodeLib">
- <IncludeHeader>Include/Library/EdkRtPlatformStatusCodeLib.h</IncludeHeader>
- <HelpText/>
- </LibraryClass>
<LibraryClass Name="EdkScsiLib">
<IncludeHeader>Include/Library/EdkScsiLib.h</IncludeHeader>
<HelpText/>
@@ -76,6 +60,14 @@ <IncludeHeader>Include/Library/TianoDecompressLib.h</IncludeHeader>
<HelpText/>
</LibraryClass>
+ <LibraryClass Name="SerialPortLib">
+ <IncludeHeader>Include/Library/SerialPortLib.h</IncludeHeader>
+ <HelpText/>
+ </LibraryClass>
+ <LibraryClass Name="OemHookStatusCodeLib">
+ <IncludeHeader>Include/Library/OemHookStatusCodeLib.h</IncludeHeader>
+ <HelpText/>
+ </LibraryClass>
</LibraryClassDeclarations>
<IndustryStdIncludes>
<IndustryStdHeader Name="CapsuleName">
@@ -198,10 +190,6 @@ <IncludeHeader>Include/Library/CustomDecompressLib.h</IncludeHeader>
<HelpText/>
</IndustryStdHeader>
- <IndustryStdHeader Name="EdkBsDataHubStatusCodeLib">
- <IncludeHeader>Include/Library/EdkBsDataHubStatusCodeLib.h</IncludeHeader>
- <HelpText/>
- </IndustryStdHeader>
<IndustryStdHeader Name="EdkDxeSalLib">
<IncludeHeader>Include/Library/EdkDxeSalLib.h</IncludeHeader>
<HelpText/>
@@ -218,10 +206,6 @@ <IncludeHeader>Include/Library/EdkIfrSupportLib.h</IncludeHeader>
<HelpText/>
</IndustryStdHeader>
- <IndustryStdHeader Name="EdkMemoryStatusCodeLib">
- <IncludeHeader>Include/Library/EdkMemoryStatusCodeLib.h</IncludeHeader>
- <HelpText/>
- </IndustryStdHeader>
<IndustryStdHeader Name="EdkPeCoffLoaderLib">
<IncludeHeader>Include/Library/EdkPeCoffLoaderLib.h</IncludeHeader>
<HelpText/>
@@ -230,14 +214,6 @@ <IncludeHeader>Include/Library/EdkPeCoffLoaderX64Lib.h</IncludeHeader>
<HelpText/>
</IndustryStdHeader>
- <IndustryStdHeader Name="EdkRtMemoryStatusCodeLib">
- <IncludeHeader>Include/Library/EdkRtMemoryStatusCodeLib.h</IncludeHeader>
- <HelpText/>
- </IndustryStdHeader>
- <IndustryStdHeader Name="EdkRtPlatformStatusCodeLib">
- <IncludeHeader>Include/Library/EdkRtPlatformStatusCodeLib.h</IncludeHeader>
- <HelpText/>
- </IndustryStdHeader>
<IndustryStdHeader Name="EdkScsiLib">
<IncludeHeader>Include/Library/EdkScsiLib.h</IncludeHeader>
<HelpText/>
@@ -424,18 +400,16 @@ <Filename>Library/EdkFvbServiceLib/EdkFvbServiceLib.msa</Filename>
<Filename>Library/EdkGraphicsLib/EdkGraphicsLib.msa</Filename>
<Filename>Library/EdkIfrSupportLib/EdkIfrSupportLib.msa</Filename>
- <Filename>Library/EdkMemoryStatusCodeLib/EdkMemoryStatusCodeLib.msa</Filename>
<Filename>Library/EdkNullCustomizedDecompressLib/EdkNullCustomizedDecompressLib.msa</Filename>
<Filename>Library/EdkPeCoffLoaderLib/EdkPeCoffLoaderLib.msa</Filename>
<Filename>Library/EdkPeCoffLoaderX64Lib/EdkPeCoffLoaderX64Lib.msa</Filename>
<Filename>Library/PeiPerformanceLib/PeiPerformanceLib.msa</Filename>
- <Filename>Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa</Filename>
- <Filename>Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa</Filename>
- <Filename>Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa</Filename>
<Filename>Library/EdkScsiLib/EdkScsiLib.msa</Filename>
<Filename>Library/EdkUefiDebugLibConOut/EdkUefiDebugLibConOut.msa</Filename>
<Filename>Library/EdkUefiDebugLibStdErr/EdkUefiDebugLibStdErr.msa</Filename>
<Filename>Library/EdkUsbLib/EdkUsbLib.msa</Filename>
+ <Filename>Library/EdkSerialPortLibNull/EdkSerialPortLibNull.msa</Filename>
+ <Filename>Library/EdkOemHookStatusCodeLibNull/EdkOemHookStatusCodeLibNull.msa</Filename>
<Filename>Universal/Console/ConSplitter/Dxe/ConSplitter.msa</Filename>
<Filename>Universal/Console/GraphicsConsole/Dxe/GraphicsConsole.msa</Filename>
<Filename>Universal/Console/Terminal/Dxe/Terminal.msa</Filename>
@@ -460,7 +434,6 @@ <Filename>Universal/PCD/Dxe/Pcd.msa</Filename>
<Filename>Universal/Runtime/RuntimeDxe/Runtime.msa</Filename>
<Filename>Universal/Security/SecurityStub/Dxe/SecurityStub.msa</Filename>
- <Filename>Universal/StatusCode/RuntimeDxe/StatusCode.msa</Filename>
<Filename>Universal/UserInterface/HiiDataBase/Dxe/HiiDatabase.msa</Filename>
<Filename>Universal/UserInterface/DriverSample/DriverSample.msa</Filename>
<Filename>Universal/UserInterface/SetupBrowser/Dxe/SetupBrowser.msa</Filename>
@@ -469,6 +442,8 @@ <Filename>Universal/Variable/RuntimeDxe/Variable.msa</Filename>
<Filename>Universal/Capsule/RuntimeDxe/CapsuleRuntime.msa</Filename>
<Filename>Universal/WatchdogTimer/Dxe/WatchDogTimer.msa</Filename>
+ <Filename>Universal/StatusCode/Pei/PeiStatusCode.msa</Filename>
+ <Filename>Universal/StatusCode/Dxe/DxeStatusCode.msa</Filename>
</MsaFiles>
<PackageHeaders>
<IncludePkgHeader ModuleType="SEC">Include/EdkPeim.h</IncludePkgHeader>
@@ -663,6 +638,11 @@ <GuidValue>EC4DF5AF-4395-4CC9-94DE-77506D12C7B8</GuidValue>
<HelpText/>
</Entry>
+ <Entry Name="MemoryStatusCodeRecord">
+ <C_Name>gMemoryStatusCodeRecordGuid</C_Name>
+ <GuidValue>060CC026-4C0D-4DDA-8F41-595FEF00A502</GuidValue>
+ <HelpText/>
+ </Entry>
</GuidDeclarations>
<ProtocolDeclarations>
<Entry Name="Capsule">
@@ -886,5 +866,122 @@ <HelpText>This feature flag can be used to enable or disable the Pcd DXE database
traverse capability. Disable it can reduce the size of final image generated.</HelpText>
</PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeUseSerial</C_Name>
+ <Token>0x00010022</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <ValidUsage>FEATURE_FLAG</ValidUsage>
+ <DefaultValue>FALSE</DefaultValue>
+ <HelpText>This feature flag can be used to enable or disable report staus code to serial I/O. Disable it can reduce the size of final image generated.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeUseMemory</C_Name>
+ <Token>0x00010023</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <ValidUsage>FEATURE_FLAG</ValidUsage>
+ <DefaultValue>FALSE</DefaultValue>
+ <HelpText>This feature flag can be used to enable or disable save statuc code in GUID'ed HOB. Disable it can reduce the size of final image generated.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeUseOEM</C_Name>
+ <Token>0x00010024</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <ValidUsage>FEATURE_FLAG</ValidUsage>
+ <DefaultValue>FALSE</DefaultValue>
+ <HelpText>This feature flag can be used to enable or disable send status code to OEM device. Disable it can reduce the size of final image generated.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeMemorySize</C_Name>
+ <Token>0x00010025</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT16</DatumType>
+ <ValidUsage>DYNAMIC</ValidUsage>
+ <DefaultValue>4</DefaultValue>
+ <HelpText>kbytes size of GUID'ed HOB, if the GUID'ed HOB is full, create new GUID'ed HOB with this size.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeUseEfiSerial</C_Name>
+ <Token>0x00010026</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <ValidUsage>FEATURE_FLAG</ValidUsage>
+ <DefaultValue>FALSE</DefaultValue>
+ <HelpText>Use to switch on/off report status code through serial DXE.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeUseHardSerial</C_Name>
+ <Token>0x00010027</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <ValidUsage>FEATURE_FLAG</ValidUsage>
+ <DefaultValue>FALSE</DefaultValue>
+ <HelpText>Use to switch on/off report status code to serial device.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeUseRuntimeMemory</C_Name>
+ <Token>0x00010028</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <ValidUsage>FEATURE_FLAG</ValidUsage>
+ <DefaultValue>FALSE</DefaultValue>
+ <HelpText>Use to switch on/off save status code in runtime memory.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeUseDataHub</C_Name>
+ <Token>0x00010029</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <ValidUsage>FEATURE_FLAG</ValidUsage>
+ <DefaultValue>FALSE</DefaultValue>
+ <HelpText>Use to switch on/off log status code in data hub.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeReplayInSerial</C_Name>
+ <Token>0x0001002a</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <ValidUsage>FEATURE_FLAG</ValidUsage>
+ <DefaultValue>FALSE</DefaultValue>
+ <HelpText>Use to enable/dsable replay status code which saved in GUID'ed HOB in PEI phase to EFI serial.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeReplayInRuntimeMemory</C_Name>
+ <Token>0x0001002b</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <ValidUsage>FEATURE_FLAG</ValidUsage>
+ <DefaultValue>FALSE</DefaultValue>
+ <HelpText>Use to enable/dsable replay status code which saved in GUID'ed HOB in PEI phase to EFI serial.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeReplayInDataHub</C_Name>
+ <Token>0x0001002c</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <ValidUsage>FEATURE_FLAG</ValidUsage>
+ <DefaultValue>FALSE</DefaultValue>
+ <HelpText>Use to enable/dsable replay status code which saved in GUID'ed HOB in PEI phase to EFI serial.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeReplayInOEM</C_Name>
+ <Token>0x0001002c</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>BOOLEAN</DatumType>
+ <ValidUsage>FEATURE_FLAG</ValidUsage>
+ <DefaultValue>FALSE</DefaultValue>
+ <HelpText>Use to enable/dsable replay status code which saved in GUID'ed HOB in PEI phase to EFI serial.</HelpText>
+ </PcdEntry>
+ <PcdEntry>
+ <C_Name>PcdStatusCodeRuntimeMemorySize</C_Name>
+ <Token>0x0001002d</Token>
+ <TokenSpaceGuidCName>gEfiEdkModulePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT16</DatumType>
+ <ValidUsage>DYNAMIC</ValidUsage>
+ <DefaultValue>4</DefaultValue>
+ <HelpText>kbytes size of runtime memory.</HelpText>
+ </PcdEntry>
</PcdDeclarations>
</PackageSurfaceArea>
diff --git a/EdkModulePkg/Include/EdkDxe.h b/EdkModulePkg/Include/EdkDxe.h index d78893242e..f07f27e8b2 100644 --- a/EdkModulePkg/Include/EdkDxe.h +++ b/EdkModulePkg/Include/EdkDxe.h @@ -56,6 +56,7 @@ Abstract: #include <Guid/PeiPeCoffLoader.h>
#include <Guid/CapsuleVendor.h>
#include <Guid/CompatibleMemoryTested.h>
+#include <Guid/MemoryStatusCodeRecord.h>
#include <Ppi/StatusCodeMemory.h>
diff --git a/EdkModulePkg/Include/EdkPeim.h b/EdkModulePkg/Include/EdkPeim.h index 3c1799996d..a39ed5cdb4 100644 --- a/EdkModulePkg/Include/EdkPeim.h +++ b/EdkModulePkg/Include/EdkPeim.h @@ -46,6 +46,7 @@ Abstract: #include <Guid/MemoryTypeInformation.h>
#include <Guid/CapsuleVendor.h>
#include <Guid/BootState.h>
+#include <Guid/MemoryStatusCodeRecord.h>
#include <Ppi/PeiInMemory.h>
#include <Ppi/FlashMap.h>
diff --git a/EdkModulePkg/Include/Guid/MemoryStatusCodeRecord.h b/EdkModulePkg/Include/Guid/MemoryStatusCodeRecord.h new file mode 100644 index 0000000000..0c0fd9a051 --- /dev/null +++ b/EdkModulePkg/Include/Guid/MemoryStatusCodeRecord.h @@ -0,0 +1,54 @@ +/*++
+
+Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+Module Name:
+
+ MemoryStatusCodeRecord.h
+
+Abstract:
+
+ GUID used to identify status code records HOB that originate from the PEI status code
+
+--*/
+
+#ifndef _MEMORY_STATUS_CODE_RECORD_H__
+#define _MEMORY_STATUS_CODE_RECORD_H__
+
+#define MEMORY_STATUS_CODE_RECORD_GUID \
+ { \
+ 0x60cc026, 0x4c0d, 0x4dda, {0x8f, 0x41, 0x59, 0x5f, 0xef, 0x0, 0xa5, 0x2} \
+ }
+
+/**
+ Memory status code records packet structure :
+ +---------------+----------+----------+-----+----------+-----+----------+
+ | Packet Header | Record 1 | Record 2 | ... + Record n | ... | Record m |
+ +---------------+----------+----------+-----+----------+-----+----------+
+ ^ ^ ^
+ +--------- RecordIndex -----------+ |
+ +---------------- MaxRecordsNumber----------------------+
+**/
+typedef struct {
+ UINT16 PacketIndex; // Index of the Packet.
+ UINT16 RecordIndex; // Index of record in the packet.
+ UINT32 MaxRecordsNumber; // Max number of records in the packet.
+} MEMORY_STATUSCODE_PACKET_HEADER;
+
+typedef struct {
+ EFI_STATUS_CODE_TYPE CodeType;
+ EFI_STATUS_CODE_VALUE Value;
+ UINT32 Instance;
+} MEMORY_STATUSCODE_RECORD;
+
+
+extern EFI_GUID gMemoryStatusCodeRecordGuid;
+
+#endif
diff --git a/EdkModulePkg/Include/Library/EdkDxeSalLib.h b/EdkModulePkg/Include/Library/EdkDxeSalLib.h index 9d21846289..d5fe5ed141 100644 --- a/EdkModulePkg/Include/Library/EdkDxeSalLib.h +++ b/EdkModulePkg/Include/Library/EdkDxeSalLib.h @@ -23,6 +23,7 @@ Abstract: //#include <Ipf/SalApi.h>
EFI_STATUS
+EFIAPI
RegisterEsalFunction (
IN UINT64 FunctionId,
IN EFI_GUID *ClassGuid,
@@ -49,6 +50,7 @@ Returns: ;
EFI_STATUS
+EFIAPI
RegisterEsalClass (
IN EFI_GUID *ClassGuid,
IN VOID *ModuleGlobal,
@@ -74,6 +76,7 @@ Returns: ;
SAL_RETURN_REGS
+EFIAPI
EfiCallEsalService (
IN EFI_GUID *ClassGuid,
IN UINT64 FunctionId,
@@ -112,6 +115,7 @@ Returns: ;
SAL_RETURN_REGS
+EFIAPI
SetEsalVirtualEntryPoint (
IN UINT64 EntryPoint,
IN UINT64 Gp
@@ -119,6 +123,7 @@ SetEsalVirtualEntryPoint ( ;
SAL_RETURN_REGS
+EFIAPI
SetEsalPhysicalEntryPoint (
IN UINT64 EntryPoint,
IN UINT64 Gp
@@ -126,12 +131,14 @@ SetEsalPhysicalEntryPoint ( ;
SAL_RETURN_REGS
+EFIAPI
GetEsalEntryPoint (
VOID
)
;
VOID
+EFIAPI
SalFlushCache (
IN EFI_PHYSICAL_ADDRESS Start,
IN UINT64 Length
diff --git a/EdkModulePkg/Include/Library/OemHookStatusCodeLib.h b/EdkModulePkg/Include/Library/OemHookStatusCodeLib.h new file mode 100644 index 0000000000..2d172259f5 --- /dev/null +++ b/EdkModulePkg/Include/Library/OemHookStatusCodeLib.h @@ -0,0 +1,70 @@ +
+/** @file
+ OEM hook status code library functions with no library constructor/destructor
+
+ Copyright (c) 2006, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ Module Name: OemHookStatusCodeLib.h
+
+**/
+
+#ifndef __OEM_HOOK_STATUSCODE_LIB__
+#define __OEM_HOOK_STATUSCODE_LIB__
+
+/**
+
+ Initialize OEM status code device .
+
+**/
+VOID
+EFIAPI
+OemHookStatusCodeInitialize (
+ VOID
+ );
+
+/**
+ Report status code to OEM device.
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.
+
+
+ @param Data This optional parameter may be used to pass additional data
+
+ @return The function always return EFI_SUCCESS.
+
+**/
+EFI_STATUS
+EFIAPI
+OemHookStatusCodeReport (
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId, OPTIONAL
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ );
+
+#endif
diff --git a/EdkModulePkg/Include/Library/SerialPortLib.h b/EdkModulePkg/Include/Library/SerialPortLib.h new file mode 100644 index 0000000000..8fe04e9a7d --- /dev/null +++ b/EdkModulePkg/Include/Library/SerialPortLib.h @@ -0,0 +1,74 @@ +
+/** @file
+ Serial I/O Port library functions with no library constructor/destructor
+
+ Copyright (c) 2006, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ Module Name: SerialPortLib.h
+
+**/
+
+#ifndef __SERIAL_PORT_LIB__
+#define __SERIAL_PORT_LIB__
+
+/**
+
+ Programmed hardware of Serial port.
+
+**/
+EFI_STATUS
+EFIAPI
+SerialPortInitialize (
+ VOID
+ );
+
+/**
+ Write data to serial device.
+
+ If the buffer is NULL, then ASSERT();
+ if NumberOfBytes is zero, then ASSERT().
+
+ @param Buffer Point of data buffer which need to be writed.
+ @param NumberOfBytes Number of output bytes which are cached in Buffer.
+
+ @retval 0 Write data failed.
+ @retval !0 Actual number of bytes writed to serial device.
+
+**/
+UINTN
+EFIAPI
+SerialPortWrite (
+ IN UINT8 *Buffer,
+ IN UINTN NumberOfBytes
+);
+
+
+/**
+ Read data from serial device and save the datas in buffer.
+
+ If the buffer is NULL, then ASSERT();
+ if NumberOfBytes is zero, then ASSERT().
+
+ @param Buffer Point of data buffer which need to be writed.
+ @param NumberOfBytes Number of output bytes which are cached in Buffer.
+
+ @retval 0 Read data failed.
+ @retval !0 Aactual number of bytes read from serial device.
+
+**/
+UINTN
+EFIAPI
+SerialPortRead (
+ OUT UINT8 *Buffer,
+ IN UINTN NumberOfBytes
+);
+
+
+#endif
diff --git a/EdkModulePkg/Library/EdkDxeSalLib/Ipf/EsalServiceLib.c b/EdkModulePkg/Library/EdkDxeSalLib/Ipf/EsalServiceLib.c index d258b98cab..83b6aa2c4c 100644 --- a/EdkModulePkg/Library/EdkDxeSalLib/Ipf/EsalServiceLib.c +++ b/EdkModulePkg/Library/EdkDxeSalLib/Ipf/EsalServiceLib.c @@ -38,6 +38,7 @@ DxeSalLibConstruct ( }
EFI_STATUS
+EFIAPI
RegisterEsalFunction (
IN UINT64 FunctionId,
IN EFI_GUID *ClassGuid,
@@ -72,6 +73,7 @@ Returns: }
EFI_STATUS
+EFIAPI
RegisterEsalClass (
IN EFI_GUID *ClassGuid,
IN VOID *ModuleGlobal,
@@ -129,6 +131,7 @@ Returns: }
SAL_RETURN_REGS
+EFIAPI
EfiCallEsalService (
IN EFI_GUID *ClassGuid,
IN UINT64 FunctionId,
diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa b/EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/EdkOemHookStatusCodeLibNull.msa index 1e03e7fa5e..6be9cb78ff 100644 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa +++ b/EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/EdkOemHookStatusCodeLibNull.msa @@ -11,62 +11,40 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -->
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">
<MsaHeader>
- <ModuleName>EdkRtMemoryStatusCodeLib</ModuleName>
- <ModuleType>DXE_DRIVER</ModuleType>
- <GuidValue>1517564b-ab66-42b7-8903-731a95f314f9</GuidValue>
+ <ModuleName>EdkOemHookStatusCodeLibNull</ModuleName>
+ <ModuleType>PEIM</ModuleType>
+ <GuidValue>54D2878F-25CD-4a2b-8420-EBD18E609C76</GuidValue>
<Version>1.0</Version>
- <Abstract>Runtime memory status code library</Abstract>
- <Description>Save status code in runtime memory heap.</Description>
+ <Abstract>Memory Status Code Library for UEFI drivers</Abstract>
+ <Description>Lib to provide memory journal status code reporting Routines</Description>
<Copyright>Copyright (c) 2006, Intel Corporation.</Copyright>
- <License>All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ <License>All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.</License>
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
</MsaHeader>
<ModuleDefinitions>
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
<BinaryModule>false</BinaryModule>
- <OutputFileBasename>EdkRtMemoryStatusCodeLib</OutputFileBasename>
+ <OutputFileBasename>EdkOemHookStatusCodeLibNull</OutputFileBasename>
</ModuleDefinitions>
<LibraryClassDefinitions>
<LibraryClass Usage="ALWAYS_PRODUCED">
- <Keyword>EdkRtMemoryStatusCodeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>DebugLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>BaseLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiRuntimeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>ReportStatusCodeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>PrintLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>HobLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiBootServicesTableLib</Keyword>
+ <Keyword>OemHookStatusCodeLib</Keyword>
</LibraryClass>
</LibraryClassDefinitions>
<SourceFiles>
- <Filename>RtMemoryStatusCode.c</Filename>
+ <Filename>OemHookStatusCodeLibNull.c</Filename>
</SourceFiles>
<PackageDependencies>
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Package PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/>
</PackageDependencies>
+ <PPIs>
+ </PPIs>
<Externs>
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
diff --git a/EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/OemHookStatusCodeLibNull.c b/EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/OemHookStatusCodeLibNull.c new file mode 100644 index 0000000000..12988d01ba --- /dev/null +++ b/EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/OemHookStatusCodeLibNull.c @@ -0,0 +1,71 @@ +/** @file
+ OEM hook status code library functions with no library constructor/destructor
+
+ Copyright (c) 2006, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ Module Name: OemHookStatusCodeLibNull.c
+
+**/
+
+/**
+
+ Initialize OEM status code device .
+
+**/
+VOID
+EFIAPI
+OemHookStatusCodeInitialize (
+ VOID
+ )
+{
+ return;
+}
+
+/**
+ Report status code to OEM device.
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.
+
+
+ @param Data This optional parameter may be used to pass additional data
+
+ @return The function always return EFI_SUCCESS.
+
+**/
+EFI_STATUS
+EFIAPI
+OemHookStatusCodeReport (
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId, OPTIONAL
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.c b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.c deleted file mode 100644 index d72aae11a3..0000000000 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.c +++ /dev/null @@ -1,397 +0,0 @@ -/*++
-
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- BsDataHubStatusCode.c
-
-Abstract:
-
- This implements a status code listener that logs status codes into the data
- hub. This is only active during non-runtime DXE.
-
---*/
-#include "BsDataHubStatusCode.h"
-
-//
-// Globals only work at BootService Time. NOT at Runtime!
-//
-static EFI_DATA_HUB_PROTOCOL *mDataHub;
-static LIST_ENTRY mRecordBuffer;
-static INTN mRecordNum;
-static EFI_EVENT mLogDataHubEvent;
-static EFI_LOCK mStatusCodeReportLock;
-static BOOLEAN mEventHandlerActive = FALSE;
-
-STATUS_CODE_RECORD_LIST *
-GetRecordBuffer (
- VOID
- )
-/*++
-
-Routine Description:
-
- Returned buffer of length BYTES_PER_RECORD
-
-Arguments:
-
- None
-
-Returns:
-
- Entry in mRecordBuffer or NULL if non available
-
---*/
-{
- STATUS_CODE_RECORD_LIST *Buffer;
-
- gBS->AllocatePool (EfiBootServicesData, sizeof (STATUS_CODE_RECORD_LIST), (VOID **) &Buffer);
- if (Buffer == NULL) {
- return NULL;
- }
-
- ZeroMem (Buffer, sizeof (STATUS_CODE_RECORD_LIST));
- Buffer->Signature = BS_DATA_HUB_STATUS_CODE_SIGNATURE;
-
- return Buffer;
-}
-
-DATA_HUB_STATUS_CODE_DATA_RECORD *
-AquireEmptyRecordBuffer (
- VOID
- )
-/*++
-
-Routine Description:
-
- Allocate a mRecordBuffer entry in the form of a pointer.
-
-Arguments:
-
- None
-
-Returns:
-
- Pointer to new buffer. NULL if none exist.
-
---*/
-{
- STATUS_CODE_RECORD_LIST *DataBuffer;
-
- if (mRecordNum < MAX_RECORD_NUM) {
- DataBuffer = GetRecordBuffer ();
- if (DataBuffer != NULL) {
- EfiAcquireLock (&mStatusCodeReportLock);
- InsertTailList (&mRecordBuffer, &DataBuffer->Link);
- mRecordNum++;
- EfiReleaseLock (&mStatusCodeReportLock);
- return (DATA_HUB_STATUS_CODE_DATA_RECORD *) DataBuffer->RecordBuffer;
- }
- }
-
- return NULL;
-}
-
-EFI_STATUS
-ReleaseRecordBuffer (
- IN STATUS_CODE_RECORD_LIST *RecordBuffer
- )
-/*++
-
-Routine Description:
-
- Release a mRecordBuffer entry allocated by AquireEmptyRecordBuffer ().
-
-Arguments:
-
- RecordBuffer - Data to free
-
-Returns:
-
- EFI_SUCCESS - If DataRecord is valid
- EFI_UNSUPPORTED - The record list has empty
-
---*/
-{
- ASSERT (RecordBuffer != NULL);
- if (mRecordNum <= 0) {
- return EFI_UNSUPPORTED;
- }
-
- EfiAcquireLock (&mStatusCodeReportLock);
- RemoveEntryList (&RecordBuffer->Link);
- mRecordNum--;
- EfiReleaseLock (&mStatusCodeReportLock);
- gBS->FreePool (RecordBuffer);
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-BsDataHubReportStatusCode (
- IN EFI_STATUS_CODE_TYPE CodeType,
- IN EFI_STATUS_CODE_VALUE Value,
- IN UINT32 Instance,
- IN EFI_GUID * CallerId,
- IN EFI_STATUS_CODE_DATA * Data OPTIONAL
- )
-/*++
-
-Routine Description:
-
- Boot service report status code listener. This function logs the status code
- into the data hub.
-
-Arguments:
-
- Same as ReportStatusCode (See Tiano Runtime Specification)
-
-Returns:
-
- None
-
---*/
-{
- DATA_HUB_STATUS_CODE_DATA_RECORD *DataHub;
- UINT32 ErrorLevel;
- VA_LIST Marker;
- CHAR8 *Format;
- UINTN Index;
- CHAR16 FormatBuffer[BYTES_PER_RECORD];
-
- if (EfiAtRuntime ()) {
- //
- // For now all we do is post code at runtime
- //
- return EFI_SUCCESS;
- }
- //
- // If we had an error while in our event handler, then do nothing so
- // that we don't get in an endless loop.
- //
- if (mEventHandlerActive) {
- return EFI_SUCCESS;
- }
-
- DataHub = (DATA_HUB_STATUS_CODE_DATA_RECORD *) AquireEmptyRecordBuffer ();
- if (DataHub == NULL) {
- //
- // There are no empty record buffer in private buffers
- //
- return EFI_OUT_OF_RESOURCES;
- }
- //
- // Construct Data Hub Extended Data
- //
- DataHub->CodeType = CodeType;
- DataHub->Value = Value;
- DataHub->Instance = Instance;
-
- if (CallerId != NULL) {
- CopyMem (&DataHub->CallerId, CallerId, sizeof (EFI_GUID));
- } else {
- ZeroMem (&DataHub->CallerId, sizeof (EFI_GUID));
- }
-
- if (Data == NULL) {
- ZeroMem (&DataHub->Data, sizeof (EFI_STATUS_CODE_DATA));
- } else {
- //
- // Copy generic Header
- //
- CopyMem (&DataHub->Data, Data, sizeof (EFI_STATUS_CODE_DATA));
-
- if (ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) {
- //
- // Convert Ascii Format string to Unicode.
- //
- for (Index = 0; Format[Index] != '\0' && Index < (BYTES_PER_RECORD - 1); Index += 1) {
- FormatBuffer[Index] = (CHAR16) Format[Index];
- }
-
- FormatBuffer[Index] = L'\0';
-
- //
- // Put processed string into the buffer
- //
- Index = UnicodeVSPrint (
- (CHAR16 *) (DataHub + 1),
- BYTES_PER_RECORD - (sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD)),
- FormatBuffer,
- Marker
- );
-
- //
- // DATA_HUB_STATUS_CODE_DATA_RECORD followed by VSPrint String Buffer
- //
- DataHub->Data.Size = (UINT16) (Index * sizeof (CHAR16));
-
- } else {
- //
- // Default behavior is to copy optional data
- //
- if (Data->Size > (BYTES_PER_RECORD - sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD))) {
- DataHub->Data.Size = (UINT16) (BYTES_PER_RECORD - sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD));
- }
-
- CopyMem (DataHub + 1, Data + 1, DataHub->Data.Size);
- }
- }
-
- gBS->SignalEvent (mLogDataHubEvent);
-
- return EFI_SUCCESS;
-}
-
-VOID
-EFIAPI
-LogDataHubEventHandler (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-/*++
-
-Routine Description:
-
- The Event handler which will be notified to log data in Data Hub.
-
-Arguments:
-
- Event - Instance of the EFI_EVENT to signal whenever data is
- available to be logged in the system.
- Context - Context of the event.
-
-Returns:
-
- None.
-
---*/
-{
- EFI_STATUS Status;
- DATA_HUB_STATUS_CODE_DATA_RECORD *DataRecord;
- UINTN Size;
- UINT64 DataRecordClass;
- LIST_ENTRY *Link;
- STATUS_CODE_RECORD_LIST *BufferEntry;
-
- //
- // Set our global flag so we don't recurse if we get an error here.
- //
- mEventHandlerActive = TRUE;
-
- //
- // Log DataRecord in Data Hub.
- // If there are multiple DataRecords, Log all of them.
- //
- for (Link = mRecordBuffer.ForwardLink; Link != &mRecordBuffer;) {
- BufferEntry = CR (Link, STATUS_CODE_RECORD_LIST, Link, BS_DATA_HUB_STATUS_CODE_SIGNATURE);
- DataRecord = (DATA_HUB_STATUS_CODE_DATA_RECORD *) (BufferEntry->RecordBuffer);
- Link = Link->ForwardLink;
-
- //
- // Add in the size of the header we added.
- //
- Size = sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD) + DataRecord->Data.Size;
-
- if ((DataRecord->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) {
- DataRecordClass = EFI_DATA_RECORD_CLASS_PROGRESS_CODE;
- } else if ((DataRecord->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) {
- DataRecordClass = EFI_DATA_RECORD_CLASS_ERROR;
- } else if ((DataRecord->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) {
- DataRecordClass = EFI_DATA_RECORD_CLASS_DEBUG;
- } else {
- //
- // Should never get here.
- //
- DataRecordClass = EFI_DATA_RECORD_CLASS_DEBUG |
- EFI_DATA_RECORD_CLASS_ERROR |
- EFI_DATA_RECORD_CLASS_DATA |
- EFI_DATA_RECORD_CLASS_PROGRESS_CODE;
- }
-
- if (((DataRecord->Instance & EFI_D_ERROR) != 0) &&
- (((DataRecord->Instance & EFI_D_POOL) != 0) || ((DataRecord->Instance & EFI_D_PAGE) != 0))
- ) {
- //
- // If memory error, do not call LogData ().
- //
- DebugPrint ((UINTN)-1, "Memory Error\n");
- Status = EFI_OUT_OF_RESOURCES;
- } else {
- //
- // Log DataRecord in Data Hub
- //
- Status = mDataHub->LogData (
- mDataHub,
- &gEfiStatusCodeGuid,
- &gEfiStatusCodeRuntimeProtocolGuid,
- DataRecordClass,
- DataRecord,
- (UINT32) Size
- );
- }
-
- ReleaseRecordBuffer (BufferEntry);
- }
-
- mEventHandlerActive = FALSE;
-
- return ;
-}
-
-VOID
-BsDataHubStatusCodeInitialize (
- VOID
- )
-/*++
-
-Routine Description:
-
- Install a data hub listener.
-
-Arguments:
-
- (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
-
-Returns:
-
- EFI_SUCCESS - Logging Hub protocol installed
- Other - No protocol installed, unload driver.
-
---*/
-{
- EFI_STATUS Status;
-
- Status = gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (VOID **) &mDataHub);
- //
- // Should never fail due to dependency grammer
- //
- ASSERT_EFI_ERROR (Status);
-
- //
- // Initialize FIFO
- //
- InitializeListHead (&mRecordBuffer);
- mRecordNum = 0;
-
- EfiInitializeLock (&mStatusCodeReportLock, EFI_TPL_HIGH_LEVEL);
-
- //
- // Create a Notify Event to log data in Data Hub
- //
- Status = gBS->CreateEvent (
- EFI_EVENT_NOTIFY_SIGNAL,
- EFI_TPL_CALLBACK,
- LogDataHubEventHandler,
- NULL,
- &mLogDataHubEvent
- );
-
-}
diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.h b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.h deleted file mode 100644 index f15a90e5e2..0000000000 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.h +++ /dev/null @@ -1,130 +0,0 @@ -/*++
-
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- BsDataHubStatusCode.h
-
-Abstract:
-
- Header for the status code data hub logging component
-
---*/
-
-#ifndef _EFI_BS_DATA_HUB_STATUS_CODE_H_
-#define _EFI_BS_DATA_HUB_STATUS_CODE_H_
-
-//
-// Private data declarations
-//
-#define MAX_RECORD_NUM 1000
-#define BYTES_PER_RECORD EFI_STATUS_CODE_DATA_MAX_SIZE
-#define EMPTY_RECORD_TAG 0xFF
-
-#define BS_DATA_HUB_STATUS_CODE_SIGNATURE EFI_SIGNATURE_32 ('B', 'D', 'H', 'S')
-
-typedef struct {
- UINTN Signature;
- LIST_ENTRY Link;
- UINT8 RecordBuffer[BYTES_PER_RECORD];
-} STATUS_CODE_RECORD_LIST;
-
-//
-// Function prototypes
-//
-STATUS_CODE_RECORD_LIST *
-GetRecordBuffer (
- VOID
- )
-;
-
-/*++
-
-Routine Description:
-
- Returned buffer of length BYTES_PER_RECORD
-
-Arguments:
-
- None
-
-Returns:
-
- Entry in mRecordBuffer or NULL if non available
-
---*/
-DATA_HUB_STATUS_CODE_DATA_RECORD *
-AquireEmptyRecordBuffer (
- VOID
- )
-;
-
-/*++
-
-Routine Description:
-
- Allocate a mRecordBuffer entry in the form of a pointer.
-
-Arguments:
-
- None
-
-Returns:
-
- Pointer to new buffer. NULL if none exist.
-
---*/
-EFI_STATUS
-ReleaseRecordBuffer (
- IN STATUS_CODE_RECORD_LIST *RecordBuffer
- )
-;
-
-/*++
-
-Routine Description:
-
- Release a mRecordBuffer entry allocated by AquireEmptyRecordBuffer ().
-
-Arguments:
-
- RecordBuffer - Data to free
-
-Returns:
-
- EFI_SUCCESS - If RecordBuffer is valid
- EFI_UNSUPPORTED - The record list has empty
-
---*/
-VOID
-EFIAPI
-LogDataHubEventHandler (
- IN EFI_EVENT Event,
- IN VOID *Context
- )
-;
-
-/*++
-
-Routine Description:
-
- Event Handler that log in Status code in Data Hub.
-
-Arguments:
-
- (Standard EFI Event Handler - EFI_EVENT_NOTIFY)
-
-Returns:
-
- NONE
-
---*/
-#endif
diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa deleted file mode 100644 index af8f5f74af..0000000000 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa +++ /dev/null @@ -1,100 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<!--
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
--->
-<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">
- <MsaHeader>
- <ModuleName>EdkBsDataHubStatusCodeLib</ModuleName>
- <ModuleType>DXE_DRIVER</ModuleType>
- <GuidValue>041bf780-dc3e-49ab-8d67-4b86075440ea</GuidValue>
- <Version>1.0</Version>
- <Abstract>Data hub status code library</Abstract>
- <Description>Save status code in DATA HUB.</Description>
- <Copyright>Copyright (c) 2006, Intel Corporation.</Copyright>
- <License>All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.</License>
- <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
- </MsaHeader>
- <ModuleDefinitions>
- <SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
- <BinaryModule>false</BinaryModule>
- <OutputFileBasename>EdkBsDataHubStatusCodeLib</OutputFileBasename>
- </ModuleDefinitions>
- <LibraryClassDefinitions>
- <LibraryClass Usage="ALWAYS_PRODUCED">
- <Keyword>EdkBsDataHubStatusCodeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>DebugLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>BaseLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>BaseMemoryLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiRuntimeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>ReportStatusCodeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>PrintLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiBootServicesTableLib</Keyword>
- </LibraryClass>
- </LibraryClassDefinitions>
- <SourceFiles>
- <Filename>BsDataHubStatusCode.c</Filename>
- <Filename>BsDataHubStatusCode.h</Filename>
- </SourceFiles>
- <PackageDependencies>
- <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
- <Package PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/>
- </PackageDependencies>
- <Protocols>
- <Protocol Usage="ALWAYS_CONSUMED">
- <ProtocolCName>gEfiStatusCodeRuntimeProtocolGuid</ProtocolCName>
- </Protocol>
- <Protocol Usage="ALWAYS_CONSUMED">
- <ProtocolCName>gEfiDataHubProtocolGuid</ProtocolCName>
- </Protocol>
- </Protocols>
- <Events>
- <CreateEvents>
- <EventTypes EventGuidCName="EFI_EVENT_NOTIFY_SIGNAL" Usage="ALWAYS_CONSUMED">
- <EventType>EVENT_GROUP_GUID</EventType>
- </EventTypes>
- </CreateEvents>
- </Events>
- <DataHubs>
- <DataHubRecord Usage="ALWAYS_CONSUMED">
- <DataHubCName>gEfiStatusCodeGuid</DataHubCName>
- </DataHubRecord>
- </DataHubs>
- <Guids>
- <GuidCNames Usage="ALWAYS_CONSUMED">
- <GuidCName>gEfiStatusCodeGuid</GuidCName>
- </GuidCNames>
- </Guids>
- <Externs>
- <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
- <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
- </Externs>
-</ModuleSurfaceArea>
\ No newline at end of file diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.c b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.c deleted file mode 100644 index e0347a3a03..0000000000 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.c +++ /dev/null @@ -1,188 +0,0 @@ -/*++
-
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- RtMemoryStatusCode.c
-
-Abstract:
-
- EFI lib to provide memory journal status code reporting routines.
-
---*/
-
-#include <Ppi/StatusCodeMemory.h>
-
-//
-// Global variables
-//
-PEI_STATUS_CODE_MEMORY_PPI mStatusCodeMemoryPpi = { 0, 0, 0, 0 };
-
-//
-// Function implementations
-//
-EFI_STATUS
-RtMemoryReportStatusCode (
- IN EFI_STATUS_CODE_TYPE CodeType,
- IN EFI_STATUS_CODE_VALUE Value,
- IN UINT32 Instance,
- IN EFI_GUID * CallerId,
- IN EFI_STATUS_CODE_DATA * Data OPTIONAL
- )
-/*++
-
-Routine Description:
-
- Log a status code to a memory journal. If no memory journal exists,
- we will just return.
-
-Arguments:
-
- Same as ReportStatusCode AP
-
-Returns:
-
- EFI_SUCCESS This function always returns success
-
---*/
-{
- EFI_STATUS_CODE_ENTRY *CurrentEntry;
- UINT32 MaxEntry;
-
- //
- // We don't care to log debug codes.
- //
- if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) {
- return EFI_SUCCESS;
- }
- //
- // Update the latest entry in the journal.
- //
- MaxEntry = mStatusCodeMemoryPpi.Length / sizeof (EFI_STATUS_CODE_ENTRY);
- if (!MaxEntry) {
- //
- // If we don't have any entries, then we can return.
- // This effectively means that no memory buffer was passed forward from PEI.
- //
- return EFI_SUCCESS;
- }
-
- CurrentEntry = (EFI_STATUS_CODE_ENTRY *) (UINTN) (mStatusCodeMemoryPpi.Address + (mStatusCodeMemoryPpi.LastEntry * sizeof (EFI_STATUS_CODE_ENTRY)));
-
- mStatusCodeMemoryPpi.LastEntry = (mStatusCodeMemoryPpi.LastEntry + 1) % MaxEntry;
- if (mStatusCodeMemoryPpi.LastEntry == mStatusCodeMemoryPpi.FirstEntry) {
- mStatusCodeMemoryPpi.FirstEntry = (mStatusCodeMemoryPpi.FirstEntry + 1) % MaxEntry;
- }
-
- CurrentEntry->Type = CodeType;
- CurrentEntry->Value = Value;
- CurrentEntry->Instance = Instance;
-
- return EFI_SUCCESS;
-}
-
-VOID
-RtMemoryStatusCodeInitialize (
- VOID
- )
-/*++
-
-Routine Description:
-
- Initialization routine.
- Allocates heap space for storing Status Codes.
- Installs a PPI to point to that heap space.
- Installs a callback to switch to memory.
- Installs a callback to
-
-Arguments:
-
- (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
-
-Returns:
-
- None
-
---*/
-{
- EFI_HOB_GUID_TYPE *GuidHob;
- PEI_STATUS_CODE_MEMORY_PPI **StatusCodeMemoryPpi;
-
- GuidHob = GetFirstGuidHob (&gPeiStatusCodeMemoryPpiGuid);
- if (GuidHob == NULL) {
- return;
- }
-
- StatusCodeMemoryPpi = GET_GUID_HOB_DATA (GuidHob);
-
- //
- // Copy data to our structure since the HOB will go away at runtime
- //
- // BUGBUG: Virtualize for RT
- //
- mStatusCodeMemoryPpi.FirstEntry = (*StatusCodeMemoryPpi)->FirstEntry;
- mStatusCodeMemoryPpi.LastEntry = (*StatusCodeMemoryPpi)->LastEntry;
- mStatusCodeMemoryPpi.Address = (*StatusCodeMemoryPpi)->Address;
- mStatusCodeMemoryPpi.Length = (*StatusCodeMemoryPpi)->Length;
-}
-
-VOID
-PlaybackStatusCodes (
- IN EFI_REPORT_STATUS_CODE ReportStatusCodeFunc
- )
-/*++
-
-Routine Description:
-
- Call the input ReportStatusCode function with every status code recorded in
- the journal.
-
-Arguments:
-
- ReportStatusCode ReportStatusCode function to call.
-
-Returns:
-
- None
-
---*/
-{
- UINTN MaxEntry;
- EFI_STATUS_CODE_ENTRY *CurrentEntry;
- UINTN Counter;
-
- if (ReportStatusCodeFunc == RtMemoryReportStatusCode) {
- return ;
- }
- //
- // Playback prior status codes to current listeners
- //
- MaxEntry = mStatusCodeMemoryPpi.Length / sizeof (EFI_STATUS_CODE_ENTRY);
- for (Counter = mStatusCodeMemoryPpi.FirstEntry; Counter != mStatusCodeMemoryPpi.LastEntry; Counter++) {
- //
- // Check if we have to roll back to beginning of queue buffer
- //
- if (Counter == MaxEntry) {
- Counter = 0;
- }
- //
- // Play current entry
- //
- CurrentEntry = (EFI_STATUS_CODE_ENTRY *) (UINTN) (mStatusCodeMemoryPpi.Address + (Counter * sizeof (EFI_STATUS_CODE_ENTRY)));
- ReportStatusCodeFunc (
- CurrentEntry->Type,
- CurrentEntry->Value,
- CurrentEntry->Instance,
- NULL,
- NULL
- );
- }
-}
diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.c b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.c deleted file mode 100644 index 47f7f96511..0000000000 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.c +++ /dev/null @@ -1,130 +0,0 @@ -/*++
-
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- RtPlatformStatusCode.c
-
-Abstract:
-
- Contains NT32 specific implementations required to use status codes.
-
---*/
-
-//
-// Globals only work at BootService Time. NOT at Runtime!
-//
-//
-
-typedef
-EFI_STATUS
-(EFIAPI *REPORT_STATUS_CODE_FUNCTION) (
- IN EFI_STATUS_CODE_TYPE Type,
- IN EFI_STATUS_CODE_VALUE Value,
- IN UINT32 Instance,
- IN EFI_GUID *CallerId OPTIONAL,
- IN EFI_STATUS_CODE_DATA *Data OPTIONAL
- );
-
-REPORT_STATUS_CODE_FUNCTION mPeiReportStatusCode;
-
-//
-// Function implementations
-//
-EFI_STATUS
-RtPlatformReportStatusCode (
- IN EFI_STATUS_CODE_TYPE CodeType,
- IN EFI_STATUS_CODE_VALUE Value,
- IN UINT32 Instance,
- IN EFI_GUID * CallerId,
- IN EFI_STATUS_CODE_DATA * Data OPTIONAL
- )
-/*++
-
-Routine Description:
-
- Call all status code listeners in the MonoStatusCode.
-
-Arguments:
-
- Same as ReportStatusCode service
-
-Returns:
-
- EFI_SUCCESS Always returns success.
-
---*/
-{
- RtMemoryReportStatusCode (CodeType, Value, Instance, CallerId, Data);
- if (EfiAtRuntime ()) {
- //
- // For now all we do is post code at runtime
- //
- return EFI_SUCCESS;
- }
-
- BsDataHubReportStatusCode (CodeType, Value, Instance, CallerId, Data);
-
- //
- // Call back into PEI to get status codes. This is because SecMain contains
- // status code that reports to Win32.
- //
- if (mPeiReportStatusCode != NULL) {
- return mPeiReportStatusCode (CodeType, Value, Instance, CallerId, Data);
- }
-
- return EFI_SUCCESS;
-}
-
-VOID
-RtPlatformStatusCodeInitialize (
- VOID
- )
-/*++
-
-Routine Description:
-
- Initialize the status code listeners.
-
-Arguments:
-
- (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
-
-Returns:
-
- None
-
---*/
-{
- EFI_HOB_GUID_TYPE *GuidHob;
- void *Pointer;
-
- RtMemoryStatusCodeInitialize ();
- BsDataHubStatusCodeInitialize ();
-
- //
- // Play any prior status codes to the data hub.
- //
- PlaybackStatusCodes (BsDataHubReportStatusCode);
-
- //
- // If PEI has a ReportStatusCode callback find it and use it before StdErr
- // is connected.
- //
- mPeiReportStatusCode = NULL;
-
- GuidHob = GetFirstGuidHob (&gEfiStatusCodeRuntimeProtocolGuid);
- if (NULL == GuidHob) {
- return;
- }
- Pointer = GET_GUID_HOB_DATA (GuidHob);
- mPeiReportStatusCode = (REPORT_STATUS_CODE_FUNCTION) (*(UINTN *) Pointer);
-}
diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa b/EdkModulePkg/Library/EdkSerialPortLibNull/EdkSerialPortLibNull.msa index ac408a8ba7..a5940b2ca2 100644 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa +++ b/EdkModulePkg/Library/EdkSerialPortLibNull/EdkSerialPortLibNull.msa @@ -11,68 +11,40 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -->
<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">
<MsaHeader>
- <ModuleName>EdkRtPlatformStatusCodeLib</ModuleName>
- <ModuleType>DXE_DRIVER</ModuleType>
- <GuidValue>68b157b5-9534-43ff-9cd3-6705e4e1d56c</GuidValue>
+ <ModuleName>EdkSerialPortLibNull</ModuleName>
+ <ModuleType>PEIM</ModuleType>
+ <GuidValue>E4541241-8897-411a-91F8-7D7E45837146</GuidValue>
<Version>1.0</Version>
- <Abstract>Runtime platform status code library</Abstract>
- <Description>Platform status code library</Description>
+ <Abstract>Memory Status Code Library for UEFI drivers</Abstract>
+ <Description>Lib to provide memory journal status code reporting Routines</Description>
<Copyright>Copyright (c) 2006, Intel Corporation.</Copyright>
- <License>All rights reserved. This program and the accompanying materials
- are licensed and made available under the terms and conditions of the BSD License
- which accompanies this distribution. The full text of the license may be found at
- http://opensource.org/licenses/bsd-license.php
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ <License>All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.</License>
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
</MsaHeader>
<ModuleDefinitions>
<SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
<BinaryModule>false</BinaryModule>
- <OutputFileBasename>EdkRtPlatformStatusCodeLib</OutputFileBasename>
+ <OutputFileBasename>EdkSerialPortLibNull</OutputFileBasename>
</ModuleDefinitions>
<LibraryClassDefinitions>
<LibraryClass Usage="ALWAYS_PRODUCED">
- <Keyword>EdkRtPlatformStatusCodeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>DebugLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>BaseLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiRuntimeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>ReportStatusCodeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>PrintLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>HobLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>EdkBsDataHubStatusCodeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>EdkRtMemoryStatusCodeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiBootServicesTableLib</Keyword>
+ <Keyword>SerialPortLib</Keyword>
</LibraryClass>
</LibraryClassDefinitions>
<SourceFiles>
- <Filename>RtPlatformStatusCode.c</Filename>
+ <Filename>SerialPortLibNull.c</Filename>
</SourceFiles>
<PackageDependencies>
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
<Package PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/>
</PackageDependencies>
+ <PPIs>
+ </PPIs>
<Externs>
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
diff --git a/EdkModulePkg/Library/EdkSerialPortLibNull/SerialPortLibNull.c b/EdkModulePkg/Library/EdkSerialPortLibNull/SerialPortLibNull.c new file mode 100644 index 0000000000..af9b95705f --- /dev/null +++ b/EdkModulePkg/Library/EdkSerialPortLibNull/SerialPortLibNull.c @@ -0,0 +1,77 @@ +/** @file
+ Serial I/O Port library functions with no library constructor/destructor
+
+ Copyright (c) 2006, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ Module Name: SerialPortLibNull.c
+
+**/
+
+/**
+
+ Programmed hardware of Serial port.
+
+**/
+EFI_STATUS
+EFIAPI
+SerialPortInitialize (
+ VOID
+ )
+{
+ return EFI_UNSUPPORTED;
+}
+
+/**
+ Write data to serial device.
+
+ If the buffer is NULL, then ASSERT();
+ if NumberOfBytes is zero, then ASSERT().
+
+ @param Buffer Point of data buffer which need to be writed.
+ @param NumberOfBytes Number of output bytes which are cached in Buffer.
+
+ @retval 0 Write data failed.
+ @retval !0 Actual number of bytes writed to serial device.
+
+**/
+UINTN
+EFIAPI
+SerialPortWrite (
+ IN UINT8 *Buffer,
+ IN UINTN NumberOfBytes
+)
+{
+ return 0;
+}
+
+
+/**
+ Read data from serial device and save the datas in buffer.
+
+ If the buffer is NULL, then ASSERT();
+ if NumberOfBytes is zero, then ASSERT().
+
+ @param Buffer Point of data buffer which need to be writed.
+ @param NumberOfBytes Number of output bytes which are cached in Buffer.
+
+ @retval 0 Read data failed.
+ @retval !0 Aactual number of bytes read from serial device.
+
+**/
+UINTN
+EFIAPI
+SerialPortRead (
+ OUT UINT8 *Buffer,
+ IN UINTN NumberOfBytes
+)
+{
+ return 0;
+}
+
diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/Common/DxeStatusCodeCommon.c b/EdkModulePkg/Universal/StatusCode/Dxe/Common/DxeStatusCodeCommon.c new file mode 100644 index 0000000000..ae45d886be --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/Common/DxeStatusCodeCommon.c @@ -0,0 +1,222 @@ +/** @file
+ Status code driver for IA32/X64/EBC architecture.
+
+// Copyright (c) 2006, Intel Corporation. All rights reserved.
+// This software and associated documentation (if any) is furnished
+// under a license and may only be used or copied in accordance
+// with the terms of the license. Except as permitted by such
+// license, no part of this software or documentation may be
+// reproduced, stored in a retrieval system, or transmitted in any
+// form or by any means without the express written consent of
+// Intel Corporation.
+
+ Module Name: DxeStatusCodeCommon.c
+
+**/
+#include "DxeStatusCode.h"
+
+
+/**
+ Report status code to all supported device.
+ Calls into the workers which dispatches the platform specific
+ listeners.
+
+ @param Type Indicates the type of status code being reported.
+ The type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.
+ @param Value Describes the current status of a hardware or software entity.
+ This includes information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance
+ information is unavailable, not meaningful, or not relevant. Valid instance numbers start with 1.
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ @param Data This optional parameter may be used to pass additional data.
+ Type EFI_STATUS_CODE_DATA is defined in "Related Definitions" below.
+ The contents of this data type may have additional GUID-specific data. The standard GUIDs and
+ their associated data structures are defined in the Intel? Platform Innovation Framework for EFI Status Codes Specification.
+**/
+EFI_STATUS
+EFIAPI
+ReportDispatcher (
+ IN EFI_STATUS_CODE_TYPE Type,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId OPTIONAL,
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ );
+
+//
+// Declaration of status code protocol.
+//
+EFI_STATUS_CODE_PROTOCOL mEfiStatusCodeProtocol = {
+ ReportDispatcher
+};
+
+//
+// Delaration of DXE status code controller
+//
+DXE_STATUS_CODE_CONTROLLER gDxeStatusCode = {
+ //
+ // Initialize nest status as non nested.
+ //
+ 0,
+ {NULL, NULL}
+};
+
+/**
+
+ Install the ReportStatusCode runtime service.
+
+ @param ImageHandle Image handle of the loaded driver
+ @param SystemTable Pointer to the System Table
+
+ @return The function always returns success.
+
+**/
+EFI_STATUS
+EFIAPI
+DxeStatusCodeDriverEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_HANDLE Handle = NULL;
+ EFI_STATUS Status;
+
+ //
+ // Dispatch initialization request to supported devices
+ //
+ InitializationDispatcherWorker ();
+
+ //
+ // Install Status Code Architectural Protocol implementation as defined in Tiano
+ // Architecture Specification.
+ //
+ Status = gBS->InstallMultipleProtocolInterfaces (
+ &Handle,
+ &gEfiStatusCodeRuntimeProtocolGuid,
+ &mEfiStatusCodeProtocol,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ return Status;
+}
+
+/**
+ Report status code to all supported device.
+ Calls into the workers which dispatches the platform specific
+ listeners.
+
+ @param CodeType Indicates the type of status code being reported.
+ The type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.
+ @param Value Describes the current status of a hardware or software entity.
+ This includes information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance
+ information is unavailable, not meaningful, or not relevant. Valid instance numbers start with 1.
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ @param Data This optional parameter may be used to pass additional data.
+ Type EFI_STATUS_CODE_DATA is defined in "Related Definitions" below.
+ The contents of this data type may have additional GUID-specific data. The standard GUIDs and
+ their associated data structures are defined in the Intel? Platform Innovation Framework for EFI Status Codes Specification.
+**/
+EFI_STATUS
+EFIAPI
+ReportDispatcher (
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId OPTIONAL,
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ )
+{
+ //
+ // Use atom operation to avoid the reentant of report.
+ // If current status is not zero, then the function is reentrancy.
+ //
+ if (InterlockedCompareExchange32 (&gDxeStatusCode.StatusCodeNestStatus, 0, 1)) {
+ return EFI_DEVICE_ERROR;
+ }
+
+ if (FeaturePcdGet (PcdStatusCodeUseEfiSerial) || FeaturePcdGet (PcdStatusCodeUseHardSerial)) {
+ SerialStatusCodeReportWorker (
+ CodeType,
+ Value,
+ Instance,
+ CallerId,
+ Data
+ );
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseRuntimeMemory)) {
+ RtMemoryStatusCodeReportWorker (
+ gDxeStatusCode.RtMemoryStatusCodeTable[PHYSICAL_MODE],
+ CodeType,
+ Value,
+ Instance
+ );
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseDataHub)) {
+ DataHubStatusCodeReportWorker (
+ CodeType,
+ Value,
+ Instance,
+ CallerId,
+ Data
+ );
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseOEM)) {
+ OemHookStatusCodeReport (
+ CodeType,
+ Value,
+ Instance,
+ CallerId,
+ Data
+ );
+ }
+
+ //
+ // Restore the nest status of report
+ //
+ InterlockedCompareExchange32 (&gDxeStatusCode.StatusCodeNestStatus, 1, 0);
+
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Virtual address change notification call back. It converts global pointer
+ to virtual address.
+
+ @param Event Event whose notification function is being invoked.
+ @param Context Pointer to the notification functionˇŻs context, which is
+ always zero in current implementation.
+
+**/
+VOID
+EFIAPI
+VirtualAddressChangeCallBack (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ //
+ // Convert memory status code table to virtual address;
+ //
+ EfiConvertPointer (
+ 0,
+ (VOID **) &gDxeStatusCode.RtMemoryStatusCodeTable[PHYSICAL_MODE]
+ );
+}
+
diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ia32/Ia32StatusCode.dxs b/EdkModulePkg/Universal/StatusCode/Dxe/Common/StatusCode.dxs index 6371258e9a..6371258e9a 100644 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ia32/Ia32StatusCode.dxs +++ b/EdkModulePkg/Universal/StatusCode/Dxe/Common/StatusCode.dxs diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/DataHubStatusCodeWorker.c b/EdkModulePkg/Universal/StatusCode/Dxe/DataHubStatusCodeWorker.c new file mode 100644 index 0000000000..ca70bf4338 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/DataHubStatusCodeWorker.c @@ -0,0 +1,310 @@ +/** @file
+ Data Hub status code worker in DXE.
+
+Copyright (c) 2006, Intel Corporation. All rights reserved.
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+ Module Name: DataHubStatusCodeWorker.c
+
+**/
+#include "DxeStatusCode.h"
+
+//
+// Initialize FIFO to cache records.
+//
+EFI_LOCK mFifoLock = EFI_INITIALIZE_LOCK_VARIABLE (EFI_TPL_HIGH_LEVEL);
+LIST_ENTRY mRecordsFifo = INITIALIZE_LIST_HEAD_VARIABLE (mRecordsFifo);
+UINTN mNumberOfRecords = 0;
+
+EFI_EVENT mLogDataHubEvent;
+//
+// Cache data hub protocol.
+//
+EFI_DATA_HUB_PROTOCOL *mDataHubProtocol;
+
+
+/**
+ Return buffer of length DATAHUB_STATUSCODE_RECORD
+
+ @retval NULL Can not allocate free memeory for record.
+ @retval !NULL Point to buffer of record.
+
+**/
+DATAHUB_STATUSCODE_RECORD *
+AcquireRecordBuffer (
+ VOID
+ )
+{
+ DATAHUB_STATUSCODE_RECORD *Record;
+
+ Record = (DATAHUB_STATUSCODE_RECORD *) AllocateZeroPool (sizeof (DATAHUB_STATUSCODE_RECORD));
+ if (NULL == Record) {
+ return NULL;
+ }
+ Record->Signature = DATAHUB_STATUS_CODE_SIGNATURE;
+
+ EfiAcquireLock (&mFifoLock);
+ InsertTailList (&mRecordsFifo, &Record->Node);
+ mNumberOfRecords++;
+ EfiReleaseLock (&mFifoLock);
+
+ return Record;
+}
+
+
+/**
+ Release a mRecordBuffer entry allocated by AcquirRecordBuffer ().
+
+ @param Record Point to record buffer which is acquired by AcquirRecordBuffer()
+
+ @retval EFI_SUCCESS If DataRecord is valid.
+ @retval !EFI_SUCCESS The record list has empty.
+
+**/
+VOID
+FreeRecordBuffer (
+ IN DATAHUB_STATUSCODE_RECORD *Record
+ )
+/*++
+
+Routine Description:
+
+ Release a mRecordBuffer entry allocated by AquireEmptyRecordBuffer ().
+
+Arguments:
+
+ RecordBuffer - Data to free
+
+Returns:
+
+ EFI_SUCCESS - If DataRecord is valid
+ EFI_UNSUPPORTED - The record list has empty
+
+--*/
+{
+ ASSERT (Record != NULL);
+ ASSERT (mNumberOfRecords != 0);
+
+ EfiAcquireLock (&mFifoLock);
+ RemoveEntryList (&Record->Node);
+ mNumberOfRecords--;
+ EfiReleaseLock (&mFifoLock);
+
+ FreePool (Record);
+}
+
+
+/**
+ Report status code into DataHub.
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.
+
+
+ @param Data This optional parameter may be used to pass additional data
+
+ @retval EFI_OUT_OF_RESOURCES Can not acquire record buffer.
+ @retval EFI_SUCCESS Success to cache status code and signal log data event.
+
+**/
+EFI_STATUS
+DataHubStatusCodeReportWorker (
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId,
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ )
+{
+ DATAHUB_STATUSCODE_RECORD *Record;
+ UINT32 ErrorLevel;
+ VA_LIST Marker;
+ CHAR8 *Format;
+ UINTN CharCount;
+
+ //
+ // See whether in runtime phase or not.
+ //
+ if (EfiAtRuntime ()) {
+ return EFI_SUCCESS;
+ }
+
+ Record = (DATAHUB_STATUSCODE_RECORD *) AcquireRecordBuffer ();
+ if (Record == NULL) {
+ //
+ // There are no empty record buffer in private buffers
+ //
+ return EFI_OUT_OF_RESOURCES;
+ }
+ //
+ // Construct Data Hub Extended Data
+ //
+ Record->CodeType = CodeType;
+ Record->Value = Value;
+ Record->Instance = Instance;
+
+ if (CallerId != NULL) {
+ CopyMem (&Record->CallerId, CallerId, sizeof (EFI_GUID));
+ }
+
+ if (Data != NULL) {
+ if (ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) {
+ CharCount = UnicodeVSPrintAsciiFormat (
+ (CHAR16 *) Record->ExtendData,
+ EFI_STATUS_CODE_DATA_MAX_SIZE,
+ Format,
+ Marker
+ );
+ //
+ // Change record data type from DebugType to String Type.
+ //
+ CopyGuid (&Record->Data.Type, &gEfiStatusCodeDataTypeStringGuid);
+ Record->Data.HeaderSize = Data->HeaderSize;
+ Record->Data.Size = (UINT16) ((CharCount + 1) * sizeof (CHAR16));
+ } else {
+ //
+ // Copy status code data header
+ //
+ CopyMem (&Record->Data, Data, sizeof (EFI_STATUS_CODE_DATA));
+
+ if (Data->Size > EFI_STATUS_CODE_DATA_MAX_SIZE) {
+ Record->Data.Size = EFI_STATUS_CODE_DATA_MAX_SIZE;
+ }
+ CopyMem (Record->ExtendData, Data + 1, Record->Data.Size);
+ }
+ }
+
+ gBS->SignalEvent (mLogDataHubEvent);
+
+ return EFI_SUCCESS;
+}
+
+
+/**
+ The Event handler which will be notified to log data in Data Hub.
+
+ @param Event Instance of the EFI_EVENT to signal whenever data is
+ available to be logged in the system.
+ @param Context Context of the event.
+
+**/
+VOID
+EFIAPI
+LogDataHubEventCallBack (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ DATAHUB_STATUSCODE_RECORD *Record;
+ UINTN Size;
+ UINT64 DataRecordClass;
+ LIST_ENTRY *Node;
+
+ //
+ // Log DataRecord in Data Hub.
+ // Journal records fifo to find all record entry.
+ //
+ //
+ for (Node = mRecordsFifo.ForwardLink; Node != &mRecordsFifo;) {
+ Record = CR (Node, DATAHUB_STATUSCODE_RECORD, Node, DATAHUB_STATUS_CODE_SIGNATURE);
+ Node = Node->ForwardLink;
+
+ //
+ // Add in the size of the header we added.
+ //
+ Size = sizeof (DATAHUB_STATUSCODE_RECORD) + Record->Data.Size;
+
+ if ((Record->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) {
+ DataRecordClass = EFI_DATA_RECORD_CLASS_PROGRESS_CODE;
+ } else if ((Record->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) {
+ DataRecordClass = EFI_DATA_RECORD_CLASS_ERROR;
+ } else if ((Record->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) {
+ DataRecordClass = EFI_DATA_RECORD_CLASS_DEBUG;
+ } else {
+ //
+ // Should never get here.
+ //
+ DataRecordClass = EFI_DATA_RECORD_CLASS_DEBUG |
+ EFI_DATA_RECORD_CLASS_ERROR |
+ EFI_DATA_RECORD_CLASS_DATA |
+ EFI_DATA_RECORD_CLASS_PROGRESS_CODE;
+ }
+
+ //
+ // Log DataRecord in Data Hub
+ //
+
+ mDataHubProtocol->LogData (
+ mDataHubProtocol,
+ &gEfiStatusCodeGuid,
+ &gEfiStatusCodeRuntimeProtocolGuid,
+ DataRecordClass,
+ Record,
+ (UINT32) Size
+ );
+
+ FreeRecordBuffer (Record);
+ }
+}
+
+
+/**
+ Initialize data hubstatus code.
+ Create a data hub listener.
+
+ @return The function always return EFI_SUCCESS
+
+**/
+EFI_STATUS
+DataHubStatusCodeInitializeWorker (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+
+ Status = gBS->LocateProtocol (
+ &gEfiDataHubProtocolGuid,
+ NULL,
+ (VOID **) &mDataHubProtocol
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Create a Notify Event to log data in Data Hub
+ //
+ Status = gBS->CreateEvent (
+ EFI_EVENT_NOTIFY_SIGNAL,
+ EFI_TPL_CALLBACK,
+ LogDataHubEventCallBack,
+ NULL,
+ &mLogDataHubEvent
+ );
+
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
+
+
diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.c b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.c new file mode 100644 index 0000000000..4b942187d3 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.c @@ -0,0 +1,149 @@ +/** @file
+ Status Code Architectural Protocol implementation as defined in Tiano
+ Architecture Specification.
+
+ This driver has limited functionality at runtime and will not log to Data Hub
+ at runtime.
+
+ Notes:
+ This driver assumes the following ReportStatusCode strategy:
+ PEI -> uses PeiReportStatusCode
+ DXE IPL -> uses PeiReportStatusCode
+ early DXE -> uses PeiReportStatusCode via HOB
+ DXE -> This driver
+ RT -> This driver
+
+// Copyright (c) 2006, Intel Corporation. All rights reserved.
+// This software and associated documentation (if any) is furnished
+// under a license and may only be used or copied in accordance
+// with the terms of the license. Except as permitted by such
+// license, no part of this software or documentation may be
+// reproduced, stored in a retrieval system, or transmitted in any
+// form or by any means without the express written consent of
+// Intel Corporation.
+
+ Module Name: StatusCode.c
+
+**/
+
+#include "DxeStatusCode.h"
+
+/**
+
+ Dispatch initialization request to sub status code devices based on
+ customized feature flags.
+
+**/
+VOID
+InitializationDispatcherWorker (
+ VOID
+ )
+{
+ EFI_PEI_HOB_POINTERS Hob;
+ MEMORY_STATUSCODE_PACKET_HEADER *PacketHeader;
+ MEMORY_STATUSCODE_RECORD *Record;
+ UINTN ExpectedPacketIndex = 0;
+ UINTN Index;
+ VOID *HobStart;
+
+ //
+ // If enable UseSerial, then initialize serial port.
+ // if enable UseRuntimeMemory, then initialize runtime memory status code worker.
+ // if enable UseDataHub, then initialize data hub status code worker.
+ //
+ if (FeaturePcdGet (PcdStatusCodeUseEfiSerial)) {
+ EfiSerialStatusCodeInitializeWorker ();
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseHardSerial)) {
+ SerialPortInitialize ();
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseRuntimeMemory)) {
+ RtMemoryStatusCodeInitializeWorker ();
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseDataHub)) {
+ DataHubStatusCodeInitializeWorker ();
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseOEM)) {
+ OemHookStatusCodeInitialize ();
+ }
+
+ //
+ // Replay Status code which saved in GUID'ed HOB to all supported device.
+ //
+
+ //
+ // Journal GUID'ed HOBs to find all record entry, if found,
+ // then output record to support replay device.
+ //
+ Hob.Raw = GetFirstGuidHob (&gMemoryStatusCodeRecordGuid);
+ HobStart = Hob.Raw;
+ while (Hob.Raw != NULL) {
+ PacketHeader = (MEMORY_STATUSCODE_PACKET_HEADER *) GET_GUID_HOB_DATA (Hob.Guid);
+ if (PacketHeader->PacketIndex == ExpectedPacketIndex) {
+ Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1);
+ for (Index = 0; Index < PacketHeader->RecordIndex; Index++) {
+ //
+ // Dispatch records to devices based on feature flag.
+ //
+ if (FeaturePcdGet (PcdStatusCodeReplayInSerial) &&
+ (FeaturePcdGet (PcdStatusCodeUseHardSerial) ||
+ FeaturePcdGet (PcdStatusCodeUseEfiSerial))) {
+ SerialStatusCodeReportWorker (
+ Record[Index].CodeType,
+ Record[Index].Value,
+ Record[Index].Instance,
+ NULL,
+ NULL
+ );
+ }
+ if (FeaturePcdGet (PcdStatusCodeReplayInRuntimeMemory) &&
+ FeaturePcdGet (PcdStatusCodeUseRuntimeMemory)) {
+ RtMemoryStatusCodeReportWorker (
+ gDxeStatusCode.RtMemoryStatusCodeTable[PHYSICAL_MODE],
+ Record[Index].CodeType,
+ Record[Index].Value,
+ Record[Index].Instance
+ );
+ }
+ if (FeaturePcdGet (PcdStatusCodeReplayInDataHub) &&
+ FeaturePcdGet (PcdStatusCodeUseDataHub)) {
+ DataHubStatusCodeReportWorker (
+ Record[Index].CodeType,
+ Record[Index].Value,
+ Record[Index].Instance,
+ NULL,
+ NULL
+ );
+ }
+ if (FeaturePcdGet (PcdStatusCodeReplayInOEM) &&
+ FeaturePcdGet (PcdStatusCodeUseOEM)) {
+ OemHookStatusCodeReport (
+ Record[Index].CodeType,
+ Record[Index].Value,
+ Record[Index].Instance,
+ NULL,
+ NULL
+ );
+ }
+ }
+ ExpectedPacketIndex++;
+
+ //
+ // See whether there is gap of packet or not
+ //
+ if (HobStart) {
+ HobStart = NULL;
+ Hob.Raw = HobStart;
+ continue;
+ }
+ } else if (HobStart != NULL) {
+ //
+ // Cache the found packet for improve the performance
+ //
+ HobStart = Hob.Raw;
+ }
+
+ Hob.Raw = GetNextGuidHob (&gMemoryStatusCodeRecordGuid, Hob.Raw);
+ }
+}
+
diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.h b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.h new file mode 100644 index 0000000000..eeb6dcb720 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.h @@ -0,0 +1,238 @@ +/*++
+
+Copyright (c) 2006, Intel Corporation. All rights reserved.
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+Module Name:
+
+ DxeStatusCode.h
+
+Abstract:
+
+ Header file of EFI DXE/RT Status Code.
+
+--*/
+
+#ifndef __DXE_STATUS_CODE_H__
+#define __DXE_STATUS_CODE_H__
+
+//
+// Data hub worker definition
+//
+#define MAX_NUMBER_DATAHUB_RECORDS 1000
+#define DATAHUB_BYTES_PER_RECORD EFI_STATUS_CODE_DATA_MAX_SIZE
+#define EMPTY_RECORD_TAG 0xFF
+#define DATAHUB_STATUS_CODE_SIGNATURE EFI_SIGNATURE_32 ('B', 'D', 'H', 'S')
+
+//
+// Address type of pointer.
+// The point type always equal to PHYSICAL_MODE on IA32/X64/EBC architecture
+// Otherwise, VIRTUAL_MODE/PHYSICAL_MODE would be used on Ipf architecture,
+//
+enum {
+ PHYSICAL_MODE,
+ VIRTUAL_MODE
+};
+
+typedef struct {
+ UINTN Signature;
+ LIST_ENTRY Node;
+ EFI_STATUS_CODE_TYPE CodeType;
+ EFI_STATUS_CODE_VALUE Value;
+ UINT32 Instance;
+ EFI_GUID CallerId;
+ EFI_STATUS_CODE_DATA Data;
+ UINT8 ExtendData[EFI_STATUS_CODE_DATA_MAX_SIZE];
+} DATAHUB_STATUSCODE_RECORD;
+
+
+//
+// Runtime memory status code worker definition
+//
+typedef struct {
+ UINT32 RecordIndex;
+ UINT32 NumberOfRecords;
+ UINT32 MaxRecordsNumber;
+} RUNTIME_MEMORY_STATUSCODE_HEADER;
+
+
+typedef struct {
+ //
+ // Report operation nest status.
+ // If it is set, then the report operation has nested.
+ //
+ UINT32 StatusCodeNestStatus;
+ //
+ // Runtime status code management header, the records buffer is following it.
+ //
+ RUNTIME_MEMORY_STATUSCODE_HEADER *RtMemoryStatusCodeTable[2];
+} DXE_STATUS_CODE_CONTROLLER;
+
+
+/**
+
+ Dispatch initialization request to sub status code devices based on
+ customized feature flags.
+
+**/
+VOID
+InitializationDispatcherWorker (
+ VOID
+ );
+
+
+/**
+ Initialize serial status code worker.
+
+ @return The function always return EFI_SUCCESS
+
+**/
+EFI_STATUS
+EfiSerialStatusCodeInitializeWorker (
+ VOID
+ );
+
+
+/**
+ Convert status code value and extended data to readable ASCII string, send string to serial I/O device.
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.
+
+
+ @param Data This optional parameter may be used to pass additional data
+
+ @return The function always return EFI_SUCCESS.
+
+**/
+EFI_STATUS
+SerialStatusCodeReportWorker (
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId,
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ );
+
+/**
+ Initialize runtime memory status code.
+
+ @return The function always return EFI_SUCCESS
+
+**/
+EFI_STATUS
+RtMemoryStatusCodeInitializeWorker (
+ VOID
+ );
+
+/**
+ Report status code into runtime memory. If the runtime pool is full, roll back to the
+ first record and overwrite it.
+
+ @param RtMemoryStatusCodeTable
+ Point to Runtime memory table header.
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+ @return The function always return EFI_SUCCESS.
+
+**/
+EFI_STATUS
+RtMemoryStatusCodeReportWorker (
+ RUNTIME_MEMORY_STATUSCODE_HEADER *RtMemoryStatusCodeTable,
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance
+ );
+
+/**
+ Initialize data hubstatus code.
+ Create a data hub listener.
+
+ @return The function always return EFI_SUCCESS
+
+**/
+EFI_STATUS
+DataHubStatusCodeInitializeWorker (
+ VOID
+ );
+
+
+/**
+ Report status code into DataHub.
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.
+
+
+ @param Data This optional parameter may be used to pass additional data
+
+ @retval EFI_OUT_OF_RESOURCES Can not acquire record buffer.
+ @retval EFI_SUCCESS Success to cache status code and signal log data event.
+
+**/
+EFI_STATUS
+DataHubStatusCodeReportWorker (
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId,
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ );
+
+//
+// declaration of DXE status code controller.
+//
+extern DXE_STATUS_CODE_CONTROLLER gDxeStatusCode;
+
+#endif
diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.msa b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.msa new file mode 100644 index 0000000000..061ea92b30 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.msa @@ -0,0 +1,187 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.-->
+<ModuleSurfaceArea xsi:schemaLocation="http://www.TianoCore.org/2006/Edk2.0 http://www.TianoCore.org/2006/Edk2.0/SurfaceArea.xsd" xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <MsaHeader>
+ <ModuleName>DxeStatusCode</ModuleName>
+ <ModuleType>DXE_RUNTIME_DRIVER</ModuleType>
+ <GuidValue>FEDE0A1B-BCA2-4A9F-BB2B-D9FD7DEC2E9F</GuidValue>
+ <Version>1.0</Version>
+ <Abstract>DXE status code driver.</Abstract>
+ <Description>
+ Status Code Architectural Protocol implementation as defined in Tiano
+ Architecture Specification. This driver has limited functionality
+ at runtime and will not log to Data Hub at runtime.
+ </Description>
+ <Copyright>Copyright (c) 2006, Intel Corporation.</Copyright>
+ <License>All rights reserved.
+ This software and associated documentation (if any) is furnished
+ under a license and may only be used or copied in accordance
+ with the terms of the license. Except as permitted by such
+ license, no part of this software or documentation may be
+ reproduced, stored in a retrieval system, or transmitted in any
+ form or by any means without the express written consent of
+ Intel Corporation.</License>
+ <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
+ </MsaHeader>
+ <ModuleDefinitions>
+ <SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
+ <BinaryModule>false</BinaryModule>
+ <OutputFileBasename>DxeStatusCode</OutputFileBasename>
+ </ModuleDefinitions>
+ <LibraryClassDefinitions>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>BaseLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>BaseMemoryLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>DebugLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>ReportStatusCodeLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>PrintLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>PcdLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>HobLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>UefiDriverEntryPoint</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>UefiBootServicesTableLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>UefiLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>MemoryAllocationLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>UefiRuntimeLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>SerialPortLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>OemHookStatusCodeLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>EdkDxeSalLib</Keyword>
+ </LibraryClass>
+ </LibraryClassDefinitions>
+ <SourceFiles>
+ <Filename>DxeStatusCode.c</Filename>
+ <Filename>DataHubStatusCodeWorker.c</Filename>
+ <Filename>RtMemoryStatusCodeWorker.c</Filename>
+ <Filename>SerialStatusCodeWorker.c</Filename>
+ <Filename SupArchList="IA32">Common/DxeStatusCodeCommon.c</Filename>
+ <Filename SupArchList="IA32">Common/StatusCode.dxs</Filename>
+ <Filename SupArchList="X64">Common/DxeStatusCodeCommon.c</Filename>
+ <Filename SupArchList="X64">Common/StatusCode.dxs</Filename>
+ <Filename SupArchList="EBC">Common/DxeStatusCodeCommon.c</Filename>
+ <Filename SupArchList="EBC">Common/StatusCode.dxs</Filename>
+ <Filename SupArchList="IPF">Ipf/DxeStatusCodeIpf.c</Filename>
+ <Filename SupArchList="IPF">Ipf/StatusCode.dxs</Filename>
+ </SourceFiles>
+ <PackageDependencies>
+ <Package PackageGuid="5E0E9358-46B6-4AE2-8218-4AB8B9BBDCEC"/>
+ <Package PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/>
+ </PackageDependencies>
+ <Protocols>
+ <Protocol Usage="ALWAYS_CONSUMED">
+ <ProtocolCName>gEfiExtendedSalStatusCodeServicesProtocolGuid</ProtocolCName>
+ </Protocol>
+ <Protocol Usage="ALWAYS_CONSUMED">
+ <ProtocolCName>gEfiSerialIoProtocolGuid</ProtocolCName>
+ </Protocol>
+ <Protocol Usage="ALWAYS_CONSUMED">
+ <ProtocolCName>gEfiDataHubProtocolGuid</ProtocolCName>
+ </Protocol>
+ </Protocols>
+ <Guids>
+ <GuidCNames Usage="SOMETIMES_CONSUMED">
+ <GuidCName>gMemoryStatusCodeRecordGuid</GuidCName>
+ </GuidCNames>
+ <GuidCNames Usage="SOMETIMES_CONSUMED">
+ <GuidCName>gEfiStatusCodeDataTypeStringGuid</GuidCName>
+ </GuidCNames>
+ <GuidCNames Usage="SOMETIMES_CONSUMED">
+ <GuidCName>gEfiStatusCodeGuid</GuidCName>
+ </GuidCNames>
+ </Guids>
+ <Externs>
+ <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
+ <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
+ <Extern>
+ <ModuleEntryPoint>DxeStatusCodeDriverEntry</ModuleEntryPoint>
+ </Extern>
+ <Extern>
+ <SetVirtualAddressMapCallBack>VirtualAddressChangeCallBack</SetVirtualAddressMapCallBack>
+ </Extern>
+ </Externs>
+ <PcdCoded>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseHardSerial</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseEfiSerial</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseRuntimeMemory</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseDataHub</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseOEM</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInSerial</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInDataHub</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInRuntimeMemory</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeReplayInOEM</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="DYNAMIC">
+ <C_Name>PcdStatusCodeRuntimeMemory</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ </PcdCoded>
+</ModuleSurfaceArea>
\ No newline at end of file diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/DxeStatusCodeIpf.c b/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/DxeStatusCodeIpf.c new file mode 100644 index 0000000000..756c274495 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/DxeStatusCodeIpf.c @@ -0,0 +1,201 @@ +/** @file
+ Status code driver for IA32/X64/EBC architecture.
+
+// Copyright (c) 2006, Intel Corporation. All rights reserved.
+// This software and associated documentation (if any) is furnished
+// under a license and may only be used or copied in accordance
+// with the terms of the license. Except as permitted by such
+// license, no part of this software or documentation may be
+// reproduced, stored in a retrieval system, or transmitted in any
+// form or by any means without the express written consent of
+// Intel Corporation.
+
+ Module Name: DxeStatusCodeIpf.c
+
+**/
+
+#include "DxeStatusCode.h"
+
+
+//
+// Delaration of DXE status code controller
+//
+DXE_STATUS_CODE_CONTROLLER gDxeStatusCode = {
+ //
+ // Initialize nest status as non nested.
+ //
+ 0,
+ {NULL, NULL}
+};
+
+/**
+
+ Main entry for Extended SAL ReportStatusCode Services
+
+ @param FunctionId Function Id which needed to be called
+ @param Arg2 Efi status code type
+ @param Arg3 Efi status code value
+ @param Arg4 Instance number
+ @param Arg5 Caller Id
+ @param Arg6 Efi status code data
+ @param Arg7 Not used
+ @param Arg8 Not used
+ @param ExtendedSalProc Esal Proc pointer
+ @param VirtualMode If this function is called in virtual mode
+ @param Global This module's global variable pointer
+
+ @return Value returned in SAL_RETURN_REGS
+
+--*/
+SAL_RETURN_REGS
+EFIAPI
+ReportEsalServiceEntry (
+ IN UINT64 FunctionId,
+ IN UINT64 Arg2,
+ IN UINT64 Arg3,
+ IN UINT64 Arg4,
+ IN UINT64 Arg5,
+ IN UINT64 Arg6,
+ IN UINT64 Arg7,
+ IN UINT64 Arg8,
+ IN SAL_EXTENDED_SAL_PROC ExtendedSalProc,
+ IN BOOLEAN VirtualMode,
+ IN VOID *Global
+ )
+{
+ SAL_RETURN_REGS ReturnVal;
+ DXE_STATUS_CODE_CONTROLLER *DxeStatusCode;
+
+ switch (FunctionId) {
+
+ case ReportStatusCodeService:
+
+ DxeStatusCode = (DXE_STATUS_CODE_CONTROLLER *) Global;
+
+ //
+ // Use atom operation to avoid the reentant of report.
+ // If current status is not zero, then the function is reentrancy.
+ //
+ if (InterlockedCompareExchange32 (&DxeStatusCode->StatusCodeNestStatus, 0, 1)) {
+ ReturnVal.Status = EFI_DEVICE_ERROR ;
+ return ReturnVal;
+ }
+
+ if (FeaturePcdGet (PcdStatusCodeUseEfiSerial) || FeaturePcdGet (PcdStatusCodeUseHardSerial)) {
+ SerialStatusCodeReportWorker (
+ (EFI_STATUS_CODE_TYPE) Arg2,
+ (EFI_STATUS_CODE_VALUE) Arg3,
+ (UINT32) Arg4,
+ (EFI_GUID *) Arg5,
+ (EFI_STATUS_CODE_DATA *) Arg6
+ );
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseRuntimeMemory)) {
+ RtMemoryStatusCodeReportWorker (
+ DxeStatusCode->RtMemoryStatusCodeTable[VirtualMode],
+ (EFI_STATUS_CODE_TYPE) Arg2,
+ (EFI_STATUS_CODE_VALUE) Arg3,
+ (UINT32) Arg4
+ );
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseDataHub)) {
+ DataHubStatusCodeReportWorker (
+ (EFI_STATUS_CODE_TYPE) Arg2,
+ (EFI_STATUS_CODE_VALUE) Arg3,
+ (UINT32) Arg4,
+ (EFI_GUID *) Arg5,
+ (EFI_STATUS_CODE_DATA *) Arg6
+ );
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseOEM)) {
+ OemHookStatusCodeReport (
+ (EFI_STATUS_CODE_TYPE) Arg2,
+ (EFI_STATUS_CODE_VALUE) Arg3,
+ (UINT32) Arg4,
+ (EFI_GUID *) Arg5,
+ (EFI_STATUS_CODE_DATA *) Arg6
+ );
+ }
+
+ //
+ // Restore the nest status of report
+ //
+ InterlockedCompareExchange32 (&DxeStatusCode->StatusCodeNestStatus, 1, 0);
+
+ ReturnVal.Status = EFI_SUCCESS;
+
+ break;
+
+ default:
+ ReturnVal.Status = EFI_SAL_INVALID_ARGUMENT;
+ break;
+ }
+
+ return ReturnVal;
+}
+
+/**
+
+ Install the ReportStatusCode runtime service.
+
+ @param ImageHandle Image handle of the loaded driver
+ @param SystemTable Pointer to the System Table
+
+ @return The function always returns success.
+
+**/
+EFI_STATUS
+EFIAPI
+DxeStatusCodeDriverEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ //
+ // Dispatch initialization request to supported devices
+ //
+ InitializationDispatcherWorker ();
+
+ //
+ // Initialize ESAL capabilities.
+ //
+ RegisterEsalClass (
+ &gEfiExtendedSalStatusCodeServicesProtocolGuid,
+ &gDxeStatusCode,
+ ReportEsalServiceEntry,
+ StatusCode,
+ NULL
+ );
+
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Virtual address change notification call back. It converts physical mode global pointer to
+ virtual mode.
+
+ @param Event Event whose notification function is being invoked.
+ @param Context Pointer to the notification functionˇŻs context, which is
+ always zero in current implementation.
+
+**/
+VOID
+EFIAPI
+VirtualAddressChangeCallBack (
+ IN EFI_EVENT Event,
+ IN VOID *Context
+ )
+{
+ gDxeStatusCode.RtMemoryStatusCodeTable[VIRTUAL_MODE] =
+ gDxeStatusCode.RtMemoryStatusCodeTable[PHYSICAL_MODE];
+
+ //
+ // Convert the physical mode pointer to virtual mode point.
+ //
+ EfiConvertPointer (
+ 0,
+ (VOID **) &gDxeStatusCode.RtMemoryStatusCodeTable[VIRTUAL_MODE]
+ );
+}
+
diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/StatusCode.dxs b/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/StatusCode.dxs new file mode 100644 index 0000000000..9d94fd79fa --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/StatusCode.dxs @@ -0,0 +1,27 @@ +#/*++
+#
+// Copyright (c) 2006, Intel Corporation. All rights reserved.
+// This software and associated documentation (if any) is furnished
+// under a license and may only be used or copied in accordance
+// with the terms of the license. Except as permitted by such
+// license, no part of this software or documentation may be
+// reproduced, stored in a retrieval system, or transmitted in any
+// form or by any means without the express written consent of
+// Intel Corporation.
+#
+# Module Name:
+#
+# IpfStatusCode.dxs
+#
+# Abstract:
+#
+# Dependency expression source file.
+#
+#--*/
+
+#include <AutoGen.h>
+#include <DxeDepex.h>
+
+DEPENDENCY_START
+ EFI_DATA_HUB_PROTOCOL_GUID AND EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID
+DEPENDENCY_END
diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c b/EdkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c new file mode 100644 index 0000000000..a0b70b8d95 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c @@ -0,0 +1,119 @@ +/** @file
+ Runtime memory status code worker in DXE.
+
+Copyright (c) 2006, Intel Corporation. All rights reserved.
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+ Module Name: RtMemoryStatusCodeWorker.c
+
+**/
+
+#include "DxeStatusCode.h"
+
+/**
+ Initialize runtime memory status code.
+
+ @return The function always return EFI_SUCCESS
+
+**/
+EFI_STATUS
+RtMemoryStatusCodeInitializeWorker (
+ VOID
+ )
+{
+ RUNTIME_MEMORY_STATUSCODE_HEADER *RtMemoryStatusCodeTable;
+
+ //
+ // Allocate runtime memory status code pool.
+ //
+ RtMemoryStatusCodeTable =
+ (RUNTIME_MEMORY_STATUSCODE_HEADER *) AllocatePool (
+ sizeof (RUNTIME_MEMORY_STATUSCODE_HEADER) + PcdGet16 (PcdStatusCodeRuntimeMemorySize) * 1024
+ );
+
+ ASSERT (NULL != RtMemoryStatusCodeTable);
+
+ RtMemoryStatusCodeTable->RecordIndex = 0;
+ RtMemoryStatusCodeTable->NumberOfRecords = 0;
+ RtMemoryStatusCodeTable->MaxRecordsNumber =
+ (PcdGet16 (PcdStatusCodeRuntimeMemorySize) * 1024) / sizeof (MEMORY_STATUSCODE_RECORD);
+
+ gDxeStatusCode.RtMemoryStatusCodeTable[PHYSICAL_MODE] = RtMemoryStatusCodeTable;
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Report status code into runtime memory. If the runtime pool is full, roll back to the
+ first record and overwrite it.
+
+ @param RtMemoryStatusCodeTable
+ Point to Runtime memory table header.
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+ @return The function always return EFI_SUCCESS.
+
+**/
+EFI_STATUS
+RtMemoryStatusCodeReportWorker (
+ RUNTIME_MEMORY_STATUSCODE_HEADER *RtMemoryStatusCodeTable,
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance
+ )
+{
+ MEMORY_STATUSCODE_RECORD *Record;
+
+ ASSERT (NULL != RtMemoryStatusCodeTable);
+
+ //
+ // Locate current record buffer.
+ //
+ Record = (MEMORY_STATUSCODE_RECORD *) (RtMemoryStatusCodeTable + 1);
+ Record = &Record[RtMemoryStatusCodeTable->RecordIndex++];
+
+ //
+ // Save status code.
+ //
+ Record->CodeType = CodeType;
+ Record->Value = Value;
+ Record->Instance = Instance;
+
+ //
+ // Record total number of records, we compare the number with max records number,
+ // if it is bigger than the max number, then the roll back had happened, the record index points to
+ // the first record. if it is less then max number, then the zero index is the first record.
+ //
+ RtMemoryStatusCodeTable->NumberOfRecords++;
+ if (RtMemoryStatusCodeTable->RecordIndex == RtMemoryStatusCodeTable->MaxRecordsNumber) {
+ //
+ // Roll back record index.
+ //
+ RtMemoryStatusCodeTable->RecordIndex = 0;
+ }
+
+
+ return EFI_SUCCESS;
+}
+
+
+
diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/SerialStatusCodeWorker.c b/EdkModulePkg/Universal/StatusCode/Dxe/SerialStatusCodeWorker.c new file mode 100644 index 0000000000..9f1f922269 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/SerialStatusCodeWorker.c @@ -0,0 +1,184 @@ +
+/** @file
+ Serial I/O status code reporting worker.
+
+Copyright (c) 2006, Intel Corporation. All rights reserved.
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+ Module Name: SerialStatusCodeWorker.c
+
+**/
+
+EFI_SERIAL_IO_PROTOCOL *SerialIoProtocol;
+
+/**
+ Initialize serial status code worker.
+
+ @return The function always return EFI_SUCCESS
+
+**/
+EFI_STATUS
+EfiSerialStatusCodeInitializeWorker (
+ VOID
+ )
+{
+ EFI_STATUS Status;
+
+ Status = gBS->LocateProtocol (
+ &gEfiSerialIoProtocolGuid,
+ NULL,
+ (VOID **) &SerialIoProtocol
+ );
+
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Convert status code value and extended data to readable ASCII string, send string to serial I/O device.
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.
+
+
+ @param Data This optional parameter may be used to pass additional data
+
+ @return The function always return EFI_SUCCESS.
+
+**/
+EFI_STATUS
+SerialStatusCodeReportWorker (
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId,
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ )
+{
+ CHAR8 *Filename;
+ CHAR8 *Description;
+ CHAR8 *Format;
+ CHAR8 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE];
+ UINT32 ErrorLevel;
+ UINT32 LineNumber;
+ UINTN CharCount;
+ VA_LIST Marker;
+ EFI_DEBUG_INFO *DebugInfo;
+
+ Buffer[0] = '\0';
+
+ if (Data != NULL &&
+ ReportStatusCodeExtractAssertInfo (CodeType, Value, Data, &Filename, &Description, &LineNumber)) {
+ //
+ // Print ASSERT() information into output buffer.
+ //
+ CharCount = AsciiSPrint (
+ Buffer,
+ EFI_STATUS_CODE_DATA_MAX_SIZE,
+ "\n\rDXE_ASSERT!: %a (%d): %a\n\r",
+ Filename,
+ LineNumber,
+ Description
+ );
+ } else if (Data != NULL &&
+ ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) {
+ //
+ // Print DEBUG() information into output buffer.
+ //
+ CharCount = AsciiVSPrint (
+ Buffer,
+ EFI_STATUS_CODE_DATA_MAX_SIZE,
+ Format,
+ Marker
+ );
+ } else if (Data != NULL &&
+ CompareGuid (&Data->Type, &gEfiStatusCodeSpecificDataGuid) &&
+ (CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) {
+ //
+ // Print specific data into output buffer.
+ //
+ DebugInfo = (EFI_DEBUG_INFO *) (Data + 1);
+ Marker = (VA_LIST) (DebugInfo + 1);
+ Format = (CHAR8 *) (((UINT64 *) Marker) + 12);
+
+ CharCount = AsciiVSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, Format, Marker);
+ } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) {
+ //
+ // Print ERROR information into output buffer.
+ //
+ CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "ERROR: C%x:V%x I%x", CodeType, Value, Instance);
+
+ //
+ // Make sure we don't try to print values that weren't intended to be printed, especially NULL GUID pointers.
+ //
+
+ if (CallerId != NULL) {
+ CharCount += AsciiSPrint (
+ &Buffer[CharCount - 1],
+ (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)),
+ " %g",
+ CallerId
+ );
+ }
+
+ if (Data) {
+ CharCount += AsciiSPrint (
+ &Buffer[CharCount - 1],
+ (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)),
+ " %x",
+ Data
+ );
+ }
+
+ CharCount += AsciiSPrint (
+ &Buffer[CharCount - 1],
+ (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)),
+ "\n\r"
+ );
+ } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) {
+ CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "PROGRESS CODE: V%x I%x\n\r", Value, Instance);
+ } else {
+ CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "Undefined: C%x:V%x I%x\n\r", CodeType, Value, Instance);
+ }
+
+
+ if (FeaturePcdGet (PcdStatusCodeUseHardSerial)) {
+ //
+ // Callout to SerialPort Lib function to do print.
+ //
+ SerialPortWrite (Buffer, CharCount);
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseEfiSerial)) {
+ SerialIoProtocol->Write (
+ SerialIoProtocol,
+ &CharCount,
+ Buffer
+ );
+ }
+
+ return EFI_SUCCESS;
+}
diff --git a/EdkModulePkg/Universal/StatusCode/Pei/MemoryStausCodeWorker.c b/EdkModulePkg/Universal/StatusCode/Pei/MemoryStausCodeWorker.c new file mode 100644 index 0000000000..229f557b2b --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Pei/MemoryStausCodeWorker.c @@ -0,0 +1,145 @@ +/** @file
+ Memory status code worker in PEI.
+
+Copyright (c) 2006, Intel Corporation. All rights reserved.
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+ Module Name: MemoryStatusCodeWorker.c
+
+**/
+
+/**
+ Create one memory status code GUID'ed HOB, use PacketIndex
+ to identify the packet.
+
+ @param PacketIndex Index of records packet.
+
+ @return The function always return EFI_SUCCESS
+
+**/
+MEMORY_STATUSCODE_PACKET_HEADER *
+CreateMemoryStatusCodePacket (
+ UINT16 PacketIndex
+ )
+{
+ MEMORY_STATUSCODE_PACKET_HEADER *PacketHeader;
+
+ //
+ // Build GUID'ed HOB with PCD defined size.
+ //
+ PacketHeader =
+ (MEMORY_STATUSCODE_PACKET_HEADER *) BuildGuidHob (
+ &gMemoryStatusCodeRecordGuid,
+ (PcdGet16 (PcdStatusCodeMemorySize) * 1024) + sizeof (MEMORY_STATUSCODE_PACKET_HEADER));
+ ASSERT (PacketHeader != NULL);
+
+ PacketHeader->MaxRecordsNumber = (PcdGet16 (PcdStatusCodeMemorySize) * 1024)/ sizeof (MEMORY_STATUSCODE_RECORD);
+ PacketHeader->PacketIndex = PacketIndex;
+ PacketHeader->RecordIndex = 0;
+
+ return PacketHeader;
+}
+
+
+
+/**
+ Initialize memory status code.
+ Create one GUID'ed HOB with PCD defined size. If create required size
+ GUID'ed HOB failed, then ASSERT().
+
+ @return The function always return EFI_SUCCESS
+
+**/
+EFI_STATUS
+MemoryStatusCodeInitializeWorker (
+ VOID
+ )
+{
+ //
+ // Create first memory status code GUID'ed HOB.
+ //
+ CreateMemoryStatusCodePacket (0);
+
+ return EFI_SUCCESS;
+}
+
+
+/**
+ Report status code into GUID'ed HOB..
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+ @return The function always return EFI_SUCCESS.
+
+**/
+EFI_STATUS
+MemoryStatusCodeReportWorker (
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance
+ )
+{
+
+ EFI_PEI_HOB_POINTERS Hob;
+ MEMORY_STATUSCODE_PACKET_HEADER *PacketHeader;
+ MEMORY_STATUSCODE_RECORD *Record = NULL;
+ UINT16 PacketIndex = 0;;
+
+ //
+ // Journal GUID'ed HOBs to find empty record entry, if found, then save status code in it.
+ // otherwise, create a new GUID'ed HOB.
+ //
+ Hob.Raw = GetFirstGuidHob (&gMemoryStatusCodeRecordGuid);
+ while (Hob.Raw != NULL) {
+ PacketHeader = (MEMORY_STATUSCODE_PACKET_HEADER *) GET_GUID_HOB_DATA (Hob.Guid);
+
+ //
+ // Check whether pccket is full or not.
+ //
+ if (PacketHeader->RecordIndex < PacketHeader->MaxRecordsNumber) {
+ Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1);
+ Record = &Record[PacketHeader->RecordIndex++];
+ break;
+ }
+ //
+ // Cache number of found packet in PacketIndex.
+ //
+ PacketIndex++;
+
+ Hob.Raw = GetNextGuidHob (&gMemoryStatusCodeRecordGuid, Hob.Raw);
+ }
+
+ if (NULL == Record) {
+ //
+ // In order to save status code , create new packet.
+ //
+ PacketHeader = CreateMemoryStatusCodePacket (PacketIndex);
+
+ Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1);
+ Record = &Record[PacketHeader->RecordIndex++];
+ }
+
+ Record->CodeType = CodeType;
+ Record->Instance = Instance;
+ Record->Value = Value;
+
+ return EFI_SUCCESS;
+}
diff --git a/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.c b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.c new file mode 100644 index 0000000000..9c36deecf0 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.c @@ -0,0 +1,176 @@ +
+/** @file
+ Generic PeiStatusCode Module.
+
+// Copyright (c) 2006, Intel Corporation. All rights reserved.
+// This software and associated documentation (if any) is furnished
+// under a license and may only be used or copied in accordance
+// with the terms of the license. Except as permitted by such
+// license, no part of this software or documentation may be
+// reproduced, stored in a retrieval system, or transmitted in any
+// form or by any means without the express written consent of
+// Intel Corporation.
+
+ Module Name: PeiStatusCode.c
+
+**/
+
+#include "PeiStatusCode.h"
+
+/**
+ Report status code to all supported device.
+ *
+ *
+ @param PeiServices
+
+ @param Type Indicates the type of status code being reported.
+ The type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.
+ @param Value Describes the current status of a hardware or software entity.
+ This includes information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance
+ information is unavailable, not meaningful, or not relevant. Valid instance numbers start with 1.
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ @param Data This optional parameter may be used to pass additional data.
+ Type EFI_STATUS_CODE_DATA is defined in "Related Definitions" below.
+ The contents of this data type may have additional GUID-specific data. The standard GUIDs and
+ their associated data structures are defined in the Intel? Platform Innovation Framework for EFI Status Codes Specification.
+**/
+EFI_STATUS
+EFIAPI
+ReportDispatcher (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_STATUS_CODE_TYPE Type,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId OPTIONAL,
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ );
+
+
+EFI_PEI_PROGRESS_CODE_PPI mStatusCodePpi = {
+ ReportDispatcher
+ };
+
+EFI_PEI_PPI_DESCRIPTOR mStatusCodePpiDescriptor = {
+ EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST,
+ &gEfiPeiStatusCodePpiGuid,
+ &mStatusCodePpi
+ };
+
+/**
+ Report status code to all supported device.
+ *
+ *
+ @param PeiServices
+
+ @param CodeType Indicates the type of status code being reported.
+ The type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below.
+ @param Value Describes the current status of a hardware or software entity.
+ This includes information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance
+ information is unavailable, not meaningful, or not relevant. Valid instance numbers start with 1.
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ @param Data This optional parameter may be used to pass additional data.
+ Type EFI_STATUS_CODE_DATA is defined in "Related Definitions" below.
+ The contents of this data type may have additional GUID-specific data. The standard GUIDs and
+ their associated data structures are defined in the Intel? Platform Innovation Framework for EFI Status Codes Specification.
+**/
+EFI_STATUS
+EFIAPI
+ReportDispatcher (
+ IN EFI_PEI_SERVICES **PeiServices,
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId OPTIONAL,
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ )
+{
+ if (FeaturePcdGet (PcdStatusCodeUseSerial)) {
+ SerialStatusCodeReportWorker (
+ CodeType,
+ Value,
+ Instance,
+ CallerId,
+ Data
+ );
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseMemory)) {
+ MemoryStatusCodeReportWorker (
+ CodeType,
+ Value,
+ Instance
+ );
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseOEM)) {
+ OemHookStatusCodeReport (
+ CodeType,
+ Value,
+ Instance,
+ CallerId,
+ Data
+ );
+ }
+
+ return EFI_SUCCESS;
+}
+
+/**
+ Initialize PEI status codes and publish the status code
+ PPI.
+
+ @param FfsHeader FV this PEIM was loaded from.
+ @param PeiServices General purpose services available to every PEIM.
+
+ @return The function always returns success.
+
+**/
+EFI_STATUS
+EFIAPI
+PeiStatusCodeDriverEntry (
+ IN EFI_FFS_FILE_HEADER *FfsHeader,
+ IN EFI_PEI_SERVICES **PeiServices
+ )
+{
+ EFI_STATUS Status;
+
+ //
+ // Dispatch initialization request to sub-statuscode-devices.
+ // If enable UseSerial, then initialize serial port.
+ // if enable UseMemory, then initialize memory status code worker.
+ // if enable UseOEM, then initialize Oem status code.
+ //
+ if (FeaturePcdGet (PcdStatusCodeUseSerial)) {
+ SerialPortInitialize();
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseMemory)) {
+ MemoryStatusCodeInitializeWorker ();
+ }
+ if (FeaturePcdGet (PcdStatusCodeUseOEM)) {
+ OemHookStatusCodeInitialize ();
+ }
+
+ //
+ // Install PeiStatusCodePpi.
+ // PeiServices use this Ppi to output status code.
+ // use library
+ Status = PeiServicesInstallPpi (&mStatusCodePpiDescriptor);
+ ASSERT_EFI_ERROR (Status);
+
+ return EFI_SUCCESS;
+}
+
diff --git a/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.h b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.h new file mode 100644 index 0000000000..42ab8a5013 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.h @@ -0,0 +1,100 @@ +
+/** @file
+ Heade file of status code PEIM
+
+ Copyright (c) 2006, Intel Corporation
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ Module Name: PeiStatusCode.h
+
+**/
+
+#ifndef __PEI_STATUS_CODE_H__
+#define __PEI_STATUS_CODE_H__
+
+
+/**
+ Convert status code value and extended data to readable ASCII string, send string to serial I/O device.
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.
+
+
+ @param Data This optional parameter may be used to pass additional data
+
+ @return The function always return EFI_SUCCESS.
+
+**/
+EFI_STATUS
+SerialStatusCodeReportWorker (
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId,
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ );
+
+
+/**
+ Initialize memory status code.
+ Create one GUID'ed HOB with PCD defined size. If create required size
+ GUID'ed HOB failed, then ASSERT().
+
+ @return The function always return EFI_SUCCESS
+
+**/
+EFI_STATUS
+MemoryStatusCodeInitializeWorker (
+ VOID
+ );
+
+/**
+ Report status code into GUID'ed HOB.
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+ @return The function always return EFI_SUCCESS.
+
+**/
+EFI_STATUS
+MemoryStatusCodeReportWorker (
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance
+ );
+
+#endif
diff --git a/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.msa b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.msa new file mode 100644 index 0000000000..7517e57a84 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.msa @@ -0,0 +1,115 @@ +<?xml version="1.0" encoding="UTF-8"?>
+<!--Copyright (c) 2006, Intel Corporation
+All rights reserved. This program and the accompanying materials
+are licensed and made available under the terms and conditions of the BSD License
+which accompanies this distribution. The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.-->
+<ModuleSurfaceArea xsi:schemaLocation="http://www.TianoCore.org/2006/Edk2.0 http://www.TianoCore.org/2006/Edk2.0/SurfaceArea.xsd" xmlns="http://www.TianoCore.org/2006/Edk2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <MsaHeader>
+ <ModuleName>PeiStatusCode</ModuleName>
+ <ModuleType>PEIM</ModuleType>
+ <GuidValue>1EC0F53A-FDE0-4576-8F25-7A1A410F58EB</GuidValue>
+ <Version>1.0</Version>
+ <Abstract>Generic Status code Pei driver</Abstract>
+ <Description>Customized output devices based on feature flags.</Description>
+ <Copyright>Copyright (c) 2006, Intel Corporation.</Copyright>
+ <License>All rights reserved.
+ This software and associated documentation (if any) is furnished
+ under a license and may only be used or copied in accordance
+ with the terms of the license. Except as permitted by such
+ license, no part of this software or documentation may be
+ reproduced, stored in a retrieval system, or transmitted in any
+ form or by any means without the express written consent of
+ Intel Corporation.</License>
+ <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
+ </MsaHeader>
+ <ModuleDefinitions>
+ <SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
+ <BinaryModule>false</BinaryModule>
+ <OutputFileBasename>PeiStatusCode</OutputFileBasename>
+ </ModuleDefinitions>
+ <LibraryClassDefinitions>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>BaseLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>BaseMemoryLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>DebugLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>PrintLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>ReportStatusCodeLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>SerialPortLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>HobLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>PcdLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>PeiServicesLib</Keyword>
+ </LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>OemHookStatusCodeLib</Keyword>
+ </LibraryClass>
+ </LibraryClassDefinitions>
+ <SourceFiles>
+ <Filename>SerialStatusCodeWorker.c</Filename>
+ <Filename>MemoryStausCodeWorker.c</Filename>
+ <Filename>PeiStatusCode.c</Filename>
+ <Filename>PeiStatusCode.c</Filename>
+ </SourceFiles>
+ <PackageDependencies>
+ <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
+ <Package PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/>
+ </PackageDependencies>
+ <PPIs>
+ <Ppi Usage="ALWAYS_CONSUMED">
+ <PpiCName>gEfiPeiStatusCodePpiGuid</PpiCName>
+ </Ppi>
+ </PPIs>
+ <Guids>
+ <GuidCNames Usage="SOMETIMES_CONSUMED">
+ <GuidCName>gMemoryStatusCodeRecordGuid</GuidCName>
+ </GuidCNames>
+ </Guids>
+ <Externs>
+ <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
+ <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
+ <Extern>
+ <ModuleEntryPoint>PeiStatusCodeDriverEntry</ModuleEntryPoint>
+ </Extern>
+ </Externs>
+ <PcdCoded>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseSerial</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseMemory</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="FEATURE_FLAG">
+ <C_Name>PcdStatusCodeUseOEM</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ <PcdEntry PcdItemType="DYNAMIC">
+ <C_Name>PcdStatusCodeMemorySize</C_Name>
+ <TokenSpaceGuidCName>gEfiGenericPlatformTokenSpaceGuid</TokenSpaceGuidCName>
+ <HelpText/>
+ </PcdEntry>
+ </PcdCoded>
+</ModuleSurfaceArea>
diff --git a/EdkModulePkg/Universal/StatusCode/Pei/SerialStatusCodeWorker.c b/EdkModulePkg/Universal/StatusCode/Pei/SerialStatusCodeWorker.c new file mode 100644 index 0000000000..fc22b624ec --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Pei/SerialStatusCodeWorker.c @@ -0,0 +1,147 @@ +
+/** @file
+ Serial I/O status code reporting worker.
+
+Copyright (c) 2006, Intel Corporation. All rights reserved.
+This software and associated documentation (if any) is furnished
+under a license and may only be used or copied in accordance
+with the terms of the license. Except as permitted by such
+license, no part of this software or documentation may be
+reproduced, stored in a retrieval system, or transmitted in any
+form or by any means without the express written consent of
+Intel Corporation.
+
+ Module Name: SerialStatusCodeWorker.c
+
+**/
+
+/**
+ Convert status code value and extended data to readable ASCII string, send string to serial I/O device.
+
+ @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitionsˇ± below.
+
+ @param Value Describes the current status of a hardware or software entity.
+ This included information about the class and subclass that is used to classify the entity
+ as well as an operation. For progress codes, the operation is the current activity.
+ For error codes, it is the exception. For debug codes, it is not defined at this time.
+ Type EFI_STATUS_CODE_VALUE is defined in ˇ°Related Definitionsˇ± below.
+ Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification.
+
+ @param Instance The enumeration of a hardware or software entity within the system.
+ A system may contain multiple entities that match a class/subclass pairing.
+ The instance differentiates between them. An instance of 0 indicates that instance information is unavailable,
+ not meaningful, or not relevant. Valid instance numbers start with 1.
+
+
+ @param CallerId This optional parameter may be used to identify the caller.
+ This parameter allows the status code driver to apply different rules to different callers.
+ Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification.
+
+
+ @param Data This optional parameter may be used to pass additional data
+
+ @return The function always return EFI_SUCCESS.
+
+**/
+EFI_STATUS
+SerialStatusCodeReportWorker (
+ IN EFI_STATUS_CODE_TYPE CodeType,
+ IN EFI_STATUS_CODE_VALUE Value,
+ IN UINT32 Instance,
+ IN EFI_GUID *CallerId,
+ IN EFI_STATUS_CODE_DATA *Data OPTIONAL
+ )
+{
+ CHAR8 *Filename;
+ CHAR8 *Description;
+ CHAR8 *Format;
+ CHAR8 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE];
+ UINT32 ErrorLevel;
+ UINT32 LineNumber;
+ UINTN CharCount;
+ VA_LIST Marker;
+ EFI_DEBUG_INFO *DebugInfo;
+
+ Buffer[0] = '\0';
+
+ if (Data != NULL &&
+ ReportStatusCodeExtractAssertInfo (CodeType, Value, Data, &Filename, &Description, &LineNumber)) {
+ //
+ // Print ASSERT() information into output buffer.
+ //
+ CharCount = AsciiSPrint (
+ Buffer,
+ EFI_STATUS_CODE_DATA_MAX_SIZE,
+ "\n\rPEI_ASSERT!: %a (%d): %a\n\r",
+ Filename,
+ LineNumber,
+ Description
+ );
+ } else if (Data != NULL &&
+ ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) {
+ //
+ // Print DEBUG() information into output buffer.
+ //
+ CharCount = AsciiVSPrint (
+ Buffer,
+ EFI_STATUS_CODE_DATA_MAX_SIZE,
+ Format,
+ Marker
+ );
+ } else if (Data != NULL &&
+ CompareGuid (&Data->Type, &gEfiStatusCodeSpecificDataGuid) &&
+ (CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) {
+ //
+ // Print specific data into output buffer.
+ //
+ DebugInfo = (EFI_DEBUG_INFO *) (Data + 1);
+ Marker = (VA_LIST) (DebugInfo + 1);
+ Format = (CHAR8 *) (((UINT64 *) Marker) + 12);
+
+ CharCount = AsciiVSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, Format, Marker);
+ } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) {
+ //
+ // Print ERROR information into output buffer.
+ //
+ CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "ERROR: C%x:V%x I%x", CodeType, Value, Instance);
+
+ //
+ // Make sure we don't try to print values that weren't intended to be printed, especially NULL GUID pointers.
+ //
+
+ if (CallerId != NULL) {
+ CharCount += AsciiSPrint (
+ &Buffer[CharCount - 1],
+ (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)),
+ " %g",
+ CallerId
+ );
+ }
+
+ if (Data) {
+ CharCount += AsciiSPrint (
+ &Buffer[CharCount - 1],
+ (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)),
+ " %x",
+ Data
+ );
+ }
+
+ CharCount += AsciiSPrint (
+ &Buffer[CharCount - 1],
+ (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)),
+ "\n\r"
+ );
+ } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) {
+ CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "PROGRESS CODE: V%x I%x\n\r", Value, Instance);
+ } else {
+ CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "Undefined: C%x:V%x I%x\n\r", CodeType, Value, Instance);
+ }
+
+ //
+ // Callout to SerialPort Lib function to do print.
+ //
+ SerialPortWrite (Buffer, CharCount);
+
+ return EFI_SUCCESS;
+}
diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/DebugAssert.c b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/DebugAssert.c deleted file mode 100644 index 75f0ed144d..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/DebugAssert.c +++ /dev/null @@ -1,231 +0,0 @@ -/*++
-
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- DebugAssert.c
-
-Abstract:
-
- Produce EfiDebugAssertProtocol to enable EfiUtilityLib to function.
- The EfiUtilityLib is used by the EFI shell!
-
---*/
-
-#include "StatusCode.h"
-
-EFI_STATUS
-EFIAPI
-StatusCodeDebugAssert (
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,
- IN CHAR8 *FileName,
- IN INTN LineNumber,
- IN CHAR8 *Description
- );
-
-EFI_STATUS
-EFIAPI
-StatusCodeDebugPrint (
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,
- IN UINTN ErrorLevel,
- IN CHAR8 *Format,
- IN VA_LIST Marker
- );
-
-EFI_STATUS
-EFIAPI
-StatusCodePostCode (
- IN EFI_DEBUG_ASSERT_PROTOCOL * This,
- IN UINT16 PostCode,
- IN CHAR8 *PostCodeString OPTIONAL
- );
-
-EFI_STATUS
-EFIAPI
-StatusCodeGetErrorLevel (
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,
- IN UINTN *ErrorLevel
- );
-
-EFI_STATUS
-EFIAPI
-StatusCodeSetErrorLevel (
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,
- IN UINTN ErrorLevel
- );
-
-//
-// Protocol instance, there can be only one.
-//
-EFI_HANDLE mHandle = NULL;
-EFI_DEBUG_ASSERT_PROTOCOL mDebugAssertProtocol = {
- StatusCodeDebugAssert,
- StatusCodeDebugPrint,
- StatusCodePostCode,
- StatusCodeGetErrorLevel,
- StatusCodeSetErrorLevel
-};
-
-//
-// Function implementations
-//
-EFI_STATUS
-EFIAPI
-StatusCodeDebugAssert (
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,
- IN CHAR8 *FileName,
- IN INTN LineNumber,
- IN CHAR8 *Description
- )
-/*++
-
-Routine Description:
-
- Worker function for ASSERT (). If Error Logging hub is loaded log ASSERT
- information. If Error Logging hub is not loaded CpuBreakpoint ().
-
-Arguments:
-
- This - Protocol instance.
- FileName - File name of failing routine.
- LineNumber - Line number of failing ASSERT().
- Description - Description, usually the assertion,
-
-Returns:
-
- EFI_SUCCESS The function always completes successfully.
-
---*/
-{
- DebugAssert (FileName, LineNumber, Description);
-
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-StatusCodeDebugPrint (
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,
- IN UINTN ErrorLevel,
- IN CHAR8 *Format,
- IN VA_LIST Marker
- )
-/*++
-
-Routine Description:
-
- Worker function for DEBUG (). If Error Logging hub is loaded log ASSERT
- information. If Error Logging hub is not loaded do nothing.
-
-Arguments:
-
- This - Protocol Instance.
- ErrorLevel - If error level is set do the debug print.
- Format - String to use for the print, followed by Print arguments.
-
-Returns:
-
- EFI_SUCCESS The function always completes successfully.
-
---*/
-{
- CHAR8 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE];
-
- AsciiVSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, Format, Marker);
- DebugPrint (ErrorLevel, Buffer);
-
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-StatusCodeGetErrorLevel (
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,
- IN UINTN *ErrorLevel
- )
-{
- *ErrorLevel = PcdGet32(PcdDebugPrintErrorLevel);
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-EFIAPI
-StatusCodeSetErrorLevel (
- IN EFI_DEBUG_ASSERT_PROTOCOL *This,
- IN UINTN ErrorLevel
- )
-{
- return EFI_UNSUPPORTED;
-}
-
-EFI_STATUS
-EFIAPI
-StatusCodePostCode (
- IN EFI_DEBUG_ASSERT_PROTOCOL * This,
- IN UINT16 PostCode,
- IN CHAR8 *PostCodeString OPTIONAL
- )
-/*++
-
-Routine Description:
-
- Write the code to IO ports 80 and 81.
-
-Arguments:
-
- This - Protocol Instance.
- PostCode - Code to write
- PostCodeString - String, currently ignored.
-
-Returns:
-
- EFI_SUCCESS The function always completes successfully.
-
---*/
-{
- IoWrite8 (0x80, (UINT8) (PostCode & 0xff));
- IoWrite8 (0x81, (UINT8) (PostCode >> 8));
-
- return EFI_SUCCESS;
-}
-
-EFI_STATUS
-InstallStatusCodeDebugAssert (
- VOID
- )
-/*++
-
-Routine Description:
-
- Install the status code debug assert protocol
-
-Arguments:
-
- None
-
-Returns:
-
- Results of call to InstallProtocolInterface.
-
---*/
-{
-
- DEBUG_CODE (
- gBS->InstallProtocolInterface (
- &mHandle,
- &gEfiDebugAssertProtocolGuid,
- EFI_NATIVE_INTERFACE,
- &mDebugAssertProtocol
- );
- );
-
- return EFI_SUCCESS;
-}
diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ia32/Ia32StatusCode.c b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ia32/Ia32StatusCode.c deleted file mode 100644 index d2e1009b7f..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ia32/Ia32StatusCode.c +++ /dev/null @@ -1,75 +0,0 @@ -/*++
-
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- Ia32StatusCode.c
-
-Abstract:
-
- Installs the ReportStatusCode runtime service.
-
---*/
-
-#include "StatusCode.h"
-
-//
-//
-//
-EFI_HANDLE gStatusCodeHandle = NULL;
-
-const EFI_STATUS_CODE_PROTOCOL gStatusCodeInstance = {
- StatusCodeReportStatusCode
-};
-
-//
-// Define the driver entry point
-//
-EFI_STATUS
-EFIAPI
-InstallStatusCode (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-/*++
-
-Routine Description:
-
- Install the ReportStatusCode runtime service.
-
-Arguments:
-
- ImageHandle Image handle of the loaded driver
- SystemTable Pointer to the System Table
-
-Returns:
-
- EFI_SUCCESS The function always returns success.
-
---*/
-{
- EFI_STATUS Status;
-
- //
- // Initialize RT status code
- //
- InitializeStatusCode (ImageHandle, SystemTable);
-
- Status = gBS->InstallMultipleProtocolInterfaces (
- &gStatusCodeHandle,
- &gEfiStatusCodeRuntimeProtocolGuid,
- &gStatusCodeInstance,
- NULL
- );
- ASSERT_EFI_ERROR (Status);
-
- return Status;
-}
diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.c b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.c deleted file mode 100644 index 62564c0cd8..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.c +++ /dev/null @@ -1,126 +0,0 @@ -/*++
-
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- IpfStatusCode.c
-
-Abstract:
-
- Contains the IPF installation function and an ESAL entry.
-
---*/
-
-#include "StatusCode.h"
-
-SAL_RETURN_REGS
-ReportStatusCodeEsalServicesClassCommonEntry (
- IN UINT64 FunctionId,
- IN UINT64 Arg2,
- IN UINT64 Arg3,
- IN UINT64 Arg4,
- IN UINT64 Arg5,
- IN UINT64 Arg6,
- IN UINT64 Arg7,
- IN UINT64 Arg8,
- IN SAL_EXTENDED_SAL_PROC ExtendedSalProc,
- IN BOOLEAN VirtualMode,
- IN VOID *Global
- )
-/*++
-
-Routine Description:
-
- Main entry for Extended SAL ReportStatusCode Services
-
-Arguments:
-
- FunctionId Function Id which needed to be called
- Arg2 Efi status code type
- Arg3 Efi status code value
- Arg4 Instance number
- Arg5 Caller Id
- Arg6 Efi status code data
- Arg7 Not used
- Arg8 Not used
- ExtendedSalProc Esal Proc pointer
- VirtualMode If this function is called in virtual mode
- Global This module's global variable pointer
-
-Returns:
-
- SAL_RETURN_REGS
-
---*/
-{
- SAL_RETURN_REGS ReturnVal;
-
- switch (FunctionId) {
-
- case ReportStatusCodeService:
- ReturnVal.Status = StatusCodeReportStatusCode (
- (EFI_STATUS_CODE_TYPE) Arg2,
- (EFI_STATUS_CODE_VALUE) Arg3,
- (UINT32) Arg4,
- (EFI_GUID *) Arg5,
- (EFI_STATUS_CODE_DATA *) Arg6
- );
- break;
-
- default:
- ReturnVal.Status = EFI_SAL_INVALID_ARGUMENT;
- break;
- }
-
- return ReturnVal;
-}
-
-EFI_STATUS
-EFIAPI
-InstallStatusCode (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-/*++
-
-Routine Description:
-
- Install the ReportStatusCode runtime service.
-
-Arguments:
-
- ImageHandle Image handle of the loaded driver
- SystemTable Pointer to the System Table
-
-Returns:
-
- EFI_SUCCESS The function always returns success.
-
---*/
-{
- //
- // Initialize RT status code
- //
- InitializeStatusCode (ImageHandle, SystemTable);
-
- //
- // Initialize ESAL capabilities
- //
- RegisterEsalClass (
- &gEfiExtendedSalStatusCodeServicesProtocolGuid,
- NULL,
- ReportStatusCodeEsalServicesClassCommonEntry,
- StatusCode,
- NULL
- );
-
- return EFI_SUCCESS;
-}
diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.dxs b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.dxs deleted file mode 100644 index aaa3efe3e1..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.dxs +++ /dev/null @@ -1,27 +0,0 @@ -#/*++
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# IpfStatusCode.dxs
-#
-# Abstract:
-#
-# Dependency expression source file.
-#
-#--*/
-
-#include <AutoGen.h>
-#include <DxeDepex.h>
-
-DEPENDENCY_START
- EFI_DATA_HUB_PROTOCOL_GUID AND EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID
-DEPENDENCY_END
diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.c b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.c deleted file mode 100644 index 13b6426beb..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.c +++ /dev/null @@ -1,172 +0,0 @@ -/*++
-
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- StatusCode.c
-
-Abstract:
-
- Status Code Architectural Protocol implementation as defined in Tiano
- Architecture Specification.
-
- This driver also depends on the DataHub, and will log all status code info
- to the DataHub. Fatal Errors are Printed to Standard Error (StdErr) and not
- logged to the data hub (If you crash what good is the data in the data hub).
-
- This driver has limited functionality at runtime and will not log to Data Hub
- at runtime.
-
- Notes:
- This driver assumes the following ReportStatusCode strategy:
- PEI -> uses PeiReportStatusCode
- DXE IPL -> uses PeiReportStatusCode
- early DXE -> uses PeiReportStatusCode via HOB
- DXE -> This driver
- RT -> This driver
-
---*/
-
-#include "StatusCode.h"
-
-EFI_LOCK mStatusCodeLock;
-BOOLEAN mStatusCodeFlag = FALSE;
-
-//
-// Function implemenations
-//
-
-
-EFI_STATUS
-EFIAPI
-StatusCodeReportStatusCode (
- IN EFI_STATUS_CODE_TYPE CodeType,
- IN EFI_STATUS_CODE_VALUE Value,
- IN UINT32 Instance,
- IN EFI_GUID *CallerId,
- IN EFI_STATUS_CODE_DATA *Data OPTIONAL
- )
-/*++
-
-Routine Description:
-
- Calls into the platform library which dispatches the platform specific
- listeners. For NT environments we still call back into PEI because the
- ReportStatusCode functionality requires Win32 services and is built into
- the SecMain.exe utility.
-
-Arguments:
-
- (See Tiano Runtime Specification)
-
-Returns:
-
- None
-
---*/
-{
- EFI_STATUS Status;
-
- //
- // Acquire the lock required to update mStatusCodeFlag
- //
- Status = EfiAcquireLockOrFail (&mStatusCodeLock);
- if (EFI_ERROR (Status)) {
- //
- // Check for reentrancy of the lock
- //
- return EFI_DEVICE_ERROR;
- }
- //
- // Check to see if we are already in the middle of a ReportStatusCode()
- //
- if (mStatusCodeFlag) {
- EfiReleaseLock (&mStatusCodeLock);
- return EFI_DEVICE_ERROR;
- }
- //
- // Set the flag to show we are in the middle of a ReportStatusCode()
- //
- mStatusCodeFlag = TRUE;
-
- //
- // Release the lock for updating mStatusCodeFlag
- //
- EfiReleaseLock (&mStatusCodeLock);
-
- //
- // Go do the work required to report a status code
- //
- RtPlatformReportStatusCode (CodeType, Value, Instance, CallerId, Data);
-
- //
- // Acquire the lock required to update mStatusCodeFlag
- //
- Status = EfiAcquireLockOrFail (&mStatusCodeLock);
- if (EFI_ERROR (Status)) {
- //
- // Check for reentrancy of the lock
- //
- return EFI_DEVICE_ERROR;
- }
- //
- // Clear the flag to show we are no longer in the middle of a ReportStatusCode()
- //
- mStatusCodeFlag = FALSE;
-
- //
- // Release the lock for updating mStatusCodeFlag
- //
- EfiReleaseLock (&mStatusCodeLock);
-
- return EFI_SUCCESS;
-}
-//
-// Protocol instance, there can be only one.
-//
-EFI_STATUS
-InitializeStatusCode (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-/*++
-
-Routine Description:
-
- Install Driver to produce Report Status Code Arch Protocol
-
-Arguments:
-
- (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT)
-
-Returns:
-
- EFI_SUCCESS - Logging Hub protocol installed
- Other - No protocol installed, unload driver.
-
---*/
-{
-
- EfiInitializeLock (&mStatusCodeLock, EFI_TPL_HIGH_LEVEL);
-
- //
- // Call the platform hook to initialize the different listeners.
- //
- RtPlatformStatusCodeInitialize ();
-
- //
- // Register a protocol that EfiUtilityLib can use to implement DEBUG () and ASSERT ()
- // Macros.
- //
- InstallStatusCodeDebugAssert ();
-
- return EFI_SUCCESS;
-}
diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.h b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.h deleted file mode 100644 index cb4a4d9def..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.h +++ /dev/null @@ -1,64 +0,0 @@ -/*++
-
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- StatusCode.h
-
-Abstract:
-
- EFI DXE/RT Status Code include file.
-
---*/
-
-#ifndef _EFI_RUNTIME_STATUS_CODE_H_
-#define _EFI_RUNTIME_STATUS_CODE_H_
-
-//
-// Function prototypes
-//
-
-EFI_STATUS
-EFIAPI
-StatusCodeReportStatusCode (
- IN EFI_STATUS_CODE_TYPE CodeType,
- IN EFI_STATUS_CODE_VALUE Value,
- IN UINT32 Instance,
- IN EFI_GUID * CallerId,
- IN EFI_STATUS_CODE_DATA * Data OPTIONAL
- )
-;
-
-EFI_STATUS
-InitializeStatusCode (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-;
-
-EFI_STATUS
-InstallStatusCodeDebugAssert (
- VOID
- )
-;
-
-//
-// Driver entry point
-//
-EFI_STATUS
-EFIAPI
-InstallStatusCode (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-;
-
-#endif
diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.msa b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.msa deleted file mode 100644 index f8364b6f80..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.msa +++ /dev/null @@ -1,97 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?>
-<!--Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.-->
-<ModuleSurfaceArea xmlns="http://www.TianoCore.org/2006/Edk2.0">
- <MsaHeader>
- <ModuleName>StatusCode</ModuleName>
- <ModuleType>DXE_RUNTIME_DRIVER</ModuleType>
- <GuidValue>9F455D3B-2B8A-4c06-960B-A71B9714B9CD</GuidValue>
- <Version>1.0</Version>
- <Abstract>Component description file for StatusCode module.</Abstract>
- <Description>This driver implement Status Code Architectural Protocol and log all status code info. </Description>
- <Copyright>Copyright (c) 2006, Intel Corporation</Copyright>
- <License>All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.</License>
- <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
- </MsaHeader>
- <ModuleDefinitions>
- <SupportedArchitectures>IA32 X64 IPF EBC</SupportedArchitectures>
- <BinaryModule>false</BinaryModule>
- <OutputFileBasename>StatusCode</OutputFileBasename>
- </ModuleDefinitions>
- <LibraryClassDefinitions>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>BaseLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiRuntimeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiDriverEntryPoint</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>DebugLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>PrintLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>IoLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>EdkRtPlatformStatusCodeLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>EdkDxeSalLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>UefiBootServicesTableLib</Keyword>
- </LibraryClass>
- <LibraryClass Usage="ALWAYS_CONSUMED">
- <Keyword>PcdLib</Keyword>
- </LibraryClass>
- </LibraryClassDefinitions>
- <SourceFiles>
- <Filename>DebugAssert.c</Filename>
- <Filename>StatusCode.c</Filename>
- <Filename>StatusCode.h</Filename>
- <Filename SupArchList="IA32">Ia32/Ia32StatusCode.c</Filename>
- <Filename SupArchList="IA32">Ia32/Ia32StatusCode.dxs</Filename>
- <Filename SupArchList="X64">x64/x64StatusCode.c</Filename>
- <Filename SupArchList="X64">x64/x64StatusCode.dxs</Filename>
- <Filename SupArchList="IPF">Ipf/IpfStatusCode.c</Filename>
- <Filename SupArchList="IPF">Ipf/IpfStatusCode.dxs</Filename>
- </SourceFiles>
- <PackageDependencies>
- <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
- <Package PackageGuid="B6EC423C-21D2-490D-85C6-DD5864EAA674"/>
- </PackageDependencies>
- <Protocols>
- <Protocol Usage="ALWAYS_CONSUMED">
- <ProtocolCName>gEfiDebugAssertProtocolGuid</ProtocolCName>
- </Protocol>
- <Protocol Usage="ALWAYS_CONSUMED">
- <ProtocolCName>gEfiExtendedSalStatusCodeServicesProtocolGuid</ProtocolCName>
- </Protocol>
- </Protocols>
- <Externs>
- <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
- <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
- <Extern>
- <ModuleEntryPoint>InstallStatusCode</ModuleEntryPoint>
- </Extern>
- </Externs>
-</ModuleSurfaceArea>
\ No newline at end of file diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.c b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.c deleted file mode 100644 index 4c8ad0c81a..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.c +++ /dev/null @@ -1,75 +0,0 @@ -/*++
-
-Copyright (c) 2006, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
-
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- x64StatusCode.c
-
-Abstract:
-
- Installs the ReportStatusCode runtime service.
-
---*/
-
-#include "StatusCode.h"
-
-//
-//
-//
-EFI_HANDLE gStatusCodeHandle = NULL;
-
-const EFI_STATUS_CODE_PROTOCOL gStatusCodeInstance = {
- StatusCodeReportStatusCode
-};
-
-//
-// Define the driver entry point
-//
-EFI_STATUS
-EFIAPI
-InstallStatusCode (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
- )
-/*++
-
-Routine Description:
-
- Install the ReportStatusCode runtime service.
-
-Arguments:
-
- ImageHandle Image handle of the loaded driver
- SystemTable Pointer to the System Table
-
-Returns:
-
- EFI_SUCCESS The function always returns success.
-
---*/
-{
- EFI_STATUS Status;
-
- //
- // Initialize RT status code
- //
- InitializeStatusCode (ImageHandle, SystemTable);
-
- Status = gBS->InstallMultipleProtocolInterfaces (
- &gStatusCodeHandle,
- &gEfiStatusCodeRuntimeProtocolGuid,
- &gStatusCodeInstance,
- NULL
- );
- ASSERT_EFI_ERROR (Status);
-
- return Status;
-}
diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.dxs b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.dxs deleted file mode 100644 index 74cf23eee3..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.dxs +++ /dev/null @@ -1,27 +0,0 @@ -#/*++
-#
-# Copyright (c) 2006, Intel Corporation
-# All rights reserved. This program and the accompanying materials
-# are licensed and made available under the terms and conditions of the BSD License
-# which accompanies this distribution. The full text of the license may be found at
-# http://opensource.org/licenses/bsd-license.php
-#
-# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-#
-# Module Name:
-#
-# x64StatusCode.dxs
-#
-# Abstract:
-#
-# Dependency expression source file.
-#
-#--*/
-
-#include <AutoGen.h>
-#include <DxeDepex.h>
-
-DEPENDENCY_START
- EFI_DATA_HUB_PROTOCOL_GUID AND EFI_CPU_IO_PROTOCOL_GUID
-DEPENDENCY_END
|