1 /*++ 2 3 Copyright (c) 2004 - 2006, 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 PciIo.h 15 16 Abstract: 17 18 EFI PCI I/O Protocol 19 20 Revision History 21 22 --*/ 23 24 #ifndef _EFI_PCI_IO_H 25 #define _EFI_PCI_IO_H 26 27 // 28 // Global ID for the PCI I/O Protocol 29 // 30 #define EFI_PCI_IO_PROTOCOL_GUID \ 31 { \ 32 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x2, 0x9a} \ 33 } 34 35 EFI_FORWARD_DECLARATION (EFI_PCI_IO_PROTOCOL); 36 37 // 38 // Prototypes for the PCI I/O Protocol 39 // 40 typedef enum { 41 EfiPciIoWidthUint8 = 0, 42 EfiPciIoWidthUint16, 43 EfiPciIoWidthUint32, 44 EfiPciIoWidthUint64, 45 EfiPciIoWidthFifoUint8, 46 EfiPciIoWidthFifoUint16, 47 EfiPciIoWidthFifoUint32, 48 EfiPciIoWidthFifoUint64, 49 EfiPciIoWidthFillUint8, 50 EfiPciIoWidthFillUint16, 51 EfiPciIoWidthFillUint32, 52 EfiPciIoWidthFillUint64, 53 EfiPciIoWidthMaximum 54 } EFI_PCI_IO_PROTOCOL_WIDTH; 55 56 // 57 // Complete PCI address generater 58 // 59 #define EFI_PCI_IO_PASS_THROUGH_BAR 0xff // Special BAR that passes a memory or I/O cycle through unchanged 60 #define EFI_PCI_IO_ATTRIBUTE_MASK 0x077f // All the following I/O and Memory cycles 61 #define EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO 0x0001 // I/O cycles 0x0000-0x00FF (10 bit decode) 62 #define EFI_PCI_IO_ATTRIBUTE_ISA_IO 0x0002 // I/O cycles 0x0000-0x03FF (10 bit decode) 63 #define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO 0x0004 // I/O cycles 0x3C6, 0x3C8, 0x3C9 (10 bit decode) 64 #define EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY 0x0008 // MEM cycles 0xA0000-0xBFFFF (24 bit decode) 65 #define EFI_PCI_IO_ATTRIBUTE_VGA_IO 0x0010 // I/O cycles 0x3B0-0x3BB and 0x3C0-0x3DF (10 bit decode) 66 #define EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO 0x0020 // I/O cycles 0x1F0-0x1F7, 0x3F6, 0x3F7 (10 bit decode) 67 #define EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO 0x0040 // I/O cycles 0x170-0x177, 0x376, 0x377 (10 bit decode) 68 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080 // Map a memory range so write are combined 69 #define EFI_PCI_IO_ATTRIBUTE_IO 0x0100 // Enable the I/O decode bit in the PCI Config Header 70 #define EFI_PCI_IO_ATTRIBUTE_MEMORY 0x0200 // Enable the Memory decode bit in the PCI Config Header 71 #define EFI_PCI_IO_ATTRIBUTE_BUS_MASTER 0x0400 // Enable the DMA bit in the PCI Config Header 72 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED 0x0800 // Map a memory range so all r/w accesses are cached 73 #define EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE 0x1000 // Disable a memory range 74 #define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE 0x2000 // Clear for an add-in PCI Device 75 #define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM 0x4000 // Clear for a physical PCI Option ROM accessed through ROM BAR 76 #define EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000 // Clear for PCI controllers that can not genrate a DAC 77 // 78 // The following definition is added in EFI1.1 spec update and UEFI2.0 spec. 79 // 80 #define EFI_PCI_IO_ATTRIBUTE_ISA_IO_16 0x10000 // I/O cycles 0x0100-0x03FF (16 bit decode) 81 #define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000 // I/O cycles 0x3C6, 0x3C8, 0x3C9 (16 bit decode) 82 #define EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 0x40000 // I/O cycles 0x3B0-0x3BB and 0x3C0-0x3DF (16 bit decode) 83 84 #define EFI_PCI_DEVICE_ENABLE (EFI_PCI_IO_ATTRIBUTE_IO | EFI_PCI_IO_ATTRIBUTE_MEMORY | EFI_PCI_IO_ATTRIBUTE_BUS_MASTER) 85 #define EFI_VGA_DEVICE_ENABLE (EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO | EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY | EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_IO) 86 87 // 88 // ******************************************************* 89 // EFI_PCI_IO_PROTOCOL_OPERATION 90 // ******************************************************* 91 // 92 typedef enum { 93 EfiPciIoOperationBusMasterRead, 94 EfiPciIoOperationBusMasterWrite, 95 EfiPciIoOperationBusMasterCommonBuffer, 96 EfiPciIoOperationMaximum 97 } EFI_PCI_IO_PROTOCOL_OPERATION; 98 99 // 100 // ******************************************************* 101 // EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION 102 // ******************************************************* 103 // 104 typedef enum { 105 EfiPciIoAttributeOperationGet, 106 EfiPciIoAttributeOperationSet, 107 EfiPciIoAttributeOperationEnable, 108 EfiPciIoAttributeOperationDisable, 109 EfiPciIoAttributeOperationSupported, 110 EfiPciIoAttributeOperationMaximum 111 } EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION; 112 113 typedef 114 EFI_STATUS 115 (EFIAPI *EFI_PCI_IO_PROTOCOL_POLL_IO_MEM) ( 116 IN EFI_PCI_IO_PROTOCOL * This, 117 IN EFI_PCI_IO_PROTOCOL_WIDTH Width, 118 IN UINT8 BarIndex, 119 IN UINT64 Offset, 120 IN UINT64 Mask, 121 IN UINT64 Value, 122 IN UINT64 Delay, 123 OUT UINT64 *Result 124 ); 125 126 typedef 127 EFI_STATUS 128 (EFIAPI *EFI_PCI_IO_PROTOCOL_IO_MEM) ( 129 IN EFI_PCI_IO_PROTOCOL * This, 130 IN EFI_PCI_IO_PROTOCOL_WIDTH Width, 131 IN UINT8 BarIndex, 132 IN UINT64 Offset, 133 IN UINTN Count, 134 IN OUT VOID *Buffer 135 ); 136 137 typedef struct { 138 EFI_PCI_IO_PROTOCOL_IO_MEM Read; 139 EFI_PCI_IO_PROTOCOL_IO_MEM Write; 140 } EFI_PCI_IO_PROTOCOL_ACCESS; 141 142 typedef 143 EFI_STATUS 144 (EFIAPI *EFI_PCI_IO_PROTOCOL_CONFIG) ( 145 IN EFI_PCI_IO_PROTOCOL * This, 146 IN EFI_PCI_IO_PROTOCOL_WIDTH Width, 147 IN UINT32 Offset, 148 IN UINTN Count, 149 IN OUT VOID *Buffer 150 ); 151 152 typedef struct { 153 EFI_PCI_IO_PROTOCOL_CONFIG Read; 154 EFI_PCI_IO_PROTOCOL_CONFIG Write; 155 } EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS; 156 157 typedef 158 EFI_STATUS 159 (EFIAPI *EFI_PCI_IO_PROTOCOL_COPY_MEM) ( 160 IN EFI_PCI_IO_PROTOCOL * This, 161 IN EFI_PCI_IO_PROTOCOL_WIDTH Width, 162 IN UINT8 DestBarIndex, 163 IN UINT64 DestOffset, 164 IN UINT8 SrcBarIndex, 165 IN UINT64 SrcOffset, 166 IN UINTN Count 167 ); 168 169 typedef 170 EFI_STATUS 171 (EFIAPI *EFI_PCI_IO_PROTOCOL_MAP) ( 172 IN EFI_PCI_IO_PROTOCOL * This, 173 IN EFI_PCI_IO_PROTOCOL_OPERATION Operation, 174 IN VOID *HostAddress, 175 IN OUT UINTN *NumberOfBytes, 176 OUT EFI_PHYSICAL_ADDRESS * DeviceAddress, 177 OUT VOID **Mapping 178 ); 179 180 typedef 181 EFI_STATUS 182 (EFIAPI *EFI_PCI_IO_PROTOCOL_UNMAP) ( 183 IN EFI_PCI_IO_PROTOCOL * This, 184 IN VOID *Mapping 185 ); 186 187 typedef 188 EFI_STATUS 189 (EFIAPI *EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER) ( 190 IN EFI_PCI_IO_PROTOCOL * This, 191 IN EFI_ALLOCATE_TYPE Type, 192 IN EFI_MEMORY_TYPE MemoryType, 193 IN UINTN Pages, 194 OUT VOID **HostAddress, 195 IN UINT64 Attributes 196 ); 197 198 typedef 199 EFI_STATUS 200 (EFIAPI *EFI_PCI_IO_PROTOCOL_FREE_BUFFER) ( 201 IN EFI_PCI_IO_PROTOCOL * This, 202 IN UINTN Pages, 203 IN VOID *HostAddress 204 ); 205 206 typedef 207 EFI_STATUS 208 (EFIAPI *EFI_PCI_IO_PROTOCOL_FLUSH) ( 209 IN EFI_PCI_IO_PROTOCOL * This 210 ); 211 212 typedef 213 EFI_STATUS 214 (EFIAPI *EFI_PCI_IO_PROTOCOL_GET_LOCATION) ( 215 IN EFI_PCI_IO_PROTOCOL * This, 216 OUT UINTN *SegmentNumber, 217 OUT UINTN *BusNumber, 218 OUT UINTN *DeviceNumber, 219 OUT UINTN *FunctionNumber 220 ); 221 222 typedef 223 EFI_STATUS 224 (EFIAPI *EFI_PCI_IO_PROTOCOL_ATTRIBUTES) ( 225 IN EFI_PCI_IO_PROTOCOL * This, 226 IN EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION Operation, 227 IN UINT64 Attributes, 228 OUT UINT64 *Result OPTIONAL 229 ); 230 231 typedef 232 EFI_STATUS 233 (EFIAPI *EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES) ( 234 IN EFI_PCI_IO_PROTOCOL * This, 235 IN UINT8 BarIndex, 236 OUT UINT64 *Supports, OPTIONAL 237 OUT VOID **Resources OPTIONAL 238 ); 239 240 typedef 241 EFI_STATUS 242 (EFIAPI *EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES) ( 243 IN EFI_PCI_IO_PROTOCOL * This, 244 IN UINT64 Attributes, 245 IN UINT8 BarIndex, 246 IN OUT UINT64 *Offset, 247 IN OUT UINT64 *Length 248 ); 249 250 // 251 // Interface structure for the PCI I/O Protocol 252 // 253 struct _EFI_PCI_IO_PROTOCOL { 254 EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollMem; 255 EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollIo; 256 EFI_PCI_IO_PROTOCOL_ACCESS Mem; 257 EFI_PCI_IO_PROTOCOL_ACCESS Io; 258 EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS Pci; 259 EFI_PCI_IO_PROTOCOL_COPY_MEM CopyMem; 260 EFI_PCI_IO_PROTOCOL_MAP Map; 261 EFI_PCI_IO_PROTOCOL_UNMAP Unmap; 262 EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer; 263 EFI_PCI_IO_PROTOCOL_FREE_BUFFER FreeBuffer; 264 EFI_PCI_IO_PROTOCOL_FLUSH Flush; 265 EFI_PCI_IO_PROTOCOL_GET_LOCATION GetLocation; 266 EFI_PCI_IO_PROTOCOL_ATTRIBUTES Attributes; 267 EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES GetBarAttributes; 268 EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES SetBarAttributes; 269 UINT64 RomSize; 270 VOID *RomImage; 271 }; 272 273 extern EFI_GUID gEfiPciIoProtocolGuid; 274 275 #endif 276