1 /* $NetBSD: midisynvar.h,v 1.2 1998/08/17 21:16:12 augustss Exp $ */ 2 3 /* 4 * Copyright (c) 1998 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * Author: Lennart Augustsson 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. All advertising materials mentioning features or use of this software 18 * must display the following acknowledgement: 19 * This product includes software developed by the NetBSD 20 * Foundation, Inc. and its contributors. 21 * 4. Neither the name of The NetBSD Foundation nor the names of its 22 * contributors may be used to endorse or promote products derived 23 * from this software without specific prior written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 26 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 27 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 28 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 29 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35 * POSSIBILITY OF SUCH DAMAGE. 36 */ 37 38 #ifndef _SYS_DEV_MIDISYNVAR_H_ 39 #define _SYS_DEV_MIDISYNVAR_H_ 40 41 typedef struct midisyn midisyn; 42 43 struct midisyn_methods { 44 int (*open) __P((midisyn *, int)); 45 void (*close) __P((midisyn *)); 46 int (*ioctl) __P((midisyn *, u_long, caddr_t, int, struct proc *)); 47 int (*allocv) __P((midisyn *, u_int32_t, u_int32_t)); 48 void (*noteon) __P((midisyn *, u_int32_t, u_int32_t, u_int32_t)); 49 void (*noteoff) __P((midisyn *, u_int32_t, u_int32_t, u_int32_t)); 50 void (*keypres) __P((midisyn *, u_int32_t, u_int32_t, u_int32_t)); 51 void (*ctlchg) __P((midisyn *, u_int32_t, u_int32_t, u_int32_t)); 52 void (*pgmchg) __P((midisyn *, u_int32_t, u_int32_t)); 53 void (*chnpres) __P((midisyn *, u_int32_t, u_int32_t)); 54 void (*pitchb) __P((midisyn *, u_int32_t, u_int32_t, u_int32_t)); 55 void (*sysex) __P((midisyn *, u_int32_t)); 56 }; 57 58 struct voice { 59 u_int chan_note; /* channel and note */ 60 #define MS_CHANNOTE(chan, note) ((chan) * 256 + (note)) 61 #define MS_GETCHAN(v) ((v)->chan_note >> 8) 62 u_int seqno; /* allocation index (increases with time) */ 63 u_char inuse; 64 }; 65 66 #define MIDI_MAX_CHANS 16 67 68 struct midisyn { 69 /* Filled by synth driver */ 70 struct midisyn_methods *mets; 71 char name[32]; 72 int nvoice; 73 int flags; 74 #define MS_DOALLOC 1 75 #define MS_FREQXLATE 2 76 void *data; 77 78 /* Used by midisyn driver */ 79 u_int8_t buf[3]; 80 int pos; 81 struct voice *voices; 82 u_int seqno; 83 u_int16_t pgms[MIDI_MAX_CHANS]; 84 }; 85 86 #define MS_GETPGM(ms, vno) ((ms)->pgms[MS_GETCHAN(&(ms)->voices[vno])]) 87 88 struct midi_softc; 89 90 extern struct midi_hw_if midisyn_hw_if; 91 92 void midisyn_attach __P((struct midi_softc *, midisyn *)); 93 94 #define MIDISYN_FREQ_TO_HZ(f) ((f) >> 16) 95 96 #endif /* _SYS_DEV_MIDISYNVAR_H_ */ 97