summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--IntelFrameworkPkg/Include/Protocol/CpuIo.h93
1 files changed, 15 insertions, 78 deletions
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 <Protocol/CpuIo2.h>
#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;