/** @file
Copyright (c) 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include
#include "PciPlatform.h"
#include
#ifdef EFI_PCI_IOV_SUPPORT
/**
The GetSystemLowestPageSize() function retrieves the system lowest page size.
@param This - Pointer to the EFI_PCI_IOV_PLATFORM_PROTOCOL instance.
@param SystemLowestPageSize - The system lowest page size. (This system supports a
page size of 2^(n+12) if bit n is set.)
@retval EFI_SUCCESS - The function completed successfully.
@retval EFI_INVALID_PARAMETER - SystemLowestPageSize is NULL.
**/
EFI_STATUS
EFIAPI
GetSystemLowestPageSize (
IN EFI_PCI_IOV_PLATFORM_PROTOCOL *This,
OUT UINT32 *SystemLowestPageSize
)
{
UINT8 SystemPageSize;
CopyMem (&SystemPageSize, (UINT8 *)PcdGetPtr(PcdSetupData) + OFFSET_OF(SYSTEM_CONFIGURATION, SystemPageSize), sizeof(UINT8));
if (SystemLowestPageSize != NULL) {
//
// Page size is 4K
//
//*SystemLowestPageSize = 1;
*SystemLowestPageSize = SystemPageSize;
}
return EFI_SUCCESS;
}
/**
The GetIovPlatformPolicy() function retrieves the platform policy regarding PCI IOV.
@param This - Pointer to the EFI_PCI_IOV_PLATFORM_PROTOCOL instance.
@param PciIovPolicy - The platform policy for PCI IOV configuration.
@retval EFI_SUCCESS - The function completed successfully.
@retval EFI_INVALID_PARAMETER - PciPolicy is NULL.
**/
EFI_STATUS
EFIAPI
GetIovPlatformPolicy (
IN EFI_PCI_IOV_PLATFORM_PROTOCOL *This,
OUT EFI_PCI_IOV_PLATFORM_POLICY *PciIovPolicy
)
{
UINT8 PolicyEnable;
UINT8 ARIEnable;
UINT8 SRIOVEnable;
UINT8 MRIOVEnable;
PolicyEnable = 0;
CopyMem (&ARIEnable, (UINT8 *)PcdGetPtr(PcdSetupData) + OFFSET_OF(SYSTEM_CONFIGURATION, ARIEnable), sizeof(UINT8));
CopyMem (&SRIOVEnable, (UINT8 *)PcdGetPtr(PcdSetupData) + OFFSET_OF(SYSTEM_CONFIGURATION, SRIOVEnable), sizeof(UINT8));
CopyMem (&MRIOVEnable, (UINT8 *)PcdGetPtr(PcdSetupData) + OFFSET_OF(SYSTEM_CONFIGURATION, MRIOVEnable), sizeof(UINT8));
if (ARIEnable == TRUE) {
PolicyEnable = PolicyEnable | EFI_PCI_IOV_POLICY_ARI;
}
if (SRIOVEnable == TRUE) {
PolicyEnable = PolicyEnable | EFI_PCI_IOV_POLICY_SRIOV;
}
if (MRIOVEnable == TRUE) {
PolicyEnable = PolicyEnable | EFI_PCI_IOV_POLICY_MRIOV;
}
if (PciIovPolicy != NULL) {
//*PciIovPolicy = EFI_PCI_IOV_POLICY_ARI | EFI_PCI_IOV_POLICY_SRIOV;
*PciIovPolicy = PolicyEnable;
}
return EFI_SUCCESS;
}
#endif