1 /*++ 2 3 Copyright (c) 2004 - 2012, 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 EfiCommonLib.h 15 16 Abstract: 17 18 Light weight lib to support EFI drivers. 19 20 --*/ 21 22 #ifndef _EFI_COMMON_LIB_H_ 23 #define _EFI_COMMON_LIB_H_ 24 25 EFI_STATUS 26 EfiLibGetSystemConfigurationTable ( 27 IN EFI_GUID *TableGuid, 28 IN OUT VOID **Table 29 ) 30 /*++ 31 32 Routine Description: 33 34 Return the EFI 1.0 System Tabl entry with TableGuid 35 36 Arguments: 37 38 TableGuid - Name of entry to return in the system table 39 Table - Pointer in EFI system table associated with TableGuid 40 41 Returns: 42 43 EFI_SUCCESS - Table returned; 44 EFI_NOT_FOUND - TableGuid not in EFI system table 45 46 --*/ 47 ; 48 49 // 50 // ASPrint and AvSPrint definitions you must include the specific library 51 // to get the expected behavior from the two functions 52 // PEI: PeiLib 53 // Graphics: Dxe\Graphics\Unicode Dxe\Graphics\ASCII 54 // ASCII: Dxe\Print\ASCII 55 // Unicode: Dxe\Print\Unicode 56 // 57 UINTN 58 ASPrint ( 59 OUT CHAR8 *Buffer, 60 IN UINTN BufferSize, 61 IN CONST CHAR8 *Format, 62 ... 63 ) 64 /*++ 65 66 Routine Description: 67 68 Process format and place the results in Buffer for narrow chars. 69 70 Arguments: 71 72 Buffer - Narrow char buffer to print the results of the parsing of Format into. 73 BufferSize - Maximum number of characters to put into buffer. 74 Format - Format string 75 ... - Vararg list consumed by processing Format. 76 77 Returns: 78 79 Number of characters printed. 80 81 --*/ 82 ; 83 84 UINTN 85 AvSPrint ( 86 OUT CHAR8 *StartOfBuffer, 87 IN UINTN StrSize, 88 IN CONST CHAR8 *Format, 89 IN VA_LIST Marker 90 ) 91 /*++ 92 93 Routine Description: 94 95 Internal implementation of ASPrint. 96 Process format and place the results in Buffer for narrow chars. 97 98 Arguments: 99 100 StartOfBuffer - Narrow char buffer to print the results of the parsing of Format into. 101 StrSize - Maximum number of characters to put into buffer. 102 FormatString - Format string 103 Marker - Vararg list consumed by processing Format. 104 105 Returns: 106 107 Number of characters printed. 108 109 --*/ 110 ; 111 112 // 113 // Lib functions which can be used in both PEI and DXE pahse 114 // 115 EFI_STATUS 116 EfiInitializeCommonDriverLib ( 117 IN EFI_HANDLE ImageHandle, 118 IN VOID *SystemTable 119 ) 120 /*++ 121 122 Routine Description: 123 124 Initialize lib function calling phase: PEI or DXE 125 126 Arguments: 127 128 ImageHandle - The firmware allocated handle for the EFI image. 129 130 SystemTable - A pointer to the EFI System Table. 131 132 Returns: 133 134 EFI_STATUS always returns EFI_SUCCESS 135 136 --*/ 137 ; 138 139 EFI_STATUS 140 EfiCommonIoRead ( 141 IN UINT8 Width, 142 IN UINTN Address, 143 IN UINTN Count, 144 IN OUT VOID *Buffer 145 ) 146 /*++ 147 148 Routine Description: 149 150 Io read operation. 151 152 Arguments: 153 154 Width - Width of read operation 155 Address - Start IO address to read 156 Count - Read count 157 Buffer - Buffer to store result 158 159 Returns: 160 161 Status code 162 163 --*/ 164 ; 165 166 EFI_STATUS 167 EfiCommonIoWrite ( 168 IN UINT8 Width, 169 IN UINTN Address, 170 IN UINTN Count, 171 IN OUT VOID *Buffer 172 ) 173 /*++ 174 175 Routine Description: 176 177 Io write operation. 178 179 Arguments: 180 181 Width - Width of write operation 182 Address - Start IO address to write 183 Count - Write count 184 Buffer - Buffer to write to the address 185 186 Returns: 187 188 Status code 189 190 --*/ 191 ; 192 193 EFI_STATUS 194 EfiCommonPciRead ( 195 IN UINT8 Width, 196 IN UINT64 Address, 197 IN UINTN Count, 198 IN OUT VOID *Buffer 199 ) 200 /*++ 201 202 Routine Description: 203 204 Pci read operation 205 206 Arguments: 207 208 Width - Width of PCI read 209 Address - PCI address to read 210 Count - Read count 211 Buffer - Output buffer for the read 212 213 Returns: 214 215 Status code 216 217 --*/ 218 ; 219 220 EFI_STATUS 221 EfiCommonPciWrite ( 222 IN UINT8 Width, 223 IN UINT64 Address, 224 IN UINTN Count, 225 IN OUT VOID *Buffer 226 ) 227 /*++ 228 229 Routine Description: 230 231 Pci write operation 232 233 Arguments: 234 235 Width - Width of PCI write 236 Address - PCI address to write 237 Count - Write count 238 Buffer - Buffer to write to the address 239 240 Returns: 241 242 Status code 243 244 --*/ 245 ; 246 247 BOOLEAN 248 EfiCompareGuid ( 249 IN EFI_GUID *Guid1, 250 IN EFI_GUID *Guid2 251 ) 252 /*++ 253 254 Routine Description: 255 256 Compares two GUIDs 257 258 Arguments: 259 260 Guid1 - guid to compare 261 262 Guid2 - guid to compare 263 264 Returns: 265 TRUE if Guid1 == Guid2 266 FALSE if Guid1 != Guid2 267 268 --*/ 269 ; 270 271 VOID 272 EfiCommonLibSetMem ( 273 IN VOID *Buffer, 274 IN UINTN Size, 275 IN UINT8 Value 276 ) 277 /*++ 278 279 Routine Description: 280 281 Set Buffer to Value for Size bytes. 282 283 Arguments: 284 285 Buffer - Memory to set. 286 287 Size - Number of bytes to set 288 289 Value - Value of the set operation. 290 291 Returns: 292 293 None 294 295 --*/ 296 ; 297 298 VOID 299 EfiCommonLibCopyMem ( 300 IN VOID *Destination, 301 IN VOID *Source, 302 IN UINTN Length 303 ) 304 /*++ 305 306 Routine Description: 307 308 Copy Length bytes from Source to Destination. 309 310 Arguments: 311 312 Destination - Target of copy 313 314 Source - Place to copy from 315 316 Length - Number of bytes to copy 317 318 Returns: 319 320 None 321 322 --*/ 323 ; 324 325 INTN 326 EfiCompareMem ( 327 IN VOID *MemOne, 328 IN VOID *MemTwo, 329 IN UINTN Len 330 ) 331 /*++ 332 333 Routine Description: 334 335 Compares two memory buffers of a given length. 336 337 Arguments: 338 339 MemOne - First memory buffer 340 341 MemTwo - Second memory buffer 342 343 Len - Length of Mem1 and Mem2 memory regions to compare 344 345 Returns: 346 347 = 0 if MemOne == MemTwo 348 349 > 0 if MemOne > MemTwo 350 351 < 0 if MemOne < MemTwo 352 353 --*/ 354 ; 355 356 VOID 357 EfiCommonLibZeroMem ( 358 IN VOID *Buffer, 359 IN UINTN Size 360 ) 361 /*++ 362 363 Routine Description: 364 365 Set Buffer to 0 for Size bytes. 366 367 Arguments: 368 369 Buffer - Memory to set. 370 371 Size - Number of bytes to set 372 373 Returns: 374 375 None 376 377 --*/ 378 ; 379 380 // 381 // Min Max 382 // 383 #define EFI_MIN(a, b) (((a) < (b)) ? (a) : (b)) 384 #define EFI_MAX(a, b) (((a) > (b)) ? (a) : (b)) 385 386 // 387 // Align a pointer. The pointer represented by ptr is aligned to the bound. 388 // The resulting pointer is always equal or greater (by no more than bound-1) 389 // than the ptr. I.e., if the ptr is already aligned, the result will be equal to ptr. 390 // Valid values for bound are powers of two: 2, 4, 8, 16, 32 etc. 391 // The returned pointer is VOID* this assignment-compatible with all pointer types. 392 // 393 #define EFI_ALIGN(ptr, bound) ((VOID *) (((UINTN) (ptr) + ((UINTN) (bound) - 1)) &~((UINTN) (bound) - 1))) 394 395 // 396 // Alignment tests. 397 // 398 #define EFI_UINTN_ALIGN_MASK (sizeof (UINTN) - 1) 399 #define EFI_UINTN_ALIGNED(ptr) (((UINTN) (ptr)) & EFI_UINTN_ALIGN_MASK) 400 401 // 402 // Integer division with rounding to the nearest rather than truncating. 403 // For example 8/3=2 but EFI_IDIV_ROUND(8,3)=3. 1/3=0 and EFI_IDIV_ROUND(1,3)=0. 404 // A half is rounded up e.g., EFI_IDIV_ROUND(1,2)=1 but 1/2=0. 405 // 406 #define EFI_IDIV_ROUND(r, s) ((r) / (s) + (((2 * ((r) % (s))) < (s)) ? 0 : 1)) 407 408 // 409 // ReportStatusCode.c init 410 // 411 VOID * 412 EfiConstructStatusCodeData ( 413 IN UINT16 DataSize, 414 IN EFI_GUID *TypeGuid, 415 IN OUT EFI_STATUS_CODE_DATA *Data 416 ) 417 /*++ 418 419 Routine Description: 420 421 Construct stanader header for optional data passed into ReportStatusCode 422 423 Arguments: 424 425 DataSize - Size of optional data. Does not include EFI_STATUS_CODE_DATA header 426 TypeGuid - GUID to place in EFI_STATUS_CODE_DATA 427 Data - Buffer to use. 428 429 Returns: 430 431 Return pointer to Data buffer pointing past the end of EFI_STATUS_CODE_DATA 432 433 --*/ 434 ; 435 436 EFI_STATUS 437 EfiDebugVPrintWorker ( 438 IN UINTN ErrorLevel, 439 IN CHAR8 *Format, 440 IN VA_LIST Marker, 441 IN UINTN BufferSize, 442 IN OUT VOID *Buffer 443 ) 444 /*++ 445 446 Routine Description: 447 448 Worker function for DEBUG(). If Error Logging hub is loaded log ASSERT 449 information. If Error Logging hub is not loaded do nothing. 450 451 We use UINT64 buffers due to IPF alignment concerns. 452 453 Arguments: 454 455 ErrorLevel - If error level is set do the debug print. 456 457 Format - String to use for the print, followed by Print arguments. 458 459 Marker - VarArgs 460 461 BufferSize - Size of Buffer. 462 463 Buffer - Caller allocated buffer, contains ReportStatusCode extended data 464 465 Returns: 466 467 Status code 468 469 --*/ 470 ; 471 472 EFI_STATUS 473 EfiDebugAssertWorker ( 474 IN CHAR8 *FileName, 475 IN INTN LineNumber, 476 IN CHAR8 *Description, 477 IN UINTN BufferSize, 478 IN OUT VOID *Buffer 479 ) 480 /*++ 481 482 Routine Description: 483 484 Worker function for ASSERT (). If Error Logging hub is loaded log ASSERT 485 information. If Error Logging hub is not loaded DEADLOOP (). 486 487 We use UINT64 buffers due to IPF alignment concerns. 488 489 Arguments: 490 491 FileName - File name of failing routine. 492 493 LineNumber - Line number of failing ASSERT(). 494 495 Description - Description, usually the assertion, 496 497 BufferSize - Size of Buffer. 498 499 Buffer - Caller allocated buffer, contains ReportStatusCode extendecd data 500 501 Returns: 502 503 Status code 504 505 --*/ 506 ; 507 508 BOOLEAN 509 ReportStatusCodeExtractAssertInfo ( 510 IN EFI_STATUS_CODE_TYPE CodeType, 511 IN EFI_STATUS_CODE_VALUE Value, 512 IN EFI_STATUS_CODE_DATA *Data, 513 OUT CHAR8 **Filename, 514 OUT CHAR8 **Description, 515 OUT UINT32 *LineNumber 516 ) 517 /*++ 518 519 Routine Description: 520 521 Extract assert information from status code data. 522 523 Arguments: 524 525 CodeType - Code type 526 Value - Code value 527 Data - Optional data associated with this status code. 528 Filename - Filename extracted from Data 529 Description - Description extracted from Data 530 LineNumber - Line number extracted from Data 531 532 Returns: 533 534 TRUE - Successfully extracted 535 536 FALSE - Extraction failed 537 538 --*/ 539 ; 540 541 BOOLEAN 542 ReportStatusCodeExtractDebugInfo ( 543 IN EFI_STATUS_CODE_DATA *Data, 544 OUT UINT32 *ErrorLevel, 545 OUT VA_LIST *Marker, 546 OUT CHAR8 **Format 547 ) 548 /*++ 549 550 Routine Description: 551 552 Extract debug information from status code data. 553 554 Arguments: 555 556 Data - Optional data associated with status code. 557 ErrorLevel - Error level extracted from Data 558 Marker - VA_LIST extracted from Data 559 Format - Format string extracted from Data 560 561 Returns: 562 563 TRUE - Successfully extracted 564 565 FALSE - Extraction failed 566 567 --*/ 568 ; 569 570 BOOLEAN 571 CodeTypeToPostCode ( 572 IN EFI_STATUS_CODE_TYPE CodeType, 573 IN EFI_STATUS_CODE_VALUE Value, 574 OUT UINT8 *PostCode 575 ) 576 /*++ 577 578 Routine Description: 579 580 Convert code value to an 8 bit post code 581 582 Arguments: 583 584 CodeType - Code type 585 Value - Code value 586 PostCode - Post code as output 587 588 Returns: 589 590 TRUE - Successfully converted 591 592 FALSE - Convertion failed 593 594 --*/ 595 ; 596 597 // 598 // math.c 599 // 600 UINT64 601 MultU64x32 ( 602 IN UINT64 Multiplicand, 603 IN UINTN Multiplier 604 ) 605 /*++ 606 607 Routine Description: 608 609 This routine allows a 64 bit value to be multiplied with a 32 bit 610 value returns 64bit result. 611 No checking if the result is greater than 64bits 612 613 Arguments: 614 615 Multiplicand - multiplicand 616 Multiplier - multiplier 617 618 Returns: 619 620 Multiplicand * Multiplier 621 622 --*/ 623 ; 624 625 UINT64 626 DivU64x32 ( 627 IN UINT64 Dividend, 628 IN UINTN Divisor, 629 OUT UINTN *Remainder OPTIONAL 630 ) 631 /*++ 632 633 Routine Description: 634 635 This routine allows a 64 bit value to be divided with a 32 bit value returns 636 64bit result and the Remainder. 637 638 Arguments: 639 640 Dividend - dividend 641 Divisor - divisor 642 Remainder - buffer for remainder 643 644 Returns: 645 646 Dividend / Divisor 647 Remainder = Dividend mod Divisor 648 649 --*/ 650 ; 651 652 UINT64 653 RShiftU64 ( 654 IN UINT64 Operand, 655 IN UINTN Count 656 ) 657 /*++ 658 659 Routine Description: 660 661 This routine allows a 64 bit value to be right shifted by 32 bits and returns the 662 shifted value. 663 Count is valid up 63. (Only Bits 0-5 is valid for Count) 664 665 Arguments: 666 667 Operand - Value to be shifted 668 Count - Number of times to shift right. 669 670 Returns: 671 672 Value shifted right identified by the Count. 673 674 --*/ 675 ; 676 677 UINT64 678 LShiftU64 ( 679 IN UINT64 Operand, 680 IN UINTN Count 681 ) 682 /*++ 683 684 Routine Description: 685 686 This routine allows a 64 bit value to be left shifted by 32 bits and 687 returns the shifted value. 688 Count is valid up 63. (Only Bits 0-5 is valid for Count) 689 690 Arguments: 691 692 Operand - Value to be shifted 693 Count - Number of times to shift left. 694 695 Returns: 696 697 Value shifted left identified by the Count. 698 699 --*/ 700 ; 701 702 UINT64 703 Power10U64 ( 704 IN UINT64 Operand, 705 IN UINTN Power 706 ) 707 /*++ 708 709 Routine Description: 710 711 Raise 10 to the power of Power, and multiply the result with Operand 712 713 Arguments: 714 715 Operand - multiplicand 716 Power - power 717 718 Returns: 719 720 Operand * 10 ^ Power 721 722 --*/ 723 ; 724 725 UINT8 726 Log2 ( 727 IN UINT64 Operand 728 ) 729 /*++ 730 731 Routine Description: 732 733 Calculates and floors logarithms based on 2 734 735 Arguments: 736 737 Operand - value to calculate logarithm 738 739 Returns: 740 741 The largest integer that is less than or equal 742 to the logarithm of Operand based on 2 743 744 --*/ 745 ; 746 747 UINT64 748 GetPowerOfTwo ( 749 IN UINT64 Input 750 ) 751 /*++ 752 753 Routine Description: 754 755 Calculates the largest integer that is both 756 a power of two and less than Input 757 758 Arguments: 759 760 Input - value to calculate power of two 761 762 Returns: 763 764 the largest integer that is both a power of 765 two and less than Input 766 767 --*/ 768 ; 769 770 // 771 // Unicode String primatives 772 // 773 VOID 774 EfiStrCpy ( 775 IN CHAR16 *Destination, 776 IN CHAR16 *Source 777 ) 778 /*++ 779 780 Routine Description: 781 Copy the Unicode string Source to Destination. 782 783 Arguments: 784 Destination - Location to copy string 785 Source - String to copy 786 787 Returns: 788 NONE 789 790 --*/ 791 ; 792 793 VOID 794 EfiStrnCpy ( 795 OUT CHAR16 *Dst, 796 IN CHAR16 *Src, 797 IN UINTN Length 798 ) 799 /*++ 800 801 Routine Description: 802 Copy a string from source to destination 803 804 Arguments: 805 Dst Destination string 806 Src Source string 807 Length Length of destination string 808 809 Returns: 810 811 --*/ 812 ; 813 814 UINTN 815 EfiStrLen ( 816 IN CHAR16 *String 817 ) 818 /*++ 819 820 Routine Description: 821 Return the number of Unicode characters in String. This is not the same as 822 the length of the string in bytes. 823 824 Arguments: 825 String - String to process 826 827 Returns: 828 Number of Unicode characters in String 829 830 --*/ 831 ; 832 833 UINTN 834 EfiStrSize ( 835 IN CHAR16 *String 836 ) 837 /*++ 838 839 Routine Description: 840 Return the number bytes in the Unicode String. This is not the same as 841 the length of the string in characters. The string size includes the NULL 842 843 Arguments: 844 String - String to process 845 846 Returns: 847 Number of bytes in String 848 849 --*/ 850 ; 851 852 INTN 853 EfiStrCmp ( 854 IN CHAR16 *String, 855 IN CHAR16 *String2 856 ) 857 /*++ 858 859 Routine Description: 860 Return the alphabetic relationship between two stirngs. 861 862 Arguments: 863 String - Compare to String2 864 865 String2 - Compare to String 866 867 Returns: 868 0 - Identical 869 870 > 0 - String is alphabeticly greater than String2 871 872 < 0 - String is alphabeticly less than String2 873 874 --*/ 875 ; 876 877 INTN 878 EfiStrnCmp ( 879 IN CHAR16 *String, 880 IN CHAR16 *String2, 881 IN UINTN Length 882 ) 883 /*++ 884 885 Routine Description: 886 This function compares the Unicode string String to the Unicode 887 string String2 for len characters. If the first len characters 888 of String is identical to the first len characters of String2, 889 then 0 is returned. If substring of String sorts lexicographically 890 after String2, the function returns a number greater than 0. If 891 substring of String sorts lexicographically before String2, the 892 function returns a number less than 0. 893 894 Arguments: 895 String - Compare to String2 896 String2 - Compare to String 897 Length - Number of Unicode characters to compare 898 899 Returns: 900 0 - The substring of String and String2 is identical. 901 > 0 - The substring of String sorts lexicographically after String2 902 < 0 - The substring of String sorts lexicographically before String2 903 904 --*/ 905 ; 906 907 VOID 908 EfiStrCat ( 909 IN CHAR16 *Destination, 910 IN CHAR16 *Source 911 ) 912 /*++ 913 914 Routine Description: 915 Concatinate Source on the end of Destination 916 917 Arguments: 918 Destination - String to added to the end of. 919 Source - String to concatinate. 920 921 Returns: 922 NONE 923 924 --*/ 925 ; 926 927 VOID 928 EfiStrnCat ( 929 IN CHAR16 *Dest, 930 IN CHAR16 *Src, 931 IN UINTN Length 932 ) 933 /*++ 934 935 Routine Description: 936 Concatinate Source on the end of Destination 937 938 Arguments: 939 Dst Destination string 940 Src Source string 941 Length Length of destination string 942 943 Returns: 944 945 --*/ 946 ; 947 948 UINTN 949 EfiAsciiStrLen ( 950 IN CHAR8 *String 951 ) 952 /*++ 953 954 Routine Description: 955 Return the number of Ascii characters in String. This is not the same as 956 the length of the string in bytes. 957 958 Arguments: 959 String - String to process 960 961 Returns: 962 Number of Unicode characters in String 963 964 --*/ 965 ; 966 967 CHAR8 * 968 EfiAsciiStrCpy ( 969 IN CHAR8 *Destination, 970 IN CHAR8 *Source 971 ) 972 /*++ 973 974 Routine Description: 975 Copy the Ascii string Source to Destination. 976 977 Arguments: 978 Destination - Location to copy string 979 Source - String to copy 980 981 Returns: 982 Pointer just pass the end of Destination 983 984 --*/ 985 ; 986 987 VOID 988 EfiAsciiStrnCpy ( 989 OUT CHAR8 *Dst, 990 IN CHAR8 *Src, 991 IN UINTN Length 992 ) 993 /*++ 994 995 Routine Description: 996 Copy the Ascii string from source to destination 997 998 Arguments: 999 Dst Destination string 1000 Src Source string 1001 Length Length of destination string 1002 1003 Returns: 1004 1005 --*/ 1006 ; 1007 1008 UINTN 1009 EfiAsciiStrSize ( 1010 IN CHAR8 *String 1011 ) 1012 /*++ 1013 1014 Routine Description: 1015 Return the number bytes in the Ascii String. This is not the same as 1016 the length of the string in characters. The string size includes the NULL 1017 1018 Arguments: 1019 String - String to process 1020 1021 Returns: 1022 Number of bytes in String 1023 1024 --*/ 1025 ; 1026 1027 1028 INTN 1029 EfiAsciiStrCmp ( 1030 IN CHAR8 *String, 1031 IN CHAR8 *String2 1032 ) 1033 /*++ 1034 1035 Routine Description: 1036 Compare the Ascii string pointed by String to the string pointed by String2. 1037 1038 Arguments: 1039 String - String to process 1040 1041 String2 - The other string to process 1042 1043 Returns: 1044 Return a positive integer if String is lexicall greater than String2; Zero if 1045 the two strings are identical; and a negative integer if String is lexically 1046 less than String2. 1047 --*/ 1048 ; 1049 1050 INTN 1051 EfiAsciiStrnCmp ( 1052 IN CHAR8 *String, 1053 IN CHAR8 *String2, 1054 IN UINTN Length 1055 ) 1056 /*++ 1057 1058 Routine Description: 1059 This function compares the ASCII string String to the ASCII 1060 string String2 for len characters. If the first len characters 1061 of String is identical to the first len characters of String2, 1062 then 0 is returned. If substring of String sorts lexicographically 1063 after String2, the function returns a number greater than 0. If 1064 substring of String sorts lexicographically before String2, the 1065 function returns a number less than 0. 1066 1067 Arguments: 1068 String - Compare to String2 1069 String2 - Compare to String 1070 Length - Number of ASCII characters to compare 1071 1072 Returns: 1073 0 - The substring of String and String2 is identical. 1074 > 0 - The substring of String sorts lexicographically after String2 1075 < 0 - The substring of String sorts lexicographically before String2 1076 1077 --*/ 1078 ; 1079 1080 VOID 1081 EfiAsciiStrCat ( 1082 IN CHAR8 *Destination, 1083 IN CHAR8 *Source 1084 ) 1085 /*++ 1086 1087 Routine Description: 1088 Concatinate Source on the end of Destination 1089 1090 Arguments: 1091 Destination - String to added to the end of. 1092 Source - String to concatinate. 1093 1094 Returns: 1095 NONE 1096 1097 --*/ 1098 ; 1099 1100 VOID 1101 EfiAsciiStrnCat ( 1102 IN CHAR8 *Destination, 1103 IN CHAR8 *Source, 1104 IN UINTN Length 1105 ) 1106 /*++ 1107 1108 Routine Description: 1109 Concatinate Source on the end of Destination 1110 1111 Arguments: 1112 Destination - String to added to the end of. 1113 Source - String to concatinate. 1114 1115 Returns: 1116 NONE 1117 1118 --*/ 1119 ; 1120 1121 // 1122 // Print primitives 1123 // 1124 #define LEFT_JUSTIFY 0x01 1125 #define PREFIX_SIGN 0x02 1126 #define PREFIX_BLANK 0x04 1127 #define COMMA_TYPE 0x08 1128 #define LONG_TYPE 0x10 1129 #define PREFIX_ZERO 0x20 1130 1131 // 1132 // Length of temp string buffer to store value string. 1133 // 1134 #define CHARACTER_NUMBER_FOR_VALUE 30 1135 1136 UINTN 1137 EfiValueToHexStr ( 1138 IN OUT CHAR16 *Buffer, 1139 IN UINT64 Value, 1140 IN UINTN Flags, 1141 IN UINTN Width 1142 ) 1143 /*++ 1144 1145 Routine Description: 1146 1147 VSPrint worker function that prints a Value as a hex number in Buffer 1148 1149 Arguments: 1150 1151 Buffer - Location to place ascii hex string of Value. 1152 1153 Value - Hex value to convert to a string in Buffer. 1154 1155 Flags - Flags to use in printing Hex string, see file header for details. 1156 1157 Width - Width of hex value. 1158 1159 Returns: 1160 1161 Number of characters printed. 1162 1163 --*/ 1164 ; 1165 1166 UINTN 1167 EfiValueToString ( 1168 IN OUT CHAR16 *Buffer, 1169 IN INT64 Value, 1170 IN UINTN Flags, 1171 IN UINTN Width 1172 ) 1173 /*++ 1174 1175 Routine Description: 1176 1177 VSPrint worker function that prints a Value as a decimal number in Buffer 1178 1179 Arguments: 1180 1181 Buffer - Location to place ascii decimal number string of Value. 1182 1183 Value - Decimal value to convert to a string in Buffer. 1184 1185 Flags - Flags to use in printing decimal string, see file header for details. 1186 1187 Width - Width of hex value. 1188 1189 Returns: 1190 1191 Number of characters printed. 1192 1193 --*/ 1194 ; 1195 1196 BOOLEAN 1197 IsHexDigit ( 1198 OUT UINT8 *Digit, 1199 IN CHAR16 Char 1200 ) 1201 /*++ 1202 1203 Routine Description: 1204 Determines if a Unicode character is a hexadecimal digit. 1205 The test is case insensitive. 1206 1207 Arguments: 1208 Digit - Pointer to byte that receives the value of the hex character. 1209 Char - Unicode character to test. 1210 1211 Returns: 1212 TRUE - If the character is a hexadecimal digit. 1213 FALSE - Otherwise. 1214 1215 --*/ 1216 ; 1217 1218 CHAR16 1219 NibbleToHexChar ( 1220 UINT8 Nibble 1221 ) 1222 /*++ 1223 1224 Routine Description: 1225 Converts the low nibble of a byte to hex unicode character. 1226 1227 Arguments: 1228 Nibble - lower nibble of a byte. 1229 1230 Returns: 1231 Hex unicode character. 1232 1233 --*/ 1234 ; 1235 1236 EFI_STATUS 1237 HexStringToBuf ( 1238 IN OUT UINT8 *Buf, 1239 IN OUT UINTN *Len, 1240 IN CHAR16 *Str, 1241 OUT UINTN *ConvertedStrLen OPTIONAL 1242 ) 1243 /*++ 1244 1245 Routine Description: 1246 Converts Unicode string to binary buffer. 1247 The conversion may be partial. 1248 The first character in the string that is not hex digit stops the conversion. 1249 At a minimum, any blob of data could be represented as a hex string. 1250 1251 Arguments: 1252 Buf - Pointer to buffer that receives the data. 1253 Len - Length in bytes of the buffer to hold converted data. 1254 If routine return with EFI_SUCCESS, containing length of converted data. 1255 If routine return with EFI_BUFFER_TOO_SMALL, containg length of buffer desired. 1256 Str - String to be converted from. 1257 ConvertedStrLen - Length of the Hex String consumed. 1258 1259 Returns: 1260 EFI_SUCCESS: Routine Success. 1261 EFI_BUFFER_TOO_SMALL: The buffer is too small to hold converted data. 1262 EFI_ 1263 1264 --*/ 1265 ; 1266 1267 EFI_STATUS 1268 BufToHexString ( 1269 IN OUT CHAR16 *Str, 1270 IN OUT UINTN *HexStringBufferLength, 1271 IN UINT8 *Buf, 1272 IN UINTN Len 1273 ) 1274 /*++ 1275 1276 Routine Description: 1277 Converts binary buffer to Unicode string. 1278 At a minimum, any blob of data could be represented as a hex string. 1279 1280 Arguments: 1281 Str - Pointer to the string. 1282 HexStringBufferLength - Length in bytes of buffer to hold the hex string. Includes tailing '\0' character. 1283 If routine return with EFI_SUCCESS, containing length of hex string buffer. 1284 If routine return with EFI_BUFFER_TOO_SMALL, containg length of hex string buffer desired. 1285 Buf - Buffer to be converted from. 1286 Len - Length in bytes of the buffer to be converted. 1287 1288 Returns: 1289 EFI_SUCCESS: Routine success. 1290 EFI_BUFFER_TOO_SMALL: The hex string buffer is too small. 1291 1292 --*/ 1293 ; 1294 1295 VOID 1296 EfiStrTrim ( 1297 IN OUT CHAR16 *str, 1298 IN CHAR16 CharC 1299 ) 1300 /*++ 1301 1302 Routine Description: 1303 1304 Removes (trims) specified leading and trailing characters from a string. 1305 1306 Arguments: 1307 1308 str - Pointer to the null-terminated string to be trimmed. On return, 1309 str will hold the trimmed string. 1310 CharC - Character will be trimmed from str. 1311 1312 Returns: 1313 1314 None 1315 1316 --*/ 1317 ; 1318 CHAR16* 1319 EfiStrStr ( 1320 IN CHAR16 *String, 1321 IN CHAR16 *StrCharSet 1322 ) 1323 /*++ 1324 1325 Routine Description: 1326 1327 Find a substring. 1328 1329 Arguments: 1330 1331 String - Null-terminated string to search. 1332 StrCharSet - Null-terminated string to search for. 1333 1334 Returns: 1335 The address of the first occurrence of the matching substring if successful, or NULL otherwise. 1336 --*/ 1337 ; 1338 1339 CHAR8* 1340 EfiAsciiStrStr ( 1341 IN CHAR8 *String, 1342 IN CHAR8 *StrCharSet 1343 ) 1344 /*++ 1345 1346 Routine Description: 1347 1348 Find a Ascii substring. 1349 1350 Arguments: 1351 1352 String - Null-terminated Ascii string to search. 1353 StrCharSet - Null-terminated Ascii string to search for. 1354 1355 Returns: 1356 The address of the first occurrence of the matching Ascii substring if successful, or NULL otherwise. 1357 --*/ 1358 ; 1359 #endif 1360