14baa9922SRussell King /* 24baa9922SRussell King * arch/arm/include/asm/fiq.h 34baa9922SRussell King * 44baa9922SRussell King * Support for FIQ on ARM architectures. 54baa9922SRussell King * Written by Philip Blundell <philb@gnu.org>, 1998 64baa9922SRussell King * Re-written by Russell King 7*2846d84fSDave Martin * 8*2846d84fSDave Martin * NOTE: The FIQ mode registers are not magically preserved across 9*2846d84fSDave Martin * suspend/resume. 10*2846d84fSDave Martin * 11*2846d84fSDave Martin * Drivers which require these registers to be preserved across power 12*2846d84fSDave Martin * management operations must implement appropriate suspend/resume handlers to 13*2846d84fSDave Martin * save and restore them. 144baa9922SRussell King */ 154baa9922SRussell King 164baa9922SRussell King #ifndef __ASM_FIQ_H 174baa9922SRussell King #define __ASM_FIQ_H 184baa9922SRussell King 194baa9922SRussell King #include <asm/ptrace.h> 204baa9922SRussell King 214baa9922SRussell King struct fiq_handler { 224baa9922SRussell King struct fiq_handler *next; 234baa9922SRussell King /* Name 244baa9922SRussell King */ 254baa9922SRussell King const char *name; 264baa9922SRussell King /* Called to ask driver to relinquish/ 274baa9922SRussell King * reacquire FIQ 284baa9922SRussell King * return zero to accept, or -<errno> 294baa9922SRussell King */ 304baa9922SRussell King int (*fiq_op)(void *, int relinquish); 314baa9922SRussell King /* data for the relinquish/reacquire functions 324baa9922SRussell King */ 334baa9922SRussell King void *dev_id; 344baa9922SRussell King }; 354baa9922SRussell King 364baa9922SRussell King extern int claim_fiq(struct fiq_handler *f); 374baa9922SRussell King extern void release_fiq(struct fiq_handler *f); 384baa9922SRussell King extern void set_fiq_handler(void *start, unsigned int length); 394baa9922SRussell King extern void enable_fiq(int fiq); 404baa9922SRussell King extern void disable_fiq(int fiq); 414baa9922SRussell King 42dc2eb928SDave Martin /* helpers defined in fiqasm.S: */ 43dc2eb928SDave Martin extern void __set_fiq_regs(unsigned long const *regs); 44dc2eb928SDave Martin extern void __get_fiq_regs(unsigned long *regs); 45dc2eb928SDave Martin 46dc2eb928SDave Martin static inline void set_fiq_regs(struct pt_regs const *regs) 47dc2eb928SDave Martin { 48dc2eb928SDave Martin __set_fiq_regs(®s->ARM_r8); 49dc2eb928SDave Martin } 50dc2eb928SDave Martin 51dc2eb928SDave Martin static inline void get_fiq_regs(struct pt_regs *regs) 52dc2eb928SDave Martin { 53dc2eb928SDave Martin __get_fiq_regs(®s->ARM_r8); 54dc2eb928SDave Martin } 55dc2eb928SDave Martin 564baa9922SRussell King #endif 57