xref: /plan9/sys/src/9/ppc/dat.h (revision 5d9de2d38d2503efca29e12e0e32036368a7a75f)
1458db832SDavid du Colombier typedef struct Conf	Conf;
2*5d9de2d3SDavid du Colombier typedef struct Confmem	Confmem;
3458db832SDavid du Colombier typedef struct FPsave	FPsave;
4458db832SDavid du Colombier typedef struct ISAConf	ISAConf;
59d1c8c20SDavid du Colombier typedef struct Imap	Imap;
6458db832SDavid du Colombier typedef struct Label	Label;
7458db832SDavid du Colombier typedef struct Lock	Lock;
8458db832SDavid du Colombier typedef struct Mach	Mach;
9458db832SDavid du Colombier typedef struct Notsave	Notsave;
10458db832SDavid du Colombier typedef struct PCArch	PCArch;
11458db832SDavid du Colombier typedef struct PMMU	PMMU;
129d1c8c20SDavid du Colombier typedef struct Page	Page;
139d1c8c20SDavid du Colombier typedef struct Pcidev	Pcidev;
14458db832SDavid du Colombier typedef struct Proc	Proc;
15458db832SDavid du Colombier typedef struct Sys	Sys;
16*5d9de2d3SDavid du Colombier typedef vlong		Tval;
17458db832SDavid du Colombier typedef struct Ureg	Ureg;
18458db832SDavid du Colombier typedef struct Vctl	Vctl;
19458db832SDavid du Colombier 
2012fd1c83SDavid du Colombier #pragma incomplete Ureg
219d1c8c20SDavid du Colombier #pragma incomplete Imap
22*5d9de2d3SDavid du Colombier #pragma incomplete Mach
2312fd1c83SDavid du Colombier 
24458db832SDavid du Colombier #define MAXSYSARG	5	/* for mount(fd, mpt, flag, arg, srv) */
25458db832SDavid du Colombier 
26458db832SDavid du Colombier /*
27458db832SDavid du Colombier  *  parameters for sysproc.c
28458db832SDavid du Colombier  */
29458db832SDavid du Colombier #define AOUT_MAGIC	Q_MAGIC
30458db832SDavid du Colombier 
31458db832SDavid du Colombier /*
32458db832SDavid du Colombier  *  machine dependent definitions used by ../port/dat.h
33458db832SDavid du Colombier  */
34458db832SDavid du Colombier 
35458db832SDavid du Colombier struct Lock
36458db832SDavid du Colombier {
37458db832SDavid du Colombier 	ulong	key;			/* semaphore (non-zero = locked) */
38458db832SDavid du Colombier 	ulong	sr;
39458db832SDavid du Colombier 	ulong	pc;
40458db832SDavid du Colombier 	Proc	*p;
41*5d9de2d3SDavid du Colombier 	Mach	*m;
42458db832SDavid du Colombier 	ulong	pid;
43458db832SDavid du Colombier 	ushort	isilock;
44458db832SDavid du Colombier };
45458db832SDavid du Colombier 
46458db832SDavid du Colombier struct Label
47458db832SDavid du Colombier {
48458db832SDavid du Colombier 	ulong	sp;
49458db832SDavid du Colombier 	ulong	pc;
50458db832SDavid du Colombier };
51458db832SDavid du Colombier 
52458db832SDavid du Colombier /*
53458db832SDavid du Colombier  * Proc.fpstate
54458db832SDavid du Colombier  */
55458db832SDavid du Colombier enum
56458db832SDavid du Colombier {
57458db832SDavid du Colombier 	/* Floating point states */
58458db832SDavid du Colombier 	FPinit = 0,
59458db832SDavid du Colombier 	FPactive = 1,
60458db832SDavid du Colombier 	FPinactive = 2,
61458db832SDavid du Colombier 	/* Bit that's or-ed in during note handling (FP is illegal in note handlers) */
62458db832SDavid du Colombier 	FPillegal = 0x100,
63458db832SDavid du Colombier };
64458db832SDavid du Colombier 
65458db832SDavid du Colombier /*
66458db832SDavid du Colombier  * This structure must agree with fpsave and fprestore asm routines
67458db832SDavid du Colombier  */
68458db832SDavid du Colombier struct FPsave
69458db832SDavid du Colombier {
70458db832SDavid du Colombier 	double	fpreg[32];
71458db832SDavid du Colombier 	union {
72458db832SDavid du Colombier 		double	fpscrd;
73458db832SDavid du Colombier 		struct {
74458db832SDavid du Colombier 			ulong	pad;
75458db832SDavid du Colombier 			ulong	fpscr;
76458db832SDavid du Colombier 		};
77458db832SDavid du Colombier 	};
78458db832SDavid du Colombier };
79458db832SDavid du Colombier 
80*5d9de2d3SDavid du Colombier struct Confmem
81*5d9de2d3SDavid du Colombier {
82*5d9de2d3SDavid du Colombier 	ulong	base;
83*5d9de2d3SDavid du Colombier 	ulong	npage;
84*5d9de2d3SDavid du Colombier 	ulong	kbase;
85*5d9de2d3SDavid du Colombier 	ulong	klimit;
86*5d9de2d3SDavid du Colombier };
87*5d9de2d3SDavid du Colombier 
88458db832SDavid du Colombier struct Conf
89458db832SDavid du Colombier {
90458db832SDavid du Colombier 	ulong	nmach;		/* processors */
91458db832SDavid du Colombier 	ulong	nproc;		/* processes */
92*5d9de2d3SDavid du Colombier 	Confmem	mem[2];
93458db832SDavid du Colombier 	ulong	npage0;		/* total physical pages of memory */
94458db832SDavid du Colombier 	ulong	npage1;		/* total physical pages of memory */
95458db832SDavid du Colombier 	ulong	npage;		/* total physical pages of memory */
96458db832SDavid du Colombier 	ulong	base0;		/* base of bank 0 */
97458db832SDavid du Colombier 	ulong	base1;		/* base of bank 1 */
98458db832SDavid du Colombier 	ulong	upages;		/* user page pool */
99458db832SDavid du Colombier 	ulong	nimage;		/* number of page cache image headers */
100458db832SDavid du Colombier 	ulong	nswap;		/* number of swap pages */
101458db832SDavid du Colombier 	int	nswppo;		/* max # of pageouts per segment pass */
102458db832SDavid du Colombier 	ulong	copymode;	/* 0 is copy on write, 1 is copy on reference */
103458db832SDavid du Colombier 	int	monitor;	/* has display? */
104458db832SDavid du Colombier 	ulong	ialloc;		/* bytes available for interrupt time allocation */
105458db832SDavid du Colombier 	ulong	pipeqsize;	/* size in bytes of pipe queues */
106458db832SDavid du Colombier };
107458db832SDavid du Colombier 
108458db832SDavid du Colombier /*
109458db832SDavid du Colombier  *  mmu goo in the Proc structure
110458db832SDavid du Colombier  */
111458db832SDavid du Colombier #define NCOLOR 1
112458db832SDavid du Colombier struct PMMU
113458db832SDavid du Colombier {
114458db832SDavid du Colombier 	int	mmupid;
115458db832SDavid du Colombier 	Ureg	*mmureg;		/* pointer to ureg structure */
116458db832SDavid du Colombier };
117458db832SDavid du Colombier 
118458db832SDavid du Colombier /*
119458db832SDavid du Colombier  *  things saved in the Proc structure during a notify
120458db832SDavid du Colombier  */
121458db832SDavid du Colombier struct Notsave
122458db832SDavid du Colombier {
123458db832SDavid du Colombier 	ulong	UNUSED;
124458db832SDavid du Colombier };
125458db832SDavid du Colombier 
126458db832SDavid du Colombier #include "../port/portdat.h"
127458db832SDavid du Colombier 
128458db832SDavid du Colombier /*
129458db832SDavid du Colombier  *  machine dependent definitions not used by ../port/dat.h
130458db832SDavid du Colombier  */
131458db832SDavid du Colombier /*
132458db832SDavid du Colombier  * Fake kmap
133458db832SDavid du Colombier  */
134458db832SDavid du Colombier typedef	void		KMap;
135458db832SDavid du Colombier #define	VA(k)		((ulong)(k))
136458db832SDavid du Colombier #define	kmap(p)		(KMap*)((p)->pa|KZERO)
137458db832SDavid du Colombier #define	kunmap(k)
138458db832SDavid du Colombier 
139*5d9de2d3SDavid du Colombier struct IMM;
140*5d9de2d3SDavid du Colombier typedef struct IMM IMM;
141*5d9de2d3SDavid du Colombier 
142458db832SDavid du Colombier struct Mach
143458db832SDavid du Colombier {
144458db832SDavid du Colombier 	/* OFFSETS OF THE FOLLOWING KNOWN BY l.s */
145458db832SDavid du Colombier /*0x00*/	int	machno;	/* physical id of processor */
146458db832SDavid du Colombier /*0x04*/	ulong	splpc;	/* pc that called splhi() */
147458db832SDavid du Colombier /*0x08*/	Proc	*proc;	/* current process on this processor */
148458db832SDavid du Colombier 	/* Debugging/statistics for software TLB in l.s (therefore, also known by l.s) */
149458db832SDavid du Colombier /*0x0c*/	ulong	tlbfault;	/* type of last miss */
150458db832SDavid du Colombier /*0x10*/	ulong	imiss;	/* number of instruction misses */
151458db832SDavid du Colombier /*0x14*/	ulong	dmiss;	/* number of data misses */
152458db832SDavid du Colombier 
153458db832SDavid du Colombier 	/* ordering from here on irrelevant */
154458db832SDavid du Colombier 
155458db832SDavid du Colombier 	Imap*	imap;
156*5d9de2d3SDavid du Colombier #ifndef ucuconf
157*5d9de2d3SDavid du Colombier 	IMM*	immr;
158*5d9de2d3SDavid du Colombier #endif
159458db832SDavid du Colombier 	ulong	ticks;		/* of the clock since boot time */
160458db832SDavid du Colombier 	Label	sched;		/* scheduler wakeup */
161458db832SDavid du Colombier 	Lock	alarmlock;	/* access to alarm list */
162458db832SDavid du Colombier 	void	*alarm;		/* alarms bound to this clock */
163458db832SDavid du Colombier 	int	inclockintr;
164458db832SDavid du Colombier 	int	cputype;
165458db832SDavid du Colombier 	ulong	loopconst;
166458db832SDavid du Colombier 	Perf	perf;		/* performance counters */
167458db832SDavid du Colombier 
16859c21d95SDavid du Colombier 	Proc*	readied;	/* for runproc */
16959c21d95SDavid du Colombier 	ulong	schedticks;	/* next forced context switch */
170458db832SDavid du Colombier 
171458db832SDavid du Colombier 	ulong	clkin;		/* basic clock frequency */
172458db832SDavid du Colombier 	ulong	vco_out;
173458db832SDavid du Colombier 	vlong	cpuhz;
174e288d156SDavid du Colombier 	uvlong	cyclefreq;	/* Frequency of user readable cycle counter */
175458db832SDavid du Colombier 	ulong	bushz;
176458db832SDavid du Colombier 	ulong	dechz;
177458db832SDavid du Colombier 	ulong	tbhz;
178458db832SDavid du Colombier 	ulong	cpmhz;		/* communications processor module frequency */
179458db832SDavid du Colombier 	ulong	brghz;		/* baud rate generator frequency */
180458db832SDavid du Colombier 
181458db832SDavid du Colombier 	ulong	pcclast;
182458db832SDavid du Colombier 	uvlong	fastclock;
183458db832SDavid du Colombier 
184458db832SDavid du Colombier 	int	tlbpurge;	/* # of tlb purges */
185458db832SDavid du Colombier 	int	pfault;		/* # of page faults */
186458db832SDavid du Colombier 	int	cs;
187458db832SDavid du Colombier 	int	syscall;
188458db832SDavid du Colombier 	int	load;
189458db832SDavid du Colombier 	int	intr;
190458db832SDavid du Colombier 	int	flushmmu;	/* make current proc flush it's mmu state */
191458db832SDavid du Colombier 	int	ilockdepth;
192458db832SDavid du Colombier 
193458db832SDavid du Colombier 	ulong	ptabbase;	/* start of page table in kernel virtual space */
194458db832SDavid du Colombier 	int	slotgen;	/* next pte (byte offset) when pteg is full */
195458db832SDavid du Colombier 	int	mmupid;		/* next mmu pid to use */
196458db832SDavid du Colombier 	int	sweepcolor;
197458db832SDavid du Colombier 	int	trigcolor;
198458db832SDavid du Colombier 	Rendez	sweepr;
199458db832SDavid du Colombier 
200458db832SDavid du Colombier 	ulong	spuriousintr;
201458db832SDavid du Colombier 	int	lastintr;
202458db832SDavid du Colombier 
203458db832SDavid du Colombier 	/* MUST BE LAST */
204458db832SDavid du Colombier 	int	stack[1];
205458db832SDavid du Colombier };
206458db832SDavid du Colombier 
207458db832SDavid du Colombier struct
208458db832SDavid du Colombier {
209458db832SDavid du Colombier 	Lock;
210458db832SDavid du Colombier 	short	machs;
211458db832SDavid du Colombier 	short	exiting;
212458db832SDavid du Colombier 	short	ispanic;
213458db832SDavid du Colombier }active;
214458db832SDavid du Colombier 
215458db832SDavid du Colombier /*
216458db832SDavid du Colombier  *  a parsed plan9.ini line
217458db832SDavid du Colombier  */
218458db832SDavid du Colombier #define NISAOPT		8
219458db832SDavid du Colombier 
220458db832SDavid du Colombier struct ISAConf {
221458db832SDavid du Colombier 	char	*type;
222458db832SDavid du Colombier 	ulong	port;
223458db832SDavid du Colombier 	int	irq;
224458db832SDavid du Colombier 	ulong	dma;
225458db832SDavid du Colombier 	ulong	mem;
226458db832SDavid du Colombier 	ulong	size;
227458db832SDavid du Colombier 	ulong	freq;
228458db832SDavid du Colombier 
229458db832SDavid du Colombier 	int	nopt;
230458db832SDavid du Colombier 	char	*opt[NISAOPT];
231458db832SDavid du Colombier };
232458db832SDavid du Colombier 
233458db832SDavid du Colombier struct Vctl {
234458db832SDavid du Colombier 	Vctl*	next;		/* handlers on this vector */
235458db832SDavid du Colombier 
236458db832SDavid du Colombier 	char	name[KNAMELEN];	/* of driver */
237458db832SDavid du Colombier 	int	isintr;		/* interrupt or fault/trap */
238458db832SDavid du Colombier 	int	irq;
239458db832SDavid du Colombier 
240458db832SDavid du Colombier 	void	(*f)(Ureg*, void*);	/* handler to call */
241458db832SDavid du Colombier 	void*	a;		/* argument to call it with */
242458db832SDavid du Colombier };
243458db832SDavid du Colombier 
244458db832SDavid du Colombier extern Mach mach0;
245458db832SDavid du Colombier 
246458db832SDavid du Colombier extern register Mach *m;
247458db832SDavid du Colombier extern register Proc *up;
248e0898772SDavid du Colombier 
249e0898772SDavid du Colombier extern FPsave initfp;
250