8 #define BOOT_FIRST BOOT_NIC
11 #define BOOT_SECOND BOOT_NOTHING
14 #define BOOT_THIRD BOOT_NOTHING
17 #define DEFAULT_BOOT_ORDER ( \
18 (BOOT_FIRST << (0*BOOT_BITS)) | \
19 (BOOT_SECOND << (1*BOOT_BITS)) | \
20 (BOOT_THIRD << (2*BOOT_BITS)) | \
21 (BOOT_NOTHING << (3*BOOT_BITS)) | \
25 #define DEFAULT_BOOT_INDEX BOOT_INDEX
27 #define DEFAULT_BOOT_INDEX 0
30 #if !defined(TAGGED_IMAGE) && !defined(AOUT_IMAGE) && !defined(ELF_IMAGE) && !defined(ELF64_IMAGE) && !defined(COFF_IMAGE) && !defined(RAW_IMAGE)
31 #define TAGGED_IMAGE /* choose at least one */
35 #define K_EOF '\04' /* Ctrl-D */
36 #define K_INTR '\03' /* Ctrl-C */
38 /* Edit this to change the path to hostspecific kernel image
39 kernel.<client_ip_address> in RARP boot */
40 #ifndef DEFAULT_KERNELPATH
41 #define DEFAULT_KERNELPATH "/tftpboot/kernel.%@"
45 #undef DEFAULT_BOOTFILE
46 #ifndef PXENFSROOTPATH
47 #define PXENFSROOTPATH ""
49 #define DEFAULT_BOOTFILE PXENFSROOTPATH "/boot/pxeboot"
52 #if !defined(DOWNLOAD_PROTO_TFTP) && !defined(DOWNLOAD_PROTO_NFS) && !defined(DOWNLOAD_PROTO_SLAM) && !defined(DOWNLOAD_PROTO_TFTM) && !defined(DOWNLOAD_PROTO_DISK) && !defined(DOWNLOAD_PROTO_HTTP)
53 #error No download protocol defined!
56 #ifndef MAX_TFTP_RETRIES
57 #define MAX_TFTP_RETRIES 20
60 #ifndef MAX_BOOTP_RETRIES
61 #define MAX_BOOTP_RETRIES 20
64 #define MAX_BOOTP_EXTLEN (ETH_MAX_MTU-sizeof(struct bootpip_t))
66 #ifndef MAX_ARP_RETRIES
67 #define MAX_ARP_RETRIES 20
70 #ifndef MAX_RPC_RETRIES
71 #define MAX_RPC_RETRIES 20
74 /* Link configuration time in tenths of a second */
75 #ifndef VALID_LINK_TIMEOUT
76 #define VALID_LINK_TIMEOUT 100 /* 10.0 seconds */
79 /* Inter-packet retry in ticks */
81 #define TIMEOUT (10*TICKS_PER_SEC)
85 #define BOOTP_TIMEOUT (2*TICKS_PER_SEC)
88 /* Max interval between IGMP packets */
89 #define IGMP_INTERVAL (10*TICKS_PER_SEC)
90 #define IGMPv1_ROUTER_PRESENT_TIMEOUT (400*TICKS_PER_SEC)
92 /* These settings have sense only if compiled with -DCONGESTED */
93 /* total retransmission timeout in ticks */
94 #define TFTP_TIMEOUT (30*TICKS_PER_SEC)
95 /* packet retransmission timeout in ticks */
97 #define TFTP_REXMT (3*TICKS_PER_SEC)
99 #define TFTP_REXMT TIMEOUT
103 #define NULL ((void *)0)
106 #include "if_ether.h"
109 ARP_CLIENT, ARP_SERVER, ARP_GATEWAY,
119 #define IGMP_SERVER 0
120 #define MAX_IGMP IGMP_SERVER+1
122 #define RARP_REQUEST 3
127 #define MULTICAST_MASK 0xF0000000
128 #define MULTICAST_NETWORK 0xE0000000
130 /* Helper macros used to identify when DHCP options are valid/invalid in/outside of encapsulation */
131 #define NON_ENCAP_OPT in_encapsulated_options == 0 &&
132 #ifdef ALLOW_ONLY_ENCAPSULATED
133 #define ENCAP_OPT in_encapsulated_options == 1 &&
157 #define KERNEL_BUF (BOOTP_DATA_ADDR->bootp_reply.bp_file)
159 #define FLOPPY_BOOT_LOCATION 0x7c00
162 unsigned short rom_segment;
163 unsigned short rom_length;
166 extern inline int rom_address_ok(struct rom_info *rom, int assigned_rom_segment)
168 return (assigned_rom_segment < 0xC000
169 || assigned_rom_segment == rom->rom_segment);
172 /* Define a type for passing info to a loaded program */
174 uint8_t major, minor; /* Version */
175 uint16_t flags; /* Bit flags */
178 /***************************************************************************
180 ***************************************************************************/
183 extern void console_init(void);
185 extern int loadkernel P((const char *fname));
186 extern char as_main_program;
188 extern void rx_qdrain P((void));
189 extern int tftp P((const char *name, int (*)(unsigned char *, unsigned int, unsigned int, int)));
190 extern int tftp_block P((struct tftpreq_info_t *, struct tftpblk_info_t *));
191 extern int ip_transmit P((int len, const void *buf));
192 extern void build_ip_hdr P((unsigned long destip, int ttl, int protocol,
193 int option_len, int len, const void *buf));
194 extern void build_udp_hdr P((unsigned long destip,
195 unsigned int srcsock, unsigned int destsock, int ttl,
196 int len, const void *buf));
197 extern int udp_transmit P((unsigned long destip, unsigned int srcsock,
198 unsigned int destsock, int len, const void *buf));
199 extern int tcp_transmit(unsigned long destip, unsigned int srcsock,
200 unsigned int destsock, long send_seq, long recv_seq,
201 int window, int flags, int len, const void *buf);
202 int tcp_reset(struct iphdr *ip);
203 typedef int (*reply_t)(int ival, void *ptr, unsigned short ptype, struct iphdr *ip, struct udphdr *udp, struct tcphdr *tcp);
204 extern int await_reply P((reply_t reply, int ival, void *ptr, long timeout));
205 extern int decode_rfc1533 P((unsigned char *, unsigned int, unsigned int, int));
206 extern void join_group(int slot, unsigned long group);
207 extern void leave_group(int slot);
208 #define RAND_MAX 2147483647L
209 extern uint16_t ipchksum P((const void *ip, unsigned long len));
210 extern uint16_t add_ipchksums P((unsigned long offset, uint16_t sum, uint16_t new));
211 extern int32_t random P((void));
212 extern long rfc2131_sleep_interval P((long base, int exp));
213 extern long rfc1112_sleep_interval P((long base, int exp));
214 #ifndef DOWNLOAD_PROTO_TFTP
215 #define tftp(fname, load_block) 0
217 extern void cleanup P((void));
220 extern void rpc_init(void);
221 extern int nfs P((const char *name, int (*)(unsigned char *, unsigned int, unsigned int, int)));
222 extern void nfs_umountall P((int));
225 extern int url_slam P((const char *name, int (*fnc)(unsigned char *, unsigned int, unsigned int, int)));
228 extern int url_tftm P((const char *name, int (*fnc)(unsigned char *, unsigned int, unsigned int, int)));
231 extern void print_config(void);
233 /* isa_probe.c and pci_probe.c */
235 extern void isa_enumerate(void);
236 extern int isa_probe(struct dev *, const char *);
237 extern void pci_enumerate(void);
238 extern int pci_probe(struct dev *, const char *);
241 extern void init_heap(void);
242 extern void *allot(size_t size);
243 void forget(void *ptr);
244 extern void *allot2(size_t size, uint32_t mask);
245 void forget2(void *ptr);
246 /* Physical address of the heap */
247 extern size_t heap_ptr, heap_top, heap_bot;
250 /* Be careful with sector_t it is an unsigned long long on x86 */
251 typedef uint64_t sector_t;
252 typedef sector_t (*os_download_t)(unsigned char *data, unsigned int len, int eof);
253 extern os_download_t probe_image(unsigned char *data, unsigned int len);
254 extern int load_block P((unsigned char *, unsigned int, unsigned int, int ));
257 extern void twiddle P((void));
258 extern void sleep P((int secs));
259 extern void interruptible_sleep P((int secs));
260 extern void poll_interruptions P((void));
261 extern int strcasecmp P((const char *a, const char *b));
262 extern char *substr P((const char *a, const char *b));
263 extern unsigned long strtoul P((const char *p, const char **, int base));
264 extern void printf P((const char *, ...));
265 extern int sprintf P((char *, const char *, ...));
266 extern int inet_aton P((const char *p, in_addr *i));
269 extern uint32_t get_free_base_memory ( void );
270 extern void allot_real_mode_stack ( void );
271 extern void forget_real_mode_stack ( void );
272 extern void * allot_base_memory ( size_t );
273 extern void forget_base_memory ( void*, size_t );
274 extern void free_unused_base_memory ( void );
275 extern void forget_prefix_base_memory ( void );
276 extern void forget_runtime_base_memory ( uint32_t old_addr );
278 extern unsigned long get_boot_order(unsigned long order, unsigned *index);
279 extern void disk_init P((void));
280 extern unsigned int pcbios_disk_read P((int drv,int c,int h,int s,char *buf));
283 struct os_entry_regs {
284 /* Be careful changing this structure
285 * as it is used by assembly language code.
287 uint32_t edi; /* 0 */
288 uint32_t esi; /* 4 */
289 uint32_t ebp; /* 8 */
290 uint32_t esp; /* 12 */
291 uint32_t ebx; /* 16 */
292 uint32_t edx; /* 20 */
293 uint32_t ecx; /* 24 */
294 uint32_t eax; /* 28 */
296 uint32_t saved_ebp; /* 32 */
297 uint32_t saved_esi; /* 36 */
298 uint32_t saved_edi; /* 40 */
299 uint32_t saved_ebx; /* 44 */
300 uint32_t saved_eip; /* 48 */
301 uint32_t saved_esp; /* 52 */
304 /* Be careful changing this structure
305 * as it is used by assembly language code.
307 uint32_t edi; /* 0 */
308 uint32_t esi; /* 4 */
309 uint32_t ebp; /* 8 */
310 uint32_t esp; /* 12 */
311 uint32_t ebx; /* 16 */
312 uint32_t edx; /* 20 */
313 uint32_t ecx; /* 24 */
314 uint32_t eax; /* 28 */
316 extern struct os_entry_regs os_regs;
317 extern struct regs initial_regs;
318 extern int xstart32(unsigned long entry_point, ...);
319 extern int xstart_lm(unsigned long entry_point, unsigned long params);
320 extern void xend32 P((void));
321 struct Elf_Bhdr *prepare_boot_params(void *header);
322 extern int elf_start(unsigned long machine, unsigned long entry, unsigned long params);
323 extern unsigned long currticks P((void));
324 extern void exit P((int status));
326 extern char _prefix_copy[512];
327 extern uint32_t image_basemem;
330 extern int serial_getc P((void));
331 extern void serial_putc P((int));
332 extern int serial_ischar P((void));
333 extern int serial_init P((void));
334 extern void serial_fini P((void));
337 extern int bootdisk P((int dev,int part));
339 /***************************************************************************
341 ***************************************************************************/
343 extern struct rom_info rom;
344 extern char *hostname;
345 extern int hostnamelen;
346 extern jmp_buf restart_etherboot;
348 extern struct arptable_t arptable[MAX_ARP];
349 extern struct igmptable_t igmptable[MAX_IGMP];
351 extern int menutmo,menudefault;
352 extern unsigned char *defparams;
353 extern int defparams_max;
356 extern unsigned char *motd[RFC1533_VENDOR_NUMOFMOTD];
358 extern struct bootpd_t bootp_data;
359 #define BOOTP_DATA_ADDR (&bootp_data)
360 extern unsigned char *end_of_rfc1533;
362 extern int freebsd_howto;
363 #define FREEBSD_KERNEL_ENV_SIZE 256
364 extern char freebsd_kernel_env[FREEBSD_KERNEL_ENV_SIZE];
371 /* created by linker */
372 extern char _virt_start[], _text[], _etext[], _text16[], _etext16[];
373 extern char _data[], _edata[], _bss[], _ebss[], _end[];
382 #endif /* ETHERBOOT_H */