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