xref: /inferno-os/os/boot/puma/dat.h (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
1*74a4d8c2SCharles.Forsyth typedef struct Block Block;
2*74a4d8c2SCharles.Forsyth typedef struct Queue Queue;
3*74a4d8c2SCharles.Forsyth 
4*74a4d8c2SCharles.Forsyth typedef struct List {
5*74a4d8c2SCharles.Forsyth 	void	*next;
6*74a4d8c2SCharles.Forsyth } List;
7*74a4d8c2SCharles.Forsyth 
8*74a4d8c2SCharles.Forsyth typedef struct {
9*74a4d8c2SCharles.Forsyth 	int	fake;
10*74a4d8c2SCharles.Forsyth 	int	pri;
11*74a4d8c2SCharles.Forsyth } Lock;
12*74a4d8c2SCharles.Forsyth #define	lock(x)
13*74a4d8c2SCharles.Forsyth #define	unlock(x)
14*74a4d8c2SCharles.Forsyth 
15*74a4d8c2SCharles.Forsyth typedef struct Alarm {
16*74a4d8c2SCharles.Forsyth 	List;
17*74a4d8c2SCharles.Forsyth 	int	busy;
18*74a4d8c2SCharles.Forsyth 	long	dt;
19*74a4d8c2SCharles.Forsyth 	void	(*f)(void*);
20*74a4d8c2SCharles.Forsyth 	void	*arg;
21*74a4d8c2SCharles.Forsyth } Alarm;
22*74a4d8c2SCharles.Forsyth 
23*74a4d8c2SCharles.Forsyth enum {
24*74a4d8c2SCharles.Forsyth 	Eaddrlen	= 6,
25*74a4d8c2SCharles.Forsyth 	ETHERMINTU	= 60,		/* minimum transmit size */
26*74a4d8c2SCharles.Forsyth 	ETHERMAXTU	= 1514,		/* maximum transmit size */
27*74a4d8c2SCharles.Forsyth 	ETHERHDRSIZE	= 14,		/* size of an ethernet header */
28*74a4d8c2SCharles.Forsyth 
29*74a4d8c2SCharles.Forsyth 	MaxEther	= 2,
30*74a4d8c2SCharles.Forsyth };
31*74a4d8c2SCharles.Forsyth 
32*74a4d8c2SCharles.Forsyth typedef struct {
33*74a4d8c2SCharles.Forsyth 	uchar	d[Eaddrlen];
34*74a4d8c2SCharles.Forsyth 	uchar	s[Eaddrlen];
35*74a4d8c2SCharles.Forsyth 	uchar	type[2];
36*74a4d8c2SCharles.Forsyth 	uchar	data[1500];
37*74a4d8c2SCharles.Forsyth 	uchar	crc[4];
38*74a4d8c2SCharles.Forsyth } Etherpkt;
39*74a4d8c2SCharles.Forsyth 
40*74a4d8c2SCharles.Forsyth extern uchar broadcast[Eaddrlen];
41*74a4d8c2SCharles.Forsyth 
42*74a4d8c2SCharles.Forsyth enum {
43*74a4d8c2SCharles.Forsyth 	Npart		= 20+2,		/* 8 sub partitions, disk, and partition */
44*74a4d8c2SCharles.Forsyth 	Maxxfer		= 16*1024,	/* maximum transfer size/cmd */
45*74a4d8c2SCharles.Forsyth };
46*74a4d8c2SCharles.Forsyth 
47*74a4d8c2SCharles.Forsyth typedef struct {
48*74a4d8c2SCharles.Forsyth 	ulong	start;
49*74a4d8c2SCharles.Forsyth 	ulong	end;
50*74a4d8c2SCharles.Forsyth 	char	name[NAMELEN+1];
51*74a4d8c2SCharles.Forsyth } Partition;
52*74a4d8c2SCharles.Forsyth 
53*74a4d8c2SCharles.Forsyth typedef struct {
54*74a4d8c2SCharles.Forsyth 	int	online;
55*74a4d8c2SCharles.Forsyth 	int	npart;		/* number of real partitions */
56*74a4d8c2SCharles.Forsyth 	Partition p[Npart];
57*74a4d8c2SCharles.Forsyth 	ulong	offset;
58*74a4d8c2SCharles.Forsyth 	Partition *current;	/* current partition */
59*74a4d8c2SCharles.Forsyth 
60*74a4d8c2SCharles.Forsyth 	ulong	cap;		/* total bytes */
61*74a4d8c2SCharles.Forsyth 	int	bytes;		/* bytes/sector */
62*74a4d8c2SCharles.Forsyth 	int	sectors;		/* sectors/track */
63*74a4d8c2SCharles.Forsyth 	int	heads;		/* heads/cyl */
64*74a4d8c2SCharles.Forsyth 	long	cyl;			/* cylinders/drive */
65*74a4d8c2SCharles.Forsyth 
66*74a4d8c2SCharles.Forsyth 	char	lba;			/* true if drive has logical block addressing */
67*74a4d8c2SCharles.Forsyth 	char	multi;		/* non-zero if drive does multiple block xfers */
68*74a4d8c2SCharles.Forsyth } Disc;
69*74a4d8c2SCharles.Forsyth 
70*74a4d8c2SCharles.Forsyth enum {
71*74a4d8c2SCharles.Forsyth 	ScsiTestunit	= 0x00,
72*74a4d8c2SCharles.Forsyth 	ScsiExtsens	= 0x03,
73*74a4d8c2SCharles.Forsyth 	ScsiInquiry	= 0x12,
74*74a4d8c2SCharles.Forsyth 	ScsiModesense	= 0x1a,
75*74a4d8c2SCharles.Forsyth 	ScsiStartunit	= 0x1B,
76*74a4d8c2SCharles.Forsyth 	ScsiStopunit	= 0x1B,
77*74a4d8c2SCharles.Forsyth 	ScsiGetcap	= 0x25,
78*74a4d8c2SCharles.Forsyth 	ScsiRead	= 0x08,
79*74a4d8c2SCharles.Forsyth 	ScsiWrite	= 0x0a,
80*74a4d8c2SCharles.Forsyth 	ScsiExtread	= 0x28,
81*74a4d8c2SCharles.Forsyth 	ScsiExtwrite	= 0x2a,
82*74a4d8c2SCharles.Forsyth 
83*74a4d8c2SCharles.Forsyth 	/* data direction */
84*74a4d8c2SCharles.Forsyth 	ScsiIn		= 1,
85*74a4d8c2SCharles.Forsyth 	ScsiOut		= 0,
86*74a4d8c2SCharles.Forsyth };
87*74a4d8c2SCharles.Forsyth 
88*74a4d8c2SCharles.Forsyth typedef struct Scsibuf Scsibuf;
89*74a4d8c2SCharles.Forsyth typedef struct Scsibuf {
90*74a4d8c2SCharles.Forsyth 	void*		virt;
91*74a4d8c2SCharles.Forsyth 	void*		phys;
92*74a4d8c2SCharles.Forsyth 	Scsibuf*	next;
93*74a4d8c2SCharles.Forsyth };
94*74a4d8c2SCharles.Forsyth 
95*74a4d8c2SCharles.Forsyth typedef struct Scsidata {
96*74a4d8c2SCharles.Forsyth 	uchar*		base;
97*74a4d8c2SCharles.Forsyth 	uchar*		lim;
98*74a4d8c2SCharles.Forsyth 	uchar*		ptr;
99*74a4d8c2SCharles.Forsyth } Scsidata;
100*74a4d8c2SCharles.Forsyth 
101*74a4d8c2SCharles.Forsyth typedef struct Ureg Ureg;
102*74a4d8c2SCharles.Forsyth 
103*74a4d8c2SCharles.Forsyth typedef struct Scsi {
104*74a4d8c2SCharles.Forsyth 	ulong		pid;
105*74a4d8c2SCharles.Forsyth 	ushort		target;
106*74a4d8c2SCharles.Forsyth 	ushort		lun;
107*74a4d8c2SCharles.Forsyth 	ushort		rflag;
108*74a4d8c2SCharles.Forsyth 	ushort		status;
109*74a4d8c2SCharles.Forsyth 	Scsidata 	cmd;
110*74a4d8c2SCharles.Forsyth 	Scsidata 	data;
111*74a4d8c2SCharles.Forsyth 	Scsibuf*	b;
112*74a4d8c2SCharles.Forsyth 	uchar*		save;
113*74a4d8c2SCharles.Forsyth 	uchar		cmdblk[16];
114*74a4d8c2SCharles.Forsyth } Scsi;
115*74a4d8c2SCharles.Forsyth 
116*74a4d8c2SCharles.Forsyth typedef struct Segdesc {
117*74a4d8c2SCharles.Forsyth 	ulong	d0;
118*74a4d8c2SCharles.Forsyth 	ulong	d1;
119*74a4d8c2SCharles.Forsyth } Segdesc;
120*74a4d8c2SCharles.Forsyth 
121*74a4d8c2SCharles.Forsyth typedef struct Mach {
122*74a4d8c2SCharles.Forsyth 	ulong	ticks;		/* of the clock since boot time */
123*74a4d8c2SCharles.Forsyth 	ulong	delayloop;
124*74a4d8c2SCharles.Forsyth 	int		speed;		/* general system clock in MHz */
125*74a4d8c2SCharles.Forsyth 	int		oscclk;		/* oscillator frequency in MHz */
126*74a4d8c2SCharles.Forsyth 	void*	alarm;		/* alarms bound to this clock */
127*74a4d8c2SCharles.Forsyth } Mach;
128*74a4d8c2SCharles.Forsyth 
129*74a4d8c2SCharles.Forsyth extern Mach *m;
130*74a4d8c2SCharles.Forsyth 
131*74a4d8c2SCharles.Forsyth #define E_MAGIC		((((4*20)+0)*20)+7)
132*74a4d8c2SCharles.Forsyth 
133*74a4d8c2SCharles.Forsyth typedef struct Exec Exec;
134*74a4d8c2SCharles.Forsyth struct	Exec
135*74a4d8c2SCharles.Forsyth {
136*74a4d8c2SCharles.Forsyth 	uchar	magic[4];		/* magic number */
137*74a4d8c2SCharles.Forsyth 	uchar	text[4];	 	/* size of text segment */
138*74a4d8c2SCharles.Forsyth 	uchar	data[4];	 	/* size of initialized data */
139*74a4d8c2SCharles.Forsyth 	uchar	bss[4];	  		/* size of uninitialized data */
140*74a4d8c2SCharles.Forsyth 	uchar	syms[4];	 	/* size of symbol table */
141*74a4d8c2SCharles.Forsyth 	uchar	entry[4];	 	/* entry point */
142*74a4d8c2SCharles.Forsyth 	uchar	spsz[4];		/* size of sp/pc offset table */
143*74a4d8c2SCharles.Forsyth 	uchar	pcsz[4];		/* size of pc/line number table */
144*74a4d8c2SCharles.Forsyth };
145*74a4d8c2SCharles.Forsyth 
146*74a4d8c2SCharles.Forsyth /*
147*74a4d8c2SCharles.Forsyth  *  bootline passed by boot program
148*74a4d8c2SCharles.Forsyth  */
149*74a4d8c2SCharles.Forsyth #define BOOTLINE ((char *)0x18000-150)
150*74a4d8c2SCharles.Forsyth 
151*74a4d8c2SCharles.Forsyth /*
152*74a4d8c2SCharles.Forsyth  * Where we leave configuration info.
153*74a4d8c2SCharles.Forsyth  */
154*74a4d8c2SCharles.Forsyth #define BOOTARGS	((char*)(0x18000))
155*74a4d8c2SCharles.Forsyth #define	BOOTARGSLEN	1024
156*74a4d8c2SCharles.Forsyth #define	MAXCONF		32
157*74a4d8c2SCharles.Forsyth 
158*74a4d8c2SCharles.Forsyth /*
159*74a4d8c2SCharles.Forsyth  *  a parsed plan9.ini line
160*74a4d8c2SCharles.Forsyth  */
161*74a4d8c2SCharles.Forsyth #define ISAOPTLEN	16
162*74a4d8c2SCharles.Forsyth #define NISAOPT		8
163*74a4d8c2SCharles.Forsyth 
164*74a4d8c2SCharles.Forsyth typedef struct  ISAConf {
165*74a4d8c2SCharles.Forsyth 	char	type[NAMELEN];
166*74a4d8c2SCharles.Forsyth 	ulong	port;
167*74a4d8c2SCharles.Forsyth 	ulong	irq;
168*74a4d8c2SCharles.Forsyth 	ulong	mem;
169*74a4d8c2SCharles.Forsyth 	ulong	size;
170*74a4d8c2SCharles.Forsyth 	uchar	ea[6];
171*74a4d8c2SCharles.Forsyth 
172*74a4d8c2SCharles.Forsyth 	int	nopt;
173*74a4d8c2SCharles.Forsyth 	char	opt[NISAOPT][ISAOPTLEN];
174*74a4d8c2SCharles.Forsyth } ISAConf;
175*74a4d8c2SCharles.Forsyth 
176*74a4d8c2SCharles.Forsyth typedef struct {
177*74a4d8c2SCharles.Forsyth 	int	size;
178*74a4d8c2SCharles.Forsyth 	ulong	addr;
179*74a4d8c2SCharles.Forsyth } Map;
180*74a4d8c2SCharles.Forsyth 
181*74a4d8c2SCharles.Forsyth typedef struct {
182*74a4d8c2SCharles.Forsyth 	char*	name;
183*74a4d8c2SCharles.Forsyth 	Map*	map;
184*74a4d8c2SCharles.Forsyth 	Map*	mapend;
185*74a4d8c2SCharles.Forsyth 
186*74a4d8c2SCharles.Forsyth 	Lock;
187*74a4d8c2SCharles.Forsyth } RMap;
188*74a4d8c2SCharles.Forsyth 
189*74a4d8c2SCharles.Forsyth typedef struct PCIcfg PCIcfg;
190*74a4d8c2SCharles.Forsyth 
191*74a4d8c2SCharles.Forsyth extern	uchar*	vgamem;
192*74a4d8c2SCharles.Forsyth 
193*74a4d8c2SCharles.Forsyth struct Block {
194*74a4d8c2SCharles.Forsyth 	uchar	*rp;
195*74a4d8c2SCharles.Forsyth 	uchar	*wp;
196*74a4d8c2SCharles.Forsyth 	uchar	*lim;
197*74a4d8c2SCharles.Forsyth 	uchar	*data;
198*74a4d8c2SCharles.Forsyth 	Block*	next;
199*74a4d8c2SCharles.Forsyth 	ulong	magic;
200*74a4d8c2SCharles.Forsyth };
201*74a4d8c2SCharles.Forsyth #define	BLEN(b)	((b)->wp-(b)->rp)
202*74a4d8c2SCharles.Forsyth 
203*74a4d8c2SCharles.Forsyth typedef struct QLock {
204*74a4d8c2SCharles.Forsyth 	int	dummy;
205*74a4d8c2SCharles.Forsyth } QLock;
206