1*74a4d8c2SCharles.Forsyth typedef struct Conf Conf; 2*74a4d8c2SCharles.Forsyth typedef struct FPU FPU; 3*74a4d8c2SCharles.Forsyth typedef struct FPenv FPenv; 4*74a4d8c2SCharles.Forsyth typedef struct IMM IMM; 5*74a4d8c2SCharles.Forsyth typedef struct Irqctl Irqctl; 6*74a4d8c2SCharles.Forsyth typedef struct ISAConf ISAConf; 7*74a4d8c2SCharles.Forsyth typedef struct Label Label; 8*74a4d8c2SCharles.Forsyth typedef struct Lock Lock; 9*74a4d8c2SCharles.Forsyth typedef struct Mach Mach; 10*74a4d8c2SCharles.Forsyth typedef struct Map Map; 11*74a4d8c2SCharles.Forsyth typedef struct Power Power; 12*74a4d8c2SCharles.Forsyth typedef struct RMap RMap; 13*74a4d8c2SCharles.Forsyth typedef struct Ureg Ureg; 14*74a4d8c2SCharles.Forsyth 15*74a4d8c2SCharles.Forsyth typedef ulong Instr; 16*74a4d8c2SCharles.Forsyth 17*74a4d8c2SCharles.Forsyth #define MACHP(n) (n==0? &mach0 : *(Mach**)0) 18*74a4d8c2SCharles.Forsyth 19*74a4d8c2SCharles.Forsyth struct Lock 20*74a4d8c2SCharles.Forsyth { 21*74a4d8c2SCharles.Forsyth ulong key; 22*74a4d8c2SCharles.Forsyth ulong pc; 23*74a4d8c2SCharles.Forsyth ulong sr; 24*74a4d8c2SCharles.Forsyth int pri; 25*74a4d8c2SCharles.Forsyth }; 26*74a4d8c2SCharles.Forsyth 27*74a4d8c2SCharles.Forsyth struct Label 28*74a4d8c2SCharles.Forsyth { 29*74a4d8c2SCharles.Forsyth ulong sp; 30*74a4d8c2SCharles.Forsyth ulong pc; 31*74a4d8c2SCharles.Forsyth }; 32*74a4d8c2SCharles.Forsyth 33*74a4d8c2SCharles.Forsyth /* 34*74a4d8c2SCharles.Forsyth * Proc.fpstate 35*74a4d8c2SCharles.Forsyth */ 36*74a4d8c2SCharles.Forsyth enum 37*74a4d8c2SCharles.Forsyth { 38*74a4d8c2SCharles.Forsyth FPINIT, 39*74a4d8c2SCharles.Forsyth FPACTIVE, 40*74a4d8c2SCharles.Forsyth FPINACTIVE, 41*74a4d8c2SCharles.Forsyth }; 42*74a4d8c2SCharles.Forsyth 43*74a4d8c2SCharles.Forsyth /* 44*74a4d8c2SCharles.Forsyth * This structure must agree with FPsave and FPrestore asm routines 45*74a4d8c2SCharles.Forsyth */ 46*74a4d8c2SCharles.Forsyth struct FPenv 47*74a4d8c2SCharles.Forsyth { 48*74a4d8c2SCharles.Forsyth union { 49*74a4d8c2SCharles.Forsyth double fpscrd; 50*74a4d8c2SCharles.Forsyth struct { 51*74a4d8c2SCharles.Forsyth ulong pad; 52*74a4d8c2SCharles.Forsyth ulong fpscr; 53*74a4d8c2SCharles.Forsyth }; 54*74a4d8c2SCharles.Forsyth }; 55*74a4d8c2SCharles.Forsyth int fpistate; /* emulated fp */ 56*74a4d8c2SCharles.Forsyth ulong emreg[32][3]; /* emulated fp */ 57*74a4d8c2SCharles.Forsyth }; 58*74a4d8c2SCharles.Forsyth /* 59*74a4d8c2SCharles.Forsyth * This structure must agree with fpsave and fprestore asm routines 60*74a4d8c2SCharles.Forsyth */ 61*74a4d8c2SCharles.Forsyth struct FPU 62*74a4d8c2SCharles.Forsyth { 63*74a4d8c2SCharles.Forsyth double fpreg[32]; 64*74a4d8c2SCharles.Forsyth FPenv env; 65*74a4d8c2SCharles.Forsyth }; 66*74a4d8c2SCharles.Forsyth 67*74a4d8c2SCharles.Forsyth struct Conf 68*74a4d8c2SCharles.Forsyth { 69*74a4d8c2SCharles.Forsyth ulong nmach; /* processors */ 70*74a4d8c2SCharles.Forsyth ulong nproc; /* processes */ 71*74a4d8c2SCharles.Forsyth ulong npage0; /* total physical pages of memory */ 72*74a4d8c2SCharles.Forsyth ulong npage1; /* total physical pages of memory */ 73*74a4d8c2SCharles.Forsyth ulong npage; /* total physical pages of memory */ 74*74a4d8c2SCharles.Forsyth ulong base0; /* base of bank 0 */ 75*74a4d8c2SCharles.Forsyth ulong base1; /* base of bank 1 */ 76*74a4d8c2SCharles.Forsyth ulong ialloc; /* max interrupt time allocation in bytes */ 77*74a4d8c2SCharles.Forsyth 78*74a4d8c2SCharles.Forsyth int nscc; /* number of SCCs implemented */ 79*74a4d8c2SCharles.Forsyth ulong smcuarts; /* bits for SMCs to define as eiaN */ 80*74a4d8c2SCharles.Forsyth ulong sccuarts; /* bits for SCCs to define as eiaN */ 81*74a4d8c2SCharles.Forsyth int nocts2; /* CTS2 and CD2 aren't connected */ 82*74a4d8c2SCharles.Forsyth uchar* nvrambase; /* virtual address of nvram */ 83*74a4d8c2SCharles.Forsyth ulong nvramsize; /* size in bytes */ 84*74a4d8c2SCharles.Forsyth }; 85*74a4d8c2SCharles.Forsyth 86*74a4d8c2SCharles.Forsyth #include "../port/portdat.h" 87*74a4d8c2SCharles.Forsyth 88*74a4d8c2SCharles.Forsyth /* 89*74a4d8c2SCharles.Forsyth * machine dependent definitions not used by ../port/dat.h 90*74a4d8c2SCharles.Forsyth */ 91*74a4d8c2SCharles.Forsyth 92*74a4d8c2SCharles.Forsyth struct Mach 93*74a4d8c2SCharles.Forsyth { 94*74a4d8c2SCharles.Forsyth /* OFFSETS OF THE FOLLOWING KNOWN BY l.s */ 95*74a4d8c2SCharles.Forsyth int machno; /* physical id of processor (unused) */ 96*74a4d8c2SCharles.Forsyth ulong splpc; /* pc of last caller to splhi (unused) */ 97*74a4d8c2SCharles.Forsyth int mmask; /* 1<<m->machno (unused) */ 98*74a4d8c2SCharles.Forsyth 99*74a4d8c2SCharles.Forsyth /* ordering from here on irrelevant */ 100*74a4d8c2SCharles.Forsyth ulong ticks; /* of the clock since boot time */ 101*74a4d8c2SCharles.Forsyth Proc *proc; /* current process on this processor */ 102*74a4d8c2SCharles.Forsyth Label sched; /* scheduler wakeup */ 103*74a4d8c2SCharles.Forsyth Lock alarmlock; /* access to alarm list */ 104*74a4d8c2SCharles.Forsyth void *alarm; /* alarms bound to this clock */ 105*74a4d8c2SCharles.Forsyth int nrdy; 106*74a4d8c2SCharles.Forsyth int speed; /* general system clock in MHz */ 107*74a4d8c2SCharles.Forsyth long oscclk; /* oscillator frequency (MHz) */ 108*74a4d8c2SCharles.Forsyth long cpuhz; /* general system clock (cycles) */ 109*74a4d8c2SCharles.Forsyth long clockgen; /* clock generator frequency (cycles) */ 110*74a4d8c2SCharles.Forsyth int cputype; 111*74a4d8c2SCharles.Forsyth ulong delayloop; 112*74a4d8c2SCharles.Forsyth ulong* bcsr; 113*74a4d8c2SCharles.Forsyth IMM* iomem; /* MPC8xx internal i/o control memory */ 114*74a4d8c2SCharles.Forsyth 115*74a4d8c2SCharles.Forsyth /* MUST BE LAST */ 116*74a4d8c2SCharles.Forsyth int stack[1]; 117*74a4d8c2SCharles.Forsyth }; 118*74a4d8c2SCharles.Forsyth extern Mach mach0; 119*74a4d8c2SCharles.Forsyth 120*74a4d8c2SCharles.Forsyth 121*74a4d8c2SCharles.Forsyth /* 122*74a4d8c2SCharles.Forsyth * a parsed .ini line 123*74a4d8c2SCharles.Forsyth */ 124*74a4d8c2SCharles.Forsyth #define NISAOPT 8 125*74a4d8c2SCharles.Forsyth 126*74a4d8c2SCharles.Forsyth struct ISAConf { 127*74a4d8c2SCharles.Forsyth char* type; 128*74a4d8c2SCharles.Forsyth ulong port; 129*74a4d8c2SCharles.Forsyth ulong irq; 130*74a4d8c2SCharles.Forsyth ulong mem; 131*74a4d8c2SCharles.Forsyth int dma; 132*74a4d8c2SCharles.Forsyth ulong size; 133*74a4d8c2SCharles.Forsyth ulong freq; 134*74a4d8c2SCharles.Forsyth uchar bus; 135*74a4d8c2SCharles.Forsyth 136*74a4d8c2SCharles.Forsyth int nopt; 137*74a4d8c2SCharles.Forsyth char* opt[NISAOPT]; 138*74a4d8c2SCharles.Forsyth }; 139*74a4d8c2SCharles.Forsyth 140*74a4d8c2SCharles.Forsyth struct Map { 141*74a4d8c2SCharles.Forsyth int size; 142*74a4d8c2SCharles.Forsyth ulong addr; 143*74a4d8c2SCharles.Forsyth }; 144*74a4d8c2SCharles.Forsyth 145*74a4d8c2SCharles.Forsyth struct RMap { 146*74a4d8c2SCharles.Forsyth char* name; 147*74a4d8c2SCharles.Forsyth Map* map; 148*74a4d8c2SCharles.Forsyth Map* mapend; 149*74a4d8c2SCharles.Forsyth 150*74a4d8c2SCharles.Forsyth Lock; 151*74a4d8c2SCharles.Forsyth }; 152*74a4d8c2SCharles.Forsyth 153*74a4d8c2SCharles.Forsyth struct Power { 154*74a4d8c2SCharles.Forsyth Dev* dev; 155*74a4d8c2SCharles.Forsyth int (*powerdown)(Power*); 156*74a4d8c2SCharles.Forsyth int (*powerup)(Power*); 157*74a4d8c2SCharles.Forsyth int state; 158*74a4d8c2SCharles.Forsyth void* arg; 159*74a4d8c2SCharles.Forsyth }; 160*74a4d8c2SCharles.Forsyth 161*74a4d8c2SCharles.Forsyth extern register Mach *m; 162*74a4d8c2SCharles.Forsyth extern register Proc *up; 163