📄 rthal-5g-2.4.22-yd2f.patch
字号:
+ 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 + -