diff --git a/IntelFrameworkPkg/Include/Protocol/CpuIo.h b/IntelFrameworkPkg/Include/Protocol/CpuIo.h index 52658806ea..8d578f3161 100644 --- a/IntelFrameworkPkg/Include/Protocol/CpuIo.h +++ b/IntelFrameworkPkg/Include/Protocol/CpuIo.h @@ -1,6 +1,10 @@ /** @file This code abstracts the CPU IO Protocol which installed by some platform or chipset-specific - PEIM that abstracts the processor-visible I/O operations. + PEIM that abstracts the processor-visible I/O operations. + + Note: This is a runtime protocol and can be used by runtime drivers after ExitBootServices(). + It is different from the PI 1.2 CPU I/O 2 Protocol, which is a boot services only protocol + and may not be used by runtime drivers after ExitBootServices(). Copyright (c) 2007 - 2009, Intel Corporation All rights reserved. This program and the accompanying materials @@ -20,89 +24,22 @@ #ifndef _CPUIO_H_ #define _CPUIO_H_ +#include #define EFI_CPU_IO_PROTOCOL_GUID \ { \ 0xB0732526, 0x38C8, 0x4b40, {0x88, 0x77, 0x61, 0xC7, 0xB0, 0x6A, 0xAC, 0x45 } \ } -typedef struct _EFI_CPU_IO_PROTOCOL EFI_CPU_IO_PROTOCOL; - -/// -/// Enumeration that defines the width of the I/O operation. -/// -typedef enum { - EfiCpuIoWidthUint8, - EfiCpuIoWidthUint16, - EfiCpuIoWidthUint32, - EfiCpuIoWidthUint64, - EfiCpuIoWidthFifoUint8, - EfiCpuIoWidthFifoUint16, - EfiCpuIoWidthFifoUint32, - EfiCpuIoWidthFifoUint64, - EfiCpuIoWidthFillUint8, - EfiCpuIoWidthFillUint16, - EfiCpuIoWidthFillUint32, - EfiCpuIoWidthFillUint64, - EfiCpuIoWidthMaximum -} EFI_CPU_IO_PROTOCOL_WIDTH; - -/** - Enables a driver to access memory-mapped registers in the EFI system memory space. - Or, enables a driver to access registers in the EFI CPU I/O space. - - @param[in] This A pointer to the EFI_CPU_IO_PROTOCOL instance. - @param[in] Width Signifies the width of the I/O or Memory operation. - @param[in] Address The base address of the I/O or Memory operation. - @param[in] Count The number of I/O or Memory operations to perform. - The number of bytes moved is Width size * Count, starting at Address. - @param[in, out] Buffer For read operations, the destination buffer to store the results. - For write operations, the source buffer from which to write data. - - @retval EFI_SUCCESS The data was read from or written to the EFI system. - @retval EFI_INVALID_PARAMETER Width is invalid for this EFI system. Or Buffer is NULL. - @retval EFI_UNSUPPORTED The Buffer is not aligned for the given Width. - Or,The address range specified by Address, Width, and Count is not valid for this EFI system. - -**/ -typedef -EFI_STATUS -(EFIAPI *EFI_CPU_IO_PROTOCOL_IO_MEM)( - IN EFI_CPU_IO_PROTOCOL *This, - IN EFI_CPU_IO_PROTOCOL_WIDTH Width, - IN UINT64 Address, - IN UINTN Count, - IN OUT VOID *Buffer - ); - -/// -/// Service for read and write accesses. -/// -typedef struct { - /// - /// This service provides the various modalities of memory and I/O read. - /// - EFI_CPU_IO_PROTOCOL_IO_MEM Read; - /// - /// This service provides the various modalities of memory and I/O write. - /// - EFI_CPU_IO_PROTOCOL_IO_MEM Write; -} EFI_CPU_IO_PROTOCOL_ACCESS; - -/// -/// Provides the basic memory and I/O interfaces that are used to abstract -/// accesses to devices in a system. -/// -struct _EFI_CPU_IO_PROTOCOL { - /// - /// Enables a driver to access memory-mapped registers in the EFI system memory space. - /// - EFI_CPU_IO_PROTOCOL_ACCESS Mem; - /// - /// Enables a driver to access registers in the EFI CPU I/O space. - /// - EFI_CPU_IO_PROTOCOL_ACCESS Io; -}; +// +// Framework CPU IO protocol structure is the same as CPU IO 2 protocol defined in PI 1.2 spec. +// However, there is a significant different between the Framework CPU I/O +// Protocol and the PI 1.2 CPU I/O 2 Protocol. The Framework one is a runtime +// protocol, which means it can be used by runtime drivers after ExitBootServices(). +// The PI one is not runtime safe, so it is a boot services only protocol and may +// not be used by runtime drivers after ExitBootServices(). +// +typedef EFI_CPU_IO2_PROTOCOL EFI_CPU_IO_PROTOCOL; extern EFI_GUID gEfiCpuIoProtocolGuid;