typedef struct Conf Conf; typedef struct FPenv FPenv; typedef struct FPU FPU; typedef struct Label Label; typedef struct Lock Lock; typedef struct Mach Mach; typedef struct Ureg Ureg; typedef struct Lance Lance; typedef struct Lancemem Lancemem; typedef struct Etherpkt Etherpkt; typedef struct Lancepkt Lancepkt; typedef ulong Instr; struct Conf { int nmach; /* processors */ int nproc; /* processes */ ulong monitor; /* graphics monitor id; 0 for none */ char ss2; /* is a sparcstation 2 */ char ss2cachebug; /* has sparcstation2 cache bug */ int ncontext; /* in mmu */ int vacsize; /* size of virtual address cache, in bytes */ int vaclinesize; /* size of cache line */ ulong npage0; /* total physical pages of memory, bank 0 */ ulong npage1; /* total physical pages of memory, bank 1 */ ulong base0; /* base of bank 0 */ ulong base1; /* base of bank 1 */ ulong ialloc; /* max interrupt time allocation in bytes */ ulong npage; /* total physical pages of memory */ int copymode; /* 0 is copy on write, 1 is copy on reference */ ulong ipif; /* Ip protocol interfaces */ ulong ip; /* Ip conversations per interface */ ulong arp; /* Arp table size */ ulong frag; /* Ip fragment assemble queue size */ ulong interps; /* number of interpreter processes */ }; /* * FPenv.status */ enum { FPINIT, FPACTIVE, FPINACTIVE, }; struct FPenv { ulong status; ulong pad; }; /* * This structure must agree with fpsave and fprestore asm routines */ struct FPU { double regs[17]; /* floating point registers */ FPenv env; }; /* * machine dependent definitions used by ../port/dat.h */ struct Label { ulong sp; ulong pc; }; struct Lock { ulong key; ulong pc; ulong sr; int pri; }; #include "../port/portdat.h" /* * machine dependent definitions not used by ../port/dat.h */ struct Mach { ulong ticks; /* of the clock since boot time */ Proc *proc; /* current process on this processor */ Label sched; /* scheduler wakeup */ Lock alarmlock; /* access to alarm list */ void *alarm; /* alarms bound to this clock */ ulong *contexts; /* hardware context table */ ulong *ctx; /* the context */ int fptrap; /* FP trap occurred while unsave */ int nrdy; int stack[1]; }; /* * XXX - Eric: It just works.... */ /* * LANCE CSR3 (bus control bits) */ #define BSWP 0x4 #define ACON 0x2 #define BCON 0x1 struct Lancepkt { uchar d[6]; uchar s[6]; uchar type[2]; uchar data[1500]; uchar crc[4]; }; /* * system dependent lance stuff * filled by lancesetup() */ struct Lance { ushort lognrrb; /* log2 number of receive ring buffers */ ushort logntrb; /* log2 number of xmit ring buffers */ ushort nrrb; /* number of receive ring buffers */ ushort ntrb; /* number of xmit ring buffers */ ushort *rap; /* lance address register */ ushort *rdp; /* lance data register */ ushort busctl; /* bus control bits */ uchar ea[6]; /* our ether addr */ int sep; /* separation between shorts in lance ram as seen by host */ ushort *lanceram; /* start of lance ram as seen by host */ Lancemem *lm; /* start of lance ram as seen by lance */ Lancepkt *rp; /* receive buffers (host address) */ Lancepkt *tp; /* transmit buffers (host address) */ Lancepkt *lrp; /* receive buffers (lance address) */ Lancepkt *ltp; /* transmit buffers (lance address) */ }; /* * Fake kmap */ typedef void KMap; #define VA(k) ((ulong)(k)) #define kmap(p) (KMap*)((p)->pa|KZERO) #define kunmap(k) #define MACHP(n) (n==0? &mach0 : *(Mach**)0) extern Mach *m; extern Proc *up; extern Mach mach0; #define swcursor 1