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
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
are licensed and made available under the terms and conditions of the BSD License
@ -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;