Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 /*
0003  *  arch/arm/include/asm/fiq.h
0004  *
0005  * Support for FIQ on ARM architectures.
0006  * Written by Philip Blundell <philb@gnu.org>, 1998
0007  * Re-written by Russell King
0008  *
0009  * NOTE: The FIQ mode registers are not magically preserved across
0010  * suspend/resume.
0011  *
0012  * Drivers which require these registers to be preserved across power
0013  * management operations must implement appropriate suspend/resume handlers to
0014  * save and restore them.
0015  */
0016 
0017 #ifndef __ASM_FIQ_H
0018 #define __ASM_FIQ_H
0019 
0020 #include <asm/ptrace.h>
0021 
0022 struct fiq_handler {
0023     struct fiq_handler *next;
0024     /* Name
0025      */
0026     const char *name;
0027     /* Called to ask driver to relinquish/
0028      * reacquire FIQ
0029      * return zero to accept, or -<errno>
0030      */
0031     int (*fiq_op)(void *, int relinquish);
0032     /* data for the relinquish/reacquire functions
0033      */
0034     void *dev_id;
0035 };
0036 
0037 extern int claim_fiq(struct fiq_handler *f);
0038 extern void release_fiq(struct fiq_handler *f);
0039 extern void set_fiq_handler(void *start, unsigned int length);
0040 extern void enable_fiq(int fiq);
0041 extern void disable_fiq(int fiq);
0042 
0043 /* helpers defined in fiqasm.S: */
0044 extern void __set_fiq_regs(unsigned long const *regs);
0045 extern void __get_fiq_regs(unsigned long *regs);
0046 
0047 static inline void set_fiq_regs(struct pt_regs const *regs)
0048 {
0049     __set_fiq_regs(&regs->ARM_r8);
0050 }
0051 
0052 static inline void get_fiq_regs(struct pt_regs *regs)
0053 {
0054     __get_fiq_regs(&regs->ARM_r8);
0055 }
0056 
0057 #endif