/** @file
@copyright
Copyright 2014 - 2021 Intel Corporation.
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 SystemPageSizeOption;
CopyMem (&SystemPageSizeOption, (((UINT8*) PcdGetPtr (PcdSetup)) + OFFSET_OF (SYSTEM_CONFIGURATION, SystemPageSize)), sizeof (UINT8));
if (SystemLowestPageSize != NULL) {
//
// Convert page size option to page size
// Option is n in 2^n
// Page size is number of 4KiB pages
//
*SystemLowestPageSize = (UINT32) (1 << SystemPageSizeOption);
}
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 (PcdSetup)) + OFFSET_OF (SYSTEM_CONFIGURATION, ARIEnable)), sizeof (UINT8));
CopyMem (&SRIOVEnable, (((UINT8*) PcdGetPtr (PcdSetup)) + OFFSET_OF (SYSTEM_CONFIGURATION, SRIOVEnable)), sizeof (UINT8));
CopyMem (&MRIOVEnable, (((UINT8*) PcdGetPtr (PcdSetup)) + 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