diff options
Diffstat (limited to 'include/grub/efi/pci.h')
-rw-r--r-- | include/grub/efi/pci.h | 319 |
1 files changed, 319 insertions, 0 deletions
diff --git a/include/grub/efi/pci.h b/include/grub/efi/pci.h new file mode 100644 index 0000000..b172455 --- /dev/null +++ b/include/grub/efi/pci.h @@ -0,0 +1,319 @@ +/* + * GRUB -- GRand Unified Bootloader + * Copyright (C) 2006,2007,2008 Free Software Foundation, Inc. + * + * GRUB is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GRUB is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GRUB. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef GRUB_EFI_PCI_HEADER +#define GRUB_EFI_PCI_HEADER 1 + +#include <grub/symbol.h> + +#define GRUB_EFI_PCI_IO_GUID \ + { 0x4cf5b200, 0x68b8, 0x4ca5, { 0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a }} + +#define GRUB_EFI_PCI_ROOT_IO_GUID \ + { 0x2F707EBB, 0x4A1A, 0x11d4, { 0x9A, 0x38, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D }} + +typedef enum + { + GRUB_EFI_PCI_IO_WIDTH_UINT8, + GRUB_EFI_PCI_IO_WIDTH_UINT16, + GRUB_EFI_PCI_IO_WIDTH_UINT32, + GRUB_EFI_PCI_IO_WIDTH_UINT64, + GRUB_EFI_PCI_IO_WIDTH_FIFO_UINT8, + GRUB_EFI_PCI_IO_WIDTH_FIFO_UINT16, + GRUB_EFI_PCI_IO_WIDTH_FIFO_UINT32, + GRUB_EFI_PCI_IO_WIDTH_FIFO_UINT64, + GRUB_EFI_PCI_IO_WIDTH_FILL_UINT8, + GRUB_EFI_PCI_IO_WIDTH_FILL_UINT16, + GRUB_EFI_PCI_IO_WIDTH_FILL_UINT32, + GRUB_EFI_PCI_IO_WIDTH_FILL_UINT64, + GRUB_EFI_PCI_IO_WIDTH_MAXIMUM, + } + grub_efi_pci_io_width_t; + +struct grub_efi_pci_io; + +typedef grub_efi_status_t +(*grub_efi_pci_io_mem_t) (struct grub_efi_pci_io *this, + grub_efi_pci_io_width_t width, + grub_efi_uint8_t bar_index, + grub_efi_uint64_t offset, + grub_efi_uintn_t count, + void *buffer); + +typedef grub_efi_status_t +(*grub_efi_pci_io_config_t) (struct grub_efi_pci_io *this, + grub_efi_pci_io_width_t width, + grub_efi_uint32_t offset, + grub_efi_uintn_t count, + void *buffer); +typedef struct +{ + grub_efi_pci_io_mem_t read; + grub_efi_pci_io_mem_t write; +} grub_efi_pci_io_access_t; + +typedef struct +{ + grub_efi_pci_io_config_t read; + grub_efi_pci_io_config_t write; +} grub_efi_pci_io_config_access_t; + +typedef enum + { + GRUB_EFI_PCI_IO_OPERATION_BUS_MASTER_READ, + GRUB_EFI_PCI_IO_OPERATION_BUS_MASTER_WRITE, + GRUB_EFI_PCI_IO_OPERATION_BUS_MASTER_COMMON_BUFFER, + GRUB_EFI_PCI_IO_OPERATION_BUS_MASTER_MAXIMUM + } + grub_efi_pci_io_operation_t; + +#define GRUB_EFI_PCI_IO_ATTRIBUTE_ISA_IO 0x0002 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO 0x0004 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY 0x0008 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO 0x0010 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO 0x0020 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO 0x0040 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_IO 0x0100 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY 0x0200 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_BUS_MASTER 0x0400 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED 0x0800 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE 0x1000 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE 0x2000 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM 0x4000 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_ISA_IO_16 0x10000 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000 +#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 0x40000 + +typedef enum + { + GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_GET, + GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_SET, + GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_ENABLE, + GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_DISABLE, + GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_SUPPORTED, + GRUB_EFI_PCI_IO_ATTRIBUTE_OPERATION_MAXIMUM + } + grub_efi_pci_io_attribute_operation_t; + +typedef grub_efi_status_t +(*grub_efi_pci_io_poll_io_mem_t) (struct grub_efi_pci_io *this, + grub_efi_pci_io_width_t width, + grub_efi_uint8_t bar_ndex, + grub_efi_uint64_t offset, + grub_efi_uint64_t mask, + grub_efi_uint64_t value, + grub_efi_uint64_t delay, + grub_efi_uint64_t *result); + +typedef grub_efi_status_t +(*grub_efi_pci_io_copy_mem_t) (struct grub_efi_pci_io *this, + grub_efi_pci_io_width_t width, + grub_efi_uint8_t dest_bar_index, + grub_efi_uint64_t dest_offset, + grub_efi_uint8_t src_bar_index, + grub_efi_uint64_t src_offset, + grub_efi_uintn_t count); + +typedef grub_efi_status_t +(*grub_efi_pci_io_map_t) (struct grub_efi_pci_io *this, + grub_efi_pci_io_operation_t operation, + void *host_address, + grub_efi_uintn_t *number_of_bytes, + grub_efi_uint64_t *device_address, + void **mapping); + +typedef grub_efi_status_t +(*grub_efi_pci_io_unmap_t) (struct grub_efi_pci_io *this, + void *mapping); + +typedef grub_efi_status_t +(*grub_efi_pci_io_allocate_buffer_t) (struct grub_efi_pci_io *this, + grub_efi_allocate_type_t type, + grub_efi_memory_type_t memory_type, + grub_efi_uintn_t pages, + void **host_address, + grub_efi_uint64_t attributes); + +typedef grub_efi_status_t +(*grub_efi_pci_io_free_buffer_t) (struct grub_efi_pci_io *this, + grub_efi_allocate_type_t type, + grub_efi_memory_type_t memory_type, + grub_efi_uintn_t pages, + void **host_address, + grub_efi_uint64_t attributes); + +typedef grub_efi_status_t +(*grub_efi_pci_io_flush_t) (struct grub_efi_pci_io *this); + +typedef grub_efi_status_t +(*grub_efi_pci_io_get_location_t) (struct grub_efi_pci_io *this, + grub_efi_uintn_t *segment_number, + grub_efi_uintn_t *bus_number, + grub_efi_uintn_t *device_number, + grub_efi_uintn_t *function_number); + +typedef grub_efi_status_t +(*grub_efi_pci_io_attributes_t) (struct grub_efi_pci_io *this, + grub_efi_pci_io_attribute_operation_t operation, + grub_efi_uint64_t attributes, + grub_efi_uint64_t *result); + +typedef grub_efi_status_t +(*grub_efi_pci_io_get_bar_attributes_t) (struct grub_efi_pci_io *this, + grub_efi_uint8_t bar_index, + grub_efi_uint64_t *supports, + void **resources); + +typedef grub_efi_status_t +(*grub_efi_pci_io_set_bar_attributes_t) (struct grub_efi_pci_io *this, + grub_efi_uint64_t attributes, + grub_efi_uint8_t bar_index, + grub_efi_uint64_t *offset, + grub_efi_uint64_t *length); +struct grub_efi_pci_io { + grub_efi_pci_io_poll_io_mem_t poll_mem; + grub_efi_pci_io_poll_io_mem_t poll_io; + grub_efi_pci_io_access_t mem; + grub_efi_pci_io_access_t io; + grub_efi_pci_io_config_access_t pci; + grub_efi_pci_io_copy_mem_t copy_mem; + grub_efi_pci_io_map_t map; + grub_efi_pci_io_unmap_t unmap; + grub_efi_pci_io_allocate_buffer_t allocate_buffer; + grub_efi_pci_io_free_buffer_t free_buffer; + grub_efi_pci_io_flush_t flush; + grub_efi_pci_io_get_location_t get_location; + grub_efi_pci_io_attributes_t attributes; + grub_efi_pci_io_get_bar_attributes_t get_bar_attributes; + grub_efi_pci_io_set_bar_attributes_t set_bar_attributes; + grub_efi_uint64_t rom_size; + void *rom_image; +}; +typedef struct grub_efi_pci_io grub_efi_pci_io_t; + +struct grub_efi_pci_root_io; + +typedef struct +{ + grub_efi_status_t(*read) (struct grub_efi_pci_root_io *this, + grub_efi_pci_io_width_t width, + grub_efi_uint64_t address, + grub_efi_uintn_t count, + void *buffer); + grub_efi_status_t(*write) (struct grub_efi_pci_root_io *this, + grub_efi_pci_io_width_t width, + grub_efi_uint64_t address, + grub_efi_uintn_t count, + void *buffer); +} grub_efi_pci_root_io_access_t; + +typedef enum + { + GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_READ, + GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_WRITE, + GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_COMMON_BUFFER, + GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_READ_64, + GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_WRITE_64, + GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_COMMON_BUFFER_64, + GRUB_EFI_PCI_ROOT_IO_OPERATION_BUS_MASTER_MAXIMUM + } + grub_efi_pci_root_io_operation_t; + +typedef grub_efi_status_t +(*grub_efi_pci_root_io_poll_io_mem_t) (struct grub_efi_pci_root_io *this, + grub_efi_pci_io_width_t width, + grub_efi_uint64_t address, + grub_efi_uint64_t mask, + grub_efi_uint64_t value, + grub_efi_uint64_t delay, + grub_efi_uint64_t *result); + +typedef grub_efi_status_t +(*grub_efi_pci_root_io_copy_mem_t) (struct grub_efi_pci_root_io *this, + grub_efi_pci_io_width_t width, + grub_efi_uint64_t dest_offset, + grub_efi_uint64_t src_offset, + grub_efi_uintn_t count); + + +typedef grub_efi_status_t +(*grub_efi_pci_root_io_map_t) (struct grub_efi_pci_root_io *this, + grub_efi_pci_root_io_operation_t operation, + void *host_address, + grub_efi_uintn_t *number_of_bytes, + grub_efi_uint64_t *device_address, + void **mapping); + +typedef grub_efi_status_t +(*grub_efi_pci_root_io_unmap_t) (struct grub_efi_pci_root_io *this, + void *mapping); + +typedef grub_efi_status_t +(*grub_efi_pci_root_io_allocate_buffer_t) (struct grub_efi_pci_root_io *this, + grub_efi_allocate_type_t type, + grub_efi_memory_type_t memory_type, + grub_efi_uintn_t pages, + void **host_address, + grub_efi_uint64_t attributes); + +typedef grub_efi_status_t +(*grub_efi_pci_root_io_free_buffer_t) (struct grub_efi_pci_root_io *this, + grub_efi_uintn_t pages, + void **host_address); + +typedef grub_efi_status_t +(*grub_efi_pci_root_io_flush_t) (struct grub_efi_pci_root_io *this); + +typedef grub_efi_status_t +(*grub_efi_pci_root_io_get_attributes_t) (struct grub_efi_pci_root_io *this, + grub_efi_uint64_t *supports, + void **resources); + +typedef grub_efi_status_t +(*grub_efi_pci_root_io_set_attributes_t) (struct grub_efi_pci_root_io *this, + grub_efi_uint64_t attributes, + grub_efi_uint64_t *offset, + grub_efi_uint64_t *length); + +typedef grub_efi_status_t +(*grub_efi_pci_root_io_configuration_t) (struct grub_efi_pci_root_io *this, + void **resources); + +struct grub_efi_pci_root_io { + grub_efi_handle_t parent; + grub_efi_pci_root_io_poll_io_mem_t poll_mem; + grub_efi_pci_root_io_poll_io_mem_t poll_io; + grub_efi_pci_root_io_access_t mem; + grub_efi_pci_root_io_access_t io; + grub_efi_pci_root_io_access_t pci; + grub_efi_pci_root_io_copy_mem_t copy_mem; + grub_efi_pci_root_io_map_t map; + grub_efi_pci_root_io_unmap_t unmap; + grub_efi_pci_root_io_allocate_buffer_t allocate_buffer; + grub_efi_pci_root_io_free_buffer_t free_buffer; + grub_efi_pci_root_io_flush_t flush; + grub_efi_pci_root_io_get_attributes_t get_attributes; + grub_efi_pci_root_io_set_attributes_t set_attributes; + grub_efi_pci_root_io_configuration_t configuration; +}; + +typedef struct grub_efi_pci_root_io grub_efi_pci_root_io_t; + +#endif /* !GRUB_EFI_PCI_HEADER */ |