Lines Matching +full:vp +full:- +full:p
1 // SPDX-License-Identifier: GPL-2.0-or-later
6 * Copyright (c) 1999-2000 Takashi Iwai <tiwai@suse.de>
19 #define xoffsetof(type,tag) ((long)(&((type)NULL)->tag) - (long)(NULL))
40 long offset; /* offset in parameter record (-1 = not written) */
41 int update; /* flgas for real-time update */
61 {PARM_SIGN_HI, -128, 127, parm_offset(tremfrq), SNDRV_EMUX_UPDATE_TREMFREQ}, /* lfo1 vol */
62 {PARM_SIGN_HI, -128, 127, parm_offset(fmmod), SNDRV_EMUX_UPDATE_FMMOD}, /* lfo1 pitch */
67 {PARM_SIGN_HI, -128, 127, parm_offset(fm2frq2), SNDRV_EMUX_UPDATE_FM2FRQ2}, /* lfo2 pitch */
69 {PARM_WORD, 0, 0xffff, -1, SNDRV_EMUX_UPDATE_PITCH}, /* initial pitch */
75 {PARM_WORD, 0, 0xffff, -1, 0}, /* sample start */
76 {PARM_WORD, 0, 0xffff, -1, 0}, /* loop start */
77 {PARM_WORD, 0, 0xffff, -1, 0}, /* loop end */
78 {PARM_WORD, 0, 0xffff, -1, 0}, /* coarse sample start */
79 {PARM_WORD, 0, 0xffff, -1, 0}, /* coarse loop start */
80 {PARM_WORD, 0, 0xffff, -1, 0}, /* coarse loop end */
81 {PARM_BYTE, 0, 0xff, -1, SNDRV_EMUX_UPDATE_VOLUME}, /* initial attenuation */
89 struct snd_emux_effect_table *fx = chan->private;
91 effect = fx->val[type];
92 if (fx->flag[type] == EMUX_FX_FLAG_ADD) {
110 struct snd_emux_effect_table *fx = chan->private;
112 effect = *(unsigned short*)&fx->val[type];
113 if (fx->flag[type] == EMUX_FX_FLAG_ADD)
127 struct snd_emux_effect_table *fx = chan->private;
129 if (fx->flag[hi])
130 addr = (short)fx->val[hi];
132 if (fx->flag[lo])
133 addr += (short)fx->val[lo];
140 /* change effects - for OSS sequencer compatibility */
172 emu = port->emu;
173 fx = chan->private;
179 fx->val[type] = val;
180 fx->flag[type] = mode;
197 scoped_guard(spinlock_irqsave, &emu->voice_lock) {
198 for (i = 0; i < emu->max_voices; i++) {
199 struct snd_emux_voice *vp = &emu->voices[i];
200 if (!STATE_IS_PLAYING(vp->state) || vp->chan != chan)
202 srcp = (unsigned char *)&vp->reg.parm + offset;
203 origp = (unsigned char *)&vp->zone->v.parm + offset;
221 snd_emux_setup_effect(struct snd_emux_voice *vp)
223 struct snd_midi_channel *chan = vp->chan;
228 fx = chan->private;
235 if (!fx->flag[i])
247 srcp = (unsigned char*)&vp->reg.parm + offset;
255 vp->reg.start += effect_get_offset(chan, EMUX_FX_SAMPLE_START,
257 vp->reg.sample_mode);
259 vp->reg.loopstart += effect_get_offset(chan, EMUX_FX_LOOP_START,
261 vp->reg.sample_mode);
263 vp->reg.loopend += effect_get_offset(chan, EMUX_FX_LOOP_END,
265 vp->reg.sample_mode);
272 snd_emux_create_effect(struct snd_emux_port *p)
275 p->effect = kcalloc(p->chset.max_channels,
277 if (p->effect) {
278 for (i = 0; i < p->chset.max_channels; i++)
279 p->chset.channels[i].private = p->effect + i;
281 for (i = 0; i < p->chset.max_channels; i++)
282 p->chset.channels[i].private = NULL;
287 snd_emux_delete_effect(struct snd_emux_port *p)
289 kfree(p->effect);
290 p->effect = NULL;
294 snd_emux_clear_effect(struct snd_emux_port *p)
296 if (p->effect) {
297 memset(p->effect, 0, sizeof(struct snd_emux_effect_table) *
298 p->chset.max_channels);