]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/HddPassword/HddPasswordDxe.h
SecurityPkg/HddPassword: Add Security feature set support for ATA dev
[mirror_edk2.git] / SecurityPkg / HddPassword / HddPasswordDxe.h
CommitLineData
e8959f81
HW
1/** @file\r
2\r
3 Copyright (c) 2019, Intel Corporation. All rights reserved.<BR>\r
4\r
5 This program and the accompanying materials\r
6 are licensed and made available under the terms and conditions\r
7 of the BSD License which accompanies this distribution. The\r
8 full text of the license may be found at\r
9 http://opensource.org/licenses/bsd-license.php\r
10\r
11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#ifndef _HDD_PASSWORD_DXE_H_\r
17#define _HDD_PASSWORD_DXE_H_\r
18\r
19#include <Uefi.h>\r
20\r
21#include <IndustryStandard/Atapi.h>\r
22#include <IndustryStandard/Pci.h>\r
23#include <Protocol/AtaPassThru.h>\r
24#include <Protocol/PciIo.h>\r
25#include <Protocol/HiiConfigAccess.h>\r
26#include <Protocol/VariableLock.h>\r
27\r
28#include <Guid/MdeModuleHii.h>\r
29#include <Guid/EventGroup.h>\r
30#include <Guid/S3StorageDeviceInitList.h>\r
31\r
32#include <Library/DebugLib.h>\r
33#include <Library/BaseLib.h>\r
34#include <Library/BaseMemoryLib.h>\r
35#include <Library/UefiRuntimeServicesTableLib.h>\r
36#include <Library/UefiDriverEntryPoint.h>\r
37#include <Library/UefiBootServicesTableLib.h>\r
38#include <Library/DxeServicesTableLib.h>\r
39#include <Library/MemoryAllocationLib.h>\r
40#include <Library/UefiHiiServicesLib.h>\r
41#include <Library/HiiLib.h>\r
42#include <Library/DevicePathLib.h>\r
43#include <Library/PrintLib.h>\r
44#include <Library/UefiLib.h>\r
45#include <Library/LockBoxLib.h>\r
46#include <Library/S3BootScriptLib.h>\r
47#include <Library/PciLib.h>\r
48#include <Library/BaseCryptLib.h>\r
49\r
50#include "HddPasswordCommon.h"\r
51#include "HddPasswordHiiDataStruc.h"\r
52\r
53//\r
54// This is the generated IFR binary data for each formset defined in VFR.\r
55// This data array is ready to be used as input of HiiAddPackages() to\r
56// create a packagelist (which contains Form packages, String packages, etc).\r
57//\r
58extern UINT8 HddPasswordBin[];\r
59\r
60//\r
61// This is the generated String package data for all .UNI files.\r
62// This data array is ready to be used as input of HiiAddPackages() to\r
63// create a packagelist (which contains Form packages, String packages, etc).\r
64//\r
65extern UINT8 HddPasswordDxeStrings[];\r
66\r
67#define HDD_PASSWORD_DXE_PRIVATE_SIGNATURE SIGNATURE_32 ('H', 'D', 'D', 'P')\r
68\r
69typedef struct _HDD_PASSWORD_CONFIG_FORM_ENTRY {\r
70 LIST_ENTRY Link;\r
71 EFI_HANDLE Controller;\r
72 UINTN Bus;\r
73 UINTN Device;\r
74 UINTN Function;\r
75 UINT16 Port;\r
76 UINT16 PortMultiplierPort;\r
77 EFI_DEVICE_PATH_PROTOCOL *DevicePath;\r
78 CHAR16 HddString[64];\r
79 CHAR8 Password[HDD_PASSWORD_MAX_LENGTH];\r
80 EFI_STRING_ID TitleToken;\r
81 EFI_STRING_ID TitleHelpToken;\r
82\r
83 HDD_PASSWORD_CONFIG IfrData;\r
84 EFI_ATA_PASS_THRU_PROTOCOL *AtaPassThru;\r
85} HDD_PASSWORD_CONFIG_FORM_ENTRY;\r
86\r
87typedef struct _HDD_PASSWORD_DXE_PRIVATE_DATA {\r
88 UINTN Signature;\r
89 EFI_HANDLE DriverHandle;\r
90 EFI_HII_HANDLE HiiHandle;\r
91 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess;\r
92 HDD_PASSWORD_CONFIG_FORM_ENTRY *Current;\r
93} HDD_PASSWORD_DXE_PRIVATE_DATA;\r
94\r
95#define HDD_PASSWORD_DXE_PRIVATE_FROM_THIS(a) CR (a, HDD_PASSWORD_DXE_PRIVATE_DATA, ConfigAccess, HDD_PASSWORD_DXE_PRIVATE_SIGNATURE)\r
96\r
97//\r
98//Iterate through the doule linked list. NOT delete safe\r
99//\r
100#define EFI_LIST_FOR_EACH(Entry, ListHead) \\r
101 for (Entry = (ListHead)->ForwardLink; Entry != (ListHead); Entry = Entry->ForwardLink)\r
102\r
103#define PASSWORD_SALT_SIZE 32\r
104\r
105#define HDD_PASSWORD_REQUEST_VARIABLE_NAME L"HddPasswordRequest"\r
106\r
107//\r
108// It needs to be locked before EndOfDxe.\r
109//\r
110#define HDD_PASSWORD_VARIABLE_NAME L"HddPassword"\r
111\r
112#pragma pack(1)\r
113\r
114typedef struct {\r
115 HDD_PASSWORD_DEVICE Device;\r
116 HDD_PASSWORD_REQUEST Request;\r
117} HDD_PASSWORD_REQUEST_VARIABLE;\r
118\r
119//\r
120// It will be used to validate HDD password when the device is at frozen state.\r
121//\r
122typedef struct {\r
123 HDD_PASSWORD_DEVICE Device;\r
124 UINT8 PasswordHash[SHA256_DIGEST_SIZE];\r
125 UINT8 PasswordSalt[PASSWORD_SALT_SIZE];\r
126} HDD_PASSWORD_VARIABLE;\r
127\r
128///\r
129/// HII specific Vendor Device Path definition.\r
130///\r
131typedef struct {\r
132 VENDOR_DEVICE_PATH VendorDevicePath;\r
133 EFI_DEVICE_PATH_PROTOCOL End;\r
134} HII_VENDOR_DEVICE_PATH;\r
135\r
136#pragma pack()\r
137\r
138//\r
139// Time out value for ATA pass through protocol\r
140//\r
141#define ATA_TIMEOUT EFI_TIMER_PERIOD_SECONDS (3)\r
142\r
143typedef struct {\r
144 UINT32 Address;\r
145 S3_BOOT_SCRIPT_LIB_WIDTH Width;\r
146} HDD_HC_PCI_REGISTER_SAVE;\r
147\r
148#endif\r