diff options
| author | pgoyette <pgoyette@NetBSD.org> | 2017-06-01 09:44:30 +0000 |
|---|---|---|
| committer | pgoyette <pgoyette@NetBSD.org> | 2017-06-01 09:44:30 +0000 |
| commit | f309403ecaf75c98c14b8f8dc0ff769ee2767ab2 (patch) | |
| tree | 3bb364564ed421d2a3a34ff841fa9997fe4feece /sys/dev/sequencer.c | |
| parent | 1195b3a6ab7a87627f4be6f3250cffe246306b32 (diff) | |
Add infrastructure for modularization of audio, midi, and sequencer
Diffstat (limited to 'sys/dev/sequencer.c')
| -rw-r--r-- | sys/dev/sequencer.c | 56 |
1 files changed, 53 insertions, 3 deletions
diff --git a/sys/dev/sequencer.c b/sys/dev/sequencer.c index 965566579a6..2e673e262be 100644 --- a/sys/dev/sequencer.c +++ b/sys/dev/sequencer.c @@ -1,4 +1,4 @@ -/* $NetBSD: sequencer.c,v 1.65 2017/06/01 02:45:09 chs Exp $ */ +/* $NetBSD: sequencer.c,v 1.66 2017/06/01 09:44:30 pgoyette Exp $ */ /* * Copyright (c) 1998, 2008 The NetBSD Foundation, Inc. @@ -55,9 +55,12 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: sequencer.c,v 1.65 2017/06/01 02:45:09 chs Exp $"); +__KERNEL_RCSID(0, "$NetBSD: sequencer.c,v 1.66 2017/06/01 09:44:30 pgoyette Exp $"); +#ifdef _KERNEL_OPT #include "sequencer.h" +#include "midi.h" +#endif #include <sys/param.h> #include <sys/ioctl.h> @@ -80,6 +83,7 @@ __KERNEL_RCSID(0, "$NetBSD: sequencer.c,v 1.65 2017/06/01 02:45:09 chs Exp $"); #include <sys/pcq.h> #include <sys/vnode.h> #include <sys/kauth.h> +#include <sys/module.h> #include <dev/midi_if.h> #include <dev/midivar.h> @@ -1603,7 +1607,6 @@ midiseq_loadpatch(struct midi_dev *md, return error; } -#include "midi.h" #if NMIDI == 0 static dev_type_open(midiopen); static dev_type_close(midiclose); @@ -1661,3 +1664,50 @@ midi_writebytes(int unit, u_char *bf, int cc) return (ENXIO); } #endif /* NMIDI == 0 */ + +#ifdef _MODULE +extern struct cfdriver sequencer_cd; +#include "ioconf.c" + +devmajor_t sequencer_bmajor = -1, sequencer_cmajor = -1; +#endif + +MODULE(MODULE_CLASS_DRIVER, sequencer, "midi"); + +static int +sequencer_modcmd(modcmd_t cmd, void *arg) +{ + int error = 0; + +#ifdef _MODULE + switch (cmd) { + case MODULE_CMD_INIT: + error = devsw_attach(sequencer_cd.cd_name, + NULL, &sequencer_bmajor, + &sequencer_cdevsw, &sequencer_cmajor); + if (error) + break; + + error = config_init_component(cfdriver_ioconf_sequencer, + cfattach_ioconf_sequencer, cfdata_ioconf_sequencer); + if (error) { + devsw_detach(NULL, &sequencer_cdevsw); + } + break; + case MODULE_CMD_FINI: + devsw_detach(NULL, &sequencer_cdevsw); + error = config_fini_component(cfdriver_ioconf_sequencer, + cfattach_ioconf_sequencer, cfdata_ioconf_sequencer); + if (error) + devsw_attach(sequencer_cd.cd_name, + NULL, &sequencer_bmajor, + &sequencer_cdevsw, &sequencer_cmajor); + break; + default: + error = ENOTTY; + break; + } +#endif + + return error; +} |
