]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Efi/Protocol/PciRootBridgeIo/PciRootBridgeIo.h
Update the copyright notice format
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Efi / Protocol / PciRootBridgeIo / PciRootBridgeIo.h
1 /*++
2
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
8
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.
11
12 Module Name:
13
14 PciRootBridgeIo.h
15
16 Abstract:
17
18 PCI Root Bridge I/O protocol as defined in the EFI 1.1 specification.
19
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
23
24 --*/
25
26 #ifndef _PCI_ROOT_BRIDGE_IO_H_
27 #define _PCI_ROOT_BRIDGE_IO_H_
28
29 #define EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_GUID \
30 { \
31 0x2f707ebb, 0x4a1a, 0x11d4, {0x9a, 0x38, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} \
32 }
33
34 EFI_FORWARD_DECLARATION (EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL);
35
36 typedef enum {
37 EfiPciWidthUint8,
38 EfiPciWidthUint16,
39 EfiPciWidthUint32,
40 EfiPciWidthUint64,
41 EfiPciWidthFifoUint8,
42 EfiPciWidthFifoUint16,
43 EfiPciWidthFifoUint32,
44 EfiPciWidthFifoUint64,
45 EfiPciWidthFillUint8,
46 EfiPciWidthFillUint16,
47 EfiPciWidthFillUint32,
48 EfiPciWidthFillUint64,
49 EfiPciWidthMaximum
50 } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH;
51
52 typedef enum {
53 EfiPciOperationBusMasterRead,
54 EfiPciOperationBusMasterWrite,
55 EfiPciOperationBusMasterCommonBuffer,
56 EfiPciOperationBusMasterRead64,
57 EfiPciOperationBusMasterWrite64,
58 EfiPciOperationBusMasterCommonBuffer64,
59 EfiPciOperationMaximum
60 } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION;
61
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
73 //
74 // The following definition is added in EFI1.1 spec update and UEFI2.0 spec.
75 //
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
79
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)
81
82 #define EFI_PCI_ATTRIBUTE_INVALID_FOR_ALLOCATE_BUFFER (~EFI_PCI_ATTRIBUTE_VALID_FOR_ALLOCATE_BUFFER)
83
84 #define EFI_PCI_ADDRESS(bus, dev, func, reg) \
85 ((UINT64) ((((UINTN) bus) << 24) + (((UINTN) dev) << 16) + (((UINTN) func) << 8) + ((UINTN) reg)))
86
87 typedef struct {
88 UINT8 Register;
89 UINT8 Function;
90 UINT8 Device;
91 UINT8 Bus;
92 UINT32 ExtendedRegister;
93 } EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS;
94
95 typedef
96 EFI_STATUS
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,
100 IN UINT64 Address,
101 IN UINT64 Mask,
102 IN UINT64 Value,
103 IN UINT64 Delay,
104 OUT UINT64 *Result
105 );
106
107 typedef
108 EFI_STATUS
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,
112 IN UINT64 Address,
113 IN UINTN Count,
114 IN OUT VOID *Buffer
115 );
116
117 typedef struct {
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;
121
122 typedef
123 EFI_STATUS
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,
129 IN UINTN Count
130 );
131
132 typedef
133 EFI_STATUS
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,
140 OUT VOID **Mapping
141 );
142
143 typedef
144 EFI_STATUS
145 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_UNMAP) (
146 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
147 IN VOID *Mapping
148 );
149
150 typedef
151 EFI_STATUS
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,
156 IN UINTN Pages,
157 IN OUT VOID **HostAddress,
158 IN UINT64 Attributes
159 );
160
161 typedef
162 EFI_STATUS
163 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FREE_BUFFER) (
164 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
165 IN UINTN Pages,
166 IN VOID *HostAddress
167 );
168
169 typedef
170 EFI_STATUS
171 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_FLUSH) (
172 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This
173 );
174
175 typedef
176 EFI_STATUS
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
181 );
182
183 typedef
184 EFI_STATUS
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
190 );
191
192 typedef
193 EFI_STATUS
194 (EFIAPI *EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_CONFIGURATION) (
195 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL * This,
196 OUT VOID **Resources
197 );
198
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;
216 };
217
218 extern EFI_GUID gEfiPciRootBridgeIoProtocolGuid;
219
220 #endif