2008-03-19 04:28:13 +01:00
|
|
|
/** @file
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Copyright (c) 2006 - 2007, Intel Corporation
|
|
|
|
All rights reserved. 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.
|
|
|
|
|
|
|
|
Module Name:
|
|
|
|
|
|
|
|
PciLib.h
|
|
|
|
|
|
|
|
Abstract:
|
|
|
|
|
|
|
|
PCI Bus Driver Lib header file.
|
|
|
|
Please use PCD feature flag PcdPciBusHotplugDeviceSupport to enable
|
|
|
|
support hot plug.
|
|
|
|
|
|
|
|
Revision History
|
|
|
|
|
2008-03-19 04:28:13 +01:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
#ifndef _EFI_PCI_LIB_H
|
|
|
|
#define _EFI_PCI_LIB_H
|
|
|
|
|
|
|
|
//
|
|
|
|
// Mask definistions for PCD PcdPciIncompatibleDeviceSupportMask
|
|
|
|
//
|
|
|
|
#define PCI_INCOMPATIBLE_ACPI_RESOURCE_SUPPORT 0x01
|
|
|
|
#define PCI_INCOMPATIBLE_READ_SUPPORT 0x02
|
|
|
|
#define PCI_INCOMPATIBLE_WRITE_SUPPORT 0x04
|
|
|
|
#define PCI_INCOMPATIBLE_REGISTER_UPDATE_SUPPORT 0x08
|
|
|
|
#define PCI_INCOMPATIBLE_ACCESS_WIDTH_SUPPORT 0x0a
|
|
|
|
|
2007-08-09 07:31:14 +02:00
|
|
|
typedef struct {
|
|
|
|
EFI_HANDLE Handle;
|
|
|
|
} EFI_DEVICE_HANDLE_EXTENDED_DATA_PAYLOAD;
|
|
|
|
|
|
|
|
typedef struct {
|
|
|
|
UINT32 Bar;
|
|
|
|
UINT16 DevicePathSize;
|
|
|
|
UINT16 ReqResSize;
|
|
|
|
UINT16 AllocResSize;
|
|
|
|
UINT8 *DevicePath;
|
|
|
|
UINT8 *ReqRes;
|
|
|
|
UINT8 *AllocRes;
|
|
|
|
} EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA_PAYLOAD;
|
|
|
|
|
|
|
|
void
|
2007-06-28 16:02:17 +02:00
|
|
|
InstallHotPlugRequestProtocol (
|
|
|
|
IN EFI_STATUS *Status
|
|
|
|
)
|
2008-04-14 05:12:57 +02:00
|
|
|
/**
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
Status - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
VOID
|
|
|
|
InstallPciHotplugGuid (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice
|
|
|
|
)
|
2008-04-14 05:12:57 +02:00
|
|
|
/**
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
PciIoDevice - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
VOID
|
|
|
|
UninstallPciHotplugGuid (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice
|
|
|
|
)
|
2008-04-14 05:12:57 +02:00
|
|
|
/**
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
PciIoDevice - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
VOID
|
|
|
|
GetBackPcCardBar (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice
|
|
|
|
)
|
2008-04-14 05:12:57 +02:00
|
|
|
/**
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
PciIoDevice - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
RemoveRejectedPciDevices (
|
|
|
|
EFI_HANDLE RootBridgeHandle,
|
|
|
|
IN PCI_IO_DEVICE *Bridge
|
|
|
|
)
|
2008-04-14 05:12:57 +02:00
|
|
|
/**
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
RootBridgeHandle - TODO: add argument description
|
|
|
|
Bridge - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
PciHostBridgeResourceAllocator (
|
|
|
|
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc
|
|
|
|
)
|
2008-04-14 05:12:57 +02:00
|
|
|
/**
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
PciResAlloc - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
PciHostBridgeResourceAllocator_WithoutHotPlugDeviceSupport (
|
|
|
|
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc
|
|
|
|
)
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
PciHostBridgeResourceAllocator_WithHotPlugDeviceSupport (
|
|
|
|
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc
|
|
|
|
)
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
PciScanBus (
|
|
|
|
IN PCI_IO_DEVICE *Bridge,
|
|
|
|
IN UINT8 StartBusNumber,
|
|
|
|
OUT UINT8 *SubBusNumber,
|
|
|
|
OUT UINT8 *PaddedBusRange
|
|
|
|
)
|
2008-04-14 05:12:57 +02:00
|
|
|
/**
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
Bridge - TODO: add argument description
|
|
|
|
StartBusNumber - TODO: add argument description
|
|
|
|
SubBusNumber - TODO: add argument description
|
|
|
|
PaddedBusRange - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
PciScanBus_WithHotPlugDeviceSupport (
|
|
|
|
IN PCI_IO_DEVICE *Bridge,
|
|
|
|
IN UINT8 StartBusNumber,
|
|
|
|
OUT UINT8 *SubBusNumber,
|
|
|
|
OUT UINT8 *PaddedBusRange
|
|
|
|
)
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
PciScanBus_WithoutHotPlugDeviceSupport (
|
|
|
|
IN PCI_IO_DEVICE *Bridge,
|
|
|
|
IN UINT8 StartBusNumber,
|
|
|
|
OUT UINT8 *SubBusNumber,
|
|
|
|
OUT UINT8 *PaddedBusRange
|
|
|
|
)
|
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
PciRootBridgeP2CProcess (
|
|
|
|
IN PCI_IO_DEVICE *Bridge
|
|
|
|
)
|
2008-04-14 05:12:57 +02:00
|
|
|
/**
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
Bridge - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
PciHostBridgeP2CProcess (
|
|
|
|
IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc
|
|
|
|
)
|
2008-04-14 05:12:57 +02:00
|
|
|
/**
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
PciResAlloc - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
EFI_STATUS
|
|
|
|
PciHostBridgeEnumerator (
|
|
|
|
EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc
|
|
|
|
)
|
2008-04-14 05:12:57 +02:00
|
|
|
/**
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Routine Description:
|
|
|
|
|
|
|
|
TODO: Add function description
|
|
|
|
|
|
|
|
Arguments:
|
|
|
|
|
|
|
|
PciResAlloc - TODO: add argument description
|
|
|
|
|
|
|
|
Returns:
|
|
|
|
|
|
|
|
TODO: add return values
|
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
;
|
|
|
|
|
|
|
|
/**
|
|
|
|
Read PCI configuration space through EFI_PCI_IO_PROTOCOL.
|
|
|
|
|
|
|
|
@param PciIo A pointer to the EFI_PCI_O_PROTOCOL.
|
|
|
|
@param Width Signifies the width of the memory operations.
|
|
|
|
@Param Address The address within the PCI configuration space for the PCI controller.
|
|
|
|
@param Buffer For read operations, the destination buffer to store the results. For
|
|
|
|
write operations, the source buffer to write data from.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS The data was read from or written to the PCI root bridge.
|
|
|
|
@retval EFI_INVALID_PARAMETER Width is invalid for this PCI root bridge.
|
|
|
|
@retval EFI_INVALID_PARAMETER Buffer is NULL.
|
|
|
|
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
|
|
|
|
|
|
|
**/
|
|
|
|
EFI_STATUS
|
|
|
|
PciIoRead (
|
|
|
|
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
|
|
|
IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
|
|
|
|
IN UINT32 Address,
|
|
|
|
IN UINTN Count,
|
|
|
|
IN OUT VOID *Buffer
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Write PCI configuration space through EFI_PCI_IO_PROTOCOL.
|
|
|
|
|
|
|
|
@param PciIo A pointer to the EFI_PCI_O_PROTOCOL.
|
|
|
|
@param Width Signifies the width of the memory operations.
|
|
|
|
@Param Address The address within the PCI configuration space for the PCI controller.
|
|
|
|
@param Buffer For read operations, the destination buffer to store the results. For
|
|
|
|
write operations, the source buffer to write data from.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS The data was read from or written to the PCI root bridge.
|
|
|
|
@retval EFI_INVALID_PARAMETER Width is invalid for this PCI root bridge.
|
|
|
|
@retval EFI_INVALID_PARAMETER Buffer is NULL.
|
|
|
|
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
|
|
|
|
|
|
|
**/
|
|
|
|
EFI_STATUS
|
|
|
|
PciIoWrite (
|
|
|
|
IN EFI_PCI_IO_PROTOCOL *PciIo,
|
|
|
|
IN EFI_PCI_IO_PROTOCOL_WIDTH Width,
|
|
|
|
IN UINT32 Address,
|
|
|
|
IN UINTN Count,
|
|
|
|
IN OUT VOID *Buffer
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Write PCI configuration space through EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
|
|
|
|
|
|
|
|
@param PciRootBridgeIo A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
|
|
|
|
@param Pci A pointer to PCI_TYPE00.
|
|
|
|
@param Width Signifies the width of the memory operations.
|
|
|
|
@Param Address The address within the PCI configuration space for the PCI controller.
|
|
|
|
@param Buffer For read operations, the destination buffer to store the results. For
|
|
|
|
write operations, the source buffer to write data from.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS The data was read from or written to the PCI root bridge.
|
|
|
|
@retval EFI_INVALID_PARAMETER Width is invalid for this PCI root bridge.
|
|
|
|
@retval EFI_INVALID_PARAMETER Buffer is NULL.
|
|
|
|
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
|
|
|
|
|
|
|
**/
|
|
|
|
EFI_STATUS
|
|
|
|
PciRootBridgeIoWrite (
|
|
|
|
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
|
|
|
|
IN PCI_TYPE00 *Pci,
|
|
|
|
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
|
|
|
|
IN UINT64 Address,
|
|
|
|
IN UINTN Count,
|
|
|
|
IN OUT VOID *Buffer
|
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Read PCI configuration space through EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
|
|
|
|
|
|
|
|
@param PciRootBridgeIo A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
|
|
|
|
@param Pci A pointer to PCI_TYPE00.
|
|
|
|
@param Width Signifies the width of the memory operations.
|
|
|
|
@Param Address The address within the PCI configuration space for the PCI controller.
|
|
|
|
@param Buffer For read operations, the destination buffer to store the results. For
|
|
|
|
write operations, the source buffer to write data from.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS The data was read from or written to the PCI root bridge.
|
|
|
|
@retval EFI_INVALID_PARAMETER Width is invalid for this PCI root bridge.
|
|
|
|
@retval EFI_INVALID_PARAMETER Buffer is NULL.
|
|
|
|
@retval EFI_OUT_OF_RESOURCES The request could not be completed due to a lack of resources.
|
|
|
|
|
|
|
|
**/
|
|
|
|
EFI_STATUS
|
|
|
|
PciRootBridgeIoRead (
|
|
|
|
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
|
|
|
|
IN PCI_TYPE00 *Pci,
|
|
|
|
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
|
|
|
|
IN UINT64 Address,
|
|
|
|
IN UINTN Count,
|
|
|
|
IN OUT VOID *Buffer
|
|
|
|
);
|
|
|
|
#endif
|