]> git.proxmox.com Git - mirror_edk2.git/blob - Omap35xxPkg/PciEmulation/PciEmulation.h
066a553950cff2c57617b0a74fb81044648b14ff
[mirror_edk2.git] / Omap35xxPkg / PciEmulation / PciEmulation.h
1 /** @file
2
3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
4
5 This program and the accompanying materials
6 are licensed and made available under the terms and conditions of the BSD License
7 which accompanies this distribution. The full text of the license may be found at
8 http://opensource.org/licenses/bsd-license.php
9
10 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
11 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
12
13 **/
14
15 #ifndef _PCI_ROOT_BRIDGE_H_
16 #define _PCI_ROOT_BRIDGE_H_
17
18 #include <PiDxe.h>
19
20 #include <TPS65950.h>
21
22 #include <Library/BaseLib.h>
23 #include <Library/BaseMemoryLib.h>
24 #include <Library/DebugLib.h>
25 #include <Library/DxeServicesTableLib.h>
26 #include <Library/IoLib.h>
27 #include <Library/MemoryAllocationLib.h>
28 #include <Library/PciLib.h>
29 #include <Library/UefiLib.h>
30 #include <Library/UefiBootServicesTableLib.h>
31 #include <Library/OmapDmaLib.h>
32
33 #include <Protocol/EmbeddedExternalDevice.h>
34 #include <Protocol/DevicePath.h>
35 #include <Protocol/PciIo.h>
36 #include <Protocol/PciRootBridgeIo.h>
37 #include <Protocol/PciHostBridgeResourceAllocation.h>
38
39 #include <IndustryStandard/Pci22.h>
40 #include <IndustryStandard/Acpi.h>
41
42 #include <Omap3530/Omap3530.h>
43
44
45
46 #define EFI_RESOURCE_NONEXISTENT 0xFFFFFFFFFFFFFFFFULL
47 #define EFI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFEULL
48 #define EFI_RESOURCE_SATISFIED 0x0000000000000000ULL
49
50
51 typedef struct {
52 ACPI_HID_DEVICE_PATH AcpiDevicePath;
53 EFI_DEVICE_PATH_PROTOCOL EndDevicePath;
54 } EFI_PCI_ROOT_BRIDGE_DEVICE_PATH;
55
56
57 #define ACPI_CONFIG_IO 0
58 #define ACPI_CONFIG_MMIO 1
59 #define ACPI_CONFIG_BUS 2
60
61 typedef struct {
62 EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR Desc[3];
63 EFI_ACPI_END_TAG_DESCRIPTOR EndDesc;
64 } ACPI_CONFIG_INFO;
65
66
67 #define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32 ('P', 'c', 'i', 'F')
68
69 typedef struct {
70 UINT32 Signature;
71 EFI_HANDLE Handle;
72 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL Io;
73 EFI_PCI_ROOT_BRIDGE_DEVICE_PATH DevicePath;
74
75 UINT8 StartBus;
76 UINT8 EndBus;
77 UINT16 Type;
78 UINT32 MemoryStart;
79 UINT32 MemorySize;
80 UINTN IoOffset;
81 UINT32 IoStart;
82 UINT32 IoSize;
83 UINT64 PciAttributes;
84
85 ACPI_CONFIG_INFO *Config;
86
87 } PCI_ROOT_BRIDGE;
88
89
90 #define INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(a) CR (a, PCI_ROOT_BRIDGE, Io, PCI_ROOT_BRIDGE_SIGNATURE)
91
92
93 typedef union {
94 UINT8 volatile *buf;
95 UINT8 volatile *ui8;
96 UINT16 volatile *ui16;
97 UINT32 volatile *ui32;
98 UINT64 volatile *ui64;
99 UINTN volatile ui;
100 } PTR;
101
102
103
104 EFI_STATUS
105 EFIAPI
106 PciRootBridgeIoPollMem (
107 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
108 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
109 IN UINT64 Address,
110 IN UINT64 Mask,
111 IN UINT64 Value,
112 IN UINT64 Delay,
113 OUT UINT64 *Result
114 );
115
116 EFI_STATUS
117 EFIAPI
118 PciRootBridgeIoPollIo (
119 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
120 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
121 IN UINT64 Address,
122 IN UINT64 Mask,
123 IN UINT64 Value,
124 IN UINT64 Delay,
125 OUT UINT64 *Result
126 );
127
128 EFI_STATUS
129 EFIAPI
130 PciRootBridgeIoMemRead (
131 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
132 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
133 IN UINT64 Address,
134 IN UINTN Count,
135 IN OUT VOID *Buffer
136 );
137
138 EFI_STATUS
139 EFIAPI
140 PciRootBridgeIoMemWrite (
141 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
142 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
143 IN UINT64 Address,
144 IN UINTN Count,
145 IN OUT VOID *Buffer
146 );
147
148 EFI_STATUS
149 EFIAPI
150 PciRootBridgeIoIoRead (
151 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
152 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
153 IN UINT64 UserAddress,
154 IN UINTN Count,
155 IN OUT VOID *UserBuffer
156 );
157
158 EFI_STATUS
159 EFIAPI
160 PciRootBridgeIoIoWrite (
161 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
162 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
163 IN UINT64 UserAddress,
164 IN UINTN Count,
165 IN OUT VOID *UserBuffer
166 );
167
168 EFI_STATUS
169 EFIAPI
170 PciRootBridgeIoCopyMem (
171 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
172 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
173 IN UINT64 DestAddress,
174 IN UINT64 SrcAddress,
175 IN UINTN Count
176 );
177
178 EFI_STATUS
179 EFIAPI
180 PciRootBridgeIoPciRead (
181 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
182 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
183 IN UINT64 Address,
184 IN UINTN Count,
185 IN OUT VOID *Buffer
186 );
187
188 EFI_STATUS
189 EFIAPI
190 PciRootBridgeIoPciWrite (
191 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
192 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
193 IN UINT64 Address,
194 IN UINTN Count,
195 IN OUT VOID *Buffer
196 );
197
198 EFI_STATUS
199 EFIAPI
200 PciRootBridgeIoMap (
201 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
202 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation,
203 IN VOID *HostAddress,
204 IN OUT UINTN *NumberOfBytes,
205 OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
206 OUT VOID **Mapping
207 );
208
209 EFI_STATUS
210 EFIAPI
211 PciRootBridgeIoUnmap (
212 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
213 IN VOID *Mapping
214 );
215
216 EFI_STATUS
217 EFIAPI
218 PciRootBridgeIoAllocateBuffer (
219 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
220 IN EFI_ALLOCATE_TYPE Type,
221 IN EFI_MEMORY_TYPE MemoryType,
222 IN UINTN Pages,
223 OUT VOID **HostAddress,
224 IN UINT64 Attributes
225 );
226
227 EFI_STATUS
228 EFIAPI
229 PciRootBridgeIoFreeBuffer (
230 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
231 IN UINTN Pages,
232 OUT VOID *HostAddress
233 );
234
235 EFI_STATUS
236 EFIAPI
237 PciRootBridgeIoFlush (
238 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This
239 );
240
241 EFI_STATUS
242 EFIAPI
243 PciRootBridgeIoGetAttributes (
244 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
245 OUT UINT64 *Supported,
246 OUT UINT64 *Attributes
247 );
248
249 EFI_STATUS
250 EFIAPI
251 PciRootBridgeIoSetAttributes (
252 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
253 IN UINT64 Attributes,
254 IN OUT UINT64 *ResourceBase,
255 IN OUT UINT64 *ResourceLength
256 );
257
258 EFI_STATUS
259 EFIAPI
260 PciRootBridgeIoConfiguration (
261 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
262 OUT VOID **Resources
263 );
264
265 //
266 // Private Function Prototypes
267 //
268 EFI_STATUS
269 EFIAPI
270 PciRootBridgeIoMemRW (
271 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
272 IN UINTN Count,
273 IN BOOLEAN InStrideFlag,
274 IN PTR In,
275 IN BOOLEAN OutStrideFlag,
276 OUT PTR Out
277 );
278
279 BOOLEAN
280 PciIoMemAddressValid (
281 IN EFI_PCI_IO_PROTOCOL *This,
282 IN UINT64 Address
283 );
284
285 EFI_STATUS
286 EmulatePciIoForEhci (
287 INTN MvPciIfMaxIf
288 );
289
290 #endif
291