Open Sound System |
Do you have problems with sound/audio application development? Don't panic! Click here for help! |
Copyright (C) 4Front Technologies 2005-2007. Released under BSD license.
static int ndevs = 0; oss_device_t *device_list[16]; static int module_attach (void) { oss_device_t *osdev; if ((osdev = osdev_create (NULL, DRIVER_TYPE, ndevs, DRIVER_NICK, NULL)) == NULL) { return ENOMEM; } if (!DRIVER_ATTACH (osdev)) return EIO; device_list[ndevs++] = osdev; return 0; } static int module_detach (void) { oss_device_t *osdev; int i; for (i = 0; i < ndevs; i++) { osdev = device_list[i]; if (osdev->dip != NULL && device_get_state(osdev->dip) == DS_BUSY) device_unbusy(osdev->dip); if (!DRIVER_DETACH (osdev)) { printf (DRIVER_NICK ": Unloading busy device\n"); return EBUSY; } osdev_delete (osdev); } return 0; }
Load handler that deals with the loading and unloading of a KLD.
static int ossmodule_loader (struct module *m, int what, void *arg) { int err = 0; switch (what) { case MOD_LOAD: /* kldload */ return module_attach (); break; case MOD_UNLOAD: return module_detach (); break; default: err = EINVAL; break; } return (err); } /* Declare this module to the rest of the kernel */ static moduledata_t ossmodule_mod = { "ossmodule", ossmodule_loader, NULL }; DECLARE_MODULE (ossmodule, ossmodule_mod, SI_SUB_KLD, SI_ORDER_ANY); MODULE_VERSION (ossmodule, 4);