1458db832SDavid du Colombier typedef struct Conf Conf; 2*5d9de2d3SDavid du Colombier typedef struct Confmem Confmem; 3458db832SDavid du Colombier typedef struct FPsave FPsave; 4458db832SDavid du Colombier typedef struct ISAConf ISAConf; 59d1c8c20SDavid du Colombier typedef struct Imap Imap; 6458db832SDavid du Colombier typedef struct Label Label; 7458db832SDavid du Colombier typedef struct Lock Lock; 8458db832SDavid du Colombier typedef struct Mach Mach; 9458db832SDavid du Colombier typedef struct Notsave Notsave; 10458db832SDavid du Colombier typedef struct PCArch PCArch; 11458db832SDavid du Colombier typedef struct PMMU PMMU; 129d1c8c20SDavid du Colombier typedef struct Page Page; 139d1c8c20SDavid du Colombier typedef struct Pcidev Pcidev; 14458db832SDavid du Colombier typedef struct Proc Proc; 15458db832SDavid du Colombier typedef struct Sys Sys; 16*5d9de2d3SDavid du Colombier typedef vlong Tval; 17458db832SDavid du Colombier typedef struct Ureg Ureg; 18458db832SDavid du Colombier typedef struct Vctl Vctl; 19458db832SDavid du Colombier 2012fd1c83SDavid du Colombier #pragma incomplete Ureg 219d1c8c20SDavid du Colombier #pragma incomplete Imap 22*5d9de2d3SDavid du Colombier #pragma incomplete Mach 2312fd1c83SDavid du Colombier 24458db832SDavid du Colombier #define MAXSYSARG 5 /* for mount(fd, mpt, flag, arg, srv) */ 25458db832SDavid du Colombier 26458db832SDavid du Colombier /* 27458db832SDavid du Colombier * parameters for sysproc.c 28458db832SDavid du Colombier */ 29458db832SDavid du Colombier #define AOUT_MAGIC Q_MAGIC 30458db832SDavid du Colombier 31458db832SDavid du Colombier /* 32458db832SDavid du Colombier * machine dependent definitions used by ../port/dat.h 33458db832SDavid du Colombier */ 34458db832SDavid du Colombier 35458db832SDavid du Colombier struct Lock 36458db832SDavid du Colombier { 37458db832SDavid du Colombier ulong key; /* semaphore (non-zero = locked) */ 38458db832SDavid du Colombier ulong sr; 39458db832SDavid du Colombier ulong pc; 40458db832SDavid du Colombier Proc *p; 41*5d9de2d3SDavid du Colombier Mach *m; 42458db832SDavid du Colombier ulong pid; 43458db832SDavid du Colombier ushort isilock; 44458db832SDavid du Colombier }; 45458db832SDavid du Colombier 46458db832SDavid du Colombier struct Label 47458db832SDavid du Colombier { 48458db832SDavid du Colombier ulong sp; 49458db832SDavid du Colombier ulong pc; 50458db832SDavid du Colombier }; 51458db832SDavid du Colombier 52458db832SDavid du Colombier /* 53458db832SDavid du Colombier * Proc.fpstate 54458db832SDavid du Colombier */ 55458db832SDavid du Colombier enum 56458db832SDavid du Colombier { 57458db832SDavid du Colombier /* Floating point states */ 58458db832SDavid du Colombier FPinit = 0, 59458db832SDavid du Colombier FPactive = 1, 60458db832SDavid du Colombier FPinactive = 2, 61458db832SDavid du Colombier /* Bit that's or-ed in during note handling (FP is illegal in note handlers) */ 62458db832SDavid du Colombier FPillegal = 0x100, 63458db832SDavid du Colombier }; 64458db832SDavid du Colombier 65458db832SDavid du Colombier /* 66458db832SDavid du Colombier * This structure must agree with fpsave and fprestore asm routines 67458db832SDavid du Colombier */ 68458db832SDavid du Colombier struct FPsave 69458db832SDavid du Colombier { 70458db832SDavid du Colombier double fpreg[32]; 71458db832SDavid du Colombier union { 72458db832SDavid du Colombier double fpscrd; 73458db832SDavid du Colombier struct { 74458db832SDavid du Colombier ulong pad; 75458db832SDavid du Colombier ulong fpscr; 76458db832SDavid du Colombier }; 77458db832SDavid du Colombier }; 78458db832SDavid du Colombier }; 79458db832SDavid du Colombier 80*5d9de2d3SDavid du Colombier struct Confmem 81*5d9de2d3SDavid du Colombier { 82*5d9de2d3SDavid du Colombier ulong base; 83*5d9de2d3SDavid du Colombier ulong npage; 84*5d9de2d3SDavid du Colombier ulong kbase; 85*5d9de2d3SDavid du Colombier ulong klimit; 86*5d9de2d3SDavid du Colombier }; 87*5d9de2d3SDavid du Colombier 88458db832SDavid du Colombier struct Conf 89458db832SDavid du Colombier { 90458db832SDavid du Colombier ulong nmach; /* processors */ 91458db832SDavid du Colombier ulong nproc; /* processes */ 92*5d9de2d3SDavid du Colombier Confmem mem[2]; 93458db832SDavid du Colombier ulong npage0; /* total physical pages of memory */ 94458db832SDavid du Colombier ulong npage1; /* total physical pages of memory */ 95458db832SDavid du Colombier ulong npage; /* total physical pages of memory */ 96458db832SDavid du Colombier ulong base0; /* base of bank 0 */ 97458db832SDavid du Colombier ulong base1; /* base of bank 1 */ 98458db832SDavid du Colombier ulong upages; /* user page pool */ 99458db832SDavid du Colombier ulong nimage; /* number of page cache image headers */ 100458db832SDavid du Colombier ulong nswap; /* number of swap pages */ 101458db832SDavid du Colombier int nswppo; /* max # of pageouts per segment pass */ 102458db832SDavid du Colombier ulong copymode; /* 0 is copy on write, 1 is copy on reference */ 103458db832SDavid du Colombier int monitor; /* has display? */ 104458db832SDavid du Colombier ulong ialloc; /* bytes available for interrupt time allocation */ 105458db832SDavid du Colombier ulong pipeqsize; /* size in bytes of pipe queues */ 106458db832SDavid du Colombier }; 107458db832SDavid du Colombier 108458db832SDavid du Colombier /* 109458db832SDavid du Colombier * mmu goo in the Proc structure 110458db832SDavid du Colombier */ 111458db832SDavid du Colombier #define NCOLOR 1 112458db832SDavid du Colombier struct PMMU 113458db832SDavid du Colombier { 114458db832SDavid du Colombier int mmupid; 115458db832SDavid du Colombier Ureg *mmureg; /* pointer to ureg structure */ 116458db832SDavid du Colombier }; 117458db832SDavid du Colombier 118458db832SDavid du Colombier /* 119458db832SDavid du Colombier * things saved in the Proc structure during a notify 120458db832SDavid du Colombier */ 121458db832SDavid du Colombier struct Notsave 122458db832SDavid du Colombier { 123458db832SDavid du Colombier ulong UNUSED; 124458db832SDavid du Colombier }; 125458db832SDavid du Colombier 126458db832SDavid du Colombier #include "../port/portdat.h" 127458db832SDavid du Colombier 128458db832SDavid du Colombier /* 129458db832SDavid du Colombier * machine dependent definitions not used by ../port/dat.h 130458db832SDavid du Colombier */ 131458db832SDavid du Colombier /* 132458db832SDavid du Colombier * Fake kmap 133458db832SDavid du Colombier */ 134458db832SDavid du Colombier typedef void KMap; 135458db832SDavid du Colombier #define VA(k) ((ulong)(k)) 136458db832SDavid du Colombier #define kmap(p) (KMap*)((p)->pa|KZERO) 137458db832SDavid du Colombier #define kunmap(k) 138458db832SDavid du Colombier 139*5d9de2d3SDavid du Colombier struct IMM; 140*5d9de2d3SDavid du Colombier typedef struct IMM IMM; 141*5d9de2d3SDavid du Colombier 142458db832SDavid du Colombier struct Mach 143458db832SDavid du Colombier { 144458db832SDavid du Colombier /* OFFSETS OF THE FOLLOWING KNOWN BY l.s */ 145458db832SDavid du Colombier /*0x00*/ int machno; /* physical id of processor */ 146458db832SDavid du Colombier /*0x04*/ ulong splpc; /* pc that called splhi() */ 147458db832SDavid du Colombier /*0x08*/ Proc *proc; /* current process on this processor */ 148458db832SDavid du Colombier /* Debugging/statistics for software TLB in l.s (therefore, also known by l.s) */ 149458db832SDavid du Colombier /*0x0c*/ ulong tlbfault; /* type of last miss */ 150458db832SDavid du Colombier /*0x10*/ ulong imiss; /* number of instruction misses */ 151458db832SDavid du Colombier /*0x14*/ ulong dmiss; /* number of data misses */ 152458db832SDavid du Colombier 153458db832SDavid du Colombier /* ordering from here on irrelevant */ 154458db832SDavid du Colombier 155458db832SDavid du Colombier Imap* imap; 156*5d9de2d3SDavid du Colombier #ifndef ucuconf 157*5d9de2d3SDavid du Colombier IMM* immr; 158*5d9de2d3SDavid du Colombier #endif 159458db832SDavid du Colombier ulong ticks; /* of the clock since boot time */ 160458db832SDavid du Colombier Label sched; /* scheduler wakeup */ 161458db832SDavid du Colombier Lock alarmlock; /* access to alarm list */ 162458db832SDavid du Colombier void *alarm; /* alarms bound to this clock */ 163458db832SDavid du Colombier int inclockintr; 164458db832SDavid du Colombier int cputype; 165458db832SDavid du Colombier ulong loopconst; 166458db832SDavid du Colombier Perf perf; /* performance counters */ 167458db832SDavid du Colombier 16859c21d95SDavid du Colombier Proc* readied; /* for runproc */ 16959c21d95SDavid du Colombier ulong schedticks; /* next forced context switch */ 170458db832SDavid du Colombier 171458db832SDavid du Colombier ulong clkin; /* basic clock frequency */ 172458db832SDavid du Colombier ulong vco_out; 173458db832SDavid du Colombier vlong cpuhz; 174e288d156SDavid du Colombier uvlong cyclefreq; /* Frequency of user readable cycle counter */ 175458db832SDavid du Colombier ulong bushz; 176458db832SDavid du Colombier ulong dechz; 177458db832SDavid du Colombier ulong tbhz; 178458db832SDavid du Colombier ulong cpmhz; /* communications processor module frequency */ 179458db832SDavid du Colombier ulong brghz; /* baud rate generator frequency */ 180458db832SDavid du Colombier 181458db832SDavid du Colombier ulong pcclast; 182458db832SDavid du Colombier uvlong fastclock; 183458db832SDavid du Colombier 184458db832SDavid du Colombier int tlbpurge; /* # of tlb purges */ 185458db832SDavid du Colombier int pfault; /* # of page faults */ 186458db832SDavid du Colombier int cs; 187458db832SDavid du Colombier int syscall; 188458db832SDavid du Colombier int load; 189458db832SDavid du Colombier int intr; 190458db832SDavid du Colombier int flushmmu; /* make current proc flush it's mmu state */ 191458db832SDavid du Colombier int ilockdepth; 192458db832SDavid du Colombier 193458db832SDavid du Colombier ulong ptabbase; /* start of page table in kernel virtual space */ 194458db832SDavid du Colombier int slotgen; /* next pte (byte offset) when pteg is full */ 195458db832SDavid du Colombier int mmupid; /* next mmu pid to use */ 196458db832SDavid du Colombier int sweepcolor; 197458db832SDavid du Colombier int trigcolor; 198458db832SDavid du Colombier Rendez sweepr; 199458db832SDavid du Colombier 200458db832SDavid du Colombier ulong spuriousintr; 201458db832SDavid du Colombier int lastintr; 202458db832SDavid du Colombier 203458db832SDavid du Colombier /* MUST BE LAST */ 204458db832SDavid du Colombier int stack[1]; 205458db832SDavid du Colombier }; 206458db832SDavid du Colombier 207458db832SDavid du Colombier struct 208458db832SDavid du Colombier { 209458db832SDavid du Colombier Lock; 210458db832SDavid du Colombier short machs; 211458db832SDavid du Colombier short exiting; 212458db832SDavid du Colombier short ispanic; 213458db832SDavid du Colombier }active; 214458db832SDavid du Colombier 215458db832SDavid du Colombier /* 216458db832SDavid du Colombier * a parsed plan9.ini line 217458db832SDavid du Colombier */ 218458db832SDavid du Colombier #define NISAOPT 8 219458db832SDavid du Colombier 220458db832SDavid du Colombier struct ISAConf { 221458db832SDavid du Colombier char *type; 222458db832SDavid du Colombier ulong port; 223458db832SDavid du Colombier int irq; 224458db832SDavid du Colombier ulong dma; 225458db832SDavid du Colombier ulong mem; 226458db832SDavid du Colombier ulong size; 227458db832SDavid du Colombier ulong freq; 228458db832SDavid du Colombier 229458db832SDavid du Colombier int nopt; 230458db832SDavid du Colombier char *opt[NISAOPT]; 231458db832SDavid du Colombier }; 232458db832SDavid du Colombier 233458db832SDavid du Colombier struct Vctl { 234458db832SDavid du Colombier Vctl* next; /* handlers on this vector */ 235458db832SDavid du Colombier 236458db832SDavid du Colombier char name[KNAMELEN]; /* of driver */ 237458db832SDavid du Colombier int isintr; /* interrupt or fault/trap */ 238458db832SDavid du Colombier int irq; 239458db832SDavid du Colombier 240458db832SDavid du Colombier void (*f)(Ureg*, void*); /* handler to call */ 241458db832SDavid du Colombier void* a; /* argument to call it with */ 242458db832SDavid du Colombier }; 243458db832SDavid du Colombier 244458db832SDavid du Colombier extern Mach mach0; 245458db832SDavid du Colombier 246458db832SDavid du Colombier extern register Mach *m; 247458db832SDavid du Colombier extern register Proc *up; 248e0898772SDavid du Colombier 249e0898772SDavid du Colombier extern FPsave initfp; 250