aboutsummaryrefslogtreecommitdiffstats
path: root/xen/include/xen/keyhandler.h
diff options
context:
space:
mode:
authorkaf24@freefall.cl.cam.ac.uk <kaf24@freefall.cl.cam.ac.uk>2004-11-13 16:10:28 +0000
committerkaf24@freefall.cl.cam.ac.uk <kaf24@freefall.cl.cam.ac.uk>2004-11-13 16:10:28 +0000
commit92d81c3c284e90da3169e79b5e8ab91e17403961 (patch)
tree0cded6b3db0680dc5bb92d9d42faccada49c7c5e /xen/include/xen/keyhandler.h
parentd2d8210fc1e90400d59f21da8e7dc1922a4afffa (diff)
downloadxen-92d81c3c284e90da3169e79b5e8ab91e17403961.tar.gz
xen-92d81c3c284e90da3169e79b5e8ab91e17403961.tar.bz2
xen-92d81c3c284e90da3169e79b5e8ab91e17403961.zip
bitkeeper revision 1.1159.170.18 (419631f46LScNrXRGEL-VrxeFQPSBA)
Clean up keyhandler interface. Now register a new keyhandler with register_keyhandler() or register_irq_keyhandler().
Diffstat (limited to 'xen/include/xen/keyhandler.h')
-rw-r--r--xen/include/xen/keyhandler.h43
1 files changed, 31 insertions, 12 deletions
diff --git a/xen/include/xen/keyhandler.h b/xen/include/xen/keyhandler.h
index 09e2f234ad..e3d49c9086 100644
--- a/xen/include/xen/keyhandler.h
+++ b/xen/include/xen/keyhandler.h
@@ -1,16 +1,35 @@
-/*
-** We keep an array of 'handlers' for each key code between 0 and 255;
-** this is intended to allow very simple debugging routines (toggle
-** debug flag, dump registers, reboot, etc) to be hooked in in a slightly
-** nicer fashion than just editing the serial/keyboard drivers.
-*/
-struct xen_regs;
+/******************************************************************************
+ * keyhandler.h
+ *
+ * We keep an array of 'handlers' for each key code between 0 and 255;
+ * this is intended to allow very simple debugging routines (toggle
+ * debug flag, dump registers, reboot, etc) to be hooked in in a slightly
+ * nicer fashion than just editing the serial/keyboard drivers.
+ */
-typedef void key_handler(unsigned char key);
+#ifndef __XEN_KEYHANDLER_H__
+#define __XEN_KEYHANDLER_H__
-extern void add_key_handler(unsigned char key,
- key_handler *handler, char *desc);
-extern void add_key_handler_no_defer(unsigned char key,
- key_handler *handler, char *desc);
+#include <asm/regs.h>
+/*
+ * Register a callback function for key @key. The callback occurs in
+ * softirq context with no locks held and interrupts enabled.
+ */
+typedef void keyhandler_t(unsigned char key);
+extern void register_keyhandler(
+ unsigned char key, keyhandler_t *handler, char *desc);
+
+/*
+ * Register an IRQ callback function for key @key. The callback occurs
+ * synchronously in hard-IRQ context with interrupts disabled. The @regs
+ * callback parameter points at the interrupted register context.
+ */
+typedef void irq_keyhandler_t(unsigned char key, struct xen_regs *regs);
+extern void register_irq_keyhandler(
+ unsigned char key, irq_keyhandler_t *handler, char *desc);
+
+/* Inject a keypress into the key-handling subsystem. */
extern void handle_keypress(unsigned char key, struct xen_regs *regs);
+
+#endif /* __XEN_KEYHANDLER_H__ */