Charles.Forsyth20060303644188019 years agoHistory
156 lines · 3.9 KB · C
RawDownload
/* * Memory and machine-specific definitions.  Used in C and assembler. */ /* * Sizes */ #define	BI2BY		8			/* bits per byte */#define BI2WD		32			/* bits per word */#define	BY2WD		4			/* bytes per word */#define	BY2V		8			/* bytes per double word */#define	BY2PG		4096			/* bytes per page */#define	WD2PG		(BY2PG/BY2WD)		/* words per page */#define	PGSHIFT		12			/* log(BY2PG) */#define ROUND(s, sz)	(((s)+(sz-1))&~(sz-1))#define PGROUND(s)	ROUND(s, BY2PG)#define	CACHELINELOG	4#define CACHELINESZ	(1<<CACHELINELOG) #define	MAXMACH		1			/* max # cpus system can run */#define	MACHSIZE	BY2PG /* * Time */#define HZ		100			/* clock frequency */#define	MS2HZ		(1000/HZ)		/* millisec per clock tick */#define	TK2SEC(t)	((t)/HZ)		/* ticks to seconds */#define	MS2TK(t)	((t)/MS2HZ)		/* milliseconds to ticks */#define	MHz	1000000 /* * MSR bits */ #define	POW	0x40000	/* enable power mgmt */#define	TGPR	0x20000	/* GPR0-3 remapped; 603/603e specific */#define	ILE	0x10000	/* interrupts little endian */#define	EE	0x08000	/* enable external/decrementer interrupts */#define	PR	0x04000	/* =1, user mode */#define	FPE	0x02000	/* enable floating point */#define	ME	0x01000	/* enable machine check exceptions */#define	FE0	0x00800#define	SE	0x00400	/* single-step trace */#define	BE	0x00200	/* branch trace */#define	FE1	0x00100#define	MSR_IP	0x00040	/* =0, vector to nnnnn; =1, vector to FFFnnnnn */#define	IR	0x00020	/* enable instruction address translation */#define	DR	0x00010	/* enable data address translation */#define	RI	0x00002	/* exception is recoverable */#define	LE	0x00001	/* little endian mode */ #define	KMSR	(ME|FE0|FE1|FPE)#define	UMSR	(KMSR|PR|EE|IR|DR) /* * Magic registers */ #define	MACH		30		/* R30 is m-> */#define	USER		29		/* R29 is up-> */#define	IOMEMR		28		/* R28 will be iomem-> */ /* * Fundamental addresses */ #define	UREGSIZE	((8+32)*4) /* * MMU */ /* L1 table entry and Mx_TWC flags */#define PTEVALID	(1<<0)#define PTEWT		(1<<1)	/* write through */#define PTE4K		(0<<2)#define PTE512K	(1<<2)#define PTE8MB	(3<<2)#define PTEG		(1<<4)	/* guarded */ /* L2 table entry and Mx_RPN flags (also PTEVALID) */#define PTECI		(1<<1)	/*  cache inhibit */#define PTESH		(1<<2)	/* page is shared; ASID ignored */#define PTELPS		(1<<3)	/* large page size */#define PTEWRITE	0x9F0 /* TLB and MxEPN flag */#define	TLBVALID	(1<<9) /* * Address spaces */ #define	KUSEG	0x00000000#define KSEG0	0x20000000#define	KSEGM	0xE0000000	/* mask to check which seg */ #define	KZERO	KSEG0			/* base of kernel address space */#define	KTZERO	(KZERO+0x3000)	/* first address in kernel text */#define	KSTACK	8192	/* Size of kernel stack */ /* * Exception codes (trap vectors) */#define	CRESET	0x01#define	CMCHECK 0x02#define	CDSI	0x03#define	CISI	0x04#define	CEI	0x05#define	CALIGN	0x06#define	CPROG	0x07#define	CFPU	0x08#define	CDEC	0x09#define	CSYSCALL 0x0C#define	CTRACE	0x0D#define	CFPA	0x0E/* rest are power-implementation dependent (8xx) */#define	CEMU	0x10#define	CIMISS	0x11#define	CDMISS	0x12#define	CITLBE	0x13#define	CDTLBE	0x14#define	CDBREAK	0x1C#define	CIBREAK	0x1D#define	CPBREAK	0x1E#define	CDPORT	0x1F /* * MPC8xx physical addresses (ipEngine) */#define	PHYSDRAM	0x00000000#define	PHYSIMM	0xFF000000#define	PHYSFLASH	0xFE000000#define	FPGAMEM	0xFC000000 /* extra addresses on ipEngine-1 */#define	FPGACR	0xFF010000	/* FPGA control */#define	CLOCKCR	0xFF020000	/* Clock synthesiser register */ /* remaining ones are our choice */#define	PHYSPCMCIA	0x40000000#define	PCMCIALEN	(8*MB)	/* chosen to allow mapping by single TLB entry */#define	ISAIO	PHYSPCMCIA	/* for inb.s */ /* * MPC8xx dual-ported CPM memory physical addresses */#define	PHYSDPRAM	(PHYSIMM+0x2000)#define	DPLEN1	0x200#define	DPLEN2	0x400#define	DPLEN3	0x800#define	DPBASE	(PHYSDPRAM+DPLEN1) #define KEEP_ALIVE_KEY 0x55ccaa33	/* clock and rtc register key */