]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/PeiIoLibCpuIo/IoLib.c
Fix the wrong fixing for hardcore value 7.
[mirror_edk2.git] / MdePkg / Library / PeiIoLibCpuIo / IoLib.c
index 2156f6b480f27de6dbc599c129785d8f70fd5ce9..066ceddbfb339b96c1476d4296bae87d4fa8bd08 100644 (file)
@@ -1,5 +1,5 @@
 /** @file\r
-  I/O Library.\r
+  I/O Library. The implementations are based on EFI_PEI_SERVICE->CpuIo interface.\r
 \r
   Copyright (c) 2006, Intel Corporation<BR>\r
   All rights reserved. This program and the accompanying materials\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:  IoLib.c\r
-\r
 **/\r
 \r
+\r
+#include <PiPei.h>\r
+\r
+#include <Library/IoLib.h>\r
+#include <Library/DebugLib.h>\r
+#include <Library/BaseLib.h>\r
+#include <Library/PeiServicesTablePointerLib.h>\r
+\r
 /**\r
   Reads an 8-bit I/O port.\r
 \r
@@ -25,7 +31,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
@@ -34,12 +40,11 @@ IoRead8 (
   IN      UINTN                     Port\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
 \r
   return CpuIo->IoRead8 (PeiServices, CpuIo, (UINT64) Port);\r
@@ -67,12 +72,11 @@ IoWrite8 (
   IN      UINT8                     Value\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
 \r
   CpuIo->IoWrite8 (PeiServices, CpuIo, (UINT64) Port, Value);\r
@@ -90,7 +94,7 @@ IoWrite8 (
 \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
@@ -99,14 +103,16 @@ IoRead16 (
   IN      UINTN                     Port\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Port is aligned on a 16-bit boundary.\r
+  //\r
+  ASSERT ((Port & 1) == 0);\r
   return CpuIo->IoRead16 (PeiServices, CpuIo, (UINT64) Port);\r
 }\r
 \r
@@ -132,14 +138,16 @@ IoWrite16 (
   IN      UINT16                    Value\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Port is aligned on a 16-bit boundary.\r
+  //\r
+  ASSERT ((Port & 1) == 0);\r
   CpuIo->IoWrite16 (PeiServices, CpuIo, (UINT64) Port, Value);\r
   return Value;\r
 }\r
@@ -155,7 +163,7 @@ IoWrite16 (
 \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
@@ -164,14 +172,16 @@ IoRead32 (
   IN      UINTN                     Port\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Port is aligned on a 32-bit boundary.\r
+  //\r
+  ASSERT ((Port & 3) == 0);\r
   return CpuIo->IoRead32 (PeiServices, CpuIo, (UINT64) Port);\r
 }\r
 \r
@@ -197,14 +207,16 @@ IoWrite32 (
   IN      UINT32                    Value\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Port is aligned on a 32-bit boundary.\r
+  //\r
+  ASSERT ((Port & 3) == 0);\r
   CpuIo->IoWrite32 (PeiServices, CpuIo, (UINT64) Port, Value);\r
   return Value;\r
 }\r
@@ -220,7 +232,7 @@ IoWrite32 (
 \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
 UINT64\r
@@ -229,14 +241,16 @@ IoRead64 (
   IN      UINTN                     Port\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Port is aligned on a 64-bit boundary.\r
+  //\r
+  ASSERT ((Port & 7) == 0);\r
   return CpuIo->IoRead64 (PeiServices, CpuIo, (UINT64) Port);\r
 }\r
 \r
@@ -262,14 +276,16 @@ IoWrite64 (
   IN      UINT64                    Value\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Port is aligned on a 64-bit boundary.\r
+  //\r
+  ASSERT ((Port & 7) == 0);\r
   CpuIo->IoWrite64 (PeiServices, CpuIo, (UINT64) Port, Value);\r
   return Value;;\r
 }\r
@@ -285,7 +301,7 @@ IoWrite64 (
 \r
   @param  Address The MMIO register to read.\r
 \r
-  @return The value read.\r
+  @return The value read from Port.\r
 \r
 **/\r
 UINT8\r
@@ -294,12 +310,11 @@ MmioRead8 (
   IN      UINTN                     Address\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
 \r
   return CpuIo->MemRead8 (PeiServices, CpuIo, (UINT64) Address);\r
@@ -316,7 +331,8 @@ MmioRead8 (
 \r
   @param  Address The MMIO register to write.\r
   @param  Value   The value to write to the MMIO register.\r
-\r
+  \r
+  @return The Value written back to Mmio register.\r
 **/\r
 UINT8\r
 EFIAPI\r
@@ -325,12 +341,11 @@ MmioWrite8 (
   IN      UINT8                     Value\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
 \r
   CpuIo->MemWrite8 (PeiServices, CpuIo, (UINT64) Address, Value);\r
@@ -348,7 +363,7 @@ MmioWrite8 (
 \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
@@ -357,14 +372,16 @@ MmioRead16 (
   IN      UINTN                     Address\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Address is aligned on a 16-bit boundary.\r
+  //\r
+  ASSERT ((Address & 1) == 0);\r
   return CpuIo->MemRead16 (PeiServices, CpuIo, (UINT64) Address);\r
 \r
 }\r
@@ -380,6 +397,8 @@ MmioRead16 (
 \r
   @param  Address The MMIO register to write.\r
   @param  Value   The value to write to the MMIO register.\r
+  \r
+  @return The Value written back to Mmio register\r
 \r
 **/\r
 UINT16\r
@@ -389,14 +408,16 @@ MmioWrite16 (
   IN      UINT16                    Value\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Address is aligned on a 16-bit boundary.\r
+  //\r
+  ASSERT ((Address & 1) == 0);\r
   CpuIo->MemWrite16 (PeiServices, CpuIo, (UINT64) Address, Value);\r
   return Value;\r
 }\r
@@ -412,7 +433,7 @@ MmioWrite16 (
 \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
@@ -421,14 +442,16 @@ MmioRead32 (
   IN      UINTN                     Address\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Address is aligned on a 32-bit boundary.\r
+  //\r
+  ASSERT ((Address & 3) == 0);\r
   return CpuIo->MemRead32 (PeiServices, CpuIo, (UINT64) Address);\r
 \r
 }\r
@@ -444,6 +467,8 @@ MmioRead32 (
 \r
   @param  Address The MMIO register to write.\r
   @param  Value   The value to write to the MMIO register.\r
+  \r
+  @return The Value written back to Mmio register\r
 \r
 **/\r
 UINT32\r
@@ -453,14 +478,16 @@ MmioWrite32 (
   IN      UINT32                    Value\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Address is aligned on a 32-bit boundary.\r
+  //\r
+  ASSERT ((Address & 3) == 0);\r
   CpuIo->MemWrite32 (PeiServices, CpuIo, (UINT64) Address, Value);\r
   return Value;\r
 }\r
@@ -476,7 +503,7 @@ MmioWrite32 (
 \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
@@ -485,14 +512,16 @@ MmioRead64 (
   IN      UINTN                     Address\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Address is aligned on a 64-bit boundary.\r
+  //\r
+  ASSERT ((Address & (sizeof (UINT64) - 1)) == 0);\r
   return CpuIo->MemRead64 (PeiServices, CpuIo, (UINT64) Address);\r
 \r
 }\r
@@ -509,6 +538,7 @@ MmioRead64 (
   @param  Address The MMIO register to write.\r
   @param  Value   The value to write to the MMIO register.\r
 \r
+  @return The Value written back to Mmio register\r
 **/\r
 UINT64\r
 EFIAPI\r
@@ -517,14 +547,16 @@ MmioWrite64 (
   IN      UINT64                    Value\r
   )\r
 {\r
-  EFI_PEI_SERVICES                  **PeiServices;\r
+  CONST EFI_PEI_SERVICES            **PeiServices;\r
   EFI_PEI_CPU_IO_PPI                *CpuIo;\r
 \r
-  PeiServices = GetPeiServicesTablePointer ();\r
+  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
-\r
   ASSERT (CpuIo != NULL);\r
-\r
+  //\r
+  // Make sure Address is aligned on a 64-bit boundary.\r
+  //\r
+  ASSERT ((Address & 7) == 0);\r
   CpuIo->MemWrite64 (PeiServices, CpuIo, (UINT64) Address, Value);\r
   return Value;\r
 }\r