Update framework CPU I/O protocol to solve some symbol duplication and conflict issues. This protocol is different from PI one in that it is a runtime protocol.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9441 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
qhuang8 2009-11-18 04:12:26 +00:00
parent 25a1f91d48
commit dd72d66af8
1 changed files with 15 additions and 78 deletions

View File

@ -2,6 +2,10 @@
This code abstracts the CPU IO Protocol which installed by some platform or chipset-specific 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 Copyright (c) 2007 - 2009, Intel Corporation
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License are licensed and made available under the terms and conditions of the BSD License
@ -20,89 +24,22 @@
#ifndef _CPUIO_H_ #ifndef _CPUIO_H_
#define _CPUIO_H_ #define _CPUIO_H_
#include <Protocol/CpuIo2.h>
#define EFI_CPU_IO_PROTOCOL_GUID \ #define EFI_CPU_IO_PROTOCOL_GUID \
{ \ { \
0xB0732526, 0x38C8, 0x4b40, {0x88, 0x77, 0x61, 0xC7, 0xB0, 0x6A, 0xAC, 0x45 } \ 0xB0732526, 0x38C8, 0x4b40, {0x88, 0x77, 0x61, 0xC7, 0xB0, 0x6A, 0xAC, 0x45 } \
} }
typedef struct _EFI_CPU_IO_PROTOCOL EFI_CPU_IO_PROTOCOL; //
// 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
/// Enumeration that defines the width of the I/O operation. // 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().
typedef enum { // The PI one is not runtime safe, so it is a boot services only protocol and may
EfiCpuIoWidthUint8, // not be used by runtime drivers after ExitBootServices().
EfiCpuIoWidthUint16, //
EfiCpuIoWidthUint32, typedef EFI_CPU_IO2_PROTOCOL EFI_CPU_IO_PROTOCOL;
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;
};
extern EFI_GUID gEfiCpuIoProtocolGuid; extern EFI_GUID gEfiCpuIoProtocolGuid;