]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/PcatSingleSegmentPciCfg2Pei/PciCfg2.c
Patch to remove STATIC modifier. This is on longer recommended by EFI Framework codin...
[mirror_edk2.git] / MdeModulePkg / Universal / PcatSingleSegmentPciCfg2Pei / PciCfg2.c
index cab55126f82424c0524494b5e5dae2292a2c8c14..b3adf72befc8ba3f6c6a2b62f7c47e3b4588220c 100644 (file)
@@ -1,4 +1,5 @@
-/**\r
+/** @file\r
+  Installs Single Segment Pci Configuration PPI.\r
 \r
   Copyright (c) 2006 - 2007, Intel Corporation\r
   All rights reserved. This program and the accompanying materials\r
 #include <Library/PciLib.h>\r
 #include <Library/PeimEntryPoint.h>\r
 \r
-#include <IndustryStandard\Pci.h>\r
+#include <IndustryStandard/Pci.h>\r
+\r
+/**\r
+   Convert EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS to PCI_LIB_ADDRESS.\r
 \r
-#define COMMON_TO_PCILIB_ADDRESS(A) (UINTN)PCI_LIB_ADDRESS( \\r
-       ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Bus, \\r
-       ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Device, \\r
-       ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Function, \\r
-       ((EFI_PEI_PCI_CFG_PPI_PCI_ADDRESS *) &A)->Register \\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
@@ -55,7 +69,7 @@
 \r
 **/\r
 EFI_STATUS\r
-EFIAPI \r
+EFIAPI\r
 PciCfg2Read (\r
   IN CONST  EFI_PEI_SERVICES          **PeiServices,\r
   IN CONST  EFI_PEI_PCI_CFG2_PPI      *This,\r
@@ -89,7 +103,7 @@ PciCfg2Read (
 \r
 **/\r
 EFI_STATUS\r
-EFIAPI \r
+EFIAPI\r
 PciCfg2Write (\r
   IN CONST  EFI_PEI_SERVICES          **PeiServices,\r
   IN CONST  EFI_PEI_PCI_CFG2_PPI      *This,\r
@@ -129,14 +143,14 @@ PciCfg2Write (
 \r
 **/\r
 EFI_STATUS\r
-EFIAPI \r
+EFIAPI\r
 PciCfg2Modify (\r
   IN CONST  EFI_PEI_SERVICES          **PeiServices,\r
   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
 \r
@@ -195,7 +209,7 @@ EFI_PEI_PPI_DESCRIPTOR gPciCfg2PpiList = {
 \r
 **/\r
 EFI_STATUS\r
-EFIAPI \r
+EFIAPI\r
 PciCfg2Read (\r
   IN CONST  EFI_PEI_SERVICES          **PeiServices,\r
   IN CONST  EFI_PEI_PCI_CFG2_PPI      *This,\r
@@ -206,7 +220,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
@@ -246,7 +260,7 @@ PciCfg2Read (
 \r
 **/\r
 EFI_STATUS\r
-EFIAPI \r
+EFIAPI\r
 PciCfg2Write (\r
   IN CONST  EFI_PEI_SERVICES          **PeiServices,\r
   IN CONST  EFI_PEI_PCI_CFG2_PPI      *This,\r
@@ -257,7 +271,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
@@ -303,26 +317,34 @@ PciCfg2Write (
 \r
 **/\r
 EFI_STATUS\r
-EFIAPI \r
+EFIAPI\r
 PciCfg2Modify (\r
   IN CONST  EFI_PEI_SERVICES          **PeiServices,\r
   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
@@ -342,7 +364,7 @@ PeimInitializePciCfg (
   ASSERT ((**PeiServices).Hdr.Revision >= PEI_SERVICES_REVISION);\r
 \r
   (**PeiServices).PciCfg = &gPciCfg2Ppi;\r
-  Status = (**PeiServices).InstallPpi (PeiServices, &gPciCfg2PpiList);\r
+  Status = (**PeiServices).InstallPpi ((CONST EFI_PEI_SERVICES **)PeiServices, &gPciCfg2PpiList);\r
 \r
   return Status;\r
 }\r