Lines Matching refs:dev

33 static void note_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
34 static void one_param_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
35 static void pitchbend_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
36 static void two_param_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
37 static void one_param_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
38 static void songpos_event(struct snd_midi_event *dev, struct snd_seq_event *ev);
51 void (*encode)(struct snd_midi_event *dev, struct snd_seq_event *ev);
83 static int extra_decode_ctrl14(struct snd_midi_event *dev, unsigned char *buf, int len,
85 static int extra_decode_xrpn(struct snd_midi_event *dev, unsigned char *buf, int count,
90 int (*decode)(struct snd_midi_event *dev, unsigned char *buf, int len,
104 struct snd_midi_event *dev; in snd_midi_event_new() local
107 dev = kzalloc(sizeof(*dev), GFP_KERNEL); in snd_midi_event_new()
108 if (dev == NULL) in snd_midi_event_new()
111 dev->buf = kmalloc(bufsize, GFP_KERNEL); in snd_midi_event_new()
112 if (dev->buf == NULL) { in snd_midi_event_new()
113 kfree(dev); in snd_midi_event_new()
117 dev->bufsize = bufsize; in snd_midi_event_new()
118 dev->lastcmd = 0xff; in snd_midi_event_new()
119 dev->type = ST_INVALID; in snd_midi_event_new()
120 spin_lock_init(&dev->lock); in snd_midi_event_new()
121 *rdev = dev; in snd_midi_event_new()
126 void snd_midi_event_free(struct snd_midi_event *dev) in snd_midi_event_free() argument
128 if (dev != NULL) { in snd_midi_event_free()
129 kfree(dev->buf); in snd_midi_event_free()
130 kfree(dev); in snd_midi_event_free()
138 static inline void reset_encode(struct snd_midi_event *dev) in reset_encode() argument
140 dev->read = 0; in reset_encode()
141 dev->qlen = 0; in reset_encode()
142 dev->type = ST_INVALID; in reset_encode()
145 void snd_midi_event_reset_encode(struct snd_midi_event *dev) in snd_midi_event_reset_encode() argument
147 guard(spinlock_irqsave)(&dev->lock); in snd_midi_event_reset_encode()
148 reset_encode(dev); in snd_midi_event_reset_encode()
152 void snd_midi_event_reset_decode(struct snd_midi_event *dev) in snd_midi_event_reset_decode() argument
154 guard(spinlock_irqsave)(&dev->lock); in snd_midi_event_reset_decode()
155 dev->lastcmd = 0xff; in snd_midi_event_reset_decode()
159 void snd_midi_event_no_status(struct snd_midi_event *dev, int on) in snd_midi_event_no_status() argument
161 dev->nostat = on ? 1 : 0; in snd_midi_event_no_status()
170 bool snd_midi_event_encode_byte(struct snd_midi_event *dev, unsigned char c, in snd_midi_event_encode_byte() argument
183 guard(spinlock_irqsave)(&dev->lock); in snd_midi_event_encode_byte()
185 (c != MIDI_CMD_COMMON_SYSEX_END || dev->type != ST_SYSEX)) { in snd_midi_event_encode_byte()
187 dev->buf[0] = c; in snd_midi_event_encode_byte()
189 dev->type = (c & 0x0f) + ST_SPECIAL; in snd_midi_event_encode_byte()
191 dev->type = (c >> 4) & 0x07; in snd_midi_event_encode_byte()
192 dev->read = 1; in snd_midi_event_encode_byte()
193 dev->qlen = status_event[dev->type].qlen; in snd_midi_event_encode_byte()
195 if (dev->qlen > 0) { in snd_midi_event_encode_byte()
197 dev->buf[dev->read++] = c; in snd_midi_event_encode_byte()
198 if (dev->type != ST_SYSEX) in snd_midi_event_encode_byte()
199 dev->qlen--; in snd_midi_event_encode_byte()
202 dev->buf[1] = c; in snd_midi_event_encode_byte()
203 dev->qlen = status_event[dev->type].qlen - 1; in snd_midi_event_encode_byte()
204 dev->read = 2; in snd_midi_event_encode_byte()
207 if (dev->qlen == 0) { in snd_midi_event_encode_byte()
208 ev->type = status_event[dev->type].event; in snd_midi_event_encode_byte()
211 if (status_event[dev->type].encode) /* set data values */ in snd_midi_event_encode_byte()
212 status_event[dev->type].encode(dev, ev); in snd_midi_event_encode_byte()
213 if (dev->type >= ST_SPECIAL) in snd_midi_event_encode_byte()
214 dev->type = ST_INVALID; in snd_midi_event_encode_byte()
216 } else if (dev->type == ST_SYSEX) { in snd_midi_event_encode_byte()
218 dev->read >= dev->bufsize) { in snd_midi_event_encode_byte()
222 ev->data.ext.len = dev->read; in snd_midi_event_encode_byte()
223 ev->data.ext.ptr = dev->buf; in snd_midi_event_encode_byte()
225 dev->read = 0; /* continue to parse */ in snd_midi_event_encode_byte()
227 reset_encode(dev); /* all parsed */ in snd_midi_event_encode_byte()
237 static void note_event(struct snd_midi_event *dev, struct snd_seq_event *ev) in note_event() argument
239 ev->data.note.channel = dev->buf[0] & 0x0f; in note_event()
240 ev->data.note.note = dev->buf[1]; in note_event()
241 ev->data.note.velocity = dev->buf[2]; in note_event()
245 static void one_param_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev) in one_param_ctrl_event() argument
247 ev->data.control.channel = dev->buf[0] & 0x0f; in one_param_ctrl_event()
248 ev->data.control.value = dev->buf[1]; in one_param_ctrl_event()
252 static void pitchbend_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev) in pitchbend_ctrl_event() argument
254 ev->data.control.channel = dev->buf[0] & 0x0f; in pitchbend_ctrl_event()
255 ev->data.control.value = (int)dev->buf[2] * 128 + (int)dev->buf[1] - 8192; in pitchbend_ctrl_event()
259 static void two_param_ctrl_event(struct snd_midi_event *dev, struct snd_seq_event *ev) in two_param_ctrl_event() argument
261 ev->data.control.channel = dev->buf[0] & 0x0f; in two_param_ctrl_event()
262 ev->data.control.param = dev->buf[1]; in two_param_ctrl_event()
263 ev->data.control.value = dev->buf[2]; in two_param_ctrl_event()
267 static void one_param_event(struct snd_midi_event *dev, struct snd_seq_event *ev) in one_param_event() argument
269 ev->data.control.value = dev->buf[1]; in one_param_event()
273 static void songpos_event(struct snd_midi_event *dev, struct snd_seq_event *ev) in songpos_event() argument
275 ev->data.control.value = (int)dev->buf[2] * 128 + (int)dev->buf[1]; in songpos_event()
282 long snd_midi_event_decode(struct snd_midi_event *dev, unsigned char *buf, long count, in snd_midi_event_decode() argument
296 return extra_event[type].decode(dev, buf, count, ev); in snd_midi_event_decode()
309 snd_midi_event_reset_decode(dev); in snd_midi_event_decode()
316 spin_lock_irqsave(&dev->lock, flags); in snd_midi_event_decode()
317 if ((cmd & 0xf0) == 0xf0 || dev->lastcmd != cmd || dev->nostat) { in snd_midi_event_decode()
318 dev->lastcmd = cmd; in snd_midi_event_decode()
319 spin_unlock_irqrestore(&dev->lock, flags); in snd_midi_event_decode()
325 spin_unlock_irqrestore(&dev->lock, flags); in snd_midi_event_decode()
375 static int extra_decode_ctrl14(struct snd_midi_event *dev, unsigned char *buf, in extra_decode_ctrl14() argument
385 if (dev->nostat && count < 6) in extra_decode_ctrl14()
387 if (cmd != dev->lastcmd || dev->nostat) { in extra_decode_ctrl14()
390 buf[idx++] = dev->lastcmd = cmd; in extra_decode_ctrl14()
394 if (dev->nostat) in extra_decode_ctrl14()
401 if (cmd != dev->lastcmd || dev->nostat) { in extra_decode_ctrl14()
404 buf[idx++] = dev->lastcmd = cmd; in extra_decode_ctrl14()
413 static int extra_decode_xrpn(struct snd_midi_event *dev, unsigned char *buf, in extra_decode_xrpn() argument
431 if (dev->nostat && count < 12) in extra_decode_xrpn()
438 if (cmd != dev->lastcmd && !dev->nostat) { in extra_decode_xrpn()
441 buf[idx++] = dev->lastcmd = cmd; in extra_decode_xrpn()
445 if (dev->nostat) in extra_decode_xrpn()
446 buf[idx++] = dev->lastcmd = cmd; in extra_decode_xrpn()