Exemplo n.º 1
0
static int
snp_modevent(module_t mod, int type, void *data)
{
	int i;

	lwkt_gettoken(&tty_token);
	switch (type) {
	case MOD_LOAD:
		snooplinedisc = ldisc_register(LDISC_LOAD, &snpdisc);
		make_autoclone_dev(&snp_ops, &DEVFS_CLONE_BITMAP(snp),
			snpclone, UID_ROOT, GID_WHEEL, 0600, "snp");

		for (i = 0; i < SNP_PREALLOCATED_UNITS; i++) {
			make_dev(&snp_ops, i, UID_ROOT, GID_WHEEL, 0600, "snp%d", i);
			devfs_clone_bitmap_set(&DEVFS_CLONE_BITMAP(snp), i);
		}
		break;
	case MOD_UNLOAD:
		if (!LIST_EMPTY(&snp_sclist)) {
			lwkt_reltoken(&tty_token);
			return (EBUSY);
		}
		ldisc_deregister(snooplinedisc);
		devfs_clone_handler_del("snp");
		dev_ops_remove_all(&snp_ops);
		devfs_clone_bitmap_uninit(&DEVFS_CLONE_BITMAP(snp));
		break;
	default:
		break;
	}
	lwkt_reltoken(&tty_token);
	return (0);
}
Exemplo n.º 2
0
static int
uether_modevent(module_t mod, int type, void *data)
{
	static int attached = 0;

	switch (type) {
	case MOD_LOAD:
		if (attached)
			return (EEXIST);

		devfs_clone_bitmap_init(&DEVFS_CLONE_BITMAP(ue));

		attached = 1;
		break;
	case MOD_UNLOAD:
		devfs_clone_bitmap_uninit(&DEVFS_CLONE_BITMAP(ue));
		break;
	default:
		return (EOPNOTSUPP);
	}
	return (0);
}