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 1343