4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/** @file
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ISA I/O Protocol is used by ISA device drivers to perform I/O, MMIO and DMA
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync operations on the ISA controllers they manage.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncCopyright (c) 2006 - 2010, Intel Corporation. All rights reserved.<BR>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThis program and the accompanying materials are licensed and made available under
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncthe terms and conditions of the BSD License that accompanies this distribution.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncThe full text of the license may be found at
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynchttp://opensource.org/licenses/bsd-license.php.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#ifndef _EFI_ISA_IO_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define _EFI_ISA_IO_H_
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#include <Protocol/IsaAcpi.h>
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Global ID for the EFI_ISA_IO_PROTOCOL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_PROTOCOL_GUID \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync { \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync 0x7ee2bd44, 0x3da0, 0x11d4, { 0x9a, 0x38, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } \
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync }
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Forward declaration for the EFI_ISA_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct _EFI_ISA_IO_PROTOCOL EFI_ISA_IO_PROTOCOL;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Width of EFI_ISA_IO_PROTOCOL I/O Port and MMIO operations.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthUint8 = 0, ///< 8-bit operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthUint16, ///< 16-bit operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthUint32, ///< 32-bit operation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthReserved,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthFifoUint8, ///< 8-bit FIFO operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthFifoUint16, ///< 16-bit FIFO operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthFifoUint32, ///< 32-bit FIFO operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthFifoReserved,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthFillUint8, ///< 8-bit Fill operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthFillUint16, ///< 16-bit Fill operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthFillUint32, ///< 32-bit Fill operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthFillReserved,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoWidthMaximum
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_ISA_IO_PROTOCOL_WIDTH;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Attributes for the EFI_ISA_IO_PROTOCOL common DMA buffer allocations.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x080 ///< Map a memory range so write are combined.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_ATTRIBUTE_MEMORY_CACHED 0x800 ///< Map a memory range so all read and write accesses are cached.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_ATTRIBUTE_MEMORY_DISABLE 0x1000 ///< Disable a memory range.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Channel attribute for EFI_ISA_IO_PROTOCOL slave DMA requests
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_COMPATIBLE 0x001 ///< Set the speed of the DMA transfer in compatible mode.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_A 0x002 ///< Not supported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_B 0x004 ///< Not supported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_C 0x008 ///< Not supported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_WIDTH_8 0x010 ///< Request 8-bit DMA transfers. Only available on channels 0..3.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_WIDTH_16 0x020 ///< Request 16-bit DMA transfers. Only available on channels 4..7.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SINGLE_MODE 0x040 ///< Request a single DMA transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_DEMAND_MODE 0x080 ///< Request multiple DMA transfers until TC (Terminal Count) or EOP (End of Process).
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_AUTO_INITIALIZE 0x100 ///< Automatically reload base and count at the end of the DMA transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The DMA opreration type for EFI_ISA_IO_PROTOCOL DMA requests.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef enum {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// A read operation from system memory by a bus master.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoOperationBusMasterRead,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// A write operation to system memory by a bus master.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoOperationBusMasterWrite,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Provides both read and write access to system memory by both the processor
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// and a bus master. The buffer is coherent from both the processor's and the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// bus master's point of view.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoOperationBusMasterCommonBuffer,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// A read operation from system memory by a slave device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoOperationSlaveRead,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// A write operation to system memory by a slave master.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoOperationSlaveWrite,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoOperationMaximum
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_ISA_IO_PROTOCOL_OPERATION;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Performs ISA I/O and MMIO Read/Write Cycles
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Width Specifies the width of the I/O or MMIO operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Offset The offset into the ISA I/O or MMIO space to start the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Count The number of I/O or MMIO operations to perform.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] Buffer For read operations, the destination buffer to store
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the results. For write operations, the source buffer to
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync write data from.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The data was successfully read from or written to the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The Offset is not valid for this device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_ISA_IO_PROTOCOL_IO_MEM)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ISA_IO_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ISA_IO_PROTOCOL_WIDTH Width,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 Offset,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Count,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT VOID *Buffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// Structure of functions for accessing ISA I/O and MMIO space.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef struct {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Read from ISA I/O or MMIO space.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_IO_PROTOCOL_IO_MEM Read;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// Write to ISA I/O or MMIO space.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_IO_PROTOCOL_IO_MEM Write;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync} EFI_ISA_IO_PROTOCOL_ACCESS;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Copies data from one region of ISA MMIO space to another region of ISA
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync MMIO space.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Width Specifies the width of the MMIO copy operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] DestOffset The offset of the destination in ISA MMIO space.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] SrcOffset The offset of the source in ISA MMIO space.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Count The number tranfers to perform for this copy operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The data was copied sucessfully.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The DestOffset or SrcOffset is not valid for this device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Width or Count, or both, were invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_ISA_IO_PROTOCOL_COPY_MEM)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ISA_IO_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ISA_IO_PROTOCOL_WIDTH Width,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 DestOffset,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 SrcOffset,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Count
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Maps a memory region for DMA.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function returns the device-specific addresses required to access system memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync This function is used to map system memory for ISA DMA operations. All ISA DMA
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync operations must be performed through their mapped addresses, and such mappings must
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync be freed with EFI_ISA_IO_PROTOCOL.Unmap() after the DMA operation is completed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If the DMA operation is a single read or write data transfer through an ISA bus
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync master, then EfiIsaIoOperationBusMasterRead or EfiIsaIoOperationBusMasterWrite
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is used and the range is unmapped to complete the operation. If the DMA operation
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is a single read or write data transfer through an ISA slave controller, then
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EfiIsaIoOperationSlaveRead or EfiIsaIoOperationSlaveWrite is used and the range
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is unmapped to complete the operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync If performing a DMA read operation, all the data must be present in system memory before the Map() is performed. Similarly,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync if performing a DMA write operation, the data must not be accessed in system
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync memory until EFI_ISA_IO_PROTOCOL.Unmap() is performed. Bus master operations that
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync require both read and write access or require multiple host device interactions
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync within the same mapped region must use EfiIsaIoOperationBusMasterCommonBuffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync However, only memory allocated via the EFI_ISA_IO_PROTOCOL.AllocateBuffer() interface
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync is guaranteed to be able to be mapped for this operation type. In all mapping
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync requests the NumberOfBytes returned may be less than originally requested. It is
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the caller's responsibility to make additional requests to complete the entire
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync transfer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Operation Indicates the type of DMA (slave or bus master),
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and if the DMA operation is going to read or
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync write to system memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ChannelNumber The slave channel number to use for this DMA
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync operation. If Operation and ChannelAttributes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync shows that this device performs bus mastering
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync DMA, then this field is ignored. The legal
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync range for this field is 0..7.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] ChannelAttributes A bitmask of the attributes used to configure
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync the slave DMA channel for this DMA operation.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync See EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_* for the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync legal bit combinations.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] HostAddress The system memory address to map to the device.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in, out] NumberOfBytes On input the number of bytes to map. On
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync output the number of bytes that were mapped.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] DeviceAddress The resulting map address for the bus master
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync device to use to access the hosts HostAddress.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] Mapping A returned value that must be passed to into
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_IO_PROTOCOL.Unmap() to free all the the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync resources associated with this map request.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The range was mapped for the returned NumberOfBytes.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The Operation is undefined.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The HostAddress is undefined.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The HostAddress can not be mapped as a common buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The system hardware could not map the requested address.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_ISA_IO_PROTOCOL_MAP)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ISA_IO_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ISA_IO_PROTOCOL_OPERATION Operation,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT8 ChannelNumber OPTIONAL,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT32 ChannelAttributes,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *HostAddress,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN OUT UINTN *NumberOfBytes,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT VOID **Mapping
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Unmaps a memory region that was previously mapped with EFI_ISA_IO_PROTOCOL.Map().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync The EFI_ISA_IO_PROTOCOL.Map() operation is completed and any corresponding
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync resources are released. If the operation was EfiIsaIoOperationSlaveWrite
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync or EfiIsaIoOperationBusMasterWrite, the data is committed to system memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Any resources used for the mapping are freed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Mapping The mapping value returned from EFI_ISA_IO_PROTOCOL.Map().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The memory region was unmapped.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The data was not committed to the target system memory.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_ISA_IO_PROTOCOL_UNMAP)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ISA_IO_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *Mapping
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Allocates pages that are suitable for an EfiIsaIoOperationBusMasterCommonBuffer
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync mapping.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Type The type allocation to perform.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] MemoryType The type of memory to allocate.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Pages The number of pages to allocate.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[out] HostAddress A pointer to store the base address of the allocated range.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Attributes The requested bit mask of attributes for the allocated range.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The requested memory pages were allocated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER Type is invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER MemoryType is invalid.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER HostAddress is NULL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED Attributes is unsupported.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_UNSUPPORTED The memory range specified by HostAddress, Pages,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync and Type is not available for common buffer use.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_OUT_OF_RESOURCES The memory pages could not be allocated.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_ISA_IO_PROTOCOL_ALLOCATE_BUFFER)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ISA_IO_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ALLOCATE_TYPE Type,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_MEMORY_TYPE MemoryType,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Pages,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync OUT VOID **HostAddress,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINT64 Attributes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Frees a common buffer that was allocated with EFI_ISA_IO_PROTOCOL.AllocateBuffer().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] Pages The number of pages to free from the previously allocated common buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] HostAddress The base address of the previously allocated common buffer.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The requested memory pages were freed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_INVALID_PARAMETER The memory was not allocated with EFI_ISA_IO.AllocateBufer().
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_ISA_IO_PROTOCOL_FREE_BUFFER)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ISA_IO_PROTOCOL *This,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN UINTN Pages,
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN VOID *HostAddress
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/**
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync Flushes a DMA buffer, which forces all DMA posted write transactions to complete.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @param[in] This A pointer to the EFI_ISA_IO_PROTOCOL instance.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_SUCCESS The DMA buffers were flushed.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync @retval EFI_DEVICE_ERROR The buffers were not flushed due to a hardware error.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync**/
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsynctypedef
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncEFI_STATUS
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync(EFIAPI *EFI_ISA_IO_PROTOCOL_FLUSH)(
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync IN EFI_ISA_IO_PROTOCOL *This
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync );
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// The EFI_ISA_IO_PROTOCOL provides the basic Memory, I/O, and DMA interfaces
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// used to abstract accesses to ISA controllers. There is one EFI_ISA_IO_PROTOCOL
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// instance for each ISA controller on a ISA bus. A device driver that wishes
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// to manage an ISA controller in a system will have to retrieve the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync/// ISA_PCI_IO_PROTOCOL instance associated with the ISA controller.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncstruct _EFI_ISA_IO_PROTOCOL {
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_IO_PROTOCOL_ACCESS Mem;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_IO_PROTOCOL_ACCESS Io;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_IO_PROTOCOL_COPY_MEM CopyMem;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_IO_PROTOCOL_MAP Map;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_IO_PROTOCOL_UNMAP Unmap;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_IO_PROTOCOL_FREE_BUFFER FreeBuffer;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_IO_PROTOCOL_FLUSH Flush;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The list of I/O , MMIO, DMA, and Interrupt resources associated with the
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// ISA controller abstracted by this instance of the EFI_ISA_IO_PROTOCOL.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync EFI_ISA_ACPI_RESOURCE_LIST *ResourceList;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// The size, in bytes, of the ROM image.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync UINT32 RomSize;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// A pointer to the in memory copy of the ROM image. The ISA Bus Driver is responsible
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// for allocating memory for the ROM image, and copying the contents of the ROM to memory
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync /// during ISA Bus initialization.
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync ///
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync VOID *RomImage;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync};
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsyncextern EFI_GUID gEfiIsaIoProtocolGuid;
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync
4fd606d1f5abe38e1f42c38de1d2e895166bd0f4vboxsync#endif