HddPasswordDxe.h 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /** @file
  2. Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>
  3. SPDX-License-Identifier: BSD-2-Clause-Patent
  4. **/
  5. #ifndef _HDD_PASSWORD_DXE_H_
  6. #define _HDD_PASSWORD_DXE_H_
  7. #include <Uefi.h>
  8. #include <IndustryStandard/Atapi.h>
  9. #include <IndustryStandard/Pci.h>
  10. #include <Protocol/AtaPassThru.h>
  11. #include <Protocol/PciIo.h>
  12. #include <Protocol/HiiConfigAccess.h>
  13. #include <Protocol/VariableLock.h>
  14. #include <Guid/MdeModuleHii.h>
  15. #include <Guid/EventGroup.h>
  16. #include <Guid/S3StorageDeviceInitList.h>
  17. #include <Library/DebugLib.h>
  18. #include <Library/BaseLib.h>
  19. #include <Library/BaseMemoryLib.h>
  20. #include <Library/UefiRuntimeServicesTableLib.h>
  21. #include <Library/UefiDriverEntryPoint.h>
  22. #include <Library/UefiBootServicesTableLib.h>
  23. #include <Library/DxeServicesTableLib.h>
  24. #include <Library/MemoryAllocationLib.h>
  25. #include <Library/UefiHiiServicesLib.h>
  26. #include <Library/HiiLib.h>
  27. #include <Library/DevicePathLib.h>
  28. #include <Library/PrintLib.h>
  29. #include <Library/UefiLib.h>
  30. #include <Library/LockBoxLib.h>
  31. #include <Library/S3BootScriptLib.h>
  32. #include <Library/PciLib.h>
  33. #include <Library/BaseCryptLib.h>
  34. #include "HddPasswordCommon.h"
  35. #include "HddPasswordHiiDataStruc.h"
  36. //
  37. // This is the generated IFR binary data for each formset defined in VFR.
  38. // This data array is ready to be used as input of HiiAddPackages() to
  39. // create a packagelist (which contains Form packages, String packages, etc).
  40. //
  41. extern UINT8 HddPasswordBin[];
  42. //
  43. // This is the generated String package data for all .UNI files.
  44. // This data array is ready to be used as input of HiiAddPackages() to
  45. // create a packagelist (which contains Form packages, String packages, etc).
  46. //
  47. extern UINT8 HddPasswordDxeStrings[];
  48. #define HDD_PASSWORD_DXE_PRIVATE_SIGNATURE SIGNATURE_32 ('H', 'D', 'D', 'P')
  49. typedef struct _HDD_PASSWORD_CONFIG_FORM_ENTRY {
  50. LIST_ENTRY Link;
  51. EFI_HANDLE Controller;
  52. UINTN Bus;
  53. UINTN Device;
  54. UINTN Function;
  55. UINT16 Port;
  56. UINT16 PortMultiplierPort;
  57. EFI_DEVICE_PATH_PROTOCOL *DevicePath;
  58. CHAR16 HddString[64];
  59. CHAR8 Password[HDD_PASSWORD_MAX_LENGTH];
  60. EFI_STRING_ID TitleToken;
  61. EFI_STRING_ID TitleHelpToken;
  62. HDD_PASSWORD_CONFIG IfrData;
  63. EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;
  64. } HDD_PASSWORD_CONFIG_FORM_ENTRY;
  65. typedef struct _HDD_PASSWORD_DXE_PRIVATE_DATA {
  66. UINTN Signature;
  67. EFI_HANDLE DriverHandle;
  68. EFI_HII_HANDLE HiiHandle;
  69. EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;
  70. HDD_PASSWORD_CONFIG_FORM_ENTRY *Current;
  71. } HDD_PASSWORD_DXE_PRIVATE_DATA;
  72. #define HDD_PASSWORD_DXE_PRIVATE_FROM_THIS(a) CR (a, HDD_PASSWORD_DXE_PRIVATE_DATA, ConfigAccess, HDD_PASSWORD_DXE_PRIVATE_SIGNATURE)
  73. //
  74. //Iterate through the doule linked list. NOT delete safe
  75. //
  76. #define EFI_LIST_FOR_EACH(Entry, ListHead) \
  77. for (Entry = (ListHead)->ForwardLink; Entry != (ListHead); Entry = Entry->ForwardLink)
  78. #define PASSWORD_SALT_SIZE 32
  79. #define HDD_PASSWORD_REQUEST_VARIABLE_NAME L"HddPasswordRequest"
  80. //
  81. // It needs to be locked before EndOfDxe.
  82. //
  83. #define HDD_PASSWORD_VARIABLE_NAME L"HddPassword"
  84. #pragma pack(1)
  85. typedef struct {
  86. HDD_PASSWORD_DEVICE Device;
  87. HDD_PASSWORD_REQUEST Request;
  88. } HDD_PASSWORD_REQUEST_VARIABLE;
  89. //
  90. // It will be used to validate HDD password when the device is at frozen state.
  91. //
  92. typedef struct {
  93. HDD_PASSWORD_DEVICE Device;
  94. UINT8 PasswordHash[SHA256_DIGEST_SIZE];
  95. UINT8 PasswordSalt[PASSWORD_SALT_SIZE];
  96. } HDD_PASSWORD_VARIABLE;
  97. ///
  98. /// HII specific Vendor Device Path definition.
  99. ///
  100. typedef struct {
  101. VENDOR_DEVICE_PATH VendorDevicePath;
  102. EFI_DEVICE_PATH_PROTOCOL End;
  103. } HII_VENDOR_DEVICE_PATH;
  104. #pragma pack()
  105. //
  106. // Time out value for ATA pass through protocol
  107. //
  108. #define ATA_TIMEOUT EFI_TIMER_PERIOD_SECONDS (3)
  109. typedef struct {
  110. UINT32 Address;
  111. S3_BOOT_SCRIPT_LIB_WIDTH Width;
  112. } HDD_HC_PCI_REGISTER_SAVE;
  113. #endif