⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 r3000.h

📁 很好的一个嵌入式linux平台下的bootloader
💻 H
字号:
/* * r3000.h : SDE R3000 coprocessor 0 definitions * Copyright (c) 1992 Algorithmics Ltd. */#ifndef _R3000_H_#define _R3000_H_/* * R3000 Exception Codes */#define EXC_INTR	0x0       /* interrupt */                        #define EXC_MOD		0x1       /* tlb modification */                 #define EXC_TLBL	0x2       /* tlb miss (load/i-fetch) */          #define EXC_TLBS	0x3       /* tlb miss (store) */                 #define EXC_ADEL	0x4       /* address error (load/i-fetch) */     #define EXC_ADES	0x5       /* address error (store) */            #define EXC_IBE		0x6       /* bus error (i-fetch) */              #define EXC_DBE		0x7       /* data bus error (load/store) */      #define EXC_SYS		0x8       /* system call */                      #define EXC_BP		0x9       /* breakpoint */                       #define EXC_RI		0xa       /* reserved instruction */             #define EXC_CPU		0xb       /* coprocessor unusable */             #define EXC_OVF		0xc       /* integer overflow */                 #define EXC_RESD	0xd#define EXC_RESE	0xe#define EXC_RESF	0xf/* * R3000 Cause Register  */#define CR_BD		0x80000000      /* branch delay */   #define CR_CEMASK	0x30000000      /* coprocessor used */#define CR_CESHIFT	28/* interrupt pending bits */	                             #define CR_SINT0	0x00000100      /* s/w interrupt 0 */#define CR_SINT1	0x00000200      /* s/w interrupt 1 */#define CR_HINT0	0x00000400      /* h/w interrupt 0 */#define CR_HINT1	0x00000800      /* h/w interrupt 1 */#define CR_HINT2	0x00001000      /* h/w interrupt 2 */#define CR_HINT3	0x00002000      /* h/w interrupt 3 */#define CR_HINT4	0x00004000      /* h/w interrupt 4 */#define CR_HINT5	0x00008000      /* h/w interrupt 5 *//* alternative interrupt pending bit naming */#define CR_IP0		0x00000100#define CR_IP1		0x00000200#define CR_IP2		0x00000400#define CR_IP3		0x00000800#define CR_IP4		0x00001000#define CR_IP5		0x00002000#define CR_IP6		0x00004000#define CR_IP7		0x00008000#define CR_IMASK	0x0000ff00 	/* interrupt pending mask */#define CR_XMASK	0x0000007c 	/* exception code mask */#define CR_XCPT(x)	((x)<<2)/* * R3000 Status Register  */#define SR_IEC		0x00000001	/* interrupt enable current */#define SR_KUC		0x00000002	/* kernel mode current */#define SR_IEP		0x00000004	/* interrupt enable prev */#define SR_KUP		0x00000008	/* kernel mode prev */#define SR_IEO		0x00000010	/* interrupt enable old */#define SR_KUO		0x00000020	/* kernel mode old */#define SR_IE		SR_IEC		/* generic alias for int enable */#define SR_SINT0	0x00000100      /* enable s/w interrupt 0 */#define SR_SINT1	0x00000200      /* enable s/w interrupt 0 */#define SR_HINT0	0x00000400      /* enable h/w interrupt 1 */#define SR_HINT1	0x00000800      /* enable h/w interrupt 2 */#define SR_HINT2	0x00001000      /* enable h/w interrupt 3 */#define SR_HINT3	0x00002000      /* enable h/w interrupt 4 */#define SR_HINT4	0x00004000      /* enable h/w interrupt 5 */#define SR_HINT5	0x00008000      /* enable h/w interrupt 6 *//* alternative interrupt mask naming */#define SR_IM0		0x00000100#define SR_IM1		0x00000200#define SR_IM2		0x00000400#define SR_IM3		0x00000800#define SR_IM4		0x00001000#define SR_IM5		0x00002000#define SR_IM6		0x00004000#define SR_IM7		0x00008000#define SR_IMASK	0x0000ff00/* diagnostic field */#define SR_ISC		0x00010000	/* isolate caches */#define SR_SWC		0x00020000	/* swap caches */#define SR_PZ		0x00040000	/* cache parity zero */#define SR_CM		0x00080000	/* cache miss */#define SR_PE		0x00100000	/* cache parity error */#define SR_TS		0x00200000	/* tlb shutdown */#define SR_BEV		0x00400000	/* boot exception vectors */#define SR_RE		0x02000000	/* reverse endian (user mode) */#define SR_CU0		0x10000000      /* coprocessor 0 enable */#define SR_CU1		0x20000000      /* coprocessor 1 enable */#define SR_CU2		0x40000000      /* coprocessor 2 enable */#define SR_CU3		0x80000000      /* coprocessor 3 enable *//* R3000 EntryHi bits */#define TLBHI_VPNMASK	0xfffff000#define TLBHI_VPNSHIFT	12#define TLBHI_PIDMASK	0x00000fc0#define TLBHI_PIDSHIFT	6/* R3000 EntryLo bits */#define TLB_PFNMASK	0xfffff000#define TLB_PFNSHIFT	12#define TLB_FLAGS	0x00000f00#define TLB_N		0x00000800#define TLB_D		0x00000400#define TLB_V		0x00000200#define TLB_G		0x00000100/* R3000 Index bits */#define TLBIDX_MASK	0x3f00#define TLBIDX_SHIFT	8/* R3000 Random bits */#define TLBRAND_MASK	0x3f00#define TLBRAND_SHIFT	8#define NTLBID		64	/* total number of tlb entries */#define NTLBWIRED	8	/* number of wired tlb entries */#ifndef ROM_BASE#define ROM_BASE	0xbfc00000	/* standard ROM base address */#endif#ifdef __ASSEMBLER__#define C0_INDEX	$0#define C0_INX		$0#define C0_RANDOM	$1#define C0_RAND		$1#define C0_ENTRYLO	$2#define C0_TLBLO	$2#define C0_CONTEXT	$4#define C0_CTXT		$4#define C0_BADVADDR 	$8#define C0_VADDR 	$8#define C0_ENTRYHI	$10#define C0_TLBHI	$10#define C0_STATUS	$12#define C0_SR		$12#define C0_CAUSE	$13#define C0_CR		$13#define C0_EPC 		$14#define C0_PRID		$15$index		=	$0$random		=	$1$entrylo	=	$2$context	=	$4$vaddr 		=	$8$entryhi	=	$10$sr		=	$12$cr		=	$13$epc 		=	$14$prid		=	$15/*  * R3000 virtual memory regions  */#define	KSEG0_BASE	0x80000000#define	KSEG1_BASE	0xa0000000#define	KSEG2_BASE	0xc0000000#define KUSEG_SIZE	0x80000000#define KSEG0_SIZE	0x20000000#define KSEG1_SIZE	0x20000000#define KSEG2_SIZE	0x40000000#define RVEC_BASE	ROM_BASE/*  * Translate a kernel virtual address in KSEG0 or KSEG1 to a real * physical address and back. */#define KVA_TO_PA(v) 	((v) & 0x1fffffff)#define PA_TO_KVA0(pa)	((pa) | 0x80000000)#define PA_TO_KVA1(pa)	((pa) | 0xa0000000)/* translate between KSEG0 and KSEG1 virtual addresses */#define KVA0_TO_KVA1(v)	((v) | 0x20000000)#define KVA1_TO_KVA0(v)	((v) & ~0x20000000)#else#define C0_INDEX	0#define C0_INX		0#define C0_RANDOM	1#define C0_RAND		1#define C0_ENTRYLO	2#define C0_TLBLO	2#define C0_CONTEXT	4#define C0_CTXT		4#define C0_BADVADDR 	8#define C0_VADDR 	8#define C0_ENTRYHI	10#define C0_TLBHI	10#define C0_STATUS	12#define C0_SR		12#define C0_CAUSE	13#define C0_CR		13#define C0_EPC 		14#define C0_PRID		15/*  * R3000 virtual memory regions  */#define KUSEG_BASE 	((void  *)0x00000000)#define KSEG0_BASE	((void  *)0x80000000)#define KSEG1_BASE	((void  *)0xa0000000)#define KSEG2_BASE	((void  *)0xc0000000)#define KUSEG_SIZE	0x80000000u#define KSEG0_SIZE	0x20000000u#define KSEG1_SIZE	0x20000000u#define KSEG2_SIZE	0x40000000u#define RVEC_BASE	((void *)ROM_BASE)	/* reset vector base *//*  * Translate a kernel virtual address in KSEG0 or KSEG1 to a real * physical address and back. */#define KVA_TO_PA(v) 	((paddr_t)(v) & 0x1fffffff)#define PA_TO_KVA0(pa)	((void *) ((pa) | 0x80000000))#define PA_TO_KVA1(pa)	((void *) ((pa) | 0xa0000000))/* translate between KSEG0 and KSEG1 virtual addresses */#define KVA0_TO_KVA1(v)	((void *) ((unsigned)(v) | 0x20000000))#define KVA1_TO_KVA0(v)	((void *) ((unsigned)(v) & ~0x20000000))/* Test for KSEGS */#define IS_KVA(v)	((int)(v) < 0)#define IS_KVA0(v)	(((unsigned)(v) >> 29) == 0x4)#define IS_KVA1(v)	(((unsigned)(v) >> 29) == 0x5)#define IS_KVA01(v)	(((unsigned)(v) >> 30) == 0x2)#define IS_KVA2(v)	(((unsigned)(v) >> 30) == 0x3)#define IS_UVA(v)	((int)(v) >= 0)/* convert register type to address and back */#define VA_TO_REG(v)	((long)(v))#define REG_TO_VA(v)	((void *)(v))/* * R3000 fixed virtual memory page size. */#define VMPGSIZE 	4096#define VMPGMASK 	(VMPGSIZE-1)#define VMPGSHIFT 	12#endif /* !ASSEMBLER */#endif /* _R3000_H_ */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -