--- /dev/null
+/** @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