Add IPF support in Base IO Lib, and related change in fpd file
authorgtian <gtian@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 14 Nov 2006 09:34:30 +0000 (09:34 +0000)
committergtian <gtian@6f19259b-4bc3-4df7-8a09-765794883524>
Tue, 14 Nov 2006 09:34:30 +0000 (09:34 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1952 6f19259b-4bc3-4df7-8a09-765794883524

EdkModulePkg/EdkModulePkg.fpd
EdkNt32Pkg/Nt32.fpd
MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.msa
MdePkg/Library/BaseIoLibIntrinsic/IoLibIpf.c [new file with mode: 0644]
MdePkg/MdePkg.fpd
MdePkg/MdePkg.spd

index 52cd1e2..5b11165 100644 (file)
           <MaxDatumSize>4</MaxDatumSize>\r
           <Value>200000000</Value>\r
         </PcdData>\r
+        <PcdData ItemType="FIXED_AT_BUILD">\r
+          <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>\r
+          <Token>0x0000000c</Token>\r
+          <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>\r
+          <DatumType>UINT64</DatumType>\r
+          <MaxDatumSize>8</MaxDatumSize>\r
+          <Value>0x0ffffc000000</Value>\r
+        </PcdData>\r
       </PcdBuildDefinition>\r
       <ModuleSaBuildOptions>\r
         <FvBinding>NULL</FvBinding>\r
           <MaxDatumSize>4</MaxDatumSize>\r
           <Value>10000000</Value>\r
         </PcdData>\r
+        <PcdData ItemType="FIXED_AT_BUILD">\r
+          <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>\r
+          <Token>0x0000000c</Token>\r
+          <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>\r
+          <DatumType>UINT64</DatumType>\r
+          <MaxDatumSize>8</MaxDatumSize>\r
+          <Value>0x0ffffc000000</Value>\r
+        </PcdData>\r
       </PcdBuildDefinition>\r
       <ModuleSaBuildOptions>\r
         <FvBinding>NULL</FvBinding>\r
           <MaxDatumSize>4</MaxDatumSize>\r
           <Value>10000000</Value>\r
         </PcdData>\r
+        <PcdData ItemType="FIXED_AT_BUILD">\r
+          <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>\r
+          <Token>0x0000000c</Token>\r
+          <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>\r
+          <DatumType>UINT64</DatumType>\r
+          <MaxDatumSize>8</MaxDatumSize>\r
+          <Value>0x0ffffc000000</Value>\r
+        </PcdData>\r
       </PcdBuildDefinition>\r
       <ModuleSaBuildOptions>\r
         <FvBinding>NULL</FvBinding>\r
index 3d4496f..210860d 100644 (file)
           <MaxDatumSize>4</MaxDatumSize>\r
           <Value>200000000</Value>\r
         </PcdData>\r
+        <PcdData ItemType="FIXED_AT_BUILD">\r
+          <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>\r
+          <Token>0x0000000c</Token>\r
+          <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>\r
+          <DatumType>UINT64</DatumType>\r
+          <MaxDatumSize>8</MaxDatumSize>\r
+          <Value>0x0ffffc000000</Value>\r
+        </PcdData>\r
       </PcdBuildDefinition>\r
       <ModuleSaBuildOptions>\r
         <FvBinding>FV_RECOVERY</FvBinding>\r
           <MaxDatumSize>4</MaxDatumSize>\r
           <Value>200000000</Value>\r
         </PcdData>\r
+        <PcdData ItemType="FIXED_AT_BUILD">\r
+          <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>\r
+          <Token>0x0000000c</Token>\r
+          <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>\r
+          <DatumType>UINT64</DatumType>\r
+          <MaxDatumSize>8</MaxDatumSize>\r
+          <Value>0x0ffffc000000</Value>\r
+        </PcdData>\r
       </PcdBuildDefinition>\r
       <ModuleSaBuildOptions>\r
         <FvBinding>FV_RECOVERY</FvBinding>\r
index 1e8aceb..f92ff9d 100644 (file)
@@ -18,7 +18,7 @@
     <Specification>FRAMEWORK_BUILD_PACKAGING_SPECIFICATION   0x00000052</Specification>\r
   </MsaHeader>\r
   <ModuleDefinitions>\r
-    <SupportedArchitectures>IA32 X64</SupportedArchitectures>\r
+    <SupportedArchitectures>IA32 X64 IPF</SupportedArchitectures>\r
     <BinaryModule>false</BinaryModule>\r
     <OutputFileBasename>BaseIoLibIntrinsic</OutputFileBasename>\r
   </ModuleDefinitions>\r
@@ -32,6 +32,9 @@
     <LibraryClass Usage="ALWAYS_CONSUMED">\r
       <Keyword>DebugLib</Keyword>\r
     </LibraryClass>\r
+    <LibraryClass Usage="ALWAYS_CONSUMED">\r
+      <Keyword>PcdLib</Keyword>\r
+    </LibraryClass>\r
   </LibraryClassDefinitions>\r
   <SourceFiles>\r
     <Filename SupArchList="IA32">IoLib.c</Filename>\r
@@ -42,6 +45,8 @@
     <Filename SupArchList="X64">IoLibMsc.c</Filename>\r
     <Filename SupArchList="X64">IoLibGcc.c</Filename>\r
     <Filename SupArchList="X64">IoHighLevel.c</Filename>\r
+    <Filename SupArchList="IPF">IoLibIpf.c</Filename>\r
+    <Filename SupArchList="IPF">IoHighLevel.c</Filename>\r
   </SourceFiles>\r
   <PackageDependencies>\r
     <Package PackageGuid="5e0e9358-46b6-4ae2-8218-4ab8b9bbdcec"/>\r
     <Specification>EFI_SPECIFICATION_VERSION 0x00020000</Specification>\r
     <Specification>EDK_RELEASE_VERSION 0x00020000</Specification>\r
   </Externs>\r
+  <PcdCoded>\r
+    <PcdEntry SupArchList="IPF" PcdItemType="FIXED_AT_BUILD" Usage="ALWAYS_CONSUMED">\r
+      <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>\r
+      <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>\r
+      <DefaultValue>0x0ffffc000000</DefaultValue>\r
+      <HelpText>The base address of IPF IO Block</HelpText>\r
+    </PcdEntry>\r
+  </PcdCoded>\r
 </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 (file)
index 0000000..234c336
--- /dev/null
@@ -0,0 +1,433 @@
+/** @file\r
+  Common I/O Library routines.\r
+\r
+  Copyright (c) 2006, Intel Corporation<BR>\r
+  All rights reserved. This program and the accompanying materials\r
+  are licensed and made available under the terms and conditions of the BSD License\r
+  which accompanies this distribution.  The full text of the license may be found at\r
+  http://opensource.org/licenses/bsd-license.php\r
+\r
+  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:  IoLibIpf.c\r
+\r
+**/\r
+\r
+#define BIT63                0x8000000000000000ULL\r
+\r
+#define MAP_PORT_BASE_TO_MEM(_Port) \\r
+    ((((_Port) & 0xfffc) << 10) | ((_Port) & 0x0fff))\r
+\r
+/**\r
+  Reads a 8-bit I/O port.\r
+\r
+  Reads the 8-bit I/O port specified by Port. The 8-bit read value is returned.\r
+  This function must guarantee that all I/O read and write operations are\r
+  serialized.\r
+\r
+  @param  Port  The I/O port to read.\r
+\r
+  @return The value read.\r
+\r
+**/\r
+UINT8\r
+EFIAPI\r
+IoRead8 (\r
+  IN  UINT64                 Port\r
+  )\r
+{\r
+  UINT64           Address;\r
+\r
+  //\r
+  // Add the 64MB aligned IO Port space to the IO address\r
+  //\r
+  Address = MAP_PORT_BASE_TO_MEM (Port);\r
+  Address += PcdGet64(PcdIoBlockBaseAddressForIpf);\r
+\r
+  return MmioRead8 (Address);\r
+}\r
+\r
+/**\r
+  Reads a 16-bit I/O port.\r
+\r
+  Reads the 16-bit I/O port specified by Port. The 16-bit read value is returned.\r
+  This function must guarantee that all I/O read and write operations are\r
+  serialized.\r
+\r
+  @param  Port  The I/O port to read.\r
+\r
+  @return The value read.\r
+\r
+**/\r
+UINT16\r
+EFIAPI\r
+IoRead16 (\r
+  IN  UINT64                 Port\r
+  )\r
+{\r
+  UINT64           Address;\r
+\r
+  //\r
+  // Add the 64MB aligned IO Port space to the IO address\r
+  //\r
+  Address = MAP_PORT_BASE_TO_MEM (Port);\r
+  Address += PcdGet64(PcdIoBlockBaseAddressForIpf);\r
+\r
+  return MmioRead16 (Address);\r
+}\r
+\r
+/**\r
+  Reads a 32-bit I/O port.\r
+\r
+  Reads the 32-bit I/O port specified by Port. The 32-bit read value is returned.\r
+  This function must guarantee that all I/O read and write operations are\r
+  serialized.\r
+\r
+  @param  Port  The I/O port to read.\r
+\r
+  @return The value read.\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+IoRead32 (\r
+  IN  UINT64                 Port\r
+  )\r
+{\r
+  UINT64           Address;\r
+\r
+  //\r
+  // Add the 64MB aligned IO Port space to the IO address\r
+  //\r
+  Address = MAP_PORT_BASE_TO_MEM (Port);\r
+  Address += PcdGet64(PcdIoBlockBaseAddressForIpf);\r
+\r
+  return MmioRead32 (Address);\r
+}\r
+\r
+/**\r
+  Writes a 8-bit I/O port.\r
+\r
+  Writes the 8-bit I/O port specified by Port with the value specified by Value\r
+  and returns Value. This function must guarantee that all I/O read and write\r
+  operations are serialized.\r
+\r
+  @param  Port  The I/O port to write.\r
+  @param  Value The value to write to the I/O port.\r
+\r
+  @return The value written the I/O port.\r
+\r
+**/\r
+UINT8\r
+EFIAPI\r
+IoWrite8 (\r
+  IN  UINT64                 Port,\r
+  IN  UINT8                  Data\r
+  )\r
+{\r
+  UINT64           Address;\r
+\r
+  //\r
+  // Add the 64MB aligned IO Port space to the IO address\r
+  //\r
+  Address = MAP_PORT_BASE_TO_MEM (Port);\r
+  Address += PcdGet64(PcdIoBlockBaseAddressForIpf);\r
+\r
+  return MmioWrite8 (Address, Data);\r
+}\r
+\r
+/**\r
+  Writes a 16-bit I/O port.\r
+\r
+  Writes the 16-bit I/O port specified by Port with the value specified by Value\r
+  and returns Value. This function must guarantee that all I/O read and write\r
+  operations are serialized.\r
+\r
+  @param  Port  The I/O port to write.\r
+  @param  Value The value to write to the I/O port.\r
+\r
+  @return The value written the I/O port.\r
+\r
+**/\r
+UINT16\r
+EFIAPI\r
+IoWrite16 (\r
+  IN  UINT64                 Port,\r
+  IN  UINT16                 Data\r
+  )\r
+{\r
+  UINT64           Address;\r
+\r
+  //\r
+  // Add the 64MB aligned IO Port space to the IO address\r
+  //\r
+  Address = MAP_PORT_BASE_TO_MEM (Port);\r
+  Address += PcdGet64(PcdIoBlockBaseAddressForIpf);\r
+\r
+  return MmioWrite16 (Address, Data);\r
+}\r
+\r
+/**\r
+  Writes a 32-bit I/O port.\r
+\r
+  Writes the 32-bit I/O port specified by Port with the value specified by Value\r
+  and returns Value. This function must guarantee that all I/O read and write\r
+  operations are serialized.\r
+\r
+  @param  Port  The I/O port to write.\r
+  @param  Value The value to write to the I/O port.\r
+\r
+  @return The value written the I/O port.\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+IoWrite32 (\r
+  IN  UINT64                 Port,\r
+  IN  UINT32                 Data\r
+  )\r
+{\r
+  UINT64           Address;\r
+\r
+  //\r
+  // Add the 64MB aligned IO Port space to the IO address\r
+  //\r
+  Address = MAP_PORT_BASE_TO_MEM (Port);\r
+  Address += PcdGet64(PcdIoBlockBaseAddressForIpf);\r
+\r
+  return MmioWrite32 (Address, Data);\r
+}\r
+\r
+/**\r
+  Reads a 8-bit MMIO register.\r
+\r
+  Reads the 8-bit MMIO register specified by Address. The 8-bit read value is\r
+  returned. This function must guarantee that all MMIO read and write\r
+  operations are serialized.\r
+\r
+  @param  Address The MMIO register to read.\r
+\r
+  @return The value read.\r
+\r
+**/\r
+UINT8\r
+EFIAPI\r
+MmioRead8 (\r
+  IN  UINT64                 Address\r
+  )\r
+{\r
+  UINT8            Data;\r
+\r
+  Address |= BIT63;\r
+\r
+  MemoryFence ();\r
+  Data = *((volatile UINT8 *) Address);\r
+  MemoryFence ();\r
+\r
+  return Data;\r
+}\r
+\r
+/**\r
+  Reads a 16-bit MMIO register.\r
+\r
+  Reads the 16-bit MMIO register specified by Address. The 16-bit read value is\r
+  returned. This function must guarantee that all MMIO read and write\r
+  operations are serialized.\r
+\r
+  @param  Address The MMIO register to read.\r
+\r
+  @return The value read.\r
+\r
+**/\r
+UINT16\r
+EFIAPI\r
+MmioRead16 (\r
+  IN  UINT64                 Address\r
+  )\r
+{\r
+  UINT16           Data;\r
+\r
+  Address |= BIT63;\r
+\r
+  MemoryFence ();\r
+  Data = *((volatile UINT16 *) Address);\r
+  MemoryFence ();\r
+\r
+  return Data;\r
+}\r
+\r
+/**\r
+  Reads a 32-bit MMIO register.\r
+\r
+  Reads the 32-bit MMIO register specified by Address. The 32-bit read value is\r
+  returned. This function must guarantee that all MMIO read and write\r
+  operations are serialized.\r
+\r
+  @param  Address The MMIO register to read.\r
+\r
+  @return The value read.\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+MmioRead32 (\r
+  IN  UINT64                 Address\r
+  )\r
+{\r
+  UINT32           Data;\r
+\r
+  Address |= BIT63;\r
+\r
+  MemoryFence ();\r
+  Data = *((volatile UINT32 *) Address);\r
+  MemoryFence ();\r
+\r
+  return Data;\r
+}\r
+\r
+/**\r
+  Reads a 64-bit MMIO register.\r
+\r
+  Reads the 64-bit MMIO register specified by Address. The 64-bit read value is\r
+  returned. This function must guarantee that all MMIO read and write\r
+  operations are serialized.\r
+\r
+  @param  Address The MMIO register to read.\r
+\r
+  @return The value read.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+MmioRead64 (\r
+  IN  UINT64                 Address\r
+  )\r
+{\r
+  UINT64           Data;\r
+\r
+  Address |= BIT63;\r
+\r
+  MemoryFence ();\r
+  Data = *((volatile UINT64 *) Address);\r
+  MemoryFence ();\r
+\r
+  return Data;\r
+\r
+}\r
+\r
+/**\r
+  Writes a 8-bit MMIO register.\r
+\r
+  Writes the 8-bit MMIO register specified by Address with the value specified\r
+  by Value and returns Value. This function must guarantee that all MMIO read\r
+  and write operations are serialized.\r
+\r
+  @param  Address The MMIO register to write.\r
+  @param  Data    The value to write to the MMIO register.\r
+\r
+  @return The value written the memory address.\r
+\r
+**/\r
+UINT8\r
+EFIAPI\r
+MmioWrite8 (\r
+  IN  UINT64                 Address,\r
+  IN  UINT8                  Data\r
+  )\r
+{\r
+  Address |= BIT63;\r
+\r
+  MemoryFence ();\r
+  *((volatile UINT8 *) Address) = Data;\r
+  MemoryFence ();\r
+\r
+  return Data;\r
+}\r
+\r
+/**\r
+  Writes a 16-bit MMIO register.\r
+\r
+  Writes the 16-bit MMIO register specified by Address with the value specified\r
+  by Value and returns Value. This function must guarantee that all MMIO read\r
+  and write operations are serialized.\r
+\r
+  @param  Address The MMIO register to write.\r
+  @param  Data    The value to write to the MMIO register.\r
+\r
+  @return The value written the memory address.\r
+\r
+**/\r
+UINT16\r
+EFIAPI\r
+MmioWrite16 (\r
+  IN  UINT64                 Address,\r
+  IN  UINT16                 Data\r
+  )\r
+{\r
+  Address |= BIT63;\r
+\r
+  MemoryFence ();\r
+  *((volatile UINT16 *) Address) = Data;\r
+  MemoryFence ();\r
+\r
+  return Data;\r
+}\r
+\r
+/**\r
+  Writes a 32-bit MMIO register.\r
+\r
+  Writes the 32-bit MMIO register specified by Address with the value specified\r
+  by Value and returns Value. This function must guarantee that all MMIO read\r
+  and write operations are serialized.\r
+\r
+  @param  Address The MMIO register to write.\r
+  @param  Data    The value to write to the MMIO register.\r
+\r
+  @return The value written the memory address.\r
+\r
+**/\r
+UINT32\r
+EFIAPI\r
+MmioWrite32 (\r
+  IN  UINT64                 Address,\r
+  IN  UINT32                 Data\r
+  )\r
+{\r
+  Address |= BIT63;\r
+\r
+  MemoryFence ();\r
+  *((volatile UINT32 *) Address) = Data;\r
+  MemoryFence ();\r
+\r
+  return Data;\r
+}\r
+\r
+/**\r
+  Writes a 64-bit MMIO register.\r
+\r
+  Writes the 64-bit MMIO register specified by Address with the value specified\r
+  by Value and returns Value. This function must guarantee that all MMIO read\r
+  and write operations are serialized.\r
+\r
+  @param  Address The MMIO register to write.\r
+  @param  Data    The value to write to the MMIO register.\r
+\r
+  @return The value written the memory address.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+MmioWrite64 (\r
+  IN  UINT64                 Address,\r
+  IN  UINT64                 Data\r
+  )\r
+{\r
+  Address |= BIT63;\r
+\r
+  MemoryFence ();\r
+  *((volatile UINT64 *) Address) = Data;\r
+  MemoryFence ();\r
+\r
+  return Data;\r
+}\r
index 19681c2..f7188e1 100644 (file)
       </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>
       </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>
index 21383c8..cf56854 100644 (file)
       <DefaultValue>0xE0000000</DefaultValue>\r
       <HelpText>The base address of PCI Express MMIO window.</HelpText>\r
     </PcdEntry>\r
+    <PcdEntry SupArchList="IPF">\r
+      <C_Name>PcdIoBlockBaseAddressForIpf</C_Name>\r
+      <Token>0x0000000c</Token>\r
+      <TokenSpaceGuidCName>gEfiMdePkgTokenSpaceGuid</TokenSpaceGuidCName>\r
+      <DatumType>UINT64</DatumType>\r
+      <ValidUsage>FIXED_AT_BUILD</ValidUsage>\r
+      <DefaultValue>0x0ffffc000000</DefaultValue>\r
+      <HelpText>The base address of IPF IO Block</HelpText>\r
+    </PcdEntry>\r
     <PcdEntry>\r
       <C_Name>PcdFSBClock</C_Name>\r
       <Token>0x0000000c</Token>\r