1 /* $NetBSD: efipciio.h,v 1.1.1.1 2014/04/01 16:16:07 jakllsch Exp $ */ 2 3 #ifndef _EFI_PCI_IO_H 4 #define _EFI_PCI_IO_H 5 6 #define EFI_PCI_IO_PROTOCOL \ 7 { 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a} } 8 9 INTERFACE_DECL(_EFI_PCI_IO); 10 11 typedef enum { 12 EfiPciIoWidthUint8, 13 EfiPciIoWidthUint16, 14 EfiPciIoWidthUint32, 15 EfiPciIoWidthUint64, 16 EfiPciIoWidthFifoUint8, 17 EfiPciIoWidthFifoUint16, 18 EfiPciIoWidthFifoUint32, 19 EfiPciIoWidthFifoUint64, 20 EfiPciIoWidthFillUint8, 21 EfiPciIoWidthFillUint16, 22 EfiPciIoWidthFillUint32, 23 EfiPciIoWidthFillUint64, 24 EfiPciIoWidthMaximum 25 } EFI_PCI_IO_PROTOCOL_WIDTH; 26 27 #define EFI_PCI_IO_PASS_THROUGH_BAR 0xff 28 29 typedef 30 EFI_STATUS 31 (EFIAPI *EFI_PCI_IO_PROTOCOL_POLL_IO_MEM) ( 32 IN struct _EFI_PCI_IO *This, 33 IN EFI_PCI_IO_PROTOCOL_WIDTH Width, 34 IN UINT8 BarIndex, 35 IN UINT64 Offset, 36 IN UINT64 Mask, 37 IN UINT64 Value, 38 IN UINT64 Delay, 39 OUT UINT64 *Result 40 ); 41 42 typedef 43 EFI_STATUS 44 (EFIAPI *EFI_PCI_IO_PROTOCOL_IO_MEM) ( 45 IN struct _EFI_PCI_IO *This, 46 IN EFI_PCI_IO_PROTOCOL_WIDTH Width, 47 IN UINT8 BarIndex, 48 IN UINT64 Offset, 49 IN UINTN Count, 50 IN OUT VOID *Buffer 51 ); 52 53 typedef struct { 54 EFI_PCI_IO_PROTOCOL_IO_MEM Read; 55 EFI_PCI_IO_PROTOCOL_IO_MEM Write; 56 } EFI_PCI_IO_PROTOCOL_ACCESS; 57 58 typedef 59 EFI_STATUS 60 (EFIAPI *EFI_PCI_IO_PROTOCOL_CONFIG) ( 61 IN struct _EFI_PCI_IO *This, 62 IN EFI_PCI_IO_PROTOCOL_WIDTH Width, 63 IN UINT32 Offset, 64 IN UINTN Count, 65 IN OUT VOID *Buffer 66 ); 67 68 typedef struct { 69 EFI_PCI_IO_PROTOCOL_CONFIG Read; 70 EFI_PCI_IO_PROTOCOL_CONFIG Write; 71 } EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS; 72 73 typedef 74 EFI_STATUS 75 (EFIAPI *EFI_PCI_IO_PROTOCOL_COPY_MEM) ( 76 IN struct _EFI_PCI_IO *This, 77 IN EFI_PCI_IO_PROTOCOL_WIDTH Width, 78 IN UINT8 DestBarIndex, 79 IN UINT64 DestOffset, 80 IN UINT8 SrcBarIndex, 81 IN UINT64 SrcOffset, 82 IN UINTN Count 83 ); 84 85 typedef enum { 86 EfiPciIoOperationBusMasterRead, 87 EfiPciIoOperationBusMasterWrite, 88 EfiPciIoOperationBusMasterCommonBuffer, 89 EfiPciIoOperationMaximum 90 } EFI_PCI_IO_PROTOCOL_OPERATION; 91 92 typedef 93 EFI_STATUS 94 (EFIAPI *EFI_PCI_IO_PROTOCOL_MAP) ( 95 IN struct _EFI_PCI_IO *This, 96 IN EFI_PCI_IO_PROTOCOL_OPERATION Operation, 97 IN VOID *HostAddress, 98 IN OUT UINTN *NumberOfBytes, 99 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, 100 OUT VOID **Mapping 101 ); 102 103 typedef 104 EFI_STATUS 105 (EFIAPI *EFI_PCI_IO_PROTOCOL_UNMAP) ( 106 IN struct _EFI_PCI_IO *This, 107 IN VOID *Mapping 108 ); 109 110 typedef 111 EFI_STATUS 112 (EFIAPI *EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER) ( 113 IN struct _EFI_PCI_IO *This, 114 IN EFI_ALLOCATE_TYPE Type, 115 IN EFI_MEMORY_TYPE MemoryType, 116 IN UINTN Pages, 117 OUT VOID **HostAddress, 118 IN UINT64 Attributes 119 ); 120 121 typedef 122 EFI_STATUS 123 (EFIAPI *EFI_PCI_IO_PROTOCOL_FREE_BUFFER) ( 124 IN struct _EFI_PCI_IO *This, 125 IN UINTN Pages, 126 IN VOID *HostAddress 127 ); 128 129 typedef 130 EFI_STATUS 131 (EFIAPI *EFI_PCI_IO_PROTOCOL_FLUSH) ( 132 IN struct _EFI_PCI_IO *This 133 ); 134 135 typedef 136 EFI_STATUS 137 (EFIAPI *EFI_PCI_IO_PROTOCOL_GET_LOCATION) ( 138 IN struct _EFI_PCI_IO *This, 139 OUT UINTN *SegmentNumber, 140 OUT UINTN *BusNumber, 141 OUT UINTN *DeviceNumber, 142 OUT UINTN *FunctionNumber 143 ); 144 145 #define EFI_PCI_IO_ATTRIBUTE_ISA_IO 0x0002 146 #define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO 0x0004 147 #define EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY 0x0008 148 #define EFI_PCI_IO_ATTRIBUTE_VGA_IO 0x0010 149 #define EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO 0x0020 150 #define EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO 0x0040 151 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080 152 #define EFI_PCI_IO_ATTRIBUTE_IO 0x0100 153 #define EFI_PCI_IO_ATTRIBUTE_MEMORY 0x0200 154 #define EFI_PCI_IO_ATTRIBUTE_BUS_MASTER 0x0400 155 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED 0x0800 156 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE 0x1000 157 #define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE 0x2000 158 #define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM 0x4000 159 #define EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000 160 #define EFI_PCI_IO_ATTRIBUTE_ISA_IO_16 0x10000 161 #define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000 162 #define EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 0x40000 163 164 typedef enum { 165 EfiPciIoAttributeOperationGet, 166 EfiPciIoAttributeOperationSet, 167 EfiPciIoAttributeOperationEnable, 168 EfiPciIoAttributeOperationDisable, 169 EfiPciIoAttributeOperationSupported, 170 EfiPciIoAttributeOperationMaximum 171 } EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION; 172 173 typedef 174 EFI_STATUS 175 (EFIAPI *EFI_PCI_IO_PROTOCOL_ATTRIBUTES) ( 176 IN struct _EFI_PCI_IO *This, 177 IN EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION Operation, 178 IN UINT64 Attributes, 179 OUT UINT64 *Result OPTIONAL 180 ); 181 182 typedef 183 EFI_STATUS 184 (EFIAPI *EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES) ( 185 IN struct _EFI_PCI_IO *This, 186 IN UINT8 BarIndex, 187 OUT UINT64 *Supports OPTIONAL, 188 OUT VOID **Resources OPTIONAL 189 ); 190 191 typedef 192 EFI_STATUS 193 (EFIAPI *EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES) ( 194 IN struct _EFI_PCI_IO *This, 195 IN UINT64 Attributes, 196 IN UINT8 BarIndex, 197 IN OUT UINT64 *Offset, 198 IN OUT UINT64 *Length 199 ); 200 201 typedef struct _EFI_PCI_IO { 202 EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollMem; 203 EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollIo; 204 EFI_PCI_IO_PROTOCOL_ACCESS Mem; 205 EFI_PCI_IO_PROTOCOL_ACCESS Io; 206 EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS Pci; 207 EFI_PCI_IO_PROTOCOL_COPY_MEM CopyMem; 208 EFI_PCI_IO_PROTOCOL_MAP Map; 209 EFI_PCI_IO_PROTOCOL_UNMAP Unmap; 210 EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer; 211 EFI_PCI_IO_PROTOCOL_FREE_BUFFER FreeBuffer; 212 EFI_PCI_IO_PROTOCOL_FLUSH Flush; 213 EFI_PCI_IO_PROTOCOL_GET_LOCATION GetLocation; 214 EFI_PCI_IO_PROTOCOL_ATTRIBUTES Attributes; 215 EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES GetBarAttributes; 216 EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES SetBarAttributes; 217 UINT64 RomSize; 218 VOID *RomImage; 219 } EFI_PCI_IO; 220 221 #endif /* _EFI_PCI_IO_H */ 222