Indentation fix, cleanup.
[AROS.git] / arch / all-pc / boot / grub2-aros / include / grub / efi / pci.h
blobb17245549f51bbdc9e3e9d270b35498cc7e89378
1 /*
2 * GRUB -- GRand Unified Bootloader
3 * Copyright (C) 2006,2007,2008 Free Software Foundation, Inc.
5 * GRUB is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
10 * GRUB is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
19 #ifndef GRUB_EFI_PCI_HEADER
20 #define GRUB_EFI_PCI_HEADER 1
22 #include <grub/symbol.h>
24 #define GRUB_EFI_PCI_IO_GUID \
25 { 0x4cf5b200, 0x68b8, 0x4ca5, { 0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a }}
27 #define GRUB_EFI_PCI_ROOT_IO_GUID \
28 { 0x2F707EBB, 0x4A1A, 0x11d4, { 0x9A, 0x38, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D }}
30 typedef enum
32 GRUB_EFI_PCI_IO_WIDTH_UINT8,
33 GRUB_EFI_PCI_IO_WIDTH_UINT16,
34 GRUB_EFI_PCI_IO_WIDTH_UINT32,
35 GRUB_EFI_PCI_IO_WIDTH_UINT64,
36 GRUB_EFI_PCI_IO_WIDTH_FIFO_UINT8,
37 GRUB_EFI_PCI_IO_WIDTH_FIFO_UINT16,
38 GRUB_EFI_PCI_IO_WIDTH_FIFO_UINT32,
39 GRUB_EFI_PCI_IO_WIDTH_FIFO_UINT64,
40 GRUB_EFI_PCI_IO_WIDTH_FILL_UINT8,
41 GRUB_EFI_PCI_IO_WIDTH_FILL_UINT16,
42 GRUB_EFI_PCI_IO_WIDTH_FILL_UINT32,
43 GRUB_EFI_PCI_IO_WIDTH_FILL_UINT64,
44 GRUB_EFI_PCI_IO_WIDTH_MAXIMUM,
46 grub_efi_pci_io_width_t;
48 struct grub_efi_pci_io;
50 typedef grub_efi_status_t
51 (*grub_efi_pci_io_mem_t) (struct grub_efi_pci_io *this,
52 grub_efi_pci_io_width_t width,
53 grub_efi_uint8_t bar_index,
54 grub_efi_uint64_t offset,
55 grub_efi_uintn_t count,
56 void *buffer);
58 typedef grub_efi_status_t
59 (*grub_efi_pci_io_config_t) (struct grub_efi_pci_io *this,
60 grub_efi_pci_io_width_t width,
61 grub_efi_uint32_t offset,
62 grub_efi_uintn_t count,
63 void *buffer);
64 typedef struct
66 grub_efi_pci_io_mem_t read;
67 grub_efi_pci_io_mem_t write;
68 } grub_efi_pci_io_access_t;
70 typedef struct
72 grub_efi_pci_io_config_t read;
73 grub_efi_pci_io_config_t write;
74 } grub_efi_pci_io_config_access_t;
76 typedef enum
78 GRUB_EFI_PCI_IO_OPERATION_BUS_MASTER_READ,
79 GRUB_EFI_PCI_IO_OPERATION_BUS_MASTER_WRITE,
80 GRUB_EFI_PCI_IO_OPERATION_BUS_MASTER_COMMON_BUFFER,
81 GRUB_EFI_PCI_IO_OPERATION_BUS_MASTER_MAXIMUM
83 grub_efi_pci_io_operation_t;
85 #define GRUB_EFI_PCI_IO_ATTRIBUTE_ISA_IO 0x0002
86 #define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO 0x0004
87 #define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY 0x0008
88 #define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO 0x0010
89 #define GRUB_EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO 0x0020
90 #define GRUB_EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO 0x0040
91 #define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080
92 #define GRUB_EFI_PCI_IO_ATTRIBUTE_IO 0x0100
93 #define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY 0x0200
94 #define GRUB_EFI_PCI_IO_ATTRIBUTE_BUS_MASTER 0x0400
95 #define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED 0x0800
96 #define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE 0x1000
97 #define GRUB_EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE 0x2000
98 #define GRUB_EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM 0x4000
99 #define GRUB_EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000
100 #define GRUB_EFI_PCI_IO_ATTRIBUTE_ISA_IO_16 0x10000
101 #define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000
102 #define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 0x40000
104 typedef enum
106 GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_GET,
107 GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_SET,
108 GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_ENABLE,
109 GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_DISABLE,
110 GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_SUPPORTED,
111 GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_MAXIMUM
113 grub_efi_pci_io_attribute_operation_t;
115 typedef grub_efi_status_t
116 (*grub_efi_pci_io_poll_io_mem_t) (struct grub_efi_pci_io *this,
117 grub_efi_pci_io_width_t width,
118 grub_efi_uint8_t bar_ndex,
119 grub_efi_uint64_t offset,
120 grub_efi_uint64_t mask,
121 grub_efi_uint64_t value,
122 grub_efi_uint64_t delay,
123 grub_efi_uint64_t *result);
125 typedef grub_efi_status_t
126 (*grub_efi_pci_io_copy_mem_t) (struct grub_efi_pci_io *this,
127 grub_efi_pci_io_width_t width,
128 grub_efi_uint8_t dest_bar_index,
129 grub_efi_uint64_t dest_offset,
130 grub_efi_uint8_t src_bar_index,
131 grub_efi_uint64_t src_offset,
132 grub_efi_uintn_t count);
134 typedef grub_efi_status_t
135 (*grub_efi_pci_io_map_t) (struct grub_efi_pci_io *this,
136 grub_efi_pci_io_operation_t operation,
137 void *host_address,
138 grub_efi_uintn_t *number_of_bytes,
139 grub_efi_uint64_t *device_address,
140 void **mapping);
142 typedef grub_efi_status_t
143 (*grub_efi_pci_io_unmap_t) (struct grub_efi_pci_io *this,
144 void *mapping);
146 typedef grub_efi_status_t
147 (*grub_efi_pci_io_allocate_buffer_t) (struct grub_efi_pci_io *this,
148 grub_efi_allocate_type_t type,
149 grub_efi_memory_type_t memory_type,
150 grub_efi_uintn_t pages,
151 void **host_address,
152 grub_efi_uint64_t attributes);
154 typedef grub_efi_status_t
155 (*grub_efi_pci_io_free_buffer_t) (struct grub_efi_pci_io *this,
156 grub_efi_allocate_type_t type,
157 grub_efi_memory_type_t memory_type,
158 grub_efi_uintn_t pages,
159 void **host_address,
160 grub_efi_uint64_t attributes);
162 typedef grub_efi_status_t
163 (*grub_efi_pci_io_flush_t) (struct grub_efi_pci_io *this);
165 typedef grub_efi_status_t
166 (*grub_efi_pci_io_get_location_t) (struct grub_efi_pci_io *this,
167 grub_efi_uintn_t *segment_number,
168 grub_efi_uintn_t *bus_number,
169 grub_efi_uintn_t *device_number,
170 grub_efi_uintn_t *function_number);
172 typedef grub_efi_status_t
173 (*grub_efi_pci_io_attributes_t) (struct grub_efi_pci_io *this,
174 grub_efi_pci_io_attribute_operation_t operation,
175 grub_efi_uint64_t attributes,
176 grub_efi_uint64_t *result);
178 typedef grub_efi_status_t
179 (*grub_efi_pci_io_get_bar_attributes_t) (struct grub_efi_pci_io *this,
180 grub_efi_uint8_t bar_index,
181 grub_efi_uint64_t *supports,
182 void **resources);
184 typedef grub_efi_status_t
185 (*grub_efi_pci_io_set_bar_attributes_t) (struct grub_efi_pci_io *this,
186 grub_efi_uint64_t attributes,
187 grub_efi_uint8_t bar_index,
188 grub_efi_uint64_t *offset,
189 grub_efi_uint64_t *length);
190 struct grub_efi_pci_io {
191 grub_efi_pci_io_poll_io_mem_t poll_mem;
192 grub_efi_pci_io_poll_io_mem_t poll_io;
193 grub_efi_pci_io_access_t mem;
194 grub_efi_pci_io_access_t io;
195 grub_efi_pci_io_config_access_t pci;
196 grub_efi_pci_io_copy_mem_t copy_mem;
197 grub_efi_pci_io_map_t map;
198 grub_efi_pci_io_unmap_t unmap;
199 grub_efi_pci_io_allocate_buffer_t allocate_buffer;
200 grub_efi_pci_io_free_buffer_t free_buffer;
201 grub_efi_pci_io_flush_t flush;
202 grub_efi_pci_io_get_location_t get_location;
203 grub_efi_pci_io_attributes_t attributes;
204 grub_efi_pci_io_get_bar_attributes_t get_bar_attributes;
205 grub_efi_pci_io_set_bar_attributes_t set_bar_attributes;
206 grub_efi_uint64_t rom_size;
207 void *rom_image;
209 typedef struct grub_efi_pci_io grub_efi_pci_io_t;
211 struct grub_efi_pci_root_io;
213 typedef struct
215 grub_efi_status_t(*read) (struct grub_efi_pci_root_io *this,
216 grub_efi_pci_io_width_t width,
217 grub_efi_uint64_t address,
218 grub_efi_uintn_t count,
219 void *buffer);
220 grub_efi_status_t(*write) (struct grub_efi_pci_root_io *this,
221 grub_efi_pci_io_width_t width,
222 grub_efi_uint64_t address,
223 grub_efi_uintn_t count,
224 void *buffer);
225 } grub_efi_pci_root_io_access_t;
227 typedef enum
229 GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_READ,
230 GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_WRITE,
231 GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_COMMON_BUFFER,
232 GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_READ_64,
233 GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_WRITE_64,
234 GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_COMMON_BUFFER_64,
235 GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_MAXIMUM
237 grub_efi_pci_root_io_operation_t;
239 typedef grub_efi_status_t
240 (*grub_efi_pci_root_io_poll_io_mem_t) (struct grub_efi_pci_root_io *this,
241 grub_efi_pci_io_width_t width,
242 grub_efi_uint64_t address,
243 grub_efi_uint64_t mask,
244 grub_efi_uint64_t value,
245 grub_efi_uint64_t delay,
246 grub_efi_uint64_t *result);
248 typedef grub_efi_status_t
249 (*grub_efi_pci_root_io_copy_mem_t) (struct grub_efi_pci_root_io *this,
250 grub_efi_pci_io_width_t width,
251 grub_efi_uint64_t dest_offset,
252 grub_efi_uint64_t src_offset,
253 grub_efi_uintn_t count);
256 typedef grub_efi_status_t
257 (*grub_efi_pci_root_io_map_t) (struct grub_efi_pci_root_io *this,
258 grub_efi_pci_root_io_operation_t operation,
259 void *host_address,
260 grub_efi_uintn_t *number_of_bytes,
261 grub_efi_uint64_t *device_address,
262 void **mapping);
264 typedef grub_efi_status_t
265 (*grub_efi_pci_root_io_unmap_t) (struct grub_efi_pci_root_io *this,
266 void *mapping);
268 typedef grub_efi_status_t
269 (*grub_efi_pci_root_io_allocate_buffer_t) (struct grub_efi_pci_root_io *this,
270 grub_efi_allocate_type_t type,
271 grub_efi_memory_type_t memory_type,
272 grub_efi_uintn_t pages,
273 void **host_address,
274 grub_efi_uint64_t attributes);
276 typedef grub_efi_status_t
277 (*grub_efi_pci_root_io_free_buffer_t) (struct grub_efi_pci_root_io *this,
278 grub_efi_uintn_t pages,
279 void **host_address);
281 typedef grub_efi_status_t
282 (*grub_efi_pci_root_io_flush_t) (struct grub_efi_pci_root_io *this);
284 typedef grub_efi_status_t
285 (*grub_efi_pci_root_io_get_attributes_t) (struct grub_efi_pci_root_io *this,
286 grub_efi_uint64_t *supports,
287 void **resources);
289 typedef grub_efi_status_t
290 (*grub_efi_pci_root_io_set_attributes_t) (struct grub_efi_pci_root_io *this,
291 grub_efi_uint64_t attributes,
292 grub_efi_uint64_t *offset,
293 grub_efi_uint64_t *length);
295 typedef grub_efi_status_t
296 (*grub_efi_pci_root_io_configuration_t) (struct grub_efi_pci_root_io *this,
297 void **resources);
299 struct grub_efi_pci_root_io {
300 grub_efi_handle_t parent;
301 grub_efi_pci_root_io_poll_io_mem_t poll_mem;
302 grub_efi_pci_root_io_poll_io_mem_t poll_io;
303 grub_efi_pci_root_io_access_t mem;
304 grub_efi_pci_root_io_access_t io;
305 grub_efi_pci_root_io_access_t pci;
306 grub_efi_pci_root_io_copy_mem_t copy_mem;
307 grub_efi_pci_root_io_map_t map;
308 grub_efi_pci_root_io_unmap_t unmap;
309 grub_efi_pci_root_io_allocate_buffer_t allocate_buffer;
310 grub_efi_pci_root_io_free_buffer_t free_buffer;
311 grub_efi_pci_root_io_flush_t flush;
312 grub_efi_pci_root_io_get_attributes_t get_attributes;
313 grub_efi_pci_root_io_set_attributes_t set_attributes;
314 grub_efi_pci_root_io_configuration_t configuration;
317 typedef struct grub_efi_pci_root_io grub_efi_pci_root_io_t;
319 #endif /* !GRUB_EFI_PCI_HEADER */