xref: /linux/arch/arm/include/asm/fiq.h (revision 87c9c16317882dd6dbbc07e349bc3223e14f3244)
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(&regs->ARM_r8);
50 }
51 
52 static inline void get_fiq_regs(struct pt_regs *regs)
53 {
54 	__get_fiq_regs(&regs->ARM_r8);
55 }
56 
57 #endif
58