-/** @file\r
- This file declares EFI PCI Hot Plug Init Protocol\r
-\r
- Copyright (c) 2006, Intel Corporation \r
- All rights reserved. This program and the accompanying materials \r
- are licensed and made available under the terms and conditions of the BSD License \r
- which accompanies this distribution. The full text of the license may be found at \r
- http://opensource.org/licenses/bsd-license.php \r
-\r
- THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
- WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-\r
- Module Name: PciHotPlugInit.h\r
-\r
- @par Revision Reference:\r
- This protocol is defined in Framework of EFI Hot Plug Pci Initialization Protocol Spec\r
- Version 0.9\r
-\r
-**/\r
-\r
-#ifndef __EFI_PCI_HOT_PLUG_INIT_H_\r
-#define __EFI_PCI_HOT_PLUG_INIT_H_\r
-\r
-//\r
-// Global ID for the PCI Hot Plug Protocol\r
-//\r
-#define EFI_PCI_HOT_PLUG_INIT_PROTOCOL_GUID \\r
- { 0xaa0e8bc1, 0xdabc, 0x46b0, {0xa8, 0x44, 0x37, 0xb8, 0x16, 0x9b, 0x2b, 0xea } }\r
-\r
- \r
-typedef struct _EFI_PCI_HOT_PLUG_INIT_PROTOCOL EFI_PCI_HOT_PLUG_INIT_PROTOCOL;\r
-\r
-#define EFI_HPC_STATE_INITIALIZED 0x01\r
-#define EFI_HPC_STATE_ENABLED 0x02\r
-\r
-typedef UINT16 EFI_HPC_STATE;\r
-\r
-\r
-typedef struct{\r
- EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath;\r
- EFI_DEVICE_PATH_PROTOCOL *HpbDevicePath;\r
-} EFI_HPC_LOCATION;\r
-\r
-\r
-typedef enum{\r
- EfiPaddingPciBus,\r
- EfiPaddingPciRootBridge\r
-} EFI_HPC_PADDING_ATTRIBUTES;\r
-\r
-/**\r
- Returns a list of root Hot Plug Controllers (HPCs) that require initialization \r
- during the boot process.\r
-\r
- @param This Pointer to the EFI_PCI_HOT_PLUG_INIT_PROTOCOL instance.\r
- @param HpcCount The number of root HPCs that were returned.\r
- @param HpcList The list of root HPCs. HpcCount defines the number of\r
- elements in this list.\r
-\r
- @retval EFI_SUCCESS HpcList was returned.\r
- @retval EFI_OUT_OF_RESOURCES HpcList was not returned due to insufficient resources.\r
- @retval EFI_INVALID_PARAMETER HpcCount is NULL or HpcList is NULL.\r
-\r
-**/\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_GET_ROOT_HPC_LIST) (\r
- IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,\r
- OUT UINTN *HpcCount,\r
- OUT EFI_HPC_LOCATION **HpcList\r
-);\r
-\r
-/**\r
- Initializes one root Hot Plug Controller (HPC). This process may causes \r
- initialization of its subordinate buses. \r
-\r
- @param This Pointer to the EFI_PCI_HOT_PLUG_INIT_PROTOCOL instance.\r
- @param HpcDevicePath The device path to the HPC that is being initialized.\r
- @param HpcPciAddress The address of the HPC function on the PCI bus.\r
- @param Event The event that should be signaled when the HPC initialization\r
- is complete.\r
- @param HpcState The state of the HPC hardware.\r
-\r
- @retval EFI_SUCCESS If Event is NULL, the specific HPC was successfully\r
- initialized. If Event is not NULL, Event will be signaled at a later time\r
- when initialization is complete.\r
- @retval EFI_UNSUPPORTED This instance of EFI_PCI_HOT_PLUG_INIT_PROTOCOL\r
- does not support the specified HPC.\r
- @retval EFI_OUT_OF_RESOURCES Initialization failed due to insufficient\r
- resources.\r
- @retval EFI_INVALID_PARAMETER HpcState is NULL.\r
-\r
-**/\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_INITIALIZE_ROOT_HPC) (\r
- IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,\r
- IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath,\r
- IN UINT64 HpcPciAddress,\r
- IN EFI_EVENT Event, OPTIONAL\r
- OUT EFI_HPC_STATE *HpcState\r
-);\r
-\r
-/**\r
- Returns the resource padding that is required by the PCI bus that is controlled \r
- by the specified Hot Plug Controller (HPC).\r
-\r
- @param This Pointer to the EFI_PCI_HOT_PLUG_INIT_PROTOCOL instance.\r
- @param HpcDevicePath The device path to the HPC.\r
- @param HpcPciAddress The address of the HPC function on the PCI bus.\r
- @param HpcState The state of the HPC hardware.\r
- @param Padding The amount of resource padding that is required by the\r
- PCI bus under the control of the specified HPC.\r
- @param Attributes Describes how padding is accounted for. The padding\r
- is returned in the form of ACPI 2.0 resource descriptors.\r
-\r
- @retval EFI_SUCCESS The resource padding was successfully returned.\r
- @retval EFI_UNSUPPORTED This instance of the EFI_PCI_HOT_PLUG_INIT_PROTOCOL\r
- does not support the specified HPC.\r
- @retval EFI_NOT_READY This function was called before HPC initialization is complete.\r
- @retval EFI_INVALID_PARAMETER HpcState or Padding or Attributes is NULL.\r
- @retval EFI_OUT_OF_RESOURCES ACPI 2.0 resource descriptors for Padding\r
- cannot be allocated due to insufficient resources.\r
-\r
-**/\r
-typedef\r
-EFI_STATUS\r
-(EFIAPI *EFI_GET_PCI_HOT_PLUG_PADDING) (\r
- IN EFI_PCI_HOT_PLUG_INIT_PROTOCOL *This,\r
- IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath,\r
- IN UINT64 HpcPciAddress,\r
- OUT EFI_HPC_STATE *HpcState,\r
- OUT VOID **Padding,\r
- OUT EFI_HPC_PADDING_ATTRIBUTES *Attributes\r
-); \r
-\r
-\r
-//\r
-// Prototypes for the PCI Hot Plug Init Protocol\r
-//\r
-\r
-/**\r
- @par Protocol Description:\r
- This protocol provides the necessary functionality to initialize the \r
- Hot Plug Controllers (HPCs) and the buses that they control. This protocol \r
- also provides information regarding resource padding. \r
-\r
- @param GetRootHpcList\r
- Returns a list of root HPCs and the buses that they control.\r
-\r
- @param InitializeRootHpc\r
- Initializes the specified root HPC.\r
-\r
- @param GetResourcePadding\r
- Returns the resource padding that is required by the HPC.\r
-\r
-**/\r
-struct _EFI_PCI_HOT_PLUG_INIT_PROTOCOL {\r
- EFI_GET_ROOT_HPC_LIST GetRootHpcList;\r
- EFI_INITIALIZE_ROOT_HPC InitializeRootHpc;\r
- EFI_GET_PCI_HOT_PLUG_PADDING GetResourcePadding;\r
-};\r
-\r
-extern EFI_GUID gEfiPciHotPlugInitProtocolGuid;\r
-\r
-#endif\r