xref: /openbmc/linux/arch/arm/include/asm/fiq.h (revision 2db57789e6612ce0cf2fcbb577a1c8307b708566)
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