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 Martinstatic inline void set_fiq_regs(struct pt_regs const *regs) 48dc2eb928SDave Martin { 49dc2eb928SDave Martin __set_fiq_regs(®s->ARM_r8); 50dc2eb928SDave Martin } 51dc2eb928SDave Martin get_fiq_regs(struct pt_regs * regs)52dc2eb928SDave Martinstatic inline void get_fiq_regs(struct pt_regs *regs) 53dc2eb928SDave Martin { 54dc2eb928SDave Martin __get_fiq_regs(®s->ARM_r8); 55dc2eb928SDave Martin } 56dc2eb928SDave Martin 574baa9922SRussell King #endif 58