Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/UefiPxeBcDxe/PxeBcBoot.c
- Timestamp:
- Apr 14, 2023 3:17:44 PM (22 months ago)
- Location:
- trunk/src/VBox/Devices/EFI/FirmwareNew
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Devices/EFI/FirmwareNew
-
Property svn:mergeinfo
changed from (toggle deleted branches)
to (toggle deleted branches)/vendor/edk2/current 103735-103757,103769-103776,129194-145445 /vendor/edk2/current 103735-103757,103769-103776,129194-156846
-
Property svn:mergeinfo
changed from (toggle deleted branches)
-
trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/UefiPxeBcDxe/PxeBcBoot.c
r85718 r99404 10 10 11 11 #include "PxeBcImpl.h" 12 13 12 14 13 /** … … 23 22 VOID 24 23 PxeBcDisplayBootItem ( 25 IN UINT8 26 IN UINT8 24 IN UINT8 *Str, 25 IN UINT8 Len 27 26 ) 28 27 { 29 UINT8 28 UINT8 Tmp; 30 29 31 30 // 32 31 // Cut off the chars behind 70th. 33 32 // 34 Len = (UINT8)MIN (PXEBC_DISPLAY_MAX_LINE, Len);35 Tmp 36 Str[Len] 33 Len = (UINT8)MIN (PXEBC_DISPLAY_MAX_LINE, Len); 34 Tmp = Str[Len]; 35 Str[Len] = 0; 37 36 AsciiPrint ("%a \n", Str); 38 37 … … 40 39 // Restore the original 70th char. 41 40 // 42 Str[Len] 41 Str[Len] = Tmp; 43 42 } 44 45 43 46 44 /** … … 58 56 EFI_STATUS 59 57 PxeBcSelectBootPrompt ( 60 IN PXEBC_PRIVATE_DATA 58 IN PXEBC_PRIVATE_DATA *Private 61 59 ) 62 60 { 63 PXEBC_DHCP_PACKET_CACHE 64 PXEBC_VENDOR_OPTION 65 EFI_PXE_BASE_CODE_MODE 66 EFI_EVENT 67 EFI_EVENT 68 EFI_INPUT_KEY 69 EFI_STATUS 70 UINT32 71 UINT8 72 UINT8 73 UINT8 74 INT32 75 INT32 61 PXEBC_DHCP_PACKET_CACHE *Cache; 62 PXEBC_VENDOR_OPTION *VendorOpt; 63 EFI_PXE_BASE_CODE_MODE *Mode; 64 EFI_EVENT TimeoutEvent; 65 EFI_EVENT DescendEvent; 66 EFI_INPUT_KEY InputKey; 67 EFI_STATUS Status; 68 UINT32 OfferType; 69 UINT8 Timeout; 70 UINT8 *Prompt; 71 UINT8 PromptLen; 72 INT32 SecCol; 73 INT32 SecRow; 76 74 77 75 TimeoutEvent = NULL; … … 84 82 // Only DhcpPxe10 and ProxyPxe10 offer needs boot prompt. 85 83 // 86 if ( OfferType != PxeOfferTypeProxyPxe10 && OfferType != PxeOfferTypeDhcpPxe10) {84 if ((OfferType != PxeOfferTypeProxyPxe10) && (OfferType != PxeOfferTypeDhcpPxe10)) { 87 85 return EFI_NOT_FOUND; 88 86 } … … 101 99 // 102 100 if (IS_DISABLE_PROMPT_MENU (VendorOpt->DiscoverCtrl) && 103 Cache->Dhcp4.OptList[PXEBC_DHCP4_TAG_INDEX_BOOTFILE] != NULL) { 101 (Cache->Dhcp4.OptList[PXEBC_DHCP4_TAG_INDEX_BOOTFILE] != NULL)) 102 { 104 103 return EFI_ABORTED; 105 104 } … … 111 110 Timeout = VendorOpt->MenuPrompt->Timeout; 112 111 Prompt = VendorOpt->MenuPrompt->Prompt; 113 PromptLen = (UINT8) 112 PromptLen = (UINT8)(VendorOpt->MenuPromptLen - 1); 114 113 115 114 // … … 119 118 return EFI_TIMEOUT; 120 119 } 120 121 121 if (Timeout == 255) { 122 122 return EFI_SUCCESS; … … 186 186 AsciiPrint ("(%d) ", Timeout--); 187 187 } 188 188 189 if (gST->ConIn->ReadKeyStroke (gST->ConIn, &InputKey) == EFI_NOT_READY) { 189 190 gBS->Stall (10 * TICKS_PER_MS); 190 191 continue; 191 192 } 193 192 194 // 193 195 // Parse the input key by user. … … 195 197 // 196 198 if (InputKey.ScanCode == 0) { 197 198 199 switch (InputKey.UnicodeChar) { 199 200 case CTRL ('c'): 201 Status = EFI_ABORTED; 202 break; 203 204 case CTRL ('m'): 205 case 'm': 206 case 'M': 207 Status = EFI_SUCCESS; 208 break; 209 210 default: 211 continue; 200 case CTRL ('c'): 201 Status = EFI_ABORTED; 202 break; 203 204 case CTRL ('m'): 205 case 'm': 206 case 'M': 207 Status = EFI_SUCCESS; 208 break; 209 210 default: 211 continue; 212 212 } 213 214 213 } else { 215 216 214 switch (InputKey.ScanCode) { 217 218 case SCAN_F8: 219 Status = EFI_SUCCESS; 220 break; 221 222 case SCAN_ESC: 223 Status = EFI_ABORTED; 224 break; 225 226 default: 227 continue; 215 case SCAN_F8: 216 Status = EFI_SUCCESS; 217 break; 218 219 case SCAN_ESC: 220 Status = EFI_ABORTED; 221 break; 222 223 default: 224 continue; 228 225 } 229 226 } … … 235 232 // Reset the cursor on the screen. 236 233 // 237 gST->ConOut->SetCursorPosition (gST->ConOut, 0 234 gST->ConOut->SetCursorPosition (gST->ConOut, 0, SecRow + 1); 238 235 239 236 ON_EXIT: … … 241 238 gBS->CloseEvent (DescendEvent); 242 239 } 240 243 241 if (TimeoutEvent != NULL) { 244 242 gBS->CloseEvent (TimeoutEvent); … … 247 245 return Status; 248 246 } 249 250 247 251 248 /** … … 263 260 EFI_STATUS 264 261 PxeBcSelectBootMenu ( 265 IN PXEBC_PRIVATE_DATA 266 OUT UINT16 267 IN BOOLEAN 262 IN PXEBC_PRIVATE_DATA *Private, 263 OUT UINT16 *Type, 264 IN BOOLEAN UseDefaultItem 268 265 ) 269 266 { 270 EFI_PXE_BASE_CODE_MODE 271 PXEBC_DHCP_PACKET_CACHE 272 PXEBC_VENDOR_OPTION 273 EFI_INPUT_KEY 274 UINT32 275 UINT8 276 UINT8 277 INT32 278 UINT16 279 UINT16 280 UINT8 281 BOOLEAN 282 CHAR8 283 PXEBC_BOOT_MENU_ENTRY 284 PXEBC_BOOT_MENU_ENTRY 267 EFI_PXE_BASE_CODE_MODE *Mode; 268 PXEBC_DHCP_PACKET_CACHE *Cache; 269 PXEBC_VENDOR_OPTION *VendorOpt; 270 EFI_INPUT_KEY InputKey; 271 UINT32 OfferType; 272 UINT8 MenuSize; 273 UINT8 MenuNum; 274 INT32 TopRow; 275 UINT16 Select; 276 UINT16 LastSelect; 277 UINT8 Index; 278 BOOLEAN Finish; 279 CHAR8 Blank[PXEBC_DISPLAY_MAX_LINE]; 280 PXEBC_BOOT_MENU_ENTRY *MenuItem; 281 PXEBC_BOOT_MENU_ENTRY *MenuArray[PXEBC_MENU_MAX_NUM]; 285 282 286 283 Finish = FALSE; … … 306 303 // Display the boot menu on the screen. 307 304 // 308 SetMem (Blank, sizeof (Blank), ' ');309 310 MenuSize 311 MenuItem 305 SetMem (Blank, sizeof (Blank), ' '); 306 307 MenuSize = VendorOpt->BootMenuLen; 308 MenuItem = VendorOpt->BootMenu; 312 309 313 310 if (MenuSize == 0) { … … 317 314 while (MenuSize > 0 && Index < PXEBC_MENU_MAX_NUM) { 318 315 ASSERT (MenuItem != NULL); 319 MenuArray[Index] 320 MenuSize = (UINT8)(MenuSize - (MenuItem->DescLen + 3));321 MenuItem = (PXEBC_BOOT_MENU_ENTRY *) ((UINT8 *)MenuItem + MenuItem->DescLen + 3);316 MenuArray[Index] = MenuItem; 317 MenuSize = (UINT8)(MenuSize - (MenuItem->DescLen + 3)); 318 MenuItem = (PXEBC_BOOT_MENU_ENTRY *)((UINT8 *)MenuItem + MenuItem->DescLen + 3); 322 319 Index++; 323 320 } … … 362 359 if (InputKey.ScanCode == 0) { 363 360 switch (InputKey.UnicodeChar) { 364 case CTRL ('c'): 365 InputKey.ScanCode = SCAN_ESC; 361 case CTRL ('c'): 362 InputKey.ScanCode = SCAN_ESC; 363 break; 364 365 case CTRL ('j'): /* linefeed */ 366 case CTRL ('m'): /* return */ 367 Finish = TRUE; 368 break; 369 370 case CTRL ('i'): /* tab */ 371 case ' ': 372 case 'd': 373 case 'D': 374 InputKey.ScanCode = SCAN_DOWN; 375 break; 376 377 case CTRL ('h'): /* backspace */ 378 case 'u': 379 case 'U': 380 InputKey.ScanCode = SCAN_UP; 381 break; 382 383 default: 384 InputKey.ScanCode = 0; 385 } 386 } 387 388 switch (InputKey.ScanCode) { 389 case SCAN_LEFT: 390 case SCAN_UP: 391 if (Select != 0) { 392 Select--; 393 } 394 366 395 break; 367 396 368 case CTRL ('j'): /* linefeed */ 369 case CTRL ('m'): /* return */ 370 Finish = TRUE; 397 case SCAN_DOWN: 398 case SCAN_RIGHT: 399 if (++Select == MenuNum) { 400 Select--; 401 } 402 371 403 break; 372 404 373 case CTRL ('i'): /* tab */ 374 case ' ': 375 case 'd': 376 case 'D': 377 InputKey.ScanCode = SCAN_DOWN; 405 case SCAN_PAGE_UP: 406 case SCAN_HOME: 407 Select = 0; 378 408 break; 379 409 380 case CTRL ('h'): /* backspace */ 381 case 'u': 382 case 'U': 383 InputKey.ScanCode = SCAN_UP; 410 case SCAN_PAGE_DOWN: 411 case SCAN_END: 412 Select = (UINT16)(MenuNum - 1); 384 413 break; 385 414 386 default: 387 InputKey.ScanCode = 0; 388 } 389 } 390 391 switch (InputKey.ScanCode) { 392 case SCAN_LEFT: 393 case SCAN_UP: 394 if (Select != 0) { 395 Select--; 396 } 397 break; 398 399 case SCAN_DOWN: 400 case SCAN_RIGHT: 401 if (++Select == MenuNum) { 402 Select--; 403 } 404 break; 405 406 case SCAN_PAGE_UP: 407 case SCAN_HOME: 408 Select = 0; 409 break; 410 411 case SCAN_PAGE_DOWN: 412 case SCAN_END: 413 Select = (UINT16) (MenuNum - 1); 414 break; 415 416 case SCAN_ESC: 417 return EFI_ABORTED; 415 case SCAN_ESC: 416 return EFI_ABORTED; 418 417 } 419 418 … … 442 441 } 443 442 444 445 443 /** 446 444 Parse out the boot information from the last Dhcp4 reply packet. … … 455 453 EFI_STATUS 456 454 PxeBcDhcp4BootInfo ( 457 IN OUT PXEBC_PRIVATE_DATA 458 OUT UINT64*BufferSize455 IN OUT PXEBC_PRIVATE_DATA *Private, 456 OUT UINT64 *BufferSize 459 457 ) 460 458 { … … 507 505 if (IS_DISABLE_PROMPT_MENU (VendorOpt->DiscoverCtrl) && IS_VALID_BOOT_SERVERS (VendorOpt->BitMap)) { 508 506 Entry = VendorOpt->BootSvr; 509 if ( VendorOpt->BootSvrLen >= sizeof (PXEBC_BOOT_SVR_ENTRY) && Entry->IpCnt > 0) {507 if ((VendorOpt->BootSvrLen >= sizeof (PXEBC_BOOT_SVR_ENTRY)) && (Entry->IpCnt > 0)) { 510 508 CopyMem ( 511 509 &Private->ServerIp, … … 515 513 } 516 514 } 515 517 516 if (Private->ServerIp.Addr[0] == 0) { 518 517 // … … 526 525 ); 527 526 } 527 528 528 if (Private->ServerIp.Addr[0] == 0) { 529 529 // … … 547 547 // 548 548 CopyMem (&Value, Cache4->OptList[PXEBC_DHCP4_TAG_INDEX_BOOTFILE_LEN]->Data, sizeof (Value)); 549 Value 549 Value = NTOHS (Value); 550 550 // 551 551 // The field of boot file size is 512 bytes in unit. … … 573 573 // Save the value of boot file size. 574 574 // 575 Private->BootFileSize = (UINTN) 575 Private->BootFileSize = (UINTN)*BufferSize; 576 576 577 577 // … … 586 586 } 587 587 588 589 588 /** 590 589 Parse out the boot information from the last Dhcp6 reply packet. … … 600 599 EFI_STATUS 601 600 PxeBcDhcp6BootInfo ( 602 IN OUT PXEBC_PRIVATE_DATA 603 OUT UINT64*BufferSize601 IN OUT PXEBC_PRIVATE_DATA *Private, 602 OUT UINT64 *BufferSize 604 603 ) 605 604 { … … 649 648 } 650 649 651 652 650 // 653 651 // Parse (m)tftp server ip address and bootfile name. … … 657 655 &Private->BootFileName, 658 656 &Private->ServerIp.v6, 659 (CHAR8 *) 657 (CHAR8 *)(Cache6->OptList[PXEBC_DHCP6_IDX_BOOT_FILE_URL]->Data), 660 658 NTOHS (Cache6->OptList[PXEBC_DHCP6_IDX_BOOT_FILE_URL]->OpLen) 661 659 ); … … 671 669 // Parse it out if have the boot file parameter option. 672 670 // 673 Status = PxeBcExtractBootFileParam ((CHAR8 *) 671 Status = PxeBcExtractBootFileParam ((CHAR8 *)Cache6->OptList[PXEBC_DHCP6_IDX_BOOT_FILE_PARAM]->Data, &Value); 674 672 if (EFI_ERROR (Status)) { 675 673 return Status; 676 674 } 675 677 676 // 678 677 // The field of boot file size is 512 bytes in unit. … … 700 699 // Save the value of boot file size. 701 700 // 702 Private->BootFileSize = (UINTN) 701 Private->BootFileSize = (UINTN)*BufferSize; 703 702 704 703 // … … 712 711 return Status; 713 712 } 714 715 713 716 714 /** … … 733 731 IN UINT16 Type, 734 732 IN OUT EFI_PXE_BASE_CODE_DISCOVER_INFO **DiscoverInfo, 735 OUT PXEBC_BOOT_SVR_ENTRY**BootEntry,736 OUT EFI_PXE_BASE_CODE_SRVLIST**SrvList733 OUT PXEBC_BOOT_SVR_ENTRY **BootEntry, 734 OUT EFI_PXE_BASE_CODE_SRVLIST **SrvList 737 735 ) 738 736 { 739 EFI_PXE_BASE_CODE_MODE *Mode;740 PXEBC_DHCP4_PACKET_CACHE *Cache4;741 PXEBC_VENDOR_OPTION *VendorOpt;742 PXEBC_BOOT_SVR_ENTRY *Entry;743 BOOLEAN IsFound;744 EFI_PXE_BASE_CODE_DISCOVER_INFO *Info;745 UINT16 Index;737 EFI_PXE_BASE_CODE_MODE *Mode; 738 PXEBC_DHCP4_PACKET_CACHE *Cache4; 739 PXEBC_VENDOR_OPTION *VendorOpt; 740 PXEBC_BOOT_SVR_ENTRY *Entry; 741 BOOLEAN IsFound; 742 EFI_PXE_BASE_CODE_DISCOVER_INFO *Info; 743 UINT16 Index; 746 744 747 745 Mode = Private->PxeBc.Mode; … … 760 758 CopyMem (&Info->SrvList[0].IpAddr, &Private->ServerIp, sizeof (EFI_IP_ADDRESS)); 761 759 762 *SrvList 760 *SrvList = Info->SrvList; 763 761 } else { 764 762 Entry = NULL; … … 779 777 Info->UseMCast = (BOOLEAN) !IS_DISABLE_MCAST_DISCOVER (VendorOpt->DiscoverCtrl); 780 778 Info->UseBCast = (BOOLEAN) !IS_DISABLE_BCAST_DISCOVER (VendorOpt->DiscoverCtrl); 781 Info->MustUseList = (BOOLEAN) 782 Info->UseUCast = (BOOLEAN) 779 Info->MustUseList = (BOOLEAN)IS_ENABLE_USE_SERVER_LIST (VendorOpt->DiscoverCtrl); 780 Info->UseUCast = (BOOLEAN)IS_VALID_BOOT_SERVERS (VendorOpt->BitMap); 783 781 784 782 if (Info->UseMCast) { … … 794 792 Entry = VendorOpt->BootSvr; 795 793 796 while (((UINT8) 794 while (((UINT8)(Entry - VendorOpt->BootSvr)) < VendorOpt->BootSvrLen) { 797 795 if (Entry->Type == HTONS (Type)) { 798 796 IsFound = TRUE; 799 797 break; 800 798 } 799 801 800 Entry = GET_NEXT_BOOT_SVR_ENTRY (Entry); 802 801 } … … 812 811 return EFI_OUT_OF_RESOURCES; 813 812 } 813 814 814 CopyMem (*DiscoverInfo, Info, sizeof (*Info)); 815 815 Info = *DiscoverInfo; … … 819 819 CopyMem (&Info->SrvList[Index].IpAddr, &Entry->IpAddr[Index], sizeof (EFI_IPv4_ADDRESS)); 820 820 Info->SrvList[Index].AcceptAnyResponse = !Info->MustUseList; 821 Info->SrvList[Index].Type = NTOHS (Entry->Type);821 Info->SrvList[Index].Type = NTOHS (Entry->Type); 822 822 } 823 823 } … … 829 829 return EFI_SUCCESS; 830 830 } 831 832 831 833 832 /** … … 850 849 EFI_STATUS 851 850 PxeBcDiscoverBootServer ( 852 IN PXEBC_PRIVATE_DATA 853 IN UINT16 854 IN UINT16 855 IN BOOLEAN 856 IN EFI_IP_ADDRESS 857 IN UINT16 858 IN EFI_PXE_BASE_CODE_SRVLIST 851 IN PXEBC_PRIVATE_DATA *Private, 852 IN UINT16 Type, 853 IN UINT16 *Layer, 854 IN BOOLEAN UseBis, 855 IN EFI_IP_ADDRESS *DestIp, 856 IN UINT16 IpCount, 857 IN EFI_PXE_BASE_CODE_SRVLIST *SrvList 859 858 ) 860 859 { … … 880 879 } 881 880 882 883 881 /** 884 882 Discover all the boot information for boot file. … … 895 893 EFI_STATUS 896 894 PxeBcDiscoverBootFile ( 897 IN OUT PXEBC_PRIVATE_DATA 898 OUT UINT64*BufferSize895 IN OUT PXEBC_PRIVATE_DATA *Private, 896 OUT UINT64 *BufferSize 899 897 ) 900 898 { … … 938 936 939 937 if (!EFI_ERROR (Status)) { 940 941 938 if (Type == EFI_PXE_BASE_CODE_BOOT_TYPE_BOOTSTRAP) { 942 939 // … … 950 947 // name and bootfile size. 951 948 // 952 UseBis = (BOOLEAN) 949 UseBis = (BOOLEAN)(Mode->BisSupported && Mode->BisDetected); 953 950 Status = PxeBc->Discover (PxeBc, Type, &Layer, UseBis, NULL); 954 951 if (EFI_ERROR (Status)) { … … 974 971 ); 975 972 } 973 976 974 Mode->ProxyOfferReceived = TRUE; 977 975 } … … 989 987 return Status; 990 988 } 991 992 989 993 990 /** … … 1003 1000 EFI_STATUS 1004 1001 PxeBcInstallCallback ( 1005 IN OUT PXEBC_PRIVATE_DATA 1006 OUT BOOLEAN*NewMakeCallback1002 IN OUT PXEBC_PRIVATE_DATA *Private, 1003 OUT BOOLEAN *NewMakeCallback 1007 1004 ) 1008 1005 { … … 1017 1014 Private->Mode.UsingIpv6 ? Private->Ip6Nic->Controller : Private->Ip4Nic->Controller, 1018 1015 &gEfiPxeBaseCodeCallbackProtocolGuid, 1019 (VOID **) 1016 (VOID **)&Private->PxeBcCallback 1020 1017 ); 1021 1018 if (Status == EFI_UNSUPPORTED) { 1022 1023 1019 CopyMem ( 1024 1020 &Private->LoadFileCallback, … … 1037 1033 ); 1038 1034 1039 (*NewMakeCallback) = (BOOLEAN) 1035 (*NewMakeCallback) = (BOOLEAN)(Status == EFI_SUCCESS); 1040 1036 1041 1037 Status = PxeBc->SetParameters (PxeBc, NULL, NULL, NULL, NULL, NewMakeCallback); … … 1049 1045 } 1050 1046 1051 1052 1047 /** 1053 1048 Uninstall PxeBaseCodeCallbackProtocol. … … 1060 1055 VOID 1061 1056 PxeBcUninstallCallback ( 1062 IN PXEBC_PRIVATE_DATA 1063 IN BOOLEAN 1057 IN PXEBC_PRIVATE_DATA *Private, 1058 IN BOOLEAN NewMakeCallback 1064 1059 ) 1065 1060 { 1066 EFI_PXE_BASE_CODE_PROTOCOL 1061 EFI_PXE_BASE_CODE_PROTOCOL *PxeBc; 1067 1062 1068 1063 PxeBc = &Private->PxeBc; 1069 1064 1070 1065 if (NewMakeCallback) { 1071 1072 1066 NewMakeCallback = FALSE; 1073 1067 … … 1075 1069 1076 1070 gBS->UninstallProtocolInterface ( 1077 Private->Mode.UsingIpv6 ? Private->Ip6Nic->Controller : Private->Ip4Nic->Controller,1078 &gEfiPxeBaseCodeCallbackProtocolGuid,1079 &Private->LoadFileCallback1080 );1071 Private->Mode.UsingIpv6 ? Private->Ip6Nic->Controller : Private->Ip4Nic->Controller, 1072 &gEfiPxeBaseCodeCallbackProtocolGuid, 1073 &Private->LoadFileCallback 1074 ); 1081 1075 } 1082 1076 } 1083 1084 1077 1085 1078 /** … … 1099 1092 EFI_STATUS 1100 1093 PxeBcReadBootFileList ( 1101 IN PXEBC_PRIVATE_DATA 1102 IN OUT UINT64 1103 IN VOID 1094 IN PXEBC_PRIVATE_DATA *Private, 1095 IN OUT UINT64 *BufferSize, 1096 IN VOID *Buffer OPTIONAL 1104 1097 ) 1105 1098 { 1106 EFI_STATUS 1107 EFI_PXE_BASE_CODE_PROTOCOL 1108 1109 PxeBc 1099 EFI_STATUS Status; 1100 EFI_PXE_BASE_CODE_PROTOCOL *PxeBc; 1101 1102 PxeBc = &Private->PxeBc; 1110 1103 1111 1104 // … … 1125 1118 FALSE 1126 1119 ); 1127 1128 1129 1120 } else { 1130 Status 1121 Status = EFI_BUFFER_TOO_SMALL; 1131 1122 } 1132 1123 1133 1124 return Status; 1134 1125 } 1135 1136 1126 1137 1127 /** … … 1151 1141 EFI_STATUS 1152 1142 PxeBcLoadBootFile ( 1153 IN PXEBC_PRIVATE_DATA 1154 IN OUT UINTN 1155 IN VOID 1143 IN PXEBC_PRIVATE_DATA *Private, 1144 IN OUT UINTN *BufferSize, 1145 IN VOID *Buffer OPTIONAL 1156 1146 ) 1157 1147 { 1158 BOOLEAN 1159 UINT64 1160 UINT64 1161 EFI_STATUS 1162 EFI_PXE_BASE_CODE_PROTOCOL 1163 EFI_PXE_BASE_CODE_MODE 1148 BOOLEAN NewMakeCallback; 1149 UINT64 RequiredSize; 1150 UINT64 CurrentSize; 1151 EFI_STATUS Status; 1152 EFI_PXE_BASE_CODE_PROTOCOL *PxeBc; 1153 EFI_PXE_BASE_CODE_MODE *PxeBcMode; 1164 1154 1165 1155 NewMakeCallback = FALSE; … … 1173 1163 // 1174 1164 Status = PxeBcInstallCallback (Private, &NewMakeCallback); 1175 if (EFI_ERROR (Status)) {1165 if (EFI_ERROR (Status)) { 1176 1166 return Status; 1177 1167 } … … 1196 1186 // Get the right buffer size of the bootfile required. 1197 1187 // 1198 if ( CurrentSize < RequiredSize || Buffer == NULL) {1188 if ((CurrentSize < RequiredSize) || (Buffer == NULL)) { 1199 1189 // 1200 1190 // It's buffer too small if the size of user buffer is smaller than the required. … … 1204 1194 goto ON_EXIT; 1205 1195 } 1196 1206 1197 CurrentSize = RequiredSize; 1207 } else if ( RequiredSize == 0&& PxeBcMode->UsingIpv6) {1198 } else if ((RequiredSize == 0) && PxeBcMode->UsingIpv6) { 1208 1199 // 1209 1200 // Try to download another bootfile in list if failed to get the filesize of the last one. … … 1213 1204 goto ON_EXIT; 1214 1205 } 1215 } else if ( CurrentSize < Private->BootFileSize || Buffer == NULL) {1206 } else if ((CurrentSize < Private->BootFileSize) || (Buffer == NULL)) { 1216 1207 // 1217 1208 // It's buffer too small if the size of user buffer is smaller than the required. … … 1248 1239 1249 1240 ON_EXIT: 1250 *BufferSize = (UINTN) 1251 PxeBcUninstallCallback (Private, NewMakeCallback);1241 *BufferSize = (UINTN)CurrentSize; 1242 PxeBcUninstallCallback (Private, NewMakeCallback); 1252 1243 1253 1244 if (Status == EFI_SUCCESS) { 1254 1245 AsciiPrint ("\n NBP file downloaded successfully.\n"); 1255 1246 return EFI_SUCCESS; 1256 } else if ( Status == EFI_BUFFER_TOO_SMALL && Buffer != NULL) {1247 } else if ((Status == EFI_BUFFER_TOO_SMALL) && (Buffer != NULL)) { 1257 1248 AsciiPrint ("\n PXE-E05: Buffer size is smaller than the requested file.\n"); 1258 1249 } else if (Status == EFI_DEVICE_ERROR) { … … 1280 1271 return Status; 1281 1272 } 1282
Note:
See TracChangeset
for help on using the changeset viewer.