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 #include <Library/DmaLib.h> 33 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> 39 40 #include <IndustryStandard/Pci22.h> 41 #include <IndustryStandard/Acpi.h> 42 43 #include <Omap3530/Omap3530.h> 44 45 46 47 #define EFI_RESOURCE_NONEXISTENT 0xFFFFFFFFFFFFFFFFULL 48 #define EFI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFEULL 49 #define EFI_RESOURCE_SATISFIED 0x0000000000000000ULL 50 51 52 typedef struct { 53 ACPI_HID_DEVICE_PATH AcpiDevicePath; 54 EFI_DEVICE_PATH_PROTOCOL EndDevicePath; 55 } EFI_PCI_ROOT_BRIDGE_DEVICE_PATH; 56 57 58 #define ACPI_CONFIG_IO 0 59 #define ACPI_CONFIG_MMIO 1 60 #define ACPI_CONFIG_BUS 2 61 62 typedef struct { 63 EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR Desc[3]; 64 EFI_ACPI_END_TAG_DESCRIPTOR EndDesc; 65 } ACPI_CONFIG_INFO; 66 67 68 #define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32 ('P', 'c', 'i', 'F') 69 70 typedef struct { 71 UINT32 Signature; 72 EFI_HANDLE Handle; 73 EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL Io; 74 EFI_PCI_ROOT_BRIDGE_DEVICE_PATH DevicePath; 75 76 UINT8 StartBus; 77 UINT8 EndBus; 78 UINT16 Type; 79 UINT32 MemoryStart; 80 UINT32 MemorySize; 81 UINTN IoOffset; 82 UINT32 IoStart; 83 UINT32 IoSize; 84 UINT64 PciAttributes; 85 86 ACPI_CONFIG_INFO *Config; 87 88 } PCI_ROOT_BRIDGE; 89 90 91 #define INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(a) CR (a, PCI_ROOT_BRIDGE, Io, PCI_ROOT_BRIDGE_SIGNATURE) 92 93 94 typedef union { 95 UINT8 volatile *buf; 96 UINT8 volatile *ui8; 97 UINT16 volatile *ui16; 98 UINT32 volatile *ui32; 99 UINT64 volatile *ui64; 100 UINTN volatile ui; 101 } PTR; 102 103 104 105 EFI_STATUS 106 EFIAPI 107 PciRootBridgeIoPollMem ( 108 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, 109 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, 110 IN UINT64 Address, 111 IN UINT64 Mask, 112 IN UINT64 Value, 113 IN UINT64 Delay, 114 OUT UINT64 *Result 115 ); 116 117 EFI_STATUS 118 EFIAPI 119 PciRootBridgeIoPollIo ( 120 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, 121 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, 122 IN UINT64 Address, 123 IN UINT64 Mask, 124 IN UINT64 Value, 125 IN UINT64 Delay, 126 OUT UINT64 *Result 127 ); 128 129 EFI_STATUS 130 EFIAPI 131 PciRootBridgeIoMemRead ( 132 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, 133 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, 134 IN UINT64 Address, 135 IN UINTN Count, 136 IN OUT VOID *Buffer 137 ); 138 139 EFI_STATUS 140 EFIAPI 141 PciRootBridgeIoMemWrite ( 142 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, 143 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, 144 IN UINT64 Address, 145 IN UINTN Count, 146 IN OUT VOID *Buffer 147 ); 148 149 EFI_STATUS 150 EFIAPI 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, 155 IN UINTN Count, 156 IN OUT VOID *UserBuffer 157 ); 158 159 EFI_STATUS 160 EFIAPI 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, 165 IN UINTN Count, 166 IN OUT VOID *UserBuffer 167 ); 168 169 EFI_STATUS 170 EFIAPI 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, 176 IN UINTN Count 177 ); 178 179 EFI_STATUS 180 EFIAPI 181 PciRootBridgeIoPciRead ( 182 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, 183 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, 184 IN UINT64 Address, 185 IN UINTN Count, 186 IN OUT VOID *Buffer 187 ); 188 189 EFI_STATUS 190 EFIAPI 191 PciRootBridgeIoPciWrite ( 192 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, 193 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, 194 IN UINT64 Address, 195 IN UINTN Count, 196 IN OUT VOID *Buffer 197 ); 198 199 EFI_STATUS 200 EFIAPI 201 PciRootBridgeIoMap ( 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, 207 OUT VOID **Mapping 208 ); 209 210 EFI_STATUS 211 EFIAPI 212 PciRootBridgeIoUnmap ( 213 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, 214 IN VOID *Mapping 215 ); 216 217 EFI_STATUS 218 EFIAPI 219 PciRootBridgeIoAllocateBuffer ( 220 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, 221 IN EFI_ALLOCATE_TYPE Type, 222 IN EFI_MEMORY_TYPE MemoryType, 223 IN UINTN Pages, 224 OUT VOID **HostAddress, 225 IN UINT64 Attributes 226 ); 227 228 EFI_STATUS 229 EFIAPI 230 PciRootBridgeIoFreeBuffer ( 231 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, 232 IN UINTN Pages, 233 OUT VOID *HostAddress 234 ); 235 236 EFI_STATUS 237 EFIAPI 238 PciRootBridgeIoFlush ( 239 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This 240 ); 241 242 EFI_STATUS 243 EFIAPI 244 PciRootBridgeIoGetAttributes ( 245 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, 246 OUT UINT64 *Supported, 247 OUT UINT64 *Attributes 248 ); 249 250 EFI_STATUS 251 EFIAPI 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 257 ); 258 259 EFI_STATUS 260 EFIAPI 261 PciRootBridgeIoConfiguration ( 262 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, 263 OUT VOID **Resources 264 ); 265 266 // 267 // Private Function Prototypes 268 // 269 EFI_STATUS 270 EFIAPI 271 PciRootBridgeIoMemRW ( 272 IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, 273 IN UINTN Count, 274 IN BOOLEAN InStrideFlag, 275 IN PTR In, 276 IN BOOLEAN OutStrideFlag, 277 OUT PTR Out 278 ); 279 280 BOOLEAN 281 PciIoMemAddressValid ( 282 IN EFI_PCI_IO_PROTOCOL *This, 283 IN UINT64 Address 284 ); 285 286 EFI_STATUS 287 EmulatePciIoForEhci ( 288 INTN MvPciIfMaxIf 289 ); 290 291 #endif 292 293