summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgtian <gtian@6f19259b-4bc3-4df7-8a09-765794883524>2006-11-14 09:34:30 +0000
committergtian <gtian@6f19259b-4bc3-4df7-8a09-765794883524>2006-11-14 09:34:30 +0000
commit3673b8bf338f580396407d0804e93725555c4dd5 (patch)
tree8479b2643027ed98027993c40fb3193422027af1
parente425f0733437eb9297b84611e91e97ae41bbf270 (diff)
downloadedk2-platforms-3673b8bf338f580396407d0804e93725555c4dd5.tar.xz
Add IPF support in Base IO Lib, and related change in fpd file
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1952 6f19259b-4bc3-4df7-8a09-765794883524
-rw-r--r--EdkModulePkg/EdkModulePkg.fpd24
-rw-r--r--EdkNt32Pkg/Nt32.fpd16
-rw-r--r--MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.msa15
-rw-r--r--MdePkg/Library/BaseIoLibIntrinsic/IoLibIpf.c433
-rw-r--r--MdePkg/MdePkg.fpd20
-rw-r--r--MdePkg/MdePkg.spd9
6 files changed, 516 insertions, 1 deletions
diff --git a/EdkModulePkg/EdkModulePkg.fpd b/EdkModulePkg/EdkModulePkg.fpd
index 52cd1e204d..5b11165607 100644
--- a/EdkModulePkg/EdkModulePkg.fpd
+++ b/EdkModulePkg/EdkModulePkg.fpd
@@ -5472,6 +5472,14 @@
<MaxDatumSize>4</MaxDatumSize>
<Value>200000000</Value>
</PcdData>
+ <PcdData ItemType="FIXED_AT_BUILD">
+ <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>
+ <Token>0x0000000c</Token>
+ <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT64</DatumType>
+ <MaxDatumSize>8</MaxDatumSize>
+ <Value>0x0ffffc000000</Value>
+ </PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>NULL</FvBinding>
@@ -18592,6 +18600,14 @@
<MaxDatumSize>4</MaxDatumSize>
<Value>10000000</Value>
</PcdData>
+ <PcdData ItemType="FIXED_AT_BUILD">
+ <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>
+ <Token>0x0000000c</Token>
+ <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT64</DatumType>
+ <MaxDatumSize>8</MaxDatumSize>
+ <Value>0x0ffffc000000</Value>
+ </PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>NULL</FvBinding>
@@ -18723,6 +18739,14 @@
<MaxDatumSize>4</MaxDatumSize>
<Value>10000000</Value>
</PcdData>
+ <PcdData ItemType="FIXED_AT_BUILD">
+ <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>
+ <Token>0x0000000c</Token>
+ <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT64</DatumType>
+ <MaxDatumSize>8</MaxDatumSize>
+ <Value>0x0ffffc000000</Value>
+ </PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>NULL</FvBinding>
diff --git a/EdkNt32Pkg/Nt32.fpd b/EdkNt32Pkg/Nt32.fpd
index 3d4496f730..210860d7df 100644
--- a/EdkNt32Pkg/Nt32.fpd
+++ b/EdkNt32Pkg/Nt32.fpd
@@ -586,6 +586,14 @@
<MaxDatumSize>4</MaxDatumSize>
<Value>200000000</Value>
</PcdData>
+ <PcdData ItemType="FIXED_AT_BUILD">
+ <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>
+ <Token>0x0000000c</Token>
+ <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT64</DatumType>
+ <MaxDatumSize>8</MaxDatumSize>
+ <Value>0x0ffffc000000</Value>
+ </PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>FV_RECOVERY</FvBinding>
@@ -2545,6 +2553,14 @@
<MaxDatumSize>4</MaxDatumSize>
<Value>200000000</Value>
</PcdData>
+ <PcdData ItemType="FIXED_AT_BUILD">
+ <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>
+ <Token>0x0000000c</Token>
+ <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT64</DatumType>
+ <MaxDatumSize>8</MaxDatumSize>
+ <Value>0x0ffffc000000</Value>
+ </PcdData>
</PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>FV_RECOVERY</FvBinding>
diff --git a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.msa b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.msa
index 1e8aceb2d0..f92ff9dd62 100644
--- a/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.msa
+++ b/MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.msa
@@ -18,7 +18,7 @@
<Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052</Specification>
</MsaHeader>
<ModuleDefinitions>
- <SupportedArchitectures>IA32 X64</SupportedArchitectures>
+ <SupportedArchitectures>IA32 X64 IPF</SupportedArchitectures>
<BinaryModule>false</BinaryModule>
<OutputFileBasename>BaseIoLibIntrinsic</OutputFileBasename>
</ModuleDefinitions>
@@ -32,6 +32,9 @@
<LibraryClass Usage="ALWAYS_CONSUMED">
<Keyword>DebugLib</Keyword>
</LibraryClass>
+ <LibraryClass Usage="ALWAYS_CONSUMED">
+ <Keyword>PcdLib</Keyword>
+ </LibraryClass>
</LibraryClassDefinitions>
<SourceFiles>
<Filename SupArchList="IA32">IoLib.c</Filename>
@@ -42,6 +45,8 @@
<Filename SupArchList="X64">IoLibMsc.c</Filename>
<Filename SupArchList="X64">IoLibGcc.c</Filename>
<Filename SupArchList="X64">IoHighLevel.c</Filename>
+ <Filename SupArchList="IPF">IoLibIpf.c</Filename>
+ <Filename SupArchList="IPF">IoHighLevel.c</Filename>
</SourceFiles>
<PackageDependencies>
<Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>
@@ -50,4 +55,12 @@
<Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>
<Specification>EDK_RELEASE_VERSION 0x00020000</Specification>
</Externs>
+ <PcdCoded>
+ <PcdEntry SupArchList="IPF" PcdItemType="FIXED_AT_BUILD" Usage="ALWAYS_CONSUMED">
+ <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>
+ <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DefaultValue>0x0ffffc000000</DefaultValue>
+ <HelpText>The base address of IPF IO Block</HelpText>
+ </PcdEntry>
+ </PcdCoded>
</ModuleSurfaceArea> \ No newline at end of file
diff --git a/MdePkg/Library/BaseIoLibIntrinsic/IoLibIpf.c b/MdePkg/Library/BaseIoLibIntrinsic/IoLibIpf.c
new file mode 100644
index 0000000000..234c3369b2
--- /dev/null
+++ b/MdePkg/Library/BaseIoLibIntrinsic/IoLibIpf.c
@@ -0,0 +1,433 @@
+/** @file
+ Common I/O Library routines.
+
+ Copyright (c) 2006, Intel Corporation<BR>
+ All rights reserved. This program and the accompanying materials
+ are licensed and made available under the terms and conditions of the BSD License
+ which accompanies this distribution. The full text of the license may be found at
+ http://opensource.org/licenses/bsd-license.php
+
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+ Module Name: IoLibIpf.c
+
+**/
+
+#define BIT63 0x8000000000000000ULL
+
+#define MAP_PORT_BASE_TO_MEM(_Port) \
+ ((((_Port) & 0xfffc) << 10) | ((_Port) & 0x0fff))
+
+/**
+ Reads a 8-bit I/O port.
+
+ Reads the 8-bit I/O port specified by Port. The 8-bit read value is returned.
+ This function must guarantee that all I/O read and write operations are
+ serialized.
+
+ @param Port The I/O port to read.
+
+ @return The value read.
+
+**/
+UINT8
+EFIAPI
+IoRead8 (
+ IN UINT64 Port
+ )
+{
+ UINT64 Address;
+
+ //
+ // Add the 64MB aligned IO Port space to the IO address
+ //
+ Address = MAP_PORT_BASE_TO_MEM (Port);
+ Address += PcdGet64(PcdIoBlockBaseAddressForIpf);
+
+ return MmioRead8 (Address);
+}
+
+/**
+ Reads a 16-bit I/O port.
+
+ Reads the 16-bit I/O port specified by Port. The 16-bit read value is returned.
+ This function must guarantee that all I/O read and write operations are
+ serialized.
+
+ @param Port The I/O port to read.
+
+ @return The value read.
+
+**/
+UINT16
+EFIAPI
+IoRead16 (
+ IN UINT64 Port
+ )
+{
+ UINT64 Address;
+
+ //
+ // Add the 64MB aligned IO Port space to the IO address
+ //
+ Address = MAP_PORT_BASE_TO_MEM (Port);
+ Address += PcdGet64(PcdIoBlockBaseAddressForIpf);
+
+ return MmioRead16 (Address);
+}
+
+/**
+ Reads a 32-bit I/O port.
+
+ Reads the 32-bit I/O port specified by Port. The 32-bit read value is returned.
+ This function must guarantee that all I/O read and write operations are
+ serialized.
+
+ @param Port The I/O port to read.
+
+ @return The value read.
+
+**/
+UINT32
+EFIAPI
+IoRead32 (
+ IN UINT64 Port
+ )
+{
+ UINT64 Address;
+
+ //
+ // Add the 64MB aligned IO Port space to the IO address
+ //
+ Address = MAP_PORT_BASE_TO_MEM (Port);
+ Address += PcdGet64(PcdIoBlockBaseAddressForIpf);
+
+ return MmioRead32 (Address);
+}
+
+/**
+ Writes a 8-bit I/O port.
+
+ Writes the 8-bit I/O port specified by Port with the value specified by Value
+ and returns Value. This function must guarantee that all I/O read and write
+ operations are serialized.
+
+ @param Port The I/O port to write.
+ @param Value The value to write to the I/O port.
+
+ @return The value written the I/O port.
+
+**/
+UINT8
+EFIAPI
+IoWrite8 (
+ IN UINT64 Port,
+ IN UINT8 Data
+ )
+{
+ UINT64 Address;
+
+ //
+ // Add the 64MB aligned IO Port space to the IO address
+ //
+ Address = MAP_PORT_BASE_TO_MEM (Port);
+ Address += PcdGet64(PcdIoBlockBaseAddressForIpf);
+
+ return MmioWrite8 (Address, Data);
+}
+
+/**
+ Writes a 16-bit I/O port.
+
+ Writes the 16-bit I/O port specified by Port with the value specified by Value
+ and returns Value. This function must guarantee that all I/O read and write
+ operations are serialized.
+
+ @param Port The I/O port to write.
+ @param Value The value to write to the I/O port.
+
+ @return The value written the I/O port.
+
+**/
+UINT16
+EFIAPI
+IoWrite16 (
+ IN UINT64 Port,
+ IN UINT16 Data
+ )
+{
+ UINT64 Address;
+
+ //
+ // Add the 64MB aligned IO Port space to the IO address
+ //
+ Address = MAP_PORT_BASE_TO_MEM (Port);
+ Address += PcdGet64(PcdIoBlockBaseAddressForIpf);
+
+ return MmioWrite16 (Address, Data);
+}
+
+/**
+ Writes a 32-bit I/O port.
+
+ Writes the 32-bit I/O port specified by Port with the value specified by Value
+ and returns Value. This function must guarantee that all I/O read and write
+ operations are serialized.
+
+ @param Port The I/O port to write.
+ @param Value The value to write to the I/O port.
+
+ @return The value written the I/O port.
+
+**/
+UINT32
+EFIAPI
+IoWrite32 (
+ IN UINT64 Port,
+ IN UINT32 Data
+ )
+{
+ UINT64 Address;
+
+ //
+ // Add the 64MB aligned IO Port space to the IO address
+ //
+ Address = MAP_PORT_BASE_TO_MEM (Port);
+ Address += PcdGet64(PcdIoBlockBaseAddressForIpf);
+
+ return MmioWrite32 (Address, Data);
+}
+
+/**
+ Reads a 8-bit MMIO register.
+
+ Reads the 8-bit MMIO register specified by Address. The 8-bit read value is
+ returned. This function must guarantee that all MMIO read and write
+ operations are serialized.
+
+ @param Address The MMIO register to read.
+
+ @return The value read.
+
+**/
+UINT8
+EFIAPI
+MmioRead8 (
+ IN UINT64 Address
+ )
+{
+ UINT8 Data;
+
+ Address |= BIT63;
+
+ MemoryFence ();
+ Data = *((volatile UINT8 *) Address);
+ MemoryFence ();
+
+ return Data;
+}
+
+/**
+ Reads a 16-bit MMIO register.
+
+ Reads the 16-bit MMIO register specified by Address. The 16-bit read value is
+ returned. This function must guarantee that all MMIO read and write
+ operations are serialized.
+
+ @param Address The MMIO register to read.
+
+ @return The value read.
+
+**/
+UINT16
+EFIAPI
+MmioRead16 (
+ IN UINT64 Address
+ )
+{
+ UINT16 Data;
+
+ Address |= BIT63;
+
+ MemoryFence ();
+ Data = *((volatile UINT16 *) Address);
+ MemoryFence ();
+
+ return Data;
+}
+
+/**
+ Reads a 32-bit MMIO register.
+
+ Reads the 32-bit MMIO register specified by Address. The 32-bit read value is
+ returned. This function must guarantee that all MMIO read and write
+ operations are serialized.
+
+ @param Address The MMIO register to read.
+
+ @return The value read.
+
+**/
+UINT32
+EFIAPI
+MmioRead32 (
+ IN UINT64 Address
+ )
+{
+ UINT32 Data;
+
+ Address |= BIT63;
+
+ MemoryFence ();
+ Data = *((volatile UINT32 *) Address);
+ MemoryFence ();
+
+ return Data;
+}
+
+/**
+ Reads a 64-bit MMIO register.
+
+ Reads the 64-bit MMIO register specified by Address. The 64-bit read value is
+ returned. This function must guarantee that all MMIO read and write
+ operations are serialized.
+
+ @param Address The MMIO register to read.
+
+ @return The value read.
+
+**/
+UINT64
+EFIAPI
+MmioRead64 (
+ IN UINT64 Address
+ )
+{
+ UINT64 Data;
+
+ Address |= BIT63;
+
+ MemoryFence ();
+ Data = *((volatile UINT64 *) Address);
+ MemoryFence ();
+
+ return Data;
+
+}
+
+/**
+ Writes a 8-bit MMIO register.
+
+ Writes the 8-bit MMIO register specified by Address with the value specified
+ by Value and returns Value. This function must guarantee that all MMIO read
+ and write operations are serialized.
+
+ @param Address The MMIO register to write.
+ @param Data The value to write to the MMIO register.
+
+ @return The value written the memory address.
+
+**/
+UINT8
+EFIAPI
+MmioWrite8 (
+ IN UINT64 Address,
+ IN UINT8 Data
+ )
+{
+ Address |= BIT63;
+
+ MemoryFence ();
+ *((volatile UINT8 *) Address) = Data;
+ MemoryFence ();
+
+ return Data;
+}
+
+/**
+ Writes a 16-bit MMIO register.
+
+ Writes the 16-bit MMIO register specified by Address with the value specified
+ by Value and returns Value. This function must guarantee that all MMIO read
+ and write operations are serialized.
+
+ @param Address The MMIO register to write.
+ @param Data The value to write to the MMIO register.
+
+ @return The value written the memory address.
+
+**/
+UINT16
+EFIAPI
+MmioWrite16 (
+ IN UINT64 Address,
+ IN UINT16 Data
+ )
+{
+ Address |= BIT63;
+
+ MemoryFence ();
+ *((volatile UINT16 *) Address) = Data;
+ MemoryFence ();
+
+ return Data;
+}
+
+/**
+ Writes a 32-bit MMIO register.
+
+ Writes the 32-bit MMIO register specified by Address with the value specified
+ by Value and returns Value. This function must guarantee that all MMIO read
+ and write operations are serialized.
+
+ @param Address The MMIO register to write.
+ @param Data The value to write to the MMIO register.
+
+ @return The value written the memory address.
+
+**/
+UINT32
+EFIAPI
+MmioWrite32 (
+ IN UINT64 Address,
+ IN UINT32 Data
+ )
+{
+ Address |= BIT63;
+
+ MemoryFence ();
+ *((volatile UINT32 *) Address) = Data;
+ MemoryFence ();
+
+ return Data;
+}
+
+/**
+ Writes a 64-bit MMIO register.
+
+ Writes the 64-bit MMIO register specified by Address with the value specified
+ by Value and returns Value. This function must guarantee that all MMIO read
+ and write operations are serialized.
+
+ @param Address The MMIO register to write.
+ @param Data The value to write to the MMIO register.
+
+ @return The value written the memory address.
+
+**/
+UINT64
+EFIAPI
+MmioWrite64 (
+ IN UINT64 Address,
+ IN UINT64 Data
+ )
+{
+ Address |= BIT63;
+
+ MemoryFence ();
+ *((volatile UINT64 *) Address) = Data;
+ MemoryFence ();
+
+ return Data;
+}
diff --git a/MdePkg/MdePkg.fpd b/MdePkg/MdePkg.fpd
index 19681c25f0..f7188e114f 100644
--- a/MdePkg/MdePkg.fpd
+++ b/MdePkg/MdePkg.fpd
@@ -100,6 +100,16 @@
</ModuleSaBuildOptions>
</ModuleSA>
<ModuleSA SupArchList="IA32" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" ModuleGuid="926c9cd0-4bb8-479b-9ac4-8a2a23f85307">
+ <PcdBuildDefinition>
+ <PcdData ItemType="FIXED_AT_BUILD">
+ <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>
+ <Token>0x0000000c</Token>
+ <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT64</DatumType>
+ <MaxDatumSize>8</MaxDatumSize>
+ <Value>0x0ffffc000000</Value>
+ </PcdData>
+ </PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>NULL</FvBinding>
<FfsFormatKey>LIBRARY</FfsFormatKey>
@@ -1228,6 +1238,16 @@
</ModuleSaBuildOptions>
</ModuleSA>
<ModuleSA SupArchList="X64" PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec" ModuleGuid="926c9cd0-4bb8-479b-9ac4-8a2a23f85307">
+ <PcdBuildDefinition>
+ <PcdData ItemType="FIXED_AT_BUILD">
+ <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>
+ <Token>0x0000000c</Token>
+ <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT64</DatumType>
+ <MaxDatumSize>8</MaxDatumSize>
+ <Value>0x0ffffc000000</Value>
+ </PcdData>
+ </PcdBuildDefinition>
<ModuleSaBuildOptions>
<FvBinding>NULL</FvBinding>
<FfsFormatKey>LIBRARY</FfsFormatKey>
diff --git a/MdePkg/MdePkg.spd b/MdePkg/MdePkg.spd
index 21383c8896..cf56854fc8 100644
--- a/MdePkg/MdePkg.spd
+++ b/MdePkg/MdePkg.spd
@@ -2324,6 +2324,15 @@
<DefaultValue>0xE0000000</DefaultValue>
<HelpText>The base address of PCI Express MMIO window.</HelpText>
</PcdEntry>
+ <PcdEntry SupArchList="IPF">
+ <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>
+ <Token>0x0000000c</Token>
+ <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>
+ <DatumType>UINT64</DatumType>
+ <ValidUsage>FIXED_AT_BUILD</ValidUsage>
+ <DefaultValue>0x0ffffc000000</DefaultValue>
+ <HelpText>The base address of IPF IO Block</HelpText>
+ </PcdEntry>
<PcdEntry>
<C_Name>PcdFSBClock</C_Name>
<Token>0x0000000c</Token>