485b5cf8bc
* Drop gnu-efi Change-Id: Ib601fc8ced49b18281b6b98cf861a5aef1b9c065 Reviewed-on: https://review.haiku-os.org/c/haiku/+/2026 Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com> Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
116 lines
4.6 KiB
C
116 lines
4.6 KiB
C
// 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 <efi/boot-services.h>
|
|
#include <efi/types.h>
|
|
|
|
#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;
|