+++ /dev/null
-/** @file\r
-\r
- Mtftp4 Implementation.\r
-\r
- Mtftp4 Implementation, it supports the following RFCs:\r
- RFC1350 - THE TFTP PROTOCOL (REVISION 2)\r
- RFC2090 - TFTP Multicast Option\r
- RFC2347 - TFTP Option Extension\r
- RFC2348 - TFTP Blocksize Option\r
- RFC2349 - TFTP Timeout Interval and Transfer Size Options\r
- RFC7440 - TFTP Windowsize Option\r
-\r
-Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
-SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-\r
-#ifndef __EFI_MTFTP4_IMPL_H__\r
-#define __EFI_MTFTP4_IMPL_H__\r
-\r
-#include <Uefi.h>\r
-\r
-#include <Protocol/Udp4.h>\r
-#include <Protocol/Mtftp4.h>\r
-\r
-#include <Library/DebugLib.h>\r
-#include <Library/BaseMemoryLib.h>\r
-#include <Library/MemoryAllocationLib.h>\r
-#include <Library/UefiBootServicesTableLib.h>\r
-#include <Library/UdpIoLib.h>\r
-#include <Library/PrintLib.h>\r
-\r
-extern EFI_MTFTP4_PROTOCOL gMtftp4ProtocolTemplate;\r
-\r
-typedef struct _MTFTP4_SERVICE MTFTP4_SERVICE;\r
-typedef struct _MTFTP4_PROTOCOL MTFTP4_PROTOCOL;\r
-\r
-#include "Mtftp4Driver.h"\r
-#include "Mtftp4Option.h"\r
-#include "Mtftp4Support.h"\r
-\r
-\r
-///\r
-/// Some constant value of Mtftp service.\r
-///\r
-#define MTFTP4_SERVICE_SIGNATURE SIGNATURE_32 ('T', 'F', 'T', 'P')\r
-#define MTFTP4_PROTOCOL_SIGNATURE SIGNATURE_32 ('t', 'f', 't', 'p')\r
-\r
-#define MTFTP4_DEFAULT_SERVER_PORT 69\r
-#define MTFTP4_DEFAULT_TIMEOUT 3\r
-#define MTFTP4_DEFAULT_RETRY 5\r
-#define MTFTP4_DEFAULT_BLKSIZE 512\r
-#define MTFTP4_DEFAULT_WINDOWSIZE 1\r
-#define MTFTP4_TIME_TO_GETMAP 5\r
-\r
-#define MTFTP4_STATE_UNCONFIGED 0\r
-#define MTFTP4_STATE_CONFIGED 1\r
-#define MTFTP4_STATE_DESTROY 2\r
-\r
-///\r
-/// Mtftp service block\r
-///\r
-struct _MTFTP4_SERVICE {\r
- UINT32 Signature;\r
- EFI_SERVICE_BINDING_PROTOCOL ServiceBinding;\r
-\r
- UINT16 ChildrenNum;\r
- LIST_ENTRY Children;\r
-\r
- EFI_EVENT Timer; ///< Ticking timer for all the MTFTP clients to handle the packet timeout case.\r
- EFI_EVENT TimerNotifyLevel; ///< Ticking timer for all the MTFTP clients to calculate the packet live time.\r
- EFI_EVENT TimerToGetMap;\r
-\r
- EFI_HANDLE Controller;\r
- EFI_HANDLE Image;\r
-\r
- //\r
- // This UDP child is used to keep the connection between the UDP\r
- // and MTFTP, so MTFTP will be notified when UDP is uninstalled.\r
- //\r
- UDP_IO *ConnectUdp;\r
-};\r
-\r
-\r
-typedef struct {\r
- EFI_MTFTP4_PACKET **Packet;\r
- UINT32 *PacketLen;\r
- EFI_STATUS Status;\r
-} MTFTP4_GETINFO_STATE;\r
-\r
-struct _MTFTP4_PROTOCOL {\r
- UINT32 Signature;\r
- LIST_ENTRY Link;\r
- EFI_MTFTP4_PROTOCOL Mtftp4;\r
-\r
- INTN State;\r
- BOOLEAN InDestroy;\r
-\r
- MTFTP4_SERVICE *Service;\r
- EFI_HANDLE Handle;\r
-\r
- EFI_MTFTP4_CONFIG_DATA Config;\r
-\r
- //\r
- // Operation parameters: token and requested options.\r
- //\r
- EFI_MTFTP4_TOKEN *Token;\r
- MTFTP4_OPTION RequestOption;\r
- UINT16 Operation;\r
-\r
- //\r
- // Blocks is a list of MTFTP4_BLOCK_RANGE which contains\r
- // holes in the file\r
- //\r
- UINT16 BlkSize;\r
- UINT16 LastBlock;\r
- LIST_ENTRY Blocks;\r
-\r
- UINT16 WindowSize;\r
-\r
- //\r
- // Record the total received and saved block number.\r
- //\r
- UINT64 TotalBlock;\r
-\r
- //\r
- // Record the acked block number.\r
- //\r
- UINT64 AckedBlock;\r
-\r
- //\r
- // The server's communication end point: IP and two ports. one for\r
- // initial request, one for its selected port.\r
- //\r
- IP4_ADDR ServerIp;\r
- UINT16 ListeningPort;\r
- UINT16 ConnectedPort;\r
- IP4_ADDR Gateway;\r
- UDP_IO *UnicastPort;\r
-\r
- //\r
- // Timeout and retransmit status\r
- //\r
- NET_BUF *LastPacket;\r
- UINT32 PacketToLive;\r
- BOOLEAN HasTimeout;\r
- UINT32 CurRetry;\r
- UINT32 MaxRetry;\r
- UINT32 Timeout;\r
-\r
- //\r
- // Parameter used by RRQ's multicast download.\r
- //\r
- IP4_ADDR McastIp;\r
- UINT16 McastPort;\r
- BOOLEAN Master;\r
- UDP_IO *McastUdpPort;\r
-};\r
-\r
-typedef struct {\r
- EFI_SERVICE_BINDING_PROTOCOL *ServiceBinding;\r
- UINTN NumberOfChildren;\r
- EFI_HANDLE *ChildHandleBuffer;\r
-} MTFTP4_DESTROY_CHILD_IN_HANDLE_BUF_CONTEXT;\r
-\r
-/**\r
- Clean up the MTFTP session to get ready for new operation.\r
-\r
- @param Instance The MTFTP session to clean up\r
- @param Result The result to return to the caller who initiated\r
- the operation.\r
-**/\r
-VOID\r
-Mtftp4CleanOperation (\r
- IN OUT MTFTP4_PROTOCOL *Instance,\r
- IN EFI_STATUS Result\r
- );\r
-\r
-/**\r
- Start the MTFTP session for upload.\r
-\r
- It will first init some states, then send the WRQ request packet,\r
- and start receiving the packet.\r
-\r
- @param Instance The MTFTP session\r
- @param Operation Redundant parameter, which is always\r
- EFI_MTFTP4_OPCODE_WRQ here.\r
-\r
- @retval EFI_SUCCESS The upload process has been started.\r
- @retval Others Failed to start the upload.\r
-\r
-**/\r
-EFI_STATUS\r
-Mtftp4WrqStart (\r
- IN MTFTP4_PROTOCOL *Instance,\r
- IN UINT16 Operation\r
- );\r
-\r
-/**\r
- Start the MTFTP session to download.\r
-\r
- It will first initialize some of the internal states then build and send a RRQ\r
- reqeuest packet, at last, it will start receive for the downloading.\r
-\r
- @param Instance The Mtftp session\r
- @param Operation The MTFTP opcode, it may be a EFI_MTFTP4_OPCODE_RRQ\r
- or EFI_MTFTP4_OPCODE_DIR.\r
-\r
- @retval EFI_SUCCESS The mtftp download session is started.\r
- @retval Others Failed to start downloading.\r
-\r
-**/\r
-EFI_STATUS\r
-Mtftp4RrqStart (\r
- IN MTFTP4_PROTOCOL *Instance,\r
- IN UINT16 Operation\r
- );\r
-\r
-#define MTFTP4_SERVICE_FROM_THIS(a) \\r
- CR (a, MTFTP4_SERVICE, ServiceBinding, MTFTP4_SERVICE_SIGNATURE)\r
-\r
-#define MTFTP4_PROTOCOL_FROM_THIS(a) \\r
- CR (a, MTFTP4_PROTOCOL, Mtftp4, MTFTP4_PROTOCOL_SIGNATURE)\r
-\r
-#endif\r