DxeSaPolicyUpdate.c 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. /** @file
  2. This file is the library for SA DXE Policy initialization.
  3. Copyright (c) 2019 - 2020 Intel Corporation. All rights reserved.<BR>
  4. SPDX-License-Identifier: BSD-2-Clause-Patent
  5. **/
  6. #include "DxeSaPolicyInit.h"
  7. #include <Library/ConfigBlockLib.h>
  8. #define SA_VTD_RMRR_USB_LENGTH 0x20000
  9. GLOBAL_REMOVE_IF_UNREFERENCED EFI_PHYSICAL_ADDRESS mAddress;
  10. GLOBAL_REMOVE_IF_UNREFERENCED UINTN mSize;
  11. /**
  12. Update RMRR Base and Limit Address for USB.
  13. **/
  14. VOID
  15. UpdateRmrrUsbAddress (
  16. IN OUT SA_POLICY_PROTOCOL *SaPolicy
  17. )
  18. {
  19. EFI_STATUS Status;
  20. MISC_DXE_CONFIG *MiscDxeConfig;
  21. Status = GetConfigBlock ((VOID *)SaPolicy, &gMiscDxeConfigGuid, (VOID *)&MiscDxeConfig);
  22. ASSERT_EFI_ERROR (Status);
  23. if (1) {
  24. mSize = EFI_SIZE_TO_PAGES(SA_VTD_RMRR_USB_LENGTH);
  25. mAddress = SIZE_4GB;
  26. Status = (gBS->AllocatePages) (
  27. AllocateMaxAddress,
  28. EfiReservedMemoryType,
  29. mSize,
  30. &mAddress
  31. );
  32. ASSERT_EFI_ERROR (Status);
  33. MiscDxeConfig->RmrrUsbBaseAddress[0] = mAddress;
  34. MiscDxeConfig->RmrrUsbBaseAddress[1] = mAddress + SA_VTD_RMRR_USB_LENGTH - 1;
  35. }
  36. }
  37. /**
  38. Get data for platform policy from setup options.
  39. @param[in] SaPolicy The pointer to get SA Policy protocol instance
  40. @retval EFI_SUCCESS Operation success.
  41. **/
  42. EFI_STATUS
  43. EFIAPI
  44. UpdateDxeSaPolicy (
  45. IN OUT SA_POLICY_PROTOCOL *SaPolicy
  46. )
  47. {
  48. UpdateRmrrUsbAddress (SaPolicy);
  49. return EFI_SUCCESS;
  50. }