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