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;
}
Esempio n. 2
0
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;
}
Esempio n. 4
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;
}
Esempio n. 5
0
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;
}
Esempio n. 6
0
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;
}