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

📄 rthal-5g-2.4.22-yd2f.patch

📁 rtai-3.1-test3的源代码(Real-Time Application Interface )
💻 PATCH
📖 第 1 页 / 共 2 页
字号:
+ diff -u yd-linux-2.4.22-2f/arch/ppc/config.in.PRE_RTAI yd-linux-2.4.22-2f/arch/ppc/config.in--- yd-linux-2.4.22-2f/arch/ppc/config.in.PRE_RTAI	2003-11-09 21:57:53.000000000 +0100+++ yd-linux-2.4.22-2f/arch/ppc/config.in	2004-03-12 12:21:25.000000000 +0100@@ -136,6 +136,9 @@   bool '  Distribute interrupts on all CPUs by default' CONFIG_IRQ_ALL_CPUS fi +#bool 'Real-Time Hardware Abstraction Layer' CONFIG_RTHAL+define_bool CONFIG_RTHAL y+ if [ "$CONFIG_6xx" = "y" -a "$CONFIG_8260" = "n" ];then   bool 'AltiVec Support' CONFIG_ALTIVEC   bool 'Thermal Management Support' CONFIG_TAU+ diff -u yd-linux-2.4.22-2f/arch/ppc/kernel/entry.S.PRE_RTAI yd-linux-2.4.22-2f/arch/ppc/kernel/entry.S--- yd-linux-2.4.22-2f/arch/ppc/kernel/entry.S.PRE_RTAI	2003-11-09 21:57:52.000000000 +0100+++ yd-linux-2.4.22-2f/arch/ppc/kernel/entry.S	2004-03-12 12:22:49.000000000 +0100@@ -297,6 +297,7 @@ 	bl	do_signal 	.globl	do_signal_ret do_signal_ret:+	bl	do_soft_sti 	.globl ret_to_user_hook ret_to_user_hook: 	nop+ diff -u yd-linux-2.4.22-2f/arch/ppc/kernel/head.S.PRE_RTAI yd-linux-2.4.22-2f/arch/ppc/kernel/head.S--- yd-linux-2.4.22-2f/arch/ppc/kernel/head.S.PRE_RTAI	2003-11-09 21:57:52.000000000 +0100+++ yd-linux-2.4.22-2f/arch/ppc/kernel/head.S	2004-03-12 12:21:25.000000000 +0100@@ -479,7 +479,20 @@ 	.long	ret_from_except  /* Single step - not used on 601 */+#ifdef CONFIG_RTHAL+	. = 0xd00+SingleStep:+	EXCEPTION_PROLOG+	addi	r3,r1,STACK_FRAME_OVERHEAD+	li	r20,MSR_KERNEL+	rlwimi	r20,r23,0,16,16		/* copy EE bit from saved MSR */+	bl	transfer_to_handler+i0xd00:+	.long	SingleStepException+	.long	ret_from_except+#else 	STD_EXCEPTION(0xd00, SingleStep, SingleStepException)+#endif 	STD_EXCEPTION(0xe00, Trap_0e, UnknownException)  /*+ diff -u yd-linux-2.4.22-2f/arch/ppc/kernel/irq.c.PRE_RTAI yd-linux-2.4.22-2f/arch/ppc/kernel/irq.c--- yd-linux-2.4.22-2f/arch/ppc/kernel/irq.c.PRE_RTAI	2003-11-09 21:57:52.000000000 +0100+++ yd-linux-2.4.22-2f/arch/ppc/kernel/irq.c	2004-03-12 12:21:25.000000000 +0100@@ -514,6 +514,13 @@ 	spin_unlock(&desc->lock); } +void (*rtai_soft_sti)(void);++void do_soft_sti(void)+{+	if(rtai_soft_sti)rtai_soft_sti();+}+ int do_IRQ(struct pt_regs *regs) { 	int cpu = smp_processor_id();+ diff -u yd-linux-2.4.22-2f/arch/ppc/kernel/open_pic.c.PRE_RTAI yd-linux-2.4.22-2f/arch/ppc/kernel/open_pic.c--- yd-linux-2.4.22-2f/arch/ppc/kernel/open_pic.c.PRE_RTAI	2004-03-12 14:20:08.000000000 +0100+++ yd-linux-2.4.22-2f/arch/ppc/kernel/open_pic.c	2004-03-12 14:16:47.000000000 +0100@@ -940,4 +940,7 @@  	spin_unlock_irqrestore(&openpic_setup_lock, flags); }+#else+void openpic_sleep_save_intrs(void) {printk("openpic_sleep_save_intrs() not implemented");}+void openpic_sleep_restore_intrs(void) {printk("openpic_sleep_restore_intrs() not implemented");} #endif /* CONFIG_PMAC_PBOOK */+ diff -u yd-linux-2.4.22-2f/arch/ppc/kernel/ppc_ksyms.c.PRE_RTAI yd-linux-2.4.22-2f/arch/ppc/kernel/ppc_ksyms.c--- yd-linux-2.4.22-2f/arch/ppc/kernel/ppc_ksyms.c.PRE_RTAI	2003-11-09 21:57:53.000000000 +0100+++ yd-linux-2.4.22-2f/arch/ppc/kernel/ppc_ksyms.c	2004-03-12 12:21:25.000000000 +0100@@ -222,6 +222,12 @@ EXPORT_SYMBOL(synchronize_irq); #endif +extern int (*rtai_srq_bckdr)(struct pt_regs *);+EXPORT_SYMBOL(rtai_srq_bckdr);++extern void (*rtai_soft_sti)(void);+EXPORT_SYMBOL(rtai_soft_sti);+ EXPORT_SYMBOL(ppc_md);  #ifdef CONFIG_ADB+ diff -u yd-linux-2.4.22-2f/arch/ppc/kernel/traps.c.PRE_RTAI yd-linux-2.4.22-2f/arch/ppc/kernel/traps.c--- yd-linux-2.4.22-2f/arch/ppc/kernel/traps.c.PRE_RTAI	2003-11-09 21:57:52.000000000 +0100+++ yd-linux-2.4.22-2f/arch/ppc/kernel/traps.c	2004-03-12 12:24:47.000000000 +0100@@ -333,12 +333,18 @@ 	return retval; } +int (*rtai_srq_bckdr)(struct pt_regs *regs) = NULL;+ void ProgramCheckException(struct pt_regs *regs) { 	unsigned int reason = get_reason(regs); 	extern int do_mathemu(struct pt_regs *regs); +	if (rtai_srq_bckdr && !rtai_srq_bckdr(regs)) {+		return;+	}+ #ifdef CONFIG_MATH_EMULATION 	/* (reason & REASON_ILLEGAL) would be the obvious thing here, 	 * but there seems to be a hardware bug on the 405GP (RevD)+ diff -u yd-linux-2.4.22-2f/arch/ppc/mm/pgtable.c.PRE_RTAI yd-linux-2.4.22-2f/arch/ppc/mm/pgtable.c--- yd-linux-2.4.22-2f/arch/ppc/mm/pgtable.c.PRE_RTAI	2003-11-09 21:57:52.000000000 +0100+++ yd-linux-2.4.22-2f/arch/ppc/mm/pgtable.c	2004-03-12 12:26:34.000000000 +0100@@ -279,7 +279,7 @@ 		 * don't get ASID compares on kernel space. 		 */ 		f = _PAGE_PRESENT | _PAGE_ACCESSED | _PAGE_SHARED | _PAGE_HWEXEC;-#if defined(CONFIG_KGDB) || defined(CONFIG_XMON) || defined(CONFIG_BDI_SWITCH)+#if defined(CONFIG_KGDB) || defined(CONFIG_XMON) || defined(CONFIG_BDI_SWITCH) || defined (CONFIG_RTHAL) 		/* Allows stub to set breakpoints everywhere */ 		f |= _PAGE_WRENABLE; #else	/* !CONFIG_KGDB && !CONFIG_XMON && !CONFIG_BDI_SWITCH */@@ -291,7 +291,7 @@ 			   forces R/W kernel access */ 			f |= _PAGE_USER; #endif /* CONFIG_PPC_STD_MMU */-#endif /* CONFIG_KGDB || CONFIG_XMON */+#endif /* CONFIG_KGDB || CONFIG_XMON || CONFIG_BDI_SWITCH */ 		map_page(v, p, f); 		v += PAGE_SIZE; 		p += PAGE_SIZE;+ diff -u yd-linux-2.4.22-2f/Documentation/Configure.help.PRE_RTAI yd-linux-2.4.22-2f/Documentation/Configure.help--- yd-linux-2.4.22-2f/Documentation/Configure.help.PRE_RTAI	2003-11-09 21:57:53.000000000 +0100+++ yd-linux-2.4.22-2f/Documentation/Configure.help	2004-03-12 12:21:25.000000000 +0100@@ -262,6 +262,13 @@    If you don't have this computer, you may safely say N. +Real-Time Harware Abstraction+CONFIG_RTHAL+  The Real-Time Hardware Abstraction Layer (RTHAL) is used by+  the Real-Time Application Interface (RTAI) to provide a+  hard real-time environment as part of Linux.  This feature+  cannot be turned off, so say Y.+ IO-APIC support on uniprocessors CONFIG_X86_UP_IOAPIC   An IO-APIC (I/O Advanced Programmable Interrupt Controller) is an+ diff -u yd-linux-2.4.22-2f/drivers/video/aty128fb.c.PRE_RTAI yd-linux-2.4.22-2f/drivers/video/aty128fb.c--- yd-linux-2.4.22-2f/drivers/video/aty128fb.c.PRE_RTAI	2003-11-09 21:57:53.000000000 +0100+++ yd-linux-2.4.22-2f/drivers/video/aty128fb.c	2004-03-12 13:26:32.000000000 +0100@@ -2630,8 +2630,10 @@ 	struct fb_info_aty128 *info = (struct fb_info_aty128 *)data; 	unsigned int reg = aty_ld_le32(LVDS_GEN_CNTL); +#ifdef CONFIG_PMAC_PBOOK 	if (!info->lcd_on) 		on = 0;+#endif 	reg |= LVDS_BL_MOD_EN | LVDS_BLON; 	if (on && level > BACKLIGHT_OFF) { 		reg |= LVDS_DIGION;+ diff -u yd-linux-2.4.22-2f/include/asm-ppc/system.h.PRE_RTAI yd-linux-2.4.22-2f/include/asm-ppc/system.h--- yd-linux-2.4.22-2f/include/asm-ppc/system.h.PRE_RTAI	2003-11-09 22:49:53.000000000 +0100+++ yd-linux-2.4.22-2f/include/asm-ppc/system.h	2004-03-12 12:36:55.000000000 +0100@@ -82,6 +82,7 @@  struct task_struct; #define prepare_to_switch()	do { } while(0)+#define end_switch()		do { } while(0) #define switch_to(prev,next,last) _switch_to((prev),(next),&(last)) extern void _switch_to(struct task_struct *, struct task_struct *, 		       struct task_struct **);+ diff -u yd-linux-2.4.22-2f/include/linux/sched.h.PRE_RTAI yd-linux-2.4.22-2f/include/linux/sched.h--- yd-linux-2.4.22-2f/include/linux/sched.h.PRE_RTAI	2003-11-09 22:49:54.000000000 +0100+++ yd-linux-2.4.22-2f/include/linux/sched.h	2004-03-12 12:36:55.000000000 +0100@@ -415,6 +415,8 @@  /* journalling filesystem info */ 	void *journal_info;++	void *this_rt_task[2]; };  /*@@ -509,6 +511,7 @@     blocked:		{{0}},						\     alloc_lock:		SPIN_LOCK_UNLOCKED,				\     journal_info:	NULL,						\+    this_rt_task:	{0,0},						\ }  + diff -u yd-linux-2.4.22-2f/kernel/exit.c.PRE_RTAI yd-linux-2.4.22-2f/kernel/exit.c--- yd-linux-2.4.22-2f/kernel/exit.c.PRE_RTAI	2002-11-29 00:53:15.000000000 +0100+++ yd-linux-2.4.22-2f/kernel/exit.c	2004-03-12 12:21:25.000000000 +0100@@ -422,6 +422,71 @@ 	write_unlock_irq(&tasklist_lock); } +//+// PGGC added these lines to callback rtai when a task dies.+// A list of functions allows different rt_modules to be informed.+//+static struct t_callback {+	void (*rtai_callback)(struct task_struct *tsk);+	struct t_callback *next;+	} *rtai_callback_list;++extern int  set_rtai_callback(    void (*fun)(struct task_struct *tsk));+extern void remove_rtai_callback( void (*fun)(struct task_struct *tsk));++void inform_rtai(void)+{+	struct t_callback *pt;++	pt = rtai_callback_list;+	while (pt) {+		(*(pt->rtai_callback))(current);+		pt = pt->next;+	}+//printk( "Task pid %d going down\n", current->pid);+}++int set_rtai_callback( void (*pt)(struct task_struct *tsk))+{+	struct t_callback *ptn;++	ptn = kmalloc(sizeof(struct t_callback), GFP_KERNEL);+	if (!ptn) {+		return -ENOMEM;+	}+	ptn->rtai_callback = pt;+	ptn->next = rtai_callback_list ? rtai_callback_list : 0;+	rtai_callback_list = ptn;+	return 0;+}++void remove_rtai_callback(void (*pt)(struct task_struct *tsk))+{+	struct t_callback *pto, *ptoo, *ptd;++	pto  = rtai_callback_list;+	ptoo = 0;+	while (pto) {+		if (pto->rtai_callback == pt) {+			if (!ptoo) {+				rtai_callback_list = pto->next;+			} else {+				ptoo->next = pto->next; +			}+ 			ptd = pto;+			pto = pto->next;+			kfree(ptd);+		} else {+			ptoo = pto;+			pto = pto->next;+		}	

⌨️ 快捷键说明

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