1 /*++ 2 3 Copyright (c) 2004, Intel Corporation. All rights reserved.<BR> 4 This program and the accompanying materials 5 are licensed and made available under the terms and conditions of the BSD License 6 which accompanies this distribution. The full text of the license may be found at 7 http://opensource.org/licenses/bsd-license.php 8 9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 11 12 Module Name: 13 14 DeviceIo.h 15 16 Abstract: 17 18 Device IO protocol as defined in the EFI 1.0 specification. 19 20 Device IO is used to abstract hardware access to devices. It includes 21 memory mapped IO, IO, PCI Config space, and DMA. 22 23 24 --*/ 25 26 #ifndef _DEVICE_IO_H_ 27 #define _DEVICE_IO_H_ 28 29 #define EFI_DEVICE_IO_PROTOCOL_GUID \ 30 { \ 31 0xaf6ac311, 0x84c3, 0x11d2, {0x8e, 0x3c, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} \ 32 } 33 34 EFI_FORWARD_DECLARATION (EFI_DEVICE_IO_PROTOCOL); 35 36 typedef enum { 37 IO_UINT8, 38 IO_UINT16, 39 IO_UINT32, 40 IO_UINT64, 41 MMIO_COPY_UINT8, 42 MMIO_COPY_UINT16, 43 MMIO_COPY_UINT32, 44 MMIO_COPY_UINT64 45 } EFI_IO_WIDTH; 46 47 typedef 48 EFI_STATUS 49 (EFIAPI *EFI_DEVICE_IO) ( 50 IN EFI_DEVICE_IO_PROTOCOL * This, 51 IN EFI_IO_WIDTH Width, 52 IN UINT64 Address, 53 IN UINTN Count, 54 IN OUT VOID *Buffer 55 ); 56 57 typedef struct { 58 EFI_DEVICE_IO Read; 59 EFI_DEVICE_IO Write; 60 } EFI_IO_ACCESS; 61 62 typedef 63 EFI_STATUS 64 (EFIAPI *EFI_PCI_DEVICE_PATH) ( 65 IN EFI_DEVICE_IO_PROTOCOL * This, 66 IN UINT64 Address, 67 IN OUT EFI_DEVICE_PATH_PROTOCOL **PciDevicePath 68 ); 69 70 typedef enum { 71 EfiBusMasterRead, 72 EfiBusMasterWrite, 73 EfiBusMasterCommonBuffer 74 } EFI_IO_OPERATION_TYPE; 75 76 typedef 77 EFI_STATUS 78 (EFIAPI *EFI_IO_MAP) ( 79 IN EFI_DEVICE_IO_PROTOCOL * This, 80 IN EFI_IO_OPERATION_TYPE Operation, 81 IN EFI_PHYSICAL_ADDRESS * HostAddress, 82 IN OUT UINTN *NumberOfBytes, 83 OUT EFI_PHYSICAL_ADDRESS * DeviceAddress, 84 OUT VOID **Mapping 85 ); 86 87 typedef 88 EFI_STATUS 89 (EFIAPI *EFI_IO_UNMAP) ( 90 IN EFI_DEVICE_IO_PROTOCOL * This, 91 IN VOID *Mapping 92 ); 93 94 typedef 95 EFI_STATUS 96 (EFIAPI *EFI_IO_ALLOCATE_BUFFER) ( 97 IN EFI_DEVICE_IO_PROTOCOL * This, 98 IN EFI_ALLOCATE_TYPE Type, 99 IN EFI_MEMORY_TYPE MemoryType, 100 IN UINTN Pages, 101 IN OUT EFI_PHYSICAL_ADDRESS * HostAddress 102 ); 103 104 typedef 105 EFI_STATUS 106 (EFIAPI *EFI_IO_FLUSH) ( 107 IN EFI_DEVICE_IO_PROTOCOL * This 108 ); 109 110 typedef 111 EFI_STATUS 112 (EFIAPI *EFI_IO_FREE_BUFFER) ( 113 IN EFI_DEVICE_IO_PROTOCOL * This, 114 IN UINTN Pages, 115 IN EFI_PHYSICAL_ADDRESS HostAddress 116 ); 117 118 struct _EFI_DEVICE_IO_PROTOCOL { 119 EFI_IO_ACCESS Mem; 120 EFI_IO_ACCESS Io; 121 EFI_IO_ACCESS Pci; 122 EFI_IO_MAP Map; 123 EFI_PCI_DEVICE_PATH PciDevicePath; 124 EFI_IO_UNMAP Unmap; 125 EFI_IO_ALLOCATE_BUFFER AllocateBuffer; 126 EFI_IO_FLUSH Flush; 127 EFI_IO_FREE_BUFFER FreeBuffer; 128 }; 129 130 extern EFI_GUID gEfiDeviceIoProtocolGuid; 131 132 #endif 133