/** @file | |
Copyright (c) 2008 - 2009, Apple Inc. All rights reserved.<BR> | |
This program and the accompanying materials | |
are licensed and made available under the terms and conditions of the BSD License | |
which accompanies this distribution. The full text of the license may be found at | |
http://opensource.org/licenses/bsd-license.php | |
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
**/ | |
#ifndef _PCI_ROOT_BRIDGE_H_ | |
#define _PCI_ROOT_BRIDGE_H_ | |
#include <PiDxe.h> | |
#include <TPS65950.h> | |
#include <Library/BaseLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/DebugLib.h> | |
#include <Library/DxeServicesTableLib.h> | |
#include <Library/IoLib.h> | |
#include <Library/MemoryAllocationLib.h> | |
#include <Library/PciLib.h> | |
#include <Library/UefiLib.h> | |
#include <Library/UefiBootServicesTableLib.h> | |
#include <Library/UncachedMemoryAllocationLib.h> | |
#include <Protocol/EmbeddedExternalDevice.h> | |
#include <Protocol/Cpu.h> | |
#include <Protocol/DevicePath.h> | |
#include <Protocol/PciIo.h> | |
#include <Protocol/PciRootBridgeIo.h> | |
#include <Protocol/PciHostBridgeResourceAllocation.h> | |
#include <IndustryStandard/Pci22.h> | |
#include <IndustryStandard/Acpi.h> | |
extern EFI_CPU_ARCH_PROTOCOL *gCpu; | |
#define EFI_RESOURCE_NONEXISTENT 0xFFFFFFFFFFFFFFFFULL | |
#define EFI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFEULL | |
#define EFI_RESOURCE_SATISFIED 0x0000000000000000ULL | |
typedef struct { | |
ACPI_HID_DEVICE_PATH AcpiDevicePath; | |
EFI_DEVICE_PATH_PROTOCOL EndDevicePath; | |
} EFI_PCI_ROOT_BRIDGE_DEVICE_PATH; | |
#define ACPI_CONFIG_IO 0 | |
#define ACPI_CONFIG_MMIO 1 | |
#define ACPI_CONFIG_BUS 2 | |
typedef struct { | |
EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR Desc[3]; | |
EFI_ACPI_END_TAG_DESCRIPTOR EndDesc; | |
} ACPI_CONFIG_INFO; | |
#define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32 ('P', 'c', 'i', 'F') | |
typedef struct { | |
UINT32 Signature; | |
EFI_HANDLE Handle; | |
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL Io; | |
EFI_PCI_ROOT_BRIDGE_DEVICE_PATH DevicePath; | |
UINT8 StartBus; | |
UINT8 EndBus; | |
UINT16 Type; | |
UINT32 MemoryStart; | |
UINT32 MemorySize; | |
UINTN IoOffset; | |
UINT32 IoStart; | |
UINT32 IoSize; | |
UINT64 PciAttributes; | |
ACPI_CONFIG_INFO *Config; | |
} PCI_ROOT_BRIDGE; | |
#define INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS(a) CR (a, PCI_ROOT_BRIDGE, Io, PCI_ROOT_BRIDGE_SIGNATURE) | |
typedef union { | |
UINT8 volatile *buf; | |
UINT8 volatile *ui8; | |
UINT16 volatile *ui16; | |
UINT32 volatile *ui32; | |
UINT64 volatile *ui64; | |
UINTN volatile ui; | |
} PTR; | |
typedef struct { | |
EFI_PHYSICAL_ADDRESS HostAddress; | |
EFI_PHYSICAL_ADDRESS DeviceAddress; | |
UINTN NumberOfBytes; | |
EFI_PCI_IO_PROTOCOL_OPERATION Operation; | |
} MAP_INFO_INSTANCE; | |
typedef struct { | |
EFI_PHYSICAL_ADDRESS HostAddress; | |
EFI_PHYSICAL_ADDRESS DeviceAddress; | |
UINTN NumberOfBytes; | |
EFI_PCI_IO_PROTOCOL_OPERATION Operation; | |
} PCI_DMA_MAP; | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoPollMem ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, | |
IN UINT64 Address, | |
IN UINT64 Mask, | |
IN UINT64 Value, | |
IN UINT64 Delay, | |
OUT UINT64 *Result | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoPollIo ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, | |
IN UINT64 Address, | |
IN UINT64 Mask, | |
IN UINT64 Value, | |
IN UINT64 Delay, | |
OUT UINT64 *Result | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoMemRead ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, | |
IN UINT64 Address, | |
IN UINTN Count, | |
IN OUT VOID *Buffer | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoMemWrite ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, | |
IN UINT64 Address, | |
IN UINTN Count, | |
IN OUT VOID *Buffer | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoIoRead ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, | |
IN UINT64 UserAddress, | |
IN UINTN Count, | |
IN OUT VOID *UserBuffer | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoIoWrite ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, | |
IN UINT64 UserAddress, | |
IN UINTN Count, | |
IN OUT VOID *UserBuffer | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoCopyMem ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, | |
IN UINT64 DestAddress, | |
IN UINT64 SrcAddress, | |
IN UINTN Count | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoPciRead ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, | |
IN UINT64 Address, | |
IN UINTN Count, | |
IN OUT VOID *Buffer | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoPciWrite ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, | |
IN UINT64 Address, | |
IN UINTN Count, | |
IN OUT VOID *Buffer | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoMap ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation, | |
IN VOID *HostAddress, | |
IN OUT UINTN *NumberOfBytes, | |
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress, | |
OUT VOID **Mapping | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoUnmap ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN VOID *Mapping | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoAllocateBuffer ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN EFI_ALLOCATE_TYPE Type, | |
IN EFI_MEMORY_TYPE MemoryType, | |
IN UINTN Pages, | |
OUT VOID **HostAddress, | |
IN UINT64 Attributes | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoFreeBuffer ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN UINTN Pages, | |
OUT VOID *HostAddress | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoFlush ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoGetAttributes ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
OUT UINT64 *Supported, | |
OUT UINT64 *Attributes | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoSetAttributes ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
IN UINT64 Attributes, | |
IN OUT UINT64 *ResourceBase, | |
IN OUT UINT64 *ResourceLength | |
); | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoConfiguration ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This, | |
OUT VOID **Resources | |
); | |
// | |
// Private Function Prototypes | |
// | |
EFI_STATUS | |
EFIAPI | |
PciRootBridgeIoMemRW ( | |
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width, | |
IN UINTN Count, | |
IN BOOLEAN InStrideFlag, | |
IN PTR In, | |
IN BOOLEAN OutStrideFlag, | |
OUT PTR Out | |
); | |
BOOLEAN | |
PciIoMemAddressValid ( | |
IN EFI_PCI_IO_PROTOCOL *This, | |
IN UINT64 Address | |
); | |
EFI_STATUS | |
EmulatePciIoForEhci ( | |
INTN MvPciIfMaxIf | |
); | |
#endif | |