UbaSlotUpdateLib.c 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /** @file
  2. UbaSlotUpdateLib implementation.
  3. @copyright
  4. Copyright 2012 - 2016 Intel Corporation. <BR>
  5. SPDX-License-Identifier: BSD-2-Clause-Patent
  6. **/
  7. #include <Base.h>
  8. #include <Uefi.h>
  9. #include <Library/BaseLib.h>
  10. #include <Library/BaseMemoryLib.h>
  11. #include <Library/MemoryAllocationLib.h>
  12. #include <Library/UefiBootServicesTableLib.h>
  13. #include <Library/DebugLib.h>
  14. #include <Library/UbaSlotUpdateLib.h>
  15. #include <Protocol/UbaCfgDb.h>
  16. EFI_STATUS
  17. PlatformGetSlotTableData (
  18. IN OUT IIO_BROADWAY_ADDRESS_DATA_ENTRY **BroadwayTable,
  19. IN OUT UINT8 *IOU2Setting,
  20. IN OUT UINT8 *FlagValue
  21. )
  22. {
  23. EFI_STATUS Status;
  24. UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
  25. UINTN DataLength = 0;
  26. PLATFORM_SLOT_UPDATE_TABLE IioSlotUpdateTable;
  27. Status = gBS->LocateProtocol (
  28. &gUbaConfigDatabaseProtocolGuid,
  29. NULL,
  30. (VOID **) &UbaConfigProtocol
  31. );
  32. if (EFI_ERROR (Status)) {
  33. return Status;
  34. }
  35. DataLength = sizeof(IioSlotUpdateTable);
  36. Status = UbaConfigProtocol->GetData (
  37. UbaConfigProtocol,
  38. &gPlatformSlotDataDxeGuid,
  39. &IioSlotUpdateTable,
  40. &DataLength
  41. );
  42. if (EFI_ERROR (Status)) {
  43. return Status;
  44. }
  45. ASSERT (IioSlotUpdateTable.Signature == PLATFORM_SLOT_UPDATE_SIGNATURE);
  46. ASSERT (IioSlotUpdateTable.Version == PLATFORM_SLOT_UPDATE_VERSION);
  47. *BroadwayTable = IioSlotUpdateTable.BroadwayTablePtr;
  48. *IOU2Setting = IioSlotUpdateTable.GetIOU2Setting (*IOU2Setting);
  49. *FlagValue = IioSlotUpdateTable.FlagValue;
  50. return Status;
  51. }
  52. EFI_STATUS
  53. PlatformGetSlotTableData2 (
  54. IN OUT IIO_BROADWAY_ADDRESS_DATA_ENTRY **BroadwayTable,
  55. IN OUT UINT8 *IOU0Setting,
  56. IN OUT UINT8 *FlagValue,
  57. IN OUT UINT8 *IOU2Setting,
  58. IN UINT8 SkuPersonalityType
  59. )
  60. {
  61. EFI_STATUS Status;
  62. UBA_CONFIG_DATABASE_PROTOCOL *UbaConfigProtocol = NULL;
  63. UINTN DataLength = 0;
  64. PLATFORM_SLOT_UPDATE_TABLE2 IioSlotUpdateTable;
  65. Status = gBS->LocateProtocol (
  66. &gUbaConfigDatabaseProtocolGuid,
  67. NULL,
  68. (VOID **) &UbaConfigProtocol
  69. );
  70. if (EFI_ERROR (Status)) {
  71. return Status;
  72. }
  73. DataLength = sizeof(IioSlotUpdateTable);
  74. if ((SkuPersonalityType == 1) || (SkuPersonalityType == 3)) {
  75. Status = UbaConfigProtocol->GetData (
  76. UbaConfigProtocol,
  77. &gPlatformSlotDataDxeGuid2_1,
  78. &IioSlotUpdateTable,
  79. &DataLength
  80. );
  81. } else {
  82. Status = UbaConfigProtocol->GetData (
  83. UbaConfigProtocol,
  84. &gPlatformSlotDataDxeGuid2,
  85. &IioSlotUpdateTable,
  86. &DataLength
  87. );
  88. }
  89. if (EFI_ERROR (Status)) {
  90. return Status;
  91. }
  92. ASSERT (IioSlotUpdateTable.Signature == PLATFORM_SLOT_UPDATE_SIGNATURE);
  93. ASSERT (IioSlotUpdateTable.Version == PLATFORM_SLOT_UPDATE_VERSION);
  94. *BroadwayTable = IioSlotUpdateTable.BroadwayTablePtr;
  95. *IOU0Setting = IioSlotUpdateTable.GetIOU0Setting (*IOU0Setting);
  96. *FlagValue = IioSlotUpdateTable.FlagValue;
  97. *IOU2Setting = IioSlotUpdateTable.GetIOU2Setting (SkuPersonalityType, *IOU2Setting);
  98. return Status;
  99. }