sysrq.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* -*- linux-c -*-
  2.  *
  3.  * $Id: sysrq.h,v 1.3 1997/07/17 11:54:33 mj Exp $
  4.  *
  5.  * Linux Magic System Request Key Hacks
  6.  *
  7.  * (c) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
  8.  *
  9.  * (c) 2000 Crutcher Dunnavant <crutcher+kernel@datastacks.com>
  10.  * overhauled to use key registration
  11.  * based upon discusions in irc://irc.openprojects.net/#kernelnewbies
  12.  */
  13. #ifndef __LINUX_SYSRQ_H__
  14. #define __LINUX_SYSRQ_H__
  15. #include <linux/config.h>
  16. struct pt_regs;
  17. struct kbd_struct;
  18. struct tty_struct;
  19. struct sysrq_key_op {
  20. void (*handler)(int, struct pt_regs *,
  21. struct kbd_struct *, struct tty_struct *);
  22. char *help_msg;
  23. char *action_msg;
  24. };
  25. #ifdef CONFIG_MAGIC_SYSRQ
  26. /* Generic SysRq interface -- you may call it from any device driver, supplying
  27.  * ASCII code of the key, pointer to registers and kbd/tty structs (if they
  28.  * are available -- else NULL's).
  29.  */
  30. void handle_sysrq(int, struct pt_regs *,
  31. struct kbd_struct *, struct tty_struct *);
  32. /* 
  33.  * Nonlocking version of handle sysrq, used by sysrq handlers that need to
  34.  * call sysrq handlers
  35.  */
  36. void __handle_sysrq_nolock(int, struct pt_regs *,
  37.                 struct kbd_struct *, struct tty_struct *);
  38. /*
  39.  * Sysrq registration manipulation functions
  40.  */
  41. void __sysrq_lock_table (void);
  42. void __sysrq_unlock_table (void);
  43. struct sysrq_key_op *__sysrq_get_key_op (int key);
  44. void __sysrq_put_key_op (int key, struct sysrq_key_op *op_p);
  45. extern __inline__ int
  46. __sysrq_swap_key_ops_nolock(int key, struct sysrq_key_op *insert_op_p,
  47. struct sysrq_key_op *remove_op_p)
  48. {
  49. int retval;
  50. if (__sysrq_get_key_op(key) == remove_op_p) {
  51. __sysrq_put_key_op(key, insert_op_p);
  52. retval = 0;
  53. } else {
  54.                 retval = -1;
  55. }
  56. return retval;
  57. }
  58. extern __inline__ int
  59. __sysrq_swap_key_ops(int key, struct sysrq_key_op *insert_op_p,
  60. struct sysrq_key_op *remove_op_p) {
  61. int retval;
  62. __sysrq_lock_table();
  63. retval = __sysrq_swap_key_ops_nolock(key, insert_op_p, remove_op_p);
  64. __sysrq_unlock_table();
  65. return retval;
  66. }
  67. static inline int register_sysrq_key(int key, struct sysrq_key_op *op_p)
  68. {
  69. return __sysrq_swap_key_ops(key, op_p, NULL);
  70. }
  71. static inline int unregister_sysrq_key(int key, struct sysrq_key_op *op_p)
  72. {
  73. return __sysrq_swap_key_ops(key, NULL, op_p);
  74. }
  75. #else
  76. static inline int __reterr(void)
  77. {
  78. return -EINVAL;
  79. }
  80. #define register_sysrq_key(ig,nore) __reterr()
  81. #define unregister_sysrq_key(ig,nore) __reterr()
  82. #endif
  83. /* Deferred actions */
  84. extern volatile int emergency_sync_scheduled;
  85. #define EMERG_SYNC 1
  86. #define EMERG_REMOUNT 2
  87. void do_emergency_sync(void);
  88. #ifdef CONFIG_MAGIC_SYSRQ
  89. #define CHECK_EMERGENCY_SYNC
  90. if (emergency_sync_scheduled)
  91. do_emergency_sync();
  92. #else
  93. #define CHECK_EMERGENCY_SYNC
  94. #endif
  95. #endif /* __LINUX_SYSRQ_H__ */