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