1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- /*
- * linux/arch/arm/kernel/fiqasm.S
- *
- * Derived from code originally in linux/arch/arm/kernel/fiq.c:
- *
- * Copyright (C) 1998 Russell King
- * Copyright (C) 1998, 1999 Phil Blundell
- * Copyright (C) 2011, Linaro Limited
- *
- * FIQ support written by Philip Blundell <philb@gnu.org>, 1998.
- *
- * FIQ support re-written by Russell King to be more generic
- *
- * v7/Thumb-2 compatibility modifications by Linaro Limited, 2011.
- */
- #include <linux/linkage.h>
- #include <asm/assembler.h>
- /*
- * Taking an interrupt in FIQ mode is death, so both these functions
- * disable irqs for the duration.
- */
- ENTRY(__set_fiq_regs)
- mov r2, #PSR_I_BIT | PSR_F_BIT | FIQ_MODE
- mrs r1, cpsr
- msr cpsr_c, r2 @ select FIQ mode
- mov r0, r0 @ avoid hazard prior to ARMv4
- ldmia r0!, {r8 - r12}
- ldr sp, [r0], #4
- ldr lr, [r0]
- msr cpsr_c, r1 @ return to SVC mode
- mov r0, r0 @ avoid hazard prior to ARMv4
- ret lr
- ENDPROC(__set_fiq_regs)
- ENTRY(__get_fiq_regs)
- mov r2, #PSR_I_BIT | PSR_F_BIT | FIQ_MODE
- mrs r1, cpsr
- msr cpsr_c, r2 @ select FIQ mode
- mov r0, r0 @ avoid hazard prior to ARMv4
- stmia r0!, {r8 - r12}
- str sp, [r0], #4
- str lr, [r0]
- msr cpsr_c, r1 @ return to SVC mode
- mov r0, r0 @ avoid hazard prior to ARMv4
- ret lr
- ENDPROC(__get_fiq_regs)
|