/** @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); }