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