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