#define pr_fmt(fmt) …
#include <linux/consolemap.h>
#include <linux/init.h>
#include <linux/input.h>
#include <linux/jiffies.h>
#include <linux/kbd_diacr.h>
#include <linux/kbd_kern.h>
#include <linux/leds.h>
#include <linux/mm.h>
#include <linux/module.h>
#include <linux/nospec.h>
#include <linux/notifier.h>
#include <linux/reboot.h>
#include <linux/sched/debug.h>
#include <linux/sched/signal.h>
#include <linux/slab.h>
#include <linux/spinlock.h>
#include <linux/string.h>
#include <linux/tty_flip.h>
#include <linux/tty.h>
#include <linux/uaccess.h>
#include <linux/vt_kern.h>
#include <asm/irq_regs.h>
#define KBD_DEFMODE …
#if defined(CONFIG_X86) || defined(CONFIG_PARISC)
#include <asm/kbdleds.h>
#else
static inline int kbd_defleds(void)
{
return 0;
}
#endif
#define KBD_DEFLOCK …
#define K_HANDLERS …
k_handler_fn;
static k_handler_fn K_HANDLERS;
static k_handler_fn *k_handler[16] = …;
#define FN_HANDLERS …
fn_handler_fn;
static fn_handler_fn FN_HANDLERS;
static fn_handler_fn *fn_handler[] = …;
struct vt_spawn_console vt_spawn_con = …;
static struct kbd_struct kbd_table[MAX_NR_CONSOLES];
static struct kbd_struct *kbd = …;
static const unsigned char max_vals[] = …;
static const int NR_TYPES = …;
static void kbd_bh(struct tasklet_struct *unused);
static DECLARE_TASKLET_DISABLED(keyboard_tasklet, kbd_bh);
static struct input_handler kbd_handler;
static DEFINE_SPINLOCK(kbd_event_lock);
static DEFINE_SPINLOCK(led_lock);
static DEFINE_SPINLOCK(func_buf_lock);
static DECLARE_BITMAP(key_down, KEY_CNT);
static unsigned char shift_down[NR_SHIFT];
static bool dead_key_next;
static bool npadch_active;
static unsigned int npadch_value;
static unsigned int diacr;
static bool rep;
static int shift_state = …;
static unsigned int ledstate = …;
static unsigned char ledioctl;
static bool vt_switch;
static ATOMIC_NOTIFIER_HEAD(keyboard_notifier_list);
int register_keyboard_notifier(struct notifier_block *nb)
{ … }
EXPORT_SYMBOL_GPL(…);
int unregister_keyboard_notifier(struct notifier_block *nb)
{ … }
EXPORT_SYMBOL_GPL(…);
struct getset_keycode_data { … };
static int getkeycode_helper(struct input_handle *handle, void *data)
{ … }
static int getkeycode(unsigned int scancode)
{ … }
static int setkeycode_helper(struct input_handle *handle, void *data)
{ … }
static int setkeycode(unsigned int scancode, unsigned int keycode)
{ … }
static int kd_sound_helper(struct input_handle *handle, void *data)
{ … }
static void kd_nosound(struct timer_list *unused)
{ … }
static DEFINE_TIMER(kd_mksound_timer, kd_nosound);
void kd_mksound(unsigned int hz, unsigned int ticks)
{ … }
EXPORT_SYMBOL(…);
static int kbd_rate_helper(struct input_handle *handle, void *data)
{ … }
int kbd_rate(struct kbd_repeat *rpt)
{ … }
static void put_queue(struct vc_data *vc, int ch)
{ … }
static void puts_queue(struct vc_data *vc, const char *cp)
{ … }
static void applkey(struct vc_data *vc, int key, char mode)
{ … }
static void to_utf8(struct vc_data *vc, uint c)
{ … }
static void set_leds(void)
{ … }
static void do_compute_shiftstate(void)
{ … }
void vt_set_leds_compute_shiftstate(void)
{ … }
static unsigned int handle_diacr(struct vc_data *vc, unsigned int ch)
{ … }
static void fn_enter(struct vc_data *vc)
{ … }
static void fn_caps_toggle(struct vc_data *vc)
{ … }
static void fn_caps_on(struct vc_data *vc)
{ … }
static void fn_show_ptregs(struct vc_data *vc)
{ … }
static void fn_hold(struct vc_data *vc)
{ … }
static void fn_num(struct vc_data *vc)
{ … }
static void fn_bare_num(struct vc_data *vc)
{ … }
static void fn_lastcons(struct vc_data *vc)
{ … }
static void fn_dec_console(struct vc_data *vc)
{ … }
static void fn_inc_console(struct vc_data *vc)
{ … }
static void fn_send_intr(struct vc_data *vc)
{ … }
static void fn_scroll_forw(struct vc_data *vc)
{ … }
static void fn_scroll_back(struct vc_data *vc)
{ … }
static void fn_show_mem(struct vc_data *vc)
{ … }
static void fn_show_state(struct vc_data *vc)
{ … }
static void fn_boot_it(struct vc_data *vc)
{ … }
static void fn_compose(struct vc_data *vc)
{ … }
static void fn_spawn_con(struct vc_data *vc)
{ … }
static void fn_SAK(struct vc_data *vc)
{ … }
static void fn_null(struct vc_data *vc)
{ … }
static void k_ignore(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_spec(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_lowercase(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_unicode(struct vc_data *vc, unsigned int value, char up_flag)
{ … }
static void k_deadunicode(struct vc_data *vc, unsigned int value, char up_flag)
{ … }
static void k_self(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_dead2(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_dead(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_cons(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_fn(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_cur(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_pad(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_shift(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_meta(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_ascii(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_lock(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static void k_slock(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
static unsigned brl_timeout = …;
MODULE_PARM_DESC(…) …;
module_param(brl_timeout, uint, 0644);
static unsigned brl_nbchords = …;
MODULE_PARM_DESC(…) …;
module_param(brl_nbchords, uint, 0644);
static void k_brlcommit(struct vc_data *vc, unsigned int pattern, char up_flag)
{ … }
static void k_brl(struct vc_data *vc, unsigned char value, char up_flag)
{ … }
#if IS_ENABLED(CONFIG_INPUT_LEDS) && IS_ENABLED(CONFIG_LEDS_TRIGGERS)
struct kbd_led_trigger { … };
static int kbd_led_trigger_activate(struct led_classdev *cdev)
{ … }
#define KBD_LED_TRIGGER(_led_bit, _name) …
#define KBD_LOCKSTATE_TRIGGER(_led_bit, _name) …
static struct kbd_led_trigger kbd_led_triggers[] = …;
static void kbd_propagate_led_state(unsigned int old_state,
unsigned int new_state)
{ … }
static int kbd_update_leds_helper(struct input_handle *handle, void *data)
{ … }
static void kbd_init_leds(void)
{ … }
#else
static int kbd_update_leds_helper(struct input_handle *handle, void *data)
{
unsigned int leds = *(unsigned int *)data;
if (test_bit(EV_LED, handle->dev->evbit)) {
input_inject_event(handle, EV_LED, LED_SCROLLL, !!(leds & BIT(0)));
input_inject_event(handle, EV_LED, LED_NUML, !!(leds & BIT(1)));
input_inject_event(handle, EV_LED, LED_CAPSL, !!(leds & BIT(2)));
input_inject_event(handle, EV_SYN, SYN_REPORT, 0);
}
return 0;
}
static void kbd_propagate_led_state(unsigned int old_state,
unsigned int new_state)
{
input_handler_for_each_handle(&kbd_handler, &new_state,
kbd_update_leds_helper);
}
static void kbd_init_leds(void)
{
}
#endif
static unsigned char getledstate(void)
{ … }
void setledstate(struct kbd_struct *kb, unsigned int led)
{ … }
static inline unsigned char getleds(void)
{ … }
int vt_get_leds(unsigned int console, int flag)
{ … }
EXPORT_SYMBOL_GPL(…);
void vt_set_led_state(unsigned int console, int leds)
{ … }
void vt_kbd_con_start(unsigned int console)
{ … }
void vt_kbd_con_stop(unsigned int console)
{ … }
static void kbd_bh(struct tasklet_struct *unused)
{ … }
#if defined(CONFIG_X86) || defined(CONFIG_ALPHA) ||\
defined(CONFIG_MIPS) || defined(CONFIG_PPC) || defined(CONFIG_SPARC) ||\
defined(CONFIG_PARISC) || defined(CONFIG_SUPERH) ||\
(defined(CONFIG_ARM) && defined(CONFIG_KEYBOARD_ATKBD) && !defined(CONFIG_ARCH_RPC))
static inline bool kbd_is_hw_raw(const struct input_dev *dev)
{ … }
static const unsigned short x86_keycodes[256] = …;
#ifdef CONFIG_SPARC
static int sparc_l1_a_state;
extern void sun_do_break(void);
#endif
static int emulate_raw(struct vc_data *vc, unsigned int keycode,
unsigned char up_flag)
{ … }
#else
static inline bool kbd_is_hw_raw(const struct input_dev *dev)
{
return false;
}
static int emulate_raw(struct vc_data *vc, unsigned int keycode, unsigned char up_flag)
{
if (keycode > 127)
return -1;
put_queue(vc, keycode | up_flag);
return 0;
}
#endif
static void kbd_rawcode(unsigned char data)
{ … }
static void kbd_keycode(unsigned int keycode, int down, bool hw_raw)
{ … }
static void kbd_event(struct input_handle *handle, unsigned int event_type,
unsigned int event_code, int value)
{ … }
static bool kbd_match(struct input_handler *handler, struct input_dev *dev)
{ … }
static int kbd_connect(struct input_handler *handler, struct input_dev *dev,
const struct input_device_id *id)
{ … }
static void kbd_disconnect(struct input_handle *handle)
{ … }
static void kbd_start(struct input_handle *handle)
{ … }
static const struct input_device_id kbd_ids[] = …;
MODULE_DEVICE_TABLE(input, kbd_ids);
static struct input_handler kbd_handler = …;
int __init kbd_init(void)
{ … }
int vt_do_diacrit(unsigned int cmd, void __user *udp, int perm)
{ … }
int vt_do_kdskbmode(unsigned int console, unsigned int arg)
{ … }
int vt_do_kdskbmeta(unsigned int console, unsigned int arg)
{ … }
int vt_do_kbkeycode_ioctl(int cmd, struct kbkeycode __user *user_kbkc,
int perm)
{ … }
static unsigned short vt_kdgkbent(unsigned char kbdmode, unsigned char idx,
unsigned char map)
{ … }
static int vt_kdskbent(unsigned char kbdmode, unsigned char idx,
unsigned char map, unsigned short val)
{ … }
int vt_do_kdsk_ioctl(int cmd, struct kbentry __user *user_kbe, int perm,
unsigned int console)
{ … }
static char *vt_kdskbsent(char *kbs, unsigned char cur)
{ … }
int vt_do_kdgkb_ioctl(int cmd, struct kbsentry __user *user_kdgkb, int perm)
{ … }
int vt_do_kdskled(unsigned int console, int cmd, unsigned long arg, int perm)
{ … }
int vt_do_kdgkbmode(unsigned int console)
{ … }
int vt_do_kdgkbmeta(unsigned int console)
{ … }
void vt_reset_unicode(unsigned int console)
{ … }
int vt_get_shift_state(void)
{ … }
void vt_reset_keyboard(unsigned int console)
{ … }
int vt_get_kbd_mode_bit(unsigned int console, int bit)
{ … }
void vt_set_kbd_mode_bit(unsigned int console, int bit)
{ … }
void vt_clr_kbd_mode_bit(unsigned int console, int bit)
{ … }