File: /usr/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 struct tasklet_struct console_tasklet;
73     
74     extern int do_poke_blanked_console;
75     
76     extern void (*kbd_ledfunc)(unsigned int led);
77     
78     extern inline void show_console(void)
79     {
80     	do_poke_blanked_console = 1;
81     	tasklet_schedule(&console_tasklet);
82     }
83     
84     extern inline void set_console(int nr)
85     {
86     	want_console = nr;
87     	tasklet_schedule(&console_tasklet);
88     }
89     
90     extern inline void set_leds(void)
91     {
92     	tasklet_schedule(&keyboard_tasklet);
93     }
94     
95     extern inline int vc_kbd_mode(struct kbd_struct * kbd, int flag)
96     {
97     	return ((kbd->modeflags >> flag) & 1);
98     }
99     
100     extern inline int vc_kbd_led(struct kbd_struct * kbd, int flag)
101     {
102     	return ((kbd->ledflagstate >> flag) & 1);
103     }
104     
105     extern inline void set_vc_kbd_mode(struct kbd_struct * kbd, int flag)
106     {
107     	kbd->modeflags |= 1 << flag;
108     }
109     
110     extern inline void set_vc_kbd_led(struct kbd_struct * kbd, int flag)
111     {
112     	kbd->ledflagstate |= 1 << flag;
113     }
114     
115     extern inline void clr_vc_kbd_mode(struct kbd_struct * kbd, int flag)
116     {
117     	kbd->modeflags &= ~(1 << flag);
118     }
119     
120     extern inline void clr_vc_kbd_led(struct kbd_struct * kbd, int flag)
121     {
122     	kbd->ledflagstate &= ~(1 << flag);
123     }
124     
125     extern inline void chg_vc_kbd_lock(struct kbd_struct * kbd, int flag)
126     {
127     	kbd->lockstate ^= 1 << flag;
128     }
129     
130     extern inline void chg_vc_kbd_slock(struct kbd_struct * kbd, int flag)
131     {
132     	kbd->slockstate ^= 1 << flag;
133     }
134     
135     extern inline void chg_vc_kbd_mode(struct kbd_struct * kbd, int flag)
136     {
137     	kbd->modeflags ^= 1 << flag;
138     }
139     
140     extern inline void chg_vc_kbd_led(struct kbd_struct * kbd, int flag)
141     {
142     	kbd->ledflagstate ^= 1 << flag;
143     }
144     
145     #define U(x) ((x) ^ 0xf000)
146     
147     /* keyboard.c */
148     
149     struct console;
150     
151     int getkeycode(unsigned int scancode);
152     int setkeycode(unsigned int scancode, unsigned int keycode);
153     void compute_shiftstate(void);
154     int keyboard_wait_for_keypress(struct console *);
155     
156     /* defkeymap.c */
157     
158     extern unsigned int keymap_count;
159     
160     /* console.c */
161     
162     extern task_queue con_task_queue;
163     
164     extern inline void con_schedule_flip(struct tty_struct *t)
165     {
166     	queue_task(&t->flip.tqueue, &con_task_queue);
167     	tasklet_schedule(&console_tasklet);
168     }
169     
170     #endif
171