3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
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
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.
15 #ifndef _PCI_ROOT_BRIDGE_H_
16 #define _PCI_ROOT_BRIDGE_H_
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 #include <Library/DmaLib.h>
34 #include <Protocol/EmbeddedExternalDevice.h>
35 #include <Protocol/DevicePath.h>
36 #include <Protocol/PciIo.h>
37 #include <Protocol/PciRootBridgeIo.h>
38 #include <Protocol/PciHostBridgeResourceAllocation.h>
40 #include <IndustryStandard/Pci22.h>
41 #include <IndustryStandard/Acpi.h>
43 #include <Omap3530/Omap3530.h>
47 #define EFI_RESOURCE_NONEXISTENT 0xFFFFFFFFFFFFFFFFULL
48 #define EFI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFEULL
49 #define EFI_RESOURCE_SATISFIED 0x0000000000000000ULL
53 ACPI_HID_DEVICE_PATH AcpiDevicePath
;
54 EFI_DEVICE_PATH_PROTOCOL EndDevicePath
;
55 } EFI_PCI_ROOT_BRIDGE_DEVICE_PATH
;
58 #define ACPI_CONFIG_IO 0
59 #define ACPI_CONFIG_MMIO 1
60 #define ACPI_CONFIG_BUS 2
63 EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR Desc
[3];
64 EFI_ACPI_END_TAG_DESCRIPTOR EndDesc
;
68 #define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32 ('P', 'c', 'i', 'F')
73 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL Io
;
74 EFI_PCI_ROOT_BRIDGE_DEVICE_PATH DevicePath
;
86 ACPI_CONFIG_INFO
*Config
;
91 #define INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(a) CR (a, PCI_ROOT_BRIDGE, Io, PCI_ROOT_BRIDGE_SIGNATURE)
97 UINT16
volatile *ui16
;
98 UINT32
volatile *ui32
;
99 UINT64
volatile *ui64
;
107 PciRootBridgeIoPollMem (
108 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
109 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
119 PciRootBridgeIoPollIo (
120 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
121 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
131 PciRootBridgeIoMemRead (
132 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
133 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
141 PciRootBridgeIoMemWrite (
142 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
143 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
151 PciRootBridgeIoIoRead (
152 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
153 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
154 IN UINT64 UserAddress
,
156 IN OUT VOID
*UserBuffer
161 PciRootBridgeIoIoWrite (
162 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
163 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
164 IN UINT64 UserAddress
,
166 IN OUT VOID
*UserBuffer
171 PciRootBridgeIoCopyMem (
172 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
173 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
174 IN UINT64 DestAddress
,
175 IN UINT64 SrcAddress
,
181 PciRootBridgeIoPciRead (
182 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
183 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
191 PciRootBridgeIoPciWrite (
192 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
193 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
202 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
203 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation
,
204 IN VOID
*HostAddress
,
205 IN OUT UINTN
*NumberOfBytes
,
206 OUT EFI_PHYSICAL_ADDRESS
*DeviceAddress
,
212 PciRootBridgeIoUnmap (
213 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
219 PciRootBridgeIoAllocateBuffer (
220 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
221 IN EFI_ALLOCATE_TYPE Type
,
222 IN EFI_MEMORY_TYPE MemoryType
,
224 OUT VOID
**HostAddress
,
230 PciRootBridgeIoFreeBuffer (
231 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
233 OUT VOID
*HostAddress
238 PciRootBridgeIoFlush (
239 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
244 PciRootBridgeIoGetAttributes (
245 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
246 OUT UINT64
*Supported
,
247 OUT UINT64
*Attributes
252 PciRootBridgeIoSetAttributes (
253 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
254 IN UINT64 Attributes
,
255 IN OUT UINT64
*ResourceBase
,
256 IN OUT UINT64
*ResourceLength
261 PciRootBridgeIoConfiguration (
262 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
267 // Private Function Prototypes
271 PciRootBridgeIoMemRW (
272 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
274 IN BOOLEAN InStrideFlag
,
276 IN BOOLEAN OutStrideFlag
,
281 PciIoMemAddressValid (
282 IN EFI_PCI_IO_PROTOCOL
*This
,
287 EmulatePciIoForEhci (