X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=MdeModulePkg%2FUniversal%2FNetwork%2FMtftp4Dxe%2FMtftp4Impl.h;h=33393d42472ccca9b9f994626d1bd646d4655a5f;hp=c12b1dd0076fb8e88206078df3130f2dfc378e18;hb=c0fd7f734e2d33e22215899b40a47b843129541d;hpb=83cbd279b64f3081af5c06d50fa26e15a99fc066
diff --git a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Impl.h b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Impl.h
index c12b1dd007..33393d4247 100644
--- a/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Impl.h
+++ b/MdeModulePkg/Universal/Network/Mtftp4Dxe/Mtftp4Impl.h
@@ -1,46 +1,37 @@
/** @file
-Copyright (c) 2006 - 2007, Intel Corporation
-All rights reserved. This program and the accompanying materials
-are licensed and made available under the terms and conditions of the BSD License
-which accompanies this distribution. The full text of the license may be found at
-http://opensource.org/licenses/bsd-license.php
+ Mtftp4 Implementation.
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
-
-Module Name:
-
- Mtftp4Impl.h
-
-Abstract:
-
- Mtftp4 Implementation, it supports the following RFCs:
- RFC1350 - THE TFTP PROTOCOL (REVISION 2)
- RFC2090 - TFTP Multicast Option
- RFC2347 - TFTP Option Extension
- RFC2348 - TFTP Blocksize Option
- RFC2349 - TFTP Timeout Interval and Transfer Size Options
+ Mtftp4 Implementation, it supports the following RFCs:
+ RFC1350 - THE TFTP PROTOCOL (REVISION 2)
+ RFC2090 - TFTP Multicast Option
+ RFC2347 - TFTP Option Extension
+ RFC2348 - TFTP Blocksize Option
+ RFC2349 - TFTP Timeout Interval and Transfer Size Options
+ RFC7440 - TFTP Windowsize Option
+Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.
+SPDX-License-Identifier: BSD-2-Clause-Patent
**/
+
#ifndef __EFI_MTFTP4_IMPL_H__
#define __EFI_MTFTP4_IMPL_H__
-#include
+#include
#include
#include
#include
-#include
+#include
+#include
#include
-#include
-#include
#include
-#include
-#include
+#include
+
+extern EFI_MTFTP4_PROTOCOL gMtftp4ProtocolTemplate;
typedef struct _MTFTP4_SERVICE MTFTP4_SERVICE;
typedef struct _MTFTP4_PROTOCOL MTFTP4_PROTOCOL;
@@ -49,31 +40,36 @@ typedef struct _MTFTP4_PROTOCOL MTFTP4_PROTOCOL;
#include "Mtftp4Option.h"
#include "Mtftp4Support.h"
-enum {
- MTFTP4_SERVICE_SIGNATURE = EFI_SIGNATURE_32 ('T', 'F', 'T', 'P'),
- MTFTP4_PROTOCOL_SIGNATURE = EFI_SIGNATURE_32 ('t', 'f', 't', 'p'),
- MTFTP4_DEFAULT_SERVER_PORT = 69,
- MTFTP4_DEFAULT_TIMEOUT = 3,
- MTFTP4_DEFAULT_RETRY = 5,
- MTFTP4_DEFAULT_BLKSIZE = 512,
- MTFTP4_TIME_TO_GETMAP = 5,
+///
+/// Some constant value of Mtftp service.
+///
+#define MTFTP4_SERVICE_SIGNATURE SIGNATURE_32 ('T', 'F', 'T', 'P')
+#define MTFTP4_PROTOCOL_SIGNATURE SIGNATURE_32 ('t', 'f', 't', 'p')
- MTFTP4_STATE_UNCONFIGED = 0,
- MTFTP4_STATE_CONFIGED,
- MTFTP4_STATE_DESTORY
-};
+#define MTFTP4_DEFAULT_SERVER_PORT 69
+#define MTFTP4_DEFAULT_TIMEOUT 3
+#define MTFTP4_DEFAULT_RETRY 5
+#define MTFTP4_DEFAULT_BLKSIZE 512
+#define MTFTP4_DEFAULT_WINDOWSIZE 1
+#define MTFTP4_TIME_TO_GETMAP 5
+
+#define MTFTP4_STATE_UNCONFIGED 0
+#define MTFTP4_STATE_CONFIGED 1
+#define MTFTP4_STATE_DESTROY 2
+///
+/// Mtftp service block
+///
struct _MTFTP4_SERVICE {
UINT32 Signature;
EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;
- BOOLEAN InDestory;
-
UINT16 ChildrenNum;
- NET_LIST_ENTRY Children;
+ LIST_ENTRY Children;
- EFI_EVENT Timer; // Ticking timer for all the MTFTP clients
+ EFI_EVENT Timer; ///< Ticking timer for all the MTFTP clients to handle the packet timeout case.
+ EFI_EVENT TimerNotifyLevel; ///< Ticking timer for all the MTFTP clients to calculate the packet live time.
EFI_EVENT TimerToGetMap;
EFI_HANDLE Controller;
@@ -83,9 +79,10 @@ struct _MTFTP4_SERVICE {
// This UDP child is used to keep the connection between the UDP
// and MTFTP, so MTFTP will be notified when UDP is uninstalled.
//
- UDP_IO_PORT *ConnectUdp;
+ UDP_IO *ConnectUdp;
};
+
typedef struct {
EFI_MTFTP4_PACKET **Packet;
UINT32 *PacketLen;
@@ -94,11 +91,11 @@ typedef struct {
struct _MTFTP4_PROTOCOL {
UINT32 Signature;
- NET_LIST_ENTRY Link;
+ LIST_ENTRY Link;
EFI_MTFTP4_PROTOCOL Mtftp4;
INTN State;
- BOOLEAN Indestory;
+ BOOLEAN InDestroy;
MTFTP4_SERVICE *Service;
EFI_HANDLE Handle;
@@ -118,7 +115,19 @@ struct _MTFTP4_PROTOCOL {
//
UINT16 BlkSize;
UINT16 LastBlock;
- NET_LIST_ENTRY Blocks;
+ LIST_ENTRY Blocks;
+
+ UINT16 WindowSize;
+
+ //
+ // Record the total received and saved block number.
+ //
+ UINT64 TotalBlock;
+
+ //
+ // Record the acked block number.
+ //
+ UINT64 AckedBlock;
//
// The server's communication end point: IP and two ports. one for
@@ -128,13 +137,14 @@ struct _MTFTP4_PROTOCOL {
UINT16 ListeningPort;
UINT16 ConnectedPort;
IP4_ADDR Gateway;
- UDP_IO_PORT *UnicastPort;
+ UDP_IO *UnicastPort;
//
// Timeout and retransmit status
//
NET_BUF *LastPacket;
UINT32 PacketToLive;
+ BOOLEAN HasTimeout;
UINT32 CurRetry;
UINT32 MaxRetry;
UINT32 Timeout;
@@ -145,27 +155,66 @@ struct _MTFTP4_PROTOCOL {
IP4_ADDR McastIp;
UINT16 McastPort;
BOOLEAN Master;
- UDP_IO_PORT *McastUdpPort;
-
- MTFTP4_GETINFO_STATE GetInfoState;
+ UDP_IO *McastUdpPort;
};
+typedef struct {
+ EFI_SERVICE_BINDING_PROTOCOL *ServiceBinding;
+ UINTN NumberOfChildren;
+ EFI_HANDLE *ChildHandleBuffer;
+} MTFTP4_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT;
+
+/**
+ Clean up the MTFTP session to get ready for new operation.
+
+ @param Instance The MTFTP session to clean up
+ @param Result The result to return to the caller who initiated
+ the operation.
+**/
VOID
Mtftp4CleanOperation (
- IN MTFTP4_PROTOCOL *Instance,
- IN EFI_STATUS Result
+ IN OUT MTFTP4_PROTOCOL *Instance,
+ IN EFI_STATUS Result
);
+/**
+ Start the MTFTP session for upload.
+
+ It will first init some states, then send the WRQ request packet,
+ and start receiving the packet.
+
+ @param Instance The MTFTP session
+ @param Operation Redundant parameter, which is always
+ EFI_MTFTP4_OPCODE_WRQ here.
+
+ @retval EFI_SUCCESS The upload process has been started.
+ @retval Others Failed to start the upload.
+
+**/
EFI_STATUS
Mtftp4WrqStart (
- IN MTFTP4_PROTOCOL *Instance,
- IN UINT16 Operation
+ IN MTFTP4_PROTOCOL *Instance,
+ IN UINT16 Operation
);
+/**
+ Start the MTFTP session to download.
+
+ It will first initialize some of the internal states then build and send a RRQ
+ reqeuest packet, at last, it will start receive for the downloading.
+
+ @param Instance The Mtftp session
+ @param Operation The MTFTP opcode, it may be a EFI_MTFTP4_OPCODE_RRQ
+ or EFI_MTFTP4_OPCODE_DIR.
+
+ @retval EFI_SUCCESS The mtftp download session is started.
+ @retval Others Failed to start downloading.
+
+**/
EFI_STATUS
Mtftp4RrqStart (
- IN MTFTP4_PROTOCOL *Instance,
- IN UINT16 Operation
+ IN MTFTP4_PROTOCOL *Instance,
+ IN UINT16 Operation
);
#define MTFTP4_SERVICE_FROM_THIS(a) \
@@ -174,5 +223,4 @@ Mtftp4RrqStart (
#define MTFTP4_PROTOCOL_FROM_THIS(a) \
CR (a, MTFTP4_PROTOCOL, Mtftp4, MTFTP4_PROTOCOL_SIGNATURE)
-extern EFI_MTFTP4_PROTOCOL gMtftp4ProtocolTemplate;
#endif