Copyright (c) 2008 - 2011, 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
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#define EFI_MTFTP6_ERRORCODE_ACCESS_VIOLATION 2 |
There was an access violation.
#define EFI_MTFTP6_ERRORCODE_DISK_FULL 3 |
The disk was full or its allocation was exceeded.
#define EFI_MTFTP6_ERRORCODE_FILE_ALREADY_EXISTS 6 |
The file already exists.
#define EFI_MTFTP6_ERRORCODE_FILE_NOT_FOUND 1 |
The file was not found.
#define EFI_MTFTP6_ERRORCODE_ILLEGAL_OPERATION 6 |
The MTFTPv6 operation was illegal.
#define EFI_MTFTP6_ERRORCODE_NO_SUCH_USER 7 |
There is no such user.
#define EFI_MTFTP6_ERRORCODE_NOT_DEFINED 0 |
MTFTP ERROR Packet ErrorCodes
The error code is not defined. See the error message in the packet (if any) for details.
#define EFI_MTFTP6_ERRORCODE_REQUEST_DENIED 8 |
The request has been denied due to option negotiation.
#define EFI_MTFTP6_ERRORCODE_UNKNOWN_TRANSFER_ID 5 |
The transfer ID is unknown.
#define EFI_MTFTP6_OPCODE_ACK 4 |
The MTFTPv6 packet is an acknowledgement packet.
#define EFI_MTFTP6_OPCODE_ACK8 9 |
The MTFTPv6 packet is an acknowledgement packet with a big block number.
#define EFI_MTFTP6_OPCODE_DATA 3 |
The MTFTPv6 packet is a data packet.
#define EFI_MTFTP6_OPCODE_DATA8 8 |
The MTFTPv6 packet is a data packet with a big block number.
#define EFI_MTFTP6_OPCODE_DIR 7 |
The MTFTPv6 packet is a directory query packet.
#define EFI_MTFTP6_OPCODE_ERROR 5 |
The MTFTPv6 packet is an error packet.
#define EFI_MTFTP6_OPCODE_OACK 6 |
The MTFTPv6 packet is an option acknowledgement packet.
#define EFI_MTFTP6_OPCODE_RRQ 1 |
The MTFTPv6 packet is a read request.
MTFTP Packet OpCodes
#define EFI_MTFTP6_OPCODE_WRQ 2 |
The MTFTPv6 packet is a write request.
#define EFI_MTFTP6_PROTOCOL_GUID |
Value:
{ \ 0xbf0a78ba, 0xec29, 0x49cf, {0xa1, 0xc9, 0x7a, 0xe5, 0x4e, 0xab, 0x6a, 0x51 } \ }
#define EFI_MTFTP6_SERVICE_BINDING_PROTOCOL_GUID |
Value:
{ \ 0xd9760ff3, 0x3cca, 0x4267, {0x80, 0xf9, 0x75, 0x27, 0xfa, 0xfa, 0x42, 0x23 } \ }
typedef EFI_STATUS(EFIAPI * EFI_MTFTP6_CHECK_PACKET)(IN EFI_MTFTP6_PROTOCOL *This, IN EFI_MTFTP6_TOKEN *Token, IN UINT16 PacketLen, IN EFI_MTFTP6_PACKET *Packet) |
EFI_MTFTP6_TIMEOUT_CALLBACK is a callback function that the caller provides to capture the timeout event in the EFI_MTFTP6_PROTOCOL.ReadFile(), EFI_MTFTP6_PROTOCOL.WriteFile() or EFI_MTFTP6_PROTOCOL.ReadDirectory() functions.
Whenever a timeout occurs, the EFI MTFTPv6 Protocol driver will call the EFI_MTFTP6_TIMEOUT_CALLBACK function to notify the caller of the timeout event. Any status code other than EFI_SUCCESS that is returned from this function will abort the current download process.
[in] | This | Pointer to the EFI_MTFTP6_PROTOCOL instance. |
[in] | Token | The token that the caller provided in the EFI_MTFTP6_PROTOCOl.ReadFile(), WriteFile() or ReadDirectory() function. |
[in] | PacketLen | Indicates the length of the packet. |
[in] | Packet | Pointer to an MTFTPv6 packet. |
EFI_SUCCESS | Operation sucess. | |
Others | Aborts session. |
typedef EFI_STATUS(EFIAPI * EFI_MTFTP6_CONFIGURE)(IN EFI_MTFTP6_PROTOCOL *This, IN EFI_MTFTP6_CONFIG_DATA *MtftpConfigData) |
Initializes, changes, or resets the default operational setting for this EFI MTFTPv6 Protocol driver instance.
The Configure() function is used to set and change the configuration data for this EFI MTFTPv6 Protocol driver instance. The configuration data can be reset to startup defaults by calling Configure() with MtftpConfigData set to NULL. Whenever the instance is reset, any pending operation is aborted. By changing the EFI MTFTPv6 Protocol driver instance configuration data, the client can connect to different MTFTPv6 servers. The configuration parameters in MtftpConfigData are used as the default parameters in later MTFTPv6 operations and can be overridden in later operations.
[in] | This | Pointer to the EFI_MTFTP6_PROTOCOL instance. |
[in] | MtftpConfigData | Pointer to the configuration data structure. |
EFI_SUCCESS | The EFI MTFTPv6 Protocol instance was configured successfully. | |
EFI_INVALID_PARAMETER | One or more following conditions are TRUE:
| |
EFI_ACCESS_DENIED | - The configuration could not be changed at this time because there is some MTFTP background operation in progress.
| |
EFI_NO_MAPPING | The underlying IPv6 driver was responsible for choosing a source address for this instance, but no source address was available for use. | |
EFI_OUT_OF_RESOURCES | The EFI MTFTPv6 Protocol driver instance data could not be allocated. | |
EFI_DEVICE_ERROR | An unexpected system or network error occurred. The EFI MTFTPv6 Protocol driver instance is not configured. |
typedef EFI_STATUS(EFIAPI * EFI_MTFTP6_GET_INFO)(IN EFI_MTFTP6_PROTOCOL *This, IN EFI_MTFTP6_OVERRIDE_DATA *OverrideData, IN UINT8 *Filename, IN UINT8 *ModeStr, IN UINT8 OptionCount, IN EFI_MTFTP6_OPTION *OptionList, OUT UINT32 *PacketLength, OUT EFI_MTFTP6_PACKET **Packet) |
Get information about a file from an MTFTPv6 server.
The GetInfo() function assembles an MTFTPv6 request packet with options, sends it to the MTFTPv6 server, and may return an MTFTPv6 OACK, MTFTPv6 ERROR, or ICMP ERROR packet. Retries occur only if no response packets are received from the MTFTPv6 server before the timeout expires.
[in] | This | Pointer to the EFI_MTFTP6_PROTOCOL instance. |
[in] | OverrideData | Data that is used to override the existing parameters. If NULL, the default parameters that were set in the EFI_MTFTP6_PROTOCOL.Configure() function are used. |
[in] | Filename | Pointer to null-terminated ASCII file name string. |
[in] | ModeStr | Pointer to null-terminated ASCII mode string. If NULL, octet will be used |
[in] | OptionCount | Number of option/value string pairs in OptionList. |
[in] | OptionList | Pointer to array of option/value string pairs. Ignored if OptionCount is zero. |
[out] | PacketLength | The number of bytes in the returned packet. |
[out] | Packet | The pointer to the received packet. This buffer must be freed by the caller. |
EFI_SUCCESS | An MTFTPv6 OACK packet was received and is in the Packet. | |
EFI_INVALID_PARAMETER | One or more of the following conditions is TRUE:
| |
EFI_UNSUPPORTED | One or more options in the OptionList are unsupported by this implementation. | |
EFI_NOT_STARTED | The EFI MTFTPv6 Protocol driver has not been started. | |
EFI_NO_MAPPING | The underlying IPv6 driver was responsible for choosing a source address for this instance, but no source address was available for use. | |
EFI_ACCESS_DENIED | The previous operation has not completed yet. | |
EFI_OUT_OF_RESOURCES | Required system resources could not be allocated. | |
EFI_TFTP_ERROR | An MTFTPv6 ERROR packet was received and is in the Packet. | |
EFI_NETWORK_UNREACHABLE | An ICMP network unreachable error packet was received and the Packet is set to NULL. | |
EFI_HOST_UNREACHABLE | An ICMP host unreachable error packet was received and the Packet is set to NULL. | |
EFI_PROTOCOL_UNREACHABLE | An ICMP protocol unreachable error packet was received and the Packet is set to NULL. | |
EFI_PORT_UNREACHABLE | An ICMP port unreachable error packet was received and the Packet is set to NULL. | |
EFI_ICMP_ERROR | Some other ICMP ERROR packet was received and the Packet is set to NULL. | |
EFI_PROTOCOL_ERROR | An unexpected MTFTPv6 packet was received and is in the Packet. | |
EFI_TIMEOUT | No responses were received from the MTFTPv6 server. | |
EFI_DEVICE_ERROR | An unexpected network error or system error occurred. | |
EFI_NO_MEDIA | There was a media error. |
typedef EFI_STATUS(EFIAPI * EFI_MTFTP6_GET_MODE_DATA)(IN EFI_MTFTP6_PROTOCOL *This, OUT EFI_MTFTP6_MODE_DATA *ModeData) |
Read the current operational settings.
The GetModeData() function reads the current operational settings of this EFI MTFTPv6 Protocol driver instance.
[in] | This | Pointer to the EFI_MTFTP6_PROTOCOL instance. |
[out] | ModeData | The buffer in which the EFI MTFTPv6 Protocol driver mode data is returned. |
EFI_SUCCESS | The configuration data was successfully returned. | |
EFI_OUT_OF_RESOURCES | The required mode data could not be allocated. | |
EFI_INVALID_PARAMETER | This is NULL or ModeData is NULL. |
typedef EFI_STATUS(EFIAPI * EFI_MTFTP6_PACKET_NEEDED)(IN EFI_MTFTP6_PROTOCOL *This, IN EFI_MTFTP6_TOKEN *Token, IN OUT UINT16 *Length, OUT VOID **Buffer) |
EFI_MTFTP6_PACKET_NEEDED is a callback function that the caller provides to feed data to the EFI_MTFTP6_PROTOCOL.WriteFile() function.
EFI_MTFTP6_PACKET_NEEDED provides another mechanism for the caller to provide data to upload other than a static buffer. The EFI MTFTP6 Protocol driver always calls EFI_MTFTP6_PACKET_NEEDED to get packet data from the caller if no static buffer was given in the initial call to EFI_MTFTP6_PROTOCOL.WriteFile() function. Setting *Length to zero signals the end of the session. Returning a status code other than EFI_SUCCESS aborts the session.
[in] | This | Pointer to the EFI_MTFTP6_PROTOCOL instance. |
[in] | Token | The token provided in the EFI_MTFTP6_PROTOCOL.WriteFile() by the caller. |
[in,out] | Length | Indicates the length of the raw data wanted on input, and the length the data available on output. |
[out] | Buffer | Pointer to the buffer where the data is stored. |
EFI_SUCCESS | Operation sucess. | |
Others | Aborts session. |
typedef EFI_STATUS(EFIAPI * EFI_MTFTP6_PARSE_OPTIONS)(IN EFI_MTFTP6_PROTOCOL *This, IN UINT32 PacketLen, IN EFI_MTFTP6_PACKET *Packet, OUT UINT32 *OptionCount, OUT EFI_MTFTP6_OPTION **OptionList) |
Parse the options in an MTFTPv6 OACK packet.
The ParseOptions() function parses the option fields in an MTFTPv6 OACK packet and returns the number of options that were found and optionally a list of pointers to the options in the packet. If one or more of the option fields are not valid, then EFI_PROTOCOL_ERROR is returned and *OptionCount and *OptionList stop at the last valid option.
[in] | This | Pointer to the EFI_MTFTP6_PROTOCOL instance. |
[in] | PacketLen | Length of the OACK packet to be parsed. |
[in] | Packet | Pointer to the OACK packet to be parsed. |
[out] | OptionCount | Pointer to the number of options in the following OptionList. |
[out] | OptionList | Pointer to EFI_MTFTP6_OPTION storage. Each pointer in the OptionList points to the corresponding MTFTP option buffer in the Packet. Call the EFI Boot Service FreePool() to release the OptionList if the options in this OptionList are not needed any more. |
EFI_SUCCESS | The OACK packet was valid and the OptionCount and OptionList parameters have been updated. | |
EFI_INVALID_PARAMETER | One or more of the following conditions is TRUE:
| |
EFI_NOT_FOUND | No options were found in the OACK packet. | |
EFI_OUT_OF_RESOURCES | Storage for the OptionList array can not be allocated. | |
EFI_PROTOCOL_ERROR | One or more of the option fields is invalid. |
typedef EFI_STATUS(EFIAPI * EFI_MTFTP6_POLL)(IN EFI_MTFTP6_PROTOCOL *This) |
Polls for incoming data packets and processes outgoing data packets.
The Poll() function can be used by network drivers and applications to increase the rate that data packets are moved between the communications device and the transmit and receive queues. In some systems, the periodic timer event in the managed network driver may not poll the underlying communications device fast enough to transmit and/or receive all data packets without missing incoming packets or dropping outgoing packets. Drivers and applications that are experiencing packet loss should try calling the Poll() function more often.
[in] | This | Pointer to the EFI_MTFTP6_PROTOCOL instance. |
EFI_SUCCESS | Incoming or outgoing data was processed. | |
EFI_NOT_STARTED | This EFI MTFTPv6 Protocol instance has not been started. | |
EFI_INVALID_PARAMETER | This is NULL. | |
EFI_DEVICE_ERROR | An unexpected system or network error occurred. | |
EFI_TIMEOUT | Data was dropped out of the transmit and/or receive queue. Consider increasing the polling rate. |
typedef struct _EFI_MTFTP6_PROTOCOL EFI_MTFTP6_PROTOCOL |
typedef EFI_STATUS(EFIAPI * EFI_MTFTP6_READ_DIRECTORY)(IN EFI_MTFTP6_PROTOCOL *This, IN EFI_MTFTP6_TOKEN *Token) |
Download a data file directory from an MTFTPv6 server. May be unsupported in some implementations.
The ReadDirectory() function is used to return a list of files on the MTFTPv6 server that are logically (or operationally) related to Token.Filename. The directory request packet that is sent to the server is built with the option list that was provided by caller, if present.
The file information that the server returns is put into either of the following locations:
If both Token.Buffer and Token.CheckPacket are used, then Token.CheckPacket will be called first. If the call is successful, the packet will be stored in Token.Buffer.
The returned directory listing in the Token.Buffer or EFI_MTFTP6_PACKET consists of a list of two or three variable-length ASCII strings, each terminated by a null character, for each file in the directory. If the multicast option is involved, the first field of each directory entry is the static multicast IP address and UDP port number that is associated with the file name. The format of the field is ip:ip:ip:ip:port. If the multicast option is not involved, this field and its terminating null character are not present.
The next field of each directory entry is the file name and the last field is the file information string. The information string contains the file size and the create/modify timestamp. The format of the information string is filesize yyyy-mm-dd hh:mm:ss:ffff. The timestamp is Coordinated Universal Time (UTC; also known as Greenwich Mean Time [GMT]).
[in] | This | Pointer to the EFI_MTFTP6_PROTOCOL instance. |
[in] | Token | Pointer to the token structure to provide the parameters that are used in this operation. |
EFI_SUCCESS | The MTFTPv6 related file "directory" has been downloaded. | |
EFI_UNSUPPORTED | The EFI MTFTPv6 Protocol driver does not support this function. | |
EFI_INVALID_PARAMETER | One or more of the following conditions is TRUE:
| |
EFI_UNSUPPORTED | One or more options in the Token.OptionList are not supported by this implementation. | |
EFI_NOT_STARTED | The EFI MTFTPv6 Protocol driver has not been started. | |
EFI_NO_MAPPING | The underlying IPv6 driver was responsible for choosing a source address for this instance, but no source address was available for use. | |
EFI_ALREADY_STARTED | This Token is already being used in another MTFTPv6 session. | |
EFI_OUT_OF_RESOURCES | Required system resources could not be allocated. | |
EFI_ACCESS_DENIED | The previous operation has not completed yet. | |
EFI_DEVICE_ERROR | An unexpected network error or system error occurred. |
typedef EFI_STATUS(EFIAPI * EFI_MTFTP6_READ_FILE)(IN EFI_MTFTP6_PROTOCOL *This, IN EFI_MTFTP6_TOKEN *Token) |
Download a file from an MTFTPv6 server.
The ReadFile() function is used to initialize and start an MTFTPv6 download process and optionally wait for completion. When the download operation completes, whether successfully or not, the Token.Status field is updated by the EFI MTFTPv6 Protocol driver and then Token.Event is signaled if it is not NULL.
Data can be downloaded from the MTFTPv6 server into either of the following locations:
If both Token.Buffer and Token.CheckPacket are used, then Token.CheckPacket will be called first. If the call is successful, the packet will be stored in Token.Buffer.
[in] | This | Pointer to the EFI_MTFTP6_PROTOCOL instance. |
[in] | Token | Pointer to the token structure to provide the parameters that are used in this operation. |
EFI_SUCCESS | The data file has been transferred successfully. | |
EFI_OUT_OF_RESOURCES | Required system resources could not be allocated. | |
EFI_BUFFER_TOO_SMALL | BufferSize is not zero but not large enough to hold the downloaded data in downloading process. | |
EFI_ABORTED | Current operation is aborted by user. | |
EFI_NETWORK_UNREACHABLE | An ICMP network unreachable error packet was received. | |
EFI_HOST_UNREACHABLE | An ICMP host unreachable error packet was received. | |
EFI_PROTOCOL_UNREACHABLE | An ICMP protocol unreachable error packet was received. | |
EFI_PORT_UNREACHABLE | An ICMP port unreachable error packet was received. | |
EFI_ICMP_ERROR | An ICMP ERROR packet was received. | |
EFI_TIMEOUT | No responses were received from the MTFTPv6 server. | |
EFI_TFTP_ERROR | An MTFTPv6 ERROR packet was received. | |
EFI_DEVICE_ERROR | An unexpected network error or system error occurred. | |
EFI_NO_MEDIA | There was a media error. |
typedef EFI_STATUS(EFIAPI * EFI_MTFTP6_TIMEOUT_CALLBACK)(IN EFI_MTFTP6_PROTOCOL *This, IN EFI_MTFTP6_TOKEN *Token) |
EFI_MTFTP6_TIMEOUT_CALLBACK is a callback function that the caller provides to capture the timeout event in the EFI_MTFTP6_PROTOCOL.ReadFile(), EFI_MTFTP6_PROTOCOL.WriteFile() or EFI_MTFTP6_PROTOCOL.ReadDirectory() functions.
Whenever a timeout occurs, the EFI MTFTPv6 Protocol driver will call the EFI_MTFTP6_TIMEOUT_CALLBACK function to notify the caller of the timeout event. Any status code other than EFI_SUCCESS that is returned from this function will abort the current download process.
[in] | This | Pointer to the EFI_MTFTP6_PROTOCOL instance. |
[in] | Token | The token that is provided in the EFI_MTFTP6_PROTOCOL.ReadFile() or EFI_MTFTP6_PROTOCOL.WriteFile() or EFI_MTFTP6_PROTOCOL.ReadDirectory() functions by the caller. |
EFI_SUCCESS | Operation sucess. | |
Others | Aborts session. |
typedef struct _EFI_MTFTP6_TOKEN EFI_MTFTP6_TOKEN |
typedef EFI_STATUS(EFIAPI * EFI_MTFTP6_WRITE_FILE)(IN EFI_MTFTP6_PROTOCOL *This, IN EFI_MTFTP6_TOKEN *Token) |
Send a file to an MTFTPv6 server. May be unsupported in some implementations.
The WriteFile() function is used to initialize an uploading operation with the given option list and optionally wait for completion. If one or more of the options is not supported by the server, the unsupported options are ignored and a standard TFTP process starts instead. When the upload process completes, whether successfully or not, Token.Event is signaled, and the EFI MTFTPv6 Protocol driver updates Token.Status.
The caller can supply the data to be uploaded in the following two modes:
With the user-provided buffer, the Token.BufferSize field indicates the length of the buffer, and the driver will upload the data in the buffer. With an EFI_MTFTP6_PACKET_NEEDED callback function, the driver will call this callback function to get more data from the user to upload. See the definition of EFI_MTFTP6_PACKET_NEEDED for more information. These two modes cannot be used at the same time. The callback function will be ignored if the user provides the buffer.
[in] | This | Pointer to the EFI_MTFTP6_PROTOCOL instance. |
[in] | Token | Pointer to the token structure to provide the parameters that are used in this operation. |
EFI_SUCCESS | The upload session has started. | |
EFI_UNSUPPORTED | The operation is not supported by this implementation. | |
EFI_INVALID_PARAMETER | One or more of the following conditions is TRUE:
| |
EFI_UNSUPPORTED | One or more options in the Token.OptionList are not supported by this implementation. | |
EFI_NOT_STARTED | The EFI MTFTPv6 Protocol driver has not been started. | |
EFI_NO_MAPPING | The underlying IPv6 driver was responsible for choosing a source address for this instance, but no source address was available for use. | |
EFI_ALREADY_STARTED | This Token is already being used in another MTFTPv6 session. | |
EFI_OUT_OF_RESOURCES | Required system resources could not be allocated. | |
EFI_ACCESS_DENIED | The previous operation has not completed yet. | |
EFI_DEVICE_ERROR | An unexpected network error or system error occurred. |