efipxebc.h revision 96893
1/* $FreeBSD: head/sys/boot/efi/include/efipxebc.h 96893 2002-05-19 03:17:22Z marcel $ */
2#ifndef _EFIPXEBC_H
3#define _EFIPXEBC_H
4
5/*++
6
7Copyright (c) 1998  Intel Corporation
8
9Module Name:
10
11    efipxebc.h
12
13Abstract:
14
15    EFI PXE Base Code Protocol
16
17
18
19Revision 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
30INTERFACE_DECL(_EFI_PXE_BASE_CODE);
31
32#define DEFAULT_TTL 4
33#define DEFAULT_ToS 0
34
35/*
36 * Address definitions
37 */
38
39typedef union {
40    UINT32      Addr[4];
41    EFI_IPv4_ADDRESS    v4;
42    EFI_IPv6_ADDRESS    v6;
43} EFI_IP_ADDRESS;
44
45typedef UINT16 EFI_PXE_BASE_CODE_UDP_PORT;
46
47/*
48 * Packet definitions
49 */
50
51typedef 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
70typedef union {
71    UINT8                               Raw[1472];
72    EFI_PXE_BASE_CODE_DHCPV4_PACKET     Dhcpv4;
73} EFI_PXE_BASE_CODE_PACKET;
74
75typedef 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
91typedef 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
100typedef 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
116typedef struct {
117    EFI_IP_ADDRESS       IpAddr;
118    EFI_MAC_ADDRESS      MacAddr;
119} EFI_PXE_BASE_CODE_ARP_ENTRY;
120
121typedef 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
170typedef struct {
171    UINT16                      Type;
172    BOOLEAN                     AcceptAnyResponse;
173    UINT8                       Reserved;
174    EFI_IP_ADDRESS              IpAddr;
175} EFI_PXE_BASE_CODE_SRVLIST;
176
177typedef 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
191typedef 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
203typedef 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
218typedef 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
259typedef
260EFI_STATUS
261(EFIAPI *EFI_PXE_BASE_CODE_START) (
262    IN struct _EFI_PXE_BASE_CODE    *This,
263    IN BOOLEAN                      UseIpv6
264    );
265
266typedef
267EFI_STATUS
268(EFIAPI *EFI_PXE_BASE_CODE_STOP) (
269    IN struct _EFI_PXE_BASE_CODE    *This
270    );
271
272typedef
273EFI_STATUS
274(EFIAPI *EFI_PXE_BASE_CODE_DHCP) (
275    IN struct _EFI_PXE_BASE_CODE    *This,
276    IN BOOLEAN                      SortOffers
277    );
278
279typedef
280EFI_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
289typedef
290EFI_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
304typedef
305EFI_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
320typedef
321EFI_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
335typedef
336EFI_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
342typedef
343EFI_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
350typedef
351EFI_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
361typedef
362EFI_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
369typedef
370EFI_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
393typedef 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
423INTERFACE_DECL(_EFI_PXE_BASE_CODE_CALLBACK);
424
425typedef 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
437typedef 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
444typedef
445EFI_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
454typedef 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 */
460