Subversion Repositories HelenOS

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2726 vana 1
#ifndef _EFIPXEBC_H
2
#define _EFIPXEBC_H
3
 
4
/*++
5
 
6
Copyright (c) 1998  Intel Corporation
7
 
8
Module Name:
9
 
10
    efipxebc.h
11
 
12
Abstract:
13
 
14
    EFI PXE Base Code Protocol
15
 
16
 
17
 
18
Revision History
19
 
20
--*/
21
 
22
//
23
// PXE Base Code protocol
24
//
25
 
26
#define EFI_PXE_BASE_CODE_PROTOCOL \
27
    { 0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
28
 
29
INTERFACE_DECL(_EFI_PXE_BASE_CODE);
30
 
31
#define DEFAULT_TTL 4
32
#define DEFAULT_ToS 0
33
//
34
// Address definitions
35
//
36
 
37
typedef union {
38
    UINT32      Addr[4];
39
    EFI_IPv4_ADDRESS    v4;
40
    EFI_IPv6_ADDRESS    v6;
41
} EFI_IP_ADDRESS;
42
 
43
typedef UINT16 EFI_PXE_BASE_CODE_UDP_PORT;
44
 
45
//
46
// Packet definitions
47
//
48
 
49
typedef struct {
50
    UINT8                           BootpOpcode;
51
    UINT8                           BootpHwType;
52
    UINT8                           BootpHwAddrLen;
53
    UINT8                           BootpGateHops;
54
    UINT32                          BootpIdent;
55
    UINT16                          BootpSeconds;
56
    UINT16                          BootpFlags;
57
    UINT8                           BootpCiAddr[4];
58
    UINT8                           BootpYiAddr[4];
59
    UINT8                           BootpSiAddr[4];
60
    UINT8                           BootpGiAddr[4];
61
    UINT8                           BootpHwAddr[16];
62
    UINT8                           BootpSrvName[64];
63
    UINT8                           BootpBootFile[128];
64
    UINT32                          DhcpMagik;
65
    UINT8                           DhcpOptions[56];
66
} EFI_PXE_BASE_CODE_DHCPV4_PACKET;
67
 
68
// TBD in EFI v1.1
69
//typedef struct {
70
//    UINT8                           reserved;
71
//} EFI_PXE_BASE_CODE_DHCPV6_PACKET;
72
 
73
typedef union {
74
    UINT8                               Raw[1472];
75
    EFI_PXE_BASE_CODE_DHCPV4_PACKET     Dhcpv4;
76
//    EFI_PXE_BASE_CODE_DHCPV6_PACKET     Dhcpv6;
77
} EFI_PXE_BASE_CODE_PACKET;
78
 
79
typedef struct {
80
    UINT8                   Type;
81
    UINT8                   Code;
82
    UINT16                  Checksum;
83
    union {
84
        UINT32              reserved;
85
        UINT32              Mtu;
86
        UINT32              Pointer;
87
        struct {
88
            UINT16          Identifier;
89
            UINT16          Sequence;
90
        } Echo;
91
    } u;
92
    UINT8                   Data[494];
93
} EFI_PXE_BASE_CODE_ICMP_ERROR;
94
 
95
typedef struct {
96
    UINT8                   ErrorCode;
97
    CHAR8                   ErrorString[127];
98
} EFI_PXE_BASE_CODE_TFTP_ERROR;
99
 
100
//
101
// IP Receive Filter definitions
102
//
103
#define EFI_PXE_BASE_CODE_MAX_IPCNT             8
104
typedef struct {
105
    UINT8                       Filters;
106
    UINT8                       IpCnt;
107
    UINT16                      reserved;
108
    EFI_IP_ADDRESS              IpList[EFI_PXE_BASE_CODE_MAX_IPCNT];
109
} EFI_PXE_BASE_CODE_IP_FILTER;
110
 
111
#define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP             0x0001
112
#define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST              0x0002
113
#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS            0x0004
114
#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST  0x0008
115
 
116
//
117
// ARP Cache definitions
118
//
119
 
120
typedef struct {
121
    EFI_IP_ADDRESS       IpAddr;
122
    EFI_MAC_ADDRESS      MacAddr;
123
} EFI_PXE_BASE_CODE_ARP_ENTRY;
124
 
125
typedef struct {
126
    EFI_IP_ADDRESS       IpAddr;
127
    EFI_IP_ADDRESS       SubnetMask;
128
    EFI_IP_ADDRESS       GwAddr;
129
} EFI_PXE_BASE_CODE_ROUTE_ENTRY;
130
 
131
//
132
// UDP definitions
133
//
134
 
135
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_IP    0x0001
136
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_SRC_PORT  0x0002
137
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_IP   0x0004
138
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_ANY_DEST_PORT 0x0008
139
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_USE_FILTER    0x0010
140
#define EFI_PXE_BASE_CODE_UDP_OPFLAGS_MAY_FRAGMENT  0x0020
141
 
142
//
143
// Discover() definitions
144
//
145
 
146
#define EFI_PXE_BASE_CODE_BOOT_TYPE_BOOTSTRAP           0   
147
#define EFI_PXE_BASE_CODE_BOOT_TYPE_MS_WINNT_RIS        1
148
#define EFI_PXE_BASE_CODE_BOOT_TYPE_INTEL_LCM           2
149
#define EFI_PXE_BASE_CODE_BOOT_TYPE_DOSUNDI             3
150
#define EFI_PXE_BASE_CODE_BOOT_TYPE_NEC_ESMPRO          4
151
#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_WSoD            5
152
#define EFI_PXE_BASE_CODE_BOOT_TYPE_IBM_LCCM            6
153
#define EFI_PXE_BASE_CODE_BOOT_TYPE_CA_UNICENTER_TNG    7
154
#define EFI_PXE_BASE_CODE_BOOT_TYPE_HP_OPENVIEW         8
155
#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_9           9
156
#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_10          10
157
#define EFI_PXE_BASE_CODE_BOOT_TYPE_ALTIRIS_11          11
158
#define EFI_PXE_BASE_CODE_BOOT_TYPE_NOT_USED_12         12
159
#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_INSTALL      13
160
#define EFI_PXE_BASE_CODE_BOOT_TYPE_REDHAT_BOOT         14
161
#define EFI_PXE_BASE_CODE_BOOT_TYPE_REMBO               15
162
#define EFI_PXE_BASE_CODE_BOOT_TYPE_BEOBOOT             16
163
//
164
// 17 through 32767 are reserved
165
// 32768 through 65279 are for vendor use
166
// 65280 through 65534 are reserved
167
//
168
#define EFI_PXE_BASE_CODE_BOOT_TYPE_PXETEST             65535
169
 
170
#define EFI_PXE_BASE_CODE_BOOT_LAYER_MASK               0x7FFF
171
#define EFI_PXE_BASE_CODE_BOOT_LAYER_INITIAL            0x0000
172
 
173
 
174
typedef struct {
175
    UINT16                      Type;
176
    BOOLEAN                     AcceptAnyResponse;
177
    UINT8                       Reserved;
178
    EFI_IP_ADDRESS              IpAddr;
179
} EFI_PXE_BASE_CODE_SRVLIST;
180
 
181
typedef struct {
182
    BOOLEAN                     UseMCast;
183
    BOOLEAN                     UseBCast;
184
    BOOLEAN                     UseUCast;
185
    BOOLEAN                     MustUseList;
186
    EFI_IP_ADDRESS              ServerMCastIp;
187
    UINT16                      IpCnt;
188
    EFI_PXE_BASE_CODE_SRVLIST   SrvList[1];
189
} EFI_PXE_BASE_CODE_DISCOVER_INFO;
190
 
191
//
192
// Mtftp() definitions
193
//
194
 
195
typedef enum {
196
    EFI_PXE_BASE_CODE_TFTP_FIRST,
197
    EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE,
198
    EFI_PXE_BASE_CODE_TFTP_READ_FILE,
199
    EFI_PXE_BASE_CODE_TFTP_WRITE_FILE,
200
    EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY,
201
    EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE,
202
    EFI_PXE_BASE_CODE_MTFTP_READ_FILE,
203
    EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY,
204
    EFI_PXE_BASE_CODE_MTFTP_LAST
205
} EFI_PXE_BASE_CODE_TFTP_OPCODE;
206
 
207
typedef struct {
208
    EFI_IP_ADDRESS   MCastIp;
209
    EFI_PXE_BASE_CODE_UDP_PORT  CPort;
210
    EFI_PXE_BASE_CODE_UDP_PORT  SPort;
211
    UINT16                      ListenTimeout;
212
    UINT16                      TransmitTimeout;
213
} EFI_PXE_BASE_CODE_MTFTP_INFO;
214
 
215
//
216
// PXE Base Code Mode structure
217
//
218
 
219
#define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES       8
220
#define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES     8
221
 
222
typedef struct {
223
    BOOLEAN                         Started;
224
    BOOLEAN                         Ipv6Available;
225
    BOOLEAN                         Ipv6Supported;
226
    BOOLEAN                         UsingIpv6;
227
    BOOLEAN                         BisSupported;
228
    BOOLEAN                         BisDetected;
229
    BOOLEAN                         AutoArp;
230
    BOOLEAN                         SendGUID;
231
    BOOLEAN                         DhcpDiscoverValid;
232
    BOOLEAN                         DhcpAckReceived;
233
    BOOLEAN                         ProxyOfferReceived;
234
    BOOLEAN                         PxeDiscoverValid;
235
    BOOLEAN                         PxeReplyReceived;
236
    BOOLEAN                         PxeBisReplyReceived;
237
    BOOLEAN                         IcmpErrorReceived;
238
    BOOLEAN                         TftpErrorReceived;
239
    BOOLEAN                         MakeCallbacks;
240
    UINT8                           TTL;
241
    UINT8                           ToS;
242
    EFI_IP_ADDRESS                  StationIp;
243
    EFI_IP_ADDRESS                  SubnetMask;
244
    EFI_PXE_BASE_CODE_PACKET        DhcpDiscover;
245
    EFI_PXE_BASE_CODE_PACKET        DhcpAck;
246
    EFI_PXE_BASE_CODE_PACKET        ProxyOffer;
247
    EFI_PXE_BASE_CODE_PACKET        PxeDiscover;
248
    EFI_PXE_BASE_CODE_PACKET        PxeReply;
249
    EFI_PXE_BASE_CODE_PACKET        PxeBisReply;
250
    EFI_PXE_BASE_CODE_IP_FILTER     IpFilter;
251
    UINT32                          ArpCacheEntries;
252
    EFI_PXE_BASE_CODE_ARP_ENTRY     ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES];
253
    UINT32                          RouteTableEntries;
254
    EFI_PXE_BASE_CODE_ROUTE_ENTRY   RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES];
255
    EFI_PXE_BASE_CODE_ICMP_ERROR    IcmpError;
256
    EFI_PXE_BASE_CODE_TFTP_ERROR    TftpError;
257
} EFI_PXE_BASE_CODE_MODE;
258
 
259
//
260
// PXE Base Code Interface Function definitions
261
//
262
 
263
typedef
264
EFI_STATUS
265
(EFIAPI *EFI_PXE_BASE_CODE_START) (
266
    IN struct _EFI_PXE_BASE_CODE    *This,
267
    IN BOOLEAN                      UseIpv6
268
    );
269
 
270
typedef
271
EFI_STATUS
272
(EFIAPI *EFI_PXE_BASE_CODE_STOP) (
273
    IN struct _EFI_PXE_BASE_CODE    *This
274
    );
275
 
276
typedef
277
EFI_STATUS
278
(EFIAPI *EFI_PXE_BASE_CODE_DHCP) (
279
    IN struct _EFI_PXE_BASE_CODE    *This,
280
    IN BOOLEAN                      SortOffers
281
    );
282
 
283
typedef
284
EFI_STATUS
285
(EFIAPI *EFI_PXE_BASE_CODE_DISCOVER) (
286
    IN struct _EFI_PXE_BASE_CODE            *This,
287
    IN UINT16                               Type,
288
    IN UINT16                               *Layer,
289
    IN BOOLEAN                              UseBis,
290
    IN OUT EFI_PXE_BASE_CODE_DISCOVER_INFO  *Info   OPTIONAL
291
    );
292
 
293
typedef
294
EFI_STATUS
295
(EFIAPI *EFI_PXE_BASE_CODE_MTFTP) (
296
    IN struct _EFI_PXE_BASE_CODE        *This,
297
    IN EFI_PXE_BASE_CODE_TFTP_OPCODE    Operation,
298
    IN OUT VOID                         *BufferPtr  OPTIONAL,
299
    IN BOOLEAN                          Overwrite,
300
    IN OUT UINTN                        *BufferSize,
301
    IN UINTN                            *BlockSize  OPTIONAL,
302
    IN EFI_IP_ADDRESS                   *ServerIp,
303
    IN UINT8                            *Filename,
304
    IN EFI_PXE_BASE_CODE_MTFTP_INFO     *Info       OPTIONAL,
305
    IN BOOLEAN                          DontUseBuffer
306
    );
307
 
308
typedef
309
EFI_STATUS
310
(EFIAPI *EFI_PXE_BASE_CODE_UDP_WRITE) (
311
    IN struct _EFI_PXE_BASE_CODE        *This,
312
    IN UINT16                           OpFlags,
313
    IN EFI_IP_ADDRESS                   *DestIp,
314
    IN EFI_PXE_BASE_CODE_UDP_PORT       *DestPort,
315
    IN EFI_IP_ADDRESS                   *GatewayIp,  OPTIONAL
316
    IN EFI_IP_ADDRESS                   *SrcIp,      OPTIONAL
317
    IN OUT EFI_PXE_BASE_CODE_UDP_PORT   *SrcPort,    OPTIONAL
318
    IN UINTN                            *HeaderSize, OPTIONAL
319
    IN VOID                             *HeaderPtr,  OPTIONAL
320
    IN UINTN                            *BufferSize,
321
    IN VOID                             *BufferPtr
322
    );
323
 
324
typedef
325
EFI_STATUS
326
(EFIAPI *EFI_PXE_BASE_CODE_UDP_READ) (
327
    IN struct _EFI_PXE_BASE_CODE        *This,
328
    IN UINT16                           OpFlags,
329
    IN OUT EFI_IP_ADDRESS               *DestIp,      OPTIONAL
330
    IN OUT EFI_PXE_BASE_CODE_UDP_PORT   *DestPort,    OPTIONAL
331
    IN OUT EFI_IP_ADDRESS               *SrcIp,       OPTIONAL
332
    IN OUT EFI_PXE_BASE_CODE_UDP_PORT   *SrcPort,     OPTIONAL
333
    IN UINTN                            *HeaderSize,  OPTIONAL
334
    IN VOID                             *HeaderPtr,   OPTIONAL
335
    IN OUT UINTN                        *BufferSize,
336
    IN VOID                             *BufferPtr
337
    );
338
 
339
typedef
340
EFI_STATUS
341
(EFIAPI *EFI_PXE_BASE_CODE_SET_IP_FILTER) (
342
    IN struct _EFI_PXE_BASE_CODE    *This,
343
    IN EFI_PXE_BASE_CODE_IP_FILTER  *NewFilter
344
    );
345
 
346
typedef
347
EFI_STATUS
348
(EFIAPI *EFI_PXE_BASE_CODE_ARP) (
349
    IN struct _EFI_PXE_BASE_CODE    *This,
350
    IN EFI_IP_ADDRESS               *IpAddr,      
351
    IN EFI_MAC_ADDRESS              *MacAddr      OPTIONAL
352
    );
353
 
354
typedef
355
EFI_STATUS
356
(EFIAPI *EFI_PXE_BASE_CODE_SET_PARAMETERS) (
357
    IN struct _EFI_PXE_BASE_CODE    *This,
358
    IN BOOLEAN                      *NewAutoArp,    OPTIONAL
359
    IN BOOLEAN                      *NewSendGUID,   OPTIONAL
360
    IN UINT8                        *NewTTL,        OPTIONAL
361
    IN UINT8                        *NewToS,        OPTIONAL
362
    IN BOOLEAN                      *NewMakeCallback    OPTIONAL
363
    );
364
 
365
typedef
366
EFI_STATUS
367
(EFIAPI *EFI_PXE_BASE_CODE_SET_STATION_IP) (
368
    IN struct _EFI_PXE_BASE_CODE    *This,
369
    IN EFI_IP_ADDRESS               *NewStationIp,  OPTIONAL
370
    IN EFI_IP_ADDRESS               *NewSubnetMask  OPTIONAL
371
    );
372
 
373
typedef
374
EFI_STATUS
375
(EFIAPI *EFI_PXE_BASE_CODE_SET_PACKETS) (
376
    IN struct _EFI_PXE_BASE_CODE    *This,
377
    BOOLEAN                         *NewDhcpDiscoverValid,  OPTIONAL
378
    BOOLEAN                         *NewDhcpAckReceived,    OPTIONAL
379
    BOOLEAN                         *NewProxyOfferReceived, OPTIONAL
380
    BOOLEAN                         *NewPxeDiscoverValid,   OPTIONAL
381
    BOOLEAN                         *NewPxeReplyReceived,   OPTIONAL
382
    BOOLEAN                         *NewPxeBisReplyReceived,OPTIONAL
383
    IN EFI_PXE_BASE_CODE_PACKET     *NewDhcpDiscover, OPTIONAL
384
    IN EFI_PXE_BASE_CODE_PACKET     *NewDhcpAck,      OPTIONAL
385
    IN EFI_PXE_BASE_CODE_PACKET     *NewProxyOffer,   OPTIONAL
386
    IN EFI_PXE_BASE_CODE_PACKET     *NewPxeDiscover,  OPTIONAL
387
    IN EFI_PXE_BASE_CODE_PACKET     *NewPxeReply,     OPTIONAL
388
    IN EFI_PXE_BASE_CODE_PACKET     *NewPxeBisReply   OPTIONAL
389
    );
390
 
391
//
392
// PXE Base Code Protocol structure
393
//
394
 
395
#define EFI_PXE_BASE_CODE_INTERFACE_REVISION    0x00010000
396
 
397
typedef struct _EFI_PXE_BASE_CODE {
398
    UINT64                              Revision;
399
    EFI_PXE_BASE_CODE_START             Start;
400
    EFI_PXE_BASE_CODE_STOP              Stop;
401
    EFI_PXE_BASE_CODE_DHCP              Dhcp;
402
    EFI_PXE_BASE_CODE_DISCOVER          Discover;
403
    EFI_PXE_BASE_CODE_MTFTP             Mtftp;
404
    EFI_PXE_BASE_CODE_UDP_WRITE         UdpWrite;
405
    EFI_PXE_BASE_CODE_UDP_READ          UdpRead;
406
    EFI_PXE_BASE_CODE_SET_IP_FILTER     SetIpFilter;
407
    EFI_PXE_BASE_CODE_ARP               Arp;
408
    EFI_PXE_BASE_CODE_SET_PARAMETERS    SetParameters;
409
    EFI_PXE_BASE_CODE_SET_STATION_IP    SetStationIp;
410
    EFI_PXE_BASE_CODE_SET_PACKETS       SetPackets;
411
    EFI_PXE_BASE_CODE_MODE              *Mode;
412
} EFI_PXE_BASE_CODE;
413
 
414
//
415
// Call Back Definitions
416
//
417
 
418
#define EFI_PXE_BASE_CODE_CALLBACK_PROTOCOL \
419
    { 0x245dca21, 0xfb7b, 0x11d3, {0x8f, 0x01, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
420
 
421
//
422
// Revision Number
423
//
424
 
425
#define EFI_PXE_BASE_CODE_CALLBACK_INTERFACE_REVISION   0x00010000
426
 
427
INTERFACE_DECL(_EFI_PXE_BASE_CODE_CALLBACK);
428
 
429
typedef enum {
430
    EFI_PXE_BASE_CODE_FUNCTION_FIRST,
431
    EFI_PXE_BASE_CODE_FUNCTION_DHCP,
432
    EFI_PXE_BASE_CODE_FUNCTION_DISCOVER,
433
    EFI_PXE_BASE_CODE_FUNCTION_MTFTP,
434
    EFI_PXE_BASE_CODE_FUNCTION_UDP_WRITE,
435
    EFI_PXE_BASE_CODE_FUNCTION_UDP_READ,
436
    EFI_PXE_BASE_CODE_FUNCTION_ARP,
437
    EFI_PXE_BASE_CODE_FUNCTION_IGMP,
438
    EFI_PXE_BASE_CODE_PXE_FUNCTION_LAST
439
} EFI_PXE_BASE_CODE_FUNCTION;
440
 
441
typedef enum {
442
    EFI_PXE_BASE_CODE_CALLBACK_STATUS_FIRST,
443
    EFI_PXE_BASE_CODE_CALLBACK_STATUS_CONTINUE,
444
    EFI_PXE_BASE_CODE_CALLBACK_STATUS_ABORT,
445
    EFI_PXE_BASE_CODE_CALLBACK_STATUS_LAST
446
} EFI_PXE_BASE_CODE_CALLBACK_STATUS;
447
 
448
typedef
449
EFI_PXE_BASE_CODE_CALLBACK_STATUS
450
(EFIAPI *EFI_PXE_CALLBACK) (
451
    IN struct _EFI_PXE_BASE_CODE_CALLBACK   *This,
452
    IN EFI_PXE_BASE_CODE_FUNCTION           Function,
453
    IN BOOLEAN                              Received,
454
    IN UINT32                               PacketLen,
455
    IN EFI_PXE_BASE_CODE_PACKET             *Packet     OPTIONAL
456
    );
457
 
458
typedef struct _EFI_PXE_BASE_CODE_CALLBACK {
459
    UINT64                      Revision;
460
    EFI_PXE_CALLBACK            Callback;
461
} EFI_PXE_BASE_CODE_CALLBACK;
462
 
463
#endif /* _EFIPXEBC_H */