/** @file
  Provides services to notify the PCI bus driver that some events have happened 
  in a hot-plug controller (such as a PC Card socket, or PHPC), and to ask the 
  PCI bus driver to create or destroy handles for PCI-like devices.

  A hot-plug capable PCI bus driver should produce the EFI PCI Hot Plug Request 
  protocol. When a PCI device or a PCI-like device (for example, 32-bit PC Card)
  is installed after PCI bus does the enumeration, the PCI bus driver can be 
  notified through this protocol. For example, when a 32-bit PC Card is inserted
  into the PC Card socket, the PC Card bus driver can call interface of this
  protocol to notify PCI bus driver to allocate resource and create handles for
  this PC Card.
  
  The EFI_PCI_HOTPLUG_REQUEST_PROTOCOL is installed by the PCI bus driver on a 
  separate handle when PCI bus driver starts up. There is only one instance in 
  the system.  Any driver that wants to use this protocol must locate it globally.
  The EFI_PCI_HOTPLUG_REQUEST_PROTOCOL allows the driver of hot-plug controller, 
  for example, PC Card Bus driver, to notify PCI bus driver that an event has 
  happened in the hot-plug controller, and the PCI bus driver is requested to 
  create (add) or destroy (remove) handles for the specified PCI-like devices. 
  For example, when a 32-bit PC Card is inserted, this protocol interface will 
  be called with an add operation, and the PCI bus driver will enumerate and 
  start the devices inserted; when a 32-bit PC Card is removed, this protocol 
  interface will be called with a remove operation, and the PCI bus driver will 
  stop the devices and destroy their handles.  The existence of this protocol 
  represents the capability of the PCI bus driver. If this protocol exists in
  system, it means PCI bus driver is hot-plug capable, thus together with the 
  effort of PC Card bus driver, hot-plug of PC Card can be supported. Otherwise,
  the hot-plug capability is not provided.  
  
  Copyright (c) 2006 - 2009, Intel Corporation. All rights reserved.<BR>
  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.             

  @par Revision Reference:
  This Protocol is defined in UEFI Platform Initialization Specification 1.2 
  Volume 5: Standards
  
**/

#ifndef __PCI_HOTPLUG_REQUEST_H_
#define __PCI_HOTPLUG_REQUEST_H_

///
/// Global ID for EFI_PCI_HOTPLUG_REQUEST_PROTOCOL
///
#define EFI_PCI_HOTPLUG_REQUEST_PROTOCOL_GUID \
  { \
    0x19cb87ab, 0x2cb9, 0x4665, {0x83, 0x60, 0xdd, 0xcf, 0x60, 0x54, 0xf7, 0x9d} \
  }

///
/// Forward declaration for EFI_PCI_HOTPLUG_REQUEST_PROTOCOL
///
typedef struct _EFI_PCI_HOTPLUG_REQUEST_PROTOCOL  EFI_PCI_HOTPLUG_REQUEST_PROTOCOL;

///
/// Enumeration of PCI hot plug operations
/// 
typedef enum {
  ///
  /// The PCI bus driver is requested to create handles for the specified devices.
  /// An array of EFI_HANDLE is returned, with a NULL element marking the end of
  /// the array.
  ///
  EfiPciHotPlugRequestAdd,

  ///
  /// The PCI bus driver is requested to destroy handles for the specified devices.
  ///
  EfiPciHotplugRequestRemove
} EFI_PCI_HOTPLUG_OPERATION;

/**
  This function is used to notify PCI bus driver that some events happened in a
  hot-plug controller, and the PCI bus driver is requested to start or stop 
  specified PCI-like devices.
  
  This function allows the PCI bus driver to be notified to act as requested when
  a hot-plug event has happened on the hot-plug controller. Currently, the 
  operations include add operation and remove operation.  If it is a add operation,
  the PCI bus driver will enumerate, allocate resources for devices behind the 
  hot-plug controller, and create handle for the device specified by RemainingDevicePath.
  The RemainingDevicePath is an optional parameter. If it is not NULL, only the 
  specified device is started; if it is NULL, all devices behind the hot-plug 
  controller are started.  The newly created handles of PC Card functions are 
  returned in the ChildHandleBuffer, together with the number of child handle in
  NumberOfChildren.  If it is a remove operation, when NumberOfChildren contains
  a non-zero value, child handles specified in ChildHandleBuffer are stopped and
  destroyed; otherwise, PCI bus driver is notified to stop managing the controller
  handle.  
    
    @param[in] This                    A pointer to the EFI_PCI_HOTPLUG_REQUEST_PROTOCOL 
                                       instance.
    @param[in] Operation               The operation the PCI bus driver is requested 
                                       to make. 
    @param[in] Controller              The handle of the hot-plug controller.
    @param[in] RemainingDevicePath     The remaining device path for the PCI-like
                                       hot-plug device.  It only contains device
                                       path nodes behind the hot-plug controller. 
                                       It is an optional parameter and only valid
                                       when the Operation is a add operation. If 
                                       it is NULL, all devices behind the PC Card 
                                       socket are started.
    @param[in,out] NumberOfChildren    The number of child handles. For an add 
                                       operation, it is an output parameter.  For
                                       a remove operation, it's an input parameter.
                                       When it contains a non-zero value, children
                                       handles specified in ChildHandleBuffer are
                                       destroyed.  Otherwise, PCI bus driver is 
                                       notified to stop managing the controller 
                                       handle.
    @param[in,out] ChildHandleBuffer   The buffer which contains the child handles. 
                                       For an add operation, it is an output 
                                       parameter and contains all newly created 
                                       child handles.  For a remove operation, it
                                       contains child handles to be destroyed when
                                       NumberOfChildren contains a non-zero value.
                                       It can be NULL when NumberOfChildren is 0.
                                       It's the caller's responsibility to allocate
                                       and free memory for this buffer.
  
  @retval EFI_SUCCESS             The handles for the specified device have been 
                                  created or destroyed as requested, and for an 
                                  add operation, the new handles are returned in 
                                  ChildHandleBuffer.
  @retval EFI_INVALID_PARAMETER   Operation is not a legal value.
  @retval EFI_INVALID_PARAMETER   Controller is NULL or not a valid handle.
  @retval EFI_INVALID_PARAMETER   NumberOfChildren is NULL.
  @retval EFI_INVALID_PARAMETER   ChildHandleBuffer is NULL while Operation is 
                                  remove and NumberOfChildren contains a non-zero 
                                  value.
  @retval EFI_INVALID_PARAMETER   ChildHandleBuffer is NULL while Operation is add.
  @retval EFI_OUT_OF_RESOURCES    There are no enough resources to start the 
                                  devices.
**/
typedef
EFI_STATUS
(EFIAPI *EFI_PCI_HOTPLUG_REQUEST_NOTIFY)(
  IN     EFI_PCI_HOTPLUG_REQUEST_PROTOCOL  *This,
  IN     EFI_PCI_HOTPLUG_OPERATION         Operation,
  IN     EFI_HANDLE                        Controller,
  IN     EFI_DEVICE_PATH_PROTOCOL          *RemainingDevicePath  OPTIONAL,
  IN OUT UINT8                             *NumberOfChildren,
  IN OUT EFI_HANDLE                        *ChildHandleBuffer
  );

///
/// Provides services to notify PCI bus driver that some events have happened in 
/// a hot-plug controller (for example, PC Card socket, or PHPC), and ask PCI bus 
/// driver to create or destroy handles for the PCI-like devices.
///
struct _EFI_PCI_HOTPLUG_REQUEST_PROTOCOL {
  ///
  /// Notify the PCI bus driver that some events have happened in a hot-plug 
  /// controller (for example, PC Card socket, or PHPC), and ask PCI bus driver 
  /// to create or destroy handles for the PCI-like devices. See Section 0 for 
  /// a detailed description.
  ///
  EFI_PCI_HOTPLUG_REQUEST_NOTIFY  Notify;
};

extern EFI_GUID gEfiPciHotPlugRequestProtocolGuid;

#endif
