Changeset 99404 in vbox for trunk/src/VBox/Devices/EFI/FirmwareNew/NetworkPkg/Mtftp6Dxe/Mtftp6Support.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/Mtftp6Dxe/Mtftp6Support.c
r85718 r99404 10 10 #include "Mtftp6Impl.h" 11 11 12 13 12 /** 14 13 Allocate a MTFTP block range, then init it to the range of [Start, End]. … … 22 21 MTFTP6_BLOCK_RANGE * 23 22 Mtftp6AllocateRange ( 24 IN UINT16 25 IN UINT16 26 ) 27 { 28 MTFTP6_BLOCK_RANGE 23 IN UINT16 Start, 24 IN UINT16 End 25 ) 26 { 27 MTFTP6_BLOCK_RANGE *Range; 29 28 30 29 Range = AllocateZeroPool (sizeof (MTFTP6_BLOCK_RANGE)); … … 35 34 36 35 InitializeListHead (&Range->Link); 37 Range->Start 38 Range->End 39 Range->Bound 36 Range->Start = Start; 37 Range->End = End; 38 Range->Bound = End; 40 39 41 40 return Range; 42 41 } 43 44 42 45 43 /** … … 65 63 EFI_STATUS 66 64 Mtftp6InitBlockRange ( 67 IN LIST_ENTRY 68 IN UINT16 69 IN UINT16 70 ) 71 { 72 MTFTP6_BLOCK_RANGE 65 IN LIST_ENTRY *Head, 66 IN UINT16 Start, 67 IN UINT16 End 68 ) 69 { 70 MTFTP6_BLOCK_RANGE *Range; 73 71 74 72 Range = Mtftp6AllocateRange (Start, End); … … 82 80 } 83 81 84 85 82 /** 86 83 Get the first valid block number on the range list. … … 94 91 INTN 95 92 Mtftp6GetNextBlockNum ( 96 IN LIST_ENTRY 93 IN LIST_ENTRY *Head 97 94 ) 98 95 { … … 106 103 return Range->Start; 107 104 } 108 109 105 110 106 /** … … 121 117 VOID 122 118 Mtftp6SetLastBlockNum ( 123 IN LIST_ENTRY 124 IN UINT16 125 ) 126 { 127 MTFTP6_BLOCK_RANGE 119 IN LIST_ENTRY *Head, 120 IN UINT16 Last 121 ) 122 { 123 MTFTP6_BLOCK_RANGE *Range; 128 124 129 125 // … … 143 139 Range->End = Last; 144 140 } 145 return ; 146 }147 }148 141 142 return; 143 } 144 } 149 145 150 146 /** … … 163 159 EFI_STATUS 164 160 Mtftp6RemoveBlockNum ( 165 IN LIST_ENTRY 166 IN UINT16 167 IN BOOLEAN 168 OUT UINT64 169 ) 170 { 171 MTFTP6_BLOCK_RANGE 172 MTFTP6_BLOCK_RANGE 173 LIST_ENTRY 161 IN LIST_ENTRY *Head, 162 IN UINT16 Num, 163 IN BOOLEAN Completed, 164 OUT UINT64 *BlockCounter 165 ) 166 { 167 MTFTP6_BLOCK_RANGE *Range; 168 MTFTP6_BLOCK_RANGE *NewRange; 169 LIST_ENTRY *Entry; 174 170 175 171 NET_LIST_FOR_EACH (Entry, Head) { 176 177 172 // 178 173 // Each block represents a hole [Start, End] in the file, … … 203 198 if (Range->Start > Num) { 204 199 return EFI_NOT_FOUND; 205 206 200 } else if (Range->Start == Num) { 207 201 Range->Start++; … … 215 209 // this solution. 216 210 // 217 *BlockCounter 211 *BlockCounter = Num; 218 212 219 213 if (Range->Round > 0) { … … 223 217 if (Range->Start > Range->Bound) { 224 218 Range->Start = 0; 225 Range->Round 219 Range->Round++; 226 220 } 227 221 … … 232 226 233 227 return EFI_SUCCESS; 234 235 228 } else { 236 229 if (Range->End == Num) { 237 230 Range->End--; 238 231 } else { 239 NewRange = Mtftp6AllocateRange ((UINT16) (Num + 1), (UINT16)Range->End);232 NewRange = Mtftp6AllocateRange ((UINT16)(Num + 1), (UINT16)Range->End); 240 233 241 234 if (NewRange == NULL) { … … 254 247 } 255 248 256 257 249 /** 258 250 Configure the opened Udp6 instance until the corresponding Ip6 instance … … 269 261 EFI_STATUS 270 262 Mtftp6GetMapping ( 271 IN UDP_IO 272 IN EFI_UDP6_CONFIG_DATA 273 ) 274 { 275 EFI_IP6_MODE_DATA 276 EFI_UDP6_PROTOCOL 277 EFI_STATUS 278 EFI_EVENT 279 280 Event 281 Udp6 263 IN UDP_IO *UdpIo, 264 IN EFI_UDP6_CONFIG_DATA *UdpCfgData 265 ) 266 { 267 EFI_IP6_MODE_DATA Ip6Mode; 268 EFI_UDP6_PROTOCOL *Udp6; 269 EFI_STATUS Status; 270 EFI_EVENT Event; 271 272 Event = NULL; 273 Udp6 = UdpIo->Protocol.Udp6; 282 274 283 275 // … … 308 300 // 309 301 while (EFI_ERROR (gBS->CheckEvent (Event))) { 310 311 302 Udp6->Poll (Udp6); 312 303 … … 338 329 } 339 330 340 if 331 if (Ip6Mode.IsConfigured) { 341 332 // 342 333 // Continue to configure the Udp6 instance. … … 358 349 } 359 350 360 361 351 /** 362 352 The dummy configure routine for create a new Udp6 Io. … … 371 361 EFIAPI 372 362 Mtftp6ConfigDummyUdpIo ( 373 IN UDP_IO 374 IN VOID 363 IN UDP_IO *UdpIo, 364 IN VOID *Context 375 365 ) 376 366 { 377 367 return EFI_SUCCESS; 378 368 } 379 380 369 381 370 /** … … 395 384 EFI_STATUS 396 385 Mtftp6ConfigUdpIo ( 397 IN UDP_IO 398 IN EFI_IPv6_ADDRESS 399 IN UINT16 400 IN EFI_IPv6_ADDRESS 401 IN UINT16 402 ) 403 { 404 EFI_STATUS 405 EFI_UDP6_PROTOCOL 406 EFI_UDP6_CONFIG_DATA 386 IN UDP_IO *UdpIo, 387 IN EFI_IPv6_ADDRESS *ServerIp, 388 IN UINT16 ServerPort, 389 IN EFI_IPv6_ADDRESS *LocalIp, 390 IN UINT16 LocalPort 391 ) 392 { 393 EFI_STATUS Status; 394 EFI_UDP6_PROTOCOL *Udp6; 395 EFI_UDP6_CONFIG_DATA *Udp6Cfg; 407 396 408 397 Udp6 = UdpIo->Protocol.Udp6; … … 442 431 443 432 if (Status == EFI_NO_MAPPING) { 444 445 433 return Mtftp6GetMapping (UdpIo, Udp6Cfg); 446 434 } … … 448 436 return Status; 449 437 } 450 451 438 452 439 /** … … 463 450 EFI_STATUS 464 451 Mtftp6SendRequest ( 465 IN MTFTP6_INSTANCE 466 IN UINT16 467 ) 468 { 469 EFI_MTFTP6_PACKET 470 EFI_MTFTP6_OPTION 471 EFI_MTFTP6_TOKEN 472 RETURN_STATUS 473 NET_BUF 474 UINT8 475 UINT8 476 UINTN 477 UINT32 478 UINTN 479 UINTN 480 UINTN 481 UINTN 452 IN MTFTP6_INSTANCE *Instance, 453 IN UINT16 Operation 454 ) 455 { 456 EFI_MTFTP6_PACKET *Packet; 457 EFI_MTFTP6_OPTION *Options; 458 EFI_MTFTP6_TOKEN *Token; 459 RETURN_STATUS Status; 460 NET_BUF *Nbuf; 461 UINT8 *Mode; 462 UINT8 *Cur; 463 UINTN Index; 464 UINT32 BufferLength; 465 UINTN FileNameLength; 466 UINTN ModeLength; 467 UINTN OptionStrLength; 468 UINTN ValueStrLength; 482 469 483 470 Token = Instance->Token; … … 486 473 487 474 if (Mode == NULL) { 488 Mode = (UINT8 *) 475 Mode = (UINT8 *)"octet"; 489 476 } 490 477 … … 508 495 // Compute the size of new Mtftp6 packet. 509 496 // 510 FileNameLength = AsciiStrLen ((CHAR8 *) 511 ModeLength = AsciiStrLen ((CHAR8 *) 512 BufferLength = (UINT32) FileNameLength + (UINT32)ModeLength + 4;497 FileNameLength = AsciiStrLen ((CHAR8 *)Token->Filename); 498 ModeLength = AsciiStrLen ((CHAR8 *)Mode); 499 BufferLength = (UINT32)FileNameLength + (UINT32)ModeLength + 4; 513 500 514 501 for (Index = 0; Index < Token->OptionCount; Index++) { 515 OptionStrLength = AsciiStrLen ((CHAR8 *) 516 ValueStrLength = AsciiStrLen ((CHAR8 *) 517 BufferLength += (UINT32) OptionStrLength + (UINT32)ValueStrLength + 2;502 OptionStrLength = AsciiStrLen ((CHAR8 *)Options[Index].OptionStr); 503 ValueStrLength = AsciiStrLen ((CHAR8 *)Options[Index].ValueStr); 504 BufferLength += (UINT32)OptionStrLength + (UINT32)ValueStrLength + 2; 518 505 } 519 506 … … 528 515 // Copy the opcode, filename and mode into packet. 529 516 // 530 Packet = (EFI_MTFTP6_PACKET *)NetbufAllocSpace (Nbuf, BufferLength, FALSE);517 Packet = (EFI_MTFTP6_PACKET *)NetbufAllocSpace (Nbuf, BufferLength, FALSE); 531 518 ASSERT (Packet != NULL); 532 519 … … 534 521 BufferLength -= sizeof (Packet->OpCode); 535 522 536 Cur 537 Status = AsciiStrCpyS ((CHAR8 *) Cur, BufferLength, (CHAR8 *)Token->Filename);523 Cur = Packet->Rrq.Filename; 524 Status = AsciiStrCpyS ((CHAR8 *)Cur, BufferLength, (CHAR8 *)Token->Filename); 538 525 ASSERT_EFI_ERROR (Status); 539 BufferLength -= (UINT32)(FileNameLength + 1);540 Cur 541 Status = AsciiStrCpyS ((CHAR8 *) Cur, BufferLength, (CHAR8 *)Mode);526 BufferLength -= (UINT32)(FileNameLength + 1); 527 Cur += FileNameLength + 1; 528 Status = AsciiStrCpyS ((CHAR8 *)Cur, BufferLength, (CHAR8 *)Mode); 542 529 ASSERT_EFI_ERROR (Status); 543 BufferLength -= (UINT32)(ModeLength + 1);544 Cur 530 BufferLength -= (UINT32)(ModeLength + 1); 531 Cur += ModeLength + 1; 545 532 546 533 // … … 548 535 // 549 536 for (Index = 0; Index < Token->OptionCount; ++Index) { 550 OptionStrLength = AsciiStrLen ((CHAR8 *) 551 ValueStrLength = AsciiStrLen ((CHAR8 *) 552 553 Status = AsciiStrCpyS ((CHAR8 *) Cur, BufferLength, (CHAR8 *)Options[Index].OptionStr);537 OptionStrLength = AsciiStrLen ((CHAR8 *)Options[Index].OptionStr); 538 ValueStrLength = AsciiStrLen ((CHAR8 *)Options[Index].ValueStr); 539 540 Status = AsciiStrCpyS ((CHAR8 *)Cur, BufferLength, (CHAR8 *)Options[Index].OptionStr); 554 541 ASSERT_EFI_ERROR (Status); 555 BufferLength -= (UINT32)(OptionStrLength + 1);556 Cur 557 558 Status = AsciiStrCpyS ((CHAR8 *) Cur, BufferLength, (CHAR8 *)Options[Index].ValueStr);542 BufferLength -= (UINT32)(OptionStrLength + 1); 543 Cur += OptionStrLength + 1; 544 545 Status = AsciiStrCpyS ((CHAR8 *)Cur, BufferLength, (CHAR8 *)Options[Index].ValueStr); 559 546 ASSERT_EFI_ERROR (Status); 560 BufferLength -= (UINT32) (ValueStrLength + 1); 561 Cur += ValueStrLength + 1; 562 547 BufferLength -= (UINT32)(ValueStrLength + 1); 548 Cur += ValueStrLength + 1; 563 549 } 564 550 … … 575 561 return Mtftp6TransmitPacket (Instance, Nbuf); 576 562 } 577 578 563 579 564 /** … … 591 576 EFI_STATUS 592 577 Mtftp6SendError ( 593 IN MTFTP6_INSTANCE 594 IN UINT16 595 IN UINT8 *ErrInfo596 ) 597 { 598 NET_BUF 599 EFI_MTFTP6_PACKET 600 UINT32 578 IN MTFTP6_INSTANCE *Instance, 579 IN UINT16 ErrCode, 580 IN UINT8 *ErrInfo 581 ) 582 { 583 NET_BUF *Nbuf; 584 EFI_MTFTP6_PACKET *TftpError; 585 UINT32 Len; 601 586 602 587 // 603 588 // Allocate a packet then copy the data. 604 589 // 605 Len = (UINT32) (AsciiStrLen ((CHAR8 *)ErrInfo) + sizeof (EFI_MTFTP6_ERROR_HEADER));590 Len = (UINT32)(AsciiStrLen ((CHAR8 *)ErrInfo) + sizeof (EFI_MTFTP6_ERROR_HEADER)); 606 591 Nbuf = NetbufAlloc (Len); 607 592 … … 610 595 } 611 596 612 TftpError = (EFI_MTFTP6_PACKET *) 597 TftpError = (EFI_MTFTP6_PACKET *)NetbufAllocSpace (Nbuf, Len, FALSE); 613 598 614 599 if (TftpError == NULL) { … … 620 605 TftpError->Error.ErrorCode = HTONS (ErrCode); 621 606 622 AsciiStrCpyS ((CHAR8 *) TftpError->Error.ErrorMessage, AsciiStrLen ((CHAR8 *) ErrInfo) + 1 , (CHAR8 *)ErrInfo);607 AsciiStrCpyS ((CHAR8 *)TftpError->Error.ErrorMessage, AsciiStrLen ((CHAR8 *)ErrInfo) + 1, (CHAR8 *)ErrInfo); 623 608 624 609 // … … 634 619 return Mtftp6TransmitPacket (Instance, Nbuf); 635 620 } 636 637 621 638 622 /** … … 648 632 EFIAPI 649 633 Mtftp6OnPacketSent ( 650 IN NET_BUF 651 IN UDP_END_POINT 652 IN EFI_STATUS 653 IN VOID 634 IN NET_BUF *Packet, 635 IN UDP_END_POINT *UdpEpt, 636 IN EFI_STATUS IoStatus, 637 IN VOID *Context 654 638 ) 655 639 { 656 640 NetbufFree (Packet); 657 *(BOOLEAN *) Context = TRUE; 658 } 659 641 *(BOOLEAN *)Context = TRUE; 642 } 660 643 661 644 /** … … 671 654 EFI_STATUS 672 655 Mtftp6TransmitPacket ( 673 IN MTFTP6_INSTANCE 674 IN NET_BUF 675 ) 676 { 677 EFI_UDP6_PROTOCOL 678 EFI_UDP6_CONFIG_DATA 679 EFI_STATUS 680 UINT16 681 UINT16 682 UINT16 683 684 ZeroMem (&Udp6CfgData, sizeof (EFI_UDP6_CONFIG_DATA));656 IN MTFTP6_INSTANCE *Instance, 657 IN NET_BUF *Packet 658 ) 659 { 660 EFI_UDP6_PROTOCOL *Udp6; 661 EFI_UDP6_CONFIG_DATA Udp6CfgData; 662 EFI_STATUS Status; 663 UINT16 *Temp; 664 UINT16 Value; 665 UINT16 OpCode; 666 667 ZeroMem (&Udp6CfgData, sizeof (EFI_UDP6_CONFIG_DATA)); 685 668 Udp6 = Instance->UdpIo->Protocol.Udp6; 686 669 … … 690 673 Instance->PacketToLive = Instance->IsMaster ? Instance->Timeout : (Instance->Timeout * 2); 691 674 692 Temp = (UINT16 *)NetbufGetByte (Packet, 0, NULL);675 Temp = (UINT16 *)NetbufGetByte (Packet, 0, NULL); 693 676 ASSERT (Temp != NULL); 694 677 … … 696 679 OpCode = NTOHS (Value); 697 680 698 if ( OpCode == EFI_MTFTP6_OPCODE_RRQ || OpCode == EFI_MTFTP6_OPCODE_DIR || OpCode == EFI_MTFTP6_OPCODE_WRQ) {681 if ((OpCode == EFI_MTFTP6_OPCODE_RRQ) || (OpCode == EFI_MTFTP6_OPCODE_DIR) || (OpCode == EFI_MTFTP6_OPCODE_WRQ)) { 699 682 // 700 683 // For the Rrq, Dir, Wrq requests of the operation, configure the Udp6Io as … … 787 770 788 771 if (Udp6CfgData.RemotePort != Instance->ServerDataPort) { 789 790 772 Status = Udp6->Configure (Udp6, NULL); 791 773 … … 839 821 } 840 822 841 842 823 /** 843 824 Check packet for GetInfo callback routine. … … 857 838 EFIAPI 858 839 Mtftp6CheckPacket ( 859 IN EFI_MTFTP6_PROTOCOL 860 IN EFI_MTFTP6_TOKEN 861 IN UINT16 862 IN EFI_MTFTP6_PACKET 863 ) 864 { 865 MTFTP6_GETINFO_CONTEXT 866 UINT16 867 868 Context = (MTFTP6_GETINFO_CONTEXT *) 840 IN EFI_MTFTP6_PROTOCOL *This, 841 IN EFI_MTFTP6_TOKEN *Token, 842 IN UINT16 PacketLen, 843 IN EFI_MTFTP6_PACKET *Packet 844 ) 845 { 846 MTFTP6_GETINFO_CONTEXT *Context; 847 UINT16 OpCode; 848 849 Context = (MTFTP6_GETINFO_CONTEXT *)Token->Context; 869 850 OpCode = NTOHS (Packet->OpCode); 870 851 … … 873 854 // 874 855 switch (OpCode) { 875 case EFI_MTFTP6_OPCODE_ERROR:876 Context->Status = EFI_TFTP_ERROR;877 break;878 879 case EFI_MTFTP6_OPCODE_OACK:880 Context->Status = EFI_SUCCESS;881 break;882 883 default:884 Context->Status = EFI_PROTOCOL_ERROR;856 case EFI_MTFTP6_OPCODE_ERROR: 857 Context->Status = EFI_TFTP_ERROR; 858 break; 859 860 case EFI_MTFTP6_OPCODE_OACK: 861 Context->Status = EFI_SUCCESS; 862 break; 863 864 default: 865 Context->Status = EFI_PROTOCOL_ERROR; 885 866 } 886 867 … … 902 883 } 903 884 904 905 885 /** 906 886 Clean up the current Mtftp6 operation. … … 912 892 VOID 913 893 Mtftp6OperationClean ( 914 IN MTFTP6_INSTANCE 915 IN EFI_STATUS 916 ) 917 { 918 LIST_ENTRY 919 LIST_ENTRY 920 MTFTP6_BLOCK_RANGE 894 IN MTFTP6_INSTANCE *Instance, 895 IN EFI_STATUS Result 896 ) 897 { 898 LIST_ENTRY *Entry; 899 LIST_ENTRY *Next; 900 MTFTP6_BLOCK_RANGE *Block; 921 901 922 902 // … … 928 908 gBS->SignalEvent (Instance->Token->Event); 929 909 } 910 930 911 Instance->Token = NULL; 931 912 } … … 986 967 } 987 968 988 989 969 /** 990 970 Start the Mtftp6 instance to perform the operation, such as read file, … … 1003 983 EFI_STATUS 1004 984 Mtftp6OperationStart ( 1005 IN EFI_MTFTP6_PROTOCOL *This, 1006 IN EFI_MTFTP6_TOKEN *Token, 1007 IN UINT16 OpCode 1008 ) 1009 { 1010 MTFTP6_INSTANCE *Instance; 1011 EFI_STATUS Status; 1012 1013 if (This == NULL || 1014 Token == NULL || 1015 Token->Filename == NULL || 1016 (Token->OptionCount != 0 && Token->OptionList == NULL) || 1017 (Token->OverrideData != NULL && !NetIp6IsValidUnicast (&Token->OverrideData->ServerIp)) 1018 ) { 985 IN EFI_MTFTP6_PROTOCOL *This, 986 IN EFI_MTFTP6_TOKEN *Token, 987 IN UINT16 OpCode 988 ) 989 { 990 MTFTP6_INSTANCE *Instance; 991 EFI_STATUS Status; 992 993 if ((This == NULL) || 994 (Token == NULL) || 995 (Token->Filename == NULL) || 996 ((Token->OptionCount != 0) && (Token->OptionList == NULL)) || 997 ((Token->OverrideData != NULL) && !NetIp6IsValidUnicast (&Token->OverrideData->ServerIp)) 998 ) 999 { 1019 1000 return EFI_INVALID_PARAMETER; 1020 1001 } … … 1023 1004 // At least define one method to collect the data for download. 1024 1005 // 1025 if ((OpCode == EFI_MTFTP6_OPCODE_RRQ || OpCode == EFI_MTFTP6_OPCODE_DIR) && 1026 Token->Buffer == NULL && 1027 Token->CheckPacket == NULL 1028 ) { 1006 if (((OpCode == EFI_MTFTP6_OPCODE_RRQ) || (OpCode == EFI_MTFTP6_OPCODE_DIR)) && 1007 (Token->Buffer == NULL) && 1008 (Token->CheckPacket == NULL) 1009 ) 1010 { 1029 1011 return EFI_INVALID_PARAMETER; 1030 1012 } … … 1033 1015 // At least define one method to provide the data for upload. 1034 1016 // 1035 if ( OpCode == EFI_MTFTP6_OPCODE_WRQ && Token->Buffer == NULL && Token->PacketNeeded == NULL) {1017 if ((OpCode == EFI_MTFTP6_OPCODE_WRQ) && (Token->Buffer == NULL) && (Token->PacketNeeded == NULL)) { 1036 1018 return EFI_INVALID_PARAMETER; 1037 1019 } … … 1056 1038 // 1057 1039 if (Token->OptionCount != 0) { 1058 1059 1040 Status = Mtftp6ParseExtensionOption ( 1060 1041 Token->OptionList, … … 1073 1054 // Initialize runtime data from config data or override data. 1074 1055 // 1075 Instance->Token 1076 Instance->ServerCmdPort 1077 Instance->ServerDataPort 1078 Instance->MaxRetry 1079 Instance->Timeout 1080 Instance->IsMaster 1056 Instance->Token = Token; 1057 Instance->ServerCmdPort = Instance->Config->InitialServerPort; 1058 Instance->ServerDataPort = 0; 1059 Instance->MaxRetry = Instance->Config->TryCount; 1060 Instance->Timeout = Instance->Config->TimeoutValue; 1061 Instance->IsMaster = TRUE; 1081 1062 1082 1063 CopyMem ( … … 1104 1085 Instance->ServerCmdPort = MTFTP6_DEFAULT_SERVER_CMD_PORT; 1105 1086 } 1087 1106 1088 if (Instance->BlkSize == 0) { 1107 1089 Instance->BlkSize = MTFTP6_DEFAULT_BLK_SIZE; 1108 1090 } 1091 1109 1092 if (Instance->WindowSize == 0) { 1110 1093 Instance->WindowSize = MTFTP6_DEFAULT_WINDOWSIZE; 1111 1094 } 1095 1112 1096 if (Instance->MaxRetry == 0) { 1113 1097 Instance->MaxRetry = MTFTP6_DEFAULT_MAX_RETRY; 1114 1098 } 1099 1115 1100 if (Instance->Timeout == 0) { 1116 1101 Instance->Timeout = MTFTP6_DEFAULT_TIMEOUT; … … 1123 1108 // 1124 1109 switch (OpCode) { 1125 case EFI_MTFTP6_OPCODE_RRQ:1126 Status = Mtftp6RrqStart (Instance, OpCode);1127 break;1128 1129 case EFI_MTFTP6_OPCODE_DIR:1130 Status = Mtftp6RrqStart (Instance, OpCode);1131 break;1132 1133 case EFI_MTFTP6_OPCODE_WRQ:1134 Status = Mtftp6WrqStart (Instance, OpCode);1135 break;1136 1137 default:1138 Status = EFI_DEVICE_ERROR;1139 goto ON_ERROR;1110 case EFI_MTFTP6_OPCODE_RRQ: 1111 Status = Mtftp6RrqStart (Instance, OpCode); 1112 break; 1113 1114 case EFI_MTFTP6_OPCODE_DIR: 1115 Status = Mtftp6RrqStart (Instance, OpCode); 1116 break; 1117 1118 case EFI_MTFTP6_OPCODE_WRQ: 1119 Status = Mtftp6WrqStart (Instance, OpCode); 1120 break; 1121 1122 default: 1123 Status = EFI_DEVICE_ERROR; 1124 goto ON_ERROR; 1140 1125 } 1141 1126 … … 1153 1138 This->Poll (This); 1154 1139 } 1140 1155 1141 return Token->Status; 1156 1142 } … … 1165 1151 return Status; 1166 1152 } 1167 1168 1153 1169 1154 /** … … 1177 1162 EFIAPI 1178 1163 Mtftp6OnTimerTick ( 1179 IN EFI_EVENT 1180 IN VOID 1181 ) 1182 { 1183 MTFTP6_SERVICE 1184 MTFTP6_INSTANCE 1185 LIST_ENTRY 1186 LIST_ENTRY 1187 EFI_MTFTP6_TOKEN 1188 EFI_STATUS 1189 1190 Service = (MTFTP6_SERVICE *) 1164 IN EFI_EVENT Event, 1165 IN VOID *Context 1166 ) 1167 { 1168 MTFTP6_SERVICE *Service; 1169 MTFTP6_INSTANCE *Instance; 1170 LIST_ENTRY *Entry; 1171 LIST_ENTRY *Next; 1172 EFI_MTFTP6_TOKEN *Token; 1173 EFI_STATUS Status; 1174 1175 Service = (MTFTP6_SERVICE *)Context; 1191 1176 1192 1177 // … … 1195 1180 // 1196 1181 NET_LIST_FOR_EACH_SAFE (Entry, Next, &Service->Children) { 1197 1198 1182 Instance = NET_LIST_USER_STRUCT (Entry, MTFTP6_INSTANCE, Link); 1199 1183 … … 1218 1202 if (EFI_ERROR (Status)) { 1219 1203 Mtftp6SendError ( 1220 1221 1222 (UINT8 *)"User aborted the transfer in time out"1223 1204 Instance, 1205 EFI_MTFTP6_ERRORCODE_REQUEST_DENIED, 1206 (UINT8 *)"User aborted the transfer in time out" 1207 ); 1224 1208 Mtftp6OperationClean (Instance, EFI_ABORTED); 1225 1209 continue;
Note:
See TracChangeset
for help on using the changeset viewer.