Example #1
0
int
bdevsw_module_handler(module_t mod, int what, void* arg)
{
	struct bdevsw_module_data* data = (struct bdevsw_module_data*) arg;
	int error;

	switch (what) {
	case MOD_LOAD:
		error = cdevsw_add(&data->cdev, data->cdevsw, NULL);
		if (!error)
			error = bdevsw_add(&data->bdev, data->cdevsw, NULL);
		if (!error && data->chainevh)
			error = data->chainevh(mod, what, data->chainarg);
		return error;

	case MOD_UNLOAD:
		if (data->chainevh) {
			error = data->chainevh(mod, what, data->chainarg);
			if (error)
				return error;
		}
		error = bdevsw_add(&data->bdev, NULL, NULL);
		if (!error)
			error = cdevsw_add(&data->cdev, NULL, NULL);
		return error;
	}

	if (data->chainevh)
		return data->chainevh(mod, what, data->chainarg);
	else
		return 0;
}
Example #2
0
static void 
vndevice_do_init( void )
{
	int 	i;

	vndevice_bdev_major = bdevsw_add(BDEV_MAJOR, &vn_bdevsw);

	if (vndevice_bdev_major < 0) {
		printf("vndevice_init: bdevsw_add() returned %d\n",
		       vndevice_bdev_major);
		return;
	}
	vndevice_cdev_major = cdevsw_add_with_bdev(CDEV_MAJOR, &vn_cdevsw,
						   vndevice_bdev_major);
	if (vndevice_cdev_major < 0) {
		printf("vndevice_init: cdevsw_add() returned %d\n",
		       vndevice_cdev_major);
		return;
	}
	for (i = 0; i < NVNDEVICE; i++) {
		dev_t	dev = makedev(vndevice_bdev_major, i);
		vn_table[i].sc_bdev = devfs_make_node(dev, DEVFS_BLOCK,
						      UID_ROOT, GID_OPERATOR, 
						      0600, "vn%d", 
						      i);
		if (vn_table[i].sc_bdev == NULL)
			printf("vninit: devfs_make_node failed!\n");
	}
}
Example #3
0
/*
 * note must call cdevsw_add before bdevsw_add due to d_bmaj hack.
 */
void
cdevsw_add_generic(int bdev, int cdev, struct cdevsw *cdevsw)
{
	dev_t dev;

	dev = makedev(cdev, 0);
	cdevsw_add(&dev, cdevsw, NULL);
	dev = makedev(bdev, 0);
	bdevsw_add(&dev, cdevsw, NULL);
}