/*++ | |
Copyright (c) 2006, 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 | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
Module Name: | |
IsaIo.h | |
Abstract: | |
EFI ISA I/O Protocol | |
Revision History | |
--*/ | |
#ifndef _EFI_ISA_IO_H | |
#define _EFI_ISA_IO_H | |
// | |
// Global ID for the ISA I/O Protocol | |
// | |
#define EFI_ISA_IO_PROTOCOL_GUID \ | |
{ 0x7ee2bd44, 0x3da0, 0x11d4, { 0x9a, 0x38, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } } | |
typedef struct _EFI_ISA_IO_PROTOCOL EFI_ISA_IO_PROTOCOL; | |
// | |
// Prototypes for the ISA I/O Protocol | |
// | |
typedef enum { | |
EfiIsaIoWidthUint8, | |
EfiIsaIoWidthUint16, | |
EfiIsaIoWidthUint32, | |
EfiIsaIoWidthReserved, | |
EfiIsaIoWidthFifoUint8, | |
EfiIsaIoWidthFifoUint16, | |
EfiIsaIoWidthFifoUint32, | |
EfiIsaIoWidthFifoReserved, | |
EfiIsaIoWidthFillUint8, | |
EfiIsaIoWidthFillUint16, | |
EfiIsaIoWidthFillUint32, | |
EfiIsaIoWidthFillReserved, | |
EfiIsaIoWidthMaximum | |
} EFI_ISA_IO_PROTOCOL_WIDTH; | |
// | |
// Attributes for common buffer allocations | |
// | |
#define EFI_ISA_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x080 // Map a memory range so write are combined | |
#define EFI_ISA_IO_ATTRIBUTE_MEMORY_CACHED 0x800 // Map a memory range so all r/w accesses are cached | |
#define EFI_ISA_IO_ATTRIBUTE_MEMORY_DISABLE 0x1000 // Disable a memory range | |
// | |
// Channel attribute for DMA operations | |
// | |
#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_COMPATIBLE 0x001 | |
#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_A 0x002 | |
#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_B 0x004 | |
#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SPEED_C 0x008 | |
#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_WIDTH_8 0x010 | |
#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_WIDTH_16 0x020 | |
#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_SINGLE_MODE 0x040 | |
#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_DEMAND_MODE 0x080 | |
#define EFI_ISA_IO_SLAVE_DMA_ATTRIBUTE_AUTO_INITIALIZE 0x100 | |
typedef enum { | |
EfiIsaIoOperationBusMasterRead, | |
EfiIsaIoOperationBusMasterWrite, | |
EfiIsaIoOperationBusMasterCommonBuffer, | |
EfiIsaIoOperationSlaveRead, | |
EfiIsaIoOperationSlaveWrite, | |
EfiIsaIoOperationMaximum | |
} EFI_ISA_IO_PROTOCOL_OPERATION; | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_ISA_IO_PROTOCOL_IO_MEM) ( | |
IN EFI_ISA_IO_PROTOCOL *This, | |
IN EFI_ISA_IO_PROTOCOL_WIDTH Width, | |
IN UINT32 Offset, | |
IN UINTN Count, | |
IN OUT VOID *Buffer | |
); | |
typedef struct { | |
EFI_ISA_IO_PROTOCOL_IO_MEM Read; | |
EFI_ISA_IO_PROTOCOL_IO_MEM Write; | |
} EFI_ISA_IO_PROTOCOL_ACCESS; | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_ISA_IO_PROTOCOL_COPY_MEM) ( | |
IN EFI_ISA_IO_PROTOCOL *This, | |
IN EFI_ISA_IO_PROTOCOL_WIDTH Width, | |
IN UINT32 DestOffset, | |
IN UINT32 SrcOffset, | |
IN UINTN Count | |
); | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_ISA_IO_PROTOCOL_MAP) ( | |
IN EFI_ISA_IO_PROTOCOL *This, | |
IN EFI_ISA_IO_PROTOCOL_OPERATION Operation, | |
IN UINT8 ChannelNumber OPTIONAL, | |
IN UINT32 ChannelAttributes, | |
IN VOID *HostAddress, | |
IN OUT UINTN *NumberOfBytes, | |
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, | |
OUT VOID **Mapping | |
); | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_ISA_IO_PROTOCOL_UNMAP) ( | |
IN EFI_ISA_IO_PROTOCOL *This, | |
IN VOID *Mapping | |
); | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_ISA_IO_PROTOCOL_ALLOCATE_BUFFER) ( | |
IN EFI_ISA_IO_PROTOCOL *This, | |
IN EFI_ALLOCATE_TYPE Type, | |
IN EFI_MEMORY_TYPE MemoryType, | |
IN UINTN Pages, | |
OUT VOID **HostAddress, | |
IN UINT64 Attributes | |
); | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_ISA_IO_PROTOCOL_FREE_BUFFER) ( | |
IN EFI_ISA_IO_PROTOCOL *This, | |
IN UINTN Pages, | |
IN VOID *HostAddress | |
); | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_ISA_IO_PROTOCOL_FLUSH) ( | |
IN EFI_ISA_IO_PROTOCOL *This | |
); | |
// | |
// Interface structure for the ISA I/O Protocol | |
// | |
struct _EFI_ISA_IO_PROTOCOL { | |
EFI_ISA_IO_PROTOCOL_ACCESS Mem; | |
EFI_ISA_IO_PROTOCOL_ACCESS Io; | |
EFI_ISA_IO_PROTOCOL_COPY_MEM CopyMem; | |
EFI_ISA_IO_PROTOCOL_MAP Map; | |
EFI_ISA_IO_PROTOCOL_UNMAP Unmap; | |
EFI_ISA_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer; | |
EFI_ISA_IO_PROTOCOL_FREE_BUFFER FreeBuffer; | |
EFI_ISA_IO_PROTOCOL_FLUSH Flush; | |
EFI_ISA_ACPI_RESOURCE_LIST *ResourceList; | |
UINT32 RomSize; | |
VOID *RomImage; | |
}; | |
extern EFI_GUID gEfiIsaIoProtocolGuid; | |
#endif |