]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Compatibility/FrameworkHiiOnUefiHiiThunk/HiiDatabase.h
1ae31b4e6f32c84d8bc639c317bd71d89b263332
[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/UefiLib.h>
49 #include <Library/PcdLib.h>
50
51 #include <Guid/MdeModuleHii.h>
52
53 #include "UefiIfrParser.h"
54
55
56 //
57 // VARSTORE ID of 0 for Buffer Storage Type Storage is defined as invalid in UEFI 2.1 HII. VARSTORE ID
58 // 0 is the default VarStore ID for storage without explicit declaration in Framework HII 0.92. EDK II UEFI VFR compiler
59 // in compatible mode will assign 0x0001 as UEFI VARSTORE ID to this default storage id in Framework VFR without
60 // VARSTORE declaration.
61 //
62 // In addition, the Name of Default VarStore is assumed to be L"Setup" for those storage without explicit VARSTORE declaration in the formset
63 // by Framework HII. EDK II UEFI VFR compiler in compatible mode hard-coded L"Setup" as VARSTORE name.
64 //
65 #define FRAMEWORK_RESERVED_VARSTORE_ID 0x0001
66 #define FRAMEWORK_RESERVED_VARSTORE_NAME L"Setup"
67
68 ///
69 /// The size of a 3 character ISO639 language code.
70 ///
71 #define ISO_639_2_ENTRY_SIZE 3
72
73 #pragma pack (1)
74 typedef struct {
75 EFI_HII_PACK_HEADER FrameworkPackageHeader;
76 EFI_HII_PACKAGE_HEADER PackageHeader;
77 } TIANO_AUTOGEN_PACKAGES_HEADER;
78 #pragma pack ()
79
80 #define HII_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, HII_THUNK_PRIVATE_DATA, Hii, HII_THUNK_PRIVATE_DATA_SIGNATURE)
81 #define HII_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('H', 'i', 'I', 'T')
82 typedef struct {
83 UINTN Signature;
84 EFI_HANDLE Handle;
85 EFI_HII_PROTOCOL Hii;
86
87 //
88 // The head of link list for all HII_THUNK_CONTEXT.
89 //
90 LIST_ENTRY ThunkContextListHead;
91
92 EFI_HANDLE RemovePackNotifyHandle;
93 EFI_HANDLE AddPackNotifyHandle;
94 } HII_THUNK_PRIVATE_DATA;
95
96
97
98
99
100 #define QUESTION_ID_MAP_ENTRY_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP_ENTRY, Link, QUESTION_ID_MAP_ENTRY_SIGNATURE)
101 #define QUESTION_ID_MAP_ENTRY_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'E')
102 typedef struct {
103 UINT32 Signature;
104 LIST_ENTRY Link;
105 UINT16 FwQId;
106 EFI_QUESTION_ID UefiQid;
107 } QUESTION_ID_MAP_ENTRY;
108
109
110
111 #define QUESTION_ID_MAP_FROM_LINK(Record) CR(Record, QUESTION_ID_MAP, Link, QUESTION_ID_MAP_SIGNATURE)
112 #define QUESTION_ID_MAP_SIGNATURE SIGNATURE_32 ('Q', 'I', 'M', 'P')
113 typedef struct {
114 UINT32 Signature;
115 LIST_ENTRY Link;
116 UINT16 VarStoreId;
117 UINTN VarSize;
118 LIST_ENTRY MapEntryListHead;
119 } QUESTION_ID_MAP;
120
121
122
123 #define HII_THUNK_CONTEXT_FROM_LINK(Record) CR(Record, HII_THUNK_CONTEXT, Link, HII_THUNK_CONTEXT_SIGNATURE)
124 #define HII_THUNK_CONTEXT_SIGNATURE SIGNATURE_32 ('H', 'T', 'H', 'M')
125 typedef struct {
126 LIST_ENTRY Link;
127 UINT32 Signature;
128 FRAMEWORK_EFI_HII_HANDLE FwHiiHandle;
129 EFI_HII_HANDLE UefiHiiHandle;
130 EFI_HANDLE UefiHiiDriverHandle;
131
132 UINTN IfrPackageCount;
133 UINTN StringPackageCount;
134
135 BOOLEAN ByFrameworkHiiNewPack;
136
137 //
138 // HII Thunk will use TagGuid to associate the String Package and Form Package togehter.
139 // See description for TagGuid. This field is to record if either one of the following condition
140 // is TRUE:
141 // 1) if ((SharingStringPack == TRUE) && (StringPackageCount != 0 && IfrPackageCount == 0)), then this Package List only
142 /// has String Packages and provides Strings to other IFR package.
143 // 2) if ((SharingStringPack == TRUE) && (StringPackageCount == 0 && IfrPackageCount != 1)), then this Form Package
144 // copied String Packages from other Package List.
145 // 3) if ((SharingStringPack == FALSE)), this Package does not provide String Package or copy String Packages from other
146 // Package List.
147 //
148 //
149 // When a Hii->NewString() is called for this FwHiiHandle and SharingStringPack is TRUE, then all Package List that sharing
150 // the same TagGuid will update or create String in there respective String Packages. If SharingStringPack is FALSE, then
151 // only the String from String Packages in this Package List will be updated or created.
152 //
153 BOOLEAN SharingStringPack;
154
155 //
156 // The HII 0.92 version of HII data implementation in EDK 1.03 and 1.04 make an the following assumption
157 // in both HII Database implementation and all modules that registering packages:
158 // If a Package List has only IFR package and no String Package, the IFR package will reference
159 // String in another Package List registered with the HII database with the same EFI_HII_PACKAGES.GuidId.
160 // TagGuid is the used to record this GuidId.
161 EFI_GUID TagGuid;
162
163 UINT8 *NvMapOverride;
164
165 FORM_BROWSER_FORMSET *FormSet;
166
167 } HII_THUNK_CONTEXT;
168
169
170
171 #define BUFFER_STORAGE_ENTRY_SIGNATURE SIGNATURE_32 ('H', 'T', 's', 'k')
172 #define BUFFER_STORAGE_ENTRY_FROM_LINK(Record) CR(Record, BUFFER_STORAGE_ENTRY, Link, BUFFER_STORAGE_ENTRY_SIGNATURE)
173 typedef struct {
174 LIST_ENTRY Link;
175 UINT32 Signature;
176 EFI_GUID Guid;
177 CHAR16 *Name;
178 UINTN Size;
179 UINT16 VarStoreId;
180 } BUFFER_STORAGE_ENTRY;
181
182 #pragma pack(1)
183 ///
184 /// HII specific Vendor Device Path Node definition.
185 ///
186 typedef struct {
187 VENDOR_DEVICE_PATH VendorDevicePath;
188 UINT32 Reserved;
189 UINT64 UniqueId;
190 } HII_VENDOR_DEVICE_PATH_NODE;
191
192 ///
193 /// HII specific Vendor Device Path definition.
194 ///
195 typedef struct {
196 HII_VENDOR_DEVICE_PATH_NODE Node;
197 EFI_DEVICE_PATH_PROTOCOL End;
198 } HII_VENDOR_DEVICE_PATH;
199 #pragma pack()
200
201 #define CONFIG_ACCESS_PRIVATE_SIGNATURE SIGNATURE_32 ('H', 'T', 'c', 'a')
202 #define CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL(Record) CR(Record, CONFIG_ACCESS_PRIVATE, ConfigAccessProtocol, CONFIG_ACCESS_PRIVATE_SIGNATURE)
203 typedef struct {
204 UINT32 Signature;
205 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccessProtocol;
206 //
207 // Framework's callback
208 //
209 EFI_FORM_CALLBACK_PROTOCOL *FormCallbackProtocol;
210
211 HII_THUNK_CONTEXT *ThunkContext;
212 } CONFIG_ACCESS_PRIVATE;
213
214
215
216 #define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE SIGNATURE_32 ('F', 'B', 'T', 'd')
217 #define EFI_FORMBROWSER_THUNK_PRIVATE_DATA_FROM_THIS(Record) CR(Record, EFI_FORMBROWSER_THUNK_PRIVATE_DATA, FormBrowser, EFI_FORMBROWSER_THUNK_PRIVATE_DATA_SIGNATURE)
218 typedef struct {
219 UINTN Signature;
220 EFI_HANDLE Handle;
221 HII_THUNK_PRIVATE_DATA *ThunkPrivate;
222 EFI_FORM_BROWSER_PROTOCOL FormBrowser;
223 } EFI_FORMBROWSER_THUNK_PRIVATE_DATA;
224
225
226 //
227 // Extern Variables
228 //
229 extern CONST EFI_HII_DATABASE_PROTOCOL *mHiiDatabase;
230 extern CONST EFI_HII_IMAGE_PROTOCOL *mHiiImageProtocol;
231 extern CONST EFI_HII_STRING_PROTOCOL *mHiiStringProtocol;
232 extern CONST EFI_HII_FONT_PROTOCOL *mHiiFontProtocol;
233 extern CONST EFI_HII_CONFIG_ROUTING_PROTOCOL *mHiiConfigRoutingProtocol;
234 extern CONST EFI_FORM_BROWSER2_PROTOCOL *mFormBrowser2Protocol;
235
236 extern HII_THUNK_PRIVATE_DATA *mHiiThunkPrivateData;
237
238 extern BOOLEAN mInFrameworkUpdatePakcage;
239
240
241 EFI_STATUS
242 EFIAPI
243 HiiNewPack (
244 IN EFI_HII_PROTOCOL *This,
245 IN EFI_HII_PACKAGES *PackageList,
246 OUT FRAMEWORK_EFI_HII_HANDLE *Handle
247 );
248
249 EFI_STATUS
250 EFIAPI
251 HiiRemovePack (
252 IN EFI_HII_PROTOCOL *This,
253 IN FRAMEWORK_EFI_HII_HANDLE Handle
254 );
255
256 EFI_STATUS
257 EFIAPI
258 HiiFindHandles (
259 IN EFI_HII_PROTOCOL *This,
260 IN OUT UINT16 *HandleBufferLength,
261 OUT FRAMEWORK_EFI_HII_HANDLE *Handle
262 );
263
264 EFI_STATUS
265 EFIAPI
266 HiiExportDatabase (
267 IN EFI_HII_PROTOCOL *This,
268 IN FRAMEWORK_EFI_HII_HANDLE Handle,
269 IN OUT UINTN *BufferSize,
270 OUT VOID *Buffer
271 );
272
273 EFI_STATUS
274 EFIAPI
275 HiiGetGlyph (
276 IN EFI_HII_PROTOCOL *This,
277 IN CHAR16 *Source,
278 IN OUT UINT16 *Index,
279 OUT UINT8 **GlyphBuffer,
280 OUT UINT16 *BitWidth,
281 IN OUT UINT32 *InternalStatus
282 );
283
284 EFI_STATUS
285 EFIAPI
286 HiiGlyphToBlt (
287 IN EFI_HII_PROTOCOL *This,
288 IN UINT8 *GlyphBuffer,
289 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Foreground,
290 IN EFI_GRAPHICS_OUTPUT_BLT_PIXEL Background,
291 IN UINTN Count,
292 IN UINTN Width,
293 IN UINTN Height,
294 IN OUT EFI_GRAPHICS_OUTPUT_BLT_PIXEL *BltBuffer
295 );
296
297 EFI_STATUS
298 EFIAPI
299 HiiNewString (
300 IN EFI_HII_PROTOCOL *This,
301 IN CHAR16 *Language,
302 IN FRAMEWORK_EFI_HII_HANDLE Handle,
303 IN OUT STRING_REF *Reference,
304 IN CHAR16 *NewString
305 );
306
307 EFI_STATUS
308 EFIAPI
309 HiiThunkGetString (
310 IN EFI_HII_PROTOCOL *This,
311 IN FRAMEWORK_EFI_HII_HANDLE Handle,
312 IN STRING_REF Token,
313 IN BOOLEAN Raw,
314 IN CHAR16 *LanguageString,
315 IN OUT UINTN *BufferLength,
316 OUT EFI_STRING StringBuffer
317 );
318
319 EFI_STATUS
320 EFIAPI
321 HiiResetStrings (
322 IN EFI_HII_PROTOCOL *This,
323 IN FRAMEWORK_EFI_HII_HANDLE Handle
324 );
325
326 EFI_STATUS
327 EFIAPI
328 HiiTestString (
329 IN EFI_HII_PROTOCOL *This,
330 IN CHAR16 *StringToTest,
331 IN OUT UINT32 *FirstMissing,
332 OUT UINT32 *GlyphBufferSize
333 );
334
335 EFI_STATUS
336 EFIAPI
337 HiiGetPrimaryLanguages (
338 IN EFI_HII_PROTOCOL *This,
339 IN FRAMEWORK_EFI_HII_HANDLE Handle,
340 OUT EFI_STRING *LanguageString
341 );
342
343 EFI_STATUS
344 EFIAPI
345 HiiGetSecondaryLanguages (
346 IN EFI_HII_PROTOCOL *This,
347 IN FRAMEWORK_EFI_HII_HANDLE Handle,
348 IN CHAR16 *PrimaryLanguage,
349 OUT EFI_STRING *LanguageString
350 );
351
352 EFI_STATUS
353 EFIAPI
354 HiiGetLine (
355 IN EFI_HII_PROTOCOL *This,
356 IN FRAMEWORK_EFI_HII_HANDLE Handle,
357 IN STRING_REF Token,
358 IN OUT UINT16 *Index,
359 IN UINT16 LineWidth,
360 IN CHAR16 *LanguageString,
361 IN OUT UINT16 *BufferLength,
362 OUT EFI_STRING StringBuffer
363 );
364
365 EFI_STATUS
366 EFIAPI
367 HiiGetForms (
368 IN EFI_HII_PROTOCOL *This,
369 IN FRAMEWORK_EFI_HII_HANDLE Handle,
370 IN EFI_FORM_ID FormId,
371 IN OUT UINTN *BufferLength,
372 OUT UINT8 *Buffer
373 );
374
375 EFI_STATUS
376 EFIAPI
377 HiiGetDefaultImage (
378 IN EFI_HII_PROTOCOL *This,
379 IN FRAMEWORK_EFI_HII_HANDLE Handle,
380 IN UINTN DefaultMask,
381 OUT EFI_HII_VARIABLE_PACK_LIST **VariablePackList
382 );
383
384 EFI_STATUS
385 EFIAPI
386 HiiThunkUpdateForm (
387 IN EFI_HII_PROTOCOL *This,
388 IN FRAMEWORK_EFI_HII_HANDLE Handle,
389 IN EFI_FORM_LABEL Label,
390 IN BOOLEAN AddData,
391 IN FRAMEWORK_EFI_HII_UPDATE_DATA *Data
392 );
393
394 EFI_STATUS
395 EFIAPI
396 HiiGetKeyboardLayout (
397 IN EFI_HII_PROTOCOL *This,
398 OUT UINT16 *DescriptorCount,
399 OUT FRAMEWORK_EFI_KEY_DESCRIPTOR *Descriptor
400 );
401
402 EFI_STATUS
403 EFIAPI
404 ThunkSendForm (
405 IN EFI_FORM_BROWSER_PROTOCOL *This,
406 IN BOOLEAN UseDatabase,
407 IN FRAMEWORK_EFI_HII_HANDLE *Handle,
408 IN UINTN HandleCount,
409 IN FRAMEWORK_EFI_IFR_PACKET *Packet, OPTIONAL
410 IN EFI_HANDLE CallbackHandle, OPTIONAL
411 IN UINT8 *NvMapOverride, OPTIONAL
412 IN FRAMEWORK_EFI_SCREEN_DESCRIPTOR *ScreenDimensions, OPTIONAL
413 OUT BOOLEAN *ResetRequired OPTIONAL
414 );
415
416 EFI_STATUS
417 EFIAPI
418 ThunkCreatePopUp (
419 IN UINTN LinesNumber,
420 IN BOOLEAN HotKey,
421 IN UINTN MaximumStringSize,
422 OUT CHAR16 *StringBuffer,
423 OUT EFI_INPUT_KEY *Key,
424 IN CHAR16 *FirstString,
425 ...
426 );
427
428 EFI_STATUS
429 EFIAPI
430 RemovePackNotify (
431 IN UINT8 PackageType,
432 IN CONST EFI_GUID *PackageGuid,
433 IN CONST EFI_HII_PACKAGE_HEADER *Package,
434 IN EFI_HII_HANDLE Handle,
435 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
436 );
437
438 EFI_STATUS
439 EFIAPI
440 NewOrAddPackNotify (
441 IN UINT8 PackageType,
442 IN CONST EFI_GUID *PackageGuid,
443 IN CONST EFI_HII_PACKAGE_HEADER *Package,
444 IN EFI_HII_HANDLE Handle,
445 IN EFI_HII_DATABASE_NOTIFY_TYPE NotifyType
446 );
447
448 /**
449 Create a Hii Update data Handle used to call IfrLibUpdateForm.
450
451 @param ThunkContext The HII Thunk Context.
452 @param FwUpdateData The Framework Update Data.
453 @param UefiOpCodeHandle The UEFI Update Data.
454
455 @retval EFI_SUCCESS The UEFI Update Data is created successfully.
456 @retval EFI_UNSUPPORTED There is unsupported opcode in FwUpdateData.
457 @retval EFI_OUT_OF_RESOURCES There is not enough resource.
458 **/
459 EFI_STATUS
460 FwUpdateDataToUefiUpdateData (
461 IN HII_THUNK_CONTEXT *ThunkContext,
462 IN CONST FRAMEWORK_EFI_HII_UPDATE_DATA *FwUpdateData,
463 IN VOID *UefiOpCodeHandle
464 )
465 ;
466
467 /**
468
469 Initialize string packages in HII database.
470
471 **/
472 VOID
473 InitSetBrowserStrings (
474 VOID
475 )
476 ;
477
478 /**
479 Convert language code from RFC4646 to ISO639-2.
480
481 LanguageRfc4646 contain a single RFC 4646 code such as
482 "en-US" or "fr-FR".
483
484 The LanguageRfc4646 must be a buffer large enough
485 for ISO_639_2_ENTRY_SIZE characters.
486
487 If LanguageRfc4646 is NULL, then ASSERT.
488 If LanguageIso639 is NULL, then ASSERT.
489
490 @param LanguageRfc4646 RFC4646 language code.
491 @param LanguageIso639 ISO639-2 language code.
492
493 @retval EFI_SUCCESS Language code converted.
494 @retval EFI_NOT_FOUND Language code not found.
495
496 **/
497 EFI_STATUS
498 EFIAPI
499 ConvertRfc4646LanguageToIso639Language (
500 IN CHAR8 *LanguageRfc4646,
501 OUT CHAR8 *LanguageIso639
502 )
503 ;
504
505 /**
506 Convert language code from ISO639-2 to RFC4646 and return the converted language.
507 Caller is responsible for freeing the allocated buffer.
508
509 LanguageIso639 contain a single ISO639-2 code such as
510 "eng" or "fra".
511
512 If LanguageIso639 is NULL, then ASSERT.
513 If LanguageRfc4646 is NULL, then ASSERT.
514
515 @param LanguageIso639 ISO639-2 language code.
516
517 @return the allocated buffer or NULL, if the language is not found.
518
519 **/
520 CHAR8*
521 EFIAPI
522 ConvertIso639LanguageToRfc4646Language (
523 IN CONST CHAR8 *LanguageIso639
524 )
525 ;
526
527 /**
528 Get next language from language code list (with separator ';').
529
530 If LangCode is NULL, then ASSERT.
531 If Lang is NULL, then ASSERT.
532
533 @param LangCode On input: point to first language in the list. On
534 output: point to next language in the list, or
535 NULL if no more language in the list.
536 @param Lang The first language in the list.
537
538 **/
539 VOID
540 EFIAPI
541 GetNextLanguage (
542 IN OUT CHAR8 **LangCode,
543 OUT CHAR8 *Lang
544 )
545 ;
546
547 #include "Utility.h"
548 #include "ConfigAccess.h"
549
550 #endif