diff options
Diffstat (limited to 'IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h')
-rw-r--r-- | IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h | 391 |
1 files changed, 219 insertions, 172 deletions
diff --git a/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h b/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h index 1900990a15..3bbd5431ad 100644 --- a/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h +++ b/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.h @@ -1,64 +1,74 @@ /** @file
+ PCI emumeration support functions declaration for PCI Bus module.
-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.
+Copyright (c) 2006 - 2009, 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.
+**/
#ifndef _EFI_PCI_ENUMERATOR_SUPPORT_H_
#define _EFI_PCI_ENUMERATOR_SUPPORT_H_
/**
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.
+
+ @param PciRootBridgeIo Pointer to instance of EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
+ @param Pci Output buffer for PCI device configuration space.
+ @param Bus PCI bus NO.
+ @param Device PCI device NO.
+ @param Func PCI Func NO.
+
+ @retval EFI_NOT_FOUND PCI device not present.
+ @retval EFI_SUCCESS PCI device is found.
+
**/
EFI_STATUS
PciDevicePresent (
- IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
- PCI_TYPE00 *Pci,
- UINT8 Bus,
- UINT8 Device,
- UINT8 Func
+ IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
+ OUT PCI_TYPE00 *Pci,
+ IN UINT8 Bus,
+ IN UINT8 Device,
+ IN UINT8 Func
);
/**
- Collect all the resource information under this root bridge
+ 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
- @param StartBusNumber Bus number of begining
+
+ @param Bridge Parent bridge instance.
+ @param StartBusNumber Bus number of begining.
+
+ @retval EFI_SUCCESS PCI device is found.
+ @retval other Some error occurred when reading PCI bridge information.
+
**/
EFI_STATUS
PciPciDeviceInfoCollector (
IN PCI_IO_DEVICE *Bridge,
- UINT8 StartBusNumber
+ IN UINT8 StartBusNumber
);
/**
- Seach required device and get PCI device info block
-
- @param Bridge Parent bridge instance
- @param Pci Output of PCI device info block
+ Seach required device and create PCI device instance.
+
+ @param Bridge Parent bridge instance.
+ @param Pci Input PCI device information block.
@param Bus PCI bus NO.
@param Device PCI device NO.
@param Func PCI func NO.
- @param PciDevice output of searched PCI device instance
+ @param PciDevice Output of searched PCI device instance.
+
+ @retval EFI_SUCCESS Successfully created PCI device instance.
+ @retval EFI_OUT_OF_RESOURCES Cannot get PCI device information.
+
**/
EFI_STATUS
PciSearchDevice (
@@ -71,129 +81,134 @@ PciSearchDevice ( );
/**
- 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.
+ Create PCI device instance for PCI device.
+
+ @param Bridge Parent bridge instance.
+ @param Pci Input PCI device information block.
+ @param Bus PCI device Bus NO.
+ @param Device PCI device Device NO.
+ @param Func PCI device's func NO.
+
+ @return Created PCI device instance.
+
**/
-PCI_IO_DEVICE *
+PCI_IO_DEVICE *
GatherDeviceInfo (
IN PCI_IO_DEVICE *Bridge,
IN PCI_TYPE00 *Pci,
- UINT8 Bus,
- UINT8 Device,
- UINT8 Func
+ IN UINT8 Bus,
+ IN UINT8 Device,
+ IN UINT8 Func
);
/**
- 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.
-
- @return bridge device instance.
+ Create PCI device instance for PCI-PCI bridge.
+
+ @param Bridge Parent bridge instance.
+ @param Pci Input PCI device information block.
+ @param Bus PCI device Bus NO.
+ @param Device PCI device Device NO.
+ @param Func PCI device's func NO.
+
+ @return Created PCI device instance.
+
**/
-PCI_IO_DEVICE *
+PCI_IO_DEVICE *
GatherPpbInfo (
IN PCI_IO_DEVICE *Bridge,
IN PCI_TYPE00 *Pci,
- UINT8 Bus,
- UINT8 Device,
- UINT8 Func
+ IN UINT8 Bus,
+ IN UINT8 Device,
+ IN UINT8 Func
);
/**
- 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
+ Create PCI device instance for PCI Card bridge device.
+
+ @param Bridge Parent bridge instance.
+ @param Pci Input PCI device information block.
+ @param Bus PCI device Bus NO.
+ @param Device PCI device Device NO.
+ @param Func PCI device's func NO.
+
+ @return Created PCI device instance.
+
**/
-PCI_IO_DEVICE *
+PCI_IO_DEVICE *
GatherP2CInfo (
IN PCI_IO_DEVICE *Bridge,
IN PCI_TYPE00 *Pci,
- UINT8 Bus,
- UINT8 Device,
- UINT8 Func
+ IN UINT8 Bus,
+ IN UINT8 Device,
+ IN UINT8 Func
);
/**
- Create device path for pci deivce
-
+ Create device path for pci deivce.
+
@param ParentDevicePath Parent bridge's path.
@param PciIoDevice Pci device instance.
-
+
@return device path protocol instance for specific pci device.
+
**/
-EFI_DEVICE_PATH_PROTOCOL *
+EFI_DEVICE_PATH_PROTOCOL *
CreatePciDevicePath (
IN EFI_DEVICE_PATH_PROTOCOL *ParentDevicePath,
IN PCI_IO_DEVICE *PciIoDevice
);
/**
- Check the bar is existed or not.
+ Check whether the bar is existed or not.
- @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.
+ @param PciIoDevice A pointer to the PCI_IO_DEVICE.
+ @param Offset The offset.
+ @param BarLengthValue The bar length value returned.
+ @param OriginalBarValue The original bar value returned.
- @retval EFI_NOT_FOUND - The bar don't exist.
- @retval EFI_SUCCESS - The bar exist.
+ @retval EFI_NOT_FOUND The bar doesn't exist.
+ @retval EFI_SUCCESS The bar exist.
**/
EFI_STATUS
BarExisted (
- IN PCI_IO_DEVICE *PciIoDevice,
- IN UINTN Offset,
- OUT UINT32 *BarLengthValue,
- OUT UINT32 *OriginalBarValue
+ IN PCI_IO_DEVICE *PciIoDevice,
+ IN UINTN Offset,
+ OUT UINT32 *BarLengthValue,
+ OUT UINT32 *OriginalBarValue
);
/**
- 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.
-
- @return EFI_SUCCESS.
+ Test whether the device can support given attributes.
+
+ @param PciIoDevice Pci device instance.
+ @param Command Input command register value, and
+ returned supported register value.
+ @param BridgeControl Inout bridge control value for PPB or P2C, and
+ returned supported bridge control value.
+ @param OldCommand Returned and stored old command register offset.
+ @param OldBridgeControl Returned and stored old Bridge control value for PPB or P2C.
+
**/
-EFI_STATUS
+VOID
PciTestSupportedAttribute (
- IN PCI_IO_DEVICE *PciIoDevice,
- IN UINT16 *Command,
- IN UINT16 *BridgeControl,
- IN UINT16 *OldCommand,
- IN UINT16 *OldBridgeControl
+ IN PCI_IO_DEVICE *PciIoDevice,
+ IN OUT UINT16 *Command,
+ IN OUT UINT16 *BridgeControl,
+ OUT UINT16 *OldCommand,
+ OUT UINT16 *OldBridgeControl
);
/**
- 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.
-
+ 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.
+
**/
-EFI_STATUS
+VOID
PciSetDeviceAttribute (
IN PCI_IO_DEVICE *PciIoDevice,
IN UINT16 Command,
@@ -202,10 +217,14 @@ PciSetDeviceAttribute ( );
/**
- Determine if the device can support Fast Back to Back attribute
-
+ Determine if the device can support Fast Back to Back attribute.
+
@param PciIoDevice Pci device instance.
@param StatusIndex Status register value.
+
+ @retval EFI_SUCCESS This device support Fast Back to Back attribute.
+ @retval EFI_UNSUPPORTED This device doesn't support Fast Back to Back attribute.
+
**/
EFI_STATUS
GetFastBackToBackSupport (
@@ -214,10 +233,10 @@ GetFastBackToBackSupport ( );
/**
- Determine the related attributes of all devices under a Root Bridge
-
- @param PciIoDevice PCI device instance.
-
+ Determine the related attributes of all devices under a Root Bridge.
+
+ @param PciIoDevice PCI device instance.
+
**/
EFI_STATUS
DetermineDeviceAttribute (
@@ -225,10 +244,14 @@ DetermineDeviceAttribute ( );
/**
- This routine is used to update the bar information for those incompatible PCI device
-
+ This routine is used to update the bar information for those incompatible PCI device.
+
@param PciIoDevice Pci device instance.
- @return EFI_UNSUPPORTED failed to update Pci Info.
+
+ @retval EFI_SUCCESS Successfully updated bar information.
+ @retval EFI_UNSUPPORTED Given PCI device doesn't belong to incompatible PCI device list.
+ @retval other Failed to check incompatibility device.
+
**/
EFI_STATUS
UpdatePciInfo (
@@ -236,26 +259,27 @@ UpdatePciInfo ( );
/**
- This routine will update the alignment with the new alignment
-
- @param Alignment old alignment.
- @param NewAlignment new alignment.
-
+ This routine will update the alignment with the new alignment.
+
+ @param Alignment Old alignment.
+ @param NewAlignment New alignment.
+
**/
VOID
SetNewAlign (
- IN UINT64 *Alignment,
- IN UINT64 NewAlignment
+ IN UINT64 *Alignment,
+ IN UINT64 NewAlignment
);
/**
- Parse PCI bar bit.
-
+ Parse PCI bar information and fill them into PCI device instance.
+
@param PciIoDevice Pci device instance.
- @param Offset bar offset.
- @param BarIndex bar index.
-
- @return next bar offset.
+ @param Offset Bar offset.
+ @param BarIndex Bar index.
+
+ @return Next bar offset.
+
**/
UINTN
PciParseBar (
@@ -265,65 +289,73 @@ PciParseBar ( );
/**
- This routine is used to initialize the bar of a PCI device
- It can be called typically when a device is going to be rejected.
+ This routine is used to initialize the bar of a PCI device.
@param PciIoDevice Pci device instance.
+
+ @note It can be called typically when a device is going to be rejected.
+
**/
-EFI_STATUS
+VOID
InitializePciDevice (
- IN PCI_IO_DEVICE *PciIoDevice
+ IN PCI_IO_DEVICE *PciIoDevice
);
/**
- Init PPB for bridge device
-
- @param PciIoDevice Pci device instance.
+ This routine is used to initialize the bar of a PCI-PCI Bridge device.
+
+ @param PciIoDevice PCI-PCI bridge device instance.
+
**/
-EFI_STATUS
+VOID
InitializePpb (
- IN PCI_IO_DEVICE *PciIoDevice
+ IN PCI_IO_DEVICE *PciIoDevice
);
/**
- Init private data for Hotplug bridge device
-
- @param PciIoDevice hotplug bridge device.
+ This routine is used to initialize the bar of a PCI Card Bridge device.
+
+ @param PciIoDevice PCI Card bridge device.
+
**/
-EFI_STATUS
+VOID
InitializeP2C (
- IN PCI_IO_DEVICE *PciIoDevice
+ IN PCI_IO_DEVICE *PciIoDevice
);
/**
Create and initiliaze general PCI I/O device instance for
PCI device/bridge device/hotplug bridge device.
-
+
@param PciRootBridgeIo Pointer to instance of EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
- @param Pci Pci bar block
- @param Bus device Bus NO.
- @param Device device device NO.
- @param Func device func NO.
-
- @return instance of PCI device.
+ @param Pci Input Pci information block.
+ @param Bus Device Bus NO.
+ @param Device Device device NO.
+ @param Func Device func NO.
+
+ @return Instance of PCI device. NULL means no instance created.
+
**/
-PCI_IO_DEVICE *
+PCI_IO_DEVICE *
CreatePciIoDevice (
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo,
IN PCI_TYPE00 *Pci,
- UINT8 Bus,
- UINT8 Device,
- UINT8 Func
+ IN UINT8 Bus,
+ IN UINT8 Device,
+ IN UINT8 Func
);
/**
This routine is used to enumerate entire pci bus system
- in a given platform
+ in a given platform.
+
It is only called on the second start on the same Root Bridge.
- @param Controller Parent bridge handler.
-
- @return status of operation.
+ @param Controller Parent bridge handler.
+
+ @retval EFI_SUCCESS PCI enumeration finished successfully.
+ @retval other Some error occurred when enumerating the pci bus system.
+
**/
EFI_STATUS
PciEnumeratorLight (
@@ -331,15 +363,16 @@ PciEnumeratorLight ( );
/**
- Get bus range.
-
+ Get bus range from PCI resource descriptor list.
+
@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.
+ @param MinBus The min bus returned.
+ @param MaxBus The max bus returned.
+ @param BusRange The bus range returned.
+
+ @retval EFI_SUCCESS Successfully got bus range.
+ @retval EFI_NOT_FOUND Can not find the specific bus.
+
**/
EFI_STATUS
PciGetBusRange (
@@ -355,7 +388,8 @@ PciGetBusRange ( @param RootBridgeDev Pci device instance.
@retval EFI_SUCCESS This device started.
-
+ @retval other Failed to get PCI Root Bridge I/O protocol.
+
**/
EFI_STATUS
StartManagingRootBridge (
@@ -363,17 +397,30 @@ StartManagingRootBridge ( );
/**
- This routine can be used to check whether a PCI device should be rejected when light enumeration
+ This routine can be used to check whether a PCI device should be rejected when light enumeration.
@param PciIoDevice Pci device instance.
@retval TRUE This device should be rejected.
@retval FALSE This device shouldn't be rejected.
-
+
**/
BOOLEAN
IsPciDeviceRejected (
IN PCI_IO_DEVICE *PciIoDevice
);
+/**
+ Reset all bus number from specific bridge.
+
+ @param Bridge Parent specific bridge.
+ @param StartBusNumber Start bus number.
+
+**/
+VOID
+ResetAllPpbBusNumber (
+ IN PCI_IO_DEVICE *Bridge,
+ IN UINT8 StartBusNumber
+ );
+
#endif
|