Home | History | Annotate | Download | only in Mtftp4
      1 /*++
      2 
      3 Copyright (c) 2006 - 2007, Intel Corporation. All rights reserved.<BR>
      4 This program and the accompanying materials
      5 are licensed and made available under the terms and conditions of the BSD License
      6 which accompanies this distribution.  The full text of the license may be found at
      7 http://opensource.org/licenses/bsd-license.php
      8 
      9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
     10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
     11 
     12 Module Name:
     13 
     14   Mtftp4.h
     15 
     16 Abstract:
     17 
     18   UEFI Multicast Trivial File Tranfer Protocol Definition
     19 
     20 --*/
     21 
     22 #ifndef __EFI_MTFTP4_H__
     23 #define __EFI_MTFTP4_H__
     24 
     25 #include EFI_PROTOCOL_DEFINITION(ServiceBinding)
     26 
     27 #define EFI_MTFTP4_SERVICE_BINDING_PROTOCOL_GUID \
     28     { 0x2FE800BE, 0x8F01, 0x4aa6, {0x94, 0x6B, 0xD7, 0x13, 0x88, 0xE1, 0x83, 0x3F} }
     29 
     30 #define EFI_MTFTP4_PROTOCOL_GUID \
     31     { 0x78247c57, 0x63db, 0x4708, {0x99, 0xc2, 0xa8, 0xb4, 0xa9, 0xa6, 0x1f, 0x6b} }
     32 
     33 EFI_FORWARD_DECLARATION (EFI_MTFTP4_PROTOCOL);
     34 EFI_FORWARD_DECLARATION (EFI_MTFTP4_TOKEN);
     35 
     36 extern EFI_GUID gEfiMtftp4ServiceBindingProtocolGuid;
     37 extern EFI_GUID gEfiMtftp4ProtocolGuid;
     38 
     39 
     40 //
     41 //MTFTP4 packet opcode definition
     42 //
     43 #define EFI_MTFTP4_OPCODE_RRQ      1
     44 #define EFI_MTFTP4_OPCODE_WRQ      2
     45 #define EFI_MTFTP4_OPCODE_DATA     3
     46 #define EFI_MTFTP4_OPCODE_ACK      4
     47 #define EFI_MTFTP4_OPCODE_ERROR    5
     48 #define EFI_MTFTP4_OPCODE_OACK     6
     49 #define EFI_MTFTP4_OPCODE_DIR      7
     50 #define EFI_MTFTP4_OPCODE_DATA8    8
     51 #define EFI_MTFTP4_OPCODE_ACK8     9
     52 
     53 //
     54 //MTFTP4 error code definition
     55 //
     56 #define EFI_MTFTP4_ERRORCODE_NOT_DEFINED           0
     57 #define EFI_MTFTP4_ERRORCODE_FILE_NOT_FOUND        1
     58 #define EFI_MTFTP4_ERRORCODE_ACCESS_VIOLATION      2
     59 #define EFI_MTFTP4_ERRORCODE_DISK_FULL             3
     60 #define EFI_MTFTP4_ERRORCODE_ILLEGAL_OPERATION     4
     61 #define EFI_MTFTP4_ERRORCODE_UNKNOWN_TRANSFER_ID   5
     62 #define EFI_MTFTP4_ERRORCODE_FILE_ALREADY_EXISTS   6
     63 #define EFI_MTFTP4_ERRORCODE_NO_SUCH_USER          7
     64 #define EFI_MTFTP4_ERRORCODE_REQUEST_DENIED        8
     65 
     66 
     67 //
     68 //MTFTP4 pacekt definition
     69 //
     70 #pragma pack(1)
     71 
     72 typedef struct {
     73   UINT16    OpCode;
     74   UINT8     Filename[1];
     75 } EFI_MTFTP4_REQ_HEADER;
     76 
     77 typedef struct {
     78   UINT16    OpCode;
     79   UINT8     Data[1];
     80 } EFI_MTFTP4_OACK_HEADER;
     81 
     82 typedef struct {
     83   UINT16    OpCode;
     84   UINT16    Block;
     85   UINT8     Data[1];
     86 } EFI_MTFTP4_DATA_HEADER;
     87 
     88 typedef struct {
     89   UINT16    OpCode;
     90   UINT16    Block[1];
     91 } EFI_MTFTP4_ACK_HEADER;
     92 
     93 typedef struct {
     94   UINT16    OpCode;
     95   UINT64    Block;
     96   UINT8     Data[1];
     97 } EFI_MTFTP4_DATA8_HEADER;
     98 
     99 typedef struct {
    100   UINT16    OpCode;
    101   UINT64    Block[1];
    102 } EFI_MTFTP4_ACK8_HEADER;
    103 
    104 typedef struct {
    105   UINT16    OpCode;
    106   UINT16    ErrorCode;
    107   UINT8     ErrorMessage[1];
    108 } EFI_MTFTP4_ERROR_HEADER;
    109 
    110 typedef union {
    111   UINT16                    OpCode;
    112   EFI_MTFTP4_REQ_HEADER     Rrq;
    113   EFI_MTFTP4_REQ_HEADER     Wrq;
    114   EFI_MTFTP4_OACK_HEADER    Oack;
    115   EFI_MTFTP4_DATA_HEADER    Data;
    116   EFI_MTFTP4_ACK_HEADER     Ack;
    117   EFI_MTFTP4_DATA8_HEADER   Data8;
    118   EFI_MTFTP4_ACK8_HEADER    Ack8;
    119   EFI_MTFTP4_ERROR_HEADER   Error;
    120 } EFI_MTFTP4_PACKET;
    121 
    122 #pragma pack()
    123 
    124 //
    125 //MTFTP4 option definition
    126 //
    127 typedef struct {
    128   UINT8                   *OptionStr;
    129   UINT8                   *ValueStr;
    130 } EFI_MTFTP4_OPTION;
    131 
    132 //
    133 //MTFTP4 config data
    134 //
    135 typedef struct {
    136   BOOLEAN                 UseDefaultSetting;
    137   EFI_IPv4_ADDRESS        StationIp;
    138   EFI_IPv4_ADDRESS        SubnetMask;
    139   UINT16                  LocalPort;
    140   EFI_IPv4_ADDRESS        GatewayIp;
    141   EFI_IPv4_ADDRESS        ServerIp;
    142   UINT16                  InitialServerPort;
    143   UINT16                  TryCount;
    144   UINT16                  TimeoutValue;
    145 } EFI_MTFTP4_CONFIG_DATA;
    146 
    147 //
    148 //MTFTP4 Mode data
    149 //
    150 typedef struct {
    151   EFI_MTFTP4_CONFIG_DATA  ConfigData;
    152   UINT8                   SupportedOptionCount;
    153   UINT8                   **SupportedOptoins;
    154   UINT8                   UnsupportedOptionCount;
    155   UINT8                   **UnsupportedOptoins;
    156 } EFI_MTFTP4_MODE_DATA;
    157 
    158 
    159 //
    160 //MTFTP4 override data
    161 //
    162 typedef struct {
    163   EFI_IPv4_ADDRESS        GatewayIp;
    164   EFI_IPv4_ADDRESS        ServerIp;
    165   UINT16                  ServerPort;
    166   UINT16                  TryCount;
    167   UINT16                  TimeoutValue;
    168 } EFI_MTFTP4_OVERRIDE_DATA;
    169 
    170 
    171 //
    172 //Packet checking function
    173 //
    174 typedef
    175 EFI_STATUS
    176 (EFIAPI *EFI_MTFTP4_CHECK_PACKET)(
    177   IN EFI_MTFTP4_PROTOCOL  *This,
    178   IN EFI_MTFTP4_TOKEN     *Token,
    179   IN UINT16               PacketLen,
    180   IN EFI_MTFTP4_PACKET    *Paket
    181   );
    182 
    183 //
    184 //Timeout callback funtion
    185 //
    186 typedef
    187 EFI_STATUS
    188 (EFIAPI *EFI_MTFTP4_TIMEOUT_CALLBACK) (
    189   IN EFI_MTFTP4_PROTOCOL  *This,
    190   IN EFI_MTFTP4_TOKEN     *Token
    191   );
    192 
    193 //
    194 //Packet needed function
    195 //
    196 typedef
    197 EFI_STATUS
    198 (EFIAPI *EFI_MTFTP4_PACKET_NEEDED) (
    199   IN EFI_MTFTP4_PROTOCOL  *This,
    200   IN EFI_MTFTP4_TOKEN     *Token,
    201   IN OUT UINT16           *Length,
    202   OUT VOID                **Buffer
    203   );
    204 
    205 
    206 typedef
    207 EFI_STATUS
    208 (EFIAPI *EFI_MTFTP4_GET_MODE_DATA) (
    209   IN  EFI_MTFTP4_PROTOCOL     *This,
    210   OUT EFI_MTFTP4_MODE_DATA    *ModeData
    211   );
    212 
    213 
    214 typedef
    215 EFI_STATUS
    216 (EFIAPI *EFI_MTFTP4_CONFIGURE) (
    217   IN EFI_MTFTP4_PROTOCOL        *This,
    218   IN EFI_MTFTP4_CONFIG_DATA      *MtftpConfigData OPTIONAL
    219   );
    220 
    221 
    222 typedef
    223 EFI_STATUS
    224 (EFIAPI *EFI_MTFTP4_GET_INFO) (
    225   IN  EFI_MTFTP4_PROTOCOL       *This,
    226   IN  EFI_MTFTP4_OVERRIDE_DATA  *OverrideData   OPTIONAL,
    227   IN  UINT8                     *Filename,
    228   IN  UINT8                     *ModeStr         OPTIONAL,
    229   IN  UINT8                     OptionCount,
    230   IN  EFI_MTFTP4_OPTION         *OptionList,
    231   OUT UINT32                    *PacketLength,
    232   OUT EFI_MTFTP4_PACKET         **Packet        OPTIONAL
    233   );
    234 
    235 
    236 typedef
    237 EFI_STATUS
    238 (EFIAPI *EFI_MTFTP4_PARSE_OPTIONS) (
    239   IN  EFI_MTFTP4_PROTOCOL       *This,
    240   IN  UINT32                    PacketLen,
    241   IN  EFI_MTFTP4_PACKET         *Packet,
    242   OUT UINT32                    *OptionCount,
    243   OUT EFI_MTFTP4_OPTION         **OptionList OPTIONAL
    244   );
    245 
    246 
    247 typedef
    248 EFI_STATUS
    249 (EFIAPI *EFI_MTFTP4_READ_FILE) (
    250   IN EFI_MTFTP4_PROTOCOL         *This,
    251   IN EFI_MTFTP4_TOKEN            *Token
    252   );
    253 
    254 
    255 typedef
    256 EFI_STATUS
    257 (EFIAPI *EFI_MTFTP4_WRITE_FILE) (
    258   IN EFI_MTFTP4_PROTOCOL         *This,
    259   IN EFI_MTFTP4_TOKEN            *Token
    260   );
    261 
    262 
    263 typedef
    264 EFI_STATUS
    265 (EFIAPI *EFI_MTFTP4_READ_DIRECTORY) (
    266   IN EFI_MTFTP4_PROTOCOL        *This,
    267   IN EFI_MTFTP4_TOKEN           *Token
    268   );
    269 
    270 typedef
    271 EFI_STATUS
    272 (EFIAPI *EFI_MTFTP4_POLL) (
    273   IN EFI_MTFTP4_PROTOCOL        *This
    274 );
    275 
    276 
    277 struct _EFI_MTFTP4_PROTOCOL {
    278   EFI_MTFTP4_GET_MODE_DATA        GetModeData;
    279   EFI_MTFTP4_CONFIGURE            Configure;
    280   EFI_MTFTP4_GET_INFO             GetInfo;
    281   EFI_MTFTP4_PARSE_OPTIONS        ParseOptions;
    282   EFI_MTFTP4_READ_FILE            ReadFile;
    283   EFI_MTFTP4_WRITE_FILE           WriteFile;
    284   EFI_MTFTP4_READ_DIRECTORY       ReadDirectory;
    285   EFI_MTFTP4_POLL                 Poll;
    286 };
    287 
    288 //
    289 //MTFTP4 token data
    290 //
    291 struct _EFI_MTFTP4_TOKEN{
    292   IN OUT EFI_STATUS               Status;
    293   IN EFI_EVENT                    Event;
    294   IN EFI_MTFTP4_OVERRIDE_DATA     *OverrideData;
    295   IN UINT8                        *Filename;
    296   IN UINT8                        *ModeStr;
    297   IN UINT32                       OptionCount;
    298   IN EFI_MTFTP4_OPTION            *OptionList;
    299   IN OUT UINT64                   BufferSize;
    300   IN OUT VOID                     *Buffer;
    301   IN VOID                         *Context;
    302   IN EFI_MTFTP4_CHECK_PACKET      CheckPacket;
    303   IN EFI_MTFTP4_TIMEOUT_CALLBACK  TimeoutCallback;
    304   IN EFI_MTFTP4_PACKET_NEEDED     PacketNeeded;
    305 };
    306 
    307 #endif
    308 
    309