--- linux-2.4.0-test4-rmk1/include/asm-arm/proc-armo/assembler.h.predag Sat Jul 29 15:23:49 2000 +++ linux-2.4.0-test4-rmk1/include/asm-arm/proc-armo/assembler.h Sat Jul 29 15:18:11 2000 @@ -60,3 +60,25 @@ #define SVCMODE(tmpreg)\ teqp pc, $0x00000003;\ mov r0, r0 + + +/* + * Save the current IRQ state and disable IRQs + * Note that this macro assumes FIQs are enabled, and + * that the processor is in SVC mode. + */ + .macro save_and_disable_irqs, oldcpsr, temp + mov \oldcpsr, pc + orr \temp, \oldcpsr, #0x08000000 + teqp \temp, #0 + .endm + +/* + * Restore interrupt state previously stored in + * a register + * ** Actually do nothing on Arc - hope that the caller uses a MOVS PC soon + * after! + */ + .macro restore_irqs, oldcpsr + @ This be restore_irqs + .endm --- linux-2.4.0-test4-rmk1/drivers/acorn/char/keyb_arc.c.predag Sat Jul 29 20:08:31 2000 +++ linux-2.4.0-test4-rmk1/drivers/acorn/char/keyb_arc.c Sat Jul 29 20:13:53 2000 @@ -33,6 +33,7 @@ #include "../../char/busmouse.h" +extern struct tasklet_struct keyboard_tasklet; extern void kbd_reset_kdown(void); #define VERSION 108 @@ -402,7 +403,7 @@ { kbd_pt_regs = regs; if (handle_rawcode(inb(IOC_KARTRX))) - mark_bh (KEYBOARD_BH); + tasklet_schedule(&keyboard_tasklet); } static void a5kkbd_tx(int irq, void *dev_id, struct pt_regs *regs) --- linux-2.4.0-test4-rmk1/arch/arm/kernel/semaphore.c.predag Sat Jul 22 23:18:05 2000 +++ linux-2.4.0-test4-rmk1/arch/arm/kernel/semaphore.c Sun Jul 23 01:22:15 2000 @@ -293,6 +293,102 @@ * registers (r0 to r3 and lr), but not ip, as we use it as a return * value in some cases.. */ +#ifdef CONFIG_CPU_26 +asm(" .section .text.lock, \"ax\" + .align 5 + .globl __down_failed +__down_failed: + stmfd sp!, {r0 - r3, lr} + mov r0, ip + bl __down + ldmfd sp!, {r0 - r3, pc}^ + + .align 5 + .globl __down_interruptible_failed +__down_interruptible_failed: + stmfd sp!, {r0 - r3, lr} + mov r0, ip + bl __down_interruptible + mov ip, r0 + ldmfd sp!, {r0 - r3, pc}^ + + .align 5 + .globl __down_trylock_failed +__down_trylock_failed: + stmfd sp!, {r0 - r3, lr} + mov r0, ip + bl __down_trylock + mov ip, r0 + ldmfd sp!, {r0 - r3, pc}^ + + .align 5 + .globl __up_wakeup +__up_wakeup: + stmfd sp!, {r0 - r3, lr} + mov r0, ip + bl __up + ldmfd sp!, {r0 - r3, pc}^ + + .align 5 + .globl __down_read_failed +__down_read_failed: + stmfd sp!, {r0 - r3, lr} + mov r0, ip + bcc 1f +1: bl down_read_failed_biased + ldmfd sp!, {r0 - r3, pc}^ +2: bl down_read_failed + mov r1, pc + orr r2, r1, # + teqp r2, #0 + + ldr r3, [r0] + subs r3, r3, #1 + str r3, [r0] + ldmplfd sp!, {r0 - r3, pc}^ + orrcs r1, r1, #0x20000000 @ Set carry + teqp r1, #0 + bcc 2b + b 1b + + .align 5 + .globl __down_write_failed +__down_write_failed: + stmfd sp!, {r0 - r3, lr} + mov r0, ip + bcc 1f +1: bl down_write_failed_biased + ldmfd sp!, {r0 - r3, pc}^ +2: bl down_write_failed + mov r1, pc + orr r2, r1, #128 + teqp r2, #0 + + ldr r3, [r0] + subs r3, r3, #"RW_LOCK_BIAS_STR" + str r3, [r0] + ldmeqfd sp!, {r0 - r3, pc}^ + orrcs r1, r1, #0x20000000 @ Set carry + teqp r1, #0 + bcc 2b + b 1b + + .align 5 + .globl __rwsem_wake +__rwsem_wake: + stmfd sp!, {r0 - r3, lr} + mov r0, ip + beq 1f + bl rwsem_wake_readers + ldmfd sp!, {r0 - r3, pc}^ +1: bl rwsem_wake_writer + ldmfd sp!, {r0 - r3, pc}^ + + .previous + "); + +#else +/* 32 bit version */ asm(" .section .text.lock, \"ax\" .align 5 .globl __down_failed @@ -382,3 +478,4 @@ .previous "); +#endif --- linux-2.4.0-test4-rmk1/arch/arm/kernel/setup.c.predag Sat Jul 29 20:59:08 2000 +++ linux-2.4.0-test4-rmk1/arch/arm/kernel/setup.c Sat Jul 29 20:59:23 2000 @@ -305,6 +305,7 @@ memset(&meminfo, 0, sizeof(meminfo)); + /* DAG: Outdated, these have been combined !!!!!!! */ #if defined(CONFIG_ARCH_ARC) __machine_arch_type = MACH_TYPE_ARCHIMEDES; #elif defined(CONFIG_ARCH_A5K)