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

📄 patch-2.4.19-rmk-arm-rthal5

📁 rtai-3.1-test3的源代码(Real-Time Application Interface )
💻 19-RMK-ARM-RTHAL5
📖 第 1 页 / 共 3 页
字号:
diff -urNp --exclude=CVS linux-2.4.19-rmk7-tux1/Makefile linux-2.4.19-rmk7-tux1-rthal/Makefile--- linux-2.4.19-rmk7-tux1/Makefile	Wed Jul  9 20:15:29 2003+++ linux-2.4.19-rmk7-tux1-rthal/Makefile	Wed Dec 17 12:55:36 2003@@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 4 SUBLEVEL = 19-EXTRAVERSION = -rmk7+EXTRAVERSION = -rmk7-rthal5  KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION) diff -urNp --exclude=CVS linux-2.4.19-rmk7-tux1/arch/arm/config.in linux-2.4.19-rmk7-tux1-rthal/arch/arm/config.in--- linux-2.4.19-rmk7-tux1/arch/arm/config.in	Wed Jul  9 20:15:29 2003+++ linux-2.4.19-rmk7-tux1-rthal/arch/arm/config.in	Wed Dec 17 12:55:36 2003@@ -467,6 +467,7 @@ if [ "$CONFIG_ARCH_SA1100" = "y" -o \ fi  source drivers/pci/Config.in+bool 'RTAI Realtime Hardware abstraction Layer' CONFIG_RTHAL bool 'Support for hot-pluggable devices' CONFIG_HOTPLUG if [ "$CONFIG_HOTPLUG" = "y" ]; then    source drivers/pcmcia/Config.indiff -urNp --exclude=CVS linux-2.4.19-rmk7-tux1/arch/arm/defconfig linux-2.4.19-rmk7-tux1-rthal/arch/arm/defconfig--- linux-2.4.19-rmk7-tux1/arch/arm/defconfig	Mon Nov 26 00:12:57 2001+++ linux-2.4.19-rmk7-tux1-rthal/arch/arm/defconfig	Wed Dec 17 12:55:36 2003@@ -74,6 +74,7 @@ CONFIG_PCI=y # CONFIG_ISA is not set # CONFIG_ISA_DMA is not set CONFIG_PCI_NAMES=y+# CONFIG_RTHAL is not set # CONFIG_HOTPLUG is not set # CONFIG_PCMCIA is not set CONFIG_NET=ydiff -urNp --exclude=CVS linux-2.4.19-rmk7-tux1/arch/arm/kernel/armksyms.c linux-2.4.19-rmk7-tux1-rthal/arch/arm/kernel/armksyms.c--- linux-2.4.19-rmk7-tux1/arch/arm/kernel/armksyms.c	Thu Jun 19 10:54:30 2003+++ linux-2.4.19-rmk7-tux1-rthal/arch/arm/kernel/armksyms.c	Wed Dec 17 12:55:36 2003@@ -20,6 +20,10 @@ #include <linux/interrupt.h> #include <linux/pm.h> #include <linux/vt_kern.h>+#ifdef CONFIG_RTHAL+#include <linux/console.h>+#include <linux/sched.h>+#endif  #include <asm/byteorder.h> #include <asm/elf.h>@@ -105,6 +109,10 @@ EXPORT_SYMBOL(kd_mksound);  EXPORT_SYMBOL_NOVERS(__do_softirq); +#ifdef CONFIG_RTHAL+EXPORT_SYMBOL(console_drivers);+#endif+ 	/* platform dependent support */ EXPORT_SYMBOL(dump_thread); EXPORT_SYMBOL(dump_fpu);@@ -252,10 +260,13 @@ EXPORT_SYMBOL(elf_platform); EXPORT_SYMBOL(elf_hwcap);  	/* syscalls */+#ifndef CONFIG_RTHAL+/* exported elsewhere when CONFIG_RTHAL is on */ EXPORT_SYMBOL(sys_write); EXPORT_SYMBOL(sys_read);-EXPORT_SYMBOL(sys_lseek); EXPORT_SYMBOL(sys_open);+#endif+EXPORT_SYMBOL(sys_lseek); EXPORT_SYMBOL(sys_exit); EXPORT_SYMBOL(sys_wait4); @@ -266,3 +277,11 @@ EXPORT_SYMBOL_NOVERS(__down_trylock_fail EXPORT_SYMBOL_NOVERS(__up_wakeup);  EXPORT_SYMBOL(get_wchan);++	/* RTAI */+#ifdef CONFIG_RTHAL+extern struct irqdesc irq_desc[NR_IRQS];+EXPORT_SYMBOL(rthal);+EXPORT_SYMBOL(irq_desc); +EXPORT_SYMBOL(do_timer);+#endifdiff -urNp --exclude=CVS linux-2.4.19-rmk7-tux1/arch/arm/kernel/entry-armv.S linux-2.4.19-rmk7-tux1-rthal/arch/arm/kernel/entry-armv.S--- linux-2.4.19-rmk7-tux1/arch/arm/kernel/entry-armv.S	Thu Jun 19 10:54:30 2003+++ linux-2.4.19-rmk7-tux1-rthal/arch/arm/kernel/entry-armv.S	Thu Dec 25 23:59:08 2003@@ -380,6 +380,11 @@ ENTRY(soft_irq_mask) 		ands	\irqstat, \irqstat, \irqnr 		mov	\irqnr, #0 		beq	1001f+#ifdef CONFIG_RTHAL+		tst	\irqstat, #0x04000000	@ check OSMR0 first+		movne	\irqnr, #26+		bne	1001f+#endif 		tst	\irqstat, #0xff 		moveq	\irqstat, \irqstat, lsr #8 		addeq	\irqnr, \irqnr, #8@@ -690,9 +695,8 @@ __dabt_svc:	sub	sp, sp, #S_FRAME_SIZE 		msr	cpsr_c, r9 		mov	r2, sp 		bl	SYMBOL_NAME(do_DataAbort)-		mov	r0, #I_BIT | MODE_SVC-		msr	cpsr_c, r0-		ldr	r0, [sp, #S_PSR]+		disable_irq r0				@ Yes, this disables interrupts - for+		ldr	r0, [sp, #S_PSR]		@ the next 2 instructions. Safe. 		msr	spsr, r0 		ldmia	sp, {r0 - pc}^			@ load r0 - pc, cpsr @@ -711,7 +715,12 @@ __irq_svc:	sub	sp, sp, #S_FRAME_SIZE 		@ routine called with r0 = irq number, r1 = struct pt_regs * 		@ 		adrsvc	ne, lr, 1b+#ifndef CONFIG_RTHAL 		bne	asm_do_IRQ+#else+		ldrne	r7, .rthal			@ load pointer rthal+		ldrne	pc, [r7, #0]			@ branch to rthal.do_IRQ (1st in RTHAL)+#endif 		ldr	r0, [sp, #S_PSR]		@ irqs are already disabled 		msr	spsr, r0 		ldmia	sp, {r0 - pc}^			@ load r0 - pc, cpsr@@ -728,6 +737,19 @@ __und_svc:	sub	sp, sp, #S_FRAME_SIZE 		add	r4, sp, #S_SP 		stmia	r4, {r5 - r9}			@ save sp_SVC, lr_SVC, pc, cpsr, old_ro +#ifdef CONFIG_RTHAL+		ldr	r7, .rthal			@ load pointer rthal+		ldr	r7, [r7, #8]			@ load pointer rthal.do_TRAP (3rd in RTHAL)+		cmp	r7, #0+		beq	2f+		mov	r0, #4				@ SIGILL+		mov	r1, sp				@ struct pt_regs *regs+		mov	lr, pc+		mov	pc, r7				@ check, if this is a relevant code+		cmp	r0, #0				@ check return value+		beq	1f				@ else let linux do what it has to do+2:		+#endif 		adrsvc	al, r9, 1f			@ r9  = normal FP return 		bl	call_fpe			@ lr  = undefined instr return @@ -735,8 +757,7 @@ __und_svc:	sub	sp, sp, #S_FRAME_SIZE 		mov	r1, sp				@ struct pt_regs *regs 		bl	SYMBOL_NAME(do_undefinstr) -1:		mov	r0, #I_BIT | MODE_SVC-		msr	cpsr_c, r0+1:		disable_irq r0 		ldr	lr, [sp, #S_PSR]		@ Get SVC cpsr 		msr	spsr, lr 		ldmia	sp, {r0 - pc}^			@ Restore SVC registers@@ -757,8 +778,7 @@ __pabt_svc:	sub	sp, sp, #S_FRAME_SIZE 		mov	r0, r2				@ address (pc) 		mov	r1, sp				@ regs 		bl	SYMBOL_NAME(do_PrefetchAbort)	@ call abort handler-		mov	r0, #I_BIT | MODE_SVC-		msr	cpsr_c, r0+		disable_irq r0 		ldr	r0, [sp, #S_PSR] 		msr	spsr, r0 		ldmia	sp, {r0 - pc}^			@ load r0 - pc, cpsr@@ -770,6 +790,9 @@ __pabt_svc:	sub	sp, sp, #S_FRAME_SIZE #ifdef MULTI_CPU .LCprocfns:	.word	SYMBOL_NAME(processor) #endif+#ifdef CONFIG_RTHAL+.rthal:		.word	SYMBOL_NAME(rthal)+#endif .LCfp:		.word	SYMBOL_NAME(fp_enter)  		irq_prio_table@@ -795,8 +818,7 @@ __dabt_usr:	sub	sp, sp, #S_FRAME_SIZE		@ #else 		bl	cpu_data_abort #endif-		mov	r2, #MODE_SVC-		msr	cpsr_c, r2			@ Enable interrupts+		enable_irq r2				@ Enable interrupts 		mov	r2, sp 		adrsvc	al, lr, ret_from_exception 		b	SYMBOL_NAME(do_DataAbort)@@ -817,7 +839,13 @@ __irq_usr:	sub	sp, sp, #S_FRAME_SIZE 		@ 		@ routine called with r0 = irq number, r1 = struct pt_regs * 		@+#ifndef CONFIG_RTHAL 		bne	asm_do_IRQ+#else+		ldrne	r7, .rthal			@ load pointer rthal+		ldrne	pc, [r7, #0]			@ branch to rthal.do_IRQ (1st in RTHAL)+		disable_irq r7				@ we do not disable IRQs in dispatch_irq - do it here+#endif 		mov	why, #0 		get_current_task tsk 		b	ret_to_user@@ -846,8 +874,7 @@ call_fpe:	get_current_task r10 		add	r10, r10, #TSS_FPESAVE		@ r10 = workspace 		ldr	pc, [r4]			@ Call FP module USR entry point -fpundefinstr:	mov	r0, #MODE_SVC-		msr	cpsr_c, r0			@ Enable interrupts+fpundefinstr:	enable_irq r0				@ Enable interrupts 		mov	r0, lr 		mov	r1, sp 		adrsvc	al, lr, ret_from_exception@@ -863,8 +890,7 @@ __pabt_usr:	sub	sp, sp, #S_FRAME_SIZE		@ 		stmdb	r8, {sp, lr}^			@ Save sp_usr lr_usr 		alignment_trap r4, r7, __temp_abt 		zero_fp-		mov	r0, #MODE_SVC-		msr	cpsr_c, r0			@ Enable interrupts+		enable_irq r0				@ Enable interrupts 		mov	r0, r5				@ address (pc) 		mov	r1, sp				@ regs 		bl	SYMBOL_NAME(do_PrefetchAbort)	@ call abort handlerdiff -urNp --exclude=CVS linux-2.4.19-rmk7-tux1/arch/arm/kernel/entry-common.S linux-2.4.19-rmk7-tux1-rthal/arch/arm/kernel/entry-common.S--- linux-2.4.19-rmk7-tux1/arch/arm/kernel/entry-common.S	Thu Jun 19 10:54:30 2003+++ linux-2.4.19-rmk7-tux1-rthal/arch/arm/kernel/entry-common.S	Wed Dec 17 12:55:36 2003@@ -53,7 +53,11 @@ slow:	str	r0, [sp, #S_R0+S_OFF]!	@ retur  * "slow" syscall return path.  "why" tells us if this was a real syscall.  */ reschedule:+#ifndef CONFIG_RTHAL 	bl	SYMBOL_NAME(schedule)+#else+	bl	SYMBOL_NAME(rt_wrap_schedule)+#endif ret_disable_irq: 	disable_irq r1				@ ensure IRQs are disabled ENTRY(ret_to_user)@@ -72,7 +76,11 @@ __do_signal: 	mov	r0, #0				@ NULL 'oldset' 	mov	r1, sp				@ 'regs' 	mov	r2, why				@ 'syscall'+#ifndef CONFIG_RTHAL 	bl	SYMBOL_NAME(do_signal)		@ note the bl above sets lr+#else+	bl	SYMBOL_NAME(rt_wrap_do_signal)		@ note the bl above sets lr+#endif 	disable_irq r1				@ ensure IRQs are disabled 	b	restore @@ -90,7 +98,11 @@ ENTRY(ret_from_fork) 	beq	ret_disable_irq 	mov	r1, sp 	mov	r0, #1				@ trace exit [IP = 1]+#ifndef CONFIG_RTHAL 	bl	SYMBOL_NAME(syscall_trace)+#else+	bl	SYMBOL_NAME(rt_wrap_syscall_trace)+#endif 	b	ret_disable_irq 	 @@ -145,6 +157,11 @@ ENTRY(vector_swi) 	get_current_task tsk 	ldr	ip, [tsk, #TSK_PTRACE]		@ check for syscall tracing 	bic	scno, scno, #0xff000000		@ mask off SWI op-code+#ifdef CONFIG_RTHAL+	ldr	tbl, .rtai_magic		@ check for RTAI SRQ+	cmp	scno, tbl			@ (use tbl for scratch)+	beq	4f+#endif 	eor	scno, scno, #OS_NUMBER << 20	@ check OS number 	adr	tbl, sys_call_table		@ load syscall table pointer 	tst	ip, #PT_TRACESYS		@ are we tracing syscalls?@@ -160,6 +177,20 @@ ENTRY(vector_swi) 	eor	r0, scno, #OS_NUMBER << 20	@ put OS number back 	bcs	SYMBOL_NAME(arm_syscall)	 	b	SYMBOL_NAME(sys_ni_syscall)	@ not private func++#ifdef CONFIG_RTHAL+4:	ldr	r7, .rthal		@ load pointer to rthal+	ldr	r7, [r7, #4]		@ load pointer to do_SRQ, [rthal+4]+	cmp	r7, #0+	movne	lr, pc                  @ call ...+	movne	pc, r7			@ ... if available+	str	r0, [sp, #S_R0 + S_OFF]	@ save returned r0+	str	r1, [sp, #S_R1 + S_OFF]	@ save returned r1+	add	sp, sp, #S_OFF		@ hmm, leave anyway+	b	restore+.rtai_magic:	.word	0x404404		@ RTAI SRQ MAGIC+.rthal:		.word	SYMBOL_NAME(rthal)	@ RTHAL+#endif  	/* 	 * This is the really slow path.  We're going to be doingdiff -urNp --exclude=CVS linux-2.4.19-rmk7-tux1/arch/arm/kernel/irq.c linux-2.4.19-rmk7-tux1-rthal/arch/arm/kernel/irq.c--- linux-2.4.19-rmk7-tux1/arch/arm/kernel/irq.c	Fri Dec 26 00:08:54 2003+++ linux-2.4.19-rmk7-tux1-rthal/arch/arm/kernel/irq.c	Fri Dec 26 00:45:57 2003@@ -674,3 +674,181 @@ void __init init_IRQ(void) 	init_arch_irq(); 	init_dma(); }++#ifdef CONFIG_RTHAL+/*+ * RTAI+ * This is the most appropriate place to setup rthal.+ */+static void linux_cli(void)+{+	hard_local_irq_disable();+}++static void linux_sti(void)+{+	hard_local_irq_enable();+}++static unsigned int linux_save_flags(void)+{+	int flags;+	hard_local_save_flags(flags);+	return flags;+}++static unsigned int linux_save_flags_cli(void)+{+	int flags;+	hard_local_irq_save(flags);+	return flags;+}++static void linux_restore_flags(unsigned int flags)+{+	hard_local_irq_restore(flags);+}++static void linux_fcli(void)+{+	hard_clf();+}++static void linux_fsti(void)+{+	hard_stf();+}++volatile struct rt_hal rthal = {+	.do_IRQ			= asm_do_IRQ,	/* irq-dispatcher */+	.do_SRQ			= NULL,		/* srq-dispatcher */+	.do_TRAP		= NULL,		/* trap-handler */+	.disint			= linux_cli,+	.enint			= linux_sti,+	.getflags		= linux_save_flags,+	.setflags		= linux_restore_flags,+	.getflags_and_cli	= linux_save_flags_cli,+	.fdisint		= linux_fcli,+	.fenint			= linux_fsti,+	.copy_back		= NULL, /* copy linux-flags back, don't deliver pending interrupts */+	.c_do_IRQ		= do_IRQ,+};++/* Wrappers for entry-common.S+ * Assumption: the only exceptions, allowed in rt-context,+ * are interrupts and traps (e.g. floating point emulation),+ * which are processed accordingly. All the rest can happen+ * only in Linux. Which means, that interrupts before the+ * exception were hard-enabled, the state of soft I-bit is+ * unknown.+ * Concept - all these wrappers are called on the path:+ * - exception+ *   (possibly, enable interrupts)+ * - call a Linux C-function, which might schedule, sleep,+ *   change interrupt-status+ * - return to asm+ *   (possibly, change interupt status)+ * - switch back to where exception occured+ * So, the wrappers do:+ * - modify Linux I-bit according to the current hard I-bit+ * - hard enable interrupts+ * - call the wrapped function+ * - save the current Linux I-bit to the hard I-bit+ * - restore Linux I-bit state from before-wrapping+ *   (emulate return from exception)+ */+

⌨️ 快捷键说明

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