git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5591 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			170 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			170 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  This file declares EFI PCI Hot Plug Init Protocol
 | 
						|
  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.
 | 
						|
 | 
						|
  Copyright (c) 2007, 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_
 | 
						|
 | 
						|
#include <PiDxe.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
 |