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