/** @file | |
Supporting functions declaration for PCI devices management. | |
Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#ifndef _EFI_PCI_DEVICE_SUPPORT_H_ | |
#define _EFI_PCI_DEVICE_SUPPORT_H_ | |
/** | |
Initialize the PCI devices pool. | |
**/ | |
VOID | |
InitializePciDevicePool ( | |
VOID | |
); | |
/** | |
Insert a root bridge into PCI device pool. | |
@param RootBridge A pointer to the PCI_IO_DEVICE. | |
**/ | |
VOID | |
InsertRootBridge ( | |
IN PCI_IO_DEVICE *RootBridge | |
); | |
/** | |
This function is used to insert a PCI device node under | |
a bridge. | |
@param Bridge The PCI bridge. | |
@param PciDeviceNode The PCI device needs inserting. | |
**/ | |
VOID | |
InsertPciDevice ( | |
IN PCI_IO_DEVICE *Bridge, | |
IN PCI_IO_DEVICE *PciDeviceNode | |
); | |
/** | |
Destroy root bridge and remove it from device tree. | |
@param RootBridge The bridge want to be removed. | |
**/ | |
VOID | |
DestroyRootBridge ( | |
IN PCI_IO_DEVICE *RootBridge | |
); | |
/** | |
Destroy all the pci device node under the bridge. | |
Bridge itself is not included. | |
@param Bridge A pointer to the PCI_IO_DEVICE. | |
**/ | |
VOID | |
DestroyPciDeviceTree ( | |
IN PCI_IO_DEVICE *Bridge | |
); | |
/** | |
Destroy all device nodes under the root bridge | |
specified by Controller. | |
The root bridge itself is also included. | |
@param Controller Root bridge handle. | |
@retval EFI_SUCCESS Destroy all device nodes successfully. | |
@retval EFI_NOT_FOUND Cannot find any PCI device under specified | |
root bridge. | |
**/ | |
EFI_STATUS | |
DestroyRootBridgeByHandle ( | |
IN EFI_HANDLE Controller | |
); | |
/** | |
This function registers the PCI IO device. | |
It creates a handle for this PCI IO device (if the handle does not exist), attaches | |
appropriate protocols onto the handle, does necessary initialization, and sets up | |
parent/child relationship with its bus controller. | |
@param Controller An EFI handle for the PCI bus controller. | |
@param PciIoDevice A PCI_IO_DEVICE pointer to the PCI IO device to be registered. | |
@param Handle A pointer to hold the returned EFI handle for the PCI IO device. | |
@retval EFI_SUCCESS The PCI device is successfully registered. | |
@retval other An error occurred when registering the PCI device. | |
**/ | |
EFI_STATUS | |
RegisterPciDevice ( | |
IN EFI_HANDLE Controller, | |
IN PCI_IO_DEVICE *PciIoDevice, | |
OUT EFI_HANDLE *Handle OPTIONAL | |
); | |
/** | |
This function is used to remove the whole PCI devices on the specified bridge from | |
the root bridge. | |
@param RootBridgeHandle The root bridge device handle. | |
@param Bridge The bridge device to be removed. | |
**/ | |
VOID | |
RemoveAllPciDeviceOnBridge ( | |
EFI_HANDLE RootBridgeHandle, | |
PCI_IO_DEVICE *Bridge | |
); | |
/** | |
This function is used to de-register the PCI IO device. | |
That includes un-installing PciIo protocol from the specified PCI | |
device handle. | |
@param Controller An EFI handle for the PCI bus controller. | |
@param Handle PCI device handle. | |
@retval EFI_SUCCESS The PCI device is successfully de-registered. | |
@retval other An error occurred when de-registering the PCI device. | |
**/ | |
EFI_STATUS | |
DeRegisterPciDevice ( | |
IN EFI_HANDLE Controller, | |
IN EFI_HANDLE Handle | |
); | |
/** | |
Start to manage the PCI device on the specified root bridge or PCI-PCI Bridge. | |
@param Controller The root bridge handle. | |
@param RootBridge A pointer to the PCI_IO_DEVICE. | |
@param RemainingDevicePath A pointer to the EFI_DEVICE_PATH_PROTOCOL. | |
@param NumberOfChildren Children number. | |
@param ChildHandleBuffer A pointer to the child handle buffer. | |
@retval EFI_NOT_READY Device is not allocated. | |
@retval EFI_UNSUPPORTED Device only support PCI-PCI bridge. | |
@retval EFI_NOT_FOUND Can not find the specific device. | |
@retval EFI_SUCCESS Success to start Pci devices on bridge. | |
**/ | |
EFI_STATUS | |
StartPciDevicesOnBridge ( | |
IN EFI_HANDLE Controller, | |
IN PCI_IO_DEVICE *RootBridge, | |
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath, | |
IN OUT UINT8 *NumberOfChildren, | |
IN OUT EFI_HANDLE *ChildHandleBuffer | |
); | |
/** | |
Start to manage all the PCI devices it found previously under | |
the entire host bridge. | |
@param Controller The root bridge handle. | |
@retval EFI_NOT_READY Device is not allocated. | |
@retval EFI_SUCCESS Success to start Pci device on host bridge. | |
**/ | |
EFI_STATUS | |
StartPciDevices ( | |
IN EFI_HANDLE Controller | |
); | |
/** | |
Create root bridge device. | |
@param RootBridgeHandle Specified root bridge handle. | |
@return The crated root bridge device instance, NULL means no | |
root bridge device instance created. | |
**/ | |
PCI_IO_DEVICE * | |
CreateRootBridge ( | |
IN EFI_HANDLE RootBridgeHandle | |
); | |
/** | |
Get root bridge device instance by specific root bridge handle. | |
@param RootBridgeHandle Given root bridge handle. | |
@return The root bridge device instance, NULL means no root bridge | |
device instance found. | |
**/ | |
PCI_IO_DEVICE * | |
GetRootBridgeByHandle ( | |
EFI_HANDLE RootBridgeHandle | |
); | |
/** | |
Judge whether Pci device existed. | |
@param Bridge Parent bridge instance. | |
@param PciIoDevice Device instance. | |
@retval TRUE Pci device existed. | |
@retval FALSE Pci device did not exist. | |
**/ | |
BOOLEAN | |
PciDeviceExisted ( | |
IN PCI_IO_DEVICE *Bridge, | |
IN PCI_IO_DEVICE *PciIoDevice | |
); | |
/** | |
Get the active VGA device on the specified Host Bridge. | |
@param HostBridgeHandle Host Bridge handle. | |
@return The active VGA device on the specified Host Bridge. | |
**/ | |
PCI_IO_DEVICE * | |
LocateVgaDeviceOnHostBridge ( | |
IN EFI_HANDLE HostBridgeHandle | |
); | |
/** | |
Locate the active VGA device under the bridge. | |
@param Bridge PCI IO instance for the bridge. | |
@return The active VGA device. | |
**/ | |
PCI_IO_DEVICE * | |
LocateVgaDevice ( | |
IN PCI_IO_DEVICE *Bridge | |
); | |
/** | |
Destroy a pci device node. | |
All direct or indirect allocated resource for this node will be freed. | |
@param PciIoDevice A pointer to the PCI_IO_DEVICE to be destroyed. | |
**/ | |
VOID | |
FreePciDevice ( | |
IN PCI_IO_DEVICE *PciIoDevice | |
); | |
#endif |