xref: /plan9/sys/src/9/mtx/dat.h (revision 3b58d1fc2b0a676eae2433a527f1bf907885a006)
19a747e4fSDavid du Colombier typedef struct Conf	Conf;
24de34a7eSDavid du Colombier typedef struct Confmem	Confmem;
39a747e4fSDavid du Colombier typedef struct FPsave	FPsave;
49a747e4fSDavid du Colombier typedef struct ISAConf	ISAConf;
59a747e4fSDavid du Colombier typedef struct Label	Label;
69a747e4fSDavid du Colombier typedef struct Lock	Lock;
79a747e4fSDavid du Colombier typedef struct Mach	Mach;
89a747e4fSDavid du Colombier typedef struct Notsave	Notsave;
99a747e4fSDavid du Colombier typedef struct Page	Page;
109a747e4fSDavid du Colombier typedef struct PCArch	PCArch;
119a747e4fSDavid du Colombier typedef struct Pcidev	Pcidev;
129a747e4fSDavid du Colombier typedef struct PMMU	PMMU;
139a747e4fSDavid du Colombier typedef struct Proc	Proc;
149a747e4fSDavid du Colombier typedef struct Sys	Sys;
159a747e4fSDavid du Colombier typedef struct Ureg	Ureg;
169a747e4fSDavid du Colombier typedef struct Vctl	Vctl;
17c717cbbdSDavid du Colombier typedef long		Tval;
189a747e4fSDavid du Colombier 
1912fd1c83SDavid du Colombier #pragma incomplete Ureg
2012fd1c83SDavid du Colombier 
219a747e4fSDavid du Colombier #define MAXSYSARG	5	/* for mount(fd, mpt, flag, arg, srv) */
229a747e4fSDavid du Colombier 
239a747e4fSDavid du Colombier /*
249a747e4fSDavid du Colombier  *  parameters for sysproc.c
259a747e4fSDavid du Colombier  */
269a747e4fSDavid du Colombier #define AOUT_MAGIC	Q_MAGIC
279a747e4fSDavid du Colombier 
289a747e4fSDavid du Colombier /*
299a747e4fSDavid du Colombier  *  machine dependent definitions used by ../port/dat.h
309a747e4fSDavid du Colombier  */
319a747e4fSDavid du Colombier 
329a747e4fSDavid du Colombier struct Lock
339a747e4fSDavid du Colombier {
34425afbabSDavid du Colombier 	ulong	key;
359a747e4fSDavid du Colombier 	ulong	sr;
369a747e4fSDavid du Colombier 	ulong	pc;
379a747e4fSDavid du Colombier 	Proc	*p;
384de34a7eSDavid du Colombier 	Mach	*m;
399a747e4fSDavid du Colombier 	ushort	isilock;
409a747e4fSDavid du Colombier };
419a747e4fSDavid du Colombier 
429a747e4fSDavid du Colombier struct Label
439a747e4fSDavid du Colombier {
449a747e4fSDavid du Colombier 	ulong	sp;
459a747e4fSDavid du Colombier 	ulong	pc;
469a747e4fSDavid du Colombier };
479a747e4fSDavid du Colombier 
489a747e4fSDavid du Colombier /*
499a747e4fSDavid du Colombier  * Proc.fpstate
509a747e4fSDavid du Colombier  */
519a747e4fSDavid du Colombier enum
529a747e4fSDavid du Colombier {
539a747e4fSDavid du Colombier 	FPinit,
549a747e4fSDavid du Colombier 	FPactive,
559a747e4fSDavid du Colombier 	FPinactive,
56*3b58d1fcSDavid du Colombier 
57*3b58d1fcSDavid du Colombier 	/* bit or'd with the state */
58*3b58d1fcSDavid du Colombier 	FPillegal= 0x100,
599a747e4fSDavid du Colombier };
609a747e4fSDavid du Colombier 
619a747e4fSDavid du Colombier /*
629a747e4fSDavid du Colombier  * This structure must agree with fpsave and fprestore asm routines
639a747e4fSDavid du Colombier  */
649a747e4fSDavid du Colombier struct	FPsave
659a747e4fSDavid du Colombier {
669a747e4fSDavid du Colombier 	double	fpreg[32];
679a747e4fSDavid du Colombier 	union {
689a747e4fSDavid du Colombier 		double	fpscrd;
699a747e4fSDavid du Colombier 		struct {
709a747e4fSDavid du Colombier 			ulong	pad;
719a747e4fSDavid du Colombier 			ulong	fpscr;
729a747e4fSDavid du Colombier 		};
739a747e4fSDavid du Colombier 	};
749a747e4fSDavid du Colombier };
759a747e4fSDavid du Colombier 
764de34a7eSDavid du Colombier struct Confmem
774de34a7eSDavid du Colombier {
784de34a7eSDavid du Colombier 	ulong	base;
794de34a7eSDavid du Colombier 	ulong	npage;
804de34a7eSDavid du Colombier 	ulong	kbase;
814de34a7eSDavid du Colombier 	ulong	klimit;
824de34a7eSDavid du Colombier };
834de34a7eSDavid du Colombier 
849a747e4fSDavid du Colombier struct Conf
859a747e4fSDavid du Colombier {
869a747e4fSDavid du Colombier 	ulong	nmach;		/* processors */
879a747e4fSDavid du Colombier 	ulong	nproc;		/* processes */
884de34a7eSDavid du Colombier 	Confmem	mem[1];
899a747e4fSDavid du Colombier 	ulong	npage;		/* total physical pages of memory */
909a747e4fSDavid du Colombier 	ulong	upages;		/* user page pool */
919a747e4fSDavid du Colombier 	ulong	nimage;		/* number of page cache image headers */
929a747e4fSDavid du Colombier 	ulong	nswap;		/* number of swap pages */
939a747e4fSDavid du Colombier 	int	nswppo;		/* max # of pageouts per segment pass */
949a747e4fSDavid du Colombier 	ulong	copymode;	/* 0 is copy on write, 1 is copy on reference */
959a747e4fSDavid du Colombier 	int	monitor;		/* has display? */
969a747e4fSDavid du Colombier 	ulong	ialloc;		/* bytes available for interrupt time allocation */
979a747e4fSDavid du Colombier 	ulong	pipeqsize;	/* size in bytes of pipe queues */
989a747e4fSDavid du Colombier };
999a747e4fSDavid du Colombier 
1009a747e4fSDavid du Colombier /*
1019a747e4fSDavid du Colombier  *  mmu goo in the Proc structure
1029a747e4fSDavid du Colombier  */
1039a747e4fSDavid du Colombier #define NCOLOR 1
1049a747e4fSDavid du Colombier struct PMMU
1059a747e4fSDavid du Colombier {
1069a747e4fSDavid du Colombier 	int	mmupid;
1079a747e4fSDavid du Colombier };
1089a747e4fSDavid du Colombier 
1099a747e4fSDavid du Colombier /*
1109a747e4fSDavid du Colombier  *  things saved in the Proc structure during a notify
1119a747e4fSDavid du Colombier  */
1129a747e4fSDavid du Colombier struct Notsave
1139a747e4fSDavid du Colombier {
1149a747e4fSDavid du Colombier 	ulong	UNUSED;
1159a747e4fSDavid du Colombier };
1169a747e4fSDavid du Colombier 
1179a747e4fSDavid du Colombier #include "../port/portdat.h"
1189a747e4fSDavid du Colombier 
1199a747e4fSDavid du Colombier /*
1209a747e4fSDavid du Colombier  *  machine dependent definitions not used by ../port/dat.h
1219a747e4fSDavid du Colombier  */
1229a747e4fSDavid du Colombier /*
1239a747e4fSDavid du Colombier  * Fake kmap
1249a747e4fSDavid du Colombier  */
1259a747e4fSDavid du Colombier typedef	void		KMap;
1269a747e4fSDavid du Colombier #define	VA(k)		((ulong)(k))
1279a747e4fSDavid du Colombier #define	kmap(p)		(KMap*)((p)->pa|KZERO)
1289a747e4fSDavid du Colombier #define	kunmap(k)
1299a747e4fSDavid du Colombier 
1309a747e4fSDavid du Colombier struct Mach
1319a747e4fSDavid du Colombier {
1329a747e4fSDavid du Colombier 	/* OFFSETS OF THE FOLLOWING KNOWN BY l.s */
1339a747e4fSDavid du Colombier 	int	machno;			/* physical id of processor */
1349a747e4fSDavid du Colombier 	ulong	splpc;			/* pc that called splhi() */
1359a747e4fSDavid du Colombier 	Proc	*proc;			/* current process on this processor */
1369a747e4fSDavid du Colombier 
1379a747e4fSDavid du Colombier 	/* ordering from here on irrelevant */
1389a747e4fSDavid du Colombier 
1399a747e4fSDavid du Colombier 	ulong	ticks;			/* of the clock since boot time */
1409a747e4fSDavid du Colombier 	Label	sched;			/* scheduler wakeup */
1419a747e4fSDavid du Colombier 	Lock	alarmlock;		/* access to alarm list */
1429a747e4fSDavid du Colombier 	void	*alarm;			/* alarms bound to this clock */
1439a747e4fSDavid du Colombier 	int	inclockintr;
1449a747e4fSDavid du Colombier 	int	cputype;
1459a747e4fSDavid du Colombier 	ulong	loopconst;
1469a747e4fSDavid du Colombier 
14759c21d95SDavid du Colombier 	Proc*	readied;		/* for runproc */
14859c21d95SDavid du Colombier 	ulong	schedticks;	/* next forced context switch */
1499a747e4fSDavid du Colombier 
1509a747e4fSDavid du Colombier 	vlong	cpuhz;
1519a747e4fSDavid du Colombier 	ulong	bushz;
1529a747e4fSDavid du Colombier 	ulong	dechz;
1539a747e4fSDavid du Colombier 	ulong	tbhz;
154e288d156SDavid du Colombier 	uvlong	cyclefreq;		/* Frequency of user readable cycle counter */
1559a747e4fSDavid du Colombier 
1569a747e4fSDavid du Colombier 	ulong	pcclast;
1579a747e4fSDavid du Colombier 	uvlong	fastclock;
1583ff48bf5SDavid du Colombier 	Perf	perf;			/* performance counters */
1599a747e4fSDavid du Colombier 
1609a747e4fSDavid du Colombier 	int	tlbfault;		/* only used by devproc; no access to tlb */
1619a747e4fSDavid du Colombier 	int	tlbpurge;		/* ... */
1629a747e4fSDavid du Colombier 	int	pfault;
1639a747e4fSDavid du Colombier 	int	cs;
1649a747e4fSDavid du Colombier 	int	syscall;
1659a747e4fSDavid du Colombier 	int	load;
1669a747e4fSDavid du Colombier 	int	intr;
1679a747e4fSDavid du Colombier 	int	flushmmu;		/* make current proc flush it's mmu state */
1689a747e4fSDavid du Colombier 	int	ilockdepth;
1699a747e4fSDavid du Colombier 
1709a747e4fSDavid du Colombier 	ulong	ptabbase;		/* start of page table in kernel virtual space */
1719a747e4fSDavid du Colombier 	int		slotgen;		/* next pte (byte offset) when pteg is full */
1729a747e4fSDavid du Colombier 	int		mmupid;		/* next mmu pid to use */
1739a747e4fSDavid du Colombier 	int		sweepcolor;
1749a747e4fSDavid du Colombier 	int		trigcolor;
1759a747e4fSDavid du Colombier 	Rendez	sweepr;
1769a747e4fSDavid du Colombier 
1779a747e4fSDavid du Colombier 	ulong	spuriousintr;
1789a747e4fSDavid du Colombier 	int	lastintr;
1799a747e4fSDavid du Colombier 
1809a747e4fSDavid du Colombier 	/* MUST BE LAST */
1819a747e4fSDavid du Colombier 	int	stack[1];
1829a747e4fSDavid du Colombier };
1839a747e4fSDavid du Colombier 
1849a747e4fSDavid du Colombier struct
1859a747e4fSDavid du Colombier {
1869a747e4fSDavid du Colombier 	Lock;
1879a747e4fSDavid du Colombier 	short	machs;
1889a747e4fSDavid du Colombier 	short	exiting;
1899a747e4fSDavid du Colombier 	short	ispanic;
1909a747e4fSDavid du Colombier }active;
1919a747e4fSDavid du Colombier 
1929a747e4fSDavid du Colombier /*
1939a747e4fSDavid du Colombier  *  a parsed plan9.ini line
1949a747e4fSDavid du Colombier  */
1959a747e4fSDavid du Colombier #define NISAOPT		8
1969a747e4fSDavid du Colombier 
1979a747e4fSDavid du Colombier struct ISAConf {
1989a747e4fSDavid du Colombier 	char		*type;
1999a747e4fSDavid du Colombier 	ulong	port;
200fb7f0c93SDavid du Colombier 	int	irq;
2019a747e4fSDavid du Colombier 	ulong	dma;
2029a747e4fSDavid du Colombier 	ulong	mem;
2039a747e4fSDavid du Colombier 	ulong	size;
2049a747e4fSDavid du Colombier 	ulong	freq;
2059a747e4fSDavid du Colombier 
2069a747e4fSDavid du Colombier 	int	nopt;
2079a747e4fSDavid du Colombier 	char	*opt[NISAOPT];
2089a747e4fSDavid du Colombier };
2099a747e4fSDavid du Colombier 
2109a747e4fSDavid du Colombier #define	MACHP(n)	((Mach *)((int)&mach0+n*BY2PG))
2119a747e4fSDavid du Colombier extern Mach		mach0;
2129a747e4fSDavid du Colombier 
2139a747e4fSDavid du Colombier extern register Mach	*m;
2149a747e4fSDavid du Colombier extern register Proc	*up;
215e0898772SDavid du Colombier 
216e0898772SDavid du Colombier extern FPsave initfp;
217