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