blob: a723f8764cb717a25fb213fc6e4d68d2eb045c6c [file] [log] [blame]
/** @file
MM CPU I/O 2 protocol as defined in the PI 1.5 specification.
This protocol provides CPU I/O and memory access within MM.
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _MM_CPU_IO_H_
#define _MM_CPU_IO_H_
#define EFI_MM_CPU_IO_PROTOCOL_GUID \
{ \
0x3242A9D8, 0xCE70, 0x4AA0, { 0x95, 0x5D, 0x5E, 0x7B, 0x14, 0x0D, 0xE4, 0xD2 } \
}
typedef struct _EFI_MM_CPU_IO_PROTOCOL EFI_MM_CPU_IO_PROTOCOL;
///
/// Width of the MM CPU I/O operations
///
typedef enum {
MM_IO_UINT8 = 0,
MM_IO_UINT16 = 1,
MM_IO_UINT32 = 2,
MM_IO_UINT64 = 3
} EFI_MM_IO_WIDTH;
/**
Provides the basic memory and I/O interfaces used toabstract accesses to devices.
The I/O operations are carried out exactly as requested. The caller is
responsible for any alignment and I/O width issues that the bus, device,
platform, or type of I/O might require.
@param[in] This The EFI_MM_CPU_IO_PROTOCOL instance.
@param[in] Width Signifies the width of the I/O operations.
@param[in] Address The base address of the I/O operations. The caller is
responsible for aligning the Address if required.
@param[in] Count The number of I/O operations to perform.
@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 device.
@retval EFI_UNSUPPORTED The Address is not valid for this system.
@retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack
of resources.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_MM_CPU_IO)(
IN CONST EFI_MM_CPU_IO_PROTOCOL *This,
IN EFI_MM_IO_WIDTH Width,
IN UINT64 Address,
IN UINTN Count,
IN OUT VOID *Buffer
);
typedef struct {
///
/// This service provides the various modalities of memory and I/O read.
///
EFI_MM_CPU_IO Read;
///
/// This service provides the various modalities of memory and I/O write.
///
EFI_MM_CPU_IO Write;
} EFI_MM_IO_ACCESS;
///
/// MM CPU I/O Protocol provides CPU I/O and memory access within MM.
///
struct _EFI_MM_CPU_IO_PROTOCOL {
///
/// Allows reads and writes to memory-mapped I/O space.
///
EFI_MM_IO_ACCESS Mem;
///
/// Allows reads and writes to I/O space.
///
EFI_MM_IO_ACCESS Io;
};
extern EFI_GUID gEfiMmCpuIoProtocolGuid;
#endif