Linux Audio

Check our new training course

Loading...
v6.8
  1// SPDX-License-Identifier: GPL-2.0
  2/*
  3 * Based on the same principle as kgdboe using the NETPOLL api, this
  4 * driver uses a console polling api to implement a gdb serial inteface
  5 * which is multiplexed on a console port.
  6 *
  7 * Maintainer: Jason Wessel <jason.wessel@windriver.com>
  8 *
  9 * 2007-2008 (c) Jason Wessel - Wind River Systems, Inc.
 10 */
 11
 12#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 13
 14#include <linux/kernel.h>
 15#include <linux/ctype.h>
 16#include <linux/kgdb.h>
 17#include <linux/kdb.h>
 18#include <linux/tty.h>
 19#include <linux/console.h>
 20#include <linux/vt_kern.h>
 21#include <linux/input.h>
 
 22#include <linux/module.h>
 23#include <linux/platform_device.h>
 24#include <linux/serial_core.h>
 25
 26#define MAX_CONFIG_LEN		40
 27
 28static struct kgdb_io		kgdboc_io_ops;
 29
 30/* -1 = init not run yet, 0 = unconfigured, 1 = configured. */
 31static int configured		= -1;
 32static DEFINE_MUTEX(config_mutex);
 33
 34static char config[MAX_CONFIG_LEN];
 35static struct kparam_string kps = {
 36	.string			= config,
 37	.maxlen			= MAX_CONFIG_LEN,
 38};
 39
 40static int kgdboc_use_kms;  /* 1 if we use kernel mode switching */
 41static struct tty_driver	*kgdb_tty_driver;
 42static int			kgdb_tty_line;
 43
 44static struct platform_device *kgdboc_pdev;
 45
 46#if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE)
 47static struct kgdb_io		kgdboc_earlycon_io_ops;
 48static int                      (*earlycon_orig_exit)(struct console *con);
 49#endif /* IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
 50
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 51#ifdef CONFIG_KDB_KEYBOARD
 52static int kgdboc_reset_connect(struct input_handler *handler,
 53				struct input_dev *dev,
 54				const struct input_device_id *id)
 55{
 56	input_reset_device(dev);
 57
 58	/* Return an error - we do not want to bind, just to reset */
 59	return -ENODEV;
 60}
 61
 62static void kgdboc_reset_disconnect(struct input_handle *handle)
 63{
 64	/* We do not expect anyone to actually bind to us */
 65	BUG();
 66}
 67
 68static const struct input_device_id kgdboc_reset_ids[] = {
 69	{
 70		.flags = INPUT_DEVICE_ID_MATCH_EVBIT,
 71		.evbit = { BIT_MASK(EV_KEY) },
 72	},
 73	{ }
 74};
 75
 76static struct input_handler kgdboc_reset_handler = {
 77	.connect	= kgdboc_reset_connect,
 78	.disconnect	= kgdboc_reset_disconnect,
 79	.name		= "kgdboc_reset",
 80	.id_table	= kgdboc_reset_ids,
 81};
 82
 83static DEFINE_MUTEX(kgdboc_reset_mutex);
 84
 85static void kgdboc_restore_input_helper(struct work_struct *dummy)
 86{
 87	/*
 88	 * We need to take a mutex to prevent several instances of
 89	 * this work running on different CPUs so they don't try
 90	 * to register again already registered handler.
 91	 */
 92	mutex_lock(&kgdboc_reset_mutex);
 93
 94	if (input_register_handler(&kgdboc_reset_handler) == 0)
 95		input_unregister_handler(&kgdboc_reset_handler);
 96
 97	mutex_unlock(&kgdboc_reset_mutex);
 98}
 99
100static DECLARE_WORK(kgdboc_restore_input_work, kgdboc_restore_input_helper);
101
 
 
 
 
 
 
 
102static void kgdboc_restore_input(void)
103{
104	if (likely(system_state == SYSTEM_RUNNING))
105		schedule_work(&kgdboc_restore_input_work);
106}
107
108static int kgdboc_register_kbd(char **cptr)
109{
110	if (strncmp(*cptr, "kbd", 3) == 0 ||
111		strncmp(*cptr, "kdb", 3) == 0) {
112		if (kdb_poll_idx < KDB_POLL_FUNC_MAX) {
113			kdb_poll_funcs[kdb_poll_idx] = kdb_get_kbd_char;
114			kdb_poll_idx++;
115			if (cptr[0][3] == ',')
116				*cptr += 4;
117			else
118				return 1;
119		}
120	}
121	return 0;
122}
123
124static void kgdboc_unregister_kbd(void)
125{
126	int i;
127
128	for (i = 0; i < kdb_poll_idx; i++) {
129		if (kdb_poll_funcs[i] == kdb_get_kbd_char) {
130			kdb_poll_idx--;
131			kdb_poll_funcs[i] = kdb_poll_funcs[kdb_poll_idx];
132			kdb_poll_funcs[kdb_poll_idx] = NULL;
133			i--;
134		}
135	}
 
136	flush_work(&kgdboc_restore_input_work);
137}
138#else /* ! CONFIG_KDB_KEYBOARD */
139#define kgdboc_register_kbd(x) 0
140#define kgdboc_unregister_kbd()
141#define kgdboc_restore_input()
142#endif /* ! CONFIG_KDB_KEYBOARD */
143
144#if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE)
145static void cleanup_earlycon(void)
146{
147	if (kgdboc_earlycon_io_ops.cons)
148		kgdb_unregister_io_module(&kgdboc_earlycon_io_ops);
149}
150#else /* !IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
151static inline void cleanup_earlycon(void) { }
152#endif /* !IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
153
154static void cleanup_kgdboc(void)
155{
156	cleanup_earlycon();
157
158	if (configured != 1)
159		return;
160
161	if (kgdb_unregister_nmi_console())
162		return;
163	kgdboc_unregister_kbd();
164	kgdb_unregister_io_module(&kgdboc_io_ops);
165}
166
167static int configure_kgdboc(void)
168{
169	struct tty_driver *p;
170	int tty_line = 0;
171	int err = -ENODEV;
172	char *cptr = config;
173	struct console *cons;
174	int cookie;
175
176	if (!strlen(config) || isspace(config[0])) {
177		err = 0;
178		goto noconfig;
179	}
180
181	kgdboc_io_ops.cons = NULL;
182	kgdb_tty_driver = NULL;
183
184	kgdboc_use_kms = 0;
185	if (strncmp(cptr, "kms,", 4) == 0) {
186		cptr += 4;
187		kgdboc_use_kms = 1;
188	}
189
190	if (kgdboc_register_kbd(&cptr))
191		goto do_register;
192
193	p = tty_find_polling_driver(cptr, &tty_line);
194	if (!p)
195		goto noconfig;
196
197	/*
198	 * Take console_lock to serialize device() callback with
199	 * other console operations. For example, fg_console is
200	 * modified under console_lock when switching vt.
201	 */
202	console_lock();
203
204	cookie = console_srcu_read_lock();
205	for_each_console_srcu(cons) {
206		int idx;
207		if (cons->device && cons->device(cons, &idx) == p &&
208		    idx == tty_line) {
209			kgdboc_io_ops.cons = cons;
210			break;
211		}
212	}
213	console_srcu_read_unlock(cookie);
214
215	console_unlock();
216
217	kgdb_tty_driver = p;
218	kgdb_tty_line = tty_line;
219
220do_register:
221	err = kgdb_register_io_module(&kgdboc_io_ops);
222	if (err)
223		goto noconfig;
224
225	err = kgdb_register_nmi_console();
226	if (err)
227		goto nmi_con_failed;
228
229	configured = 1;
230
231	return 0;
232
233nmi_con_failed:
234	kgdb_unregister_io_module(&kgdboc_io_ops);
235noconfig:
236	kgdboc_unregister_kbd();
237	configured = 0;
238
239	return err;
240}
241
242static int kgdboc_probe(struct platform_device *pdev)
243{
244	int ret = 0;
245
246	mutex_lock(&config_mutex);
247	if (configured != 1) {
248		ret = configure_kgdboc();
249
250		/* Convert "no device" to "defer" so we'll keep trying */
251		if (ret == -ENODEV)
252			ret = -EPROBE_DEFER;
253	}
254	mutex_unlock(&config_mutex);
255
256	return ret;
257}
258
259static struct platform_driver kgdboc_platform_driver = {
260	.probe = kgdboc_probe,
261	.driver = {
262		.name = "kgdboc",
263		.suppress_bind_attrs = true,
264	},
265};
266
267static int __init init_kgdboc(void)
268{
269	int ret;
270
271	/*
272	 * kgdboc is a little bit of an odd "platform_driver".  It can be
273	 * up and running long before the platform_driver object is
274	 * created and thus doesn't actually store anything in it.  There's
275	 * only one instance of kgdb so anything is stored as global state.
276	 * The platform_driver is only created so that we can leverage the
277	 * kernel's mechanisms (like -EPROBE_DEFER) to call us when our
278	 * underlying tty is ready.  Here we init our platform driver and
279	 * then create the single kgdboc instance.
280	 */
281	ret = platform_driver_register(&kgdboc_platform_driver);
282	if (ret)
283		return ret;
284
285	kgdboc_pdev = platform_device_alloc("kgdboc", PLATFORM_DEVID_NONE);
286	if (!kgdboc_pdev) {
287		ret = -ENOMEM;
288		goto err_did_register;
289	}
290
291	ret = platform_device_add(kgdboc_pdev);
292	if (!ret)
293		return 0;
294
295	platform_device_put(kgdboc_pdev);
296
297err_did_register:
298	platform_driver_unregister(&kgdboc_platform_driver);
299	return ret;
300}
301
302static void exit_kgdboc(void)
303{
304	mutex_lock(&config_mutex);
305	cleanup_kgdboc();
306	mutex_unlock(&config_mutex);
307
308	platform_device_unregister(kgdboc_pdev);
309	platform_driver_unregister(&kgdboc_platform_driver);
310}
311
312static int kgdboc_get_char(void)
313{
314	if (!kgdb_tty_driver)
315		return -1;
316	return kgdb_tty_driver->ops->poll_get_char(kgdb_tty_driver,
317						kgdb_tty_line);
318}
319
320static void kgdboc_put_char(u8 chr)
321{
322	if (!kgdb_tty_driver)
323		return;
324	kgdb_tty_driver->ops->poll_put_char(kgdb_tty_driver,
325					kgdb_tty_line, chr);
326}
327
328static int param_set_kgdboc_var(const char *kmessage,
329				const struct kernel_param *kp)
330{
331	size_t len = strlen(kmessage);
332	int ret = 0;
333
334	if (len >= MAX_CONFIG_LEN) {
335		pr_err("config string too long\n");
336		return -ENOSPC;
337	}
338
339	if (kgdb_connected) {
340		pr_err("Cannot reconfigure while KGDB is connected.\n");
341		return -EBUSY;
342	}
343
344	mutex_lock(&config_mutex);
345
346	strcpy(config, kmessage);
347	/* Chop out \n char as a result of echo */
348	if (len && config[len - 1] == '\n')
349		config[len - 1] = '\0';
350
351	if (configured == 1)
352		cleanup_kgdboc();
353
354	/*
355	 * Configure with the new params as long as init already ran.
356	 * Note that we can get called before init if someone loads us
357	 * with "modprobe kgdboc kgdboc=..." or if they happen to use
358	 * the odd syntax of "kgdboc.kgdboc=..." on the kernel command.
359	 */
360	if (configured >= 0)
361		ret = configure_kgdboc();
362
363	/*
364	 * If we couldn't configure then clear out the config.  Note that
365	 * specifying an invalid config on the kernel command line vs.
366	 * through sysfs have slightly different behaviors.  If we fail
367	 * to configure what was specified on the kernel command line
368	 * we'll leave it in the 'config' and return -EPROBE_DEFER from
369	 * our probe.  When specified through sysfs userspace is
370	 * responsible for loading the tty driver before setting up.
371	 */
372	if (ret)
373		config[0] = '\0';
374
375	mutex_unlock(&config_mutex);
376
377	return ret;
378}
379
380static int dbg_restore_graphics;
381
382static void kgdboc_pre_exp_handler(void)
383{
384	if (!dbg_restore_graphics && kgdboc_use_kms) {
385		dbg_restore_graphics = 1;
386		con_debug_enter(vc_cons[fg_console].d);
387	}
388	/* Increment the module count when the debugger is active */
389	if (!kgdb_connected)
390		try_module_get(THIS_MODULE);
391}
392
393static void kgdboc_post_exp_handler(void)
394{
395	/* decrement the module count when the debugger detaches */
396	if (!kgdb_connected)
397		module_put(THIS_MODULE);
398	if (kgdboc_use_kms && dbg_restore_graphics) {
399		dbg_restore_graphics = 0;
400		con_debug_leave();
401	}
402	kgdboc_restore_input();
403}
404
405static struct kgdb_io kgdboc_io_ops = {
406	.name			= "kgdboc",
407	.read_char		= kgdboc_get_char,
408	.write_char		= kgdboc_put_char,
409	.pre_exception		= kgdboc_pre_exp_handler,
410	.post_exception		= kgdboc_post_exp_handler,
411};
412
413#if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE)
414static int kgdboc_option_setup(char *opt)
415{
416	if (!opt) {
417		pr_err("config string not provided\n");
418		return 1;
419	}
420
421	if (strlen(opt) >= MAX_CONFIG_LEN) {
422		pr_err("config string too long\n");
423		return 1;
424	}
425	strcpy(config, opt);
426
427	return 1;
428}
429
430__setup("kgdboc=", kgdboc_option_setup);
431
432
433/* This is only available if kgdboc is a built in for early debugging */
434static int __init kgdboc_early_init(char *opt)
435{
436	kgdboc_option_setup(opt);
437	configure_kgdboc();
438	return 0;
439}
440
441early_param("ekgdboc", kgdboc_early_init);
442
443static int kgdboc_earlycon_get_char(void)
444{
445	char c;
446
447	if (!kgdboc_earlycon_io_ops.cons->read(kgdboc_earlycon_io_ops.cons,
448					       &c, 1))
449		return NO_POLL_CHAR;
450
451	return c;
452}
453
454static void kgdboc_earlycon_put_char(u8 chr)
455{
456	kgdboc_earlycon_io_ops.cons->write(kgdboc_earlycon_io_ops.cons, &chr,
457					   1);
458}
459
460static void kgdboc_earlycon_pre_exp_handler(void)
461{
462	struct console *con;
463	static bool already_warned;
464	int cookie;
465
466	if (already_warned)
467		return;
468
469	/*
470	 * When the first normal console comes up the kernel will take all
471	 * the boot consoles out of the list.  Really, we should stop using
472	 * the boot console when it does that but until a TTY is registered
473	 * we have no other choice so we keep using it.  Since not all
474	 * serial drivers might be OK with this, print a warning once per
475	 * boot if we detect this case.
476	 */
477	cookie = console_srcu_read_lock();
478	for_each_console_srcu(con) {
479		if (con == kgdboc_earlycon_io_ops.cons)
480			break;
481	}
482	console_srcu_read_unlock(cookie);
483	if (con)
484		return;
485
486	already_warned = true;
487	pr_warn("kgdboc_earlycon is still using bootconsole\n");
488}
489
490static int kgdboc_earlycon_deferred_exit(struct console *con)
491{
492	/*
493	 * If we get here it means the boot console is going away but we
494	 * don't yet have a suitable replacement.  Don't pass through to
495	 * the original exit routine.  We'll call it later in our deinit()
496	 * function.  For now, restore the original exit() function pointer
497	 * as a sentinal that we've hit this point.
498	 */
499	con->exit = earlycon_orig_exit;
500
501	return 0;
502}
503
504static void kgdboc_earlycon_deinit(void)
505{
506	if (!kgdboc_earlycon_io_ops.cons)
507		return;
508
509	if (kgdboc_earlycon_io_ops.cons->exit == kgdboc_earlycon_deferred_exit)
510		/*
511		 * kgdboc_earlycon is exiting but original boot console exit
512		 * was never called (AKA kgdboc_earlycon_deferred_exit()
513		 * didn't ever run).  Undo our trap.
514		 */
515		kgdboc_earlycon_io_ops.cons->exit = earlycon_orig_exit;
516	else if (kgdboc_earlycon_io_ops.cons->exit)
517		/*
518		 * We skipped calling the exit() routine so we could try to
519		 * keep using the boot console even after it went away.  We're
520		 * finally done so call the function now.
521		 */
522		kgdboc_earlycon_io_ops.cons->exit(kgdboc_earlycon_io_ops.cons);
523
524	kgdboc_earlycon_io_ops.cons = NULL;
525}
526
527static struct kgdb_io kgdboc_earlycon_io_ops = {
528	.name			= "kgdboc_earlycon",
529	.read_char		= kgdboc_earlycon_get_char,
530	.write_char		= kgdboc_earlycon_put_char,
531	.pre_exception		= kgdboc_earlycon_pre_exp_handler,
532	.deinit			= kgdboc_earlycon_deinit,
533};
534
535#define MAX_CONSOLE_NAME_LEN (sizeof((struct console *) 0)->name)
536static char kgdboc_earlycon_param[MAX_CONSOLE_NAME_LEN] __initdata;
537static bool kgdboc_earlycon_late_enable __initdata;
538
539static int __init kgdboc_earlycon_init(char *opt)
540{
541	struct console *con;
542
543	kdb_init(KDB_INIT_EARLY);
544
545	/*
546	 * Look for a matching console, or if the name was left blank just
547	 * pick the first one we find.
548	 */
549
550	/*
551	 * Hold the console_list_lock to guarantee that no consoles are
552	 * unregistered until the kgdboc_earlycon setup is complete.
553	 * Trapping the exit() callback relies on exit() not being
554	 * called until the trap is setup. This also allows safe
555	 * traversal of the console list and race-free reading of @flags.
556	 */
557	console_list_lock();
558	for_each_console(con) {
559		if (con->write && con->read &&
560		    (con->flags & (CON_BOOT | CON_ENABLED)) &&
561		    (!opt || !opt[0] || strcmp(con->name, opt) == 0))
562			break;
563	}
564
565	if (!con) {
566		/*
567		 * Both earlycon and kgdboc_earlycon are initialized during
568		 * early parameter parsing. We cannot guarantee earlycon gets
569		 * in first and, in any case, on ACPI systems earlycon may
570		 * defer its own initialization (usually to somewhere within
571		 * setup_arch() ). To cope with either of these situations
572		 * we can defer our own initialization to a little later in
573		 * the boot.
574		 */
575		if (!kgdboc_earlycon_late_enable) {
576			pr_info("No suitable earlycon yet, will try later\n");
577			if (opt)
578				strscpy(kgdboc_earlycon_param, opt,
579					sizeof(kgdboc_earlycon_param));
580			kgdboc_earlycon_late_enable = true;
581		} else {
582			pr_info("Couldn't find kgdb earlycon\n");
583		}
584		goto unlock;
585	}
586
587	kgdboc_earlycon_io_ops.cons = con;
588	pr_info("Going to register kgdb with earlycon '%s'\n", con->name);
589	if (kgdb_register_io_module(&kgdboc_earlycon_io_ops) != 0) {
590		kgdboc_earlycon_io_ops.cons = NULL;
591		pr_info("Failed to register kgdb with earlycon\n");
592	} else {
593		/* Trap exit so we can keep earlycon longer if needed. */
594		earlycon_orig_exit = con->exit;
595		con->exit = kgdboc_earlycon_deferred_exit;
596	}
597
598unlock:
599	console_list_unlock();
600
601	/* Non-zero means malformed option so we always return zero */
602	return 0;
603}
604
605early_param("kgdboc_earlycon", kgdboc_earlycon_init);
606
607/*
608 * This is only intended for the late adoption of an early console.
609 *
610 * It is not a reliable way to adopt regular consoles because we can not
611 * control what order console initcalls are made and, in any case, many
612 * regular consoles are registered much later in the boot process than
613 * the console initcalls!
614 */
615static int __init kgdboc_earlycon_late_init(void)
616{
617	if (kgdboc_earlycon_late_enable)
618		kgdboc_earlycon_init(kgdboc_earlycon_param);
619	return 0;
620}
621console_initcall(kgdboc_earlycon_late_init);
622
623#endif /* IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
624
625module_init(init_kgdboc);
626module_exit(exit_kgdboc);
627module_param_call(kgdboc, param_set_kgdboc_var, param_get_string, &kps, 0644);
628MODULE_PARM_DESC(kgdboc, "<serial_device>[,baud]");
629MODULE_DESCRIPTION("KGDB Console TTY Driver");
630MODULE_LICENSE("GPL");
v6.9.4
  1// SPDX-License-Identifier: GPL-2.0
  2/*
  3 * Based on the same principle as kgdboe using the NETPOLL api, this
  4 * driver uses a console polling api to implement a gdb serial inteface
  5 * which is multiplexed on a console port.
  6 *
  7 * Maintainer: Jason Wessel <jason.wessel@windriver.com>
  8 *
  9 * 2007-2008 (c) Jason Wessel - Wind River Systems, Inc.
 10 */
 11
 12#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 13
 14#include <linux/kernel.h>
 15#include <linux/ctype.h>
 16#include <linux/kgdb.h>
 17#include <linux/kdb.h>
 18#include <linux/tty.h>
 19#include <linux/console.h>
 20#include <linux/vt_kern.h>
 21#include <linux/input.h>
 22#include <linux/irq_work.h>
 23#include <linux/module.h>
 24#include <linux/platform_device.h>
 25#include <linux/serial_core.h>
 26
 27#define MAX_CONFIG_LEN		40
 28
 29static struct kgdb_io		kgdboc_io_ops;
 30
 31/* -1 = init not run yet, 0 = unconfigured, 1 = configured. */
 32static int configured		= -1;
 33static DEFINE_MUTEX(config_mutex);
 34
 35static char config[MAX_CONFIG_LEN];
 36static struct kparam_string kps = {
 37	.string			= config,
 38	.maxlen			= MAX_CONFIG_LEN,
 39};
 40
 41static int kgdboc_use_kms;  /* 1 if we use kernel mode switching */
 42static struct tty_driver	*kgdb_tty_driver;
 43static int			kgdb_tty_line;
 44
 45static struct platform_device *kgdboc_pdev;
 46
 47#if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE)
 48static struct kgdb_io		kgdboc_earlycon_io_ops;
 49static int                      (*earlycon_orig_exit)(struct console *con);
 50#endif /* IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
 51
 52/*
 53 * When we leave the debug trap handler we need to reset the keyboard status
 54 * (since the original keyboard state gets partially clobbered by kdb use of
 55 * the keyboard).
 56 *
 57 * The path to deliver the reset is somewhat circuitous.
 58 *
 59 * To deliver the reset we register an input handler, reset the keyboard and
 60 * then deregister the input handler. However, to get this done right, we do
 61 * have to carefully manage the calling context because we can only register
 62 * input handlers from task context.
 63 *
 64 * In particular we need to trigger the action from the debug trap handler with
 65 * all its NMI and/or NMI-like oddities. To solve this the kgdboc trap exit code
 66 * (the "post_exception" callback) uses irq_work_queue(), which is NMI-safe, to
 67 * schedule a callback from a hardirq context. From there we have to defer the
 68 * work again, this time using schedule_work(), to get a callback using the
 69 * system workqueue, which runs in task context.
 70 */
 71#ifdef CONFIG_KDB_KEYBOARD
 72static int kgdboc_reset_connect(struct input_handler *handler,
 73				struct input_dev *dev,
 74				const struct input_device_id *id)
 75{
 76	input_reset_device(dev);
 77
 78	/* Return an error - we do not want to bind, just to reset */
 79	return -ENODEV;
 80}
 81
 82static void kgdboc_reset_disconnect(struct input_handle *handle)
 83{
 84	/* We do not expect anyone to actually bind to us */
 85	BUG();
 86}
 87
 88static const struct input_device_id kgdboc_reset_ids[] = {
 89	{
 90		.flags = INPUT_DEVICE_ID_MATCH_EVBIT,
 91		.evbit = { BIT_MASK(EV_KEY) },
 92	},
 93	{ }
 94};
 95
 96static struct input_handler kgdboc_reset_handler = {
 97	.connect	= kgdboc_reset_connect,
 98	.disconnect	= kgdboc_reset_disconnect,
 99	.name		= "kgdboc_reset",
100	.id_table	= kgdboc_reset_ids,
101};
102
103static DEFINE_MUTEX(kgdboc_reset_mutex);
104
105static void kgdboc_restore_input_helper(struct work_struct *dummy)
106{
107	/*
108	 * We need to take a mutex to prevent several instances of
109	 * this work running on different CPUs so they don't try
110	 * to register again already registered handler.
111	 */
112	mutex_lock(&kgdboc_reset_mutex);
113
114	if (input_register_handler(&kgdboc_reset_handler) == 0)
115		input_unregister_handler(&kgdboc_reset_handler);
116
117	mutex_unlock(&kgdboc_reset_mutex);
118}
119
120static DECLARE_WORK(kgdboc_restore_input_work, kgdboc_restore_input_helper);
121
122static void kgdboc_queue_restore_input_helper(struct irq_work *unused)
123{
124	schedule_work(&kgdboc_restore_input_work);
125}
126
127static DEFINE_IRQ_WORK(kgdboc_restore_input_irq_work, kgdboc_queue_restore_input_helper);
128
129static void kgdboc_restore_input(void)
130{
131	if (likely(system_state == SYSTEM_RUNNING))
132		irq_work_queue(&kgdboc_restore_input_irq_work);
133}
134
135static int kgdboc_register_kbd(char **cptr)
136{
137	if (strncmp(*cptr, "kbd", 3) == 0 ||
138		strncmp(*cptr, "kdb", 3) == 0) {
139		if (kdb_poll_idx < KDB_POLL_FUNC_MAX) {
140			kdb_poll_funcs[kdb_poll_idx] = kdb_get_kbd_char;
141			kdb_poll_idx++;
142			if (cptr[0][3] == ',')
143				*cptr += 4;
144			else
145				return 1;
146		}
147	}
148	return 0;
149}
150
151static void kgdboc_unregister_kbd(void)
152{
153	int i;
154
155	for (i = 0; i < kdb_poll_idx; i++) {
156		if (kdb_poll_funcs[i] == kdb_get_kbd_char) {
157			kdb_poll_idx--;
158			kdb_poll_funcs[i] = kdb_poll_funcs[kdb_poll_idx];
159			kdb_poll_funcs[kdb_poll_idx] = NULL;
160			i--;
161		}
162	}
163	irq_work_sync(&kgdboc_restore_input_irq_work);
164	flush_work(&kgdboc_restore_input_work);
165}
166#else /* ! CONFIG_KDB_KEYBOARD */
167#define kgdboc_register_kbd(x) 0
168#define kgdboc_unregister_kbd()
169#define kgdboc_restore_input()
170#endif /* ! CONFIG_KDB_KEYBOARD */
171
172#if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE)
173static void cleanup_earlycon(void)
174{
175	if (kgdboc_earlycon_io_ops.cons)
176		kgdb_unregister_io_module(&kgdboc_earlycon_io_ops);
177}
178#else /* !IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
179static inline void cleanup_earlycon(void) { }
180#endif /* !IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
181
182static void cleanup_kgdboc(void)
183{
184	cleanup_earlycon();
185
186	if (configured != 1)
187		return;
188
189	if (kgdb_unregister_nmi_console())
190		return;
191	kgdboc_unregister_kbd();
192	kgdb_unregister_io_module(&kgdboc_io_ops);
193}
194
195static int configure_kgdboc(void)
196{
197	struct tty_driver *p;
198	int tty_line = 0;
199	int err = -ENODEV;
200	char *cptr = config;
201	struct console *cons;
202	int cookie;
203
204	if (!strlen(config) || isspace(config[0])) {
205		err = 0;
206		goto noconfig;
207	}
208
209	kgdboc_io_ops.cons = NULL;
210	kgdb_tty_driver = NULL;
211
212	kgdboc_use_kms = 0;
213	if (strncmp(cptr, "kms,", 4) == 0) {
214		cptr += 4;
215		kgdboc_use_kms = 1;
216	}
217
218	if (kgdboc_register_kbd(&cptr))
219		goto do_register;
220
221	p = tty_find_polling_driver(cptr, &tty_line);
222	if (!p)
223		goto noconfig;
224
225	/*
226	 * Take console_lock to serialize device() callback with
227	 * other console operations. For example, fg_console is
228	 * modified under console_lock when switching vt.
229	 */
230	console_lock();
231
232	cookie = console_srcu_read_lock();
233	for_each_console_srcu(cons) {
234		int idx;
235		if (cons->device && cons->device(cons, &idx) == p &&
236		    idx == tty_line) {
237			kgdboc_io_ops.cons = cons;
238			break;
239		}
240	}
241	console_srcu_read_unlock(cookie);
242
243	console_unlock();
244
245	kgdb_tty_driver = p;
246	kgdb_tty_line = tty_line;
247
248do_register:
249	err = kgdb_register_io_module(&kgdboc_io_ops);
250	if (err)
251		goto noconfig;
252
253	err = kgdb_register_nmi_console();
254	if (err)
255		goto nmi_con_failed;
256
257	configured = 1;
258
259	return 0;
260
261nmi_con_failed:
262	kgdb_unregister_io_module(&kgdboc_io_ops);
263noconfig:
264	kgdboc_unregister_kbd();
265	configured = 0;
266
267	return err;
268}
269
270static int kgdboc_probe(struct platform_device *pdev)
271{
272	int ret = 0;
273
274	mutex_lock(&config_mutex);
275	if (configured != 1) {
276		ret = configure_kgdboc();
277
278		/* Convert "no device" to "defer" so we'll keep trying */
279		if (ret == -ENODEV)
280			ret = -EPROBE_DEFER;
281	}
282	mutex_unlock(&config_mutex);
283
284	return ret;
285}
286
287static struct platform_driver kgdboc_platform_driver = {
288	.probe = kgdboc_probe,
289	.driver = {
290		.name = "kgdboc",
291		.suppress_bind_attrs = true,
292	},
293};
294
295static int __init init_kgdboc(void)
296{
297	int ret;
298
299	/*
300	 * kgdboc is a little bit of an odd "platform_driver".  It can be
301	 * up and running long before the platform_driver object is
302	 * created and thus doesn't actually store anything in it.  There's
303	 * only one instance of kgdb so anything is stored as global state.
304	 * The platform_driver is only created so that we can leverage the
305	 * kernel's mechanisms (like -EPROBE_DEFER) to call us when our
306	 * underlying tty is ready.  Here we init our platform driver and
307	 * then create the single kgdboc instance.
308	 */
309	ret = platform_driver_register(&kgdboc_platform_driver);
310	if (ret)
311		return ret;
312
313	kgdboc_pdev = platform_device_alloc("kgdboc", PLATFORM_DEVID_NONE);
314	if (!kgdboc_pdev) {
315		ret = -ENOMEM;
316		goto err_did_register;
317	}
318
319	ret = platform_device_add(kgdboc_pdev);
320	if (!ret)
321		return 0;
322
323	platform_device_put(kgdboc_pdev);
324
325err_did_register:
326	platform_driver_unregister(&kgdboc_platform_driver);
327	return ret;
328}
329
330static void exit_kgdboc(void)
331{
332	mutex_lock(&config_mutex);
333	cleanup_kgdboc();
334	mutex_unlock(&config_mutex);
335
336	platform_device_unregister(kgdboc_pdev);
337	platform_driver_unregister(&kgdboc_platform_driver);
338}
339
340static int kgdboc_get_char(void)
341{
342	if (!kgdb_tty_driver)
343		return -1;
344	return kgdb_tty_driver->ops->poll_get_char(kgdb_tty_driver,
345						kgdb_tty_line);
346}
347
348static void kgdboc_put_char(u8 chr)
349{
350	if (!kgdb_tty_driver)
351		return;
352	kgdb_tty_driver->ops->poll_put_char(kgdb_tty_driver,
353					kgdb_tty_line, chr);
354}
355
356static int param_set_kgdboc_var(const char *kmessage,
357				const struct kernel_param *kp)
358{
359	size_t len = strlen(kmessage);
360	int ret = 0;
361
362	if (len >= MAX_CONFIG_LEN) {
363		pr_err("config string too long\n");
364		return -ENOSPC;
365	}
366
367	if (kgdb_connected) {
368		pr_err("Cannot reconfigure while KGDB is connected.\n");
369		return -EBUSY;
370	}
371
372	mutex_lock(&config_mutex);
373
374	strcpy(config, kmessage);
375	/* Chop out \n char as a result of echo */
376	if (len && config[len - 1] == '\n')
377		config[len - 1] = '\0';
378
379	if (configured == 1)
380		cleanup_kgdboc();
381
382	/*
383	 * Configure with the new params as long as init already ran.
384	 * Note that we can get called before init if someone loads us
385	 * with "modprobe kgdboc kgdboc=..." or if they happen to use
386	 * the odd syntax of "kgdboc.kgdboc=..." on the kernel command.
387	 */
388	if (configured >= 0)
389		ret = configure_kgdboc();
390
391	/*
392	 * If we couldn't configure then clear out the config.  Note that
393	 * specifying an invalid config on the kernel command line vs.
394	 * through sysfs have slightly different behaviors.  If we fail
395	 * to configure what was specified on the kernel command line
396	 * we'll leave it in the 'config' and return -EPROBE_DEFER from
397	 * our probe.  When specified through sysfs userspace is
398	 * responsible for loading the tty driver before setting up.
399	 */
400	if (ret)
401		config[0] = '\0';
402
403	mutex_unlock(&config_mutex);
404
405	return ret;
406}
407
408static int dbg_restore_graphics;
409
410static void kgdboc_pre_exp_handler(void)
411{
412	if (!dbg_restore_graphics && kgdboc_use_kms) {
413		dbg_restore_graphics = 1;
414		con_debug_enter(vc_cons[fg_console].d);
415	}
416	/* Increment the module count when the debugger is active */
417	if (!kgdb_connected)
418		try_module_get(THIS_MODULE);
419}
420
421static void kgdboc_post_exp_handler(void)
422{
423	/* decrement the module count when the debugger detaches */
424	if (!kgdb_connected)
425		module_put(THIS_MODULE);
426	if (kgdboc_use_kms && dbg_restore_graphics) {
427		dbg_restore_graphics = 0;
428		con_debug_leave();
429	}
430	kgdboc_restore_input();
431}
432
433static struct kgdb_io kgdboc_io_ops = {
434	.name			= "kgdboc",
435	.read_char		= kgdboc_get_char,
436	.write_char		= kgdboc_put_char,
437	.pre_exception		= kgdboc_pre_exp_handler,
438	.post_exception		= kgdboc_post_exp_handler,
439};
440
441#if IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE)
442static int kgdboc_option_setup(char *opt)
443{
444	if (!opt) {
445		pr_err("config string not provided\n");
446		return 1;
447	}
448
449	if (strlen(opt) >= MAX_CONFIG_LEN) {
450		pr_err("config string too long\n");
451		return 1;
452	}
453	strcpy(config, opt);
454
455	return 1;
456}
457
458__setup("kgdboc=", kgdboc_option_setup);
459
460
461/* This is only available if kgdboc is a built in for early debugging */
462static int __init kgdboc_early_init(char *opt)
463{
464	kgdboc_option_setup(opt);
465	configure_kgdboc();
466	return 0;
467}
468
469early_param("ekgdboc", kgdboc_early_init);
470
471static int kgdboc_earlycon_get_char(void)
472{
473	char c;
474
475	if (!kgdboc_earlycon_io_ops.cons->read(kgdboc_earlycon_io_ops.cons,
476					       &c, 1))
477		return NO_POLL_CHAR;
478
479	return c;
480}
481
482static void kgdboc_earlycon_put_char(u8 chr)
483{
484	kgdboc_earlycon_io_ops.cons->write(kgdboc_earlycon_io_ops.cons, &chr,
485					   1);
486}
487
488static void kgdboc_earlycon_pre_exp_handler(void)
489{
490	struct console *con;
491	static bool already_warned;
492	int cookie;
493
494	if (already_warned)
495		return;
496
497	/*
498	 * When the first normal console comes up the kernel will take all
499	 * the boot consoles out of the list.  Really, we should stop using
500	 * the boot console when it does that but until a TTY is registered
501	 * we have no other choice so we keep using it.  Since not all
502	 * serial drivers might be OK with this, print a warning once per
503	 * boot if we detect this case.
504	 */
505	cookie = console_srcu_read_lock();
506	for_each_console_srcu(con) {
507		if (con == kgdboc_earlycon_io_ops.cons)
508			break;
509	}
510	console_srcu_read_unlock(cookie);
511	if (con)
512		return;
513
514	already_warned = true;
515	pr_warn("kgdboc_earlycon is still using bootconsole\n");
516}
517
518static int kgdboc_earlycon_deferred_exit(struct console *con)
519{
520	/*
521	 * If we get here it means the boot console is going away but we
522	 * don't yet have a suitable replacement.  Don't pass through to
523	 * the original exit routine.  We'll call it later in our deinit()
524	 * function.  For now, restore the original exit() function pointer
525	 * as a sentinal that we've hit this point.
526	 */
527	con->exit = earlycon_orig_exit;
528
529	return 0;
530}
531
532static void kgdboc_earlycon_deinit(void)
533{
534	if (!kgdboc_earlycon_io_ops.cons)
535		return;
536
537	if (kgdboc_earlycon_io_ops.cons->exit == kgdboc_earlycon_deferred_exit)
538		/*
539		 * kgdboc_earlycon is exiting but original boot console exit
540		 * was never called (AKA kgdboc_earlycon_deferred_exit()
541		 * didn't ever run).  Undo our trap.
542		 */
543		kgdboc_earlycon_io_ops.cons->exit = earlycon_orig_exit;
544	else if (kgdboc_earlycon_io_ops.cons->exit)
545		/*
546		 * We skipped calling the exit() routine so we could try to
547		 * keep using the boot console even after it went away.  We're
548		 * finally done so call the function now.
549		 */
550		kgdboc_earlycon_io_ops.cons->exit(kgdboc_earlycon_io_ops.cons);
551
552	kgdboc_earlycon_io_ops.cons = NULL;
553}
554
555static struct kgdb_io kgdboc_earlycon_io_ops = {
556	.name			= "kgdboc_earlycon",
557	.read_char		= kgdboc_earlycon_get_char,
558	.write_char		= kgdboc_earlycon_put_char,
559	.pre_exception		= kgdboc_earlycon_pre_exp_handler,
560	.deinit			= kgdboc_earlycon_deinit,
561};
562
563#define MAX_CONSOLE_NAME_LEN (sizeof((struct console *) 0)->name)
564static char kgdboc_earlycon_param[MAX_CONSOLE_NAME_LEN] __initdata;
565static bool kgdboc_earlycon_late_enable __initdata;
566
567static int __init kgdboc_earlycon_init(char *opt)
568{
569	struct console *con;
570
571	kdb_init(KDB_INIT_EARLY);
572
573	/*
574	 * Look for a matching console, or if the name was left blank just
575	 * pick the first one we find.
576	 */
577
578	/*
579	 * Hold the console_list_lock to guarantee that no consoles are
580	 * unregistered until the kgdboc_earlycon setup is complete.
581	 * Trapping the exit() callback relies on exit() not being
582	 * called until the trap is setup. This also allows safe
583	 * traversal of the console list and race-free reading of @flags.
584	 */
585	console_list_lock();
586	for_each_console(con) {
587		if (con->write && con->read &&
588		    (con->flags & (CON_BOOT | CON_ENABLED)) &&
589		    (!opt || !opt[0] || strcmp(con->name, opt) == 0))
590			break;
591	}
592
593	if (!con) {
594		/*
595		 * Both earlycon and kgdboc_earlycon are initialized during
596		 * early parameter parsing. We cannot guarantee earlycon gets
597		 * in first and, in any case, on ACPI systems earlycon may
598		 * defer its own initialization (usually to somewhere within
599		 * setup_arch() ). To cope with either of these situations
600		 * we can defer our own initialization to a little later in
601		 * the boot.
602		 */
603		if (!kgdboc_earlycon_late_enable) {
604			pr_info("No suitable earlycon yet, will try later\n");
605			if (opt)
606				strscpy(kgdboc_earlycon_param, opt,
607					sizeof(kgdboc_earlycon_param));
608			kgdboc_earlycon_late_enable = true;
609		} else {
610			pr_info("Couldn't find kgdb earlycon\n");
611		}
612		goto unlock;
613	}
614
615	kgdboc_earlycon_io_ops.cons = con;
616	pr_info("Going to register kgdb with earlycon '%s'\n", con->name);
617	if (kgdb_register_io_module(&kgdboc_earlycon_io_ops) != 0) {
618		kgdboc_earlycon_io_ops.cons = NULL;
619		pr_info("Failed to register kgdb with earlycon\n");
620	} else {
621		/* Trap exit so we can keep earlycon longer if needed. */
622		earlycon_orig_exit = con->exit;
623		con->exit = kgdboc_earlycon_deferred_exit;
624	}
625
626unlock:
627	console_list_unlock();
628
629	/* Non-zero means malformed option so we always return zero */
630	return 0;
631}
632
633early_param("kgdboc_earlycon", kgdboc_earlycon_init);
634
635/*
636 * This is only intended for the late adoption of an early console.
637 *
638 * It is not a reliable way to adopt regular consoles because we can not
639 * control what order console initcalls are made and, in any case, many
640 * regular consoles are registered much later in the boot process than
641 * the console initcalls!
642 */
643static int __init kgdboc_earlycon_late_init(void)
644{
645	if (kgdboc_earlycon_late_enable)
646		kgdboc_earlycon_init(kgdboc_earlycon_param);
647	return 0;
648}
649console_initcall(kgdboc_earlycon_late_init);
650
651#endif /* IS_BUILTIN(CONFIG_KGDB_SERIAL_CONSOLE) */
652
653module_init(init_kgdboc);
654module_exit(exit_kgdboc);
655module_param_call(kgdboc, param_set_kgdboc_var, param_get_string, &kps, 0644);
656MODULE_PARM_DESC(kgdboc, "<serial_device>[,baud]");
657MODULE_DESCRIPTION("KGDB Console TTY Driver");
658MODULE_LICENSE("GPL");