// Copyright 2016 The Fuchsia Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #pragma once #include #include #define EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID \ {0x2f707ebb, 0x4a1a, 0x11D4, {0x9a, 0x38, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d}} extern efi_guid PciRootBridgeIoProtocol; typedef enum { EfiPciWidthUint8, EfiPciWidthUint16, EfiPciWidthUint32, EfiPciWidthUint64, EfiPciWidthFifoUint8, EfiPciWidthFifoUint16, EfiPciWidthFifoUint32, EfiPciWidthFifoUint64, EfiPciWidthFillUint8, EfiPciWidthFillUint16, EfiPciWidthFillUint32, EfiPciWidthFillUint64, EfiPciWidthMaximum, } efi_pci_root_bridge_io_width; struct efi_pci_root_bridge_io_protocol; typedef struct { efi_status (*Read) (struct efi_pci_root_bridge_io_protocol* self, efi_pci_root_bridge_io_width width, uint64_t addr, size_t count, void* buffer) EFIAPI; efi_status (*Write) (struct efi_pci_root_bridge_io_protocol* self, efi_pci_root_bridge_io_width width, uint64_t addr, size_t count, void* buffer) EFIAPI; } efi_pci_root_bridge_io_access; #define EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO 0x0001 #define EFI_PCI_ATTRIBUTE_ISA_IO 0x0002 #define EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO 0x0004 #define EFI_PCI_ATTRIBUTE_VGA_MEMORY 0x0008 #define EFI_PCI_ATTRIBUTE_VGA_IO 0x0010 #define EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO 0x0020 #define EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO 0x0040 #define EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080 #define EFI_PCI_ATTRIBUTE_MEMORY_CACHED 0x0800 #define EFI_PCI_ATTRIBUTE_MEMORY_DISABLE 0x1000 #define EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000 #define EFI_PCI_ATTRIBUTE_ISA_IO_16 0x10000 #define EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000 #define EFI_PCI_ATTRIBUTE_VGA_IO_16 0x40000 typedef enum { EfiPciOperationBusMasterRead, EfiPciOperationBusMasterWrite, EfiPciOperationBusMasterCommonBuffer, EfiPciOperationBusMasterRead64, EfiPciOperationBusMasterWrite64, EfiPciOperationBusMasterCommonBuffer64, EfiPciOperationMaximum, } efi_pci_root_bridge_io_operation; typedef struct efi_pci_root_bridge_io_protocol { efi_handle ParentHandle; efi_status (*PollMem) (struct efi_pci_root_bridge_io_protocol *self, efi_pci_root_bridge_io_width width, uint64_t addr, uint64_t mask, uint64_t value, uint64_t delay, uint64_t* result) EFIAPI; efi_status (*PollIo) (struct efi_pci_root_bridge_io_protocol *self, efi_pci_root_bridge_io_width width, uint64_t addr, uint64_t mask, uint64_t value, uint64_t delay, uint64_t* result) EFIAPI; efi_pci_root_bridge_io_access Mem; efi_pci_root_bridge_io_access Io; efi_pci_root_bridge_io_access Pci; efi_status (*CopyMem) (struct efi_pci_root_bridge_io_protocol* self, efi_pci_root_bridge_io_width width, uint64_t dest_addr, uint64_t src_addr, size_t count) EFIAPI; efi_status (*Map) (struct efi_pci_root_bridge_io_protocol* self, efi_pci_root_bridge_io_operation operation, void* host_addr, size_t* num_bytes, efi_physical_addr* device_addr, void** mapping) EFIAPI; efi_status (*Unmap) (struct efi_pci_root_bridge_io_protocol* self, void* mapping) EFIAPI; efi_status (*AllocateBuffer) (struct efi_pci_root_bridge_io_protocol* self, efi_allocate_type type, efi_memory_type memory_type, size_t pages, void** host_addr, uint64_t attributes) EFIAPI; efi_status (*FreeBuffer) (struct efi_pci_root_bridge_io_protocol* self, size_t pages, void* host_addr) EFIAPI; efi_status (*Flush) (struct efi_pci_root_bridge_io_protocol* self) EFIAPI; efi_status (*GetAttributes) (struct efi_pci_root_bridge_io_protocol* self, uint64_t* supports, uint64_t* attributes) EFIAPI; efi_status (*SetAttributes) (struct efi_pci_root_bridge_io_protocol* self, uint64_t attributes, uint64_t* resource_base, uint64_t* resource_len) EFIAPI; efi_status (*Configuration) (struct efi_pci_root_bridge_io_protocol* self, void** resources) EFIAPI; uint32_t SegmentNumber; } efi_pci_root_bridge_io_protocol;