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

📄 ppc_asm.tmpl

📁 F:worksip2440a board可启动u-boot-like.tar.gz F:worksip2440a board可启动u-boot-like.tar.gz
💻 TMPL
字号:
/* * (C) Copyright 2000-2002 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * See file CREDITS for list of people who contributed to this * project. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA *//* * This file contains all the macros and symbols which define * a PowerPC assembly language environment. */#ifndef	__PPC_ASM_TMPL__#define __PPC_ASM_TMPL__/*************************************************************************** * * These definitions simplify the ugly declarations necessary for GOT * definitions. * * Stolen from prepboot/bootldr.h, (C) 1998 Gabriel Paubert, paubert@iram.es * * Uses r14 to access the GOT */#define START_GOT			\	.section	".got2","aw";	\.LCTOC1 = .+32768#define END_GOT				\	.text#define GET_GOT				\	bl	1f		;	\	.text	2		;	\0:	.long	.LCTOC1-1f	;	\	.text			;	\1:	mflr	r14		;	\	lwz	r0,0b-1b(r14)	;	\	add	r14,r0,r14	;#define GOT_ENTRY(NAME)		.L_ ## NAME = . - .LCTOC1 ; .long NAME#define GOT(NAME)		.L_ ## NAME (r14)/*************************************************************************** * Register names */#define	r0	0#define	r1	1#define	r2	2#define	r3	3#define	r4	4#define	r5	5#define	r6	6#define	r7	7#define	r8	8#define	r9	9#define	r10	10#define	r11	11#define	r12	12#define	r13	13#define	r14	14#define	r15	15#define	r16	16#define	r17	17#define	r18	18#define	r19	19#define	r20	20#define	r21	21#define	r22	22#define	r23	23#define	r24	24#define	r25	25#define	r26	26#define	r27	27#define	r28	28#define	r29	29#define	r30	30#define	r31	31#if defined(CONFIG_8xx) || defined(CONFIG_MPC824X)/* Some special registers */#define ICR	148	/* Interrupt Cause Register (37-44) */#define DER	149#define COUNTA	150	/* Breakpoint Counter	    (37-44) */#define COUNTB	151	/* Breakpoint Counter	    (37-44) */#define LCTRL1	156	/* Load/Store Support	    (37-40) */#define LCTRL2	157	/* Load/Store Support	    (37-41) */#define ICTRL	158#endif	/* CONFIG_8xx, CONFIG_MPC824X */#if  defined(CONFIG_5xx)/* Some special purpose registers */#define DER	149		/* Debug Enable Register	    	*/#define COUNTA	150		/* Breakpoint Counter	    	 	*/#define COUNTB	151		/* Breakpoint Counter	    	 	*/#define LCTRL1	156		/* Load/Store Support	    	 	*/#define LCTRL2	157		/* Load/Store Support	    	 	*/#define ICTRL	158		/* I-Bus Support Control Register	*/#define EID	81#endif	/* CONFIG_5xx */#if defined(CONFIG_8xx)/* Registers in the processor's internal memory map that we use.*/#define SYPCR	0x00000004#define BR0	0x00000100#define OR0	0x00000104#define BR1	0x00000108#define OR1	0x0000010c#define BR2	0x00000110#define OR2	0x00000114#define BR3	0x00000118#define OR3	0x0000011c#define BR4	0x00000120#define OR4	0x00000124#define MAR	0x00000164#define MCR	0x00000168#define MAMR	0x00000170#define MBMR	0x00000174#define MSTAT	0x00000178#define MPTPR	0x0000017a#define MDR	0x0000017c#define TBSCR	0x00000200#define TBREFF0	0x00000204#define PLPRCR	0x00000284#elif defined(CONFIG_8260)#define HID2		1011#define HID0_IFEM	(1<<7)#define HID0_ICE_BITPOS	16#define HID0_DCE_BITPOS	17#define IM_REGBASE	0x10000#define IM_SYPCR	(IM_REGBASE+0x0004)#define IM_SWSR		(IM_REGBASE+0x000e)#define IM_BR0		(IM_REGBASE+0x0100)#define IM_OR0		(IM_REGBASE+0x0104)#define IM_BR1		(IM_REGBASE+0x0108)#define IM_OR1		(IM_REGBASE+0x010c)#define IM_BR2		(IM_REGBASE+0x0110)#define IM_OR2		(IM_REGBASE+0x0114)#define IM_MPTPR	(IM_REGBASE+0x0184)#define IM_PSDMR	(IM_REGBASE+0x0190)#define IM_PSRT		(IM_REGBASE+0x019c)#define IM_IMMR		(IM_REGBASE+0x01a8)#define IM_SCCR		(IM_REGBASE+0x0c80)#elif defined(CONFIG_MPC5xxx) || defined(CONFIG_MPC8220)#define HID0_ICE_BITPOS	16#define HID0_DCE_BITPOS	17#endif#define curptr r2#define SYNC \	sync; \	isync/* * Macros for storing registers into and loading registers from * exception frames. */#define SAVE_GPR(n, base)	stw	n,GPR0+4*(n)(base)#define SAVE_2GPRS(n, base)	SAVE_GPR(n, base); SAVE_GPR(n+1, base)#define SAVE_4GPRS(n, base)	SAVE_2GPRS(n, base); SAVE_2GPRS(n+2, base)#define SAVE_8GPRS(n, base)	SAVE_4GPRS(n, base); SAVE_4GPRS(n+4, base)#define SAVE_10GPRS(n, base)	SAVE_8GPRS(n, base); SAVE_2GPRS(n+8, base)#define REST_GPR(n, base)	lwz	n,GPR0+4*(n)(base)#define REST_2GPRS(n, base)	REST_GPR(n, base); REST_GPR(n+1, base)#define REST_4GPRS(n, base)	REST_2GPRS(n, base); REST_2GPRS(n+2, base)#define REST_8GPRS(n, base)	REST_4GPRS(n, base); REST_4GPRS(n+4, base)#define REST_10GPRS(n, base)	REST_8GPRS(n, base); REST_2GPRS(n+8, base)/* * GCC sometimes accesses words at negative offsets from the stack * pointer, although the SysV ABI says it shouldn't.  To cope with * this, we leave this much untouched space on the stack on exception * entry. */#define STACK_UNDERHEAD	64/* * Exception entry code.  This code runs with address translation * turned off, i.e. using physical addresses. * We assume sprg3 has the physical address of the current * task's thread_struct. */#define EXCEPTION_PROLOG	\	mtspr	SPRG0,r20;	\	mtspr	SPRG1,r21;	\	mfcr	r20;		\	subi	r21,r1,INT_FRAME_SIZE+STACK_UNDERHEAD;	/* alloc exc. frame */\	stw	r20,_CCR(r21);		/* save registers */ \	stw	r22,GPR22(r21);	\	stw	r23,GPR23(r21);	\	mfspr	r20,SPRG0;	\	stw	r20,GPR20(r21);	\	mfspr	r22,SPRG1;	\	stw	r22,GPR21(r21);	\	mflr	r20;		\	stw	r20,_LINK(r21);	\	mfctr	r22;		\	stw	r22,_CTR(r21);	\	mfspr	r20,XER;	\	stw	r20,_XER(r21);	\	mfspr	r22,SRR0;	\	mfspr	r23,SRR1;	\	stw	r0,GPR0(r21);	\	stw	r1,GPR1(r21);	\	stw	r2,GPR2(r21);	\	stw	r1,0(r21);	\	mr	r1,r21;			/* set new kernel sp */	\	SAVE_4GPRS(3, r21);/* * Note: code which follows this uses cr0.eq (set if from kernel), * r21, r22 (SRR0), and r23 (SRR1). *//* * Critical exception entry code.  This is just like the other exception * code except that it uses SRR2 and SRR3 instead of SRR0 and SRR1. */#define CRITICAL_EXCEPTION_PROLOG       \	mtspr   SPRG0,r20;      \	mtspr   SPRG1,r21;      \	mfcr    r20;            \	subi    r21,r1,INT_FRAME_SIZE+STACK_UNDERHEAD;  /* alloc exc. frame */\	stw     r20,_CCR(r21);          /* save registers */ \	stw     r22,GPR22(r21); \	stw     r23,GPR23(r21); \	mfspr   r20,SPRG0;      \	stw     r20,GPR20(r21); \	mfspr   r22,SPRG1;      \	stw     r22,GPR21(r21); \	mflr    r20;            \	stw     r20,_LINK(r21); \	mfctr   r22;            \	stw     r22,_CTR(r21);  \	mfspr   r20,XER;        \	stw     r20,_XER(r21);  \	mfspr   r22,990;        /* SRR2 */      \	mfspr   r23,991;        /* SRR3 */      \	stw     r0,GPR0(r21);   \	stw     r1,GPR1(r21);   \	stw     r2,GPR2(r21);   \	stw     r1,0(r21);      \	mr      r1,r21;                 /* set new kernel sp */ \	SAVE_4GPRS(3, r21);/* * Note: code which follows this uses cr0.eq (set if from kernel), * r21, r22 (SRR2), and r23 (SRR3). *//* * Exception vectors. * * The data words for `hdlr' and `int_return' are initialized with * OFFSET values only; they must be relocated first before they can * be used! */#define STD_EXCEPTION(n, label, hdlr)			\	. = n;						\label:							\	EXCEPTION_PROLOG;				\	lwz	r3,GOT(transfer_to_handler);		\	mtlr	r3;					\	addi	r3,r1,STACK_FRAME_OVERHEAD;		\	li	r20,MSR_KERNEL;				\	rlwimi	r20,r23,0,25,25;			\	blrl	; 					\.L_ ## label :						\	.long	hdlr - _start + EXC_OFF_SYS_RESET;	\	.long	int_return - _start + EXC_OFF_SYS_RESET#define CRIT_EXCEPTION(n, label, hdlr)                  \	. = n;                                          \label:                                                  \	CRITICAL_EXCEPTION_PROLOG;                      \	lwz     r3,GOT(transfer_to_handler);            \	mtlr    r3;                                     \	addi    r3,r1,STACK_FRAME_OVERHEAD;             \	li      r20,MSR_KERNEL;                         \	rlwimi  r20,r23,0,25,25;                        \	blrl    ;                                       \.L_ ## label :                                          \	.long   hdlr - _start + EXC_OFF_SYS_RESET;      \	.long   crit_return - _start + EXC_OFF_SYS_RESET#endif	/* __PPC_ASM_TMPL__ */

⌨️ 快捷键说明

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