3 Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR>
4 Copyright (c) 2013 - 2014, ARM Ltd. All rights reserved.<BR>
6 This program and the accompanying materials
7 are licensed and made available under the terms and conditions of the BSD License
8 which accompanies this distribution. The full text of the license may be found at
9 http://opensource.org/licenses/bsd-license.php
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
16 #ifndef _PCI_ROOT_BRIDGE_H_
17 #define _PCI_ROOT_BRIDGE_H_
21 #include <Library/BaseLib.h>
22 #include <Library/BaseMemoryLib.h>
23 #include <Library/DxeServicesTableLib.h>
24 #include <Library/IoLib.h>
25 #include <Library/MemoryAllocationLib.h>
26 #include <Library/PciLib.h>
27 #include <Library/UefiLib.h>
28 #include <Library/DmaLib.h>
30 #include <Protocol/EmbeddedExternalDevice.h>
31 #include <Protocol/DevicePath.h>
32 #include <Protocol/PciIo.h>
33 #include <Protocol/PciRootBridgeIo.h>
34 #include <Protocol/PciHostBridgeResourceAllocation.h>
36 #include <IndustryStandard/Pci23.h>
38 #include "ArmJunoDxeInternal.h"
40 #define EFI_RESOURCE_NONEXISTENT 0xFFFFFFFFFFFFFFFFULL
41 #define EFI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFEULL
42 #define EFI_RESOURCE_SATISFIED 0x0000000000000000ULL
46 ACPI_HID_DEVICE_PATH AcpiDevicePath
;
47 EFI_DEVICE_PATH_PROTOCOL EndDevicePath
;
48 } EFI_PCI_ROOT_BRIDGE_DEVICE_PATH
;
51 #define ACPI_CONFIG_IO 0
52 #define ACPI_CONFIG_MMIO 1
53 #define ACPI_CONFIG_BUS 2
56 EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR Desc
[3];
57 EFI_ACPI_END_TAG_DESCRIPTOR EndDesc
;
61 #define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32 ('P', 'c', 'i', 'F')
66 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL Io
;
67 EFI_PCI_ROOT_BRIDGE_DEVICE_PATH DevicePath
;
79 ACPI_CONFIG_INFO
*Config
;
84 #define INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(a) CR (a, PCI_ROOT_BRIDGE, Io, PCI_ROOT_BRIDGE_SIGNATURE)
88 UINT8
volatile *Buffer
;
90 UINT16
volatile *Ui16
;
91 UINT32
volatile *Ui32
;
92 UINT64
volatile *Ui64
;
100 PciRootBridgeIoPollMem (
101 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
102 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
112 PciRootBridgeIoPollIo (
113 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
114 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
124 PciRootBridgeIoMemRead (
125 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
126 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
134 PciRootBridgeIoMemWrite (
135 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
136 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
144 PciRootBridgeIoIoRead (
145 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
146 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
147 IN UINT64 UserAddress
,
149 IN OUT VOID
*UserBuffer
154 PciRootBridgeIoIoWrite (
155 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
156 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
157 IN UINT64 UserAddress
,
159 IN OUT VOID
*UserBuffer
164 PciRootBridgeIoCopyMem (
165 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
166 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
167 IN UINT64 DestAddress
,
168 IN UINT64 SrcAddress
,
174 PciRootBridgeIoPciRead (
175 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
176 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
184 PciRootBridgeIoPciWrite (
185 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
186 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
195 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
196 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation
,
197 IN VOID
*HostAddress
,
198 IN OUT UINTN
*NumberOfBytes
,
199 OUT EFI_PHYSICAL_ADDRESS
*DeviceAddress
,
205 PciRootBridgeIoUnmap (
206 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
212 PciRootBridgeIoAllocateBuffer (
213 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
214 IN EFI_ALLOCATE_TYPE Type
,
215 IN EFI_MEMORY_TYPE MemoryType
,
217 OUT VOID
**HostAddress
,
223 PciRootBridgeIoFreeBuffer (
224 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
226 OUT VOID
*HostAddress
231 PciRootBridgeIoFlush (
232 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
237 PciRootBridgeIoGetAttributes (
238 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
239 OUT UINT64
*Supported
,
240 OUT UINT64
*Attributes
245 PciRootBridgeIoSetAttributes (
246 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
247 IN UINT64 Attributes
,
248 IN OUT UINT64
*ResourceBase
,
249 IN OUT UINT64
*ResourceLength
254 PciRootBridgeIoConfiguration (
255 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
*This
,
260 // Private Function Prototypes
264 PciRootBridgeIoMemRW (
265 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width
,
267 IN BOOLEAN InStrideFlag
,
269 IN BOOLEAN OutStrideFlag
,
274 PciIoMemAddressValid (
275 IN EFI_PCI_IO_PROTOCOL
*This
,
280 EmulatePciIoForEhci (