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