]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFrameworkModulePkg/Universal/PcatSingleSegmentPciCfgPei/PciCfg2.c
Update PEIM entry point to follow PEIM entry point.
[mirror_edk2.git] / IntelFrameworkModulePkg / Universal / PcatSingleSegmentPciCfgPei / PciCfg2.c
index 214a505478e8e93ce9915825175c4ba7aa9df0e5..6dd47324ca38d28761a2314d40fc5e85646e6c2b 100644 (file)
@@ -71,6 +71,28 @@ EFI_PEI_PPI_DESCRIPTOR gPciCfgPpiList = {
   &gPciCfgPpi\r
 };\r
 \r
+\r
+/**\r
+   Convert EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS to PCI_LIB_ADDRESS.\r
+\r
+   @param Address   PCI address with\r
+                    EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS format.\r
+   \r
+   @return The PCI address with PCI_LIB_ADDRESS format.\r
+   \r
+**/\r
+UINTN\r
+PciCfgAddressConvert (\r
+  EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *Address\r
+  )\r
+{\r
+  if (Address->ExtendedRegister == 0) {\r
+    return PCI_LIB_ADDRESS (Address->Bus, Address->Device, Address->Function, Address->Register);\r
+  }\r
+\r
+  return PCI_LIB_ADDRESS (Address->Bus, Address->Device, Address->Function, Address->ExtendedRegister);\r
+}\r
+\r
 /**\r
   Reads from a given location in the PCI configuration space.\r
 \r
@@ -107,7 +129,7 @@ PciCfg2Read (
 {\r
   UINTN  PciLibAddress;\r
 \r
-  PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);\r
+  PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);\r
 \r
   if (Width == EfiPeiPciCfgWidthUint8) {\r
     *((UINT8 *) Buffer) = PciRead8 (PciLibAddress);\r
@@ -158,7 +180,7 @@ PciCfg2Write (
 {\r
   UINTN  PciLibAddress;\r
 \r
-  PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);\r
+  PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);\r
 \r
   if (Width == EfiPeiPciCfgWidthUint8) {\r
     PciWrite8 (PciLibAddress, *((UINT8 *) Buffer));\r
@@ -210,32 +232,49 @@ PciCfg2Modify (
   IN CONST  EFI_PEI_PCI_CFG2_PPI      *This,\r
   IN        EFI_PEI_PCI_CFG_PPI_WIDTH Width,\r
   IN        UINT64                    Address,\r
-  IN CONST  VOID                      *SetBits,\r
-  IN CONST  VOID                      *ClearBits\r
+  IN        VOID                      *SetBits,\r
+  IN        VOID                      *ClearBits\r
 )\r
 {\r
-  UINTN  PciLibAddress;\r
+  UINTN   PciLibAddress;\r
+  UINT16  ClearValue16;\r
+  UINT16  SetValue16;\r
+  UINT32  ClearValue32;\r
+  UINT32  SetValue32;\r
 \r
-  PciLibAddress = COMMON_TO_PCILIB_ADDRESS (Address);\r
+  PciLibAddress = PciCfgAddressConvert ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &Address);\r
 \r
   if (Width == EfiPeiPciCfgWidthUint8) {\r
-    PciAndThenOr8 (PciLibAddress, ~(*(UINT8 *)ClearBits), *((UINT8 *) SetBits));\r
+    PciAndThenOr8 (PciLibAddress, (UINT8) (~(*(UINT8 *) ClearBits)), *((UINT8 *) SetBits));\r
   } else if (Width == EfiPeiPciCfgWidthUint16) {\r
-    PciAndThenOr16 (PciLibAddress, ~ReadUnaligned16 ((UINT16 *) ClearBits), ReadUnaligned16 ((UINT16 *) SetBits));\r
+    ClearValue16  = (UINT16) (~ReadUnaligned16 ((UINT16 *) ClearBits));\r
+    SetValue16    = ReadUnaligned16 ((UINT16 *) SetBits);\r
+    PciAndThenOr16 (PciLibAddress, ClearValue16, SetValue16);\r
   } else if (Width == EfiPeiPciCfgWidthUint32) {\r
-    PciAndThenOr32 (PciLibAddress, ~ReadUnaligned32 ((UINT32 *) ClearBits), ReadUnaligned32 ((UINT32 *) SetBits));\r
+    ClearValue32  = (UINT32) (~ReadUnaligned32 ((UINT32 *) ClearBits));\r
+    SetValue32    = ReadUnaligned32 ((UINT32 *) SetBits);\r
+    PciAndThenOr32 (PciLibAddress, ClearValue32, SetValue32);\r
   } else {\r
     return EFI_INVALID_PARAMETER;\r
   }\r
   return EFI_SUCCESS;\r
 }\r
 \r
+/**\r
+  Module's entry function. \r
+  This routine will install EFI_PEI_PCI_CFG2_PPI or EFI_PEI_PCI_CFG_PPI\r
+  according to PeiServices's version.\r
+  \r
+  @param  FileHandle  Handle of the file being invoked.\r
+  @param  PeiServices Describes the list of possible PEI Services.\r
 \r
+  @return Whether success to install service\r
+**/\r
 EFI_STATUS\r
 EFIAPI\r
 PeimInitializePciCfg (\r
-  IN EFI_FFS_FILE_HEADER       *FfsHeader,\r
-  IN EFI_PEI_SERVICES          **PeiServices\r
+  IN       EFI_PEI_FILE_HANDLE  FileHandle,\r
+  IN CONST EFI_PEI_SERVICES     **PeiServices\r
   )\r
 {\r
   EFI_STATUS            Status;\r
@@ -254,9 +293,9 @@ PeimInitializePciCfg (
     // FrameworkPeiServices = (FRAMEWORK_PEI_SERVICES **) PeiServices;\r
     // (**FrameworkPeiServices).PciCfg = &mPciCfgPpi;\r
     // \r
-    (**PeiServices).PciCfg = (EFI_PEI_PCI_CFG2_PPI *) &gPciCfgPpi;\r
+    (**(EFI_PEI_SERVICES**)PeiServices).PciCfg = (EFI_PEI_PCI_CFG2_PPI *) &gPciCfgPpi;\r
   } else {\r
-    (**PeiServices).PciCfg = &gPciCfg2Ppi;\r
+    (**(EFI_PEI_SERVICES**)PeiServices).PciCfg = &gPciCfg2Ppi;\r
   }\r
   \r
   if (!FeaturePcdGet (PcdPciCfgDisable)) {\r
@@ -268,3 +307,4 @@ PeimInitializePciCfg (
 \r
   return Status;\r
 }\r
+\r