2007-06-15 12:02:42 +02:00
|
|
|
/** @file
|
|
|
|
This file declares Pci Host Bridge Resource Allocation Protocol
|
|
|
|
|
|
|
|
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: PciHostBridgeResourceAllocation.h
|
|
|
|
|
|
|
|
@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_
|
|
|
|
|
2007-06-28 14:23:11 +02:00
|
|
|
#include <PiDxe.h>
|
2007-06-27 09:46:39 +02:00
|
|
|
#include <Protocol/PciRootBridgeIo.h>
|
|
|
|
|
2007-06-15 12:02:42 +02:00
|
|
|
#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
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// 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
|