1 #ifndef GRUB_H 2 #define GRUB_H 3 4 #include "osdep.h" 5 #include "byteswap.h" 6 #include "in.h" 7 #include "ip.h" 8 #include "udp.h" 9 #include "if_ether.h" 10 #include "latch.h" 11 #include "io.h" 12 #include "nic.h" 13 #include <shared.h> 14 15 #define K_ESC '\033' 16 #define K_EOF '\04' /* Ctrl-D */ 17 #define K_INTR '\03' /* Ctrl-C */ 18 19 #ifndef MAX_RPC_RETRIES 20 #define MAX_RPC_RETRIES 20 21 #endif 22 23 24 /* Inter-packet retry in ticks */ 25 #ifndef TIMEOUT 26 #define TIMEOUT (10*TICKS_PER_SEC) 27 #endif 28 29 #ifndef NULL 30 #define NULL ((void *)0) 31 #endif 32 33 34 #define ARP_CLIENT 0 35 #define ARP_SERVER 1 36 #define ARP_GATEWAY 2 37 #define MAX_ARP ARP_GATEWAY+1 38 39 #define IGMP_SERVER 0 40 #define MAX_IGMP IGMP_SERVER+1 41 42 #define RARP_REQUEST 3 43 #define RARP_REPLY 4 44 45 46 #define MULTICAST_MASK 0xF0000000 47 #define MULTICAST_NETWORK 0xE0000000 48 49 struct arptable_t { 50 in_addr ipaddr; 51 uint8_t node[6]; 52 }; 53 54 struct igmptable_t { 55 in_addr group; 56 unsigned long time; 57 }; 58 59 #define KERNEL_BUF (BOOTP_DATA_ADDR->bootp_reply.bp_file) 60 61 #define FLOPPY_BOOT_LOCATION 0x7c00 62 /* Must match offsets in loader.S */ 63 #define ROM_SEGMENT 0x1fa 64 #define ROM_LENGTH 0x1fc 65 66 #define ROM_INFO_LOCATION (FLOPPY_BOOT_LOCATION+ROM_SEGMENT) 67 /* at end of floppy boot block */ 68 69 70 71 /* Define a type for passing info to a loaded program */ 72 struct ebinfo { 73 uint8_t major, minor; /* Version */ 74 uint16_t flags; /* Bit flags */ 75 }; 76 77 /*************************************************************************** 78 External prototypes 79 ***************************************************************************/ 80 extern void rx_qdrain P((void)); 81 extern int tftp P((const char *name, int (*)(unsigned char *, unsigned int, unsigned int, int))); 82 extern int ip_transmit P((int len, const void *buf)); 83 extern void build_ip_hdr P((unsigned long destip, int ttl, int protocol, 84 int option_len, int len, const void *buf)); 85 extern void build_udp_hdr P((unsigned long destip, 86 unsigned int srcsock, unsigned int destsock, int ttl, 87 int len, const void *buf)); 88 extern int udp_transmit P((unsigned long destip, unsigned int srcsock, 89 unsigned int destsock, int len, const void *buf)); 90 typedef int (*reply_t)(int ival, void *ptr, unsigned short ptype, struct iphdr *ip, struct udphdr *udp); 91 extern int await_reply P((reply_t reply, int ival, void *ptr, long timeout)); 92 extern int decode_rfc1533 P((unsigned char *, unsigned int, unsigned int, int)); 93 extern void join_group(int slot, unsigned long group); 94 extern void leave_group(int slot); 95 #define RAND_MAX 2147483647L 96 extern uint16_t ipchksum P((const void *ip, unsigned long len)); 97 extern uint16_t add_ipchksums P((unsigned long offset, uint16_t sum, uint16_t new)); 98 extern int32_t random P((void)); 99 extern long rfc2131_sleep_interval P((long base, int exp)); 100 extern long rfc1112_sleep_interval P((long base, int exp)); 101 #ifndef DOWNLOAD_PROTO_TFTP 102 #define tftp(fname, load_block) 0 103 #endif 104 extern void cleanup P((void)); 105 106 /* misc.c */ 107 extern void twiddle P((void)); 108 extern void sleep P((int secs)); 109 extern void interruptible_sleep P((int secs)); 110 extern void poll_interruptions P((void)); 111 extern int strcasecmp P((const char *a, const char *b)); 112 extern char *substr P((const char *a, const char *b)); 113 extern unsigned long strtoul P((const char *p, const char **, int base)); 114 extern void printf P((const char *, ...)); 115 extern int sprintf P((char *, const char *, ...)); 116 extern int inet_aton P((char *p, in_addr *i)); 117 extern void putchar P((int)); 118 extern int getchar P((void)); 119 extern int iskey P((void)); 120 121 extern void grub_printf(const char *, ...); 122 extern char config_file[128]; 123 extern void etherboot_printf(const char *, ...); 124 extern int etherboot_sprintf(char *, const char *, ...); 125 extern int getdec(char **s); 126 extern void cleanup_net(void); 127 extern void print_network_configuration (void); 128 extern int ifconfig (char *, char *, char *, char *); 129 extern struct arptable_t arptable[MAX_ARP]; 130 131 #undef printf 132 #undef sprintf 133 #define printf etherboot_printf 134 #define sprintf etherboot_sprintf 135 136 #ifdef DEBUG 137 #define EnterFunction(func) printf("Enter: " func "\n"); 138 #define LeaveFunction(func) printf("Leave: " func "\n"); 139 #else 140 #define EnterFunction(func) 141 #define LeaveFunction(func) 142 #endif 143 144 /* 145 * Some codes from etherboot use a level in DEBUG. Define it to be 146 * zero means no debug info output, that will make them silence in 147 * compiling. Up it as you want. 148 */ 149 #ifndef DEBUG 150 # define DEBUG 0 151 #endif 152 153 /*#define RPC_DEBUG*/ 154 155 extern char *hostname; 156 157 extern int hostnamelen; 158 /* Whether network is ready */ 159 extern int network_ready; 160 161 /* User aborted in await_reply if not zero */ 162 extern int user_abort; 163 164 extern int rarp(void); 165 extern int grub_eth_probe(void); 166 extern int bootp(void); 167 168 extern int dhcp(void); 169 170 extern struct nic nic; 171 #endif /* GRUB_H */ 172