]> git.proxmox.com Git - mirror_edk2.git/blob - EdkCompatibilityPkg/Foundation/Library/Dxe/UefiEfiIfrSupportLib/UefiIfrLibrary.h
Sync all bug fixes between EDK1.04 and EDK1.06 into EdkCompatibilityPkg.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Library / Dxe / UefiEfiIfrSupportLib / UefiIfrLibrary.h
1 /*++
2
3 Copyright (c) 2007 - 2010, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution. The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11
12 Module Name:
13
14 UefiIfrLibrary.h
15
16 Abstract:
17
18 The file contain all library function for Ifr Operations.
19
20 --*/
21
22 #ifndef _IFRLIBRARY_H
23 #define _IFRLIBRARY_H
24
25 #include "Tiano.h"
26 #include "EfiDriverLib.h"
27 #include "TianoHii.h"
28
29 #include EFI_PROTOCOL_DEFINITION (HiiFont)
30 #include EFI_PROTOCOL_DEFINITION (HiiImage)
31 #include EFI_PROTOCOL_DEFINITION (HiiString)
32 #include EFI_PROTOCOL_DEFINITION (HiiDatabase)
33 #include EFI_PROTOCOL_DEFINITION (HiiConfigRouting)
34 #include EFI_PROTOCOL_DEFINITION (HiiConfigAccess)
35 #include EFI_PROTOCOL_DEFINITION (FormBrowser2)
36 #include EFI_PROTOCOL_DEFINITION (SimpleTextOut)
37
38 #include EFI_GUID_DEFINITION (GlobalVariable)
39
40 #define IFR_LIB_DEFAULT_STRING_SIZE 0x200
41
42 //
43 // The architectural variable "Lang" and "LangCodes" are deprecated in UEFI
44 // specification. While, UEFI specification also states that these deprecated
45 // variables may be provided for backwards compatibility.
46 // If "LANG_SUPPORT" is defined, "Lang" and "LangCodes" will be produced;
47 // If "LANG_SUPPORT" is undefined, "Lang" and "LangCodes" will not be produced.
48 //
49 #define LANG_SUPPORT
50
51 #define EFI_LANGUAGE_VARIABLE L"Lang"
52 #define EFI_LANGUAGE_CODES_VARIABLE L"LangCodes"
53
54 #define UEFI_LANGUAGE_VARIABLE L"PlatformLang"
55 #define UEFI_LANGUAGE_CODES_VARIABLE L"PlatformLangCodes"
56
57 //
58 // Limited buffer size recommended by RFC4646 (4.3. Length Considerations)
59 // (42 characters plus a NULL terminator)
60 //
61 #define RFC_3066_ENTRY_SIZE (42 + 1)
62 #define ISO_639_2_ENTRY_SIZE 3
63
64 #define INVALID_VARSTORE_ID 0
65
66 #define QUESTION_FLAGS (EFI_IFR_FLAG_READ_ONLY | EFI_IFR_FLAG_CALLBACK | EFI_IFR_FLAG_RESET_REQUIRED | EFI_IFR_FLAG_OPTIONS_ONLY)
67 #define QUESTION_FLAGS_MASK (~QUESTION_FLAGS)
68
69 extern EFI_GUID mIfrVendorGuid;
70 extern EFI_HII_DATABASE_PROTOCOL *gIfrLibHiiDatabase;
71 extern EFI_HII_STRING_PROTOCOL *gIfrLibHiiString;
72
73 #pragma pack(1)
74 typedef struct {
75 EFI_STRING_ID StringToken;
76 EFI_IFR_TYPE_VALUE Value;
77 UINT8 Flags;
78 } IFR_OPTION;
79 #pragma pack()
80
81 #pragma pack(1)
82 typedef struct {
83 VENDOR_DEVICE_PATH VendorDevicePath;
84 UINT32 Reserved;
85 UINT64 UniqueId;
86 } HII_VENDOR_DEVICE_PATH_NODE;
87 #pragma pack()
88
89 typedef struct {
90 HII_VENDOR_DEVICE_PATH_NODE Node;
91 EFI_DEVICE_PATH_PROTOCOL End;
92 } HII_VENDOR_DEVICE_PATH;
93
94 typedef struct {
95 //
96 // Buffer size allocated for Data.
97 //
98 UINT32 BufferSize;
99
100 //
101 // Offset in Data to append the newly created opcode binary.
102 // It will be adjusted automatically in Create***OpCode(), and should be
103 // initialized to 0 before invocation of a serial of Create***OpCode()
104 //
105 UINT32 Offset;
106
107 //
108 // The destination buffer for created op-codes
109 //
110 UINT8 *Data;
111 } EFI_HII_UPDATE_DATA;
112
113 VOID
114 LocateHiiProtocols (
115 VOID
116 )
117 /*++
118
119 Routine Description:
120 This function locate Hii relative protocols for later usage.
121
122 Arguments:
123 None.
124
125 Returns:
126 None.
127
128 --*/
129 ;
130
131 //
132 // Exported Library functions
133 //
134 EFI_STATUS
135 CreateEndOpCode (
136 IN OUT EFI_HII_UPDATE_DATA *Data
137 )
138 /*++
139
140 Routine Description:
141 Create EFI_IFR_END_OP opcode.
142
143 Arguments:
144 Data - Destination for the created opcode binary
145
146 Returns:
147 EFI_SUCCESS - Opcode create success
148
149 --*/
150 ;
151
152 EFI_STATUS
153 CreateDefaultOpCode (
154 IN EFI_IFR_TYPE_VALUE *Value,
155 IN UINT8 Type,
156 IN OUT EFI_HII_UPDATE_DATA *Data
157 )
158 /*++
159
160 Routine Description:
161 Create EFI_IFR_DEFAULT_OP opcode.
162
163 Arguments:
164 Value - Value for the default
165 Type - Type for the default
166 Data - Destination for the created opcode binary
167
168 Returns:
169 EFI_SUCCESS - Opcode create success
170
171 --*/
172 ;
173
174 EFI_STATUS
175 CreateActionOpCode (
176 IN EFI_QUESTION_ID QuestionId,
177 IN EFI_STRING_ID Prompt,
178 IN EFI_STRING_ID Help,
179 IN UINT8 QuestionFlags,
180 IN EFI_STRING_ID QuestionConfig,
181 IN OUT EFI_HII_UPDATE_DATA *Data
182 )
183 /*++
184
185 Routine Description:
186 Create EFI_IFR_ACTION_OP opcode.
187
188 Arguments:
189 QuestionId - Question ID
190 Prompt - String ID for Prompt
191 Help - String ID for Help
192 QuestionFlags - Flags in Question Header
193 QuestionConfig - String ID for configuration
194 Data - Destination for the created opcode binary
195
196 Returns:
197 EFI_SUCCESS - Opcode create success
198
199 --*/
200 ;
201
202 EFI_STATUS
203 CreateSubTitleOpCode (
204 IN EFI_STRING_ID Prompt,
205 IN EFI_STRING_ID Help,
206 IN UINT8 Flags,
207 IN UINT8 Scope,
208 IN OUT EFI_HII_UPDATE_DATA *Data
209 )
210 /*++
211
212 Routine Description:
213 Create EFI_IFR_SUBTITLE_OP opcode.
214
215 Arguments:
216 Prompt - String ID for Prompt
217 Help - String ID for Help
218 Flags - Subtitle opcode flags
219 Scope - Subtitle Scope bit
220 Data - Destination for the created opcode binary
221
222 Returns:
223 EFI_SUCCESS - Opcode create success
224
225 --*/
226 ;
227
228 EFI_STATUS
229 CreateTextOpCode (
230 IN EFI_STRING_ID Prompt,
231 IN EFI_STRING_ID Help,
232 IN EFI_STRING_ID TextTwo,
233 IN OUT EFI_HII_UPDATE_DATA *Data
234 )
235 /*++
236
237 Routine Description:
238 Create EFI_IFR_TEXT_OP opcode.
239
240 Arguments:
241 Prompt - String ID for Prompt
242 Help - String ID for Help
243 TextTwo - String ID for text two
244 Data - Destination for the created opcode binary
245
246 Returns:
247 EFI_SUCCESS - Opcode create success
248
249 --*/
250 ;
251
252 EFI_STATUS
253 CreateGotoOpCode (
254 IN EFI_FORM_ID FormId,
255 IN EFI_STRING_ID Prompt,
256 IN EFI_STRING_ID Help,
257 IN UINT8 QuestionFlags,
258 IN EFI_QUESTION_ID QuestionId,
259 IN OUT EFI_HII_UPDATE_DATA *Data
260 )
261 /*++
262
263 Routine Description:
264 Create EFI_IFR_REF_OP opcode.
265
266 Arguments:
267 FormId - Destination Form ID
268 Prompt - String ID for Prompt
269 Help - String ID for Help
270 QuestionFlags - Flags in Question Header
271 QuestionId - Question ID
272 Data - Destination for the created opcode binary
273
274 Returns:
275 EFI_SUCCESS - Opcode create success
276
277 --*/
278 ;
279
280 EFI_STATUS
281 CreateOneOfOptionOpCode (
282 IN UINTN OptionCount,
283 IN IFR_OPTION *OptionsList,
284 IN UINT8 Type,
285 IN OUT EFI_HII_UPDATE_DATA *Data
286 )
287 ;
288
289 EFI_STATUS
290 CreateOneOfOpCode (
291 IN EFI_QUESTION_ID QuestionId,
292 IN EFI_VARSTORE_ID VarStoreId,
293 IN UINT16 VarOffset,
294 IN EFI_STRING_ID Prompt,
295 IN EFI_STRING_ID Help,
296 IN UINT8 QuestionFlags,
297 IN UINT8 OneOfFlags,
298 IN IFR_OPTION *OptionsList,
299 IN UINTN OptionCount,
300 IN OUT EFI_HII_UPDATE_DATA *Data
301 )
302 /*++
303
304 Routine Description:
305 Create EFI_IFR_ONE_OF_OP opcode.
306
307 Arguments:
308 QuestionId - Question ID
309 VarStoreId - Storage ID
310 VarOffset - Offset in Storage
311 Prompt - String ID for Prompt
312 Help - String ID for Help
313 QuestionFlags - Flags in Question Header
314 OneOfFlags - Flags for oneof opcode
315 OptionsList - List of options
316 OptionCount - Number of options in option list
317 Data - Destination for the created opcode binary
318
319 Returns:
320 EFI_SUCCESS - Opcode create success
321
322 --*/
323 ;
324
325 EFI_STATUS
326 CreateOrderedListOpCode (
327 IN EFI_QUESTION_ID QuestionId,
328 IN EFI_VARSTORE_ID VarStoreId,
329 IN UINT16 VarOffset,
330 IN EFI_STRING_ID Prompt,
331 IN EFI_STRING_ID Help,
332 IN UINT8 QuestionFlags,
333 IN UINT8 Flags,
334 IN UINT8 DataType,
335 IN UINT8 MaxContainers,
336 IN IFR_OPTION *OptionsList,
337 IN UINTN OptionCount,
338 IN OUT EFI_HII_UPDATE_DATA *Data
339 )
340 /*++
341
342 Routine Description:
343 Create EFI_IFR_ORDERED_LIST_OP opcode.
344
345 Arguments:
346 QuestionId - Question ID
347 VarStoreId - Storage ID
348 VarOffset - Offset in Storage
349 Prompt - String ID for Prompt
350 Help - String ID for Help
351 QuestionFlags - Flags in Question Header
352 Flags - Flags for ordered list opcode
353 DataType - Type for option value
354 MaxContainers - Maximum count for options in this ordered list
355 OptionsList - List of options
356 OptionCount - Number of options in option list
357 Data - Destination for the created opcode binary
358
359 Returns:
360 EFI_SUCCESS - Opcode create success
361
362 --*/
363 ;
364
365 EFI_STATUS
366 CreateCheckBoxOpCode (
367 IN EFI_QUESTION_ID QuestionId,
368 IN EFI_VARSTORE_ID VarStoreId,
369 IN UINT16 VarOffset,
370 IN EFI_STRING_ID Prompt,
371 IN EFI_STRING_ID Help,
372 IN UINT8 QuestionFlags,
373 IN UINT8 CheckBoxFlags,
374 IN OUT EFI_HII_UPDATE_DATA *Data
375 )
376 /*++
377
378 Routine Description:
379 Create EFI_IFR_CHECKBOX_OP opcode.
380
381 Arguments:
382 QuestionId - Question ID
383 VarStoreId - Storage ID
384 VarOffset - Offset in Storage
385 Prompt - String ID for Prompt
386 Help - String ID for Help
387 QuestionFlags - Flags in Question Header
388 CheckBoxFlags - Flags for checkbox opcode
389 Data - Destination for the created opcode binary
390
391 Returns:
392 EFI_SUCCESS - Opcode create success
393
394 --*/
395 ;
396
397 EFI_STATUS
398 CreateNumericOpCode (
399 IN EFI_QUESTION_ID QuestionId,
400 IN EFI_VARSTORE_ID VarStoreId,
401 IN UINT16 VarOffset,
402 IN EFI_STRING_ID Prompt,
403 IN EFI_STRING_ID Help,
404 IN UINT8 QuestionFlags,
405 IN UINT8 NumericFlags,
406 IN UINT64 Minimum,
407 IN UINT64 Maximum,
408 IN UINT64 Step,
409 IN UINT64 Default,
410 IN OUT EFI_HII_UPDATE_DATA *Data
411 )
412 /*++
413
414 Routine Description:
415 Create EFI_IFR_NUMERIC_OP opcode.
416
417 Arguments:
418 QuestionId - Question ID
419 VarStoreId - Storage ID
420 VarOffset - Offset in Storage
421 Prompt - String ID for Prompt
422 Help - String ID for Help
423 QuestionFlags - Flags in Question Header
424 NumericFlags - Flags for numeric opcode
425 Minimum - Numeric minimum value
426 Maximum - Numeric maximum value
427 Step - Numeric step for edit
428 Default - Numeric default value
429 Data - Destination for the created opcode binary
430
431 Returns:
432 EFI_SUCCESS - Opcode create success
433
434 --*/
435 ;
436
437 EFI_STATUS
438 CreateStringOpCode (
439 IN EFI_QUESTION_ID QuestionId,
440 IN EFI_VARSTORE_ID VarStoreId,
441 IN UINT16 VarOffset,
442 IN EFI_STRING_ID Prompt,
443 IN EFI_STRING_ID Help,
444 IN UINT8 QuestionFlags,
445 IN UINT8 StringFlags,
446 IN UINT8 MinSize,
447 IN UINT8 MaxSize,
448 IN OUT EFI_HII_UPDATE_DATA *Data
449 )
450 /*++
451
452 Routine Description:
453 Create EFI_IFR_STRING_OP opcode.
454
455 Arguments:
456 QuestionId - Question ID
457 VarStoreId - Storage ID
458 VarOffset - Offset in Storage
459 Prompt - String ID for Prompt
460 Help - String ID for Help
461 QuestionFlags - Flags in Question Header
462 StringFlags - Flags for string opcode
463 MinSize - String minimum length
464 MaxSize - String maximum length
465 Data - Destination for the created opcode binary
466
467 Returns:
468 EFI_SUCCESS - Opcode create success
469
470 --*/
471 ;
472
473 EFI_STATUS
474 CreateBannerOpCode (
475 IN EFI_STRING_ID Title,
476 IN UINT16 LineNumber,
477 IN UINT8 Alignment,
478 IN OUT EFI_HII_UPDATE_DATA *Data
479 )
480 /*++
481
482 Routine Description:
483 Create GUIDed opcode for banner.
484
485 Arguments:
486 Title - String ID for title
487 LineNumber - Line number for this banner
488 Alignment - Alignment for this banner, left, center or right
489 Data - Destination for the created opcode binary
490
491 Returns:
492 EFI_SUCCESS - Opcode create success
493
494 --*/
495 ;
496
497 EFI_HII_PACKAGE_LIST_HEADER *
498 PreparePackageList (
499 IN UINTN NumberOfPackages,
500 IN EFI_GUID *GuidId,
501 ...
502 )
503 /*++
504
505 Routine Description:
506 Assemble EFI_HII_PACKAGE_LIST according to the passed in packages.
507
508 Arguments:
509 NumberOfPackages - Number of packages.
510 GuidId - Package GUID.
511
512 Returns:
513 Pointer of EFI_HII_PACKAGE_LIST_HEADER.
514
515 --*/
516 ;
517
518 EFI_STATUS
519 CreateHiiDriverHandle (
520 OUT EFI_HANDLE *DriverHandle
521 )
522 /*++
523
524 Routine Description:
525 The HII driver handle passed in for HiiDatabase.NewPackageList() requires
526 that there should be DevicePath Protocol installed on it.
527 This routine create a virtual Driver Handle by installing a vendor device
528 path on it, so as to use it to invoke HiiDatabase.NewPackageList().
529
530 Arguments:
531 DriverHandle - Handle to be returned
532
533 Returns:
534 EFI_SUCCESS - Handle destroy success.
535 EFI_OUT_OF_RESOURCES - Not enough memory.
536
537 --*/
538 ;
539
540 EFI_STATUS
541 DestroyHiiDriverHandle (
542 IN EFI_HANDLE DriverHandle
543 )
544 /*++
545
546 Routine Description:
547 Destroy the Driver Handle created by CreateHiiDriverHandle().
548
549 Arguments:
550 DriverHandle - Handle returned by CreateHiiDriverHandle()
551
552 Returns:
553 EFI_SUCCESS - Handle destroy success.
554 other - Handle destroy fail.
555
556 --*/
557 ;
558
559 EFI_HII_HANDLE
560 DevicePathToHiiHandle (
561 IN EFI_HII_DATABASE_PROTOCOL *HiiDatabase,
562 IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
563 )
564 /*++
565
566 Routine Description:
567 Find HII Handle associated with given Device Path.
568
569 Arguments:
570 HiiDatabase - Point to EFI_HII_DATABASE_PROTOCOL instance.
571 DevicePath - Device Path associated with the HII package list handle.
572
573 Returns:
574 Handle - HII package list Handle associated with the Device Path.
575 NULL - Hii Package list handle is not found.
576
577 --*/
578 ;
579
580 EFI_STATUS
581 ExtractDefault(
582 IN VOID *Buffer,
583 IN UINTN *BufferSize,
584 UINTN Number,
585 ...
586 )
587 /*++
588
589 Routine Description:
590 Configure the buffer accrording to ConfigBody strings.
591
592 Arguments:
593 DefaultId - the ID of default.
594 Buffer - the start address of buffer.
595 BufferSize - the size of buffer.
596 Number - the number of the strings.
597
598 Returns:
599 EFI_BUFFER_TOO_SMALL - the BufferSize is too small to operate.
600 EFI_INVALID_PARAMETER - Buffer is NULL or BufferSize is 0.
601 EFI_SUCCESS - Operation successful.
602
603 --*/
604 ;
605
606 EFI_STATUS
607 ConstructConfigAltResp (
608 IN EFI_STRING ConfigRequest, OPTIONAL
609 OUT EFI_STRING *Progress,
610 OUT EFI_STRING *ConfigAltResp,
611 IN EFI_GUID *Guid,
612 IN CHAR16 *Name,
613 IN EFI_HANDLE *DriverHandle,
614 IN VOID *BufferStorage,
615 IN UINTN BufferStorageSize,
616 IN VOID *BlockNameArray, OPTIONAL
617 IN UINTN NumberAltCfg,
618 ...
619 //IN UINT16 AltCfgId,
620 //IN VOID *DefaultValueArray,
621 )
622 /*++
623
624 Routine Description:
625
626 Construct <ConfigAltResp> for a buffer storage.
627
628 Arguments:
629 ConfigRequest - The Config request string. If set to NULL, all the
630 configurable elements will be extracted from BlockNameArray.
631 ConfigAltResp - The returned <ConfigAltResp>.
632 Progress - On return, points to a character in the Request.
633 Guid - GUID of the buffer storage.
634 Name - Name of the buffer storage.
635 DriverHandle - The DriverHandle which is used to invoke HiiDatabase
636 protocol interface NewPackageList().
637 BufferStorage - Content of the buffer storage.
638 BufferStorageSize - Length in bytes of the buffer storage.
639 BlockNameArray - Array generated by VFR compiler.
640 NumberAltCfg - Number of Default value array generated by VFR compiler.
641 The sequential input parameters will be number of
642 AltCfgId and DefaultValueArray pairs. When set to 0,
643 there will be no <AltResp>.
644
645 Returns:
646 EFI_OUT_OF_RESOURCES - Run out of memory resource.
647 EFI_INVALID_PARAMETER - ConfigAltResp is NULL.
648 EFI_SUCCESS - Operation successful.
649
650 --*/
651 ;
652
653 EFI_STATUS
654 ExtractGuidFromHiiHandle (
655 IN EFI_HII_HANDLE Handle,
656 OUT EFI_GUID *Guid
657 )
658 /*++
659
660 Routine Description:
661 Extract Hii package list GUID for given HII handle.
662
663 Arguments:
664 HiiHandle - Hii handle
665 Guid - Package list GUID
666
667 Returns:
668 EFI_SUCCESS - Successfully extract GUID from Hii database.
669
670 --*/
671 ;
672
673 EFI_STATUS
674 ExtractClassFromHiiHandle (
675 IN EFI_HII_HANDLE Handle,
676 OUT UINT16 *Class,
677 OUT EFI_STRING_ID *FormSetTitle,
678 OUT EFI_STRING_ID *FormSetHelp
679 )
680 /*++
681
682 Routine Description:
683 Extract formset class for given HII handle.
684
685 Arguments:
686 HiiHandle - Hii handle
687 Class - Class of the formset
688 FormSetTitle - Formset title string
689 FormSetHelp - Formset help string
690
691 Returns:
692 EFI_SUCCESS - Successfully extract Class for specified Hii handle.
693
694 --*/
695 ;
696
697 EFI_STATUS
698 ExtractClassGuidFromHiiHandle (
699 IN EFI_HII_HANDLE Handle,
700 OUT UINT8 *NumberOfClassGuid,
701 OUT EFI_GUID **ClassGuid,
702 OUT EFI_STRING_ID *FormSetTitle,
703 OUT EFI_STRING_ID *FormSetHelp
704 )
705 /*++
706
707 Routine Description:
708 Extract formset ClassGuid for given HII handle.
709
710 Arguments:
711 HiiHandle - Hii handle
712 NumberOfClassGuid - Number of ClassGuid
713 ClassGuid - Pointer to callee allocated buffer, an array of ClassGuid
714 FormSetTitle - Formset title string
715 FormSetHelp - Formset help string
716
717 Returns:
718 EFI_SUCCESS - Successfully extract Class for specified Hii handle.
719
720 --*/
721 ;
722
723 VOID
724 ToLower (
725 IN OUT CHAR16 *Str
726 )
727 /*++
728
729 Routine Description:
730 Converts the unicode character from uppercase to lowercase.
731
732 Arguments:
733 Str - String to be converted
734
735 Returns:
736
737 --*/
738 ;
739
740 EFI_STATUS
741 BufferToHexString (
742 IN OUT CHAR16 *Str,
743 IN UINT8 *Buffer,
744 IN UINTN BufferSize
745 )
746 /*++
747
748 Routine Description:
749 Converts binary buffer to Unicode string in reversed byte order to BufToHexString().
750
751 Arguments:
752 Str - String for output
753 Buffer - Binary buffer.
754 BufferSize - Size of the buffer in bytes.
755
756 Returns:
757 EFI_SUCCESS - The function completed successfully.
758
759 --*/
760 ;
761
762 EFI_STATUS
763 HexStringToBuffer (
764 IN OUT UINT8 *Buffer,
765 IN OUT UINTN *BufferSize,
766 IN CHAR16 *Str
767 )
768 /*++
769
770 Routine Description:
771 Converts Hex String to binary buffer in reversed byte order to HexStringToBuf().
772
773 Arguments:
774 Buffer - Pointer to buffer that receives the data.
775 BufferSize - Length in bytes of the buffer to hold converted data.
776 If routine return with EFI_SUCCESS, containing length of converted data.
777 If routine return with EFI_BUFFER_TOO_SMALL, containg length of buffer desired.
778 Str - String to be converted from.
779
780 Returns:
781 EFI_SUCCESS - The function completed successfully.
782
783 --*/
784 ;
785
786 EFI_STATUS
787 ConfigStringToUnicode (
788 IN OUT CHAR16 *UnicodeString,
789 IN OUT UINTN *StrBufferLen,
790 IN CHAR16 *ConfigString
791 )
792 /*++
793
794 Routine Description:
795 Convert binary representation Config string (e.g. "0041004200430044") to the
796 original string (e.g. "ABCD"). Config string appears in <ConfigHdr> (i.e.
797 "&NAME=<string>"), or Name/Value pair in <ConfigBody> (i.e. "label=<string>").
798
799 Arguments:
800 UnicodeString - Original Unicode string.
801 StrBufferLen - On input: Length in bytes of buffer to hold the Unicode string.
802 Includes tailing '\0' character.
803 On output:
804 If return EFI_SUCCESS, containing length of Unicode string buffer.
805 If return EFI_BUFFER_TOO_SMALL, containg length of string buffer desired.
806 ConfigString - Binary representation of Unicode String, <string> := (<HexCh>4)+
807
808 Returns:
809 EFI_SUCCESS - Routine success.
810 EFI_BUFFER_TOO_SMALL - The string buffer is too small.
811
812 --*/
813 ;
814
815 EFI_STATUS
816 UnicodeToConfigString (
817 IN OUT CHAR16 *ConfigString,
818 IN OUT UINTN *StrBufferLen,
819 IN CHAR16 *UnicodeString
820 )
821 /*++
822
823 Routine Description:
824 Convert Unicode string to binary representation Config string, e.g.
825 "ABCD" => "0041004200430044". Config string appears in <ConfigHdr> (i.e.
826 "&NAME=<string>"), or Name/Value pair in <ConfigBody> (i.e. "label=<string>").
827
828 Arguments:
829 ConfigString - Binary representation of Unicode String, <string> := (<HexCh>4)+
830 StrBufferLen - On input: Length in bytes of buffer to hold the Unicode string.
831 Includes tailing '\0' character.
832 On output:
833 If return EFI_SUCCESS, containing length of Unicode string buffer.
834 If return EFI_BUFFER_TOO_SMALL, containg length of string buffer desired.
835 UnicodeString - Original Unicode string.
836
837 Returns:
838 EFI_SUCCESS - Routine success.
839 EFI_BUFFER_TOO_SMALL - The string buffer is too small.
840
841 --*/
842 ;
843
844 EFI_STATUS
845 ConstructConfigHdr (
846 IN OUT CHAR16 *ConfigHdr,
847 IN OUT UINTN *StrBufferLen,
848 IN EFI_GUID *Guid,
849 IN CHAR16 *Name, OPTIONAL
850 IN EFI_HANDLE *DriverHandle
851 )
852 /*++
853
854 Routine Description:
855 Construct <ConfigHdr> using routing information GUID/NAME/PATH.
856
857 Arguments:
858 ConfigHdr - Pointer to the ConfigHdr string.
859 StrBufferLen - On input: Length in bytes of buffer to hold the ConfigHdr string. Includes tailing '\0' character.
860 On output:
861 If return EFI_SUCCESS, containing length of ConfigHdr string buffer.
862 If return EFI_BUFFER_TOO_SMALL, containg length of string buffer desired.
863 Guid - Routing information: GUID.
864 Name - Routing information: NAME.
865 DriverHandle - Driver handle which contains the routing information: PATH.
866
867 Returns:
868 EFI_SUCCESS - Routine success.
869 EFI_BUFFER_TOO_SMALL - The ConfigHdr string buffer is too small.
870
871 --*/
872 ;
873
874 BOOLEAN
875 IsConfigHdrMatch (
876 IN EFI_STRING ConfigString,
877 IN EFI_GUID *StorageGuid, OPTIONAL
878 IN CHAR16 *StorageName OPTIONAL
879 )
880 /*++
881
882 Routine Description:
883 Determines if the Routing data (Guid and Name) is correct in <ConfigHdr>.
884
885 Arguments:
886 ConfigString - Either <ConfigRequest> or <ConfigResp>.
887 StorageGuid - GUID of the storage.
888 StorageName - Name of the stoarge.
889
890 Returns:
891 TRUE - Routing information is correct in ConfigString.
892 FALSE - Routing information is incorrect in ConfigString.
893
894 --*/
895 ;
896
897 BOOLEAN
898 FindBlockName (
899 IN OUT CHAR16 *String,
900 UINTN Offset,
901 UINTN Width
902 )
903 /*++
904
905 Routine Description:
906 Search BlockName "&OFFSET=Offset&WIDTH=Width" in a string.
907
908 Arguments:
909 String - The string to be searched in.
910 Offset - Offset in BlockName.
911 Width - Width in BlockName.
912
913 Returns:
914 TRUE - Block name found.
915 FALSE - Block name not found.
916
917 --*/
918 ;
919
920 EFI_STATUS
921 GetBrowserData (
922 EFI_GUID *VariableGuid, OPTIONAL
923 CHAR16 *VariableName, OPTIONAL
924 UINTN *BufferSize,
925 UINT8 *Buffer
926 )
927 /*++
928
929 Routine Description:
930 This routine is invoked by ConfigAccess.Callback() to retrived uncommitted data from Form Browser.
931
932 Arguments:
933 VariableGuid - An optional field to indicate the target variable GUID name to use.
934 VariableName - An optional field to indicate the target human-readable variable name.
935 BufferSize - On input: Length in bytes of buffer to hold retrived data.
936 On output:
937 If return EFI_BUFFER_TOO_SMALL, containg length of buffer desired.
938 Buffer - Buffer to hold retrived data.
939
940 Returns:
941 EFI_SUCCESS - Routine success.
942 EFI_BUFFER_TOO_SMALL - The intput buffer is too small.
943
944 --*/
945 ;
946
947 EFI_STATUS
948 GetHiiHandles (
949 IN OUT UINTN *HandleBufferLength,
950 OUT EFI_HII_HANDLE **HiiHandleBuffer
951 )
952 /*++
953
954 Routine Description:
955 Determines the handles that are currently active in the database.
956 It's the caller's responsibility to free handle buffer.
957
958 Arguments:
959 HiiDatabase - A pointer to the EFI_HII_DATABASE_PROTOCOL instance.
960 HandleBufferLength - On input, a pointer to the length of the handle buffer. On output,
961 the length of the handle buffer that is required for the handles found.
962 HiiHandleBuffer - Pointer to an array of Hii Handles returned.
963
964 Returns:
965 EFI_SUCCESS - Get an array of Hii Handles successfully.
966 EFI_INVALID_PARAMETER - Hii is NULL.
967 EFI_NOT_FOUND - Database not found.
968
969 --*/
970 ;
971
972 EFI_STATUS
973 SetBrowserData (
974 EFI_GUID *VariableGuid, OPTIONAL
975 CHAR16 *VariableName, OPTIONAL
976 UINTN BufferSize,
977 UINT8 *Buffer,
978 CHAR16 *RequestElement OPTIONAL
979 )
980 /*++
981
982 Routine Description:
983 This routine is invoked by ConfigAccess.Callback() to update uncommitted data of Form Browser.
984
985 Arguments:
986 VariableGuid - An optional field to indicate the target variable GUID name to use.
987 VariableName - An optional field to indicate the target human-readable variable name.
988 BufferSize - Length in bytes of buffer to hold retrived data.
989 Buffer - Buffer to hold retrived data.
990 RequestElement - An optional field to specify which part of the buffer data
991 will be send back to Browser. If NULL, the whole buffer of
992 data will be committed to Browser.
993 <RequestElement> ::= &OFFSET=<Number>&WIDTH=<Number>*
994
995 Returns:
996 EFI_SUCCESS - Routine success.
997 Other - Updating Browser uncommitted data failed.
998
999 --*/
1000 ;
1001
1002 EFI_STATUS
1003 ConvertRfc3066LanguageToIso639Language (
1004 CHAR8 *LanguageRfc3066,
1005 CHAR8 *LanguageIso639
1006 )
1007 /*++
1008
1009 Routine Description:
1010 Convert language code from RFC3066 to ISO639-2.
1011
1012 Arguments:
1013 LanguageRfc3066 - RFC3066 language code.
1014 LanguageIso639 - ISO639-2 language code.
1015
1016 Returns:
1017 EFI_SUCCESS - Language code converted.
1018 EFI_NOT_FOUND - Language code not found.
1019
1020 --*/
1021 ;
1022
1023 CHAR8 *
1024 Rfc3066ToIso639 (
1025 CHAR8 *SupportedLanguages
1026 )
1027 /*++
1028
1029 Routine Description:
1030 Convert language code list from RFC3066 to ISO639-2, e.g. "en-US;fr-FR" will
1031 be converted to "engfra".
1032
1033 Arguments:
1034 SupportedLanguages - The RFC3066 language list.
1035
1036 Returns:
1037 The ISO639-2 language list.
1038
1039 --*/
1040 ;
1041
1042 EFI_STATUS
1043 GetCurrentLanguage (
1044 OUT CHAR8 *Lang
1045 )
1046 /*++
1047
1048 Routine Description:
1049 Determine what is the current language setting
1050
1051 Arguments:
1052 Lang - Pointer of system language
1053
1054 Returns:
1055 Status code
1056
1057 --*/
1058 ;
1059
1060 VOID
1061 GetNextLanguage (
1062 IN OUT CHAR8 **LangCode,
1063 OUT CHAR8 *Lang
1064 )
1065 /*++
1066
1067 Routine Description:
1068 Get next language from language code list.
1069
1070 Arguments:
1071 LangCode - The language code.
1072 Lang - Returned language.
1073
1074 Returns:
1075 None.
1076
1077 --*/
1078 ;
1079
1080 CHAR8 *
1081 GetSupportedLanguages (
1082 IN EFI_HII_HANDLE HiiHandle
1083 )
1084 /*++
1085
1086 Routine Description:
1087 This function returns the list of supported languages, in the format specified
1088 in UEFI specification Appendix M.
1089
1090 Arguments:
1091 HiiHandle - The HII package list handle.
1092
1093 Returns:
1094 The supported languages.
1095
1096 --*/
1097 ;
1098
1099 UINT16
1100 GetSupportedLanguageNumber (
1101 IN EFI_HII_HANDLE HiiHandle
1102 )
1103 /*++
1104
1105 Routine Description:
1106 This function returns the number of supported languages
1107
1108 Arguments:
1109 HiiHandle - The HII package list handle.
1110
1111 Returns:
1112 The number of supported languages.
1113
1114 --*/
1115 ;
1116
1117 EFI_STATUS
1118 GetStringFromHandle (
1119 IN EFI_HII_HANDLE HiiHandle,
1120 IN EFI_STRING_ID StringId,
1121 OUT EFI_STRING *String
1122 )
1123 /*++
1124
1125 Routine Description:
1126 Get string specified by StringId form the HiiHandle.
1127
1128 Arguments:
1129 HiiHandle - The HII handle of package list.
1130 StringId - The String ID.
1131 String - The output string.
1132
1133 Returns:
1134 EFI_NOT_FOUND - String is not found.
1135 EFI_SUCCESS - Operation is successful.
1136 EFI_OUT_OF_RESOURCES - There is not enought memory in the system.
1137 EFI_INVALID_PARAMETER - The String is NULL.
1138
1139 --*/
1140 ;
1141
1142 EFI_STATUS
1143 GetStringFromToken (
1144 IN EFI_GUID *ProducerGuid,
1145 IN EFI_STRING_ID StringId,
1146 OUT EFI_STRING *String
1147 )
1148 /*++
1149
1150 Routine Description:
1151 Get the string given the StringId and String package Producer's Guid.
1152
1153 Arguments:
1154 ProducerGuid - The Guid of String package list.
1155 StringId - The String ID.
1156 String - The output string.
1157
1158 Returns:
1159 EFI_NOT_FOUND - String is not found.
1160 EFI_SUCCESS - Operation is successful.
1161 EFI_OUT_OF_RESOURCES - There is not enought memory in the system.
1162
1163 --*/
1164 ;
1165
1166 EFI_STATUS
1167 IfrLibNewString (
1168 IN EFI_HII_HANDLE PackageList,
1169 OUT EFI_STRING_ID *StringId,
1170 IN CONST EFI_STRING String
1171 )
1172 /*++
1173
1174 Routine Description:
1175 This function adds the string into String Package of each language.
1176
1177 Arguments:
1178 PackageList - Handle of the package list where this string will be added.
1179 StringId - On return, contains the new strings id, which is unique within PackageList.
1180 String - Points to the new null-terminated string.
1181
1182 Returns:
1183 EFI_SUCCESS - The new string was added successfully.
1184 EFI_NOT_FOUND - The specified PackageList could not be found in database.
1185 EFI_OUT_OF_RESOURCES - Could not add the string due to lack of resources.
1186 EFI_INVALID_PARAMETER - String is NULL or StringId is NULL is NULL.
1187
1188 --*/
1189 ;
1190
1191 EFI_STATUS
1192 IfrLibGetString (
1193 IN EFI_HII_HANDLE PackageList,
1194 IN EFI_STRING_ID StringId,
1195 OUT EFI_STRING String,
1196 IN OUT UINTN *StringSize
1197 )
1198 /*++
1199
1200 Routine Description:
1201 This function try to retrieve string from String package of current language.
1202 If fail, it try to retrieve string from String package of first language it support.
1203
1204 Arguments:
1205 PackageList - The package list in the HII database to search for the specified string.
1206 StringId - The string's id, which is unique within PackageList.
1207 String - Points to the new null-terminated string.
1208 StringSize - On entry, points to the size of the buffer pointed to by String, in bytes. On return,
1209 points to the length of the string, in bytes.
1210
1211 Returns:
1212 EFI_SUCCESS - The string was returned successfully.
1213 EFI_NOT_FOUND - The string specified by StringId is not available.
1214 EFI_BUFFER_TOO_SMALL - The buffer specified by StringLength is too small to hold the string.
1215 EFI_INVALID_PARAMETER - The String or StringSize was NULL.
1216
1217 --*/
1218 ;
1219
1220 EFI_STATUS
1221 IfrLibSetString (
1222 IN EFI_HII_HANDLE PackageList,
1223 IN EFI_STRING_ID StringId,
1224 IN CONST EFI_STRING String
1225 )
1226 /*++
1227
1228 Routine Description:
1229 This function updates the string in String package of current language.
1230
1231 Arguments:
1232 PackageList - The package list containing the strings.
1233 StringId - The string's id, which is unique within PackageList.
1234 String - Points to the new null-terminated string.
1235
1236 Returns:
1237 EFI_SUCCESS - The string was updated successfully.
1238 EFI_NOT_FOUND - The string specified by StringId is not in the database.
1239 EFI_INVALID_PARAMETER - The String was NULL.
1240 EFI_OUT_OF_RESOURCES - The system is out of resources to accomplish the task.
1241
1242 --*/
1243 ;
1244
1245 EFI_STATUS
1246 IfrLibCreatePopUp (
1247 IN UINTN NumberOfLines,
1248 OUT EFI_INPUT_KEY *KeyValue,
1249 IN CHAR16 *String,
1250 ...
1251 )
1252 /*++
1253
1254 Routine Description:
1255 Draw a dialog and return the selected key.
1256
1257 Arguments:
1258 NumberOfLines - The number of lines for the dialog box
1259 KeyValue - The EFI_KEY value returned if HotKey is TRUE..
1260 String - Pointer to the first string in the list
1261 ... - A series of (quantity == NumberOfLines) text strings which
1262 will be used to construct the dialog box
1263
1264 Returns:
1265 EFI_SUCCESS - Displayed dialog and received user interaction
1266 EFI_INVALID_PARAMETER - One of the parameters was invalid.
1267
1268 --*/
1269 ;
1270
1271 EFI_STATUS
1272 IfrLibInitUpdateData (
1273 IN OUT EFI_HII_UPDATE_DATA *UpdateData,
1274 IN UINT32 BufferSize
1275 )
1276 /*++
1277
1278 Routine Description:
1279 This function initialize the data structure for dynamic opcode.
1280
1281 Arguments:
1282 UpdateData - The adding data;
1283 BufferSize - Length of the buffer to fill dynamic opcodes.
1284
1285 Returns:
1286 EFI_SUCCESS - Update data is initialized.
1287 EFI_INVALID_PARAMETER - UpdateData is NULL.
1288 EFI_OUT_OF_RESOURCES - No enough memory to allocate.
1289
1290 --*/
1291 ;
1292
1293 EFI_STATUS
1294 IfrLibFreeUpdateData (
1295 IN EFI_HII_UPDATE_DATA *UpdateData
1296 )
1297 /*++
1298
1299 Routine Description:
1300 This function free the resource of update data.
1301
1302 Arguments:
1303 UpdateData - The adding data;
1304
1305 Returns:
1306 EFI_SUCCESS - Resource in UpdateData is released.
1307 EFI_INVALID_PARAMETER - UpdateData is NULL.
1308
1309 --*/
1310 ;
1311
1312 EFI_STATUS
1313 IfrLibUpdateForm (
1314 IN EFI_HII_HANDLE Handle,
1315 IN EFI_GUID *FormSetGuid, OPTIONAL
1316 IN EFI_FORM_ID FormId,
1317 IN UINT16 Label,
1318 IN BOOLEAN Insert,
1319 IN EFI_HII_UPDATE_DATA *Data
1320 )
1321 /*++
1322
1323 Routine Description:
1324 This function allows the caller to update a form that has
1325 previously been registered with the EFI HII database.
1326
1327 Arguments:
1328 Handle - Hii Handle
1329 FormSetGuid - The formset should be updated.
1330 FormId - The form should be updated.
1331 Label - Update information starting immediately after this label in the IFR
1332 Insert - If TRUE and Data is not NULL, insert data after Label.
1333 If FALSE, replace opcodes between two labels with Data.
1334 Data - The adding data; If NULL, remove opcodes between two Label.
1335
1336 Returns:
1337 EFI_SUCCESS - Update success.
1338 Other - Update fail.
1339
1340 --*/
1341 ;
1342 #endif