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