--- linux/include/asm-arm/proc-armo/locks.h.predag Sat Jul 22 14:38:18 2000 +++ linux/include/asm-arm/proc-armo/locks.h Sat Jul 22 17:22:05 2000 @@ -1,13 +1,16 @@ /* - * linux/include/asm-arm/proc-armv/locks.h + * linux/include/asm-arm/proc-armo/locks.h * * Copyright (C) 2000 Russell King + * Fixes for 26 bit machines, (C) 2000 Dave Gilbert * * Interrupt safe locking assembler. + * */ #ifndef __ASM_PROC_LOCKS_H #define __ASM_PROC_LOCKS_H +/* Decrements by 1, fails if value < 0 */ #define __down_op(ptr,fail) \ ({ \ __asm__ __volatile__ ( \ @@ -63,7 +66,7 @@ " and r0, r0, #0x0c000003\n" \ " adds lr, lr, #1\n" \ " str lr, [%0]\n" \ -" orrle r0, r0, #0x80000000 @ set N\n" \ +" orrle r0, r0, #0x80000000 @ set N - should this be mi ??? DAG ! \n" \ " teqp r0, #0\n" \ " movmi r0, %0\n" \ " blmi " SYMBOL_NAME_STR(wake) \ @@ -81,17 +84,22 @@ #define RW_LOCK_BIAS 0x01000000 #define RW_LOCK_BIAS_STR "0x01000000" +/* Decrements by RW_LOCK_BIAS rather than 1, fails if value != 0 */ #define __down_op_write(ptr,fail) \ ({ \ __asm__ __volatile__( \ "@ down_op_write\n" \ -" mrs r0, cpsr\n" \ -" orr lr, r0, #128\n" \ -" msr cpsr_c, lr\n" \ +" mov r0, pc\n" \ +" orr lr, r0, #0x08000000\n" \ +" teqp lr, #0\n" \ +" and r0, r0, #0x0c000003\n" \ +\ " ldr lr, [%0]\n" \ " subs lr, lr, %1\n" \ " str lr, [%0]\n" \ -" msr cpsr_c, r0\n" \ +\ +" orreq r0, r0, #0x40000000 @ set Z \n"\ +" teqp r0, #0\n" \ " movne r0, %0\n" \ " blne " SYMBOL_NAME_STR(fail) \ : \ @@ -99,17 +107,22 @@ : "r0", "lr", "cc"); \ }) +/* Increments by RW_LOCK_BIAS, wakes if value >= 0 */ #define __up_op_write(ptr,wake) \ ({ \ __asm__ __volatile__( \ "@ up_op_read\n" \ -" mrs r0, cpsr\n" \ -" orr lr, r0, #128\n" \ -" msr cpsr_c, lr\n" \ +" mov r0, pc\n" \ +" orr lr, r0, #0x08000000\n" \ +" teqp lr, #0\n" \ +\ " ldr lr, [%0]\n" \ +" and r0, r0, #0x0c000003\n" \ " adds lr, lr, %1\n" \ " str lr, [%0]\n" \ -" msr cpsr_c, r0\n" \ +\ +" orrcs r0, r0, #0x20000000 @ set C\n" \ +" teqp r0, #0\n" \ " movcs r0, %0\n" \ " blcs " SYMBOL_NAME_STR(wake) \ : \ @@ -124,13 +137,17 @@ ({ \ __asm__ __volatile__( \ "@ up_op_read\n" \ -" mrs r0, cpsr\n" \ -" orr lr, r0, #128\n" \ -" msr cpsr_c, lr\n" \ +" mov r0, pc\n" \ +" orr lr, r0, #0x08000000\n" \ +" teqp lr, #0\n" \ +\ " ldr lr, [%0]\n" \ +" and r0, r0, #0x0c000003\n" \ " adds lr, lr, %1\n" \ " str lr, [%0]\n" \ -" msr cpsr_c, r0\n" \ +\ +" orreq r0, r0, #0x40000000 @ Set Z \n" \ +" teqp r0, #0\n" \ " moveq r0, %0\n" \ " bleq " SYMBOL_NAME_STR(wake) \ : \ --- linux/arch/arm/kernel/oldlatches.c.predag Sat Jul 22 17:40:42 2000 +++ linux/arch/arm/kernel/oldlatches.c Sat Jul 22 17:41:41 2000 @@ -1,7 +1,7 @@ /* Support for the latches on the old Archimedes which control the floppy, * hard disc and printer * - * (c) David Alan Gilbert 1995/1996 + * (c) David Alan Gilbert 1995/1996,2000 */ #include #include @@ -9,6 +9,7 @@ #include #include +#include static unsigned char latch_a_copy; static unsigned char latch_b_copy; --- linux/arch/arm/kernel/entry-armo.S.predag Sat Jul 22 18:34:21 2000 +++ linux/arch/arm/kernel/entry-armo.S Sat Jul 22 18:34:40 2000 @@ -38,6 +38,8 @@ .text +#define PT_TRACESYS 0x00000002 + @ Offsets into task structure @ --------------------------- @