Lines Matching refs:ms

132 	midisyn *ms = addr;  in midisyn_open()  local
136 KASSERT(ms->lock != NULL); in midisyn_open()
137 KASSERT(mutex_owned(ms->lock)); in midisyn_open()
138 DPRINTF(("midisyn_open: ms=%p ms->mets=%p\n", ms, ms->mets)); in midisyn_open()
140 mutex_exit(ms->lock); in midisyn_open()
141 ms->ctl.lock = ms->lock; in midisyn_open()
142 error = midictl_open(&ms->ctl); in midisyn_open()
144 mutex_enter(ms->lock); in midisyn_open()
147 ms->chnstate = kmem_alloc(MIDI_MAX_CHANS * sizeof(*ms->chnstate), in midisyn_open()
149 mutex_enter(ms->lock); in midisyn_open()
152 if (ms->mets->open) in midisyn_open()
153 rslt = (ms->mets->open(ms, flags)); in midisyn_open()
160 midisyn_notify(ms, MIDICTL_RESET, chan, 0); in midisyn_open()
168 midisyn *ms = addr; in midisyn_close() local
172 KASSERT(mutex_owned(ms->lock)); in midisyn_close()
173 DPRINTF(("midisyn_close: ms=%p ms->mets=%p\n", ms, ms->mets)); in midisyn_close()
174 fs = ms->mets; in midisyn_close()
177 midisyn_notify(ms, MIDICTL_SOUND_OFF, chan, 0); in midisyn_close()
180 fs->close(ms); in midisyn_close()
182 mutex_exit(ms->lock); in midisyn_close()
183 midictl_close(&ms->ctl); in midisyn_close()
184 kmem_free(ms->chnstate, MIDI_MAX_CHANS * sizeof(*ms->chnstate)); in midisyn_close()
185 mutex_enter(ms->lock); in midisyn_close()
191 midisyn *ms = addr; in midisyn_getinfo() local
193 KASSERT(mutex_owned(ms->lock)); in midisyn_getinfo()
195 mi->name = ms->name; in midisyn_getinfo()
215 midisyn *ms = addr; in midisyn_get_locks() local
217 *intr = ms->lock; in midisyn_get_locks()
224 midisyn *ms = maddr; in midisyn_ioctl() local
226 KASSERT(mutex_owned(ms->lock)); in midisyn_ioctl()
228 if (ms->mets->ioctl) in midisyn_ioctl()
229 return (ms->mets->ioctl(ms, cmd, addr, flag, l)); in midisyn_ioctl()
235 midisyn_findvoice(midisyn *ms, int chan, int note) in midisyn_findvoice() argument
240 KASSERT(mutex_owned(ms->lock)); in midisyn_findvoice()
243 for (v = 0; v < ms->nvoice; v++) in midisyn_findvoice()
244 if (ms->voices[v].chan_note == cn && ms->voices[v].inuse) in midisyn_findvoice()
250 midisyn_init(midisyn *ms) in midisyn_init() argument
253 KASSERT(ms->lock != NULL); in midisyn_init()
260 if (ms->mets->allocv == 0) { in midisyn_init()
261 ms->voices = kmem_zalloc(ms->nvoice * sizeof(struct voice), in midisyn_init()
263 ms->seqno = 1; in midisyn_init()
264 ms->mets->allocv = midisyn_allocvoice; in midisyn_init()
267 if (ms->mets->attackv_vel == 0 && ms->mets->attackv != 0) in midisyn_init()
268 ms->mets->attackv_vel = midisyn_attackv_vel; in midisyn_init()
270 ms->ctl = (midictl) { in midisyn_init()
272 .cookie = ms, in midisyn_init()
276 DPRINTF(("midisyn_init: ms=%p\n", ms)); in midisyn_init()
280 midisyn_freevoice(midisyn *ms, int voice) in midisyn_freevoice() argument
283 KASSERT(mutex_owned(ms->lock)); in midisyn_freevoice()
285 if (ms->mets->allocv != midisyn_allocvoice) in midisyn_freevoice()
287 ms->voices[voice].inuse = 0; in midisyn_freevoice()
291 midisyn_allocvoice(midisyn *ms, uint_fast8_t chan, uint_fast8_t note) in midisyn_allocvoice() argument
296 KASSERT(mutex_owned(ms->lock)); in midisyn_allocvoice()
300 bestseq = ms->voices[0].seqno + (ms->voices[0].inuse ? 0x40000000 : 0); in midisyn_allocvoice()
301 for (v = 1; v < ms->nvoice; v++) { in midisyn_allocvoice()
302 s = ms->voices[v].seqno; in midisyn_allocvoice()
303 if (ms->voices[v].inuse) in midisyn_allocvoice()
311 bestv, ms->voices[bestv].seqno, in midisyn_allocvoice()
312 ms->voices[bestv].chan_note, in midisyn_allocvoice()
313 ms->voices[bestv].inuse)); in midisyn_allocvoice()
315 if (ms->voices[bestv].inuse) in midisyn_allocvoice()
317 ms->voices[bestv].chan_note)); in midisyn_allocvoice()
319 ms->voices[bestv].chan_note = MS_CHANNOTE(chan, note); in midisyn_allocvoice()
320 ms->voices[bestv].seqno = ms->seqno++; in midisyn_allocvoice()
321 ms->voices[bestv].inuse = 1; in midisyn_allocvoice()
327 midisyn_attackv_vel(midisyn *ms, uint_fast16_t voice, midipitch_t mp, in midisyn_attackv_vel() argument
331 KASSERT(mutex_owned(ms->lock)); in midisyn_attackv_vel()
333 ms->voices[voice].velcB = midisyn_vol2cB((uint_fast16_t)vel << 7); in midisyn_attackv_vel()
334 ms->mets->attackv(ms, voice, mp, level_cB + ms->voices[voice].velcB); in midisyn_attackv_vel()
347 midisyn *ms = addr; in midisyn_channelmsg() local
351 KASSERT(mutex_owned(ms->lock)); in midisyn_channelmsg()
354 ms, status, chan)); in midisyn_channelmsg()
355 fs = ms->mets; in midisyn_channelmsg()
367 voice = midisyn_findvoice(ms, chan, buf[1]); in midisyn_channelmsg()
369 fs->releasev(ms, voice, buf[2]); in midisyn_channelmsg()
370 midisyn_freevoice(ms, voice); in midisyn_channelmsg()
382 voice = fs->allocv(ms, chan, buf[1]); in midisyn_channelmsg()
383 ms->voices[voice].velcB = 0; /* assume driver handles vel */ in midisyn_channelmsg()
384 fs->attackv_vel(ms, voice, in midisyn_channelmsg()
386 midisyn_adj_pitch(ms, chan)), in midisyn_channelmsg()
387 midisyn_adj_level(ms,chan), buf[2]); in midisyn_channelmsg()
402 midictl_change(&ms->ctl, chan, buf+1); in midisyn_channelmsg()
406 fs->pgmchg(ms, chan, buf[1]); in midisyn_channelmsg()
426 ms->chnstate[chan].bendraw = buf[2]<<7 | buf[1]; in midisyn_channelmsg()
427 ms->chnstate[chan].bendraw -= MIDI_BEND_NEUTRAL; in midisyn_channelmsg()
428 midisyn_notify(ms, MIDICTL_RPN, chan, in midisyn_channelmsg()
460 struct midisyn *ms; in midisyn_notify() local
463 ms = (struct midisyn *)cookie; in midisyn_notify()
465 KASSERT(mutex_owned(ms->lock)); in midisyn_notify()
468 if ( ms->mets->ctlnotice ) in midisyn_notify()
469 drvhandled = ms->mets->ctlnotice(ms, evt, chan, key); in midisyn_notify()
477 ms->chnstate[chan].pendingreset |= PEND_ALL; in midisyn_notify()
478 midisyn_notify(ms, MIDICTL_CTLR, chan, in midisyn_notify()
480 midisyn_notify(ms, MIDICTL_CTLR, chan, in midisyn_notify()
482 ms->chnstate[chan].bendraw = 0; /* MIDI_BEND_NEUTRAL - itself */ in midisyn_notify()
483 midisyn_notify(ms, MIDICTL_RPN, chan, in midisyn_notify()
485 midisyn_notify(ms, MIDICTL_RPN, chan, in midisyn_notify()
487 midisyn_notify(ms, MIDICTL_RPN, chan, in midisyn_notify()
494 midisyn_chan_releasev(ms, chan, 64); in midisyn_notify()
501 midisyn_chan_releasev(ms, chan, 127); in midisyn_notify()
504 ms->chnstate[chan].pendingreset &= ~PEND_VOL; in midisyn_notify()
506 ms->chnstate[chan].volume = 0; in midisyn_notify()
509 ms->chnstate[chan].volume = midisyn_vol2cB( in midisyn_notify()
510 midictl_read(&ms->ctl, chan, key, 100<<7)); in midisyn_notify()
511 midisyn_upd_level(ms, chan); in midisyn_notify()
514 ms->chnstate[chan].pendingreset &= ~PEND_EXP; in midisyn_notify()
516 ms->chnstate[chan].expression = 0; in midisyn_notify()
519 ms->chnstate[chan].expression = midisyn_vol2cB( in midisyn_notify()
520 midictl_read(&ms->ctl, chan, key, 16383)); in midisyn_notify()
521 midisyn_upd_level(ms, chan); in midisyn_notify()
529 ms->chnstate[chan].pendingreset &= ~PEND_PBS; in midisyn_notify()
531 ms->chnstate[chan].bend = 0; in midisyn_notify()
535 w = midictl_rpn_read(&ms->ctl, chan, key, 2<<7); in midisyn_notify()
546 ms->chnstate[chan].bend = in midisyn_notify()
547 ( ms->chnstate[chan].bendraw * semis ) << 1; in midisyn_notify()
548 ms->chnstate[chan].bend += in midisyn_notify()
549 ((ms->chnstate[chan].bendraw * cents)/25 + 1) >> 1; in midisyn_notify()
550 midisyn_upd_pitch(ms, chan); in midisyn_notify()
555 ms->chnstate[chan].tuning_fine = 0; in midisyn_notify()
558 mp = midictl_rpn_read(&ms->ctl, chan, key, 8192); in midisyn_notify()
564 ms->chnstate[chan].tuning_fine = ( mp - 8192 ) << 1; in midisyn_notify()
565 midisyn_upd_pitch(ms, chan); in midisyn_notify()
569 ms->chnstate[chan].pendingreset &= ~PEND_TNC; in midisyn_notify()
571 ms->chnstate[chan].tuning_coarse = 0; in midisyn_notify()
579 mp = midictl_rpn_read(&ms->ctl, chan, key, 64<<7) >> 7; in midisyn_notify()
580 ms->chnstate[chan].tuning_coarse = ( mp - 64 ) << 14; in midisyn_notify()
581 midisyn_upd_pitch(ms, chan); in midisyn_notify()
599 midisyn_adj_level(midisyn *ms, uint_fast8_t chan) in midisyn_adj_level() argument
603 KASSERT(mutex_owned(ms->lock)); in midisyn_adj_level()
605 level = ms->chnstate[chan].volume + ms->chnstate[chan].expression; in midisyn_adj_level()
612 midisyn_adj_pitch(midisyn *ms, uint_fast8_t chan) in midisyn_adj_pitch() argument
614 struct channelstate *s = ms->chnstate + chan; in midisyn_adj_pitch()
616 KASSERT(mutex_owned(ms->lock)); in midisyn_adj_pitch()
621 #define VOICECHAN_FOREACH_BEGIN(ms,vp,ch) \ argument
624 for (vp=(ms)->voices,_end_##vp=vp+(ms)->nvoice; \
635 midisyn_chan_releasev(midisyn *ms, uint_fast8_t chan, uint_fast8_t vel) in midisyn_chan_releasev() argument
638 KASSERT(mutex_owned(ms->lock)); in midisyn_chan_releasev()
640 VOICECHAN_FOREACH_BEGIN(ms,vp,chan) in midisyn_chan_releasev()
641 ms->mets->releasev(ms, vp - ms->voices, vel); in midisyn_chan_releasev()
642 midisyn_freevoice(ms, vp - ms->voices); in midisyn_chan_releasev()
647 midisyn_upd_level(midisyn *ms, uint_fast8_t chan) in midisyn_upd_level() argument
652 KASSERT(mutex_owned(ms->lock)); in midisyn_upd_level()
654 if ( NULL == ms->mets->relevelv ) in midisyn_upd_level()
657 if ( ms->chnstate[chan].pendingreset & PEND_LEVEL ) in midisyn_upd_level()
660 chan_level = midisyn_adj_level(ms, chan); in midisyn_upd_level()
662 VOICECHAN_FOREACH_BEGIN(ms,vp,chan) in midisyn_upd_level()
664 ms->mets->relevelv(ms, vp - ms->voices, in midisyn_upd_level()
670 midisyn_upd_pitch(midisyn *ms, uint_fast8_t chan) in midisyn_upd_pitch() argument
674 KASSERT(mutex_owned(ms->lock)); in midisyn_upd_pitch()
676 if ( NULL == ms->mets->repitchv ) in midisyn_upd_pitch()
679 if ( ms->chnstate[chan].pendingreset & PEND_PITCH ) in midisyn_upd_pitch()
682 chan_adj = midisyn_adj_pitch(ms, chan); in midisyn_upd_pitch()
684 VOICECHAN_FOREACH_BEGIN(ms,vp,chan) in midisyn_upd_pitch()
685 ms->mets->repitchv(ms, vp - ms->voices, in midisyn_upd_pitch()