xref: /openbmc/linux/arch/arm/include/asm/fiq.h (revision 498495dba268b20e8eadd7fe93c140c68b6cc9d2)
1*b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
24baa9922SRussell King /*
34baa9922SRussell King  *  arch/arm/include/asm/fiq.h
44baa9922SRussell King  *
54baa9922SRussell King  * Support for FIQ on ARM architectures.
64baa9922SRussell King  * Written by Philip Blundell <philb@gnu.org>, 1998
74baa9922SRussell King  * Re-written by Russell King
82846d84fSDave Martin  *
92846d84fSDave Martin  * NOTE: The FIQ mode registers are not magically preserved across
102846d84fSDave Martin  * suspend/resume.
112846d84fSDave Martin  *
122846d84fSDave Martin  * Drivers which require these registers to be preserved across power
132846d84fSDave Martin  * management operations must implement appropriate suspend/resume handlers to
142846d84fSDave Martin  * save and restore them.
154baa9922SRussell King  */
164baa9922SRussell King 
174baa9922SRussell King #ifndef __ASM_FIQ_H
184baa9922SRussell King #define __ASM_FIQ_H
194baa9922SRussell King 
204baa9922SRussell King #include <asm/ptrace.h>
214baa9922SRussell King 
224baa9922SRussell King struct fiq_handler {
234baa9922SRussell King 	struct fiq_handler *next;
244baa9922SRussell King 	/* Name
254baa9922SRussell King 	 */
264baa9922SRussell King 	const char *name;
274baa9922SRussell King 	/* Called to ask driver to relinquish/
284baa9922SRussell King 	 * reacquire FIQ
294baa9922SRussell King 	 * return zero to accept, or -<errno>
304baa9922SRussell King 	 */
314baa9922SRussell King 	int (*fiq_op)(void *, int relinquish);
324baa9922SRussell King 	/* data for the relinquish/reacquire functions
334baa9922SRussell King 	 */
344baa9922SRussell King 	void *dev_id;
354baa9922SRussell King };
364baa9922SRussell King 
374baa9922SRussell King extern int claim_fiq(struct fiq_handler *f);
384baa9922SRussell King extern void release_fiq(struct fiq_handler *f);
394baa9922SRussell King extern void set_fiq_handler(void *start, unsigned int length);
404baa9922SRussell King extern void enable_fiq(int fiq);
414baa9922SRussell King extern void disable_fiq(int fiq);
424baa9922SRussell King 
43dc2eb928SDave Martin /* helpers defined in fiqasm.S: */
44dc2eb928SDave Martin extern void __set_fiq_regs(unsigned long const *regs);
45dc2eb928SDave Martin extern void __get_fiq_regs(unsigned long *regs);
46dc2eb928SDave Martin 
set_fiq_regs(struct pt_regs const * regs)47dc2eb928SDave Martin static inline void set_fiq_regs(struct pt_regs const *regs)
48dc2eb928SDave Martin {
49dc2eb928SDave Martin 	__set_fiq_regs(&regs->ARM_r8);
50dc2eb928SDave Martin }
51dc2eb928SDave Martin 
get_fiq_regs(struct pt_regs * regs)52dc2eb928SDave Martin static inline void get_fiq_regs(struct pt_regs *regs)
53dc2eb928SDave Martin {
54dc2eb928SDave Martin 	__get_fiq_regs(&regs->ARM_r8);
55dc2eb928SDave Martin }
56dc2eb928SDave Martin 
574baa9922SRussell King #endif
58