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

📄 mipsregs.h

📁 uboot详细解读可用启动引导LINUX2.6内核
💻 H
📖 第 1 页 / 共 3 页
字号:
#define write_c0_diag5(val)	__write_32bit_c0_register($22, 5, val)#define read_c0_debug()		__read_32bit_c0_register($23, 0)#define write_c0_debug(val)	__write_32bit_c0_register($23, 0, val)#define read_c0_depc()		__read_ulong_c0_register($24, 0)#define write_c0_depc(val)	__write_ulong_c0_register($24, 0, val)/* * MIPS32 / MIPS64 performance counters */#define read_c0_perfctrl0()	__read_32bit_c0_register($25, 0)#define write_c0_perfctrl0(val)	__write_32bit_c0_register($25, 0, val)#define read_c0_perfcntr0()	__read_32bit_c0_register($25, 1)#define write_c0_perfcntr0(val)	__write_32bit_c0_register($25, 1, val)#define read_c0_perfctrl1()	__read_32bit_c0_register($25, 2)#define write_c0_perfctrl1(val)	__write_32bit_c0_register($25, 2, val)#define read_c0_perfcntr1()	__read_32bit_c0_register($25, 3)#define write_c0_perfcntr1(val)	__write_32bit_c0_register($25, 3, val)#define read_c0_perfctrl2()	__read_32bit_c0_register($25, 4)#define write_c0_perfctrl2(val)	__write_32bit_c0_register($25, 4, val)#define read_c0_perfcntr2()	__read_32bit_c0_register($25, 5)#define write_c0_perfcntr2(val)	__write_32bit_c0_register($25, 5, val)#define read_c0_perfctrl3()	__read_32bit_c0_register($25, 6)#define write_c0_perfctrl3(val)	__write_32bit_c0_register($25, 6, val)#define read_c0_perfcntr3()	__read_32bit_c0_register($25, 7)#define write_c0_perfcntr3(val)	__write_32bit_c0_register($25, 7, val)/* RM9000 PerfCount performance counter register */#define read_c0_perfcount()	__read_64bit_c0_register($25, 0)#define write_c0_perfcount(val)	__write_64bit_c0_register($25, 0, val)#define read_c0_ecc()		__read_32bit_c0_register($26, 0)#define write_c0_ecc(val)	__write_32bit_c0_register($26, 0, val)#define read_c0_derraddr0()	__read_ulong_c0_register($26, 1)#define write_c0_derraddr0(val)	__write_ulong_c0_register($26, 1, val)#define read_c0_cacheerr()	__read_32bit_c0_register($27, 0)#define read_c0_derraddr1()	__read_ulong_c0_register($27, 1)#define write_c0_derraddr1(val)	__write_ulong_c0_register($27, 1, val)#define read_c0_taglo()		__read_32bit_c0_register($28, 0)#define write_c0_taglo(val)	__write_32bit_c0_register($28, 0, val)#define read_c0_dtaglo()	__read_32bit_c0_register($28, 2)#define write_c0_dtaglo(val)	__write_32bit_c0_register($28, 2, val)#define read_c0_taghi()		__read_32bit_c0_register($29, 0)#define write_c0_taghi(val)	__write_32bit_c0_register($29, 0, val)#define read_c0_errorepc()	__read_ulong_c0_register($30, 0)#define write_c0_errorepc(val)	__write_ulong_c0_register($30, 0, val)/* MIPSR2 */#define read_c0_hwrena()	__read_32bit_c0_register($7, 0)#define write_c0_hwrena(val)	__write_32bit_c0_register($7, 0, val)#define read_c0_intctl()	__read_32bit_c0_register($12, 1)#define write_c0_intctl(val)	__write_32bit_c0_register($12, 1, val)#define read_c0_srsctl()	__read_32bit_c0_register($12, 2)#define write_c0_srsctl(val)	__write_32bit_c0_register($12, 2, val)#define read_c0_srsmap()	__read_32bit_c0_register($12, 3)#define write_c0_srsmap(val)	__write_32bit_c0_register($12, 3, val)#define read_c0_ebase()		__read_32bit_c0_register($15, 1)#define write_c0_ebase(val)	__write_32bit_c0_register($15, 1, val)/* * Macros to access the floating point coprocessor control registers */#define read_32bit_cp1_register(source)				\({ int __res;							\	__asm__ __volatile__(					\	".set\tpush\n\t"					\	".set\treorder\n\t"					\	"cfc1\t%0,"STR(source)"\n\t"				\	".set\tpop"						\	: "=r" (__res));					\	__res;})#define rddsp(mask)							\({									\	unsigned int __res;						\									\	__asm__ __volatile__(						\	"	.set	push				\n"		\	"	.set	noat				\n"		\	"	# rddsp $1, %x1				\n"		\	"	.word	0x7c000cb8 | (%x1 << 16)	\n"		\	"	move	%0, $1				\n"		\	"	.set	pop				\n"		\	: "=r" (__res)							\	: "i" (mask));							\	__res;								\})#define wrdsp(val, mask)						\do {									\	__asm__ __volatile__(						\	"	.set	push					\n"	\	"	.set	noat					\n"	\	"	move	$1, %0					\n"	\	"	# wrdsp $1, %x1					\n"	\	"	.word	0x7c2004f8 | (%x1 << 11)		\n"	\	"	.set	pop					\n"	\	:								\	: "r" (val), "i" (mask));					\} while (0)#define mfhi0()								\({									\	unsigned long __treg;						\									\	__asm__ __volatile__(						\	"	.set	push			\n"			\	"	.set	noat			\n"			\	"	# mfhi	%0, $ac0		\n"			\	"	.word	0x00000810		\n"			\	"	move	%0, $1			\n"			\	"	.set	pop			\n"			\	: "=r" (__treg));						\	__treg;								\})#define mfhi1()								\({									\	unsigned long __treg;						\									\	__asm__ __volatile__(						\	"	.set	push			\n"			\	"	.set	noat			\n"			\	"	# mfhi	%0, $ac1		\n"			\	"	.word	0x00200810		\n"			\	"	move	%0, $1			\n"			\	"	.set	pop			\n"			\	: "=r" (__treg));						\	__treg;								\})#define mfhi2()								\({									\	unsigned long __treg;						\									\	__asm__ __volatile__(						\	"	.set	push			\n"			\	"	.set	noat			\n"			\	"	# mfhi	%0, $ac2		\n"			\	"	.word	0x00400810		\n"			\	"	move	%0, $1			\n"			\	"	.set	pop			\n"			\	: "=r" (__treg));						\	__treg;								\})#define mfhi3()								\({									\	unsigned long __treg;						\									\	__asm__ __volatile__(						\	"	.set	push			\n"			\	"	.set	noat			\n"			\	"	# mfhi	%0, $ac3		\n"			\	"	.word	0x00600810		\n"			\	"	move	%0, $1			\n"			\	"	.set	pop			\n"			\	: "=r" (__treg));						\	__treg;								\})#define mflo0()								\({									\	unsigned long __treg;						\									\	__asm__ __volatile__(						\	"	.set	push			\n"			\	"	.set	noat			\n"			\	"	# mflo	%0, $ac0		\n"			\	"	.word	0x00000812		\n"			\	"	move	%0, $1			\n"			\	"	.set	pop			\n"			\	: "=r" (__treg));						\	__treg;								\})#define mflo1()								\({									\	unsigned long __treg;						\									\	__asm__ __volatile__(						\	"	.set	push			\n"			\	"	.set	noat			\n"			\	"	# mflo	%0, $ac1		\n"			\	"	.word	0x00200812		\n"			\	"	move	%0, $1			\n"			\	"	.set	pop			\n"			\	: "=r" (__treg));						\	__treg;								\})#define mflo2()								\({									\	unsigned long __treg;						\									\	__asm__ __volatile__(						\	"	.set	push			\n"			\	"	.set	noat			\n"			\	"	# mflo	%0, $ac2		\n"			\	"	.word	0x00400812		\n"			\	"	move	%0, $1			\n"			\	"	.set	pop			\n"			\	: "=r" (__treg));						\	__treg;								\})#define mflo3()								\({									\	unsigned long __treg;						\									\	__asm__ __volatile__(						\	"	.set	push			\n"			\	"	.set	noat			\n"			\	"	# mflo	%0, $ac3		\n"			\	"	.word	0x00600812		\n"			\	"	move	%0, $1			\n"			\	"	.set	pop			\n"			\	: "=r" (__treg));						\	__treg;								\})#define mthi0(x)							\do {									\	__asm__ __volatile__(						\	"	.set	push					\n"	\	"	.set	noat					\n"	\	"	move	$1, %0					\n"	\	"	# mthi	$1, $ac0				\n"	\	"	.word	0x00200011				\n"	\	"	.set	pop					\n"	\	:								\	: "r" (x));							\} while (0)#define mthi1(x)							\do {									\	__asm__ __volatile__(						\	"	.set	push					\n"	\	"	.set	noat					\n"	\	"	move	$1, %0					\n"	\	"	# mthi	$1, $ac1				\n"	\	"	.word	0x00200811				\n"	\	"	.set	pop					\n"	\	:								\	: "r" (x));							\} while (0)#define mthi2(x)							\do {									\	__asm__ __volatile__(						\	"	.set	push					\n"	\	"	.set	noat					\n"	\	"	move	$1, %0					\n"	\	"	# mthi	$1, $ac2				\n"	\	"	.word	0x00201011				\n"	\	"	.set	pop					\n"	\	:								\	: "r" (x));							\} while (0)#define mthi3(x)							\do {									\	__asm__ __volatile__(						\	"	.set	push					\n"	\	"	.set	noat					\n"	\	"	move	$1, %0					\n"	\	"	# mthi	$1, $ac3				\n"	\	"	.word	0x00201811				\n"	\	"	.set	pop					\n"	\	:								\	: "r" (x));							\} while (0)#define mtlo0(x)							\do {									\	__asm__ __volatile__(						\	"	.set	push					\n"	\	"	.set	noat					\n"	\	"	move	$1, %0					\n"	\	"	# mtlo	$1, $ac0				\n"	\	"	.word	0x00200013				\n"	\	"	.set	pop					\n"	\	:								\	: "r" (x));							\} while (0)#define mtlo1(x)							\do {									\	__asm__ __volatile__(						\	"	.set	push					\n"	\	"	.set	noat					\n"	\	"	move	$1, %0					\n"	\	"	# mtlo	$1, $ac1				\n"	\	"	.word	0x00200813				\n"	\	"	.set	pop					\n"	\	:								\	: "r" (x));							\} while (0)#define mtlo2(x)							\do {									\	__asm__ __volatile__(						\	"	.set	push					\n"	\	"	.set	noat					\n"	\	"	move	$1, %0					\n"	\	"	# mtlo	$1, $ac2				\n"	\	"	.word	0x00201013				\n"	\	"	.set	pop					\n"	\	:								\	: "r" (x));							\} while (0)#define mtlo3(x)							\do {									\	__asm__ __volatile__(						\	"	.set	push					\n"	\	"	.set	noat					\n"	\	"	move	$1, %0					\n"	\	"	# mtlo	$1, $ac3				\n"	\	"	.word	0x00201813				\n"	\	"	.set	pop					\n"	\	:								\	: "r" (x));							\} while (0)/* * TLB operations. * * It is responsibility of the caller to take care of any TLB hazards. */static inline void tlb_probe(void){	__asm__ __volatile__(		".set noreorder\n\t"		"tlbp\n\t"		".set reorder");}static inline void tlb_read(void){#if MIPS34K_MISSED_ITLB_WAR	int res = 0;	__asm__ __volatile__(	"	.set	push					\n"	"	.set	noreorder				\n"	"	.set	noat					\n"	"	.set	mips32r2				\n"	"	.word	0x41610001		# dvpe $1	\n"	"	move	%0, $1					\n"	"	ehb						\n"	"	.set	pop					\n"	: "=r" (res));	instruction_hazard();#endif	__asm__ __volatile__(		".set noreorder\n\t"		"tlbr\n\t"		".set reorder");#if MIPS34K_MISSED_ITLB_WAR	if ((res & _ULCAST_(1)))		__asm__ __volatile__(		"	.set	push				\n"		"	.set	noreorder			\n"		"	.set	noat				\n"		"	.set	mips32r2			\n"		"	.word	0x41600021	# evpe		\n"		"	ehb					\n"		"	.set	pop				\n");#endif}static inline void tlb_write_indexed(void){	__asm__ __volatile__(		".set noreorder\n\t"		"tlbwi\n\t"		".set reorder");}static inline void tlb_write_random(void){	__asm__ __volatile__(		".set noreorder\n\t"		"tlbwr\n\t"		".set reorder");}/* * Manipulate bits in a c0 register. */#define __BUILD_SET_C0(name)					\static inline unsigned int					\set_c0_##name(unsigned int set)					\{								\	unsigned int res;					\								\	res = read_c0_##name();					\	res |= set;						\	write_c0_##name(res);					\								\	return res;						\}								\								\static inline unsigned int					\clear_c0_##name(unsigned int clear)				\{								\	unsigned int res;					\								\	res = read_c0_##name();					\	res &= ~clear;						\	write_c0_##name(res);					\								\	return res;						\}								\								\static inline unsigned int					\change_c0_##name(unsigned int change, unsigned int new)		\{								\	unsigned int res;					\								\	res = read_c0_##name();					\	res &= ~change;						\	res |= (new & change);					\	write_c0_##name(res);					\								\	return res;						\}__BUILD_SET_C0(status)__BUILD_SET_C0(cause)__BUILD_SET_C0(config)__BUILD_SET_C0(intcontrol)__BUILD_SET_C0(intctl)__BUILD_SET_C0(srsmap)#endif /* !__ASSEMBLY__ */#endif /* _ASM_MIPSREGS_H */

⌨️ 快捷键说明

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