]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseIoLibIntrinsic/IoLibIpf.c
Code Scrub for MdePkg.
[mirror_edk2.git] / MdePkg / Library / BaseIoLibIntrinsic / IoLibIpf.c
index 234c3369b29bbfc26bbfdff845d011b6a231bb44..bcd376aa630d321c84f9bf05cd4b7be772f1b4a5 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   Common I/O Library routines.\r
 \r
-  Copyright (c) 2006, Intel Corporation<BR>\r
+  Copyright (c) 2006 - 2007, 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
   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
+// Include common header file for this module.\r
+//\r
+#include "BaseIoLibIntrinsicInternal.h"\r
 \r
 #define MAP_PORT_BASE_TO_MEM(_Port) \\r
     ((((_Port) & 0xfffc) << 10) | ((_Port) & 0x0fff))\r
 \r
+/**\r
+  Translates I/O port address to memory address.\r
+\r
+  This function translates I/O port address to memory address by adding the 64MB\r
+  aligned I/O Port space to the I/O address.\r
+  If I/O Port space base is not 64MB aligned, then ASSERT ().  \r
+\r
+  @param  Port  The I/O port to read.\r
+\r
+  @return The memory address.\r
+\r
+**/\r
+UINTN\r
+InternalGetMemoryMapAddress (\r
+  IN UINTN                  Port\r
+  )\r
+{\r
+  UINTN                     Address;\r
+  UINTN                     IoBlockBaseAddress;\r
+\r
+  Address            = MAP_PORT_BASE_TO_MEM (Port);\r
+  IoBlockBaseAddress = PcdGet64(PcdIoBlockBaseAddressForIpf);\r
+\r
+  //\r
+  // Make sure that the I/O Port space base is 64MB aligned.\r
+  // \r
+  ASSERT ((IoBlockBaseAddress & 0x3ffffff) == 0);\r
+  Address += IoBlockBaseAddress;\r
+\r
+  return Address;\r
+}\r
+\r
 /**\r
   Reads a 8-bit I/O port.\r
 \r
@@ -28,7 +61,7 @@
 \r
   @param  Port  The I/O port to read.\r
 \r
-  @return The value read.\r
+  @return The value read from Port.\r
 \r
 **/\r
 UINT8\r
@@ -37,15 +70,7 @@ IoRead8 (
   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
+  return MmioRead8 (InternalGetMemoryMapAddress (Port));\r
 }\r
 \r
 /**\r
@@ -57,7 +82,7 @@ IoRead8 (
 \r
   @param  Port  The I/O port to read.\r
 \r
-  @return The value read.\r
+  @return The value read from Port.\r
 \r
 **/\r
 UINT16\r
@@ -66,15 +91,7 @@ IoRead16 (
   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
+  return MmioRead16 (InternalGetMemoryMapAddress (Port));\r
 }\r
 \r
 /**\r
@@ -86,7 +103,7 @@ IoRead16 (
 \r
   @param  Port  The I/O port to read.\r
 \r
-  @return The value read.\r
+  @return The value read from Port.\r
 \r
 **/\r
 UINT32\r
@@ -95,15 +112,31 @@ IoRead32 (
   IN  UINT64                 Port\r
   )\r
 {\r
-  UINT64           Address;\r
+  return MmioRead32 (InternalGetMemoryMapAddress (Port));\r
+}\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
+  Reads a 64-bit I/O port.\r
+\r
+  Reads the 64-bit I/O port specified by Port. The 64-bit read value is returned.\r
+  This function must guarantee that all I/O read and write operations are\r
+  serialized.\r
+\r
+  If 64-bit I/O port operations are not supported, then ASSERT().\r
+\r
+  @param  Port  The I/O port to read.\r
+\r
+  @return The value read from Port.\r
 \r
-  return MmioRead32 (Address);\r
+**/\r
+UINT64\r
+EFIAPI\r
+IoRead64 (\r
+  IN      UINTN                     Port\r
+  )\r
+{\r
+  ASSERT (FALSE);\r
+  return 0;\r
 }\r
 \r
 /**\r
@@ -114,9 +147,11 @@ IoRead32 (
   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
+  @param  Data  The value to write to the I/O port.\r
 \r
-  @return The value written the I/O port.\r
+  @return The value written to the I/O port. It equals to the\r
+          input Value instead of the actual value read back from\r
+          the I/O port.\r
 \r
 **/\r
 UINT8\r
@@ -126,15 +161,7 @@ IoWrite8 (
   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
+  return MmioWrite8 (InternalGetMemoryMapAddress (Port), Data);\r
 }\r
 \r
 /**\r
@@ -145,9 +172,11 @@ IoWrite8 (
   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
+  @param  Data  The value to write to the I/O port.\r
 \r
-  @return The value written the I/O port.\r
+  @return The value written to the I/O port. It equals to the\r
+          input Value instead of the actual value read back from\r
+          the I/O port.\r
 \r
 **/\r
 UINT16\r
@@ -157,15 +186,7 @@ IoWrite16 (
   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
+  return MmioWrite16 (InternalGetMemoryMapAddress (Port), Data);\r
 }\r
 \r
 /**\r
@@ -176,9 +197,11 @@ IoWrite16 (
   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
+  @param  Data  The value to write to the I/O port.\r
 \r
-  @return The value written the I/O port.\r
+  @return The value written to the I/O port. It equals to the\r
+          input Value instead of the actual value read back from\r
+          the I/O port.\r
 \r
 **/\r
 UINT32\r
@@ -188,15 +211,35 @@ IoWrite32 (
   IN  UINT32                 Data\r
   )\r
 {\r
-  UINT64           Address;\r
+  return MmioWrite32 (InternalGetMemoryMapAddress (Port), Data);\r
+}\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
+  Writes a 64-bit I/O port.\r
+\r
+  Writes the 64-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
+  If 64-bit I/O port operations are not supported, then ASSERT().\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 to the I/O port. It equals to the\r
+          input Value instead of the actual value read back from\r
+          the I/O port.\r
 \r
-  return MmioWrite32 (Address, Data);\r
+**/\r
+UINT64\r
+EFIAPI\r
+IoWrite64 (\r
+  IN      UINTN                     Port,\r
+  IN      UINT64                    Value\r
+  )\r
+{\r
+  ASSERT (FALSE);\r
+  return 0;\r
 }\r
 \r
 /**\r
@@ -208,7 +251,7 @@ IoWrite32 (
 \r
   @param  Address The MMIO register to read.\r
 \r
-  @return The value read.\r
+  @return The value read from Address.\r
 \r
 **/\r
 UINT8\r
@@ -237,7 +280,7 @@ MmioRead8 (
 \r
   @param  Address The MMIO register to read.\r
 \r
-  @return The value read.\r
+  @return The value read from Address.\r
 \r
 **/\r
 UINT16\r
@@ -248,6 +291,11 @@ MmioRead16 (
 {\r
   UINT16           Data;\r
 \r
+  //\r
+  // Make sure that Address is 16-bit aligned.\r
+  // \r
+  ASSERT ((Address & 1) == 0);\r
+\r
   Address |= BIT63;\r
 \r
   MemoryFence ();\r
@@ -266,7 +314,7 @@ MmioRead16 (
 \r
   @param  Address The MMIO register to read.\r
 \r
-  @return The value read.\r
+  @return The value read from Address.\r
 \r
 **/\r
 UINT32\r
@@ -277,6 +325,11 @@ MmioRead32 (
 {\r
   UINT32           Data;\r
 \r
+  //\r
+  // Make sure that Address is 32-bit aligned.\r
+  // \r
+  ASSERT ((Address & 3) == 0);\r
+\r
   Address |= BIT63;\r
 \r
   MemoryFence ();\r
@@ -295,7 +348,7 @@ MmioRead32 (
 \r
   @param  Address The MMIO register to read.\r
 \r
-  @return The value read.\r
+  @return The value read from Address.\r
 \r
 **/\r
 UINT64\r
@@ -306,6 +359,11 @@ MmioRead64 (
 {\r
   UINT64           Data;\r
 \r
+  //\r
+  // Make sure that Address is 64-bit aligned.\r
+  // \r
+  ASSERT ((Address & 7) == 0);\r
+\r
   Address |= BIT63;\r
 \r
   MemoryFence ();\r
@@ -326,7 +384,9 @@ MmioRead64 (
   @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
+  @return The value written to the Mmio. It equals to the\r
+          input Value instead of the actual value read back from\r
+          the Mmio.\r
 \r
 **/\r
 UINT8\r
@@ -355,7 +415,9 @@ MmioWrite8 (
   @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
+  @return The value written to the Mmio. It equals to the\r
+          input Value instead of the actual value read back from\r
+          the Mmio.\r
 \r
 **/\r
 UINT16\r
@@ -365,6 +427,11 @@ MmioWrite16 (
   IN  UINT16                 Data\r
   )\r
 {\r
+  //\r
+  // Make sure that Address is 16-bit aligned.\r
+  // \r
+  ASSERT ((Address & 1) == 0);\r
+\r
   Address |= BIT63;\r
 \r
   MemoryFence ();\r
@@ -384,7 +451,9 @@ MmioWrite16 (
   @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
+  @return The value written to the Mmio. It equals to the\r
+          input Value instead of the actual value read back from\r
+          the Mmio.\r
 \r
 **/\r
 UINT32\r
@@ -394,6 +463,11 @@ MmioWrite32 (
   IN  UINT32                 Data\r
   )\r
 {\r
+  //\r
+  // Make sure that Address is 32-bit aligned.\r
+  // \r
+  ASSERT ((Address & 3) == 0);\r
+\r
   Address |= BIT63;\r
 \r
   MemoryFence ();\r
@@ -413,7 +487,9 @@ MmioWrite32 (
   @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
+  @return The value written to the Mmio. It equals to the\r
+          input Value instead of the actual value read back from\r
+          the Mmio.\r
 \r
 **/\r
 UINT64\r
@@ -423,6 +499,11 @@ MmioWrite64 (
   IN  UINT64                 Data\r
   )\r
 {\r
+  //\r
+  // Make sure that Address is 64-bit aligned.\r
+  // \r
+  ASSERT ((Address & 7) == 0);\r
+\r
   Address |= BIT63;\r
 \r
   MemoryFence ();\r