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