summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound/midi/midi.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/sound/midi/midi.h')
-rw-r--r--sys/dev/sound/midi/midi.h49
1 files changed, 40 insertions, 9 deletions
diff --git a/sys/dev/sound/midi/midi.h b/sys/dev/sound/midi/midi.h
index b0982c8..d9b81c7 100644
--- a/sys/dev/sound/midi/midi.h
+++ b/sys/dev/sound/midi/midi.h
@@ -65,6 +65,7 @@
#include <sys/rman.h>
#include <sys/mman.h>
#include <sys/poll.h>
+#include <sys/mutex.h>
#include <dev/sound/midi/miditypes.h>
#include <dev/sound/midi/midibuf.h>
@@ -72,6 +73,31 @@
#define MIDI_CDEV_MAJOR 30
+/*#define MIDI_OUTOFGIANT*/
+
+#if defined(MIDI_OUTOFGIANT)
+#define MIDI_DROP_GIANT DROP_GIANT
+#define MIDI_DROP_GIANT_NOSWITCH DROP_GIANT_NOSWITCH
+#define MIDI_PICKUP_GIANT PICKUP_GIANT
+#define MIDI_PARTIAL_PICKUP_GIANT PARTIAL_PICKUP_GIANT
+#else
+#define MIDI_DROP_GIANT()
+#define MIDI_DROP_GIANT_NOSWITCH()
+#define MIDI_PICKUP_GIANT()
+#define MIDI_PARTIAL_PICKUP_GIANT()
+#endif /* MIDI_OUTOFGIANT */
+
+
+/*
+ * The order of mutex lock (from the first to the last)
+ *
+ * 1. sequencer flags, queues, timer and device list
+ * 2. midi synth voice and channel
+ * 3. midi synth status
+ * 4. generic midi flags and queues
+ * 5. midi device
+ */
+
/*
* descriptor of midi operations ...
*
@@ -89,10 +115,7 @@ struct _mididev_info {
d_open_t *open;
d_close_t *close;
- d_read_t *read;
- d_write_t *write;
d_ioctl_t *ioctl;
- d_poll_t *poll;
midi_callback_t *callback;
/*
@@ -133,6 +156,9 @@ struct _mididev_info {
* mss codec type, etc. etc.
*/
+ struct mtx flagqueue_mtx; /* Mutex to protect flags and queues */
+
+ /* Queues */
midi_dbuf midi_dbuf_in; /* midi input event/message queue */
midi_dbuf midi_dbuf_out; /* midi output event/message queue */
midi_dbuf midi_dbuf_passthru; /* midi passthru event/message queue */
@@ -142,6 +168,7 @@ struct _mididev_info {
* Generic things like busy flag, speed, etc are here.
*/
+ /* Flags */
volatile u_long flags ; /* 32 bits, used for various purposes. */
int fflags; /* file flag */
@@ -211,6 +238,12 @@ struct _mididev_info {
/* This is the status message to display via /dev/midistat */
char midistat[128];
+
+ /* The tailq entry of the next midi device. */
+ TAILQ_ENTRY(_mididev_info) md_link;
+
+ /* The tailq entry of the next midi device opened by a sequencer. */
+ TAILQ_ENTRY(_mididev_info) md_linkseq;
} ;
/*
@@ -243,7 +276,7 @@ struct _mididev_info {
/*
* finally, all default parameters
*/
-#define MIDI_BUFFSIZE (4 * 1024) /* XXX */
+#define MIDI_BUFFSIZE (1024) /* XXX */
/*
* some macros for debugging purposes
@@ -263,7 +296,7 @@ struct _mididev_info {
/* This provides an access to the mididev_info. */
mididev_info *get_mididev_info(dev_t i_dev, int *unit);
mididev_info *get_mididev_info_unit(int unit);
- mididev_info *create_mididev_info_unit(int *unit, int type);
+ mididev_info *create_mididev_info_unit(int type, mididev_info *mdinf, synthdev_info *syninf);
int mididev_info_number(void);
#define MDT_MIDI (0)
#define MDT_SYNTH (1)
@@ -279,10 +312,8 @@ struct _mididev_info {
/* Common interrupt handler */
void midi_intr(mididev_info *);
-/*
- * library functions (in midi.c)
- */
-#define splmidi() spltty()
+/* Sync output */
+int midi_sync(mididev_info *);
/*
* Minor numbers for the midi driver.
OpenPOWER on IntegriCloud