/** @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
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
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
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
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
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
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
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
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
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
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
\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
\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
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
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
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
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
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
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