static int configure_kgdbts(void) { int err = 0; if (!strlen(config) || isspace(config[0])) goto noconfig; err = kgdbts_option_setup(config); if (err) goto noconfig; final_ack = 0; run_plant_and_detach_test(1); err = kgdb_register_io_module(&kgdbts_io_ops); if (err) { configured = 0; return err; } configured = 1; kgdbts_run_tests(); return err; noconfig: config[0] = 0; configured = 0; return err; }
static int configure_kgdboc(void) { struct tty_driver *p; int tty_line = 0; int err; err = kgdboc_option_setup(config); if (err || !strlen(config) || isspace(config[0])) goto noconfig; err = -ENODEV; p = tty_find_polling_driver(config, &tty_line); if (!p) goto noconfig; kgdb_tty_driver = p; kgdb_tty_line = tty_line; err = kgdb_register_io_module(&kgdboc_io_ops); if (err) goto noconfig; configured = 1; return 0; noconfig: config[0] = 0; configured = 0; return err; }
int init_kgdboe(void) { /* Already done? */ if (configured == 2) return 0; if (strlen(config)) option_setup(config); if (!configured) { printk("kgdboe: configuration incorrect - kgdboe not " "loaded.\n"); printk(" Usage: kgdboe=[src-port]@[src-ip]/[dev],[tgt-port]" "@<tgt-ip>/[tgt-macaddr]\n"); return -EINVAL; } if (netpoll_setup(&np)) { printk("kgdboe: netpoll_setup failed kgdboe failed\n"); return -EINVAL; } if (kgdb_register_io_module(&local_kgdb_io_ops)) return -EINVAL; printk(KERN_INFO "kgdboe: debugging over ethernet enabled\n"); configured = 2; return 0; }
static int configure_kgdboc(void) { struct tty_driver *p; int tty_line = 0; int err; char *cptr = config; struct console *cons; err = kgdboc_option_setup(config); if (err || !strlen(config) || isspace(config[0])) goto noconfig; err = -ENODEV; kgdboc_io_ops.is_console = 0; kgdb_tty_driver = NULL; kgdboc_use_kms = 0; if (strncmp(cptr, "kms,", 4) == 0) { cptr += 4; kgdboc_use_kms = 1; } if (kgdboc_register_kbd(&cptr)) goto do_register; p = tty_find_polling_driver(cptr, &tty_line); if (!p) goto noconfig; cons = console_drivers; while (cons) { int idx; if (cons->device && cons->device(cons, &idx) == p && idx == tty_line) { kgdboc_io_ops.is_console = 1; break; } cons = cons->next; } kgdb_tty_driver = p; kgdb_tty_line = tty_line; do_register: err = kgdb_register_io_module(&kgdboc_io_ops); if (err) goto noconfig; configured = 1; return 0; noconfig: config[0] = 0; configured = 0; cleanup_kgdboc(); return err; }
static int configure_kgdboc(void) { struct tty_driver *p; int tty_line = 0; int err; err = kgdboc_option_setup(config); if (err || !strlen(config) || isspace(config[0])) goto noconfig; err = -ENODEV; p = tty_find_polling_driver(config, &tty_line); if (!p) { printk("kgdb will retry in %d secs\n", config_retry_time); if (config_retry_time > 0) { INIT_DELAYED_WORK(&ttycheck_work, ttycheck_func); schedule_delayed_work(&ttycheck_work, config_retry_time * HZ); config_retry_time--; return -ENODEV; } goto noconfig; } kgdb_tty_driver = p; kgdb_tty_line = tty_line; err = kgdb_register_io_module(&kgdboc_io_ops); if (err) goto noconfig; configured = 1; return 0; noconfig: config[0] = 0; configured = 0; return err; }
int kgdboe_io_init(const char *device_name, int port, const char *local_ip, bool force_single_core) { int err; u8 ipaddr[4]; spin_lock_init(&exception_lock); s_pKgdboeNetpoll = netpoll_wrapper_create(device_name, port, local_ip); if (!s_pKgdboeNetpoll) return -EINVAL; if (force_single_core) { force_single_cpu_mode(); } else if (!nethook_initialize(s_pKgdboeNetpoll->pDeviceWithHandler)) { printk(KERN_ERR "kgdboe: failed to guarantee cross-CPU network " "API synchronization. Aborting. Try enabling " "single-CPU mode.\n"); return -EINVAL; } err = kgdb_register_io_module(&kgdboe_io_ops); if (err != 0) { netpoll_wrapper_free(s_pKgdboeNetpoll); s_pKgdboeNetpoll = NULL; return err; } netpoll_wrapper_set_callback(s_pKgdboeNetpoll, kgdboe_rx_handler, NULL); memcpy(ipaddr, &ip_addr_as_int(s_pKgdboeNetpoll->netpoll_obj.local_ip), 4); printk(KERN_INFO "kgdboe: Successfully initialized. Use the following " "gdb command to attach:\n"); printk(KERN_INFO "\ttarget remote udp:%d.%d.%d.%d:%d\n", ipaddr[0], ipaddr[1], ipaddr[2], ipaddr[3], s_pKgdboeNetpoll->netpoll_obj.local_port); return 0; }