summaryrefslogtreecommitdiff
path: root/sys/dev/sequencer.c
diff options
context:
space:
mode:
authorpgoyette <pgoyette@NetBSD.org>2017-06-01 09:44:30 +0000
committerpgoyette <pgoyette@NetBSD.org>2017-06-01 09:44:30 +0000
commitf309403ecaf75c98c14b8f8dc0ff769ee2767ab2 (patch)
tree3bb364564ed421d2a3a34ff841fa9997fe4feece /sys/dev/sequencer.c
parent1195b3a6ab7a87627f4be6f3250cffe246306b32 (diff)
Add infrastructure for modularization of audio, midi, and sequencer
Diffstat (limited to 'sys/dev/sequencer.c')
-rw-r--r--sys/dev/sequencer.c56
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;
+}