2009-01-08 09:48:15 +01:00
|
|
|
/** @file
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
Copyright (c) 2006, 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.
|
|
|
|
|
2007-07-23 09:06:23 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
|
2009-01-08 09:48:15 +01:00
|
|
|
#ifndef _EFI_PCI_ENUMERATOR_SUPPORT_H_
|
|
|
|
#define _EFI_PCI_ENUMERATOR_SUPPORT_H_
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
This routine is used to check whether the pci device is present.
|
|
|
|
|
|
|
|
@param PciRootBridgeIo Pointer to instance of EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
|
|
|
|
@param Pci Output buffer for PCI device structure
|
|
|
|
@param Bus PCI bus NO
|
|
|
|
@param Device PCI device NO
|
|
|
|
@param Func PCI Func NO
|
|
|
|
|
|
|
|
@retval EFI_NOT_FOUND device not present
|
|
|
|
@retval EFI_SUCCESS device is found.
|
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
PciDevicePresent (
|
|
|
|
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
|
|
|
|
PCI_TYPE00 *Pci,
|
|
|
|
UINT8 Bus,
|
|
|
|
UINT8 Device,
|
|
|
|
UINT8 Func
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Collect all the resource information under this root bridge
|
|
|
|
A database that records all the information about pci device subject to this
|
|
|
|
root bridge will then be created.
|
|
|
|
|
|
|
|
@param Bridge Parent bridge instance
|
2009-01-08 09:48:15 +01:00
|
|
|
@param StartBusNumber Bus number of begining
|
2008-04-15 10:52:18 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
PciPciDeviceInfoCollector (
|
|
|
|
IN PCI_IO_DEVICE *Bridge,
|
|
|
|
UINT8 StartBusNumber
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Seach required device and get PCI device info block
|
|
|
|
|
|
|
|
@param Bridge Parent bridge instance
|
|
|
|
@param Pci Output of PCI device info block
|
|
|
|
@param Bus PCI bus NO.
|
|
|
|
@param Device PCI device NO.
|
|
|
|
@param Func PCI func NO.
|
|
|
|
@param PciDevice output of searched PCI device instance
|
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
PciSearchDevice (
|
2009-01-08 09:48:15 +01:00
|
|
|
IN PCI_IO_DEVICE *Bridge,
|
|
|
|
IN PCI_TYPE00 *Pci,
|
|
|
|
IN UINT8 Bus,
|
|
|
|
IN UINT8 Device,
|
|
|
|
IN UINT8 Func,
|
|
|
|
OUT PCI_IO_DEVICE **PciDevice
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Create PCI private data for PCI device
|
|
|
|
|
|
|
|
@param Bridge Parent bridge instance
|
|
|
|
@param Pci PCI bar block
|
|
|
|
@param Bus PCI device Bus NO.
|
|
|
|
@param Device PCI device DeviceNO.
|
|
|
|
@param Func PCI device's func NO.
|
|
|
|
|
|
|
|
@return new PCI device's private date structure.
|
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
PCI_IO_DEVICE *
|
|
|
|
GatherDeviceInfo (
|
|
|
|
IN PCI_IO_DEVICE *Bridge,
|
|
|
|
IN PCI_TYPE00 *Pci,
|
|
|
|
UINT8 Bus,
|
|
|
|
UINT8 Device,
|
|
|
|
UINT8 Func
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Create private data for bridge device's PPB.
|
|
|
|
|
|
|
|
@param Bridge Parent bridge
|
|
|
|
@param Pci Pci device block
|
|
|
|
@param Bus Bridge device's bus NO.
|
|
|
|
@param Device Bridge device's device NO.
|
|
|
|
@param Func Bridge device's func NO.
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@return bridge device instance.
|
2008-04-15 10:52:18 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
PCI_IO_DEVICE *
|
|
|
|
GatherPpbInfo (
|
|
|
|
IN PCI_IO_DEVICE *Bridge,
|
|
|
|
IN PCI_TYPE00 *Pci,
|
|
|
|
UINT8 Bus,
|
|
|
|
UINT8 Device,
|
|
|
|
UINT8 Func
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Create private data for hotplug bridge device
|
|
|
|
|
|
|
|
@param Bridge Parent bridge instance
|
|
|
|
@param Pci PCI bar block
|
|
|
|
@param Bus hotplug bridge device's bus NO.
|
|
|
|
@param Device hotplug bridge device's device NO.
|
|
|
|
@param Func hotplug bridge device's Func NO.
|
|
|
|
|
|
|
|
@return hotplug bridge device instance
|
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
PCI_IO_DEVICE *
|
|
|
|
GatherP2CInfo (
|
|
|
|
IN PCI_IO_DEVICE *Bridge,
|
|
|
|
IN PCI_TYPE00 *Pci,
|
|
|
|
UINT8 Bus,
|
|
|
|
UINT8 Device,
|
|
|
|
UINT8 Func
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Create device path for pci deivce
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param ParentDevicePath Parent bridge's path.
|
|
|
|
@param PciIoDevice Pci device instance.
|
2008-04-15 10:52:18 +02:00
|
|
|
|
|
|
|
@return device path protocol instance for specific pci device.
|
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_DEVICE_PATH_PROTOCOL *
|
|
|
|
CreatePciDevicePath (
|
|
|
|
IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Check the bar is existed or not.
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
@param PciIoDevice - A pointer to the PCI_IO_DEVICE.
|
|
|
|
@param Offset - The offset.
|
|
|
|
@param BarLengthValue - The bar length value.
|
|
|
|
@param OriginalBarValue - The original bar value.
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
@retval EFI_NOT_FOUND - The bar don't exist.
|
|
|
|
@retval EFI_SUCCESS - The bar exist.
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
BarExisted (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice,
|
|
|
|
IN UINTN Offset,
|
|
|
|
OUT UINT32 *BarLengthValue,
|
|
|
|
OUT UINT32 *OriginalBarValue
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Test whether the device can support attributes
|
|
|
|
|
|
|
|
@param PciIoDevice Pci device instance
|
|
|
|
@param Command Command register value.
|
|
|
|
@param BridgeControl Bridge control value for PPB or P2C.
|
|
|
|
@param OldCommand Old command register offset
|
|
|
|
@param OldBridgeControl Old Bridge control value for PPB or P2C.
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@return EFI_SUCCESS.
|
2008-04-15 10:52:18 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
PciTestSupportedAttribute (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice,
|
|
|
|
IN UINT16 *Command,
|
|
|
|
IN UINT16 *BridgeControl,
|
|
|
|
IN UINT16 *OldCommand,
|
|
|
|
IN UINT16 *OldBridgeControl
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Set the supported or current attributes of a PCI device
|
|
|
|
|
|
|
|
@param PciIoDevice - Structure pointer for PCI device.
|
|
|
|
@param Command - Command register value.
|
|
|
|
@param BridgeControl - Bridge control value for PPB or P2C.
|
|
|
|
@param Option - Make a choice of EFI_SET_SUPPORTS or EFI_SET_ATTRIBUTES.
|
|
|
|
|
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
PciSetDeviceAttribute (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice,
|
|
|
|
IN UINT16 Command,
|
|
|
|
IN UINT16 BridgeControl,
|
|
|
|
IN UINTN Option
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Determine if the device can support Fast Back to Back attribute
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param PciIoDevice Pci device instance.
|
|
|
|
@param StatusIndex Status register value.
|
2008-04-15 10:52:18 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
GetFastBackToBackSupport (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice,
|
|
|
|
IN UINT8 StatusIndex
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Determine the related attributes of all devices under a Root Bridge
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param PciIoDevice PCI device instance.
|
2008-04-15 10:52:18 +02:00
|
|
|
|
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
DetermineDeviceAttribute (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
This routine is used to update the bar information for those incompatible PCI device
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param PciIoDevice Pci device instance.
|
|
|
|
@return EFI_UNSUPPORTED failed to update Pci Info.
|
2008-04-15 10:52:18 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
UpdatePciInfo (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
This routine will update the alignment with the new alignment
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param Alignment old alignment.
|
|
|
|
@param NewAlignment new alignment.
|
2008-04-15 10:52:18 +02:00
|
|
|
|
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
VOID
|
|
|
|
SetNewAlign (
|
|
|
|
IN UINT64 *Alignment,
|
|
|
|
IN UINT64 NewAlignment
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Parse PCI bar bit.
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param PciIoDevice Pci device instance.
|
|
|
|
@param Offset bar offset.
|
|
|
|
@param BarIndex bar index.
|
2008-04-15 10:52:18 +02:00
|
|
|
|
|
|
|
@return next bar offset.
|
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
UINTN
|
|
|
|
PciParseBar (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice,
|
|
|
|
IN UINTN Offset,
|
|
|
|
IN UINTN BarIndex
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
This routine is used to initialize the bar of a PCI device
|
2008-12-25 09:59:02 +01:00
|
|
|
It can be called typically when a device is going to be rejected.
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param PciIoDevice Pci device instance.
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
InitializePciDevice (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Init PPB for bridge device
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param PciIoDevice Pci device instance.
|
2008-04-15 10:52:18 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
InitializePpb (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Init private data for Hotplug bridge device
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param PciIoDevice hotplug bridge device.
|
2008-04-15 10:52:18 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
InitializeP2C (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Create and initiliaze general PCI I/O device instance for
|
|
|
|
PCI device/bridge device/hotplug bridge device.
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param PciRootBridgeIo Pointer to instance of EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
|
2008-04-15 10:52:18 +02:00
|
|
|
@param Pci Pci bar block
|
|
|
|
@param Bus device Bus NO.
|
|
|
|
@param Device device device NO.
|
|
|
|
@param Func device func NO.
|
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@return instance of PCI device.
|
2008-04-15 10:52:18 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
PCI_IO_DEVICE *
|
|
|
|
CreatePciIoDevice (
|
|
|
|
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
|
|
|
|
IN PCI_TYPE00 *Pci,
|
|
|
|
UINT8 Bus,
|
|
|
|
UINT8 Device,
|
|
|
|
UINT8 Func
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
This routine is used to enumerate entire pci bus system
|
|
|
|
in a given platform
|
|
|
|
It is only called on the second start on the same Root Bridge.
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param Controller Parent bridge handler.
|
2008-04-15 10:52:18 +02:00
|
|
|
|
|
|
|
@return status of operation.
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
PciEnumeratorLight (
|
|
|
|
IN EFI_HANDLE Controller
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
Get bus range.
|
|
|
|
|
|
|
|
@param Descriptors A pointer to the address space descriptor.
|
|
|
|
@param MinBus The min bus.
|
|
|
|
@param MaxBus The max bus.
|
|
|
|
@param BusRange The bus range.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS Success operation.
|
|
|
|
@retval EFI_NOT_FOUND can not find the specific bus.
|
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
PciGetBusRange (
|
|
|
|
IN EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR **Descriptors,
|
|
|
|
OUT UINT16 *MinBus,
|
|
|
|
OUT UINT16 *MaxBus,
|
|
|
|
OUT UINT16 *BusRange
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2009-01-08 09:48:15 +01:00
|
|
|
/**
|
|
|
|
This routine can be used to start the root bridge.
|
|
|
|
|
|
|
|
@param RootBridgeDev Pci device instance.
|
|
|
|
|
|
|
|
@retval EFI_SUCCESS This device started.
|
|
|
|
|
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
EFI_STATUS
|
|
|
|
StartManagingRootBridge (
|
|
|
|
IN PCI_IO_DEVICE *RootBridgeDev
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-04-15 10:52:18 +02:00
|
|
|
/**
|
|
|
|
This routine can be used to check whether a PCI device should be rejected when light enumeration
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@param PciIoDevice Pci device instance.
|
2007-06-28 16:02:17 +02:00
|
|
|
|
2008-12-25 09:59:02 +01:00
|
|
|
@retval TRUE This device should be rejected.
|
|
|
|
@retval FALSE This device shouldn't be rejected.
|
2008-04-15 10:52:18 +02:00
|
|
|
|
2008-04-14 05:12:57 +02:00
|
|
|
**/
|
2007-06-28 16:02:17 +02:00
|
|
|
BOOLEAN
|
|
|
|
IsPciDeviceRejected (
|
|
|
|
IN PCI_IO_DEVICE *PciIoDevice
|
2008-09-04 11:37:28 +02:00
|
|
|
);
|
2007-06-28 16:02:17 +02:00
|
|
|
|
|
|
|
#endif
|