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