]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OldMdePkg/Library/BaseIoLibIntrinsic/IoLibIpf.c
Moved the MdePkg to OldMdePkg so that new code in MdePkg does not break existing...
[mirror_edk2.git] / OldMdePkg / Library / BaseIoLibIntrinsic / IoLibIpf.c
diff --git a/OldMdePkg/Library/BaseIoLibIntrinsic/IoLibIpf.c b/OldMdePkg/Library/BaseIoLibIntrinsic/IoLibIpf.c
new file mode 100644 (file)
index 0000000..8de4f71
--- /dev/null
@@ -0,0 +1,481 @@
+/** @file\r
+  Common I/O Library routines.\r
+\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
+  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 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
+  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.\r
+\r
+**/\r
+UINT64\r
+EFIAPI\r
+IoRead64 (\r
+  IN      UINTN                     Port\r
+  )\r
+{\r
+  ASSERT (FALSE);\r
+  return 0;\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
+  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 the I/O port.\r
+\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
+  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