]> git.proxmox.com Git - mirror_edk2.git/blobdiff - CorebootModulePkg/Library/CbParseLib/CbParseLib.c
CorebootModulePkg/CbSupportDxe: Remove SCI_EN setting
[mirror_edk2.git] / CorebootModulePkg / Library / CbParseLib / CbParseLib.c
index 305e38fa47473028be96692a7de1d1ba2f322629..da227dea5e275104efa92ce3fddb62344d32881e 100644 (file)
@@ -18,6 +18,7 @@
 #include <Library/BaseMemoryLib.h>\r
 #include <Library/DebugLib.h>\r
 #include <Library/PcdLib.h>\r
+#include <Library/IoLib.h>\r
 #include <Library/CbParseLib.h>\r
 \r
 #include <IndustryStandard/Acpi.h>\r
@@ -94,6 +95,7 @@ CbCheckSum16 (
 \r
 **/\r
 VOID *\r
+EFIAPI\r
 FindCbTag (\r
   IN  VOID     *Start,\r
   IN  UINT32   Tag\r
@@ -175,6 +177,7 @@ FindCbTag (
 \r
 **/\r
 RETURN_STATUS\r
+EFIAPI\r
 FindCbMemTable (\r
   IN  struct cbmem_root  *Root,\r
   IN  UINT32             TableId,\r
@@ -237,6 +240,7 @@ FindCbMemTable (
 \r
 **/\r
 RETURN_STATUS\r
+EFIAPI\r
 CbParseMemoryInfo (\r
   IN  CB_MEM_INFO_CALLBACK  MemInfoCallback,\r
   IN  VOID                  *pParam\r
@@ -287,6 +291,7 @@ CbParseMemoryInfo (
 \r
 **/\r
 RETURN_STATUS\r
+EFIAPI\r
 CbParseCbMemTable (\r
   IN  UINT32     TableId,\r
   OUT VOID       **pMemTable,\r
@@ -343,6 +348,7 @@ CbParseCbMemTable (
 \r
 **/\r
 RETURN_STATUS\r
+EFIAPI\r
 CbParseAcpiTable (\r
   OUT VOID       **pMemTable,\r
   OUT UINT32     *pMemTableSize\r
@@ -363,6 +369,7 @@ CbParseAcpiTable (
 \r
 **/\r
 RETURN_STATUS\r
+EFIAPI\r
 CbParseSmbiosTable (\r
   OUT VOID       **pMemTable,\r
   OUT UINT32     *pMemTableSize\r
@@ -386,6 +393,7 @@ CbParseSmbiosTable (
 \r
 **/\r
 RETURN_STATUS\r
+EFIAPI\r
 CbParseFadtInfo (\r
   OUT UINTN      *pPmCtrlReg,\r
   OUT UINTN      *pPmTimerReg,\r
@@ -470,6 +478,39 @@ CbParseFadtInfo (
         ASSERT(Fadt->Pm1aEvtBlk != 0);\r
         ASSERT(Fadt->Gpe0Blk != 0);\r
 \r
+        DEBUG_CODE_BEGIN ();\r
+          BOOLEAN    SciEnabled;\r
+\r
+          //\r
+          // Check the consistency of SCI enabling\r
+          //\r
+\r
+          //\r
+          // Get SCI_EN value\r
+          //\r
+          if (Fadt->Pm1CntLen == 4) {\r
+            SciEnabled = (IoRead32 (Fadt->Pm1aCntBlk) & BIT0)? TRUE : FALSE;\r
+          } else {\r
+            //\r
+            // if (Pm1CntLen == 2), use 16 bit IO read;\r
+            // if (Pm1CntLen != 2 && Pm1CntLen != 4), use 16 bit IO read as a fallback\r
+            //\r
+            SciEnabled = (IoRead16 (Fadt->Pm1aCntBlk) & BIT0)? TRUE : FALSE;\r
+          }\r
+\r
+          if (!(Fadt->Flags & EFI_ACPI_5_0_HW_REDUCED_ACPI) &&\r
+              (Fadt->SmiCmd == 0) &&\r
+              !SciEnabled) {\r
+            //\r
+            // The ACPI enabling status is inconsistent: SCI is not enabled but ACPI\r
+            // table does not provide a means to enable it through FADT->SmiCmd\r
+            //\r
+            DEBUG ((DEBUG_ERROR, "ERROR: The ACPI enabling status is inconsistent: SCI is not"\r
+              " enabled but the ACPI table does not provide a means to enable it through FADT->SmiCmd."\r
+              " This may cause issues in OS.\n"));\r
+            ASSERT (FALSE);\r
+          }\r
+        DEBUG_CODE_END ();\r
         return RETURN_SUCCESS;\r
       }\r
     }\r
@@ -533,6 +574,7 @@ CbParseFadtInfo (
 \r
 **/\r
 RETURN_STATUS\r
+EFIAPI\r
 CbParseSerialInfo (\r
   OUT UINT32      *pRegBase,\r
   OUT UINT32      *pRegAccessType,\r
@@ -591,6 +633,7 @@ CbParseSerialInfo (
 \r
 **/\r
 RETURN_STATUS\r
+EFIAPI\r
 CbParseGetCbHeader (\r
   IN  UINTN  Level,\r
   OUT VOID   **HeaderPtr\r
@@ -629,6 +672,7 @@ CbParseGetCbHeader (
 \r
 **/\r
 RETURN_STATUS\r
+EFIAPI\r
 CbParseFbInfo (\r
   OUT FRAME_BUFFER_INFO       *pFbInfo\r
   )\r