blob: 3d0df44b0d98f5612e913bf0ac6d79705cca7b7a [file] [log] [blame] [raw]
#ifndef GRUB_H
#define GRUB_H
#include "osdep.h"
#include "byteswap.h"
#include "in.h"
#include "ip.h"
#include "udp.h"
#include "if_ether.h"
#include "latch.h"
#include "io.h"
#include "nic.h"
#include <shared.h>
#define K_ESC '\033'
#define K_EOF '\04' /* Ctrl-D */
#define K_INTR '\03' /* Ctrl-C */
#ifndef MAX_RPC_RETRIES
#define MAX_RPC_RETRIES 20
#endif
/* Inter-packet retry in ticks */
#ifndef TIMEOUT
#define TIMEOUT (10*TICKS_PER_SEC)
#endif
#ifndef NULL
#define NULL ((void *)0)
#endif
#define ARP_CLIENT 0
#define ARP_SERVER 1
#define ARP_GATEWAY 2
#define MAX_ARP ARP_GATEWAY+1
#define IGMP_SERVER 0
#define MAX_IGMP IGMP_SERVER+1
#define RARP_REQUEST 3
#define RARP_REPLY 4
#define MULTICAST_MASK 0xF0000000
#define MULTICAST_NETWORK 0xE0000000
struct arptable_t {
in_addr ipaddr;
uint8_t node[6];
};
struct igmptable_t {
in_addr group;
unsigned long time;
};
#define KERNEL_BUF (BOOTP_DATA_ADDR->bootp_reply.bp_file)
#define FLOPPY_BOOT_LOCATION 0x7c00
/* Must match offsets in loader.S */
#define ROM_SEGMENT 0x1fa
#define ROM_LENGTH 0x1fc
#define ROM_INFO_LOCATION (FLOPPY_BOOT_LOCATION+ROM_SEGMENT)
/* at end of floppy boot block */
/* Define a type for passing info to a loaded program */
struct ebinfo {
uint8_t major, minor; /* Version */
uint16_t flags; /* Bit flags */
};
/***************************************************************************
External prototypes
***************************************************************************/
extern void rx_qdrain P((void));
extern int tftp P((const char *name, int (*)(unsigned char *, unsigned int, unsigned int, int)));
extern int ip_transmit P((int len, const void *buf));
extern void build_ip_hdr P((unsigned long destip, int ttl, int protocol,
int option_len, int len, const void *buf));
extern void build_udp_hdr P((unsigned long destip,
unsigned int srcsock, unsigned int destsock, int ttl,
int len, const void *buf));
extern int udp_transmit P((unsigned long destip, unsigned int srcsock,
unsigned int destsock, int len, const void *buf));
typedef int (*reply_t)(int ival, void *ptr, unsigned short ptype, struct iphdr *ip, struct udphdr *udp);
extern int await_reply P((reply_t reply, int ival, void *ptr, long timeout));
extern int decode_rfc1533 P((unsigned char *, unsigned int, unsigned int, int));
extern void join_group(int slot, unsigned long group);
extern void leave_group(int slot);
#define RAND_MAX 2147483647L
extern uint16_t ipchksum P((const void *ip, unsigned long len));
extern uint16_t add_ipchksums P((unsigned long offset, uint16_t sum, uint16_t new));
extern int32_t random P((void));
extern long rfc2131_sleep_interval P((long base, int exp));
extern long rfc1112_sleep_interval P((long base, int exp));
#ifndef DOWNLOAD_PROTO_TFTP
#define tftp(fname, load_block) 0
#endif
extern void cleanup P((void));
/* misc.c */
extern void twiddle P((void));
extern void sleep P((int secs));
extern void interruptible_sleep P((int secs));
extern void poll_interruptions P((void));
extern int strcasecmp P((const char *a, const char *b));
extern char *substr P((const char *a, const char *b));
extern unsigned long strtoul P((const char *p, const char **, int base));
extern void printf P((const char *, ...));
extern int sprintf P((char *, const char *, ...));
extern int inet_aton P((char *p, in_addr *i));
extern void putchar P((int));
extern int getchar P((void));
extern int iskey P((void));
extern void grub_printf(const char *, ...);
extern char config_file[128];
extern void etherboot_printf(const char *, ...);
extern int etherboot_sprintf(char *, const char *, ...);
extern int getdec(char **s);
extern void cleanup_net(void);
extern void print_network_configuration (void);
extern int ifconfig (char *, char *, char *, char *);
extern struct arptable_t arptable[MAX_ARP];
#undef printf
#undef sprintf
#define printf etherboot_printf
#define sprintf etherboot_sprintf
#ifdef DEBUG
#define EnterFunction(func) printf("Enter: " func "\n");
#define LeaveFunction(func) printf("Leave: " func "\n");
#else
#define EnterFunction(func)
#define LeaveFunction(func)
#endif
/*
* Some codes from etherboot use a level in DEBUG. Define it to be
* zero means no debug info output, that will make them silence in
* compiling. Up it as you want.
*/
#ifndef DEBUG
# define DEBUG 0
#endif
/*#define RPC_DEBUG*/
extern char *hostname;
extern int hostnamelen;
/* Whether network is ready */
extern int network_ready;
/* User aborted in await_reply if not zero */
extern int user_abort;
extern int rarp(void);
extern int grub_eth_probe(void);
extern int bootp(void);
extern int dhcp(void);
extern struct nic nic;
#endif /* GRUB_H */