ref: babf901b4a508c3ec5d1f89655f10377bbdf9637
dir: /os/fads/dat.h/
typedef struct Conf Conf;
typedef struct FPU FPU;
typedef struct FPenv FPenv;
typedef struct IMM IMM;
typedef struct Irqctl Irqctl;
typedef struct ISAConf ISAConf;
typedef struct Label Label;
typedef struct Lock Lock;
typedef struct Mach Mach;
typedef struct Map Map;
typedef struct Power Power;
typedef struct RMap RMap;
typedef struct Ureg Ureg;
typedef ulong Instr;
#define MACHP(n) (n==0? &mach0 : *(Mach**)0)
struct Lock
{
ulong key;
ulong pc;
ulong sr;
int pri;
};
struct Label
{
ulong sp;
ulong pc;
};
/*
* Proc.fpstate
*/
enum
{
FPINIT,
FPACTIVE,
FPINACTIVE,
};
/*
* This structure must agree with FPsave and FPrestore asm routines
*/
struct FPenv
{
union {
double fpscrd;
struct {
ulong pad;
ulong fpscr;
};
};
int fpistate; /* emulated fp */
ulong emreg[32][3]; /* emulated fp */
};
/*
* This structure must agree with fpsave and fprestore asm routines
*/
struct FPU
{
double fpreg[32];
FPenv env;
};
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 base0; /* base of bank 0 */
ulong base1; /* base of bank 1 */
ulong ialloc; /* max interrupt time allocation in bytes */
int nscc; /* number of SCCs implemented */
ulong smcuarts; /* bits for SMCs to define as eiaN */
ulong sccuarts; /* bits for SCCs to define as eiaN */
int nocts2; /* CTS2 and CD2 aren't connected */
uchar* nvrambase; /* virtual address of nvram */
ulong nvramsize; /* size in bytes */
};
#include "../port/portdat.h"
/*
* machine dependent definitions not used by ../port/dat.h
*/
struct Mach
{
/* OFFSETS OF THE FOLLOWING KNOWN BY l.s */
int machno; /* physical id of processor (unused) */
ulong splpc; /* pc of last caller to splhi (unused) */
int mmask; /* 1<<m->machno (unused) */
/* ordering from here on irrelevant */
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 */
int nrdy;
int speed; /* general system clock in MHz */
long oscclk; /* oscillator frequency (MHz) */
long cpuhz; /* general system clock (cycles) */
long clockgen; /* clock generator frequency (cycles) */
int cputype;
ulong delayloop;
ulong* bcsr;
IMM* iomem; /* MPC8xx internal i/o control memory */
/* MUST BE LAST */
int stack[1];
};
extern Mach mach0;
/*
* a parsed .ini line
*/
#define NISAOPT 8
struct ISAConf {
char* type;
ulong port;
ulong irq;
ulong mem;
int dma;
ulong size;
ulong freq;
uchar bus;
int nopt;
char* opt[NISAOPT];
};
struct Map {
int size;
ulong addr;
};
struct RMap {
char* name;
Map* map;
Map* mapend;
Lock;
};
struct Power {
Dev* dev;
int (*powerdown)(Power*);
int (*powerup)(Power*);
int state;
void* arg;
};
extern register Mach *m;
extern register Proc *up;