/** @file | |
This file declares EFI PCI Hot Plug Init Protocol | |
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. | |
Module Name: PciHotPlugInit.h | |
@par Revision Reference: | |
This protocol is defined in Framework of EFI Hot Plug Pci Initialization Protocol Spec | |
Version 0.9 | |
**/ | |
#ifndef _EFI_PCI_HOT_PLUG_INIT_H | |
#define _EFI_PCI_HOT_PLUG_INIT_H | |
// | |
// Global ID for the PCI Hot Plug Protocol | |
// | |
#define EFI_PCI_HOT_PLUG_INIT_PROTOCOL_GUID \ | |
{ 0xaa0e8bc1, 0xdabc, 0x46b0, {0xa8, 0x44, 0x37, 0xb8, 0x16, 0x9b, 0x2b, 0xea } } | |
typedef struct _EFI_PCI_HOT_PLUG_INIT_PROTOCOL EFI_PCI_HOT_PLUG_INIT_PROTOCOL; | |
#define EFI_HPC_STATE_INITIALIZED 0x01 | |
#define EFI_HPC_STATE_ENABLED 0x02 | |
typedef UINT16 EFI_HPC_STATE; | |
typedef struct{ | |
EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath; | |
EFI_DEVICE_PATH_PROTOCOL *HpbDevicePath; | |
} EFI_HPC_LOCATION; | |
typedef enum{ | |
EfiPaddingPciBus, | |
EfiPaddingPciRootBridge | |
} EFI_HPC_PADDING_ATTRIBUTES; | |
/** | |
Returns a list of root Hot Plug Controllers (HPCs) that require initialization | |
during the boot process. | |
@param This Pointer to the EFI_PCI_HOT_PLUG_INIT_PROTOCOL instance. | |
@param HpcCount The number of root HPCs that were returned. | |
@param HpcList The list of root HPCs. HpcCount defines the number of | |
elements in this list. | |
@retval EFI_SUCCESS HpcList was returned. | |
@retval EFI_OUT_OF_RESOURCES HpcList was not returned due to insufficient resources. | |
@retval EFI_INVALID_PARAMETER HpcCount is NULL or HpcList is NULL. | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_GET_ROOT_HPC_LIST) ( | |
IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This, | |
OUT UINTN *HpcCount, | |
OUT EFI_HPC_LOCATION **HpcList | |
); | |
/** | |
Initializes one root Hot Plug Controller (HPC). This process may causes | |
initialization of its subordinate buses. | |
@param This Pointer to the EFI_PCI_HOT_PLUG_INIT_PROTOCOL instance. | |
@param HpcDevicePath The device path to the HPC that is being initialized. | |
@param HpcPciAddress The address of the HPC function on the PCI bus. | |
@param Event The event that should be signaled when the HPC initialization | |
is complete. | |
@param HpcState The state of the HPC hardware. | |
@retval EFI_SUCCESS If Event is NULL, the specific HPC was successfully | |
initialized. If Event is not NULL, Event will be signaled at a later time | |
when initialization is complete. | |
@retval EFI_UNSUPPORTED This instance of EFI_PCI_HOT_PLUG_INIT_PROTOCOL | |
does not support the specified HPC. | |
@retval EFI_OUT_OF_RESOURCES Initialization failed due to insufficient | |
resources. | |
@retval EFI_INVALID_PARAMETER HpcState is NULL. | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_INITIALIZE_ROOT_HPC) ( | |
IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This, | |
IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath, | |
IN UINT64 HpcPciAddress, | |
IN EFI_EVENT Event, OPTIONAL | |
OUT EFI_HPC_STATE *HpcState | |
); | |
/** | |
Returns the resource padding that is required by the PCI bus that is controlled | |
by the specified Hot Plug Controller (HPC). | |
@param This Pointer to the EFI_PCI_HOT_PLUG_INIT_PROTOCOL instance. | |
@param HpcDevicePath The device path to the HPC. | |
@param HpcPciAddress The address of the HPC function on the PCI bus. | |
@param HpcState The state of the HPC hardware. | |
@param Padding The amount of resource padding that is required by the | |
PCI bus under the control of the specified HPC. | |
@param Attributes Describes how padding is accounted for. The padding | |
is returned in the form of ACPI 2.0 resource descriptors. | |
@retval EFI_SUCCESS The resource padding was successfully returned. | |
@retval EFI_UNSUPPORTED This instance of the EFI_PCI_HOT_PLUG_INIT_PROTOCOL | |
does not support the specified HPC. | |
@retval EFI_NOT_READY This function was called before HPC initialization is complete. | |
@retval EFI_INVALID_PARAMETER HpcState or Padding or Attributes is NULL. | |
@retval EFI_OUT_OF_RESOURCES ACPI 2.0 resource descriptors for Padding | |
cannot be allocated due to insufficient resources. | |
**/ | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_GET_PCI_HOT_PLUG_PADDING) ( | |
IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This, | |
IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath, | |
IN UINT64 HpcPciAddress, | |
OUT EFI_HPC_STATE *HpcState, | |
OUT VOID **Padding, | |
OUT EFI_HPC_PADDING_ATTRIBUTES *Attributes | |
); | |
// | |
// Prototypes for the PCI Hot Plug Init Protocol | |
// | |
/** | |
@par Protocol Description: | |
This protocol provides the necessary functionality to initialize the | |
Hot Plug Controllers (HPCs) and the buses that they control. This protocol | |
also provides information regarding resource padding. | |
@param GetRootHpcList | |
Returns a list of root HPCs and the buses that they control. | |
@param InitializeRootHpc | |
Initializes the specified root HPC. | |
@param GetResourcePadding | |
Returns the resource padding that is required by the HPC. | |
**/ | |
struct _EFI_PCI_HOT_PLUG_INIT_PROTOCOL { | |
EFI_GET_ROOT_HPC_LIST GetRootHpcList; | |
EFI_INITIALIZE_ROOT_HPC InitializeRootHpc; | |
EFI_GET_PCI_HOT_PLUG_PADDING GetResourcePadding; | |
}; | |
extern EFI_GUID gEfiPciHotPlugInitProtocolGuid; | |
#endif |