HddPasswordDxe.h 4.1 KB

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