/** @file
Copyright (c) 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include
#include
#include
#include
#include
#include
#include
USRA_PROTOCOL *mPciUsra = NULL;
/**
The constructor function initialize UsraProtocol.
@retval EFI_SUCCESS The constructor always returns EFI_SUCCESS.
**/
EFI_STATUS
EFIAPI
DxeMmPciLibConstructor (
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;
if (mPciUsra == NULL)
{
//
// USRA protocol need to be installed before the module access USRA.
//
Status = gBS->LocateProtocol (&gUsraProtocolGuid, NULL, (VOID **)&mPciUsra);
ASSERT_EFI_ERROR (Status);
ASSERT (mPciUsra != NULL);
}
return EFI_SUCCESS;
}
/**
This procedure will get PCIE address
@param[in] Bus Pci Bus Number
@param[in] Device Pci Device Number
@param[in] Function Pci Function Number
@retval PCIE address
**/
UINTN
MmPciBase (
IN UINT32 Bus,
IN UINT32 Device,
IN UINT32 Function
)
{
USRA_ADDRESS Address;
USRA_PCIE_ADDRESS(Address, UsraWidth32, Bus, Device, Function, 0);
return mPciUsra->GetRegAddr (&Address);
}
/**
This procedure will get PCIE address
@param[in] Seg Pcie Segment Number
@param[in] Bus Pcie Bus Number
@param[in] Device Pcie Device Number
@param[in] Function Pcie Function Number
@retval PCIE address
**/
UINTN
MmPciAddress(
IN UINT32 Seg,
IN UINT32 Bus,
IN UINT32 Device,
IN UINT32 Function,
IN UINT32 Register
)
{
USRA_ADDRESS Address;
USRA_PCIE_SEG_ADDRESS(Address, UsraWidth32, Seg, Bus, Device, Function, Register);
return mPciUsra->GetRegAddr (&Address);
}