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 }}
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
,
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
,
66 grub_efi_pci_io_mem_t read
;
67 grub_efi_pci_io_mem_t write
;
68 } grub_efi_pci_io_access_t
;
72 grub_efi_pci_io_config_t read
;
73 grub_efi_pci_io_config_t write
;
74 } grub_efi_pci_io_config_access_t
;
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
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
,
138 grub_efi_uintn_t
*number_of_bytes
,
139 grub_efi_uint64_t
*device_address
,
142 typedef grub_efi_status_t
143 (*grub_efi_pci_io_unmap_t
) (struct grub_efi_pci_io
*this,
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
,
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
,
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
,
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
;
209 typedef struct grub_efi_pci_io grub_efi_pci_io_t
;
211 struct grub_efi_pci_root_io
;
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
,
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
,
225 } grub_efi_pci_root_io_access_t
;
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
,
260 grub_efi_uintn_t
*number_of_bytes
,
261 grub_efi_uint64_t
*device_address
,
264 typedef grub_efi_status_t
265 (*grub_efi_pci_root_io_unmap_t
) (struct grub_efi_pci_root_io
*this,
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
,
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
,
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,
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 */