mirror of https://github.com/acidanthera/audk.git
MdeModulePkg: Add generic PciHostBridgeDxe driver.
This driver links to PciHostBridgeLib provided by platform/silicon to produce PciRootBridgeIo and PciHostBridgeResourceAllocation protocol. Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Ruiyu Ni <ruiyu.ni@intel.com> Reviewed-by: Feng Tian <feng.tian@intel.com> git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19658 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
parent
32fa5588ff
commit
4a50cf4ebd
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,252 @@
|
|||
/** @file
|
||||
|
||||
The Header file of the Pci Host Bridge Driver.
|
||||
|
||||
Copyright (c) 1999 - 2016, 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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _PCI_HOST_BRIDGE_H_
|
||||
#define _PCI_HOST_BRIDGE_H_
|
||||
|
||||
|
||||
#include <PiDxe.h>
|
||||
#include <IndustryStandard/Acpi.h>
|
||||
#include <Library/UefiDriverEntryPoint.h>
|
||||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/PciHostBridgeLib.h>
|
||||
#include <Protocol/PciHostBridgeResourceAllocation.h>
|
||||
|
||||
#include "PciRootBridge.h"
|
||||
|
||||
#define PCI_HOST_BRIDGE_SIGNATURE SIGNATURE_32 ('p', 'h', 'b', 'g')
|
||||
typedef struct {
|
||||
UINTN Signature;
|
||||
EFI_HANDLE Handle;
|
||||
LIST_ENTRY RootBridges;
|
||||
BOOLEAN CanRestarted;
|
||||
EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL ResAlloc;
|
||||
} PCI_HOST_BRIDGE_INSTANCE;
|
||||
|
||||
#define PCI_HOST_BRIDGE_FROM_THIS(a) CR (a, PCI_HOST_BRIDGE_INSTANCE, ResAlloc, PCI_HOST_BRIDGE_SIGNATURE)
|
||||
|
||||
//
|
||||
// Driver Entry Point
|
||||
//
|
||||
/**
|
||||
|
||||
Entry point of this driver.
|
||||
|
||||
@param ImageHandle - Image handle of this driver.
|
||||
@param SystemTable - Pointer to standard EFI system table.
|
||||
|
||||
@retval EFI_SUCCESS - Succeed.
|
||||
@retval EFI_DEVICE_ERROR - Fail to install PCI_ROOT_BRIDGE_IO protocol.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
InitializePciHostBridge (
|
||||
IN EFI_HANDLE ImageHandle,
|
||||
IN EFI_SYSTEM_TABLE *SystemTable
|
||||
);
|
||||
|
||||
//
|
||||
// HostBridge Resource Allocation interface
|
||||
//
|
||||
/**
|
||||
|
||||
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 - Succeed.
|
||||
@retval EFI_INVALID_PARAMETER - Wrong phase parameter passed in.
|
||||
@retval EFI_NOT_READY - Resources have not been submitted yet.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
NotifyPhase (
|
||||
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.
|
||||
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 - Succeed.
|
||||
@retval EFI_NOT_FOUND - Next PCI root bridge not found.
|
||||
@retval EFI_INVALID_PARAMETER - Wrong parameter passed in.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetNextRootBridge (
|
||||
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 Attributes - The pointer to attributes of the PCI Root Bridge
|
||||
|
||||
@retval EFI_SUCCESS - Succeed.
|
||||
@retval EFI_INVALID_PARAMETER - Attributes parameter passed in is NULL or
|
||||
@retval RootBridgeHandle is not an EFI_HANDLE
|
||||
@retval that was returned on a previous call to
|
||||
@retval GetNextRootBridge().
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetAttributes (
|
||||
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 - Succeed.
|
||||
@retval EFI_OUT_OF_RESOURCES - Not enough pool to be allocated.
|
||||
@retval EFI_INVALID_PARAMETER - RootBridgeHandle is not a valid handle.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
StartBusEnumeration (
|
||||
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 - Succeed.
|
||||
@retval EFI_INVALID_PARAMETER - Wrong parameters passed in.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SetBusNumbers (
|
||||
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 - Succeed.
|
||||
@retval EFI_INVALID_PARAMETER - Wrong parameters passed in.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
SubmitResources (
|
||||
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 - Succeed.
|
||||
@retval EFI_OUT_OF_RESOURCES - Not enough pool to be allocated.
|
||||
@retval EFI_INVALID_PARAMETER - RootBridgeHandle is not a valid handle.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
GetProposedResources (
|
||||
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 PciAddress - Address of the controller on the PCI bus.
|
||||
@param Phase - The Phase during resource allocation.
|
||||
|
||||
@retval EFI_SUCCESS - Succeed.
|
||||
@retval EFI_INVALID_PARAMETER - RootBridgeHandle is not a valid handle.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
PreprocessController (
|
||||
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
|
||||
);
|
||||
|
||||
/**
|
||||
This routine constructs the resource descriptors for all root bridges and call PciHostBridgeResourceConflict().
|
||||
|
||||
@param HostBridge The Host Bridge Instance where the resource adjustment happens.
|
||||
**/
|
||||
VOID
|
||||
ResourceConflict (
|
||||
IN PCI_HOST_BRIDGE_INSTANCE *HostBridge
|
||||
);
|
||||
|
||||
extern EFI_METRONOME_ARCH_PROTOCOL *mMetronome;
|
||||
extern EFI_CPU_IO2_PROTOCOL *mCpuIo;
|
||||
#endif
|
|
@ -0,0 +1,55 @@
|
|||
## @file
|
||||
# Generic PCI Host Bridge driver.
|
||||
#
|
||||
# Copyright (c) 2009 - 2016, 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.
|
||||
#
|
||||
#
|
||||
##
|
||||
|
||||
[Defines]
|
||||
INF_VERSION = 0x00010005
|
||||
BASE_NAME = PciHostBridgeDxe
|
||||
FILE_GUID = 128FB770-5E79-4176-9E51-9BB268A17DD1
|
||||
MODULE_TYPE = DXE_DRIVER
|
||||
VERSION_STRING = 1.0
|
||||
ENTRY_POINT = InitializePciHostBridge
|
||||
|
||||
[Sources]
|
||||
PciHostBridge.h
|
||||
PciRootBridge.h
|
||||
PciHostBridge.c
|
||||
PciRootBridgeIo.c
|
||||
PciHostResource.h
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
MdeModulePkg/MdeModulePkg.dec
|
||||
|
||||
[LibraryClasses]
|
||||
UefiDriverEntryPoint
|
||||
UefiBootServicesTableLib
|
||||
DebugLib
|
||||
DxeServicesTableLib
|
||||
DevicePathLib
|
||||
BaseMemoryLib
|
||||
BaseLib
|
||||
PciSegmentLib
|
||||
PciHostBridgeLib
|
||||
|
||||
[Protocols]
|
||||
gEfiMetronomeArchProtocolGuid ## CONSUMES
|
||||
gEfiCpuIo2ProtocolGuid ## CONSUMES
|
||||
gEfiDevicePathProtocolGuid ## BY_START
|
||||
gEfiPciRootBridgeIoProtocolGuid ## BY_START
|
||||
gEfiPciHostBridgeResourceAllocationProtocolGuid ## BY_START
|
||||
|
||||
[Depex]
|
||||
gEfiCpuIo2ProtocolGuid AND
|
||||
gEfiMetronomeArchProtocolGuid
|
|
@ -0,0 +1,47 @@
|
|||
/** @file
|
||||
|
||||
The Header file of the Pci Host Bridge Driver.
|
||||
|
||||
Copyright (c) 1999 - 2016, 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.
|
||||
|
||||
**/
|
||||
#ifndef _PCI_HOST_RESOURCE_H_
|
||||
#define _PCI_HOST_RESOURCE_H_
|
||||
|
||||
#include <PiDxe.h>
|
||||
|
||||
#define PCI_RESOURCE_LESS 0xFFFFFFFFFFFFFFFE
|
||||
|
||||
typedef enum {
|
||||
TypeIo = 0,
|
||||
TypeMem32,
|
||||
TypePMem32,
|
||||
TypeMem64,
|
||||
TypePMem64,
|
||||
TypeBus,
|
||||
TypeMax
|
||||
} PCI_RESOURCE_TYPE;
|
||||
|
||||
typedef enum {
|
||||
ResNone,
|
||||
ResSubmitted,
|
||||
ResAllocated,
|
||||
ResStatusMax
|
||||
} RES_STATUS;
|
||||
|
||||
typedef struct {
|
||||
PCI_RESOURCE_TYPE Type;
|
||||
UINT64 Base;
|
||||
UINT64 Length;
|
||||
UINT64 Alignment;
|
||||
RES_STATUS Status;
|
||||
} PCI_RES_NODE;
|
||||
|
||||
#endif
|
|
@ -0,0 +1,568 @@
|
|||
/** @file
|
||||
|
||||
The PCI Root Bridge header file.
|
||||
|
||||
Copyright (c) 1999 - 2016, 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.
|
||||
|
||||
**/
|
||||
|
||||
#ifndef _PCI_ROOT_BRIDGE_H_
|
||||
#define _PCI_ROOT_BRIDGE_H_
|
||||
|
||||
#include <PiDxe.h>
|
||||
#include <IndustryStandard/Acpi.h>
|
||||
#include <IndustryStandard/Pci.h>
|
||||
|
||||
//
|
||||
// Driver Consumed Protocol Prototypes
|
||||
//
|
||||
#include <Protocol/Metronome.h>
|
||||
#include <Protocol/CpuIo2.h>
|
||||
#include <Protocol/DevicePath.h>
|
||||
#include <Protocol/PciRootBridgeIo.h>
|
||||
#include <Library/DebugLib.h>
|
||||
#include <Library/DevicePathLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/DxeServicesTableLib.h>
|
||||
#include <Library/UefiBootServicesTableLib.h>
|
||||
#include <Library/BaseLib.h>
|
||||
#include <Library/PciSegmentLib.h>
|
||||
#include "PciHostResource.h"
|
||||
|
||||
|
||||
typedef enum {
|
||||
IoOperation,
|
||||
MemOperation,
|
||||
PciOperation
|
||||
} OPERATION_TYPE;
|
||||
|
||||
#define MAP_INFO_SIGNATURE SIGNATURE_32 ('_', 'm', 'a', 'p')
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY Link;
|
||||
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation;
|
||||
UINTN NumberOfBytes;
|
||||
UINTN NumberOfPages;
|
||||
EFI_PHYSICAL_ADDRESS HostAddress;
|
||||
EFI_PHYSICAL_ADDRESS MappedHostAddress;
|
||||
} MAP_INFO;
|
||||
#define MAP_INFO_FROM_LINK(a) CR (a, MAP_INFO, Link, MAP_INFO_SIGNATURE)
|
||||
|
||||
#define PCI_ROOT_BRIDGE_SIGNATURE SIGNATURE_32 ('_', 'p', 'r', 'b')
|
||||
|
||||
typedef struct {
|
||||
UINT32 Signature;
|
||||
LIST_ENTRY Link;
|
||||
EFI_HANDLE Handle;
|
||||
UINT64 AllocationAttributes;
|
||||
UINT64 Attributes;
|
||||
UINT64 Supports;
|
||||
PCI_RES_NODE ResAllocNode[TypeMax];
|
||||
PCI_ROOT_BRIDGE_APERTURE Bus;
|
||||
PCI_ROOT_BRIDGE_APERTURE Io;
|
||||
PCI_ROOT_BRIDGE_APERTURE Mem;
|
||||
PCI_ROOT_BRIDGE_APERTURE PMem;
|
||||
PCI_ROOT_BRIDGE_APERTURE MemAbove4G;
|
||||
PCI_ROOT_BRIDGE_APERTURE PMemAbove4G;
|
||||
BOOLEAN DmaAbove4G;
|
||||
VOID *ConfigBuffer;
|
||||
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||||
CHAR16 *DevicePathStr;
|
||||
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL RootBridgeIo;
|
||||
|
||||
BOOLEAN ResourceSubmitted;
|
||||
LIST_ENTRY Maps;
|
||||
} PCI_ROOT_BRIDGE_INSTANCE;
|
||||
|
||||
#define ROOT_BRIDGE_FROM_THIS(a) CR (a, PCI_ROOT_BRIDGE_INSTANCE, RootBridgeIo, PCI_ROOT_BRIDGE_SIGNATURE)
|
||||
|
||||
#define ROOT_BRIDGE_FROM_LINK(a) CR (a, PCI_ROOT_BRIDGE_INSTANCE, Link, PCI_ROOT_BRIDGE_SIGNATURE)
|
||||
|
||||
/**
|
||||
|
||||
Construct the Pci Root Bridge Io protocol.
|
||||
|
||||
@param Protocol - Protocol to initialize.
|
||||
@param HostBridgeHandle - Handle to the HostBridge.
|
||||
|
||||
@retval EFI_SUCCESS - Success.
|
||||
@retval Others - Fail.
|
||||
|
||||
**/
|
||||
PCI_ROOT_BRIDGE_INSTANCE *
|
||||
CreateRootBridge (
|
||||
IN PCI_ROOT_BRIDGE *Bridge,
|
||||
IN EFI_HANDLE HostBridgeHandle
|
||||
);
|
||||
|
||||
//
|
||||
// Protocol Member Function Prototypes
|
||||
//
|
||||
/**
|
||||
|
||||
Poll an address in memory mapped space until an exit condition is met
|
||||
or a timeout occurs.
|
||||
|
||||
@param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
|
||||
@param Width - Width of the memory operation.
|
||||
@param Address - The base address of the memory operation.
|
||||
@param Mask - Mask used for polling criteria.
|
||||
@param Value - Comparison value used for polling exit criteria.
|
||||
@param Delay - Number of 100ns units to poll.
|
||||
@param Result - Pointer to the last value read from memory location.
|
||||
|
||||
@retval EFI_SUCCESS - Success.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameter found.
|
||||
@retval EFI_TIMEOUT - Delay expired before a match occurred.
|
||||
@retval EFI_OUT_OF_RESOURCES - Fail due to lack of resources.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoPollMem (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINT64 Mask,
|
||||
IN UINT64 Value,
|
||||
IN UINT64 Delay,
|
||||
OUT UINT64 *Result
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Poll an address in I/O space until an exit condition is met
|
||||
or a timeout occurs.
|
||||
|
||||
@param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
|
||||
@param Width - Width of I/O operation.
|
||||
@param Address - The base address of the I/O operation.
|
||||
@param Mask - Mask used for polling criteria.
|
||||
@param Value - Comparison value used for polling exit criteria.
|
||||
@param Delay - Number of 100ns units to poll.
|
||||
@param Result - Pointer to the last value read from memory location.
|
||||
|
||||
@retval EFI_SUCCESS - Success.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameter found.
|
||||
@retval EFI_TIMEOUT - Delay expired before a match occurred.
|
||||
@retval EFI_OUT_OF_RESOURCES - Fail due to lack of resources.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoPollIo (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINT64 Mask,
|
||||
IN UINT64 Value,
|
||||
IN UINT64 Delay,
|
||||
OUT UINT64 *Result
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Allow read from memory mapped I/O space.
|
||||
|
||||
@param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
|
||||
@param Width - The width of memory operation.
|
||||
@param Address - Base address of the memory operation.
|
||||
@param Count - Number of memory opeartion to perform.
|
||||
@param Buffer - The destination buffer to store data.
|
||||
|
||||
@retval EFI_SUCCESS - Success.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameter found.
|
||||
@retval EFI_OUT_OF_RESOURCES - Fail due to lack of resources.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoMemRead (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN OUT VOID *Buffer
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Allow write to memory mapped I/O space.
|
||||
|
||||
@param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
|
||||
@param Width - The width of memory operation.
|
||||
@param Address - Base address of the memory operation.
|
||||
@param Count - Number of memory opeartion to perform.
|
||||
@param Buffer - The source buffer to write data from.
|
||||
|
||||
@retval EFI_SUCCESS - Success.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameter found.
|
||||
@retval EFI_OUT_OF_RESOURCES - Fail due to lack of resources.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoMemWrite (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN OUT VOID *Buffer
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Enable a PCI driver to read PCI controller registers in the
|
||||
PCI root bridge I/O space.
|
||||
|
||||
@param This - A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
|
||||
@param Width - Signifies the width of the memory operation.
|
||||
@param UserAddress - The base address of the I/O operation.
|
||||
@param Count - The number of I/O operations to perform.
|
||||
@param UserBuffer - The destination buffer to store the results.
|
||||
|
||||
@retval EFI_SUCCESS - The data was read from the PCI root bridge.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameters found.
|
||||
@retval EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of
|
||||
@retval resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoIoRead (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT64 UserAddress,
|
||||
IN UINTN Count,
|
||||
IN OUT VOID *UserBuffer
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Enable a PCI driver to write to PCI controller registers in the
|
||||
PCI root bridge I/O space.
|
||||
|
||||
@param This - A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
|
||||
@param Width - Signifies the width of the memory operation.
|
||||
@param UserAddress - The base address of the I/O operation.
|
||||
@param Count - The number of I/O operations to perform.
|
||||
@param UserBuffer - The source buffer to write data from.
|
||||
|
||||
@retval EFI_SUCCESS - The data was written to the PCI root bridge.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameters found.
|
||||
@retval EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of
|
||||
@retval resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoIoWrite (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT64 UserAddress,
|
||||
IN UINTN Count,
|
||||
IN OUT VOID *UserBuffer
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Copy one region of PCI root bridge memory space to be copied to
|
||||
another region of PCI root bridge memory space.
|
||||
|
||||
@param This - A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
|
||||
@param Width - Signifies the width of the memory operation.
|
||||
@param DestAddress - Destination address of the memory operation.
|
||||
@param SrcAddress - Source address of the memory operation.
|
||||
@param Count - Number of memory operations to perform.
|
||||
|
||||
@retval EFI_SUCCESS - The data was copied successfully.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameters found.
|
||||
@retval EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of
|
||||
@retval resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoCopyMem (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT64 DestAddress,
|
||||
IN UINT64 SrcAddress,
|
||||
IN UINTN Count
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Allows read from PCI configuration space.
|
||||
|
||||
@param This - A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
|
||||
@param Width - Signifies the width of the memory operation.
|
||||
@param Address - The address within the PCI configuration space
|
||||
for the PCI controller.
|
||||
@param Count - The number of PCI configuration operations
|
||||
to perform.
|
||||
@param Buffer - The destination buffer to store the results.
|
||||
|
||||
@retval EFI_SUCCESS - The data was read from the PCI root bridge.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameters found.
|
||||
@retval EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of
|
||||
@retval resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoPciRead (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN OUT VOID *Buffer
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Allows write to PCI configuration space.
|
||||
|
||||
@param This - A pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
|
||||
@param Width - Signifies the width of the memory operation.
|
||||
@param Address - The address within the PCI configuration space
|
||||
for the PCI controller.
|
||||
@param Count - The number of PCI configuration operations
|
||||
to perform.
|
||||
@param Buffer - The source buffer to get the results.
|
||||
|
||||
@retval EFI_SUCCESS - The data was written to the PCI root bridge.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameters found.
|
||||
@retval EFI_OUT_OF_RESOURCES - The request could not be completed due to a lack of
|
||||
@retval resources.
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoPciWrite (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_WIDTH Width,
|
||||
IN UINT64 Address,
|
||||
IN UINTN Count,
|
||||
IN OUT VOID *Buffer
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Provides the PCI controller-specific address needed to access
|
||||
system memory for DMA.
|
||||
|
||||
@param This - A pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL.
|
||||
@param Operation - Indicate if the bus master is going to read or write
|
||||
to system memory.
|
||||
@param HostAddress - The system memory address to map on the PCI controller.
|
||||
@param NumberOfBytes - On input the number of bytes to map.
|
||||
On output the number of bytes that were mapped.
|
||||
@param DeviceAddress - The resulting map address for the bus master PCI
|
||||
controller to use to access the system memory's HostAddress.
|
||||
@param Mapping - The value to pass to Unmap() when the bus master DMA
|
||||
operation is complete.
|
||||
|
||||
@retval EFI_SUCCESS - Success.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameters found.
|
||||
@retval EFI_UNSUPPORTED - The HostAddress cannot be mapped as a common
|
||||
@retval buffer.
|
||||
@retval EFI_DEVICE_ERROR - The System hardware could not map the requested
|
||||
@retval address.
|
||||
@retval EFI_OUT_OF_RESOURCES - The request could not be completed due to
|
||||
@retval lack of resources.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoMap (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_OPERATION Operation,
|
||||
IN VOID *HostAddress,
|
||||
IN OUT UINTN *NumberOfBytes,
|
||||
OUT EFI_PHYSICAL_ADDRESS *DeviceAddress,
|
||||
OUT VOID **Mapping
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Completes the Map() operation and releases any corresponding resources.
|
||||
|
||||
@param This - Pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
|
||||
Mapping - The value returned from Map() operation.
|
||||
|
||||
@retval EFI_SUCCESS - The range was unmapped successfully.
|
||||
@retval EFI_INVALID_PARAMETER - Mapping is not a value that was returned
|
||||
@retval by Map operation.
|
||||
@retval EFI_DEVICE_ERROR - The data was not committed to the target
|
||||
@retval system memory.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoUnmap (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN VOID *Mapping
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Allocates pages that are suitable for a common buffer mapping.
|
||||
|
||||
@param This - Pointer to EFI_ROOT_BRIDGE_IO_PROTOCOL instance.
|
||||
@param Type - Not used and can be ignored.
|
||||
@param MemoryType - Type of memory to allocate.
|
||||
@param Pages - Number of pages to allocate.
|
||||
@param HostAddress - Pointer to store the base system memory address
|
||||
of the allocated range.
|
||||
@param Attributes - Requested bit mask of attributes of the allocated
|
||||
range.
|
||||
|
||||
@retval EFI_SUCCESS - The requested memory range were allocated.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameter found.
|
||||
@retval EFI_UNSUPPORTED - Attributes is unsupported.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoAllocateBuffer (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN EFI_ALLOCATE_TYPE Type,
|
||||
IN EFI_MEMORY_TYPE MemoryType,
|
||||
IN UINTN Pages,
|
||||
OUT VOID **HostAddress,
|
||||
IN UINT64 Attributes
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Free memory allocated in AllocateBuffer.
|
||||
|
||||
@param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
|
||||
instance.
|
||||
@param Pages - Number of pages to free.
|
||||
@param HostAddress - The base system memory address of the
|
||||
allocated range.
|
||||
|
||||
@retval EFI_SUCCESS - Requested memory pages were freed.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameter found.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoFreeBuffer (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN UINTN Pages,
|
||||
OUT VOID *HostAddress
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Flushes all PCI posted write transactions from a PCI host
|
||||
bridge to system memory.
|
||||
|
||||
@param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
|
||||
|
||||
@retval EFI_SUCCESS - PCI posted write transactions were flushed
|
||||
@retval from PCI host bridge to system memory.
|
||||
@retval EFI_DEVICE_ERROR - Fail due to hardware error.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoFlush (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Get the attributes that a PCI root bridge supports and
|
||||
the attributes the PCI root bridge is currently using.
|
||||
|
||||
@param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL
|
||||
instance.
|
||||
@param Supports - A pointer to the mask of attributes that
|
||||
this PCI root bridge supports.
|
||||
@param Attributes - A pointer to the mask of attributes that
|
||||
this PCI root bridge is currently using.
|
||||
@retval EFI_SUCCESS - Success.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameter found.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoGetAttributes (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
OUT UINT64 *Supported,
|
||||
OUT UINT64 *Attributes
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Sets the attributes for a resource range on a PCI root bridge.
|
||||
|
||||
@param This - Pointer to EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
|
||||
@param Attributes - The mask of attributes to set.
|
||||
@param ResourceBase - Pointer to the base address of the resource range
|
||||
to be modified by the attributes specified by Attributes.
|
||||
@param ResourceLength - Pointer to the length of the resource range to be modified.
|
||||
|
||||
@retval EFI_SUCCESS - Success.
|
||||
@retval EFI_INVALID_PARAMETER - Invalid parameter found.
|
||||
@retval EFI_OUT_OF_RESOURCES - Not enough resources to set the attributes upon.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoSetAttributes (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
IN UINT64 Attributes,
|
||||
IN OUT UINT64 *ResourceBase,
|
||||
IN OUT UINT64 *ResourceLength
|
||||
)
|
||||
;
|
||||
|
||||
/**
|
||||
|
||||
Retrieves the current resource settings of this PCI root bridge
|
||||
in the form of a set of ACPI 2.0 resource descriptor.
|
||||
|
||||
@param This - Pointer to the EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL instance.
|
||||
@param Resources - Pointer to the ACPI 2.0 resource descriptor that
|
||||
describe the current configuration of this PCI root
|
||||
bridge.
|
||||
|
||||
@retval EFI_SUCCESS - Success.
|
||||
@retval EFI_UNSUPPORTED - Current configuration of the PCI root bridge
|
||||
@retval could not be retrieved.
|
||||
|
||||
**/
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
RootBridgeIoConfiguration (
|
||||
IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *This,
|
||||
OUT VOID **Resources
|
||||
)
|
||||
;
|
||||
|
||||
|
||||
extern EFI_METRONOME_ARCH_PROTOCOL *mMetronome;
|
||||
extern EFI_CPU_IO2_PROTOCOL *mCpuIo;
|
||||
#endif
|
File diff suppressed because it is too large
Load Diff
|
@ -43,6 +43,7 @@
|
|||
IoLib|MdePkg/Library/BaseIoLibIntrinsic/BaseIoLibIntrinsic.inf
|
||||
PciLib|MdePkg/Library/BasePciLibCf8/BasePciLibCf8.inf
|
||||
PciCf8Lib|MdePkg/Library/BasePciCf8Lib/BasePciCf8Lib.inf
|
||||
PciSegmentLib|MdePkg/Library/BasePciSegmentLibPci/BasePciSegmentLibPci.inf
|
||||
CacheMaintenanceLib|MdePkg/Library/BaseCacheMaintenanceLib/BaseCacheMaintenanceLib.inf
|
||||
PeCoffLib|MdePkg/Library/BasePeCoffLib/BasePeCoffLib.inf
|
||||
PeCoffGetEntryPointLib|MdePkg/Library/BasePeCoffGetEntryPointLib/BasePeCoffGetEntryPointLib.inf
|
||||
|
@ -209,6 +210,7 @@
|
|||
MdeModulePkg/Application/HelloWorld/HelloWorld.inf
|
||||
MdeModulePkg/Application/MemoryProfileInfo/MemoryProfileInfo.inf
|
||||
|
||||
MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciHostBridgeDxe.inf
|
||||
MdeModulePkg/Bus/Pci/PciSioSerialDxe/PciSioSerialDxe.inf
|
||||
MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf
|
||||
MdeModulePkg/Bus/Pci/IncompatiblePciDeviceSupportDxe/IncompatiblePciDeviceSupportDxe.inf
|
||||
|
|
Loading…
Reference in New Issue