--- /dev/null
+/** @file\r
+ This file declares CPU IO PPI that abstracts CPU IO access\r
+\r
+ Copyright (c) 2006, Intel Corporation \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: CpuIo.h\r
+\r
+ @par Revision Reference:\r
+ This PPI is defined in PEI CIS.\r
+ Version 0.91.\r
+\r
+**/\r
+\r
+#ifndef __PEI_CPUIO_PPI_H__\r
+#define __PEI_CPUIO_PPI_H__\r
+\r
+#define EFI_PEI_CPU_IO_PPI_INSTALLED_GUID \\r
+ { \\r
+ 0xe6af1f7b, 0xfc3f, 0x46da, {0xa8, 0x28, 0xa3, 0xb4, 0x57, 0xa4, 0x42, 0x82 } \\r
+ }\r
+\r
+typedef struct _EFI_PEI_CPU_IO_PPI EFI_PEI_CPU_IO_PPI;\r
+\r
+//\r
+// *******************************************************\r
+// EFI_PEI_CPU_IO_PPI_WIDTH\r
+// *******************************************************\r
+//\r
+typedef enum {\r
+ EfiPeiCpuIoWidthUint8,\r
+ EfiPeiCpuIoWidthUint16,\r
+ EfiPeiCpuIoWidthUint32,\r
+ EfiPeiCpuIoWidthUint64,\r
+ EfiPeiCpuIoWidthFifoUint8,\r
+ EfiPeiCpuIoWidthFifoUint16,\r
+ EfiPeiCpuIoWidthFifoUint32,\r
+ EfiPeiCpuIoWidthFifoUint64,\r
+ EfiPeiCpuIoWidthFillUint8,\r
+ EfiPeiCpuIoWidthFillUint16,\r
+ EfiPeiCpuIoWidthFillUint32,\r
+ EfiPeiCpuIoWidthFillUint64,\r
+ EfiPeiCpuIoWidthMaximum\r
+} EFI_PEI_CPU_IO_PPI_WIDTH;\r
+\r
+/**\r
+ Memory-based access services and I/O-based access services.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Width The width of the access. Enumerated in bytes.\r
+ @param Address The physical address of the access.\r
+ @param Count The number of accesses to perform.\r
+ @param Buffer A pointer to the buffer of data.\r
+\r
+ @retval EFI_SUCCESS The function completed successfully.\r
+ @retval EFI_NOT_YET_AVAILABLE The service has not been installed.\r
+\r
+**/\r
+typedef\r
+EFI_STATUS\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_MEM) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN EFI_PEI_CPU_IO_PPI_WIDTH Width,\r
+ IN UINT64 Address,\r
+ IN UINTN Count,\r
+ IN OUT VOID *Buffer\r
+ );\r
+\r
+//\r
+// *******************************************************\r
+// EFI_PEI_CPU_IO_PPI_ACCESS\r
+// *******************************************************\r
+//\r
+typedef struct {\r
+ EFI_PEI_CPU_IO_PPI_IO_MEM Read;\r
+ EFI_PEI_CPU_IO_PPI_IO_MEM Write;\r
+} EFI_PEI_CPU_IO_PPI_ACCESS;\r
+\r
+/**\r
+ 8-bit I/O read operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+\r
+ @return UINT8\r
+\r
+**/\r
+typedef\r
+UINT8\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ8) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address\r
+ );\r
+\r
+/**\r
+ 16-bit I/O read operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+\r
+ @return UINT16\r
+\r
+**/\r
+typedef\r
+UINT16\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ16) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address\r
+ );\r
+\r
+/**\r
+ 32-bit I/O read operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+\r
+ @return UINT32\r
+\r
+**/\r
+typedef\r
+UINT32\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ32) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address\r
+ );\r
+\r
+/**\r
+ 64-bit I/O read operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+\r
+ @return UINT64\r
+\r
+**/\r
+typedef\r
+UINT64\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_READ64) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address\r
+ );\r
+\r
+/**\r
+ 8-bit I/O write operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+ @param Data The data to write.\r
+\r
+ @return None\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE8) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address,\r
+ IN UINT8 Data\r
+ );\r
+\r
+/**\r
+ 16-bit I/O write operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+ @param Data The data to write.\r
+\r
+ @return None\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE16) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address,\r
+ IN UINT16 Data\r
+ );\r
+\r
+/**\r
+ 32-bit I/O write operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+ @param Data The data to write.\r
+\r
+ @return None\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE32) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address,\r
+ IN UINT32 Data\r
+ );\r
+\r
+/**\r
+ 64-bit I/O write operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+ @param Data The data to write.\r
+\r
+ @return None\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_IO_WRITE64) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address,\r
+ IN UINT64 Data\r
+ );\r
+\r
+/**\r
+ 8-bit Memory read operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+\r
+ @return UINT8\r
+\r
+**/\r
+typedef\r
+UINT8\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ8) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address\r
+ );\r
+\r
+/**\r
+ 16-bit Memory read operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+\r
+ @return UINT16\r
+\r
+**/\r
+typedef\r
+UINT16\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ16) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address\r
+ );\r
+\r
+/**\r
+ 32-bit Memory read operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+\r
+ @return UINT32\r
+\r
+**/\r
+typedef\r
+UINT32\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ32) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address\r
+ );\r
+\r
+/**\r
+ 64-bit Memory read operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+\r
+ @return UINT64\r
+\r
+**/\r
+typedef\r
+UINT64\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_READ64) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address\r
+ );\r
+\r
+/**\r
+ 8-bit Memory write operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+ @param Data The data to write.\r
+\r
+ @return None\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE8) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address,\r
+ IN UINT8 Data\r
+ );\r
+\r
+/**\r
+ 16-bit Memory write operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+ @param Data The data to write.\r
+\r
+ @return None\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE16) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address,\r
+ IN UINT16 Data\r
+ );\r
+\r
+/**\r
+ 32-bit Memory write operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+ @param Data The data to write.\r
+\r
+ @return None\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE32) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address,\r
+ IN UINT32 Data\r
+ );\r
+\r
+/**\r
+ 64-bit Memory write operations.\r
+\r
+ @param PeiServices An indirect pointer to the PEI Services Table published by the PEI Foundation.\r
+ @param This Pointer to local data for the interface.\r
+ @param Address The physical address of the access.\r
+ @param Data The data to write.\r
+\r
+ @return None\r
+\r
+**/\r
+typedef\r
+VOID\r
+(EFIAPI *EFI_PEI_CPU_IO_PPI_MEM_WRITE64) (\r
+ IN EFI_PEI_SERVICES **PeiServices,\r
+ IN EFI_PEI_CPU_IO_PPI *This,\r
+ IN UINT64 Address,\r
+ IN UINT64 Data\r
+ );\r
+\r
+/**\r
+ @par Ppi Description:\r
+ EFI_PEI_CPU_IO_PPI provides a set of memory and I/O-based services.\r
+ The perspective of the services is that of the processor, not the bus or system.\r
+\r
+ @param Mem\r
+ Collection of memory-access services.\r
+\r
+ @param I/O\r
+ Collection of I/O-access services.\r
+\r
+ @param IoRead8\r
+ 8-bit read service.\r
+\r
+ @param IoRead16\r
+ 16-bit read service.\r
+\r
+ @param IoRead32\r
+ 32-bit read service.\r
+\r
+ @param IoRead64\r
+ 64-bit read service.\r
+\r
+ @param IoWrite8\r
+ 8-bit write service.\r
+\r
+ @param IoWrite16\r
+ 16-bit write service.\r
+\r
+ @param IoWrite32\r
+ 32-bit write service.\r
+\r
+ @param IoWrite64\r
+ 64-bit write service.\r
+\r
+ @param MemRead8\r
+ 8-bit read service.\r
+\r
+ @param MemRead16\r
+ 16-bit read service.\r
+\r
+ @param MemRead32\r
+ 32-bit read service.\r
+\r
+ @param MemRead64\r
+ 64-bit read service.\r
+\r
+ @param MemWrite8\r
+ 8-bit write service.\r
+\r
+ @param MemWrite16\r
+ 16-bit write service.\r
+\r
+ @param MemWrite32\r
+ 32-bit write service.\r
+\r
+ @param MemWrite64\r
+ 64-bit write service.\r
+\r
+**/\r
+struct _EFI_PEI_CPU_IO_PPI {\r
+ EFI_PEI_CPU_IO_PPI_ACCESS Mem;\r
+ EFI_PEI_CPU_IO_PPI_ACCESS Io;\r
+ EFI_PEI_CPU_IO_PPI_IO_READ8 IoRead8;\r
+ EFI_PEI_CPU_IO_PPI_IO_READ16 IoRead16;\r
+ EFI_PEI_CPU_IO_PPI_IO_READ32 IoRead32;\r
+ EFI_PEI_CPU_IO_PPI_IO_READ64 IoRead64;\r
+ EFI_PEI_CPU_IO_PPI_IO_WRITE8 IoWrite8;\r
+ EFI_PEI_CPU_IO_PPI_IO_WRITE16 IoWrite16;\r
+ EFI_PEI_CPU_IO_PPI_IO_WRITE32 IoWrite32;\r
+ EFI_PEI_CPU_IO_PPI_IO_WRITE64 IoWrite64;\r
+ EFI_PEI_CPU_IO_PPI_MEM_READ8 MemRead8;\r
+ EFI_PEI_CPU_IO_PPI_MEM_READ16 MemRead16;\r
+ EFI_PEI_CPU_IO_PPI_MEM_READ32 MemRead32;\r
+ EFI_PEI_CPU_IO_PPI_MEM_READ64 MemRead64;\r
+ EFI_PEI_CPU_IO_PPI_MEM_WRITE8 MemWrite8;\r
+ EFI_PEI_CPU_IO_PPI_MEM_WRITE16 MemWrite16;\r
+ EFI_PEI_CPU_IO_PPI_MEM_WRITE32 MemWrite32;\r
+ EFI_PEI_CPU_IO_PPI_MEM_WRITE64 MemWrite64;\r
+};\r
+\r
+extern EFI_GUID gEfiPeiCpuIoPpiInServiceTableGuid;\r
+\r
+#endif\r