File: /usr/src/linux/include/linux/kbd_kern.h

1     #ifndef _KBD_KERN_H
2     #define _KBD_KERN_H
3     
4     #include <linux/interrupt.h>
5     #include <linux/keyboard.h>
6     
7     extern struct tasklet_struct keyboard_tasklet;
8     
9     extern int shift_state;
10     
11     extern char *func_table[MAX_NR_FUNC];
12     extern char func_buf[];
13     extern char *funcbufptr;
14     extern int funcbufsize, funcbufleft;
15     
16     /*
17      * kbd->xxx contains the VC-local things (flag settings etc..)
18      *
19      * Note: externally visible are LED_SCR, LED_NUM, LED_CAP defined in kd.h
20      *       The code in KDGETLED / KDSETLED depends on the internal and
21      *       external order being the same.
22      *
23      * Note: lockstate is used as index in the array key_map.
24      */
25     struct kbd_struct {
26     
27     	unsigned char lockstate;
28     /* 8 modifiers - the names do not have any meaning at all;
29        they can be associated to arbitrarily chosen keys */
30     #define VC_SHIFTLOCK	KG_SHIFT	/* shift lock mode */
31     #define VC_ALTGRLOCK	KG_ALTGR	/* altgr lock mode */
32     #define VC_CTRLLOCK	KG_CTRL 	/* control lock mode */
33     #define VC_ALTLOCK	KG_ALT  	/* alt lock mode */
34     #define VC_SHIFTLLOCK	KG_SHIFTL	/* shiftl lock mode */
35     #define VC_SHIFTRLOCK	KG_SHIFTR	/* shiftr lock mode */
36     #define VC_CTRLLLOCK	KG_CTRLL 	/* ctrll lock mode */
37     #define VC_CTRLRLOCK	KG_CTRLR 	/* ctrlr lock mode */
38     	unsigned char slockstate; 	/* for `sticky' Shift, Ctrl, etc. */
39     
40     	unsigned char ledmode:2; 	/* one 2-bit value */
41     #define LED_SHOW_FLAGS 0        /* traditional state */
42     #define LED_SHOW_IOCTL 1        /* only change leds upon ioctl */
43     #define LED_SHOW_MEM 2          /* `heartbeat': peek into memory */
44     
45     	unsigned char ledflagstate:3;	/* flags, not lights */
46     	unsigned char default_ledflagstate:3;
47     #define VC_SCROLLOCK	0	/* scroll-lock mode */
48     #define VC_NUMLOCK	1	/* numeric lock mode */
49     #define VC_CAPSLOCK	2	/* capslock mode */
50     
51     	unsigned char kbdmode:2;	/* one 2-bit value */
52     #define VC_XLATE	0	/* translate keycodes using keymap */
53     #define VC_MEDIUMRAW	1	/* medium raw (keycode) mode */
54     #define VC_RAW		2	/* raw (scancode) mode */
55     #define VC_UNICODE	3	/* Unicode mode */
56     
57     	unsigned char modeflags:5;
58     #define VC_APPLIC	0	/* application key mode */
59     #define VC_CKMODE	1	/* cursor key mode */
60     #define VC_REPEAT	2	/* keyboard repeat */
61     #define VC_CRLF		3	/* 0 - enter sends CR, 1 - enter sends CRLF */
62     #define VC_META		4	/* 0 - meta, 1 - meta=prefix with ESC */
63     };
64     
65     extern struct kbd_struct kbd_table[];
66     
67     extern int kbd_init(void);
68     
69     extern unsigned char getledstate(void);
70     extern void setledstate(struct kbd_struct *kbd, unsigned int led);
71     
72     extern int do_poke_blanked_console;
73     
74     extern void (*kbd_ledfunc)(unsigned int led);
75     
76     extern void set_console(int nr);
77     extern void schedule_console_callback(void);
78     
79     static inline void set_leds(void)
80     {
81     	tasklet_schedule(&keyboard_tasklet);
82     }
83     
84     static inline int vc_kbd_mode(struct kbd_struct * kbd, int flag)
85     {
86     	return ((kbd->modeflags >> flag) & 1);
87     }
88     
89     static inline int vc_kbd_led(struct kbd_struct * kbd, int flag)
90     {
91     	return ((kbd->ledflagstate >> flag) & 1);
92     }
93     
94     static inline void set_vc_kbd_mode(struct kbd_struct * kbd, int flag)
95     {
96     	kbd->modeflags |= 1 << flag;
97     }
98     
99     static inline void set_vc_kbd_led(struct kbd_struct * kbd, int flag)
100     {
101     	kbd->ledflagstate |= 1 << flag;
102     }
103     
104     static inline void clr_vc_kbd_mode(struct kbd_struct * kbd, int flag)
105     {
106     	kbd->modeflags &= ~(1 << flag);
107     }
108     
109     static inline void clr_vc_kbd_led(struct kbd_struct * kbd, int flag)
110     {
111     	kbd->ledflagstate &= ~(1 << flag);
112     }
113     
114     static inline void chg_vc_kbd_lock(struct kbd_struct * kbd, int flag)
115     {
116     	kbd->lockstate ^= 1 << flag;
117     }
118     
119     static inline void chg_vc_kbd_slock(struct kbd_struct * kbd, int flag)
120     {
121     	kbd->slockstate ^= 1 << flag;
122     }
123     
124     static inline void chg_vc_kbd_mode(struct kbd_struct * kbd, int flag)
125     {
126     	kbd->modeflags ^= 1 << flag;
127     }
128     
129     static inline void chg_vc_kbd_led(struct kbd_struct * kbd, int flag)
130     {
131     	kbd->ledflagstate ^= 1 << flag;
132     }
133     
134     #define U(x) ((x) ^ 0xf000)
135     
136     /* keyboard.c */
137     
138     struct console;
139     
140     int getkeycode(unsigned int scancode);
141     int setkeycode(unsigned int scancode, unsigned int keycode);
142     void compute_shiftstate(void);
143     int keyboard_wait_for_keypress(struct console *);
144     
145     /* defkeymap.c */
146     
147     extern unsigned int keymap_count;
148     
149     /* console.c */
150     
151     static inline void con_schedule_flip(struct tty_struct *t)
152     {
153     	schedule_task(&t->flip.tqueue);
154     }
155     
156     #endif
157