272 lines · 4.8 KB · C
RawDownload
typedef struct List {	void	*next;} List; typedef struct Alarm Alarm;typedef struct Alarm {	List;	int	busy;	long	dt;	void	(*f)(Alarm*);	void	*arg;} Alarm; typedef struct Apminfo {	int haveinfo;	int ax;	int cx;	int dx;	int di;	int ebx;	int esi;} Apminfo; typedef struct Block Block;struct Block {	Block*	next;	uchar*	rp;			/* first unconsumed byte */	uchar*	wp;			/* first empty byte */	uchar*	lim;			/* 1 past the end of the buffer */	uchar*	base;			/* start of the buffer */	ulong	flag;};#define BLEN(s)	((s)->wp - (s)->rp) typedef struct IOQ IOQ;typedef struct IOQ {	uchar	buf[4096];	uchar	*in;	uchar	*out;	int	state;	int	(*getc)(IOQ*);	int	(*putc)(IOQ*, int);	void	*ptr;}; enum {	Eaddrlen	= 6,	/* next two exclude 4-byte ether CRC */	ETHERMINTU	= 60,		/* minimum transmit size */	ETHERMAXTU	= 1514,		/* maximum transmit size */	ETHERHDRSIZE	= 14,		/* size of an ethernet header */ 	MaxEther	= 6,}; typedef struct {	uchar	d[Eaddrlen];	uchar	s[Eaddrlen];	uchar	type[2];	uchar	data[1500];	uchar	crc[4];} Etherpkt; extern uchar broadcast[Eaddrlen]; typedef struct Ureg Ureg;#pragma incomplete Ureg typedef struct Segdesc {	ulong	d0;	ulong	d1;} Segdesc; typedef struct Mach {	ulong	ticks;			/* of the clock since boot time */	void	*alarm;			/* alarms bound to this clock */} Mach; extern Mach *m; #define I_MAGIC		((((4*11)+0)*11)+7)		/* intel 386 */#define S_MAGIC		(0x8000|((((4*26)+0)*26)+7))	/* amd64 */ typedef struct Exec Exec;struct	Exec{	uchar	magic[4];		/* magic number */	uchar	text[4];	 	/* size of text segment */	uchar	data[4];	 	/* size of initialized data */	uchar	bss[4];	  		/* size of uninitialized data */	uchar	syms[4];	 	/* size of symbol table */	uchar	entry[4];	 	/* entry point */	uchar	spsz[4];		/* size of sp/pc offset table */	uchar	pcsz[4];		/* size of pc/line number table */}; typedef struct {	Exec;	uvlong uvl[1];} Hdr; /* *  a parsed .ini line */#define ISAOPTLEN	32#define NISAOPT		8 typedef struct  ISAConf {	char	type[NAMELEN];	ulong	port;	ulong	irq;	ulong	mem;	ulong	size;	uchar	ea[6]; 	int	nopt;	char	opt[NISAOPT][ISAOPTLEN];} ISAConf; typedef struct Pcidev Pcidev;typedef struct PCMmap PCMmap;typedef struct PCMslot PCMslot; #define BOOTLINE	((char*)CONFADDR) enum {	MB =		(1024*1024),};#define ROUND(s, sz)	(((s)+((sz)-1))&~((sz)-1))  typedef struct Type Type;typedef struct Medium Medium;typedef struct Boot Boot; enum {					/* type */	Tnil		= 0x00, 	Tfloppy		= 0x01,	Tsd		= 0x02,	Tether		= 0x03,	Tcd		= 0x04, 	Tnoether	= 5,	Tany		= 6,}; enum {					/* name and flag */	Fnone		= 0x00, 	Nfs		= 0x00,	Ffs		= (1<<Nfs),	Nboot		= 0x01,	Fboot		= (1<<Nboot),	Nbootp		= 0x02,	Fbootp		= (1<<Nbootp),	NName		= 3, 	Fany		= Fbootp|Fboot|Ffs, 	Fini		= 0x10,	Fprobe		= 0x80,}; typedef struct Type {	int	type;	char	*devstr;	int	flag;	int	(*init)(void);	void	(*initdev)(int, char*);	void*	(*getfspart)(int, char*, int);	/* actually returns Dos* */	void	(*addconf)(int);	int	(*boot)(int, char*, Boot*);	void	(*printdevs)(int);	char**	parts;	char**	inis;	int	mask;	Medium*	media;} Type; extern void (*etherdetach)(void);extern void (*floppydetach)(void);extern void (*sddetach)(void); typedef struct Lock {	/* for ilock, iunlock */	int locked;	int spl;} Lock; enum {	/* returned by bootpass */	MORE, ENOUGH, FAIL};enum {	INITKERNEL,	READEXEC,	READ9TEXT,	READ9DATA,	READGZIP,	READEHDR,	READPHDR,	READEPAD,	READEDATA,	TRYBOOT,	TRYEBOOT,	INIT9LOAD,	READ9LOAD,	FAILED}; struct Boot {	int state; 	Hdr hdr;	char *bp;	/* base ptr */	char *wp;	/* write ptr */	char *ep;	/* end ptr */}; enum {						/* flags */	Fmem		= 0x00000001,		/* mem* valid */	Fbootdevice	= 0x00000002,		/* bootdevice valid */	Fcmdline	= 0x00000004,		/* cmdline valid */	Fmods		= 0x00000008,		/* mod* valid */	Fsyms		= 0x00000010,		/* syms[] has a.out info */	Felf		= 0x00000020,		/* syms[] has ELF info */	Fmmap		= 0x00000040,		/* mmap* valid */	Fdrives		= 0x00000080,		/* drives* valid */	Fconfigtable	= 0x00000100,		/* configtable* valid */	Fbootloadername	= 0x00000200,		/* bootloadername* valid */	Fapmtable	= 0x00000400,		/* apmtable* valid */	Fvbe		= 0x00000800,		/* vbe[] valid */}; /* * Multiboot grot. */typedef struct Mbi Mbi;struct Mbi {	u32int	flags;	u32int	memlower;	u32int	memupper;	u32int	bootdevice;	u32int	cmdline;	u32int	modscount;	u32int	modsaddr;	u32int	syms[4];	u32int	mmaplength;	u32int	mmapaddr;	u32int	driveslength;	u32int	drivesaddr;	u32int	configtable;	u32int	bootloadername;	u32int	apmtable;	u32int	vbe[6];}; typedef struct MMap MMap;struct MMap {	u32int	size;	u32int	base[2];	u32int	length[2];	u32int	type;}; extern int	debug;extern Apminfo	apm;extern char	*defaultpartition;extern int	iniread;extern int	pxe;extern int	vga;extern int	nmmap;extern MMap	mmap[];