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