]> git.proxmox.com Git - mirror_edk2.git/blame - SecurityPkg/Tcg/Opal/OpalPassword/OpalHiiCallbacks.c
SecurityPkg OpalPassword: Add solution without SMM device code
[mirror_edk2.git] / SecurityPkg / Tcg / Opal / OpalPassword / OpalHiiCallbacks.c
CommitLineData
112e584b
SZ
1/** @file\r
2 Callbacks required by the HII of the Opal UEFI Driver to help display\r
3 Opal device information.\r
4\r
5Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.<BR>\r
6This program and the accompanying materials\r
7are licensed and made available under the terms and conditions of the BSD License\r
8which accompanies this distribution. The full text of the license may be found at\r
9http://opensource.org/licenses/bsd-license.php\r
10\r
11THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
12WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
13\r
14**/\r
15\r
16#include "OpalHii.h"\r
17\r
18/**\r
19 Get Opal var name.\r
20 The return Value must be freed by caller if not NULL\r
21\r
22 @param OpalDisk The disk.\r
23 @param Prefix The prefix string.\r
24\r
25 @retval The var name string.\r
26\r
27**/\r
28CHAR16*\r
29OpalDriverGetOpalVarName(\r
30 OPAL_DISK *OpalDisk,\r
31 const CHAR16 *Prefix\r
32 )\r
33{\r
34 OPAL_DRIVER_DEVICE* Dev;\r
35 UINTN PrefixLen;\r
36 UINTN NameLen;\r
37 UINTN VarNameLen;\r
38 CHAR16* VarName;\r
39\r
40 Dev = DRIVER_DEVICE_FROM_OPALDISK(OpalDisk);\r
41 if (Dev == NULL) {\r
42 return NULL;\r
43 }\r
44\r
45 PrefixLen = StrLen(Prefix);\r
46\r
47 NameLen = 0;\r
48 if (Dev->Name16 != NULL) {\r
49 NameLen = StrLen(Dev->Name16);\r
50 }\r
51\r
52 VarNameLen = PrefixLen + NameLen;\r
53\r
54 VarName = (CHAR16*)AllocateZeroPool((VarNameLen + 1) * sizeof(CHAR16));\r
55 if (VarName == NULL) {\r
56 return NULL;\r
57 }\r
58\r
59 CopyMem(VarName, Prefix, PrefixLen * sizeof(CHAR16));\r
60 if (Dev->Name16 != NULL) {\r
61 CopyMem(VarName + PrefixLen, Dev->Name16, NameLen * sizeof(CHAR16));\r
62 }\r
63 VarName[VarNameLen] = 0;\r
64\r
65 return VarName;\r
66}\r
67\r
68/**\r
69 Get the driver image handle.\r
70\r
71 @retval the driver image handle.\r
72\r
73**/\r
74EFI_HANDLE\r
75HiiGetDriverImageHandleCB(\r
76 VOID\r
77 )\r
78{\r
79 return gImageHandle;\r
80}\r
81\r
82/**\r
83 Check whether enable feature or not.\r
84\r
85 @retval Return the disk number.\r
86\r
87**/\r
88UINT8\r
89HiiGetNumConfigRequiredOpalDisksCB(\r
90 VOID\r
91 )\r
92{\r
93 UINT8 NumDisks;\r
94 UINT8 NumLockedOpalDisks;\r
95 OPAL_DISK *OpalDisk;\r
96 UINT8 Index;\r
97\r
98 NumLockedOpalDisks = 0;\r
99\r
100 NumDisks = GetDeviceCount();\r
101\r
102 for (Index = 0; Index < NumDisks; Index++) {\r
103 OpalDisk = HiiGetOpalDiskCB(Index);\r
104\r
105 if (OpalDisk != NULL) {\r
106 if (!OpalFeatureEnabled (&OpalDisk->SupportedAttributes, &OpalDisk->LockingFeature)) {\r
107 DEBUG ((DEBUG_INFO, "Ignoring disk %u because feature is disabled or health has already been inspected\n", Index));\r
108 } else if (OpalDeviceLocked (&OpalDisk->SupportedAttributes, &OpalDisk->LockingFeature)) {\r
109 NumLockedOpalDisks++;\r
110 }\r
111 }\r
112 }\r
113\r
114 return NumLockedOpalDisks;\r
115}\r
116\r
117\r
118\r
119/**\r
120 Returns the opaque pointer to a physical disk context.\r
121\r
122 @param DiskIndex Input the disk index.\r
123\r
124 @retval The device pointer.\r
125\r
126**/\r
127VOID *\r
128HiiGetDiskContextCB(\r
129 UINT8 DiskIndex\r
130 )\r
131{\r
132 OPAL_DRIVER_DEVICE* Dev;\r
133 UINT8 CurrentDisk;\r
134\r
135 Dev = OpalDriverGetDeviceList();\r
136 CurrentDisk = 0;\r
137\r
138 if (DiskIndex >= GetDeviceCount()) {\r
139 return NULL;\r
140 }\r
141\r
142 while (Dev != NULL) {\r
143 if (CurrentDisk == DiskIndex) {\r
144 return Dev;\r
145 } else {\r
146 Dev = Dev->Next;\r
147 CurrentDisk++;\r
148 }\r
149 }\r
150\r
151 return NULL;\r
152}\r
153\r
154/**\r
155 Returns the opaque pointer to a physical disk context.\r
156\r
157 @param DiskIndex Input the disk index.\r
158\r
159 @retval The device pointer.\r
160\r
161**/\r
162OPAL_DISK*\r
163HiiGetOpalDiskCB(\r
164 UINT8 DiskIndex\r
165 )\r
166{\r
167 VOID *Ctx;\r
168 OPAL_DRIVER_DEVICE *Tmp;\r
169\r
170 Ctx = HiiGetDiskContextCB (DiskIndex);\r
171\r
172 if (Ctx == NULL) {\r
173 return NULL;\r
174 }\r
175\r
176 Tmp = (OPAL_DRIVER_DEVICE*) Ctx;\r
177\r
178 return &Tmp->OpalDisk;\r
179}\r
180\r
181/**\r
182 Returns the disk name.\r
183\r
184 @param DiskIndex Input the disk index.\r
185\r
186 @retval Returns the disk name.\r
187\r
188**/\r
189CHAR8*\r
190HiiDiskGetNameCB(\r
191 UINT8 DiskIndex\r
192 )\r
193{\r
194 OPAL_DRIVER_DEVICE* Ctx;\r
195\r
196 Ctx = (OPAL_DRIVER_DEVICE*) HiiGetDiskContextCB (DiskIndex);\r
197\r
198 if (Ctx != NULL) {\r
199 if (Ctx->NameZ == NULL) {\r
200 OpalDriverGetDriverDeviceName (Ctx);\r
201 }\r
202 return Ctx->NameZ;\r
203 }\r
204 return NULL;\r
205}\r
206\r
207/**\r
208 Returns the driver name.\r
209\r
210 @retval Returns the driver name.\r
211\r
212**/\r
213CHAR16*\r
214HiiGetDriverNameCB(\r
215 VOID\r
216 )\r
217{\r
218 return (CHAR16*)EFI_DRIVER_NAME_UNICODE;\r
219}\r