Add in the 1st version of ECP.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2832 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -0,0 +1,31 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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.c
|
||||
|
||||
Abstract:
|
||||
|
||||
|
||||
--*/
|
||||
|
||||
#include "Tiano.h"
|
||||
|
||||
#include EFI_PROTOCOL_DEFINITION (PciHostBridgeResourceAllocation)
|
||||
|
||||
EFI_GUID gEfiPciHostBridgeResourceAllocationProtocolGuid = EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL_GUID;
|
||||
|
||||
EFI_GUID_STRING
|
||||
(
|
||||
&gEfiPciHostBridgeResourceAllocationProtocolGuid, "PciHostBridgeRresourceAllocation Protocol",
|
||||
"Pci Host Bridge Resource Allocation Protocol"
|
||||
);
|
@ -0,0 +1,364 @@
|
||||
/*++
|
||||
|
||||
Copyright (c) 2004, 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
|
||||
|
||||
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.
|
||||
--*/
|
||||
|
||||
|
||||
|
||||
typedef 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;
|
||||
} EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL;
|
||||
|
||||
extern EFI_GUID gEfiPciHostBridgeResourceAllocationProtocolGuid;
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user