Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0 */
0002 #ifndef _KBD_KERN_H
0003 #define _KBD_KERN_H
0004 
0005 #include <linux/tty.h>
0006 #include <linux/interrupt.h>
0007 #include <linux/keyboard.h>
0008 
0009 extern char *func_table[MAX_NR_FUNC];
0010 
0011 /*
0012  * kbd->xxx contains the VC-local things (flag settings etc..)
0013  *
0014  * Note: externally visible are LED_SCR, LED_NUM, LED_CAP defined in kd.h
0015  *       The code in KDGETLED / KDSETLED depends on the internal and
0016  *       external order being the same.
0017  *
0018  * Note: lockstate is used as index in the array key_map.
0019  */
0020 struct kbd_struct {
0021 
0022     unsigned char lockstate;
0023 /* 8 modifiers - the names do not have any meaning at all;
0024    they can be associated to arbitrarily chosen keys */
0025 #define VC_SHIFTLOCK    KG_SHIFT    /* shift lock mode */
0026 #define VC_ALTGRLOCK    KG_ALTGR    /* altgr lock mode */
0027 #define VC_CTRLLOCK KG_CTRL     /* control lock mode */
0028 #define VC_ALTLOCK  KG_ALT      /* alt lock mode */
0029 #define VC_SHIFTLLOCK   KG_SHIFTL   /* shiftl lock mode */
0030 #define VC_SHIFTRLOCK   KG_SHIFTR   /* shiftr lock mode */
0031 #define VC_CTRLLLOCK    KG_CTRLL    /* ctrll lock mode */
0032 #define VC_CTRLRLOCK    KG_CTRLR    /* ctrlr lock mode */
0033     unsigned char slockstate;   /* for `sticky' Shift, Ctrl, etc. */
0034 
0035     unsigned char ledmode:1;
0036 #define LED_SHOW_FLAGS 0        /* traditional state */
0037 #define LED_SHOW_IOCTL 1        /* only change leds upon ioctl */
0038 
0039     unsigned char ledflagstate:4;   /* flags, not lights */
0040     unsigned char default_ledflagstate:4;
0041 #define VC_SCROLLOCK    0   /* scroll-lock mode */
0042 #define VC_NUMLOCK  1   /* numeric lock mode */
0043 #define VC_CAPSLOCK 2   /* capslock mode */
0044 #define VC_KANALOCK 3   /* kanalock mode */
0045 
0046     unsigned char kbdmode:3;    /* one 3-bit value */
0047 #define VC_XLATE    0   /* translate keycodes using keymap */
0048 #define VC_MEDIUMRAW    1   /* medium raw (keycode) mode */
0049 #define VC_RAW      2   /* raw (scancode) mode */
0050 #define VC_UNICODE  3   /* Unicode mode */
0051 #define VC_OFF      4   /* disabled mode */
0052 
0053     unsigned char modeflags:5;
0054 #define VC_APPLIC   0   /* application key mode */
0055 #define VC_CKMODE   1   /* cursor key mode */
0056 #define VC_REPEAT   2   /* keyboard repeat */
0057 #define VC_CRLF     3   /* 0 - enter sends CR, 1 - enter sends CRLF */
0058 #define VC_META     4   /* 0 - meta, 1 - meta=prefix with ESC */
0059 };
0060 
0061 extern int kbd_init(void);
0062 
0063 extern void setledstate(struct kbd_struct *kbd, unsigned int led);
0064 
0065 extern int do_poke_blanked_console;
0066 
0067 extern void (*kbd_ledfunc)(unsigned int led);
0068 
0069 extern int set_console(int nr);
0070 extern void schedule_console_callback(void);
0071 
0072 static inline int vc_kbd_mode(struct kbd_struct * kbd, int flag)
0073 {
0074     return ((kbd->modeflags >> flag) & 1);
0075 }
0076 
0077 static inline int vc_kbd_led(struct kbd_struct * kbd, int flag)
0078 {
0079     return ((kbd->ledflagstate >> flag) & 1);
0080 }
0081 
0082 static inline void set_vc_kbd_mode(struct kbd_struct * kbd, int flag)
0083 {
0084     kbd->modeflags |= 1 << flag;
0085 }
0086 
0087 static inline void set_vc_kbd_led(struct kbd_struct * kbd, int flag)
0088 {
0089     kbd->ledflagstate |= 1 << flag;
0090 }
0091 
0092 static inline void clr_vc_kbd_mode(struct kbd_struct * kbd, int flag)
0093 {
0094     kbd->modeflags &= ~(1 << flag);
0095 }
0096 
0097 static inline void clr_vc_kbd_led(struct kbd_struct * kbd, int flag)
0098 {
0099     kbd->ledflagstate &= ~(1 << flag);
0100 }
0101 
0102 static inline void chg_vc_kbd_lock(struct kbd_struct * kbd, int flag)
0103 {
0104     kbd->lockstate ^= 1 << flag;
0105 }
0106 
0107 static inline void chg_vc_kbd_slock(struct kbd_struct * kbd, int flag)
0108 {
0109     kbd->slockstate ^= 1 << flag;
0110 }
0111 
0112 static inline void chg_vc_kbd_mode(struct kbd_struct * kbd, int flag)
0113 {
0114     kbd->modeflags ^= 1 << flag;
0115 }
0116 
0117 static inline void chg_vc_kbd_led(struct kbd_struct * kbd, int flag)
0118 {
0119     kbd->ledflagstate ^= 1 << flag;
0120 }
0121 
0122 #define U(x) ((x) ^ 0xf000)
0123 
0124 #define BRL_UC_ROW 0x2800
0125 
0126 /* keyboard.c */
0127 
0128 struct console;
0129 
0130 void vt_set_leds_compute_shiftstate(void);
0131 
0132 /* defkeymap.c */
0133 
0134 extern unsigned int keymap_count;
0135 
0136 #endif