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

📄 mipsregs.h

📁 在 君正芯片上的mips
💻 H
📖 第 1 页 / 共 3 页
字号:
#define ST0_CH			0x00040000#define ST0_SR			0x00100000#define ST0_TS			0x00200000#define ST0_BEV			0x00400000#define ST0_RE			0x02000000#define ST0_FR			0x04000000#define ST0_CU			0xf0000000#define ST0_CU0			0x10000000#define ST0_CU1			0x20000000#define ST0_CU2			0x40000000#define ST0_CU3			0x80000000#define ST0_XX			0x80000000	/* MIPS IV naming *//* * Bitfields and bit numbers in the coprocessor 0 cause register. * * Refer to your MIPS R4xx0 manual, chapter 5 for explanation. */#define  CAUSEB_EXCCODE		2#define  CAUSEF_EXCCODE		(_ULCAST_(31)  <<  2)#define  CAUSEB_IP		8#define  CAUSEF_IP		(_ULCAST_(255) <<  8)#define  CAUSEB_IP0		8#define  CAUSEF_IP0		(_ULCAST_(1)   <<  8)#define  CAUSEB_IP1		9#define  CAUSEF_IP1		(_ULCAST_(1)   <<  9)#define  CAUSEB_IP2		10#define  CAUSEF_IP2		(_ULCAST_(1)   << 10)#define  CAUSEB_IP3		11#define  CAUSEF_IP3		(_ULCAST_(1)   << 11)#define  CAUSEB_IP4		12#define  CAUSEF_IP4		(_ULCAST_(1)   << 12)#define  CAUSEB_IP5		13#define  CAUSEF_IP5		(_ULCAST_(1)   << 13)#define  CAUSEB_IP6		14#define  CAUSEF_IP6		(_ULCAST_(1)   << 14)#define  CAUSEB_IP7		15#define  CAUSEF_IP7		(_ULCAST_(1)   << 15)#define  CAUSEB_IV		23#define  CAUSEF_IV		(_ULCAST_(1)   << 23)#define  CAUSEB_CE		28#define  CAUSEF_CE		(_ULCAST_(3)   << 28)#define  CAUSEB_BD		31#define  CAUSEF_BD		(_ULCAST_(1)   << 31)/* * Bits in the coprocessor 0 config register. *//* Generic bits.  */#define CONF_CM_CACHABLE_NO_WA		0#define CONF_CM_CACHABLE_WA		1#define CONF_CM_UNCACHED		2#define CONF_CM_CACHABLE_NONCOHERENT	3#define CONF_CM_CACHABLE_CE		4#define CONF_CM_CACHABLE_COW		5#define CONF_CM_CACHABLE_CUW		6#define CONF_CM_CACHABLE_ACCELERATED	7#define CONF_CM_CMASK			7#define CONF_BE			(_ULCAST_(1) << 15)/* Bits common to various processors.  */#define CONF_CU			(_ULCAST_(1) <<  3)#define CONF_DB			(_ULCAST_(1) <<  4)#define CONF_IB			(_ULCAST_(1) <<  5)#define CONF_DC			(_ULCAST_(7) <<  6)#define CONF_IC			(_ULCAST_(7) <<  9)#define CONF_EB			(_ULCAST_(1) << 13)#define CONF_EM			(_ULCAST_(1) << 14)#define CONF_SM			(_ULCAST_(1) << 16)#define CONF_SC			(_ULCAST_(1) << 17)#define CONF_EW			(_ULCAST_(3) << 18)#define CONF_EP			(_ULCAST_(15)<< 24)#define CONF_EC			(_ULCAST_(7) << 28)#define CONF_CM			(_ULCAST_(1) << 31)/* Bits specific to the R4xx0.  */#define R4K_CONF_SW		(_ULCAST_(1) << 20)#define R4K_CONF_SS		(_ULCAST_(1) << 21)#define R4K_CONF_SB		(_ULCAST_(3) << 22)/* Bits specific to the R5000.  */#define R5K_CONF_SE		(_ULCAST_(1) << 12)#define R5K_CONF_SS		(_ULCAST_(3) << 20)/* Bits specific to the R10000.  */#define R10K_CONF_DN		(_ULCAST_(3) <<  3)#define R10K_CONF_CT		(_ULCAST_(1) <<  5)#define R10K_CONF_PE		(_ULCAST_(1) <<  6)#define R10K_CONF_PM		(_ULCAST_(3) <<  7)#define R10K_CONF_EC		(_ULCAST_(15)<<  9)#define R10K_CONF_SB		(_ULCAST_(1) << 13)#define R10K_CONF_SK		(_ULCAST_(1) << 14)#define R10K_CONF_SS		(_ULCAST_(7) << 16)#define R10K_CONF_SC		(_ULCAST_(7) << 19)#define R10K_CONF_DC		(_ULCAST_(7) << 26)#define R10K_CONF_IC		(_ULCAST_(7) << 29)/* Bits specific to the VR41xx.  */#define VR41_CONF_CS		(_ULCAST_(1) << 12)#define VR41_CONF_M16		(_ULCAST_(1) << 20)#define VR41_CONF_AD		(_ULCAST_(1) << 23)/* Bits specific to the R30xx.  */#define R30XX_CONF_FDM		(_ULCAST_(1) << 19)#define R30XX_CONF_REV		(_ULCAST_(1) << 22)#define R30XX_CONF_AC		(_ULCAST_(1) << 23)#define R30XX_CONF_RF		(_ULCAST_(1) << 24)#define R30XX_CONF_HALT		(_ULCAST_(1) << 25)#define R30XX_CONF_FPINT	(_ULCAST_(7) << 26)#define R30XX_CONF_DBR		(_ULCAST_(1) << 29)#define R30XX_CONF_SB		(_ULCAST_(1) << 30)#define R30XX_CONF_LOCK		(_ULCAST_(1) << 31)/* Bits specific to the TX49.  */#define TX49_CONF_DC		(_ULCAST_(1) << 16)#define TX49_CONF_IC		(_ULCAST_(1) << 17)  /* conflict with CONF_SC */#define TX49_CONF_HALT		(_ULCAST_(1) << 18)#define TX49_CONF_CWFON		(_ULCAST_(1) << 27)/* Bits specific to the MIPS32/64 PRA.  */#define MIPS_CONF_MT		(_ULCAST_(7) <<  7)#define MIPS_CONF_AR		(_ULCAST_(7) << 10)#define MIPS_CONF_AT		(_ULCAST_(3) << 13)#define MIPS_CONF_M		(_ULCAST_(1) << 31)/* * R10000 performance counter definitions. * * FIXME: The R10000 performance counter opens a nice way to implement CPU *        time accounting with a precission of one cycle.  I don't have *        R10000 silicon but just a manual, so ... *//* * Events counted by counter #0 */#define CE0_CYCLES			0#define CE0_INSN_ISSUED			1#define CE0_LPSC_ISSUED			2#define CE0_S_ISSUED			3#define CE0_SC_ISSUED			4#define CE0_SC_FAILED			5#define CE0_BRANCH_DECODED		6#define CE0_QW_WB_SECONDARY		7#define CE0_CORRECTED_ECC_ERRORS	8#define CE0_ICACHE_MISSES		9#define CE0_SCACHE_I_MISSES		10#define CE0_SCACHE_I_WAY_MISSPREDICTED	11#define CE0_EXT_INTERVENTIONS_REQ	12#define CE0_EXT_INVALIDATE_REQ		13#define CE0_VIRTUAL_COHERENCY_COND	14#define CE0_INSN_GRADUATED		15/* * Events counted by counter #1 */#define CE1_CYCLES			0#define CE1_INSN_GRADUATED		1#define CE1_LPSC_GRADUATED		2#define CE1_S_GRADUATED			3#define CE1_SC_GRADUATED		4#define CE1_FP_INSN_GRADUATED		5#define CE1_QW_WB_PRIMARY		6#define CE1_TLB_REFILL			7#define CE1_BRANCH_MISSPREDICTED	8#define CE1_DCACHE_MISS			9#define CE1_SCACHE_D_MISSES		10#define CE1_SCACHE_D_WAY_MISSPREDICTED	11#define CE1_EXT_INTERVENTION_HITS	12#define CE1_EXT_INVALIDATE_REQ		13#define CE1_SP_HINT_TO_CEXCL_SC_BLOCKS	14#define CE1_SP_HINT_TO_SHARED_SC_BLOCKS	15/* * These flags define in which priviledge mode the counters count events */#define CEB_USER	8	/* Count events in user mode, EXL = ERL = 0 */#define CEB_SUPERVISOR	4	/* Count events in supvervisor mode EXL = ERL = 0 */#define CEB_KERNEL	2	/* Count events in kernel mode EXL = ERL = 0 */#define CEB_EXL		1	/* Count events with EXL = 1, ERL = 0 */#ifndef __ASSEMBLY__#define CAUSE_EXCCODE(x) ((CAUSEF_EXCCODE & (x->cp0_cause)) >> CAUSEB_EXCCODE)#define CAUSE_EPC(x) (x->cp0_epc + (((x->cp0_cause & CAUSEF_BD) >> CAUSEB_BD) << 2))/* * Functions to access the r10k performance counter and control registers */#define read_r10k_perf_cntr(counter)                            \({ unsigned int __res;                                          \        __asm__ __volatile__(                                   \        "mfpc\t%0, "STR(counter)                                \        : "=r" (__res));                                        \        __res;})#define write_r10k_perf_cntr(counter,val)                       \        __asm__ __volatile__(                                   \        "mtpc\t%0, "STR(counter)                                \        : : "r" (val));#define read_r10k_perf_cntl(counter)                            \({ unsigned int __res;                                          \        __asm__ __volatile__(                                   \        "mfps\t%0, "STR(counter)                                \        : "=r" (__res));                                        \        __res;})#define write_r10k_perf_cntl(counter,val)                       \        __asm__ __volatile__(                                   \        "mtps\t%0, "STR(counter)                                \        : : "r" (val));/* * Macros to access the system control coprocessor */#define __read_32bit_c0_register(source, sel)				\({ int __res;								\	if (sel == 0)							\		__asm__ __volatile__(					\			"mfc0\t%0, " #source "\n\t"			\			: "=r" (__res));				\	else								\		__asm__ __volatile__(					\			".set\tmips32\n\t"				\			"mfc0\t%0, " #source ", " #sel "\n\t"		\			".set\tmips0\n\t"				\			: "=r" (__res));				\	__res;								\})#define __read_64bit_c0_register(source, sel)				\({ unsigned long __res;							\	if (sel == 0)							\		__asm__ __volatile__(					\			".set\tmips3\n\t"				\			"dmfc0\t%0, " #source "\n\t"			\			".set\tmips0"					\			: "=r" (__res));				\	else								\		__asm__ __volatile__(					\			".set\tmips64\n\t"				\			"dmfc0\t%0, " #source ", " #sel "\n\t"		\			".set\tmips0"					\			: "=r" (__res));				\	__res;								\})#define __write_32bit_c0_register(register, sel, value)			\do {									\	if (sel == 0)							\		__asm__ __volatile__(					\			"mtc0\t%z0, " #register "\n\t"			\			: : "Jr" (value));				\	else								\		__asm__ __volatile__(					\			".set\tmips32\n\t"				\			"mtc0\t%z0, " #register ", " #sel "\n\t"	\			".set\tmips0"					\			: : "Jr" (value));				\} while (0)#define __write_64bit_c0_register(register, sel, value)			\do {									\	if (sel == 0)							\		__asm__ __volatile__(					\			".set\tmips3\n\t"				\			"dmtc0\t%z0, " #register "\n\t"			\			".set\tmips0"					\			: : "Jr" (value));				\	else								\		__asm__ __volatile__(					\			".set\tmips64\n\t"				\			"dmtc0\t%z0, " #register ", " #sel "\n\t"	\			".set\tmips0"					\			: : "Jr" (value));				\} while (0)#define __read_ulong_c0_register(reg, sel)				\	((sizeof(unsigned long) == 4) ?					\	__read_32bit_c0_register(reg, sel) :				\	__read_64bit_c0_register(reg, sel))#define __write_ulong_c0_register(reg, sel, val)			\do {									\	if (sizeof(unsigned long) == 4)					\		__write_32bit_c0_register(reg, sel, val);		\	else								\		__write_64bit_c0_register(reg, sel, val);		\} while (0)/* * These versions are only needed for systems with more than 38 bits of * physical address space running the 32-bit kernel.  That's none atm :-) */#define __read_64bit_c0_split(source, sel)				\({									\	unsigned long long val;						\	unsigned long flags;						\									\	local_irq_save(flags);						\	if (sel == 0)							\		__asm__ __volatile__(					\			".set\tmips64\n\t"				\			"dmfc0\t%M0, " #source "\n\t"			\			"dsll\t%L0, %M0, 32\n\t"			\			"dsrl\t%M0, %M0, 32\n\t"			\			"dsrl\t%L0, %L0, 32\n\t"			\			".set\tmips0"					\			: "=r" (val));					\	else								\		__asm__ __volatile__(					\			".set\tmips64\n\t"				\			"dmfc0\t%M0, " #source ", " #sel "\n\t"		\			"dsll\t%L0, %M0, 32\n\t"			\			"dsrl\t%M0, %M0, 32\n\t"			\			"dsrl\t%L0, %L0, 32\n\t"			\			".set\tmips0"					\			: "=r" (val));					\	local_irq_restore(flags);					\									\	val;								\})#define __write_64bit_c0_split(source, sel, val)			\do {									\	unsigned long flags;						\									\

⌨️ 快捷键说明

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