| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* |
| * arch/arm/include/asm/fiq.h |
| * |
| * Support for FIQ on ARM architectures. |
| * Written by Philip Blundell <philb@gnu.org>, 1998 |
| * Re-written by Russell King |
| * |
| * NOTE: The FIQ mode registers are not magically preserved across |
| * suspend/resume. |
| * |
| * Drivers which require these registers to be preserved across power |
| * management operations must implement appropriate suspend/resume handlers to |
| * save and restore them. |
| */ |
| |
| #ifndef __ASM_FIQ_H |
| #define __ASM_FIQ_H |
| |
| #include <asm/ptrace.h> |
| |
| struct fiq_handler { |
| struct fiq_handler *next; |
| /* Name |
| */ |
| const char *name; |
| /* Called to ask driver to relinquish/ |
| * reacquire FIQ |
| * return zero to accept, or -<errno> |
| */ |
| int (*fiq_op)(void *, int relinquish); |
| /* data for the relinquish/reacquire functions |
| */ |
| void *dev_id; |
| }; |
| |
| extern int claim_fiq(struct fiq_handler *f); |
| extern void release_fiq(struct fiq_handler *f); |
| extern void set_fiq_handler(void *start, unsigned int length); |
| extern void enable_fiq(int fiq); |
| extern void disable_fiq(int fiq); |
| |
| /* helpers defined in fiqasm.S: */ |
| extern void __set_fiq_regs(unsigned long const *regs); |
| extern void __get_fiq_regs(unsigned long *regs); |
| |
| static inline void set_fiq_regs(struct pt_regs const *regs) |
| { |
| __set_fiq_regs(®s->ARM_r8); |
| } |
| |
| static inline void get_fiq_regs(struct pt_regs *regs) |
| { |
| __get_fiq_regs(®s->ARM_r8); |
| } |
| |
| #endif |