git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@7543 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			375 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			375 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/** @file
 | 
						|
  This file declares Pci Host Bridge Resource Allocation Protocol which 
 | 
						|
  Provides the basic interfaces to abstract a PCI host bridge resource allocation. This protocol is
 | 
						|
  mandatory if the system includes PCI devices.
 | 
						|
  
 | 
						|
  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.
 | 
						|
 | 
						|
  @par Revision Reference:
 | 
						|
  This protocol is defined in Framework of EFI Pci Host Bridge Resource Allocation Protocol Spec
 | 
						|
  Version 0.9
 | 
						|
 | 
						|
**/
 | 
						|
 | 
						|
#ifndef _PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_H_
 | 
						|
#define _PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_H_
 | 
						|
 | 
						|
#include <PiDxe.h>
 | 
						|
#include <Protocol/PciRootBridgeIo.h>
 | 
						|
 | 
						|
#define EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GUID \
 | 
						|
  { 0xCF8034BE, 0x6768, 0x4d8b, {0xB7,0x39,0x7C,0xCE,0x68,0x3A,0x9F,0xBE }}
 | 
						|
 | 
						|
 | 
						|
typedef struct _EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL;
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ATTRIBUTES
 | 
						|
//
 | 
						|
 | 
						|
// If this bit is set, then the PCI Root Bridge does not
 | 
						|
// support separate windows for Non-prefetchable and Prefetchable
 | 
						|
// memory. A PCI bus driver needs to include requests for Prefetchable
 | 
						|
// memory in the Non-prefetchable memory pool.
 | 
						|
//
 | 
						|
#define EFI_PCI_HOST_BRIDGE_COMBINE_MEM_PMEM  1
 | 
						|
 | 
						|
//
 | 
						|
// If this bit is set, then the PCI Root Bridge supports
 | 
						|
// 64 bit memory windows.  If this bit is not set,
 | 
						|
// the PCI bus driver needs to include requests for 64 bit
 | 
						|
// memory address in the corresponding 32 bit memory pool.
 | 
						|
//
 | 
						|
#define EFI_PCI_HOST_BRIDGE_MEM64_DECODE   2
 | 
						|
 | 
						|
typedef UINT64 EFI_RESOURCE_ALLOCATION_STATUS;
 | 
						|
 | 
						|
/// The request of this resource type could be fulfilled.
 | 
						|
#define EFI_RESOURCE_SATISFIED      0x0000000000000000ULL
 | 
						|
 | 
						|
/// The request of this resource type could not be fulfilled for its
 | 
						|
/// absence in the host bridge resource pool.
 | 
						|
#define EFI_RESOURCE_NOT_SATISFIED  0xFFFFFFFFFFFFFFFFULL
 | 
						|
 | 
						|
//
 | 
						|
// EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE
 | 
						|
//
 | 
						|
typedef enum {
 | 
						|
  EfiPciHostBridgeBeginEnumeration,
 | 
						|
  EfiPciHostBridgeBeginBusAllocation,
 | 
						|
  EfiPciHostBridgeEndBusAllocation,
 | 
						|
  EfiPciHostBridgeBeginResourceAllocation,
 | 
						|
  EfiPciHostBridgeAllocateResources,
 | 
						|
  EfiPciHostBridgeSetResources,
 | 
						|
  EfiPciHostBridgeFreeResources,
 | 
						|
  EfiPciHostBridgeEndResourceAllocation
 | 
						|
} EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE;
 | 
						|
 | 
						|
//
 | 
						|
// EfiPciHostBridgeBeginEnumeration
 | 
						|
// Reset the host bridge PCI apertures and internal data structures.
 | 
						|
// PCI enumerator should issue this notification before starting fresh
 | 
						|
// enumeration process. Enumeration cannot be restarted after sending
 | 
						|
// any other notification such as EfiPciHostBridgeBeginBusAllocation.
 | 
						|
//
 | 
						|
// EfiPciHostBridgeBeginBusAllocation
 | 
						|
// The bus allocation phase is about to begin. No specific action
 | 
						|
// is required here. This notification can be used to perform any
 | 
						|
// chipset specific programming.
 | 
						|
//
 | 
						|
// EfiPciHostBridgeEndBusAllocation
 | 
						|
// The bus allocation and bus programming phase is complete. No specific
 | 
						|
// action is required here. This notification can be used to perform any
 | 
						|
// chipset specific programming.
 | 
						|
//
 | 
						|
// EfiPciHostBridgeBeginResourceAllocation
 | 
						|
// The resource allocation phase is about to begin.No specific action is
 | 
						|
// required here. This notification can be used to perform any chipset specific programming.
 | 
						|
//
 | 
						|
// EfiPciHostBridgeAllocateResources
 | 
						|
// Allocate resources per previously submitted requests for all the PCI Root
 | 
						|
// Bridges. These resource settings are returned on the next call to
 | 
						|
// GetProposedResources().
 | 
						|
//
 | 
						|
// EfiPciHostBridgeSetResources
 | 
						|
// Program the Host Bridge hardware to decode previously allocated resources
 | 
						|
// (proposed resources) for all the PCI Root Bridges.
 | 
						|
//
 | 
						|
// EfiPciHostBridgeFreeResources
 | 
						|
// De-allocate previously allocated resources previously for all the PCI
 | 
						|
// Root Bridges and reset the I/O and memory apertures to initial state.
 | 
						|
//
 | 
						|
// EfiPciHostBridgeEndResourceAllocation
 | 
						|
// The resource allocation phase is completed.  No specific action is required
 | 
						|
// here. This notification can be used to perform any chipset specific programming.
 | 
						|
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE
 | 
						|
//
 | 
						|
typedef enum {
 | 
						|
  EfiPciBeforeChildBusEnumeration,
 | 
						|
  EfiPciBeforeResourceCollection
 | 
						|
} EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE;
 | 
						|
 | 
						|
//
 | 
						|
// EfiPciBeforeChildBusEnumeration
 | 
						|
// This notification is only applicable to PCI-PCI bridges and
 | 
						|
// indicates that the PCI enumerator is about to begin enumerating
 | 
						|
// the bus behind the PCI-PCI Bridge. This notification is sent after
 | 
						|
// the primary bus number, the secondary bus number and the subordinate
 | 
						|
// bus number registers in the PCI-PCI Bridge are programmed to valid
 | 
						|
// (not necessary final) values
 | 
						|
//
 | 
						|
// EfiPciBeforeResourceCollection
 | 
						|
// This notification is sent before the PCI enumerator probes BAR registers
 | 
						|
// for every valid PCI function.
 | 
						|
//
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Enter a certain phase of the PCI enumeration process
 | 
						|
 | 
						|
  @param  This                  The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL instance
 | 
						|
  @param  Phase                 The phase during enumeration
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Success
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  If SubmitResources ( ) could not allocate resources
 | 
						|
  @retval EFI_NOT_READY         This phase cannot be entered at this time
 | 
						|
  @retval EFI_DEVICE_ERROR      SetResources failed due to HW error.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_NOTIFY_PHASE)(
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL         *This,
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE            Phase
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Return the device handle of the next PCI root bridge that is associated with
 | 
						|
  this Host Bridge
 | 
						|
 | 
						|
  @param  This                  The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  @param  RootBridgeHandle      Returns the device handle of the next PCI Root Bridge.
 | 
						|
                                On input, it holds the RootBridgeHandle returned by the most
 | 
						|
                                recent call to GetNextRootBridge().The handle for the first
 | 
						|
                                PCI Root Bridge is returned if RootBridgeHandle is NULL on input
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Success
 | 
						|
  @retval EFI_INVALID_PARAMETER RootBridgeHandle is invalid
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_NEXT_ROOT_BRIDGE)(
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL     *This,
 | 
						|
  IN OUT EFI_HANDLE                                       *RootBridgeHandle
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Returns the attributes of a PCI Root Bridge.
 | 
						|
 | 
						|
  @param  This                  The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  @param  RootBridgeHandle      The device handle of the PCI Root Bridge
 | 
						|
                                that the caller is interested in
 | 
						|
  @param  Attribute             The pointer to attributes of the PCI Root Bridge
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Success
 | 
						|
  @retval EFI_INVALID_PARAMETER RootBridgeHandle is invalid
 | 
						|
  @retval EFI_INVALID_PARAMETER Attributes is NULL
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_ATTRIBUTES)(
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL           *This,
 | 
						|
  IN  EFI_HANDLE                                                RootBridgeHandle,
 | 
						|
  OUT UINT64                                                    *Attributes
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This is the request from the PCI enumerator to set up
 | 
						|
  the specified PCI Root Bridge for bus enumeration process.
 | 
						|
 | 
						|
  @param  This                  The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  @param  RootBridgeHandle      The PCI Root Bridge to be set up
 | 
						|
  @param  Configuration         Pointer to the pointer to the PCI bus resource descriptor
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Success
 | 
						|
  @retval EFI_INVALID_PARAMETER RootBridgeHandle is invalid
 | 
						|
  @retval EFI_DEVICE_ERROR      Request failed due to hardware error
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  Request failed due to lack of resources
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_START_BUS_ENUMERATION)(
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL           *This,
 | 
						|
  IN  EFI_HANDLE                                                RootBridgeHandle,
 | 
						|
  OUT VOID                                                      **Configuration
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This function programs the PCI Root Bridge hardware so that
 | 
						|
  it decodes the specified PCI bus range
 | 
						|
 | 
						|
  @param  This                  The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  @param  RootBridgeHandle      The PCI Root Bridge whose bus range is to be programmed
 | 
						|
  @param  Configuration         The pointer to the PCI bus resource descriptor
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Success
 | 
						|
  @retval EFI_INVALID_PARAMETER RootBridgeHandle is invalid
 | 
						|
  @retval EFI_INVALID_PARAMETER Configuration is NULL
 | 
						|
  @retval EFI_INVALID_PARAMETER Configuration does not point to a valid ACPI resource descriptor
 | 
						|
  @retval EFI_INVALID_PARAMETER Configuration contains one or more memory or IO ACPI resource descriptor
 | 
						|
  @retval EFI_INVALID_PARAMETER Address Range Minimum or Address Range Length fields in Configuration
 | 
						|
                                are invalid for this Root Bridge.
 | 
						|
  @retval EFI_INVALID_PARAMETER Configuration contains one or more invalid ACPI resource descriptor
 | 
						|
  @retval EFI_DEVICE_ERROR      Request failed due to hardware error
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  Request failed due to lack of resources
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SET_BUS_NUMBERS)(
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL          *This,
 | 
						|
  IN EFI_HANDLE                                                RootBridgeHandle,
 | 
						|
  IN VOID                                                      *Configuration
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  Submits the I/O and memory resource requirements for the specified PCI Root Bridge
 | 
						|
 | 
						|
  @param  This                  The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  @param  RootBridgeHandle      The PCI Root Bridge whose I/O and memory resource requirements
 | 
						|
                                are being submitted
 | 
						|
  @param  Configuration         The pointer to the PCI I/O and PCI memory resource descriptor
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Success
 | 
						|
  @retval EFI_INVALID_PARAMETER RootBridgeHandle is invalid
 | 
						|
  @retval EFI_INVALID_PARAMETER Configuration is NULL
 | 
						|
  @retval EFI_INVALID_PARAMETER Configuration does not point to a valid ACPI resource descriptor
 | 
						|
  @retval EFI_INVALID_PARAMETER Configuration includes a resource descriptor of unsupported type
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SUBMIT_RESOURCES)(
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL          *This,
 | 
						|
  IN EFI_HANDLE                                                RootBridgeHandle,
 | 
						|
  IN VOID                                                      *Configuration
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This function returns the proposed resource settings for the specified
 | 
						|
  PCI Root Bridge
 | 
						|
 | 
						|
  @param  This                  The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  @param  RootBridgeHandle      The PCI Root Bridge handle
 | 
						|
  @param  Configuration         The pointer to the pointer to the PCI I/O
 | 
						|
                                and memory resource descriptor
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Success
 | 
						|
  @retval EFI_INVALID_PARAMETER RootBridgeHandle is invalid
 | 
						|
  @retval EFI_DEVICE_ERROR      Request failed due to hardware error
 | 
						|
  @retval EFI_OUT_OF_RESOURCES  Request failed due to lack of resources
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_PROPOSED_RESOURCES)(
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL           *This,
 | 
						|
  IN  EFI_HANDLE                                                RootBridgeHandle,
 | 
						|
  OUT VOID                                                      **Configuration
 | 
						|
  );
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
  This function is called for all the PCI controllers that the PCI
 | 
						|
  bus driver finds. Can be used to Preprogram the controller.
 | 
						|
 | 
						|
  @param  This                  The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  @param  RootBridgeHandle      The PCI Root Bridge handle
 | 
						|
  @param  PciBusAddress         Address of the controller on the PCI bus
 | 
						|
  @param  Phase                 The Phase during resource allocation
 | 
						|
 | 
						|
  @retval EFI_SUCCESS           Success
 | 
						|
  @retval EFI_INVALID_PARAMETER RootBridgeHandle is invalid
 | 
						|
  @retval EFI_DEVICE_ERROR      Device pre-initialization failed due to hardware error.
 | 
						|
 | 
						|
**/
 | 
						|
typedef
 | 
						|
EFI_STATUS
 | 
						|
(EFIAPI *EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_PREPROCESS_CONTROLLER)(
 | 
						|
  IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL            *This,
 | 
						|
  IN  EFI_HANDLE                                                 RootBridgeHandle,
 | 
						|
  IN  EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_PCI_ADDRESS                PciAddress,
 | 
						|
  IN  EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE               Phase
 | 
						|
  );
 | 
						|
 | 
						|
/**
 | 
						|
  @par Protocol Description:
 | 
						|
  Provides the basic interfaces to abstract a PCI host bridge resource allocation.
 | 
						|
 | 
						|
  @param NotifyPhase
 | 
						|
  The notification from the PCI bus enumerator that it is about to enter
 | 
						|
  a certain phase during the enumeration process.
 | 
						|
 | 
						|
  @param GetNextRootBridge
 | 
						|
  Retrieves the device handle for the next PCI root bridge that is produced by the
 | 
						|
  host bridge to which this instance of the EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL is attached.
 | 
						|
 | 
						|
  @param GetAllocAttributes
 | 
						|
  Retrieves the allocation-related attributes of a PCI root bridge.
 | 
						|
 | 
						|
  @param StartBusEnumeration
 | 
						|
  Sets up a PCI root bridge for bus enumeration.
 | 
						|
 | 
						|
  @param SetBusNumbers
 | 
						|
  Sets up the PCI root bridge so that it decodes a specific range of bus numbers.
 | 
						|
 | 
						|
  @param SubmitResources
 | 
						|
  Submits the resource requirements for the specified PCI root bridge.
 | 
						|
 | 
						|
  @param GetProposedResources
 | 
						|
  Returns the proposed resource assignment for the specified PCI root bridges.
 | 
						|
 | 
						|
  @param PreprocessController
 | 
						|
  Provides hooks from the PCI bus driver to every PCI controller
 | 
						|
  (device/function) at various stages of the PCI enumeration process that
 | 
						|
  allow the host bridge driver to preinitialize individual PCI controllers
 | 
						|
  before enumeration.
 | 
						|
 | 
						|
**/
 | 
						|
struct _EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL {
 | 
						|
  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_NOTIFY_PHASE           NotifyPhase;
 | 
						|
  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_NEXT_ROOT_BRIDGE   GetNextRootBridge;
 | 
						|
  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_ATTRIBUTES         GetAllocAttributes;
 | 
						|
  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_START_BUS_ENUMERATION  StartBusEnumeration;
 | 
						|
  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SET_BUS_NUMBERS        SetBusNumbers;
 | 
						|
  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_SUBMIT_RESOURCES       SubmitResources;
 | 
						|
  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GET_PROPOSED_RESOURCES GetProposedResources;
 | 
						|
  EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_PREPROCESS_CONTROLLER  PreprocessController;
 | 
						|
};
 | 
						|
 | 
						|
extern EFI_GUID gEfiPciHostBridgeResourceAllocationProtocolGuid;
 | 
						|
 | 
						|
#endif
 |