]> git.proxmox.com Git - mirror_edk2.git/blobdiff - CorebootModulePkg/Library/CbParseLib/CbParseLib.c
Merge branch 'master' of github.com:tianocore/edk2
[mirror_edk2.git] / CorebootModulePkg / Library / CbParseLib / CbParseLib.c
index 66374b5a32bdeee7ab5a9ef638fcfa937068128d..7c81a51054298c213ccb981e9547c78d406b2da5 100644 (file)
@@ -33,7 +33,7 @@
   @return          the UNIT64 value after convertion.\r
 \r
 **/\r
-UINT64 \r
+UINT64
 cb_unpack64 (\r
   IN struct cbuint64 val\r
   )\r
@@ -216,7 +216,8 @@ FindCbMemTable (
         *pMemTableSize = Entries[Idx].size;\r
       }\r
 \r
-      DEBUG ((EFI_D_INFO, "Find CbMemTable Id 0x%x, base %p, size 0x%x\n", TableId, *pMemTable, *pMemTableSize));\r
+      DEBUG ((EFI_D_INFO, "Find CbMemTable Id 0x%x, base %p, size 0x%x\n",
+        TableId, *pMemTable, Entries[Idx].size));
       return RETURN_SUCCESS;\r
     }\r
   }\r
@@ -395,6 +396,8 @@ CbParseSmbiosTable (
   @param  pPmTimerReg        Pointer to the address of power management timer register\r
   @param  pResetReg          Pointer to the address of system reset register\r
   @param  pResetValue        Pointer to the value to be writen to the system reset register\r
+  @param  pPmEvtReg          Pointer to the address of power management event register\r
+  @param  pPmGpeEnReg        Pointer to the address of power management GPE enable register\r
 \r
   @retval RETURN_SUCCESS     Successfully find out all the required fadt information.\r
   @retval RETURN_NOT_FOUND   Failed to find the fadt table.\r
@@ -405,7 +408,9 @@ CbParseFadtInfo (
   OUT UINTN      *pPmCtrlReg,\r
   OUT UINTN      *pPmTimerReg,\r
   OUT UINTN      *pResetReg,\r
-  OUT UINTN      *pResetValue\r
+  OUT UINTN      *pResetValue,\r
+  OUT UINTN      *pPmEvtReg,\r
+  OUT UINTN      *pPmGpeEnReg\r
   )\r
 {\r
   EFI_ACPI_3_0_ROOT_SYSTEM_DESCRIPTION_POINTER  *Rsdp;\r
@@ -464,6 +469,25 @@ CbParseFadtInfo (
         }\r
         DEBUG ((EFI_D_INFO, "Reset Value 0x%x\n", Fadt->ResetValue));\r
 \r
+        if (pPmEvtReg != NULL) {
+          *pPmEvtReg = Fadt->Pm1aEvtBlk;\r
+          DEBUG ((EFI_D_INFO, "PmEvt Reg 0x%x\n", Fadt->Pm1aEvtBlk));\r
+        }\r
+\r
+        if (pPmGpeEnReg != NULL) {
+          *pPmGpeEnReg = Fadt->Gpe0Blk + Fadt->Gpe0BlkLen / 2;\r
+          DEBUG ((EFI_D_INFO, "PmGpeEn Reg 0x%x\n", *pPmGpeEnReg));\r
+        }\r
+\r
+        //
+        // Verify values for proper operation
+        //
+        ASSERT(Fadt->Pm1aCntBlk != 0);
+        ASSERT(Fadt->PmTmrBlk != 0);
+        ASSERT(Fadt->ResetReg.Address != 0);
+        ASSERT(Fadt->Pm1aEvtBlk != 0);
+        ASSERT(Fadt->Gpe0Blk != 0);
+
         return RETURN_SUCCESS;\r
       }\r
     }\r
@@ -495,6 +519,15 @@ CbParseFadtInfo (
           *pResetValue = Fadt->ResetValue;\r
         DEBUG ((EFI_D_ERROR, "Reset Value 0x%x\n", Fadt->ResetValue));\r
 \r
+        if (pPmEvtReg != NULL) {
+          *pPmEvtReg = Fadt->Pm1aEvtBlk;\r
+           DEBUG ((EFI_D_INFO, "PmEvt Reg 0x%x\n", Fadt->Pm1aEvtBlk));\r
+        }\r
+\r
+        if (pPmGpeEnReg != NULL) {
+          *pPmGpeEnReg = Fadt->Gpe0Blk + Fadt->Gpe0BlkLen / 2;\r
+          DEBUG ((EFI_D_INFO, "PmGpeEn Reg 0x%x\n", *pPmGpeEnReg));\r
+        }
         return RETURN_SUCCESS;\r
       }\r
     }\r
@@ -508,7 +541,10 @@ CbParseFadtInfo (
 \r
   @param  pRegBase           Pointer to the base address of serial port registers\r
   @param  pRegAccessType     Pointer to the access type of serial port registers\r
+  @param  pRegWidth          Pointer to the register width in bytes
   @param  pBaudrate          Pointer to the serial port baudrate\r
+  @param  pInputHertz        Pointer to the input clock frequency
+  @param  pUartPciAddr       Pointer to the UART PCI bus, dev and func address
 \r
   @retval RETURN_SUCCESS     Successfully find the serial port information.\r
   @retval RETURN_NOT_FOUND   Failed to find the serial port information .\r
@@ -518,7 +554,10 @@ RETURN_STATUS
 CbParseSerialInfo (\r
   OUT UINT32      *pRegBase,\r
   OUT UINT32      *pRegAccessType,\r
-  OUT UINT32      *pBaudrate\r
+  OUT UINT32      *pRegWidth,
+  OUT UINT32      *pBaudrate,
+  OUT UINT32      *pInputHertz,
+  OUT UINT32      *pUartPciAddr
   )\r
 {\r
   struct cb_serial    *CbSerial;\r
@@ -536,6 +575,10 @@ CbParseSerialInfo (
     *pRegBase = CbSerial->baseaddr;\r
   }\r
 \r
+  if (pRegWidth != NULL) {
+    *pRegWidth = CbSerial->regwidth;
+  }
+
   if (pRegAccessType != NULL) {\r
     *pRegAccessType = CbSerial->type;\r
   }\r
@@ -544,6 +587,14 @@ CbParseSerialInfo (
     *pBaudrate = CbSerial->baud;\r
   }\r
 \r
+  if (pInputHertz != NULL) {
+    *pInputHertz = CbSerial->input_hertz;
+  }
+
+  if (pUartPciAddr != NULL) {
+    *pUartPciAddr = CbSerial->uart_pci_addr;
+  }
+
   return RETURN_SUCCESS;\r
 }\r
 \r