/** @file
This file is the library for SA DXE Policy initialization.
Copyright (c) 2019 - 2020 Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#include "DxeSaPolicyInit.h"
#include
#define SA_VTD_RMRR_USB_LENGTH 0x20000
GLOBAL_REMOVE_IF_UNREFERENCED EFI_PHYSICAL_ADDRESS mAddress;
GLOBAL_REMOVE_IF_UNREFERENCED UINTN mSize;
/**
Update RMRR Base and Limit Address for USB.
**/
VOID
UpdateRmrrUsbAddress (
IN OUT SA_POLICY_PROTOCOL *SaPolicy
)
{
EFI_STATUS Status;
MISC_DXE_CONFIG *MiscDxeConfig;
Status = GetConfigBlock ((VOID *)SaPolicy, &gMiscDxeConfigGuid, (VOID *)&MiscDxeConfig);
ASSERT_EFI_ERROR (Status);
if (1) {
mSize = EFI_SIZE_TO_PAGES(SA_VTD_RMRR_USB_LENGTH);
mAddress = SIZE_4GB;
Status = (gBS->AllocatePages) (
AllocateMaxAddress,
EfiReservedMemoryType,
mSize,
&mAddress
);
ASSERT_EFI_ERROR (Status);
MiscDxeConfig->RmrrUsbBaseAddress[0] = mAddress;
MiscDxeConfig->RmrrUsbBaseAddress[1] = mAddress + SA_VTD_RMRR_USB_LENGTH - 1;
}
}
/**
Get data for platform policy from setup options.
@param[in] SaPolicy The pointer to get SA Policy protocol instance
@retval EFI_SUCCESS Operation success.
**/
EFI_STATUS
EFIAPI
UpdateDxeSaPolicy (
IN OUT SA_POLICY_PROTOCOL *SaPolicy
)
{
UpdateRmrrUsbAddress (SaPolicy);
return EFI_SUCCESS;
}