3 Copyright (c) 2008-2009 Apple Inc. All rights reserved.<BR>
5 All rights reserved. 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/UncachedMemoryAllocationLib.h>
33 #include <Protocol/EmbeddedExternalDevice.h>
34 #include <Protocol/Cpu.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 extern EFI_CPU_ARCH_PROTOCOL
*gCpu
;
45 #define EFI_RESOURCE_NONEXISTENT 0xFFFFFFFFFFFFFFFFULL
46 #define EFI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFEULL
47 #define EFI_RESOURCE_SATISFIED 0x0000000000000000ULL
51 ACPI_HID_DEVICE_PATH AcpiDevicePath
;
52 EFI_DEVICE_PATH_PROTOCOL EndDevicePath
;
53 } EFI_PCI_ROOT_BRIDGE_DEVICE_PATH
;
56 #define ACPI_CONFIG_IO 0
57 #define ACPI_CONFIG_MMIO 1
58 #define ACPI_CONFIG_BUS 2
61 EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR Desc
[3];
62 EFI_ACPI_END_TAG_DESCRIPTOR EndDesc
;
66 #define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32 ('P', 'c', 'i', 'F')
71 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL Io
;
72 EFI_PCI_ROOT_BRIDGE_DEVICE_PATH DevicePath
;
84 ACPI_CONFIG_INFO
*Config
;
89 #define INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(a) CR (a, PCI_ROOT_BRIDGE, Io, PCI_ROOT_BRIDGE_SIGNATURE)
95 UINT16
volatile *ui16
;
96 UINT32
volatile *ui32
;
97 UINT64
volatile *ui64
;
103 EFI_PHYSICAL_ADDRESS HostAddress
;
104 EFI_PHYSICAL_ADDRESS DeviceAddress
;
106 EFI_PCI_IO_PROTOCOL_OPERATION Operation
;
112 EFI_PHYSICAL_ADDRESS HostAddress
;
113 EFI_PHYSICAL_ADDRESS DeviceAddress
;
115 EFI_PCI_IO_PROTOCOL_OPERATION Operation
;
120 PciRootBridgeIoPollMem (
121 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
122 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
132 PciRootBridgeIoPollIo (
133 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
134 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
144 PciRootBridgeIoMemRead (
145 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
146 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
154 PciRootBridgeIoMemWrite (
155 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
156 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
164 PciRootBridgeIoIoRead (
165 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
166 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
167 IN UINT64 UserAddress
,
169 IN OUT VOID
*UserBuffer
174 PciRootBridgeIoIoWrite (
175 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
176 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
177 IN UINT64 UserAddress
,
179 IN OUT VOID
*UserBuffer
184 PciRootBridgeIoCopyMem (
185 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
186 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
187 IN UINT64 DestAddress
,
188 IN UINT64 SrcAddress
,
194 PciRootBridgeIoPciRead (
195 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
196 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
204 PciRootBridgeIoPciWrite (
205 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
206 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
215 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
216 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation
,
217 IN VOID
*HostAddress
,
218 IN OUT UINTN
*NumberOfBytes
,
219 OUT EFI_PHYSICAL_ADDRESS
*DeviceAddress
,
225 PciRootBridgeIoUnmap (
226 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
232 PciRootBridgeIoAllocateBuffer (
233 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
234 IN EFI_ALLOCATE_TYPE Type
,
235 IN EFI_MEMORY_TYPE MemoryType
,
237 OUT VOID
**HostAddress
,
243 PciRootBridgeIoFreeBuffer (
244 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
246 OUT VOID
*HostAddress
251 PciRootBridgeIoFlush (
252 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
257 PciRootBridgeIoGetAttributes (
258 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
259 OUT UINT64
*Supported
,
260 OUT UINT64
*Attributes
265 PciRootBridgeIoSetAttributes (
266 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
267 IN UINT64 Attributes
,
268 IN OUT UINT64
*ResourceBase
,
269 IN OUT UINT64
*ResourceLength
274 PciRootBridgeIoConfiguration (
275 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
280 // Private Function Prototypes
284 PciRootBridgeIoMemRW (
285 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
287 IN BOOLEAN InStrideFlag
,
289 IN BOOLEAN OutStrideFlag
,
294 PciIoMemAddressValid (
295 IN EFI_PCI_IO_PROTOCOL
*This
,
300 EmulatePciIoForEhci (