11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/* 24baa9922430662431231ac637adedddbb0cfb2d7Russell King * arch/arm/include/asm/fiq.h 31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * 41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Support for FIQ on ARM architectures. 51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Written by Philip Blundell <philb@gnu.org>, 1998 61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Re-written by Russell King 72846d84ffa4408c9810fabad74cb7aec410352fcDave Martin * 82846d84ffa4408c9810fabad74cb7aec410352fcDave Martin * NOTE: The FIQ mode registers are not magically preserved across 92846d84ffa4408c9810fabad74cb7aec410352fcDave Martin * suspend/resume. 102846d84ffa4408c9810fabad74cb7aec410352fcDave Martin * 112846d84ffa4408c9810fabad74cb7aec410352fcDave Martin * Drivers which require these registers to be preserved across power 122846d84ffa4408c9810fabad74cb7aec410352fcDave Martin * management operations must implement appropriate suspend/resume handlers to 132846d84ffa4408c9810fabad74cb7aec410352fcDave Martin * save and restore them. 141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __ASM_FIQ_H 171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __ASM_FIQ_H 181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/ptrace.h> 201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstruct fiq_handler { 221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds struct fiq_handler *next; 231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Name 241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds const char *name; 261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* Called to ask driver to relinquish/ 271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * reacquire FIQ 281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * return zero to accept, or -<errno> 291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds int (*fiq_op)(void *, int relinquish); 311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds /* data for the relinquish/reacquire functions 321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */ 331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds void *dev_id; 341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}; 351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern int claim_fiq(struct fiq_handler *f); 371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void release_fiq(struct fiq_handler *f); 381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void set_fiq_handler(void *start, unsigned int length); 391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void enable_fiq(int fiq); 401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsextern void disable_fiq(int fiq); 411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds 42dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martin/* helpers defined in fiqasm.S: */ 43dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martinextern void __set_fiq_regs(unsigned long const *regs); 44dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martinextern void __get_fiq_regs(unsigned long *regs); 45dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martin 46dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martinstatic inline void set_fiq_regs(struct pt_regs const *regs) 47dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martin{ 48dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martin __set_fiq_regs(®s->ARM_r8); 49dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martin} 50dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martin 51dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martinstatic inline void get_fiq_regs(struct pt_regs *regs) 52dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martin{ 53dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martin __get_fiq_regs(®s->ARM_r8); 54dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martin} 55dc2eb928a1bcf6a48f40c1f2ff21b66bdbf91a3cDave Martin 561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif 57