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