V10/lsys/sys/qbio.h

/*
 * I/O space registers for MicroVAXes
 *
 * a chunk of virtual address space containing
 * - a page of CPU regs
 * - a page of watch chip or NVRAM
 * - maybe another page of cache-related regs
 * - 8192*4 bytes of Q-bus IO map
 * - 8192 bytes of Q-bus IO registers
 *
 * someday, if MicroVAXes get more complicated,
 * this will have to be several files
 */

/*
 * cpu registers: physical 0x20080000
 */
struct cpuregs {
	long junk0;		/* bdr or scr -- we don't use it */
	long mser;		/* II: memory system errors */
	long cear;		/* II: addr of cpu mem err */
	long dear;		/* addr of dma mem err */
	long qbm;		/* III: q-bus map base */
	long junk1[75];
	long memcsr16;		/* III: mem error flags */
	long memcsr17;		/* III: mem error controls */
	long junk2[46];
};

#define	dser	mser		/* III: dma system error */
#define	qbear	cear		/* III: Q-bus err addr */

/*
 * second-level cache register: physical 0x20084000
 * second-level cache image, for flushing: physical 
 * MicroVAX III only
 */

#define	CACHESIZE	(64*1024/4)
struct cacheregs {
	long cacr;		/* second-level cache control */
	long junk[127];
	long cd[CACHESIZE];	/* the cache itself */
};

/*
 * watch chip registers: physical 0x200b8000
 * MicroVAX II only
 * some belong to the clock,
 * some are just handy NVRAM
 * only the low 8 bits of each short is valid
 */
struct watchregs {
	short sec;		/* seconds */
	short junk0;		/* seconds alarm */
	short min;		/* minutes */
	short junk1;		/* minutes alarm */
	short hr;		/* hours */
	short junk2;		/* hours alarm */
	short junk3;		/* day of week */
	short day;		/* day of month */
	short mon;		/* month */
	short yr;		/* year */
	short csra;
	short csrb;
	short csrc;
	short csrd;
	short cpmbx;		/* console mailbox */
	short ram[49];		/* miscellaneous ram */
	long junk[96];
};

/*
 * plain old NVRAM: physical 0x20140400
 * MicroVAX III only
 * really two pages, but we only bother with one
 */

struct nvram {
	short cpmbx;		/* console mailbox */
	short m[255];		/* miscellaneous ram */
};

#define	NQMREG	8192
struct ubadev {			/* `ubadev' sic */
	long mreg[NQMREG];	/* map regs */
	char ioreg[8192];	/* Q-bus io space */
};

struct iomflow {
	struct cpuregs c;
	struct watchregs w;
	struct ubadev u[1];
};

struct iomfair {
	struct cpuregs c;
	struct nvram w;
	struct cacheregs d;
	struct ubadev u[1];
};