xref: /plan9-contrib/sys/src/9/mtx/dat.h (revision a41547ffda0e0a8ab69753330f2e59eeb889e152)
1 typedef struct Conf	Conf;
2 typedef struct Confmem	Confmem;
3 typedef struct FPsave	FPsave;
4 typedef struct ISAConf	ISAConf;
5 typedef struct Label	Label;
6 typedef struct Lock	Lock;
7 typedef struct Mach	Mach;
8 typedef struct Notsave	Notsave;
9 typedef struct Page	Page;
10 typedef struct PCArch	PCArch;
11 typedef struct Pcidev	Pcidev;
12 typedef struct PMMU	PMMU;
13 typedef struct Proc	Proc;
14 typedef struct Sys	Sys;
15 typedef struct Ureg	Ureg;
16 typedef struct Vctl	Vctl;
17 typedef long		Tval;
18 
19 #pragma incomplete Ureg
20 
21 #define MAXSYSARG	5	/* for mount(fd, mpt, flag, arg, srv) */
22 
23 /*
24  *  parameters for sysproc.c
25  */
26 #define AOUT_MAGIC	Q_MAGIC
27 
28 /*
29  *  machine dependent definitions used by ../port/dat.h
30  */
31 
32 struct Lock
33 {
34 	ulong	key;
35 	ulong	sr;
36 	ulong	pc;
37 	Proc	*p;
38 	Mach	*m;
39 	ushort	isilock;
40 };
41 
42 struct Label
43 {
44 	ulong	sp;
45 	ulong	pc;
46 };
47 
48 /*
49  * Proc.fpstate
50  */
51 enum
52 {
53 	FPinit,
54 	FPactive,
55 	FPinactive,
56 };
57 
58 /*
59  * This structure must agree with fpsave and fprestore asm routines
60  */
61 struct	FPsave
62 {
63 	double	fpreg[32];
64 	union {
65 		double	fpscrd;
66 		struct {
67 			ulong	pad;
68 			ulong	fpscr;
69 		};
70 	};
71 };
72 
73 struct Confmem
74 {
75 	ulong	base;
76 	ulong	npage;
77 	ulong	kbase;
78 	ulong	klimit;
79 };
80 
81 struct Conf
82 {
83 	ulong	nmach;		/* processors */
84 	ulong	nproc;		/* processes */
85 	Confmem	mem[1];
86 	ulong	npage;		/* total physical pages of memory */
87 	ulong	upages;		/* user page pool */
88 	ulong	nimage;		/* number of page cache image headers */
89 	ulong	nswap;		/* number of swap pages */
90 	int	nswppo;		/* max # of pageouts per segment pass */
91 	ulong	copymode;	/* 0 is copy on write, 1 is copy on reference */
92 	int	monitor;		/* has display? */
93 	ulong	ialloc;		/* bytes available for interrupt time allocation */
94 	ulong	pipeqsize;	/* size in bytes of pipe queues */
95 };
96 
97 /*
98  *  mmu goo in the Proc structure
99  */
100 #define NCOLOR 1
101 struct PMMU
102 {
103 	int	mmupid;
104 };
105 
106 /*
107  *  things saved in the Proc structure during a notify
108  */
109 struct Notsave
110 {
111 	ulong	UNUSED;
112 };
113 
114 #include "../port/portdat.h"
115 
116 /*
117  *  machine dependent definitions not used by ../port/dat.h
118  */
119 /*
120  * Fake kmap
121  */
122 typedef	void		KMap;
123 #define	VA(k)		((ulong)(k))
124 #define	kmap(p)		(KMap*)((p)->pa|KZERO)
125 #define	kunmap(k)
126 
127 struct Mach
128 {
129 	/* OFFSETS OF THE FOLLOWING KNOWN BY l.s */
130 	int	machno;			/* physical id of processor */
131 	ulong	splpc;			/* pc that called splhi() */
132 	Proc	*proc;			/* current process on this processor */
133 
134 	/* ordering from here on irrelevant */
135 
136 	ulong	ticks;			/* of the clock since boot time */
137 	Label	sched;			/* scheduler wakeup */
138 	Lock	alarmlock;		/* access to alarm list */
139 	void	*alarm;			/* alarms bound to this clock */
140 	int	inclockintr;
141 	int	cputype;
142 	ulong	loopconst;
143 
144 	Proc*	readied;		/* for runproc */
145 	ulong	schedticks;	/* next forced context switch */
146 
147 	vlong	cpuhz;
148 	ulong	bushz;
149 	ulong	dechz;
150 	ulong	tbhz;
151 	uvlong	cyclefreq;		/* Frequency of user readable cycle counter */
152 
153 	ulong	pcclast;
154 	uvlong	fastclock;
155 	Perf	perf;			/* performance counters */
156 
157 	int	tlbfault;		/* only used by devproc; no access to tlb */
158 	int	tlbpurge;		/* ... */
159 	int	pfault;
160 	int	cs;
161 	int	syscall;
162 	int	load;
163 	int	intr;
164 	int	flushmmu;		/* make current proc flush it's mmu state */
165 	int	ilockdepth;
166 
167 	ulong	ptabbase;		/* start of page table in kernel virtual space */
168 	int		slotgen;		/* next pte (byte offset) when pteg is full */
169 	int		mmupid;		/* next mmu pid to use */
170 	int		sweepcolor;
171 	int		trigcolor;
172 	Rendez	sweepr;
173 
174 	ulong	spuriousintr;
175 	int	lastintr;
176 
177 	/* MUST BE LAST */
178 	int	stack[1];
179 };
180 
181 struct
182 {
183 	Lock;
184 	short	machs;
185 	short	exiting;
186 	short	ispanic;
187 }active;
188 
189 /*
190  *  a parsed plan9.ini line
191  */
192 #define NISAOPT		8
193 
194 struct ISAConf {
195 	char		*type;
196 	ulong	port;
197 	int	irq;
198 	ulong	dma;
199 	ulong	mem;
200 	ulong	size;
201 	ulong	freq;
202 
203 	int	nopt;
204 	char	*opt[NISAOPT];
205 };
206 
207 #define	MACHP(n)	((Mach *)((int)&mach0+n*BY2PG))
208 extern Mach		mach0;
209 
210 extern register Mach	*m;
211 extern register Proc	*up;
212 
213 extern FPsave initfp;
214