This source file includes following definitions.
- SEGOFF16_t
- SEGDESC_t
- pxenv_t
- pxe_t
- t_PXENV_START_UNDI
- t_PXENV_UNDI_STARTUP
- t_PXENV_UNDI_CLEANUP
- t_PXENV_UNDI_INITALIZE
- t_PXENV_UNDI_MCAST_ADDRESS
- t_PXENV_UNDI_RESET
- t_PXENV_UNDI_SHUTDOWN
- t_PXENV_UNDI_OPEN
- t_PXENV_UNDI_CLOSE
- t_PXENV_UNDI_TRANSMIT
- t_PXENV_UNDI_TBD
- t_PXENV_UNDI_SET_MCAST_ADDR
- t_PXENV_UNDI_SET_STATION_ADDR
- t_PXENV_UNDI_SET_PACKET_FILTER
- t_PXENV_UNDI_GET_INFORMATION
- t_PXENV_UNDI_GET_STATISTICS
- t_PXENV_UNDI_CLEAR_STATISTICS
- t_PXENV_UNDI_INITIATE_DIAGS
- t_PXENV_UNDI_FORCE_INTERRUPT
- t_PXENV_UNDI_GET_MCAST_ADDR
- t_PXENV_UNDI_GET_NIC_TYPE
- t_PXENV_UNDI_GET_NDIS_INFO
- t_PXENV_UNDI_ISR
- t_PXENV_STOP_UNDI
- t_PXENV_TFTP_OPEN
- t_PXENV_TFTP_CLOSE
- t_PXENV_TFTP_READ
- t_PXENV_TFTP_READ_FILE
- t_PXENV_TFTP_GET_FSIZE
- t_PXENV_UDP_OPEN
- t_PXENV_UDP_CLOSE
- t_PXENV_UDP_READ
- t_PXENV_UDP_WRITE
- t_PXENV_UNLOAD_STACK
- t_PXENV_GET_CACHED_INFO
- BOOTPLAYER
- t_PXENV_START_BASE
- t_PXENV_STOP_BASE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 #define S_SIZE(s) s, sizeof(s) - 1
40
41 #define IP_STR "%d.%d.%d.%d"
42 #define IP_ARGS(ip) \
43 (int)(ip >> 24) & 0xff, (int)(ip >> 16) & 0xff, \
44 (int)(ip >> 8) & 0xff, (int)ip & 0xff
45
46 #define MAC_STR "%02x:%02x:%02x:%02x:%02x:%02x"
47 #define MAC_ARGS(mac) \
48 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]
49
50 typedef struct {
51 uint16_t offset;
52 uint16_t segment;
53 } SEGOFF16_t __attribute__((__packed__));
54
55 typedef struct {
56 uint16_t Seg_Addr;
57 uint32_t Phy_Addr;
58 uint16_t Seg_Size;
59 } SEGDESC_t __attribute__((__packed__));
60
61 typedef uint16_t SEGSEL_t;
62 typedef uint16_t PXENV_STATUS_t;
63 typedef uint32_t IP4_t;
64 typedef uint32_t ADDR32_t;
65 typedef uint16_t UDP_PORT_t;
66
67 #define MAC_ADDR_LEN 16
68 typedef uint8_t MAC_ADDR[MAC_ADDR_LEN];
69
70
71 typedef struct {
72 uint8_t Signature[6];
73 uint16_t Version;
74 uint8_t Length;
75 uint8_t Checksum;
76 SEGOFF16_t RMEntry;
77
78 uint32_t PMOffset;
79 SEGSEL_t PMSelector;
80 SEGSEL_t StackSeg;
81 uint16_t StackSize;
82 SEGSEL_t BC_CodeSeg;
83 uint16_t BC_CodeSize;
84 SEGSEL_t BC_DataSeg;
85 uint16_t BC_DataSize;
86 SEGSEL_t UNDIDataSeg;
87 uint16_t UNDIDataSize;
88 SEGSEL_t UNDICodeSeg;
89 uint16_t UNDICodeSize;
90 SEGOFF16_t PXEPtr;
91
92 } __attribute__((__packed__)) pxenv_t;
93
94
95 typedef struct {
96 uint8_t Signature[4];
97 uint8_t StructLength;
98 uint8_t StructCksum;
99 uint8_t StructRev;
100 uint8_t reserved_1;
101 SEGOFF16_t UNDIROMID;
102 SEGOFF16_t BaseROMID;
103 SEGOFF16_t EntryPointSP;
104 SEGOFF16_t EntryPointESP;
105 SEGOFF16_t StatusCallout;
106 uint8_t reserved_2;
107 uint8_t SegDescCn;
108 SEGSEL_t FirstSelector;
109 SEGDESC_t Stack;
110 SEGDESC_t UNDIData;
111 SEGDESC_t UNDICode;
112 SEGDESC_t UNDICodeWrite;
113 SEGDESC_t BC_Data;
114 SEGDESC_t BC_Code;
115 SEGDESC_t BC_CodeWrite;
116 } __attribute__((__packed__)) pxe_t;
117
118 #define PXENV_START_UNDI 0x0000
119 typedef struct {
120 PXENV_STATUS_t Status;
121 uint16_t ax;
122 uint16_t bx;
123 uint16_t dx;
124 uint16_t di;
125 uint16_t es;
126 } __attribute__((__packed__)) t_PXENV_START_UNDI;
127
128 #define PXENV_UNDI_STARTUP 0x0001
129 typedef struct {
130 PXENV_STATUS_t Status;
131 } __attribute__((__packed__)) t_PXENV_UNDI_STARTUP;
132
133 #define PXENV_UNDI_CLEANUP 0x0002
134 typedef struct {
135 PXENV_STATUS_t Status;
136 } __attribute__((__packed__)) t_PXENV_UNDI_CLEANUP;
137
138 #define PXENV_UNDI_INITIALIZE 0x0003
139 typedef struct {
140 PXENV_STATUS_t Status;
141 ADDR32_t ProtocolIni;
142
143 uint8_t reserved[8];
144 } __attribute__((__packed__)) t_PXENV_UNDI_INITALIZE;
145
146
147 #define MAXNUM_MCADDR 8
148 typedef struct {
149 PXENV_STATUS_t Status;
150 uint16_t MCastAddrCount;
151 MAC_ADDR McastAddr[MAXNUM_MCADDR];
152 } __attribute__((__packed__)) t_PXENV_UNDI_MCAST_ADDRESS;
153
154 #define PXENV_UNDI_RESET_ADAPTER 0x0004
155 typedef struct {
156 PXENV_STATUS_t Status;
157 t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf;
158 } __attribute__((__packed__)) t_PXENV_UNDI_RESET;
159
160 #define PXENV_UNDI_SHUTDOWN 0x0005
161 typedef struct {
162 PXENV_STATUS_t Status;
163 } __attribute__((__packed__)) t_PXENV_UNDI_SHUTDOWN;
164
165 #define PXENV_UNDI_OPEN 0x0006
166 typedef struct {
167 PXENV_STATUS_t Status;
168 uint16_t OpenFlag;
169 uint16_t PktFilter;
170 # define FLTR_DIRECTED 0x0001
171 # define FLTR_BRDCST 0x0002
172 # define FLTR_PRMSCS 0x0003
173 # define FLTR_SRC_RTG 0x0004
174
175 t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf;
176 } __attribute__((__packed__)) t_PXENV_UNDI_OPEN;
177
178 #define PXENV_UNDI_CLOSE 0x0007
179 typedef struct {
180 PXENV_STATUS_t Status;
181 } __attribute__((__packed__)) t_PXENV_UNDI_CLOSE;
182
183 #define PXENV_UNDI_TRANSMIT 0x0008
184 typedef struct {
185 PXENV_STATUS_t Status;
186 uint8_t Protocol;
187 # define P_UNKNOWN 0
188 # define P_IP 1
189 # define P_ARP 2
190 # define P_RARP 3
191
192 uint8_t XmitFlag;
193 # define XMT_DESTADDR 0x0000
194 # define XMT_BROADCAST 0x0001
195
196 SEGOFF16_t DestAddr;
197 SEGOFF16_t TBD;
198 uint32_t Reserved[2];
199 } __attribute__((__packed__)) t_PXENV_UNDI_TRANSMIT;
200
201 #define MAX_DATA_BLKS 8
202 typedef struct {
203 uint16_t ImmedLength;
204 SEGOFF16_t Xmit;
205 uint16_t DataBlkCount;
206 struct DataBlk {
207 uint8_t TDPtrType;
208 uint8_t TDRsvdByte;
209 uint16_t TDDataLen;
210 SEGOFF16_t TDDataPtr;
211 } DataBlock[MAX_DATA_BLKS];
212 } __attribute__((__packed__)) t_PXENV_UNDI_TBD;
213
214 #define PXENV_UNDI_SET_MCAST_ADDRESS 0x0009
215 typedef struct {
216 PXENV_STATUS_t Status;
217 t_PXENV_UNDI_MCAST_ADDRESS R_Mcast_Buf;
218 } __attribute__((__packed__)) t_PXENV_UNDI_SET_MCAST_ADDR;
219
220 #define PXENV_UNDI_SET_STATION_ADDRESS 0x000A
221 typedef struct {
222 PXENV_STATUS_t Status;
223 MAC_ADDR StationAddress;
224 } __attribute__((__packed__)) t_PXENV_UNDI_SET_STATION_ADDR;
225
226 #define PXENV_UNDI_SET_PACKET_FILTER 0x000B
227 typedef struct {
228 PXENV_STATUS_t Status;
229 uint8_t filter;
230 } __attribute__((__packed__)) t_PXENV_UNDI_SET_PACKET_FILTER;
231
232 #define PXENV_UNDI_GET_INFORMATION 0x000C
233 typedef struct {
234 PXENV_STATUS_t Status;
235 uint16_t BaseIo;
236 uint16_t IntNumber;
237 uint16_t MaxTranUnit;
238
239 uint16_t HwType;
240
241 # define ETHER_TYPE 1
242 # define EXP_ETHER_TYPE 2
243 # define IEEE_TYPE 6
244 # define ARCNET_TYPE 7
245
246 uint16_t HwAddrLen;
247 MAC_ADDR CurrentNodeAddress;
248 MAC_ADDR PermNodeAddress;
249 SEGSEL_t ROMAddress;
250
251 uint16_t RxBufCt;
252 uint16_t TxBufCt;
253 } __attribute__((__packed__)) t_PXENV_UNDI_GET_INFORMATION;
254
255 #define PXENV_UNDI_GET_STATISTICS 0x000D
256 typedef struct {
257 PXENV_STATUS_t Status;
258 uint32_t XmitGoodFrames;
259
260 uint32_t RcvGoodFrames;
261
262 uint32_t RcvCRCErrors;
263
264 uint32_t RcvResourceErrors;
265 } __attribute__((__packed__)) t_PXENV_UNDI_GET_STATISTICS;
266
267 #define PXENV_UNDI_CLEAR_STATISTICS 0x000E
268 typedef struct {
269 PXENV_STATUS_t Status;
270 } __attribute__((__packed__)) t_PXENV_UNDI_CLEAR_STATISTICS;
271
272 #define PXENV_UNDI_INITIATE_DIAGS 0x000F
273 typedef struct {
274 PXENV_STATUS_t Status;
275 } __attribute__((__packed__)) t_PXENV_UNDI_INITIATE_DIAGS;
276
277 #define PXENV_UNDI_FORCE_INTERRUPT 0x0010
278 typedef struct {
279 PXENV_STATUS_t Status;
280 } __attribute__((__packed__)) t_PXENV_UNDI_FORCE_INTERRUPT;
281
282 #define PXENV_UNDI_GET_MCAST_ADDRESS 0x0011
283 typedef struct {
284 PXENV_STATUS_t Status;
285 IP4_t InetAddr;
286 MAC_ADDR MediaAddr;
287 } __attribute__((__packed__)) t_PXENV_UNDI_GET_MCAST_ADDR;
288
289 #define PXENV_UNDI_GET_NIC_TYPE 0x0012
290 typedef struct {
291 PXENV_STATUS_t Status;
292 uint8_t NicType;
293 # define PCI_NIC 2
294 # define PnP_NIC 3
295 # define CardBus_NIC 4
296
297 union {
298 struct {
299 uint16_t Vendor_ID;
300 uint16_t Dev_ID;
301 uint8_t Base_Class;
302 uint8_t Sub_Class;
303 uint8_t Prog_Intf;
304 uint8_t Rev;
305 uint16_t BusDevFunc;
306 uint16_t SubVendor_ID;
307 uint16_t SubDevice_ID;
308 } pci, cardbus;
309 struct {
310 uint32_t EISA_Dev_ID;
311 uint8_t Base_Class;
312 uint8_t Sub_Class;
313 uint8_t Prog_Intf;
314 uint16_t CardSelNum;
315 } pnp;
316 } info;
317 } __attribute__((__packed__)) t_PXENV_UNDI_GET_NIC_TYPE;
318
319 #define PXENV_UNDI_GET_IFACE_INFO 0x0013
320 typedef struct {
321 PXENV_STATUS_t Status;
322 uint8_t IfaceType[16];
323 uint32_t LinkSpeed;
324 uint32_t ServiceFlags;
325 uint32_t Reserved[4];
326 } __attribute__((__packed__)) t_PXENV_UNDI_GET_NDIS_INFO;
327
328 #define PXENV_UNDI_ISR 0x0014
329 typedef struct {
330 PXENV_STATUS_t Status;
331 uint16_t FuncFlag;
332 uint16_t BufferLength;
333 uint16_t FrameLength;
334
335 uint16_t FrameHeaderLength;
336
337 SEGOFF16_t Frame;
338 uint8_t ProtType;
339 uint8_t PktType;
340 # define PXENV_UNDI_ISR_IN_START 1
341 # define PXENV_UNDI_ISR_IN_PROCESS 2
342 # define PXENV_UNDI_ISR_IN_GET_NEXT 3
343
344
345 # define PXENV_UNDI_ISR_OUT_OURS 0
346 # define PXENV_UNDI_ISR_OUT_NOT_OUTS 1
347
348
349
350
351
352 # define PXENV_UNDI_ISR_OUT_DONE 0
353 # define PXENV_UNDI_ISR_OUT_TRANSMIT 2
354 # define PXENV_UNDI_ISR_OUT_RECIEVE 3
355 # define PXENV_UNDI_ISR_OUT_BUSY 4
356 } __attribute__((__packed__)) t_PXENV_UNDI_ISR;
357
358 #define PXENV_STOP_UNDI 0x0015
359 typedef struct {
360 PXENV_STATUS_t Status;
361 } __attribute__((__packed__)) t_PXENV_STOP_UNDI;
362
363 #define PXENV_TFTP_OPEN 0x0020
364 typedef struct {
365 PXENV_STATUS_t Status;
366 IP4_t ServerIPAddress;
367 IP4_t GatewayIPAddress;
368 uint8_t FileName[128];
369 UDP_PORT_t TFTPPort;
370 uint16_t PacketSize;
371 } __attribute__((__packed__)) t_PXENV_TFTP_OPEN;
372
373 #define PXENV_TFTP_CLOSE 0x0021
374 typedef struct {
375 PXENV_STATUS_t Status;
376 } __attribute__((__packed__)) t_PXENV_TFTP_CLOSE;
377
378 #define PXENV_TFTP_READ 0x0022
379 typedef struct {
380 PXENV_STATUS_t Status;
381 uint16_t PacketNumber;
382 uint16_t BufferSize;
383 SEGOFF16_t Buffer;
384 } __attribute__((__packed__)) t_PXENV_TFTP_READ;
385
386 #define PXENV_TFTP_READ_FILE 0x0023
387 typedef struct {
388 PXENV_STATUS_t Status;
389 uint8_t FileName[128];
390 uint32_t BufferSize;
391 ADDR32_t Buffer;
392 IP4_t ServerIPAddress;
393 IP4_t GatewayIPAddress;
394 IP4_t McastIPAddress;
395 UDP_PORT_t TFTPClntPort;
396 UDP_PORT_t TFTPSrvPort;
397 uint16_t TFTPOpenTimeOut;
398 uint16_t TFTPReopenDelay;
399 } __attribute__((__packed__)) t_PXENV_TFTP_READ_FILE;
400
401 #define PXENV_TFTP_GET_FSIZE 0x0025
402 typedef struct {
403 PXENV_STATUS_t Status;
404 IP4_t ServerIPAddress;
405 IP4_t GatewayIPAddress;
406 uint8_t FileName[128];
407 uint32_t FileSize;
408 } __attribute__((__packed__)) t_PXENV_TFTP_GET_FSIZE;
409
410 #define PXENV_UDP_OPEN 0x0030
411 typedef struct {
412 PXENV_STATUS_t status;
413 IP4_t src_ip;
414 } __attribute__((__packed__)) t_PXENV_UDP_OPEN;
415
416 #define PXENV_UDP_CLOSE 0x0031
417 typedef struct {
418 PXENV_STATUS_t status;
419 } __attribute__((__packed__)) t_PXENV_UDP_CLOSE;
420
421 #define PXENV_UDP_READ 0x0032
422 typedef struct {
423 PXENV_STATUS_t status;
424 IP4_t src_ip;
425 IP4_t dest_ip;
426
427 UDP_PORT_t s_port;
428 UDP_PORT_t d_port;
429
430 uint16_t buffer_size;
431 SEGOFF16_t buffer;
432 } __attribute__((__packed__)) t_PXENV_UDP_READ;
433
434 #define PXENV_UDP_WRITE 0x0033
435 typedef struct {
436 PXENV_STATUS_t status;
437 IP4_t ip;
438 IP4_t gw;
439 UDP_PORT_t src_port;
440 UDP_PORT_t dst_port;
441 uint16_t buffer_size;
442 SEGOFF16_t buffer;
443 } __attribute__((__packed__)) t_PXENV_UDP_WRITE;
444
445 #define PXENV_UNLOAD_STACK 0x0070
446 typedef struct {
447 PXENV_STATUS_t Status;
448 uint8_t reserved[10];
449 } __attribute__((__packed__)) t_PXENV_UNLOAD_STACK;
450
451
452 #define PXENV_GET_CACHED_INFO 0x0071
453 typedef struct {
454 PXENV_STATUS_t Status;
455 uint16_t PacketType;
456 # define PXENV_PACKET_TYPE_DHCP_DISCOVER 1
457 # define PXENV_PACKET_TYPE_DHCP_ACK 2
458 # define PXENV_PACKET_TYPE_CACHED_REPLY 3
459 uint16_t BufferSize;
460
461 SEGOFF16_t Buffer;
462 uint16_t BufferLimit;
463 } __attribute__((__packed__)) t_PXENV_GET_CACHED_INFO;
464
465
466
467
468
469
470 typedef struct {
471 uint8_t opcode;
472 # define BOOTP_REQ 1
473 # define BOOTP_REP 2
474 uint8_t Hardware;
475 uint8_t Hardlen;
476 uint8_t Gatehops;
477 uint32_t ident;
478 uint16_t seconds;
479
480 uint16_t Flags;
481
482 # define BOOTP_BCAST 0x8000
483 IP4_t cip;
484 IP4_t yip;
485 IP4_t sip;
486 IP4_t gip;
487 MAC_ADDR CAddr;
488 uint8_t Sname[64];
489 uint8_t bootfile[128];
490 union {
491 # if 1
492 # define BOOTP_DHCPVEND 1024
493
494 # else
495 # define BOOTP_DHCPVEND 312
496
497 # endif
498 uint8_t d[BOOTP_DHCPVEND];
499
500 struct {
501 uint8_t magic[4];
502 # ifndef VM_RFC1048
503 # define VM_RFC1048 0x63825363L
504 # endif
505 uint32_t flags;
506 uint8_t pad[56];
507
508
509 } v;
510 } vendor;
511 } __attribute__((__packed__)) BOOTPLAYER;
512
513 #define PXENV_RESTART_TFTP 0x0073
514 #define t_PXENV_RESTART_TFTP t_PXENV_TFTP_READ_FILE
515
516 #define PXENV_START_BASE 0x0075
517 typedef struct {
518 PXENV_STATUS_t Status;
519 } __attribute__((__packed__)) t_PXENV_START_BASE;
520
521 #define PXENV_STOP_BASE 0x0076
522 typedef struct {
523 PXENV_STATUS_t Status;
524 } __attribute__((__packed__)) t_PXENV_STOP_BASE;
525
526 #define PXENV_STATUS_SUCCESS 0
527 #define PXENV_STATUS_FAILURE 1
528