+++ /dev/null
-/*++\r
-\r
-Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-\r
-Module Name:\r
-\r
- PciIo.h\r
- \r
-Abstract:\r
-\r
- EFI PCI I/O Protocol\r
-\r
-Revision History\r
-\r
---*/\r
-\r
-#ifndef _EFI_PCI_IO_H\r
-#define _EFI_PCI_IO_H\r
-\r
-//\r
-// Global ID for the PCI I/O Protocol\r
-//\r
-#define EFI_PCI_IO_PROTOCOL_GUID \\r
- { \\r
- 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x2, 0x9a} \\r
- }\r
-\r
-EFI_FORWARD_DECLARATION (EFI_PCI_IO_PROTOCOL);\r
-\r
-//\r
-// Prototypes for the PCI I/O Protocol\r
-//\r
-typedef enum {\r
- EfiPciIoWidthUint8 = 0,\r
- EfiPciIoWidthUint16,\r
- EfiPciIoWidthUint32,\r
- EfiPciIoWidthUint64,\r
- EfiPciIoWidthFifoUint8,\r
- EfiPciIoWidthFifoUint16,\r
- EfiPciIoWidthFifoUint32,\r
- EfiPciIoWidthFifoUint64,\r
- EfiPciIoWidthFillUint8,\r
- EfiPciIoWidthFillUint16,\r
- EfiPciIoWidthFillUint32,\r
- EfiPciIoWidthFillUint64,\r
- EfiPciIoWidthMaximum\r
-} EFI_PCI_IO_PROTOCOL_WIDTH;\r
-\r
-//\r
-// Complete PCI address generater\r
-//\r
-#define EFI_PCI_IO_PASS_THROUGH_BAR 0xff // Special BAR that passes a memory or I/O cycle through unchanged\r
-#define EFI_PCI_IO_ATTRIBUTE_MASK 0x077f // All the following I/O and Memory cycles\r
-#define EFI_PCI_IO_ATTRIBUTE_ISA_MOTHERBOARD_IO 0x0001 // I/O cycles 0x0000-0x00FF (10 bit decode)\r
-#define EFI_PCI_IO_ATTRIBUTE_ISA_IO 0x0002 // I/O cycles 0x0000-0x03FF (10 bit decode)\r
-#define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO 0x0004 // I/O cycles 0x3C6, 0x3C8, 0x3C9 (10 bit decode)\r
-#define EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY 0x0008 // MEM cycles 0xA0000-0xBFFFF (24 bit decode)\r
-#define EFI_PCI_IO_ATTRIBUTE_VGA_IO 0x0010 // I/O cycles 0x3B0-0x3BB and 0x3C0-0x3DF (10 bit decode)\r
-#define EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO 0x0020 // I/O cycles 0x1F0-0x1F7, 0x3F6, 0x3F7 (10 bit decode)\r
-#define EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO 0x0040 // I/O cycles 0x170-0x177, 0x376, 0x377 (10 bit decode)\r
-#define EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080 // Map a memory range so write are combined\r
-#define EFI_PCI_IO_ATTRIBUTE_IO 0x0100 // Enable the I/O decode bit in the PCI Config Header\r
-#define EFI_PCI_IO_ATTRIBUTE_MEMORY 0x0200 // Enable the Memory decode bit in the PCI Config Header\r
-#define EFI_PCI_IO_ATTRIBUTE_BUS_MASTER 0x0400 // Enable the DMA bit in the PCI Config Header\r
-#define EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED 0x0800 // Map a memory range so all r/w accesses are cached\r
-#define EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE 0x1000 // Disable a memory range\r
-#define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE 0x2000 // Clear for an add-in PCI Device\r
-#define EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM 0x4000 // Clear for a physical PCI Option ROM accessed through ROM BAR\r
-#define EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000 // Clear for PCI controllers that can not genrate a DAC\r
-//\r
-// The following definition is added in EFI1.1 spec update and UEFI2.0 spec.\r
-//\r
-#define EFI_PCI_IO_ATTRIBUTE_ISA_IO_16 0x10000 // I/O cycles 0x0100-0x03FF (16 bit decode)\r
-#define EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000 // I/O cycles 0x3C6, 0x3C8, 0x3C9 (16 bit decode)\r
-#define EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 0x40000 // I/O cycles 0x3B0-0x3BB and 0x3C0-0x3DF (16 bit decode)\r
-\r
-#define EFI_PCI_DEVICE_ENABLE (EFI_PCI_IO_ATTRIBUTE_IO | EFI_PCI_IO_ATTRIBUTE_MEMORY | EFI_PCI_IO_ATTRIBUTE_BUS_MASTER)\r
-#define EFI_VGA_DEVICE_ENABLE (EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO | EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY | EFI_PCI_IO_ATTRIBUTE_VGA_IO | EFI_PCI_IO_ATTRIBUTE_IO)\r
-\r
-//\r
-// *******************************************************\r
-// EFI_PCI_IO_PROTOCOL_OPERATION\r
-// *******************************************************\r
-//\r
-typedef enum {\r
- EfiPciIoOperationBusMasterRead,\r
- EfiPciIoOperationBusMasterWrite,\r
- EfiPciIoOperationBusMasterCommonBuffer,\r
- EfiPciIoOperationMaximum\r
-} EFI_PCI_IO_PROTOCOL_OPERATION;\r
-\r
-//\r
-// *******************************************************\r
-// EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION\r
-// *******************************************************\r
-//\r
-typedef enum {\r
- EfiPciIoAttributeOperationGet,\r
- EfiPciIoAttributeOperationSet,\r
- EfiPciIoAttributeOperationEnable,\r
- EfiPciIoAttributeOperationDisable,\r
- EfiPciIoAttributeOperationSupported,\r
- EfiPciIoAttributeOperationMaximum\r
-} EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_POLL_IO_MEM) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- IN EFI_PCI_IO_PROTOCOL_WIDTH Width,\r
- IN UINT8 BarIndex,\r
- IN UINT64 Offset,\r
- IN UINT64 Mask,\r
- IN UINT64 Value,\r
- IN UINT64 Delay,\r
- OUT UINT64 *Result\r
- );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_IO_MEM) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- IN EFI_PCI_IO_PROTOCOL_WIDTH Width,\r
- IN UINT8 BarIndex,\r
- IN UINT64 Offset,\r
- IN UINTN Count,\r
- IN OUT VOID *Buffer\r
- );\r
-\r
-typedef struct {\r
- EFI_PCI_IO_PROTOCOL_IO_MEM Read;\r
- EFI_PCI_IO_PROTOCOL_IO_MEM Write;\r
-} EFI_PCI_IO_PROTOCOL_ACCESS;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_CONFIG) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- IN EFI_PCI_IO_PROTOCOL_WIDTH Width,\r
- IN UINT32 Offset,\r
- IN UINTN Count,\r
- IN OUT VOID *Buffer\r
- );\r
-\r
-typedef struct {\r
- EFI_PCI_IO_PROTOCOL_CONFIG Read;\r
- EFI_PCI_IO_PROTOCOL_CONFIG Write;\r
-} EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS;\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_COPY_MEM) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- IN EFI_PCI_IO_PROTOCOL_WIDTH Width,\r
- IN UINT8 DestBarIndex,\r
- IN UINT64 DestOffset,\r
- IN UINT8 SrcBarIndex,\r
- IN UINT64 SrcOffset,\r
- IN UINTN Count\r
- );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_MAP) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- IN EFI_PCI_IO_PROTOCOL_OPERATION Operation,\r
- IN VOID *HostAddress,\r
- IN OUT UINTN *NumberOfBytes,\r
- OUT EFI_PHYSICAL_ADDRESS * DeviceAddress,\r
- OUT VOID **Mapping\r
- );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_UNMAP) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- IN VOID *Mapping\r
- );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- IN EFI_ALLOCATE_TYPE Type,\r
- IN EFI_MEMORY_TYPE MemoryType,\r
- IN UINTN Pages,\r
- OUT VOID **HostAddress,\r
- IN UINT64 Attributes\r
- );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_FREE_BUFFER) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- IN UINTN Pages,\r
- IN VOID *HostAddress\r
- );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_FLUSH) (\r
- IN EFI_PCI_IO_PROTOCOL * This\r
- );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_GET_LOCATION) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- OUT UINTN *SegmentNumber,\r
- OUT UINTN *BusNumber,\r
- OUT UINTN *DeviceNumber,\r
- OUT UINTN *FunctionNumber\r
- );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_ATTRIBUTES) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- IN EFI_PCI_IO_PROTOCOL_ATTRIBUTE_OPERATION Operation,\r
- IN UINT64 Attributes,\r
- OUT UINT64 *Result OPTIONAL\r
- );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- IN UINT8 BarIndex,\r
- OUT UINT64 *Supports, OPTIONAL\r
- OUT VOID **Resources OPTIONAL\r
- );\r
-\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES) (\r
- IN EFI_PCI_IO_PROTOCOL * This,\r
- IN UINT64 Attributes,\r
- IN UINT8 BarIndex,\r
- IN OUT UINT64 *Offset,\r
- IN OUT UINT64 *Length\r
- );\r
-\r
-//\r
-// Interface structure for the PCI I/O Protocol\r
-//\r
-struct _EFI_PCI_IO_PROTOCOL {\r
- EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollMem;\r
- EFI_PCI_IO_PROTOCOL_POLL_IO_MEM PollIo;\r
- EFI_PCI_IO_PROTOCOL_ACCESS Mem;\r
- EFI_PCI_IO_PROTOCOL_ACCESS Io;\r
- EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS Pci;\r
- EFI_PCI_IO_PROTOCOL_COPY_MEM CopyMem;\r
- EFI_PCI_IO_PROTOCOL_MAP Map;\r
- EFI_PCI_IO_PROTOCOL_UNMAP Unmap;\r
- EFI_PCI_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer;\r
- EFI_PCI_IO_PROTOCOL_FREE_BUFFER FreeBuffer;\r
- EFI_PCI_IO_PROTOCOL_FLUSH Flush;\r
- EFI_PCI_IO_PROTOCOL_GET_LOCATION GetLocation;\r
- EFI_PCI_IO_PROTOCOL_ATTRIBUTES Attributes;\r
- EFI_PCI_IO_PROTOCOL_GET_BAR_ATTRIBUTES GetBarAttributes;\r
- EFI_PCI_IO_PROTOCOL_SET_BAR_ATTRIBUTES SetBarAttributes;\r
- UINT64 RomSize;\r
- VOID *RomImage;\r
-};\r
-\r
-extern EFI_GUID gEfiPciIoProtocolGuid;\r
-\r
-#endif\r