THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
- Module Name: PciLib.c\r
-\r
**/\r
\r
+\r
+#include <Base.h>\r
+\r
+\r
+#include <Library/PciExpressLib.h>\r
+#include <Library/IoLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/PcdLib.h>\r
+\r
+\r
/**\r
Assert the validity of a PCI address. A valid PCI address should contain 1's\r
only in the low 28 bits.\r
@return The base address of PCI Express.\r
\r
**/\r
-UINTN\r
+STATIC\r
+volatile VOID*\r
GetPciExpressBaseAddress (\r
VOID\r
)\r
{\r
- return (UINTN)PcdGet64 (PcdPciExpressBaseAddress);\r
+ return (VOID*)(UINTN) PcdGet64 (PcdPciExpressBaseAddress);\r
}\r
\r
/**\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioRead8 (GetPciExpressBaseAddress () + Address);\r
+ return MmioRead8 ((UINTN) GetPciExpressBaseAddress () + Address);\r
}\r
\r
/**\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioWrite8 (GetPciExpressBaseAddress () + Address, Value);\r
+ return MmioWrite8 ((UINTN) GetPciExpressBaseAddress () + Address, Value);\r
}\r
\r
/**\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioOr8 (GetPciExpressBaseAddress () + Address, OrData);\r
+ return MmioOr8 ((UINTN) GetPciExpressBaseAddress () + Address, OrData);\r
}\r
\r
/**\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioAnd8 (GetPciExpressBaseAddress () + Address, AndData);\r
+ return MmioAnd8 ((UINTN) GetPciExpressBaseAddress () + Address, AndData);\r
}\r
\r
/**\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioAndThenOr8 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
AndData,\r
OrData\r
);\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldRead8 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit\r
);\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldWrite8 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
Value\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldOr8 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
OrData\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldAnd8 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
AndData\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldAndThenOr8 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
AndData,\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioRead16 (GetPciExpressBaseAddress () + Address);\r
+ return MmioRead16 ((UINTN) GetPciExpressBaseAddress () + Address);\r
}\r
\r
/**\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioWrite16 (GetPciExpressBaseAddress () + Address, Value);\r
+ return MmioWrite16 ((UINTN) GetPciExpressBaseAddress () + Address, Value);\r
}\r
\r
/**\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioOr16 (GetPciExpressBaseAddress () + Address, OrData);\r
+ return MmioOr16 ((UINTN) GetPciExpressBaseAddress () + Address, OrData);\r
}\r
\r
/**\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioAnd16 (GetPciExpressBaseAddress () + Address, AndData);\r
+ return MmioAnd16 ((UINTN) GetPciExpressBaseAddress () + Address, AndData);\r
}\r
\r
/**\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioAndThenOr16 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
AndData,\r
OrData\r
);\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldRead16 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit\r
);\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldWrite16 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
Value\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldOr16 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
OrData\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldAnd16 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
AndData\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldAndThenOr16 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
AndData,\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioRead32 (GetPciExpressBaseAddress () + Address);\r
+ return MmioRead32 ((UINTN) GetPciExpressBaseAddress () + Address);\r
}\r
\r
/**\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioWrite32 (GetPciExpressBaseAddress () + Address, Value);\r
+ return MmioWrite32 ((UINTN) GetPciExpressBaseAddress () + Address, Value);\r
}\r
\r
/**\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioOr32 (GetPciExpressBaseAddress () + Address, OrData);\r
+ return MmioOr32 ((UINTN) GetPciExpressBaseAddress () + Address, OrData);\r
}\r
\r
/**\r
)\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
- return MmioAnd32 (GetPciExpressBaseAddress () + Address, AndData);\r
+ return MmioAnd32 ((UINTN) GetPciExpressBaseAddress () + Address, AndData);\r
}\r
\r
/**\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioAndThenOr32 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
AndData,\r
OrData\r
);\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldRead32 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit\r
);\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldWrite32 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
Value\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldOr32 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
OrData\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldAnd32 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
AndData\r
{\r
ASSERT_INVALID_PCI_ADDRESS (Address);\r
return MmioBitFieldAndThenOr32 (\r
- GetPciExpressBaseAddress () + Address,\r
+ (UINTN) GetPciExpressBaseAddress () + Address,\r
StartBit,\r
EndBit,\r
AndData,\r
//\r
// Read a byte if StartAddress is byte aligned\r
//\r
- *(UINT8*)Buffer = PciExpressRead8 (StartAddress);\r
+ *(volatile UINT8 *)Buffer = PciExpressRead8 (StartAddress);\r
StartAddress += sizeof (UINT8);\r
Size -= sizeof (UINT8);\r
Buffer = (UINT8*)Buffer + 1;\r
//\r
// Read a word if StartAddress is word aligned\r
//\r
- *(UINT16*)Buffer = PciExpressRead16 (StartAddress);\r
+ *(volatile UINT16 *)Buffer = PciExpressRead16 (StartAddress);\r
StartAddress += sizeof (UINT16);\r
Size -= sizeof (UINT16);\r
Buffer = (UINT16*)Buffer + 1;\r
//\r
// Read as many double words as possible\r
//\r
- *(UINT32*)Buffer = PciExpressRead32 (StartAddress);\r
+ *(volatile UINT32 *)Buffer = PciExpressRead32 (StartAddress);\r
StartAddress += sizeof (UINT32);\r
Size -= sizeof (UINT32);\r
Buffer = (UINT32*)Buffer + 1;\r
//\r
// Read the last remaining word if exist\r
//\r
- *(UINT16*)Buffer = PciExpressRead16 (StartAddress);\r
+ *(volatile UINT16 *)Buffer = PciExpressRead16 (StartAddress);\r
StartAddress += sizeof (UINT16);\r
Size -= sizeof (UINT16);\r
Buffer = (UINT16*)Buffer + 1;\r
//\r
// Read the last remaining byte if exist\r
//\r
- *(UINT8*)Buffer = PciExpressRead8 (StartAddress);\r
+ *(volatile UINT8 *)Buffer = PciExpressRead8 (StartAddress);\r
}\r
\r
return ReturnValue;\r