]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/PeiIoLibCpuIo/IoLib.c
MdePkg: Apply uncrustify changes
[mirror_edk2.git] / MdePkg / Library / PeiIoLibCpuIo / IoLib.c
index e047ffa639fea2980e70210c1e9dd9b4ac43cbb9..5390ff7a14121b018427af1f9fd923bcf9955cbb 100644 (file)
@@ -1,18 +1,13 @@
 /** @file\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
-  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
+  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>\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
+  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 \r
 **/\r
 \r
-\r
 #include <PiPei.h>\r
 \r
 #include <Library/IoLib.h>\r
 #include <Library/BaseLib.h>\r
 #include <Library/PeiServicesTablePointerLib.h>\r
 \r
+/**\r
+  Reads registers in the EFI CPU I/O space.\r
+\r
+  Reads the I/O port specified by Port with registers width specified by Width.\r
+  The port is read Count times, and the read data is stored in the provided Buffer.\r
+\r
+  This function must guarantee that all I/O read and write operations are serialized.\r
+  If such operations are not supported, then ASSERT().\r
+\r
+  @param  Port          The base address of the I/O operation.\r
+                        The caller is responsible for aligning the Address if required.\r
+  @param  Width         The width of the I/O operation.\r
+  @param  Count         The number of times to read I/O port.\r
+  @param  Buffer        The buffer to store the read data into.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+IoReadFifoWorker (\r
+  IN      UINTN                     Port,\r
+  IN      EFI_PEI_CPU_IO_PPI_WIDTH  Width,\r
+  IN      UINTN                     Count,\r
+  IN      VOID                      *Buffer\r
+  )\r
+{\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
+  EFI_STATUS              Status;\r
+\r
+  PeiServices = GetPeiServicesTablePointer ();\r
+  CpuIo       = (*PeiServices)->CpuIo;\r
+  ASSERT (CpuIo != NULL);\r
+\r
+  Status = CpuIo->Io.Read (PeiServices, CpuIo, Width, Port, Count, Buffer);\r
+  ASSERT_EFI_ERROR (Status);\r
+}\r
+\r
+/**\r
+  Writes registers in the EFI CPU I/O space.\r
+\r
+  Writes the I/O port specified by Port with registers width specified by Width.\r
+  The port is written Count times, and the write data is retrieved from the provided Buffer.\r
+\r
+  This function must guarantee that all I/O read and write operations are serialized.\r
+  If such operations are not supported, then ASSERT().\r
+\r
+  @param  Port          The base address of the I/O operation.\r
+                        The caller is responsible for aligning the Address if required.\r
+  @param  Width         The width of the I/O operation.\r
+  @param  Count         The number of times to write I/O port.\r
+  @param  Buffer        The buffer to store the read data into.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+IoWriteFifoWorker (\r
+  IN      UINTN                     Port,\r
+  IN      EFI_PEI_CPU_IO_PPI_WIDTH  Width,\r
+  IN      UINTN                     Count,\r
+  IN      VOID                      *Buffer\r
+  )\r
+{\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
+  EFI_STATUS              Status;\r
+\r
+  PeiServices = GetPeiServicesTablePointer ();\r
+  CpuIo       = (*PeiServices)->CpuIo;\r
+  ASSERT (CpuIo != NULL);\r
+\r
+  Status = CpuIo->Io.Write (PeiServices, CpuIo, Width, Port, Count, Buffer);\r
+  ASSERT_EFI_ERROR (Status);\r
+}\r
+\r
 /**\r
   Reads an 8-bit I/O port.\r
 \r
 \r
   @param  Port  The I/O port to read.\r
 \r
-  @return The value read from Port.\r
+  @return The value read.\r
 \r
 **/\r
 UINT8\r
 EFIAPI\r
 IoRead8 (\r
-  IN      UINTN                     Port\r
+  IN      UINTN  Port\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\r
 \r
-  return CpuIo->IoRead8 (PeiServices, CpuIo, (UINT64) Port);\r
+  return CpuIo->IoRead8 (PeiServices, CpuIo, (UINT64)Port);\r
 }\r
 \r
 /**\r
@@ -68,18 +137,18 @@ IoRead8 (
 UINT8\r
 EFIAPI\r
 IoWrite8 (\r
-  IN      UINTN                     Port,\r
-  IN      UINT8                     Value\r
+  IN      UINTN  Port,\r
+  IN      UINT8  Value\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\r
 \r
-  CpuIo->IoWrite8 (PeiServices, CpuIo, (UINT64) Port, Value);\r
+  CpuIo->IoWrite8 (PeiServices, CpuIo, (UINT64)Port, Value);\r
   return Value;\r
 }\r
 \r
@@ -91,29 +160,30 @@ IoWrite8 (
   serialized.\r
 \r
   If 16-bit I/O port operations are not supported, then ASSERT().\r
+  If Port is not aligned on a 16-bit boundary, then ASSERT().\r
 \r
   @param  Port  The I/O port to read.\r
 \r
-  @return The value read from Port.\r
+  @return The value read.\r
 \r
 **/\r
 UINT16\r
 EFIAPI\r
 IoRead16 (\r
-  IN      UINTN                     Port\r
+  IN      UINTN  Port\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\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
+  return CpuIo->IoRead16 (PeiServices, CpuIo, (UINT64)Port);\r
 }\r
 \r
 /**\r
@@ -124,6 +194,7 @@ IoRead16 (
   operations are serialized.\r
 \r
   If 16-bit I/O port operations are not supported, then ASSERT().\r
+  If Port is not aligned on a 16-bit boundary, 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
@@ -134,21 +205,21 @@ IoRead16 (
 UINT16\r
 EFIAPI\r
 IoWrite16 (\r
-  IN      UINTN                     Port,\r
-  IN      UINT16                    Value\r
+  IN      UINTN   Port,\r
+  IN      UINT16  Value\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\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
+  CpuIo->IoWrite16 (PeiServices, CpuIo, (UINT64)Port, Value);\r
   return Value;\r
 }\r
 \r
@@ -160,29 +231,30 @@ IoWrite16 (
   serialized.\r
 \r
   If 32-bit I/O port operations are not supported, then ASSERT().\r
+  If Port is not aligned on a 32-bit boundary, then ASSERT().\r
 \r
   @param  Port  The I/O port to read.\r
 \r
-  @return The value read from Port.\r
+  @return The value read.\r
 \r
 **/\r
 UINT32\r
 EFIAPI\r
 IoRead32 (\r
-  IN      UINTN                     Port\r
+  IN      UINTN  Port\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\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
+  return CpuIo->IoRead32 (PeiServices, CpuIo, (UINT64)Port);\r
 }\r
 \r
 /**\r
@@ -193,6 +265,7 @@ IoRead32 (
   operations are serialized.\r
 \r
   If 32-bit I/O port operations are not supported, then ASSERT().\r
+  If Port is not aligned on a 32-bit boundary, 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
@@ -203,21 +276,21 @@ IoRead32 (
 UINT32\r
 EFIAPI\r
 IoWrite32 (\r
-  IN      UINTN                     Port,\r
-  IN      UINT32                    Value\r
+  IN      UINTN   Port,\r
+  IN      UINT32  Value\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\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
+  CpuIo->IoWrite32 (PeiServices, CpuIo, (UINT64)Port, Value);\r
   return Value;\r
 }\r
 \r
@@ -229,29 +302,30 @@ IoWrite32 (
   serialized.\r
 \r
   If 64-bit I/O port operations are not supported, then ASSERT().\r
+  If Port is not aligned on a 64-bit boundary, then ASSERT().\r
 \r
   @param  Port  The I/O port to read.\r
 \r
-  @return The value read from Port.\r
+  @return The value read.\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 IoRead64 (\r
-  IN      UINTN                     Port\r
+  IN      UINTN  Port\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\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
+  return CpuIo->IoRead64 (PeiServices, CpuIo, (UINT64)Port);\r
 }\r
 \r
 /**\r
@@ -262,6 +336,7 @@ IoRead64 (
   operations are serialized.\r
 \r
   If 64-bit I/O port operations are not supported, then ASSERT().\r
+  If Port is not aligned on a 64-bit boundary, 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
@@ -272,22 +347,206 @@ IoRead64 (
 UINT64\r
 EFIAPI\r
 IoWrite64 (\r
-  IN      UINTN                     Port,\r
-  IN      UINT64                    Value\r
+  IN      UINTN   Port,\r
+  IN      UINT64  Value\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\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
+  CpuIo->IoWrite64 (PeiServices, CpuIo, (UINT64)Port, Value);\r
+  return Value;\r
+}\r
+\r
+/**\r
+  Reads an 8-bit I/O port fifo into a block of memory.\r
+\r
+  Reads the 8-bit I/O fifo port specified by Port.\r
+  The port is read Count times, and the read data is\r
+  stored in the provided Buffer.\r
+\r
+  This function must guarantee that all I/O read and write operations are\r
+  serialized.\r
+\r
+  If 8-bit I/O port operations are not supported, then ASSERT().\r
+\r
+  @param  Port    The I/O port to read.\r
+  @param  Count   The number of times to read I/O port.\r
+  @param  Buffer  The buffer to store the read data into.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+IoReadFifo8 (\r
+  IN      UINTN  Port,\r
+  IN      UINTN  Count,\r
+  OUT     VOID   *Buffer\r
+  )\r
+{\r
+  IoReadFifoWorker (Port, EfiPeiCpuIoWidthFifoUint8, Count, Buffer);\r
+}\r
+\r
+/**\r
+  Writes a block of memory into an 8-bit I/O port fifo.\r
+\r
+  Writes the 8-bit I/O fifo port specified by Port.\r
+  The port is written Count times, and the write data is\r
+  retrieved from the provided Buffer.\r
+\r
+  This function must guarantee that all I/O write and write operations are\r
+  serialized.\r
+\r
+  If 8-bit I/O port operations are not supported, then ASSERT().\r
+\r
+  @param  Port    The I/O port to write.\r
+  @param  Count   The number of times to write I/O port.\r
+  @param  Buffer  The buffer to retrieve the write data from.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+IoWriteFifo8 (\r
+  IN      UINTN  Port,\r
+  IN      UINTN  Count,\r
+  IN      VOID   *Buffer\r
+  )\r
+{\r
+  IoWriteFifoWorker (Port, EfiPeiCpuIoWidthFifoUint8, Count, Buffer);\r
+}\r
+\r
+/**\r
+  Reads a 16-bit I/O port fifo into a block of memory.\r
+\r
+  Reads the 16-bit I/O fifo port specified by Port.\r
+  The port is read Count times, and the read data is\r
+  stored in the provided Buffer.\r
+\r
+  This function must guarantee that all I/O read and write operations are\r
+  serialized.\r
+\r
+  If 16-bit I/O port operations are not supported, then ASSERT().\r
+\r
+  @param  Port    The I/O port to read.\r
+  @param  Count   The number of times to read I/O port.\r
+  @param  Buffer  The buffer to store the read data into.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+IoReadFifo16 (\r
+  IN      UINTN  Port,\r
+  IN      UINTN  Count,\r
+  OUT     VOID   *Buffer\r
+  )\r
+{\r
+  //\r
+  // Make sure Port is aligned on a 16-bit boundary.\r
+  //\r
+  ASSERT ((Port & 1) == 0);\r
+  IoReadFifoWorker (Port, EfiPeiCpuIoWidthFifoUint16, Count, Buffer);\r
+}\r
+\r
+/**\r
+  Writes a block of memory into a 16-bit I/O port fifo.\r
+\r
+  Writes the 16-bit I/O fifo port specified by Port.\r
+  The port is written Count times, and the write data is\r
+  retrieved from the provided Buffer.\r
+\r
+  This function must guarantee that all I/O write and write operations are\r
+  serialized.\r
+\r
+  If 16-bit I/O port operations are not supported, then ASSERT().\r
+\r
+  @param  Port    The I/O port to write.\r
+  @param  Count   The number of times to write I/O port.\r
+  @param  Buffer  The buffer to retrieve the write data from.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+IoWriteFifo16 (\r
+  IN      UINTN  Port,\r
+  IN      UINTN  Count,\r
+  IN      VOID   *Buffer\r
+  )\r
+{\r
+  //\r
+  // Make sure Port is aligned on a 16-bit boundary.\r
+  //\r
+  ASSERT ((Port & 1) == 0);\r
+  IoWriteFifoWorker (Port, EfiPeiCpuIoWidthFifoUint16, Count, Buffer);\r
+}\r
+\r
+/**\r
+  Reads a 32-bit I/O port fifo into a block of memory.\r
+\r
+  Reads the 32-bit I/O fifo port specified by Port.\r
+  The port is read Count times, and the read data is\r
+  stored in the provided Buffer.\r
+\r
+  This function must guarantee that all I/O read and write operations are\r
+  serialized.\r
+\r
+  If 32-bit I/O port operations are not supported, then ASSERT().\r
+\r
+  @param  Port    The I/O port to read.\r
+  @param  Count   The number of times to read I/O port.\r
+  @param  Buffer  The buffer to store the read data into.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+IoReadFifo32 (\r
+  IN      UINTN  Port,\r
+  IN      UINTN  Count,\r
+  OUT     VOID   *Buffer\r
+  )\r
+{\r
+  //\r
+  // Make sure Port is aligned on a 32-bit boundary.\r
+  //\r
+  ASSERT ((Port & 3) == 0);\r
+  IoReadFifoWorker (Port, EfiPeiCpuIoWidthFifoUint32, Count, Buffer);\r
+}\r
+\r
+/**\r
+  Writes a block of memory into a 32-bit I/O port fifo.\r
+\r
+  Writes the 32-bit I/O fifo port specified by Port.\r
+  The port is written Count times, and the write data is\r
+  retrieved from the provided Buffer.\r
+\r
+  This function must guarantee that all I/O write and write operations are\r
+  serialized.\r
+\r
+  If 32-bit I/O port operations are not supported, then ASSERT().\r
+\r
+  @param  Port    The I/O port to write.\r
+  @param  Count   The number of times to write I/O port.\r
+  @param  Buffer  The buffer to retrieve the write data from.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+IoWriteFifo32 (\r
+  IN      UINTN  Port,\r
+  IN      UINTN  Count,\r
+  IN      VOID   *Buffer\r
+  )\r
+{\r
+  //\r
+  // Make sure Port is aligned on a 32-bit boundary.\r
+  //\r
+  ASSERT ((Port & 3) == 0);\r
+  IoWriteFifoWorker (Port, EfiPeiCpuIoWidthFifoUint32, Count, Buffer);\r
 }\r
 \r
 /**\r
@@ -301,23 +560,23 @@ IoWrite64 (
 \r
   @param  Address The MMIO register to read.\r
 \r
-  @return The value read from Port.\r
+  @return The value read.\r
 \r
 **/\r
 UINT8\r
 EFIAPI\r
 MmioRead8 (\r
-  IN      UINTN                     Address\r
+  IN      UINTN  Address\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\r
 \r
-  return CpuIo->MemRead8 (PeiServices, CpuIo, (UINT64) Address);\r
+  return CpuIo->MemRead8 (PeiServices, CpuIo, (UINT64)Address);\r
 }\r
 \r
 /**\r
@@ -331,24 +590,25 @@ MmioRead8 (
 \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
+  @return Value.\r
+\r
 **/\r
 UINT8\r
 EFIAPI\r
 MmioWrite8 (\r
-  IN      UINTN                     Address,\r
-  IN      UINT8                     Value\r
+  IN      UINTN  Address,\r
+  IN      UINT8  Value\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\r
 \r
-  CpuIo->MemWrite8 (PeiServices, CpuIo, (UINT64) Address, Value);\r
+  CpuIo->MemWrite8 (PeiServices, CpuIo, (UINT64)Address, Value);\r
   return Value;\r
 }\r
 \r
@@ -360,30 +620,30 @@ MmioWrite8 (
   operations are serialized.\r
 \r
   If 16-bit MMIO register operations are not supported, then ASSERT().\r
+  If Address is not aligned on a 16-bit boundary, then ASSERT().\r
 \r
   @param  Address The MMIO register to read.\r
 \r
-  @return The value read from Address.\r
+  @return The value read.\r
 \r
 **/\r
 UINT16\r
 EFIAPI\r
 MmioRead16 (\r
-  IN      UINTN                     Address\r
+  IN      UINTN  Address\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\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
+  return CpuIo->MemRead16 (PeiServices, CpuIo, (UINT64)Address);\r
 }\r
 \r
 /**\r
@@ -394,31 +654,32 @@ MmioRead16 (
   and write operations are serialized.\r
 \r
   If 16-bit MMIO register operations are not supported, then ASSERT().\r
+  If Address is not aligned on a 16-bit boundary, then ASSERT().\r
 \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
+  @return Value.\r
 \r
 **/\r
 UINT16\r
 EFIAPI\r
 MmioWrite16 (\r
-  IN      UINTN                     Address,\r
-  IN      UINT16                    Value\r
+  IN      UINTN   Address,\r
+  IN      UINT16  Value\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\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
+  CpuIo->MemWrite16 (PeiServices, CpuIo, (UINT64)Address, Value);\r
   return Value;\r
 }\r
 \r
@@ -430,30 +691,30 @@ MmioWrite16 (
   operations are serialized.\r
 \r
   If 32-bit MMIO register operations are not supported, then ASSERT().\r
+  If Address is not aligned on a 32-bit boundary, then ASSERT().\r
 \r
   @param  Address The MMIO register to read.\r
 \r
-  @return The value read from Address.\r
+  @return The value read.\r
 \r
 **/\r
 UINT32\r
 EFIAPI\r
 MmioRead32 (\r
-  IN      UINTN                     Address\r
+  IN      UINTN  Address\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\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
+  return CpuIo->MemRead32 (PeiServices, CpuIo, (UINT64)Address);\r
 }\r
 \r
 /**\r
@@ -464,31 +725,32 @@ MmioRead32 (
   and write operations are serialized.\r
 \r
   If 32-bit MMIO register operations are not supported, then ASSERT().\r
+  If Address is not aligned on a 32-bit boundary, then ASSERT().\r
 \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
+  @return Value.\r
 \r
 **/\r
 UINT32\r
 EFIAPI\r
 MmioWrite32 (\r
-  IN      UINTN                     Address,\r
-  IN      UINT32                    Value\r
+  IN      UINTN   Address,\r
+  IN      UINT32  Value\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\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
+  CpuIo->MemWrite32 (PeiServices, CpuIo, (UINT64)Address, Value);\r
   return Value;\r
 }\r
 \r
@@ -500,30 +762,30 @@ MmioWrite32 (
   operations are serialized.\r
 \r
   If 64-bit MMIO register operations are not supported, then ASSERT().\r
+  If Address is not aligned on a 64-bit boundary, then ASSERT().\r
 \r
   @param  Address The MMIO register to read.\r
 \r
-  @return The value read from Address.\r
+  @return The value read.\r
 \r
 **/\r
 UINT64\r
 EFIAPI\r
 MmioRead64 (\r
-  IN      UINTN                     Address\r
+  IN      UINTN  Address\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\r
   //\r
   // Make sure Address is aligned on a 64-bit boundary.\r
   //\r
-  ASSERT ((Address & 7) == (sizeof (UINT64) - 1));\r
-  return CpuIo->MemRead64 (PeiServices, CpuIo, (UINT64) Address);\r
-\r
+  ASSERT ((Address & (sizeof (UINT64) - 1)) == 0);\r
+  return CpuIo->MemRead64 (PeiServices, CpuIo, (UINT64)Address);\r
 }\r
 \r
 /**\r
@@ -534,29 +796,29 @@ MmioRead64 (
   and write operations are serialized.\r
 \r
   If 64-bit MMIO register operations are not supported, then ASSERT().\r
+  If Address is not aligned on a 64-bit boundary, then ASSERT().\r
 \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
 UINT64\r
 EFIAPI\r
 MmioWrite64 (\r
-  IN      UINTN                     Address,\r
-  IN      UINT64                    Value\r
+  IN      UINTN   Address,\r
+  IN      UINT64  Value\r
   )\r
 {\r
-  CONST EFI_PEI_SERVICES            **PeiServices;\r
-  EFI_PEI_CPU_IO_PPI                *CpuIo;\r
+  CONST EFI_PEI_SERVICES  **PeiServices;\r
+  EFI_PEI_CPU_IO_PPI      *CpuIo;\r
 \r
-  PeiServices = (CONST EFI_PEI_SERVICES  **) GetPeiServicesTablePointer ();\r
+  PeiServices = GetPeiServicesTablePointer ();\r
   CpuIo       = (*PeiServices)->CpuIo;\r
   ASSERT (CpuIo != NULL);\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
+  CpuIo->MemWrite64 (PeiServices, CpuIo, (UINT64)Address, Value);\r
   return Value;\r
 }\r