typedef struct Conf Conf; typedef struct FPsave FPsave; typedef struct KMap KMap; typedef struct Lance Lance; typedef struct Lancemem Lancemem; typedef struct Label Label; typedef struct Lock Lock; typedef struct Mach Mach; typedef struct MMU MMU; typedef struct Notsave Notsave; typedef struct PMMU PMMU; typedef struct Softtlb Softtlb; typedef struct Ureg Ureg; /* * parameters for sysproc.c */ #define AOUT_MAGIC V_MAGIC /* * machine dependent definitions used by ../port/dat.h */ struct Lock { ulong key; /* semaphore (non-zero = locked) */ ulong pc; void *upa; }; struct Label { ulong sp; ulong pc; }; struct Conf { ulong nmach; /* processors */ ulong nproc; /* processes */ ulong npage0; /* total physical pages of memory */ ulong npage1; /* total physical pages of memory */ ulong npage; /* total physical pages of memory */ ulong upages; /* user page pool */ ulong nimage; /* number of page cache image headers */ ulong nswap; /* number of swap pages */ ulong base0; /* base of bank 0 */ ulong base1; /* base of bank 1 */ ulong copymode; /* 0 is copy on write, 1 is copy on reference */ int monitor; }; /* * floating point registers */ enum { FPinit, FPactive, FPinactive, }; struct FPsave { long fpreg[32]; long fpstatus; }; /* * mmu goo in the Proc structure */ struct PMMU { int pidonmach[MAXMACH]; }; /* * things saved in the Proc structure during a notify */ struct Notsave { ulong svstatus; ulong svr1; }; #include "../port/portdat.h" #define NCALLBACK 32 /* First FOUR members offsets known by l.s */ struct Mach { /* the following are all known by l.s and cannot be moved */ int machno; /* physical id of processor FIRST */ Softtlb*stb; /* Software tlb simulation SECOND */ Proc* proc; /* process on this processor THIRD */ ulong splpc; /* pc that called splhi() FOURTH */ int tlbfault; /* # of tlb faults FIFTH */ int tlbpurge; /* MUST BE SIXTH */ /* the following are safe to move */ ulong otlbfault; /* tlbfault at last sched */ ulong ticks; /* of the clock since boot time */ Label sched; /* scheduler wakeup */ int lastpid; /* last pid allocated on this machine */ Proc* pidproc[NTLBPID]; /* proc that owns tlbpid on this mach */ ulong vaddrtst; /* address probe by tstbadvaddr */ Ureg* ur; KMap* kactive; /* active on this machine */ int knext; uchar ktlbnext; int speed; /* cpu speed */ ulong delayloop; /* for the delay() routine */ Schedq hiq; Schedq loq; void (**cbin)(void); void (**cbout)(void); void (**cbend)(void); void (*calls[NCALLBACK])(void); int pfault; int cs; int syscall; int load; int intr; int ledval; /* value last written to LED */ int stack[1]; }; struct KMap { Ref; ulong virt; ulong phys0; ulong phys1; KMap* next; KMap* konmach[MAXMACH]; int tlbi[MAXMACH]; Page* pg; }; #define VA(k) ((k)->virt) #define PPN(x) ((ulong)(x)>>6) struct Softtlb { ulong virt; ulong phys0; ulong phys1; }; struct { Lock; short machs; short exiting; }active; extern KMap kpte[]; extern register Mach *m; extern register Proc *up;