Lines Matching refs:vss

109 	struct virtio_pcm_substream *vss = vs->substreams[substream->number];
111 substream->runtime->hw = vss->hw;
112 substream->private_data = vss;
117 vss->stopped = !!virtsnd_pcm_msg_pending_num(vss);
118 vss->suspended = false;
143 * @vss: VirtIO PCM substream.
153 static int virtsnd_pcm_dev_set_params(struct virtio_pcm_substream *vss,
183 msg = virtsnd_pcm_ctl_msg_alloc(vss, VIRTIO_SND_R_PCM_SET_PARAMS,
195 if (vss->features & (1U << VIRTIO_SND_PCM_F_MSG_POLLING))
199 if (vss->features & (1U << VIRTIO_SND_PCM_F_EVT_XRUNS))
203 return virtsnd_ctl_msg_send_sync(vss->snd, msg);
217 struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
218 struct virtio_device *vdev = vss->snd->vdev;
221 if (virtsnd_pcm_msg_pending_num(vss)) {
223 vss->sid);
227 rc = virtsnd_pcm_dev_set_params(vss, params_buffer_bytes(hw_params),
239 virtsnd_pcm_msg_free(vss);
241 return virtsnd_pcm_msg_alloc(vss, params_periods(hw_params),
254 struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
257 if (!virtsnd_pcm_msg_pending_num(vss))
258 virtsnd_pcm_msg_free(vss);
272 struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
273 struct virtio_device *vdev = vss->snd->vdev;
276 if (!vss->suspended) {
277 if (virtsnd_pcm_msg_pending_num(vss)) {
279 vss->sid);
283 vss->buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
284 vss->hw_ptr = 0;
285 vss->msg_last_enqueued = -1;
292 rc = virtsnd_pcm_dev_set_params(vss, buffer_bytes, period_bytes,
299 vss->xfer_xrun = false;
300 vss->suspended = false;
301 vss->msg_count = 0;
303 msg = virtsnd_pcm_ctl_msg_alloc(vss, VIRTIO_SND_R_PCM_PREPARE,
308 return virtsnd_ctl_msg_send_sync(vss->snd, msg);
322 struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
323 struct virtio_snd *snd = vss->snd;
332 queue = virtsnd_pcm_queue(vss);
335 spin_lock(&vss->lock);
336 rc = virtsnd_pcm_msg_send(vss);
338 vss->xfer_enabled = true;
339 spin_unlock(&vss->lock);
344 msg = virtsnd_pcm_ctl_msg_alloc(vss, VIRTIO_SND_R_PCM_START,
347 spin_lock_irqsave(&vss->lock, flags);
348 vss->xfer_enabled = false;
349 spin_unlock_irqrestore(&vss->lock, flags);
356 vss->suspended = true;
359 vss->stopped = true;
362 spin_lock_irqsave(&vss->lock, flags);
363 vss->xfer_enabled = false;
364 spin_unlock_irqrestore(&vss->lock, flags);
366 msg = virtsnd_pcm_ctl_msg_alloc(vss, VIRTIO_SND_R_PCM_STOP,
389 struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
390 struct virtio_snd *snd = vss->snd;
395 cancel_work_sync(&vss->elapsed_period);
397 if (!vss->stopped)
400 msg = virtsnd_pcm_ctl_msg_alloc(vss, VIRTIO_SND_R_PCM_RELEASE,
415 rc = wait_event_interruptible_timeout(vss->msg_empty,
416 !virtsnd_pcm_msg_pending_num(vss),
420 vss->sid);
425 vss->stopped = false;
441 struct virtio_pcm_substream *vss = snd_pcm_substream_chip(substream);
445 spin_lock_irqsave(&vss->lock, flags);
446 if (!vss->xfer_xrun)
447 hw_ptr = bytes_to_frames(substream->runtime, vss->hw_ptr);
448 spin_unlock_irqrestore(&vss->lock, flags);