|  | /* | 
|  | *  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) |