git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8499 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			272 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			272 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @file
 | |
|   ISA I/O Protocol is used to perform ISA device Io/Mem operations.
 | |
| 
 | |
| Copyright (c) 2006 - 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         
 | |
| 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.             
 | |
| 
 | |
| **/
 | |
| 
 | |
| #ifndef _EFI_ISA_IO_H_
 | |
| #define _EFI_ISA_IO_H_
 | |
| 
 | |
| 
 | |
| #include <Protocol/IsaAcpi.h>
 | |
| 
 | |
| //
 | |
| // Global GUID 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;
 | |
| 
 | |
| //
 | |
| // Width of ISA Io/Mem operation
 | |
| //
 | |
| 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;
 | |
| 
 | |
| /**
 | |
|   Performs an ISA Io/Memory Read/Write Cycle
 | |
| 
 | |
|   @param This                    A pointer to the EFI_ISA_IO_PROTOCOL instance.  
 | |
|   @param Width                   Signifies the width of the Io/Memory operation.
 | |
|   @param Offset                  The offset in ISA Io/Memory space to start the Io/Memory operation.  
 | |
|   @param Count                   The number of Io/Memory operations to perform.
 | |
|   @param Buffer                  [OUT] The destination buffer to store the results.
 | |
|                                  [IN] The source buffer to write data to the device.
 | |
| 
 | |
|   @retval EFI_SUCCESS             The data was read from / written to the device sucessfully.
 | |
|   @retval EFI_UNSUPPORTED         The Offset is not valid for this device.
 | |
|   @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_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;
 | |
| 
 | |
| /**
 | |
|   Performs an ISA I/O Copy Memory 
 | |
| 
 | |
|   @param This                    A pointer to the EFI_ISA_IO_PROTOCOL instance.
 | |
|   @param Width                   Signifies the width of the memory copy operation.
 | |
|   @param DestOffset              The offset of the destination 
 | |
|   @param SrcOffset               The offset of the source
 | |
|   @param Count                   The number of memory copy  operations to perform
 | |
| 
 | |
|   @retval EFI_SUCCESS             The data was copied sucessfully.
 | |
|   @retval EFI_UNSUPPORTED         The DestOffset or SrcOffset is not valid for this device.
 | |
|   @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_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
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Maps a memory region for DMA
 | |
| 
 | |
|   @param This                    A pointer to the EFI_ISA_IO_PROTOCOL instance.
 | |
|   @param Operation               Indicates the type of DMA (slave or bus master), and if 
 | |
|                                  the DMA operation is going to read or write to system memory. 
 | |
|   @param ChannelNumber           The slave channel number to use for this DMA operation. 
 | |
|                                  If Operation and ChannelAttributes shows that this device 
 | |
|                                  performs bus mastering DMA, then this field is ignored.  
 | |
|                                  The legal range for this field is 0..7.  
 | |
|   @param ChannelAttributes       The attributes of the DMA channel to use for this DMA operation
 | |
|   @param HostAddress             The system memory address to map to the device.  
 | |
|   @param NumberOfBytes           On input the number of bytes to map.  On output the number 
 | |
|                                  of bytes that were mapped.
 | |
|   @param DeviceAddress           The resulting map address for the bus master device to use 
 | |
|                                  to access the hosts HostAddress.  
 | |
|   @param Mapping                 A resulting value to pass to EFI_ISA_IO.Unmap().
 | |
| 
 | |
| 
 | |
|   @retval EFI_SUCCESS             The range was mapped for the returned NumberOfBytes.
 | |
|   @retval EFI_INVALID_PARAMETER   The Operation or HostAddress is undefined.
 | |
|   @retval EFI_UNSUPPORTED         The HostAddress can not be mapped as a common buffer.
 | |
|   @retval EFI_DEVICE_ERROR        The system hardware could not map the requested address.
 | |
|   @retval EFI_OUT_OF_RESOURCES    The memory pages could not be allocated.
 | |
| 
 | |
| **/
 | |
| 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
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Unmaps a memory region for DMA
 | |
| 
 | |
|   @param This               A pointer to the EFI_ISA_IO_PROTOCOL instance.
 | |
|   @param Mapping            The mapping value returned from EFI_ISA_IO.Map().
 | |
| 
 | |
|   @retval EFI_SUCCESS        The range was unmapped.
 | |
|   @retval EFI_DEVICE_ERROR   The data was not committed to the target system memory.
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_ISA_IO_PROTOCOL_UNMAP) (
 | |
|   IN  EFI_ISA_IO_PROTOCOL          *This,
 | |
|   IN  VOID                         *Mapping
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Allocates a common buffer for DMA
 | |
| 
 | |
|   @param This                    A pointer to the EFI_ISA_IO_PROTOCOL instance.
 | |
|   @param Type                    The type allocation to perform.
 | |
|   @param MemoryType              The type of memory to allocate.
 | |
|   @param Pages                   The number of pages to allocate.
 | |
|   @param HostAddress             A pointer to store the base address of the allocated range.
 | |
|   @param Attributes              The requested bit mask of attributes for the allocated range.
 | |
| 
 | |
|   @retval EFI_SUCCESS             The requested memory pages were allocated.
 | |
|   @retval EFI_INVALID_PARAMETER   Type is invalid or MemoryType is invalid or HostAddress is NULL
 | |
|   @retval EFI_UNSUPPORTED         Attributes is unsupported or the memory range specified 
 | |
|                                   by HostAddress, Pages, and Type is not available for common buffer use.
 | |
|   @retval EFI_OUT_OF_RESOURCES    The memory pages could not be allocated.
 | |
| 
 | |
| **/
 | |
| 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
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Frees a common buffer 
 | |
| 
 | |
|   @param This                    A pointer to the EFI_ISA_IO_PROTOCOL instance.
 | |
|   @param Pages                   The number of pages to free.
 | |
|   @param HostAddress             The base address of the allocated range.
 | |
| 
 | |
| 
 | |
|   @retval EFI_SUCCESS             The requested memory pages were freed.
 | |
|   @retval EFI_INVALID_PARAMETER   The memory was not allocated with EFI_ISA_IO.AllocateBufer().
 | |
| 
 | |
| **/
 | |
| typedef
 | |
| EFI_STATUS
 | |
| (EFIAPI *EFI_ISA_IO_PROTOCOL_FREE_BUFFER) (
 | |
|   IN  EFI_ISA_IO_PROTOCOL          *This,
 | |
|   IN  UINTN                        Pages,
 | |
|   IN  VOID                         *HostAddress
 | |
|   );
 | |
| 
 | |
| /**
 | |
|   Flushes a DMA buffer
 | |
| 
 | |
|   @param This                 A pointer to the EFI_ISA_IO_PROTOCOL instance.
 | |
| 
 | |
|   @retval  EFI_SUCCESS        The buffers were flushed.
 | |
|   @retval  EFI_DEVICE_ERROR   The buffers were not flushed due to a hardware error.
 | |
| 
 | |
| **/
 | |
| 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
 |