3 Copyright (c) 2004 - 2006, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
18 PCI Root Bridge I/O protocol as defined in the EFI 1.1 specification.
20 PCI Root Bridge I/O protocol is used by PCI Bus Driver to perform PCI Memory, PCI I/O,
21 and PCI Configuration cycles on a PCI Root Bridge. It also provides services to perform
22 defferent types of bus mastering DMA
26 #ifndef _PCI_ROOT_BRIDGE_IO_H_
27 #define _PCI_ROOT_BRIDGE_IO_H_
29 #define EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID \
31 0x2f707ebb, 0x4a1a, 0x11d4, {0x9a, 0x38, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} \
34 EFI_FORWARD_DECLARATION (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
);
42 EfiPciWidthFifoUint16
,
43 EfiPciWidthFifoUint32
,
44 EfiPciWidthFifoUint64
,
46 EfiPciWidthFillUint16
,
47 EfiPciWidthFillUint32
,
48 EfiPciWidthFillUint64
,
50 } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH
;
53 EfiPciOperationBusMasterRead
,
54 EfiPciOperationBusMasterWrite
,
55 EfiPciOperationBusMasterCommonBuffer
,
56 EfiPciOperationBusMasterRead64
,
57 EfiPciOperationBusMasterWrite64
,
58 EfiPciOperationBusMasterCommonBuffer64
,
59 EfiPciOperationMaximum
60 } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION
;
62 #define EFI_PCI_ATTRIBUTE_ISA_MOTHERBOARD_IO 0x0001
63 #define EFI_PCI_ATTRIBUTE_ISA_IO 0x0002
64 #define EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO 0x0004
65 #define EFI_PCI_ATTRIBUTE_VGA_MEMORY 0x0008
66 #define EFI_PCI_ATTRIBUTE_VGA_IO 0x0010
67 #define EFI_PCI_ATTRIBUTE_IDE_PRIMARY_IO 0x0020
68 #define EFI_PCI_ATTRIBUTE_IDE_SECONDARY_IO 0x0040
69 #define EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080
70 #define EFI_PCI_ATTRIBUTE_MEMORY_CACHED 0x0800
71 #define EFI_PCI_ATTRIBUTE_MEMORY_DISABLE 0x1000
72 #define EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000
74 // The following definition is added in EFI1.1 spec update and UEFI2.0 spec.
76 #define EFI_PCI_ATTRIBUTE_ISA_IO_16 0x10000
77 #define EFI_PCI_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000
78 #define EFI_PCI_ATTRIBUTE_VGA_IO_16 0x40000
80 #define EFI_PCI_ATTRIBUTE_VALID_FOR_ALLOCATE_BUFFER (EFI_PCI_ATTRIBUTE_MEMORY_WRITE_COMBINE | EFI_PCI_ATTRIBUTE_MEMORY_CACHED | EFI_PCI_ATTRIBUTE_DUAL_ADDRESS_CYCLE)
82 #define EFI_PCI_ATTRIBUTE_INVALID_FOR_ALLOCATE_BUFFER (~EFI_PCI_ATTRIBUTE_VALID_FOR_ALLOCATE_BUFFER)
84 #define EFI_PCI_ADDRESS(bus, dev, func, reg) \
85 ((UINT64) ((((UINTN) bus) << 24) + (((UINTN) dev) << 16) + (((UINTN) func) << 8) + ((UINTN) reg)))
92 UINT32 ExtendedRegister
;
93 } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS
;
97 (EFIAPI
*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM
) (
98 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
* This
,
99 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
109 (EFIAPI
*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM
) (
110 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
* This
,
111 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
118 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM Read
;
119 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM Write
;
120 } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS
;
124 (EFIAPI
*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM
) (
125 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
* This
,
126 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
127 IN UINT64 DestAddress
,
128 IN UINT64 SrcAddress
,
134 (EFIAPI
*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP
) (
135 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
* This
,
136 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation
,
137 IN VOID
*HostAddress
,
138 IN OUT UINTN
*NumberOfBytes
,
139 OUT EFI_PHYSICAL_ADDRESS
* DeviceAddress
,
145 (EFIAPI
*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP
) (
146 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
* This
,
152 (EFIAPI
*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER
) (
153 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
* This
,
154 IN EFI_ALLOCATE_TYPE Type
,
155 IN EFI_MEMORY_TYPE MemoryType
,
157 IN OUT VOID
**HostAddress
,
163 (EFIAPI
*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER
) (
164 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
* This
,
171 (EFIAPI
*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH
) (
172 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
* This
177 (EFIAPI
*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES
) (
178 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
* This
,
179 OUT UINT64
*Supports
,
180 OUT UINT64
*Attributes
185 (EFIAPI
*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES
) (
186 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
* This
,
187 IN UINT64 Attributes
,
188 IN OUT UINT64
*ResourceBase
,
189 IN OUT UINT64
*ResourceLength
194 (EFIAPI
*EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION
) (
195 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
* This
,
199 struct _EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
{
200 EFI_HANDLE ParentHandle
;
201 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM PollMem
;
202 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_POLL_IO_MEM PollIo
;
203 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Mem
;
204 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Io
;
205 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ACCESS Pci
;
206 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_COPY_MEM CopyMem
;
207 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_MAP Map
;
208 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP Unmap
;
209 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_ALLOCATE_BUFFER AllocateBuffer
;
210 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER FreeBuffer
;
211 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH Flush
;
212 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GET_ATTRIBUTES GetAttributes
;
213 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_SET_ATTRIBUTES SetAttributes
;
214 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION Configuration
;
215 UINT32 SegmentNumber
;
218 extern EFI_GUID gEfiPciRootBridgeIoProtocolGuid
;