#include <sys/param.h>
#include <sys/exec.h>
#include <sys/imgact.h>
#include <sys/kernel.h>
#include <sys/malloc.h>
#include <sys/sx.h>
#include <compat/linux/linux.h>
#include <compat/linux/linux_mib.h>
#include <compat/linux/linux_util.h>
SET_DECLARE(linux_device_handler_set, struct linux_device_handler);
TAILQ_HEAD(, linux_ioctl_handler_element) linux_ioctl_handlers =
TAILQ_HEAD_INITIALIZER(linux_ioctl_handlers);
struct sx linux_ioctl_sx;
SX_SYSINIT(linux_ioctl, &linux_ioctl_sx, "Linux ioctl handlers");
static int
linux_common_modevent(module_t mod, int type, void *data)
{
struct linux_device_handler **ldhp;
switch(type) {
case MOD_LOAD:
#ifdef INVARIANTS
linux_check_errtbl();
#endif
linux_dev_shm_create();
linux_osd_jail_register();
SET_FOREACH(ldhp, linux_device_handler_set)
linux_device_register_handler(*ldhp);
linux_ifnet_init();
linux_netlink_register();
break;
case MOD_UNLOAD:
linux_dev_shm_destroy();
linux_osd_jail_deregister();
SET_FOREACH(ldhp, linux_device_handler_set)
linux_device_unregister_handler(*ldhp);
linux_ifnet_uninit();
linux_netlink_deregister();
break;
default:
return (EOPNOTSUPP);
}
return (0);
}
static moduledata_t linux_common_mod = {
"linux_common",
linux_common_modevent,
0
};
DECLARE_MODULE(linux_common, linux_common_mod, SI_SUB_EXEC, SI_ORDER_ANY);
MODULE_VERSION(linux_common, 1);
MODULE_DEPEND(linux_common, netlink, 1, 1, 1);