git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10435 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			365 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			365 lines
		
	
	
		
			13 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/*++
 | 
						|
 | 
						|
Copyright (c) 2004, 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.             
 | 
						|
 | 
						|
Module Name:
 | 
						|
 | 
						|
  PciHostBridgeResourceAllocation.h
 | 
						|
 | 
						|
Abstract:
 | 
						|
 | 
						|
 | 
						|
--*/
 | 
						|
 | 
						|
#ifndef _PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_H_
 | 
						|
#define _PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_H_
 | 
						|
 | 
						|
#include "Tiano.h"
 | 
						|
#include EFI_PROTOCOL_DEFINITION(PciRootBridgeIo)
 | 
						|
 | 
						|
 | 
						|
#define EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GUID \
 | 
						|
  { 0xCF8034BE,0x6768,0x4d8b,{0xB7,0x39,0x7C,0xCE,0x68,0x3A,0x9F,0xBE} }
 | 
						|
 | 
						|
 | 
						|
EFI_FORWARD_DECLARATION (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
 | 
						|
 | 
						|
 | 
						|
//
 | 
						|
// 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.
 | 
						|
//
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
  );
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  Enter a certain phase of the PCI enumeration process
 | 
						|
 | 
						|
Arguments:
 | 
						|
  This  -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL instance
 | 
						|
  Phase -- The phase during enumeration
 | 
						|
    
 | 
						|
Returns:
 | 
						|
  EFI_SUCCESS - Success
 | 
						|
  EFI_OUT_OF_RESOURCES - If SubmitResources ( ) could not allocate resources
 | 
						|
  EFI_NOT_READY        - This phase cannot be entered at this time
 | 
						|
  EFI_DEVICE_ERROR     - SetResources failed due to HW error.
 | 
						|
 | 
						|
--*/  
 | 
						|
 | 
						|
  
 | 
						|
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
 | 
						|
  );
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  Return the device handle of the next PCI root bridge that is associated with 
 | 
						|
  this Host Bridge
 | 
						|
 | 
						|
Arguments:
 | 
						|
  This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  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
 | 
						|
    
 | 
						|
Returns:
 | 
						|
  EFI_SUCCESS - Success
 | 
						|
  EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
 | 
						|
 | 
						|
--*/  
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
  );
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  Returns the attributes of a PCI Root Bridge.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  RootBridgeHandle -- The device handle of the PCI Root Bridge 
 | 
						|
                      that the caller is interested in
 | 
						|
  Attribute -- The pointer to attributes of the PCI Root Bridge                    
 | 
						|
    
 | 
						|
Returns:
 | 
						|
  EFI_SUCCESS - Success
 | 
						|
  EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
 | 
						|
  EFI_INVALID_PARAMETER - Attributes is NULL
 | 
						|
 | 
						|
--*/    
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
  );
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  This is the request from the PCI enumerator to set up 
 | 
						|
  the specified PCI Root Bridge for bus enumeration process. 
 | 
						|
 | 
						|
Arguments:
 | 
						|
  This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  RootBridgeHandle -- The PCI Root Bridge to be set up
 | 
						|
  Configuration -- Pointer to the pointer to the PCI bus resource descriptor
 | 
						|
    
 | 
						|
Returns:
 | 
						|
  EFI_SUCCESS - Success
 | 
						|
  EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
 | 
						|
  EFI_DEVICE_ERROR      - Request failed due to hardware error
 | 
						|
  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
 | 
						|
  );
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  This function programs the PCI Root Bridge hardware so that 
 | 
						|
  it decodes the specified PCI bus range
 | 
						|
 | 
						|
Arguments:
 | 
						|
  This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  RootBridgeHandle -- The PCI Root Bridge whose bus range is to be programmed
 | 
						|
  Configuration -- The pointer to the PCI bus resource descriptor
 | 
						|
    
 | 
						|
Returns:
 | 
						|
  EFI_SUCCESS - Success
 | 
						|
  EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
 | 
						|
  EFI_INVALID_PARAMETER - Configuration is NULL
 | 
						|
  EFI_INVALID_PARAMETER - Configuration does not point to a valid ACPI resource descriptor
 | 
						|
  EFI_INVALID_PARAMETER - Configuration contains one or more memory or IO ACPI resource descriptor
 | 
						|
  EFI_INVALID_PARAMETER - Address Range Minimum or Address Range Length fields in Configuration 
 | 
						|
                          are invalid for this Root Bridge.
 | 
						|
  EFI_INVALID_PARAMETER - Configuration contains one or more invalid ACPI resource descriptor
 | 
						|
  EFI_DEVICE_ERROR      - Request failed due to hardware error
 | 
						|
  EFI_OUT_OF_RESOURCES  - Request failed due to lack of resources
 | 
						|
 | 
						|
--*/    
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
  );
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  Submits the I/O and memory resource requirements for the specified PCI Root Bridge
 | 
						|
  
 | 
						|
Arguments:
 | 
						|
  This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  RootBridgeHandle -- The PCI Root Bridge whose I/O and memory resource requirements 
 | 
						|
                      are being submitted
 | 
						|
  Configuration -- The pointer to the PCI I/O and PCI memory resource descriptor                    
 | 
						|
Returns:
 | 
						|
  EFI_SUCCESS - Success
 | 
						|
  EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
 | 
						|
  EFI_INVALID_PARAMETER - Configuration is NULL
 | 
						|
  EFI_INVALID_PARAMETER - Configuration does not point to a valid ACPI resource descriptor
 | 
						|
  EFI_INVALID_PARAMETER - Configuration includes a resource descriptor of unsupported type
 | 
						|
 | 
						|
--*/    
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
  );
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  This function returns the proposed resource settings for the specified 
 | 
						|
  PCI Root Bridge
 | 
						|
 | 
						|
Arguments:
 | 
						|
  This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  RootBridgeHandle -- The PCI Root Bridge handle
 | 
						|
  Configuration -- The pointer to the pointer to the PCI I/O 
 | 
						|
                   and memory resource descriptor
 | 
						|
    
 | 
						|
Returns:
 | 
						|
  EFI_SUCCESS - Success
 | 
						|
  EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
 | 
						|
  EFI_DEVICE_ERROR      - Request failed due to hardware error
 | 
						|
  EFI_OUT_OF_RESOURCES  - Request failed due to lack of resources
 | 
						|
 | 
						|
--*/    
 | 
						|
 | 
						|
 | 
						|
 | 
						|
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
 | 
						|
  );
 | 
						|
/*++
 | 
						|
 | 
						|
Routine Description:
 | 
						|
  This function is called for all the PCI controllers that the PCI 
 | 
						|
  bus driver finds. Can be used to Preprogram the controller.
 | 
						|
 | 
						|
Arguments:
 | 
						|
  This -- The EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_ PROTOCOL instance
 | 
						|
  RootBridgeHandle -- The PCI Root Bridge handle
 | 
						|
  PciBusAddress -- Address of the controller on the PCI bus
 | 
						|
  Phase         -- The Phase during resource allocation
 | 
						|
    
 | 
						|
Returns:
 | 
						|
  EFI_SUCCESS - Success
 | 
						|
  EFI_INVALID_PARAMETER - RootBridgeHandle is invalid
 | 
						|
  EFI_DEVICE_ERROR      - Device pre-initialization failed due to hardware error.
 | 
						|
--*/    
 | 
						|
 | 
						|
 | 
						|
 | 
						|
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
 |