Code scrub for PCI Bus module and PciIncompatibleDeviceSupportLib module.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@8662 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -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
|
||||
|
Reference in New Issue
Block a user