]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/HiiDatabase.h
Retire Extended HII library class.
[mirror_edk2.git] / EdkCompatibilityPkg / Compatibility / FrameworkHiiOnUefiHiiThunk / HiiDatabase.h
1 /**@file
2
3 This file contains global defines and prototype definitions
4 for the Framework HII to Uefi HII Thunk Module.
5
6 Copyright (c) 2006 - 2008, Intel Corporation
7 All rights reserved. This program and the accompanying materials
8 are licensed and made available under the terms and conditions of the BSD License
9 which accompanies this distribution. The full text of the license may be found at
10 http://opensource.org/licenses/bsd-license.php
11
12 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
13 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
14
15 **/
16
17 #ifndef _HIIDATABASE_H
18 #define _HIIDATABASE_H
19
20
21 #include <FrameworkDxe.h>
22
23 #include <Guid/GlobalVariable.h>
24 #include <Protocol/FrameworkFormCallback.h>
25 #include <Protocol/FrameworkHii.h>
26 #include <Protocol/FrameworkFormBrowser.h>
27
28 //
29 // UEFI HII Protocols
30 //
31 #include <Protocol/HiiFont.h>
32 #include <Protocol/HiiImage.h>
33 #include <Protocol/HiiString.h>
34 #include <Protocol/HiiDatabase.h>
35 #include <Protocol/HiiConfigRouting.h>
36 #include <Protocol/HiiConfigAccess.h>
37 #include <Protocol/UgaDraw.h>
38
39
40 #include <Library/BaseLib.h>
41 #include <Library/DebugLib.h>
42 #include <Library/UefiDriverEntryPoint.h>
43 #include <Library/MemoryAllocationLib.h>
44 #include <Library/BaseMemoryLib.h>
45 #include <Library/UefiBootServicesTableLib.h>
46 #include <Library/UefiRuntimeServicesTableLib.h>
47 #include <Library/HiiLib.h>
48 #include <Library/DevicePathLib.h>
49 #include <Library/UefiLib.h>
50
51 #include <Library/IfrSupportLib.h>
52 #include <Library/ExtendedIfrSupportLib.h>
53 #include <Library/PcdLib.h>
54
55 #include <Guid/MdeModuleHii.h>
56
57 #include "UefiIfrParser.h"
58
59
60 //
61 // VARSTORE ID of 0 for Buffer Storage Type Storage is defined as invalid in UEFI 2.1 HII. VARSTORE ID
62 // 0 is the default VarStore ID for storage without explicit declaration in Framework HII 0.92. EDK II UEFI VFR compiler
63 // in compatible mode will assign 0x0001 as UEFI VARSTORE ID to this default storage id in Framework VFR without
64 // VARSTORE declaration.
65 //
66 // In addition, the Name of Default VarStore is assumed to be L"Setup" for those storage without explicit VARSTORE declaration in the formset
67 // by Framework HII. EDK II UEFI VFR compiler in compatible mode hard-coded L"Setup" as VARSTORE name.
68 //
69 #define FRAMEWORK_RESERVED_VARSTORE_ID 0x0001
70 #define FRAMEWORK_RESERVED_VARSTORE_NAME L"Setup"
71
72 ///
73 /// The size of a 3 character ISO639 language code.
74 ///
75 #define ISO_639_2_ENTRY_SIZE 3
76
77
78
79 #pragma pack (1)
80 typedef struct {
81 EFI_HII_PACK_HEADER FrameworkPackageHeader;
82 EFI_HII_PACKAGE_HEADER PackageHeader;
83 } TIANO_AUTOGEN_PACKAGES_HEADER;
84 #pragma pack ()
85
86 #define HII_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, HII_THUNK_PRIVATE_DATA, Hii, HII_THUNK_PRIVATE_DATA_SIGNATURE)
87 #define HII_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('H', 'i', 'I', 'T')
88 typedef struct {
89 UINTN Signature;
90 EFI_HANDLE Handle;
91 EFI_HII_PROTOCOL Hii;
92
93 //
94 // The head of link list for all HII_THUNK_CONTEXT.
95 //
96 LIST_ENTRY ThunkContextListHead;
97
98 EFI_HANDLE RemovePackNotifyHandle;
99 EFI_HANDLE AddPackNotifyHandle;
100 } HII_THUNK_PRIVATE_DATA;
101
102
103
104
105
106 #define QUESTION_ID_MAP_ENTRY_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP_ENTRY, Link, QUESTION_ID_MAP_ENTRY_SIGNATURE)
107 #define QUESTION_ID_MAP_ENTRY_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'E')
108 typedef struct {
109 UINT32 Signature;
110 LIST_ENTRY Link;
111 UINT16 FwQId;
112 EFI_QUESTION_ID UefiQid;
113 } QUESTION_ID_MAP_ENTRY;
114
115
116
117 #define QUESTION_ID_MAP_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP, Link, QUESTION_ID_MAP_SIGNATURE)
118 #define QUESTION_ID_MAP_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'P')
119 typedef struct {
120 UINT32 Signature;
121 LIST_ENTRY Link;
122 UINT16 VarStoreId;
123 UINTN VarSize;
124 LIST_ENTRY MapEntryListHead;
125 } QUESTION_ID_MAP;
126
127
128
129 #define HII_THUNK_CONTEXT_FROM_LINK(Record) CR(Record, HII_THUNK_CONTEXT, Link, HII_THUNK_CONTEXT_SIGNATURE)
130 #define HII_THUNK_CONTEXT_SIGNATURE SIGNATURE_32 ('H', 'T', 'H', 'M')
131 typedef struct {
132 LIST_ENTRY Link;
133 UINT32 Signature;
134 FRAMEWORK_EFI_HII_HANDLE FwHiiHandle;
135 EFI_HII_HANDLE UefiHiiHandle;
136 EFI_HANDLE UefiHiiDriverHandle;
137
138 UINTN IfrPackageCount;
139 UINTN StringPackageCount;
140
141 BOOLEAN ByFrameworkHiiNewPack;
142
143 //
144 // HII Thunk will use TagGuid to associate the String Package and Form Package togehter.
145 // See description for TagGuid. This field is to record if either one of the following condition
146 // is TRUE:
147 // 1) if ((SharingStringPack == TRUE) && (StringPackageCount != 0 && IfrPackageCount == 0)), then this Package List only
148 /// has String Packages and provides Strings to other IFR package.
149 // 2) if ((SharingStringPack == TRUE) && (StringPackageCount == 0 && IfrPackageCount != 1)), then this Form Package
150 // copied String Packages from other Package List.
151 // 3) if ((SharingStringPack == FALSE)), this Package does not provide String Package or copy String Packages from other
152 // Package List.
153 //
154 //
155 // When a Hii->NewString() is called for this FwHiiHandle and SharingStringPack is TRUE, then all Package List that sharing
156 // the same TagGuid will update or create String in there respective String Packages. If SharingStringPack is FALSE, then
157 // only the String from String Packages in this Package List will be updated or created.
158 //
159 BOOLEAN SharingStringPack;
160
161 //
162 // The HII 0.92 version of HII data implementation in EDK 1.03 and 1.04 make an the following assumption
163 // in both HII Database implementation and all modules that registering packages:
164 // If a Package List has only IFR package and no String Package, the IFR package will reference
165 // String in another Package List registered with the HII database with the same EFI_HII_PACKAGES.GuidId.
166 // TagGuid is the used to record this GuidId.
167 EFI_GUID TagGuid;
168
169 UINT8 *NvMapOverride;
170
171 FORM_BROWSER_FORMSET *FormSet;
172
173 } HII_THUNK_CONTEXT;
174
175
176
177 #define BUFFER_STORAGE_ENTRY_SIGNATURE SIGNATURE_32 ('H', 'T', 's', 'k')
178 #define BUFFER_STORAGE_ENTRY_FROM_LINK(Record) CR(Record, BUFFER_STORAGE_ENTRY, Link, BUFFER_STORAGE_ENTRY_SIGNATURE)
179 typedef struct {
180 LIST_ENTRY Link;
181 UINT32 Signature;
182 EFI_GUID Guid;
183 CHAR16 *Name;
184 UINTN Size;
185 UINT16 VarStoreId;
186 } BUFFER_STORAGE_ENTRY;
187
188 #pragma pack(1)
189
190 ///
191 /// HII specific Vendor Device Path definition.
192 ///
193 typedef struct {
194 VENDOR_DEVICE_PATH VendorDevicePath;
195 EFI_DEVICE_PATH_PROTOCOL End;
196 } HII_VENDOR_DEVICE_PATH;
197
198 #pragma pack()
199
200 #define CONFIG_ACCESS_PRIVATE_SIGNATURE SIGNATURE_32 ('H', 'T', 'c', 'a')
201 #define CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL(Record) CR(Record, CONFIG_ACCESS_PRIVATE, ConfigAccessProtocol, CONFIG_ACCESS_PRIVATE_SIGNATURE)
202 typedef struct {
203 UINT32 Signature;
204 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccessProtocol;
205 //
206 // Framework's callback
207 //
208 EFI_FORM_CALLBACK_PROTOCOL *FormCallbackProtocol;
209
210 HII_THUNK_CONTEXT *ThunkContext;
211 } CONFIG_ACCESS_PRIVATE;
212
213
214
215 #define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('F', 'B', 'T', 'd')
216 #define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, EFI_FORMBROWSER_THUNK_PRIVATE_DATA, FormBrowser, EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE)
217 typedef struct {
218 UINTN Signature;
219 EFI_HANDLE Handle;
220 HII_THUNK_PRIVATE_DATA *ThunkPrivate;
221 EFI_FORM_BROWSER_PROTOCOL FormBrowser;
222 } EFI_FORMBROWSER_THUNK_PRIVATE_DATA;
223
224
225 //
226 // Extern Variables
227 //
228 extern CONST EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;
229 extern CONST EFI_HII_IMAGE_PROTOCOL *mHiiImageProtocol;
230 extern CONST EFI_HII_STRING_PROTOCOL *mHiiStringProtocol;
231 extern CONST EFI_HII_FONT_PROTOCOL *mHiiFontProtocol;
232 extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRoutingProtocol;
233 extern CONST EFI_FORM_BROWSER2_PROTOCOL *mFormBrowser2Protocol;
234
235 extern HII_THUNK_PRIVATE_DATA *mHiiThunkPrivateData;
236
237 extern BOOLEAN mInFrameworkUpdatePakcage;
238
239
240 EFI_STATUS
241 EFIAPI
242 HiiNewPack (
243 IN EFI_HII_PROTOCOL *This,
244 IN EFI_HII_PACKAGES *PackageList,
245 OUT FRAMEWORK_EFI_HII_HANDLE *Handle
246 );
247
248 EFI_STATUS
249 EFIAPI
250 HiiRemovePack (
251 IN EFI_HII_PROTOCOL *This,
252 IN FRAMEWORK_EFI_HII_HANDLE Handle
253 );
254
255 EFI_STATUS
256 EFIAPI
257 HiiFindHandles (
258 IN EFI_HII_PROTOCOL *This,
259 IN OUT UINT16 *HandleBufferLength,
260 OUT FRAMEWORK_EFI_HII_HANDLE *Handle
261 );
262
263 EFI_STATUS
264 EFIAPI
265 HiiExportDatabase (
266 IN EFI_HII_PROTOCOL *This,
267 IN FRAMEWORK_EFI_HII_HANDLE Handle,
268 IN OUT UINTN *BufferSize,
269 OUT VOID *Buffer
270 );
271
272 EFI_STATUS
273 EFIAPI
274 HiiGetGlyph (
275 IN EFI_HII_PROTOCOL *This,
276 IN CHAR16 *Source,
277 IN OUT UINT16 *Index,
278 OUT UINT8 **GlyphBuffer,
279 OUT UINT16 *BitWidth,
280 IN OUT UINT32 *InternalStatus
281 );
282
283 EFI_STATUS
284 EFIAPI
285 HiiGlyphToBlt (
286 IN EFI_HII_PROTOCOL *This,
287 IN UINT8 *GlyphBuffer,
288 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,
289 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,
290 IN UINTN Count,
291 IN UINTN Width,
292 IN UINTN Height,
293 IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer
294 );
295
296 EFI_STATUS
297 EFIAPI
298 HiiNewString (
299 IN EFI_HII_PROTOCOL *This,
300 IN CHAR16 *Language,
301 IN FRAMEWORK_EFI_HII_HANDLE Handle,
302 IN OUT STRING_REF *Reference,
303 IN CHAR16 *NewString
304 );
305
306 EFI_STATUS
307 EFIAPI
308 HiiGetString (
309 IN EFI_HII_PROTOCOL *This,
310 IN FRAMEWORK_EFI_HII_HANDLE Handle,
311 IN STRING_REF Token,
312 IN BOOLEAN Raw,
313 IN CHAR16 *LanguageString,
314 IN OUT UINTN *BufferLength,
315 OUT EFI_STRING StringBuffer
316 );
317
318 EFI_STATUS
319 EFIAPI
320 HiiResetStrings (
321 IN EFI_HII_PROTOCOL *This,
322 IN FRAMEWORK_EFI_HII_HANDLE Handle
323 );
324
325 EFI_STATUS
326 EFIAPI
327 HiiTestString (
328 IN EFI_HII_PROTOCOL *This,
329 IN CHAR16 *StringToTest,
330 IN OUT UINT32 *FirstMissing,
331 OUT UINT32 *GlyphBufferSize
332 );
333
334 EFI_STATUS
335 EFIAPI
336 HiiGetPrimaryLanguages (
337 IN EFI_HII_PROTOCOL *This,
338 IN FRAMEWORK_EFI_HII_HANDLE Handle,
339 OUT EFI_STRING *LanguageString
340 );
341
342 EFI_STATUS
343 EFIAPI
344 HiiGetSecondaryLanguages (
345 IN EFI_HII_PROTOCOL *This,
346 IN FRAMEWORK_EFI_HII_HANDLE Handle,
347 IN CHAR16 *PrimaryLanguage,
348 OUT EFI_STRING *LanguageString
349 );
350
351 EFI_STATUS
352 EFIAPI
353 HiiGetLine (
354 IN EFI_HII_PROTOCOL *This,
355 IN FRAMEWORK_EFI_HII_HANDLE Handle,
356 IN STRING_REF Token,
357 IN OUT UINT16 *Index,
358 IN UINT16 LineWidth,
359 IN CHAR16 *LanguageString,
360 IN OUT UINT16 *BufferLength,
361 OUT EFI_STRING StringBuffer
362 );
363
364 EFI_STATUS
365 EFIAPI
366 HiiGetForms (
367 IN EFI_HII_PROTOCOL *This,
368 IN FRAMEWORK_EFI_HII_HANDLE Handle,
369 IN EFI_FORM_ID FormId,
370 IN OUT UINTN *BufferLength,
371 OUT UINT8 *Buffer
372 );
373
374 EFI_STATUS
375 EFIAPI
376 HiiGetDefaultImage (
377 IN EFI_HII_PROTOCOL *This,
378 IN FRAMEWORK_EFI_HII_HANDLE Handle,
379 IN UINTN DefaultMask,
380 OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList
381 );
382
383 EFI_STATUS
384 EFIAPI
385 HiiUpdateForm (
386 IN EFI_HII_PROTOCOL *This,
387 IN FRAMEWORK_EFI_HII_HANDLE Handle,
388 IN EFI_FORM_LABEL Label,
389 IN BOOLEAN AddData,
390 IN FRAMEWORK_EFI_HII_UPDATE_DATA *Data
391 );
392
393 EFI_STATUS
394 EFIAPI
395 HiiGetKeyboardLayout (
396 IN EFI_HII_PROTOCOL *This,
397 OUT UINT16 *DescriptorCount,
398 OUT FRAMEWORK_EFI_KEY_DESCRIPTOR *Descriptor
399 );
400
401 EFI_STATUS
402 EFIAPI
403 ThunkSendForm (
404 IN EFI_FORM_BROWSER_PROTOCOL *This,
405 IN BOOLEAN UseDatabase,
406 IN FRAMEWORK_EFI_HII_HANDLE *Handle,
407 IN UINTN HandleCount,
408 IN FRAMEWORK_EFI_IFR_PACKET *Packet, OPTIONAL
409 IN EFI_HANDLE CallbackHandle, OPTIONAL
410 IN UINT8 *NvMapOverride, OPTIONAL
411 IN FRAMEWORK_EFI_SCREEN_DESCRIPTOR *ScreenDimensions, OPTIONAL
412 OUT BOOLEAN *ResetRequired OPTIONAL
413 );
414
415 EFI_STATUS
416 EFIAPI
417 ThunkCreatePopUp (
418 IN UINTN NumberOfLines,
419 IN BOOLEAN HotKey,
420 IN UINTN MaximumStringSize,
421 OUT CHAR16 *StringBuffer,
422 OUT EFI_INPUT_KEY *KeyValue,
423 IN CHAR16 *String,
424 ...
425 );
426
427 EFI_STATUS
428 EFIAPI
429 RemovePackNotify (
430 IN UINT8 PackageType,
431 IN CONST EFI_GUID *PackageGuid,
432 IN CONST EFI_HII_PACKAGE_HEADER *Package,
433 IN EFI_HII_HANDLE Handle,
434 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
435 );
436
437 EFI_STATUS
438 EFIAPI
439 NewOrAddPackNotify (
440 IN UINT8 PackageType,
441 IN CONST EFI_GUID *PackageGuid,
442 IN CONST EFI_HII_PACKAGE_HEADER *Package,
443 IN EFI_HII_HANDLE Handle,
444 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
445 );
446
447 /**
448 Create a EFI_HII_UPDATE_DATA structure used to call IfrLibUpdateForm.
449
450 @param ThunkContext The HII Thunk Context.
451 @param FwUpdateData The Framework Update Data.
452 @param UefiUpdateData The UEFI Update Data.
453
454 @retval EFI_SUCCESS The UEFI Update Data is created successfully.
455 @retval EFI_UNSUPPORTED There is unsupported opcode in FwUpdateData.
456 @retval EFI_OUT_OF_RESOURCES There is not enough resource.
457 **/
458 EFI_STATUS
459 FwUpdateDataToUefiUpdateData (
460 IN HII_THUNK_CONTEXT *ThunkContext,
461 IN CONST FRAMEWORK_EFI_HII_UPDATE_DATA *FwUpdateData,
462 OUT EFI_HII_UPDATE_DATA **UefiUpdateData
463 )
464 ;
465
466 /**
467
468 Initialize string packages in HII database.
469
470 **/
471 VOID
472 InitSetBrowserStrings (
473 VOID
474 )
475 ;
476
477 #include "Utility.h"
478 #include "ConfigAccess.h"
479
480 #endif