1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * arch/arm/include/asm/fiq.h 4 * 5 * Support for FIQ on ARM architectures. 6 * Written by Philip Blundell <philb@gnu.org>, 1998 7 * Re-written by Russell King 8 * 9 * NOTE: The FIQ mode registers are not magically preserved across 10 * suspend/resume. 11 * 12 * Drivers which require these registers to be preserved across power 13 * management operations must implement appropriate suspend/resume handlers to 14 * save and restore them. 15 */ 16 17 #ifndef __ASM_FIQ_H 18 #define __ASM_FIQ_H 19 20 #include <asm/ptrace.h> 21 22 struct fiq_handler { 23 struct fiq_handler *next; 24 /* Name 25 */ 26 const char *name; 27 /* Called to ask driver to relinquish/ 28 * reacquire FIQ 29 * return zero to accept, or -<errno> 30 */ 31 int (*fiq_op)(void *, int relinquish); 32 /* data for the relinquish/reacquire functions 33 */ 34 void *dev_id; 35 }; 36 37 extern int claim_fiq(struct fiq_handler *f); 38 extern void release_fiq(struct fiq_handler *f); 39 extern void set_fiq_handler(void *start, unsigned int length); 40 extern void enable_fiq(int fiq); 41 extern void disable_fiq(int fiq); 42 43 /* helpers defined in fiqasm.S: */ 44 extern void __set_fiq_regs(unsigned long const *regs); 45 extern void __get_fiq_regs(unsigned long *regs); 46 47 static inline void set_fiq_regs(struct pt_regs const *regs) 48 { 49 __set_fiq_regs(®s->ARM_r8); 50 } 51 52 static inline void get_fiq_regs(struct pt_regs *regs) 53 { 54 __get_fiq_regs(®s->ARM_r8); 55 } 56 57 #endif 58