xref: /inferno-os/os/ipengine/dat.h (revision 74a4d8c26dd3c1e9febcb717cfd6cb6512991a7a)
1*74a4d8c2SCharles.Forsyth typedef struct Conf	Conf;
2*74a4d8c2SCharles.Forsyth typedef struct FPU	FPU;
3*74a4d8c2SCharles.Forsyth typedef struct FPenv	FPenv;
4*74a4d8c2SCharles.Forsyth typedef struct IMM	IMM;
5*74a4d8c2SCharles.Forsyth typedef struct Irqctl	Irqctl;
6*74a4d8c2SCharles.Forsyth typedef struct ISAConf	ISAConf;
7*74a4d8c2SCharles.Forsyth typedef struct Label	Label;
8*74a4d8c2SCharles.Forsyth typedef struct Lock	Lock;
9*74a4d8c2SCharles.Forsyth typedef struct Mach	Mach;
10*74a4d8c2SCharles.Forsyth typedef struct Map	Map;
11*74a4d8c2SCharles.Forsyth typedef struct Power Power;
12*74a4d8c2SCharles.Forsyth typedef struct RMap RMap;
13*74a4d8c2SCharles.Forsyth typedef struct Ureg	Ureg;
14*74a4d8c2SCharles.Forsyth 
15*74a4d8c2SCharles.Forsyth typedef ulong Instr;
16*74a4d8c2SCharles.Forsyth 
17*74a4d8c2SCharles.Forsyth #define	MACHP(n)	(n==0? &mach0 : *(Mach**)0)
18*74a4d8c2SCharles.Forsyth 
19*74a4d8c2SCharles.Forsyth struct	Lock
20*74a4d8c2SCharles.Forsyth {
21*74a4d8c2SCharles.Forsyth 	ulong	key;
22*74a4d8c2SCharles.Forsyth 	ulong	pc;
23*74a4d8c2SCharles.Forsyth 	ulong	sr;
24*74a4d8c2SCharles.Forsyth 	int	pri;
25*74a4d8c2SCharles.Forsyth };
26*74a4d8c2SCharles.Forsyth 
27*74a4d8c2SCharles.Forsyth struct	Label
28*74a4d8c2SCharles.Forsyth {
29*74a4d8c2SCharles.Forsyth 	ulong	sp;
30*74a4d8c2SCharles.Forsyth 	ulong	pc;
31*74a4d8c2SCharles.Forsyth };
32*74a4d8c2SCharles.Forsyth 
33*74a4d8c2SCharles.Forsyth /*
34*74a4d8c2SCharles.Forsyth  * Proc.fpstate
35*74a4d8c2SCharles.Forsyth  */
36*74a4d8c2SCharles.Forsyth enum
37*74a4d8c2SCharles.Forsyth {
38*74a4d8c2SCharles.Forsyth 	FPINIT,
39*74a4d8c2SCharles.Forsyth 	FPACTIVE,
40*74a4d8c2SCharles.Forsyth 	FPINACTIVE,
41*74a4d8c2SCharles.Forsyth };
42*74a4d8c2SCharles.Forsyth 
43*74a4d8c2SCharles.Forsyth /*
44*74a4d8c2SCharles.Forsyth  * This structure must agree with FPsave and FPrestore asm routines
45*74a4d8c2SCharles.Forsyth  */
46*74a4d8c2SCharles.Forsyth struct FPenv
47*74a4d8c2SCharles.Forsyth {
48*74a4d8c2SCharles.Forsyth 	union {
49*74a4d8c2SCharles.Forsyth 		double	fpscrd;
50*74a4d8c2SCharles.Forsyth 		struct {
51*74a4d8c2SCharles.Forsyth 			ulong	pad;
52*74a4d8c2SCharles.Forsyth 			ulong	fpscr;
53*74a4d8c2SCharles.Forsyth 		};
54*74a4d8c2SCharles.Forsyth 	};
55*74a4d8c2SCharles.Forsyth 	int	fpistate;	/* emulated fp */
56*74a4d8c2SCharles.Forsyth 	ulong	emreg[32][3];	/* emulated fp */
57*74a4d8c2SCharles.Forsyth };
58*74a4d8c2SCharles.Forsyth /*
59*74a4d8c2SCharles.Forsyth  * This structure must agree with fpsave and fprestore asm routines
60*74a4d8c2SCharles.Forsyth  */
61*74a4d8c2SCharles.Forsyth struct	FPU
62*74a4d8c2SCharles.Forsyth {
63*74a4d8c2SCharles.Forsyth 	double	fpreg[32];
64*74a4d8c2SCharles.Forsyth 	FPenv	env;
65*74a4d8c2SCharles.Forsyth };
66*74a4d8c2SCharles.Forsyth 
67*74a4d8c2SCharles.Forsyth struct Conf
68*74a4d8c2SCharles.Forsyth {
69*74a4d8c2SCharles.Forsyth 	ulong	nmach;		/* processors */
70*74a4d8c2SCharles.Forsyth 	ulong	nproc;		/* processes */
71*74a4d8c2SCharles.Forsyth 	ulong	npage0;		/* total physical pages of memory */
72*74a4d8c2SCharles.Forsyth 	ulong	npage1;		/* total physical pages of memory */
73*74a4d8c2SCharles.Forsyth 	ulong	npage;		/* total physical pages of memory */
74*74a4d8c2SCharles.Forsyth 	ulong	base0;		/* base of bank 0 */
75*74a4d8c2SCharles.Forsyth 	ulong	base1;		/* base of bank 1 */
76*74a4d8c2SCharles.Forsyth 	ulong	ialloc;		/* max interrupt time allocation in bytes */
77*74a4d8c2SCharles.Forsyth 
78*74a4d8c2SCharles.Forsyth 	int	nscc;	/* number of SCCs implemented */
79*74a4d8c2SCharles.Forsyth 	ulong	smcuarts;		/* bits for SMCs to define as eiaN */
80*74a4d8c2SCharles.Forsyth 	ulong	sccuarts;		/* bits for SCCs to define as eiaN  */
81*74a4d8c2SCharles.Forsyth 	int	nocts2;	/* CTS2 and CD2 aren't connected */
82*74a4d8c2SCharles.Forsyth 	uchar*	nvrambase;	/* virtual address of nvram */
83*74a4d8c2SCharles.Forsyth 	ulong	nvramsize;	/* size in bytes */
84*74a4d8c2SCharles.Forsyth };
85*74a4d8c2SCharles.Forsyth 
86*74a4d8c2SCharles.Forsyth #include "../port/portdat.h"
87*74a4d8c2SCharles.Forsyth 
88*74a4d8c2SCharles.Forsyth /*
89*74a4d8c2SCharles.Forsyth  *  machine dependent definitions not used by ../port/dat.h
90*74a4d8c2SCharles.Forsyth  */
91*74a4d8c2SCharles.Forsyth 
92*74a4d8c2SCharles.Forsyth struct Mach
93*74a4d8c2SCharles.Forsyth {
94*74a4d8c2SCharles.Forsyth 	/* OFFSETS OF THE FOLLOWING KNOWN BY l.s */
95*74a4d8c2SCharles.Forsyth 	int	machno;			/* physical id of processor (unused) */
96*74a4d8c2SCharles.Forsyth 	ulong	splpc;			/* pc of last caller to splhi (unused) */
97*74a4d8c2SCharles.Forsyth 	int	mmask;			/* 1<<m->machno (unused) */
98*74a4d8c2SCharles.Forsyth 
99*74a4d8c2SCharles.Forsyth 	/* ordering from here on irrelevant */
100*74a4d8c2SCharles.Forsyth 	ulong	ticks;			/* of the clock since boot time */
101*74a4d8c2SCharles.Forsyth 	Proc	*proc;			/* current process on this processor */
102*74a4d8c2SCharles.Forsyth 	Label	sched;			/* scheduler wakeup */
103*74a4d8c2SCharles.Forsyth 	Lock	alarmlock;		/* access to alarm list */
104*74a4d8c2SCharles.Forsyth 	void	*alarm;			/* alarms bound to this clock */
105*74a4d8c2SCharles.Forsyth 	int	nrdy;
106*74a4d8c2SCharles.Forsyth 	int	speed;	/* general system clock in MHz */
107*74a4d8c2SCharles.Forsyth 	long	oscclk;	/* oscillator frequency (MHz) */
108*74a4d8c2SCharles.Forsyth 	long	cpuhz;	/* general system clock (cycles) */
109*74a4d8c2SCharles.Forsyth 	long	clockgen;	/* clock generator frequency (cycles) */
110*74a4d8c2SCharles.Forsyth 	int	cputype;
111*74a4d8c2SCharles.Forsyth 	ulong	delayloop;
112*74a4d8c2SCharles.Forsyth 	ulong*	bcsr;
113*74a4d8c2SCharles.Forsyth 	IMM*	iomem;	/* MPC8xx internal i/o control memory */
114*74a4d8c2SCharles.Forsyth 
115*74a4d8c2SCharles.Forsyth 	/* MUST BE LAST */
116*74a4d8c2SCharles.Forsyth 	int	stack[1];
117*74a4d8c2SCharles.Forsyth };
118*74a4d8c2SCharles.Forsyth extern	Mach	mach0;
119*74a4d8c2SCharles.Forsyth 
120*74a4d8c2SCharles.Forsyth 
121*74a4d8c2SCharles.Forsyth /*
122*74a4d8c2SCharles.Forsyth  *  a parsed .ini line
123*74a4d8c2SCharles.Forsyth  */
124*74a4d8c2SCharles.Forsyth #define NISAOPT		8
125*74a4d8c2SCharles.Forsyth 
126*74a4d8c2SCharles.Forsyth struct ISAConf {
127*74a4d8c2SCharles.Forsyth 	char*	type;
128*74a4d8c2SCharles.Forsyth 	ulong	port;
129*74a4d8c2SCharles.Forsyth 	ulong	irq;
130*74a4d8c2SCharles.Forsyth 	ulong	mem;
131*74a4d8c2SCharles.Forsyth 	int	dma;
132*74a4d8c2SCharles.Forsyth 	ulong	size;
133*74a4d8c2SCharles.Forsyth 	ulong	freq;
134*74a4d8c2SCharles.Forsyth 	uchar	bus;
135*74a4d8c2SCharles.Forsyth 
136*74a4d8c2SCharles.Forsyth 	int	nopt;
137*74a4d8c2SCharles.Forsyth 	char*	opt[NISAOPT];
138*74a4d8c2SCharles.Forsyth };
139*74a4d8c2SCharles.Forsyth 
140*74a4d8c2SCharles.Forsyth struct Map {
141*74a4d8c2SCharles.Forsyth 	int	size;
142*74a4d8c2SCharles.Forsyth 	ulong	addr;
143*74a4d8c2SCharles.Forsyth };
144*74a4d8c2SCharles.Forsyth 
145*74a4d8c2SCharles.Forsyth struct RMap {
146*74a4d8c2SCharles.Forsyth 	char*	name;
147*74a4d8c2SCharles.Forsyth 	Map*	map;
148*74a4d8c2SCharles.Forsyth 	Map*	mapend;
149*74a4d8c2SCharles.Forsyth 
150*74a4d8c2SCharles.Forsyth 	Lock;
151*74a4d8c2SCharles.Forsyth };
152*74a4d8c2SCharles.Forsyth 
153*74a4d8c2SCharles.Forsyth struct Power {
154*74a4d8c2SCharles.Forsyth 	Dev*	dev;
155*74a4d8c2SCharles.Forsyth 	int	(*powerdown)(Power*);
156*74a4d8c2SCharles.Forsyth 	int	(*powerup)(Power*);
157*74a4d8c2SCharles.Forsyth 	int	state;
158*74a4d8c2SCharles.Forsyth 	void*	arg;
159*74a4d8c2SCharles.Forsyth };
160*74a4d8c2SCharles.Forsyth 
161*74a4d8c2SCharles.Forsyth extern register Mach	*m;
162*74a4d8c2SCharles.Forsyth extern register Proc	*up;
163