Lines Matching +full:config +full:- +full:cond
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
8 * Abramo Bagnara <abramo@alsa-project.org>
21 #define snd_pcm_substream_chip(substream) ((substream)->private_data)
22 #define snd_pcm_chip(pcm) ((pcm)->private_data)
86 #define SNDRV_PCM_DEVICES (SNDRV_OS_MINORS-2)
105 #define SNDRV_PCM_POS_XRUN ((snd_pcm_uframes_t)-1)
125 #define SNDRV_PCM_RATE_KNOT (1U<<31) /* supports more non-continuos rates */
150 // available bit count in most significant bit. It's for the case of so-called 'left-justified' or
151 // `right-padding` sample which has less width than 32 bit.
238 unsigned int cond; member
247 struct snd_mask masks[SNDRV_PCM_HW_PARAM_LAST_MASK -
249 struct snd_interval intervals[SNDRV_PCM_HW_PARAM_LAST_INTERVAL -
259 return &constrs->masks[var - SNDRV_PCM_HW_PARAM_FIRST_MASK]; in constrs_mask()
265 return &constrs->intervals[var - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL]; in constrs_interval()
301 * userspace-provided audio timestamp config to kernel,
311 struct snd_pcm_audio_tstamp_config *config) in snd_pcm_unpack_audio_tstamp_config() argument
313 config->type_requested = data & 0xF; in snd_pcm_unpack_audio_tstamp_config()
314 config->report_delay = (data >> 4) & 1; in snd_pcm_unpack_audio_tstamp_config()
318 * kernel-provided audio timestamp report to user-space
322 /* 6 of max 16 bits used for bit-fields */
340 tmp = report->accuracy_report; in snd_pcm_pack_audio_tstamp_report()
342 tmp |= report->actual_type; in snd_pcm_pack_audio_tstamp_report()
344 tmp |= report->valid; in snd_pcm_pack_audio_tstamp_report()
346 *data &= 0xffff; /* zero-clear MSBs */ in snd_pcm_pack_audio_tstamp_report()
348 *accuracy = report->accuracy; in snd_pcm_pack_audio_tstamp_report()
353 /* -- Status -- */
358 bool trigger_tstamp_latched; /* trigger timestamp latched in low-level driver/hardware */
366 u64 hw_ptr_wrap; /* offset for hw_ptr due to boundary wrap-around */
368 /* -- HW params -- */
386 /* -- SW params; see struct snd_pcm_sw_params for comments -- */
395 /* internal data of auto-silencer */
401 /* -- mmap -- */
405 /* -- locking / scheduling -- */
406 snd_pcm_uframes_t twake; /* do transfer (!poll) wakeup if non-zero */
414 /* -- private section -- */
418 /* -- hardware description -- */
422 /* -- timer -- */
426 /* -- DMA -- */
434 /* -- audio timestamp config -- */
440 /* -- OSS things -- */
457 void *private_data; /* copied from pcm->private_data */
465 /* -- hardware operations -- */
467 /* -- runtime information -- */
469 /* -- timer section -- */
473 /* -- next substream -- */
475 /* -- linked substreams -- */
479 /* -- assigned files -- */
486 /* -- OSS things -- */
497 #define SUBSTREAM_BUSY(substream) ((substream)->ref_count > 0)
503 /* -- substreams -- */
508 /* -- OSS things -- */
517 struct snd_kcontrol *chmap_kctl; /* channel-mapping controls */
536 bool nonatomic; /* whole PCM operations are in non-atomic context */
614 * snd_pcm_stream_linked - Check whether the substream is linked with others
621 return substream->group != &substream->self_group; in snd_pcm_stream_linked()
632 * snd_pcm_stream_lock_irqsave - Lock the PCM stream
649 * snd_pcm_stream_lock_irqsave_nested - Single-nested PCM stream locking
654 * the single-depth lockdep subclass.
663 * snd_pcm_group_for_each_entry - iterate over the linked substreams
672 list_for_each_entry(s, &substream->group->substreams, link_list)
680 * snd_pcm_running - Check whether the substream is in a running state
688 return (substream->runtime->state == SNDRV_PCM_STATE_RUNNING || in snd_pcm_running()
689 (substream->runtime->state == SNDRV_PCM_STATE_DRAINING && in snd_pcm_running()
690 substream->stream == SNDRV_PCM_STREAM_PLAYBACK)); in snd_pcm_running()
694 * __snd_pcm_set_state - Change the current PCM state
703 runtime->state = state; in __snd_pcm_set_state()
704 runtime->status->state = state; /* copy for mmap */ in __snd_pcm_set_state()
708 * bytes_to_samples - Unit conversion of the size from bytes to samples
716 return size * 8 / runtime->sample_bits; in bytes_to_samples()
720 * bytes_to_frames - Unit conversion of the size from bytes to frames
728 return size * 8 / runtime->frame_bits; in bytes_to_frames()
732 * samples_to_bytes - Unit conversion of the size from samples to bytes
740 return size * runtime->sample_bits / 8; in samples_to_bytes()
744 * frames_to_bytes - Unit conversion of the size from frames to bytes
752 return size * runtime->frame_bits / 8; in frames_to_bytes()
756 * frame_aligned - Check whether the byte size is aligned to frames
764 return bytes % runtime->byte_align == 0; in frame_aligned()
768 * snd_pcm_lib_buffer_bytes - Get the buffer size of the current PCM in bytes
775 struct snd_pcm_runtime *runtime = substream->runtime; in snd_pcm_lib_buffer_bytes()
776 return frames_to_bytes(runtime, runtime->buffer_size); in snd_pcm_lib_buffer_bytes()
780 * snd_pcm_lib_period_bytes - Get the period size of the current PCM in bytes
787 struct snd_pcm_runtime *runtime = substream->runtime; in snd_pcm_lib_period_bytes()
788 return frames_to_bytes(runtime, runtime->period_size); in snd_pcm_lib_period_bytes()
792 * snd_pcm_playback_avail - Get the available (writable) space for playback
795 * Result is between 0 ... (boundary - 1)
801 …snd_pcm_sframes_t avail = runtime->status->hw_ptr + runtime->buffer_size - runtime->control->appl_… in snd_pcm_playback_avail()
803 avail += runtime->boundary; in snd_pcm_playback_avail()
804 else if ((snd_pcm_uframes_t) avail >= runtime->boundary) in snd_pcm_playback_avail()
805 avail -= runtime->boundary; in snd_pcm_playback_avail()
810 * snd_pcm_capture_avail - Get the available (readable) space for capture
813 * Result is between 0 ... (boundary - 1)
819 snd_pcm_sframes_t avail = runtime->status->hw_ptr - runtime->control->appl_ptr; in snd_pcm_capture_avail()
821 avail += runtime->boundary; in snd_pcm_capture_avail()
826 * snd_pcm_playback_hw_avail - Get the queued space for playback
833 return runtime->buffer_size - snd_pcm_playback_avail(runtime); in snd_pcm_playback_hw_avail()
837 * snd_pcm_capture_hw_avail - Get the free space for capture
844 return runtime->buffer_size - snd_pcm_capture_avail(runtime); in snd_pcm_capture_hw_avail()
848 * snd_pcm_playback_ready - check whether the playback buffer is available
853 * Return: Non-zero if available, or zero if not.
857 struct snd_pcm_runtime *runtime = substream->runtime; in snd_pcm_playback_ready()
858 return snd_pcm_playback_avail(runtime) >= runtime->control->avail_min; in snd_pcm_playback_ready()
862 * snd_pcm_capture_ready - check whether the capture buffer is available
867 * Return: Non-zero if available, or zero if not.
871 struct snd_pcm_runtime *runtime = substream->runtime; in snd_pcm_capture_ready()
872 return snd_pcm_capture_avail(runtime) >= runtime->control->avail_min; in snd_pcm_capture_ready()
876 * snd_pcm_playback_data - check whether any data exists on the playback buffer
881 * Return: Non-zero if any data exists, or zero if not. If stop_threshold
882 * is bigger or equal to boundary, then this function returns always non-zero.
886 struct snd_pcm_runtime *runtime = substream->runtime; in snd_pcm_playback_data()
888 if (runtime->stop_threshold >= runtime->boundary) in snd_pcm_playback_data()
890 return snd_pcm_playback_avail(runtime) < runtime->buffer_size; in snd_pcm_playback_data()
894 * snd_pcm_playback_empty - check whether the playback buffer is empty
899 * Return: Non-zero if empty, or zero if not.
903 struct snd_pcm_runtime *runtime = substream->runtime; in snd_pcm_playback_empty()
904 return snd_pcm_playback_avail(runtime) >= runtime->buffer_size; in snd_pcm_playback_empty()
908 * snd_pcm_capture_empty - check whether the capture buffer is empty
913 * Return: Non-zero if empty, or zero if not.
917 struct snd_pcm_runtime *runtime = substream->runtime; in snd_pcm_capture_empty()
922 * snd_pcm_trigger_done - Mark the master substream
927 * supports the single-shot operation, the driver calls this in the loop
938 substream->runtime->trigger_master = master; in snd_pcm_trigger_done()
956 return ¶ms->masks[var - SNDRV_PCM_HW_PARAM_FIRST_MASK]; in hw_param_mask()
962 return ¶ms->intervals[var - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL]; in hw_param_interval()
968 return ¶ms->masks[var - SNDRV_PCM_HW_PARAM_FIRST_MASK]; in hw_param_mask_c()
974 return ¶ms->intervals[var - SNDRV_PCM_HW_PARAM_FIRST_INTERVAL]; in hw_param_interval_c()
978 * params_channels - Get the number of channels from the hw params
985 return hw_param_interval_c(p, SNDRV_PCM_HW_PARAM_CHANNELS)->min; in params_channels()
989 * params_rate - Get the sample rate from the hw params
996 return hw_param_interval_c(p, SNDRV_PCM_HW_PARAM_RATE)->min; in params_rate()
1000 * params_period_size - Get the period size (in frames) from the hw params
1007 return hw_param_interval_c(p, SNDRV_PCM_HW_PARAM_PERIOD_SIZE)->min; in params_period_size()
1011 * params_periods - Get the number of periods from the hw params
1018 return hw_param_interval_c(p, SNDRV_PCM_HW_PARAM_PERIODS)->min; in params_periods()
1022 * params_buffer_size - Get the buffer size (in frames) from the hw params
1029 return hw_param_interval_c(p, SNDRV_PCM_HW_PARAM_BUFFER_SIZE)->min; in params_buffer_size()
1033 * params_buffer_bytes - Get the buffer size (in bytes) from the hw params
1040 return hw_param_interval_c(p, SNDRV_PCM_HW_PARAM_BUFFER_BYTES)->min; in params_buffer_bytes()
1063 unsigned int cond,
1067 unsigned int cond,
1071 unsigned int cond,
1075 unsigned int cond,
1079 unsigned int cond,
1083 unsigned int cond,
1087 unsigned int cond,
1092 unsigned int cond,
1098 * snd_pcm_hw_constraint_single() - Constrain parameter to a single value
1118 #if 0 /* just for kernel-doc */
1120 * snd_pcm_format_cpu_endian - Check the PCM format is CPU-endian
1123 * Return: 1 if the given PCM format is CPU-endian, 0 if
1211 return snd_pcm_hw_limit_rates(&runtime->hw); in snd_pcm_limit_hw_rates()
1222 * snd_pcm_set_runtime_buffer - Set the PCM runtime buffer
1226 * Copy the buffer information to runtime->dma_buffer when @bufp is non-NULL.
1232 struct snd_pcm_runtime *runtime = substream->runtime; in snd_pcm_set_runtime_buffer()
1234 runtime->dma_buffer_p = bufp; in snd_pcm_set_runtime_buffer()
1235 runtime->dma_area = bufp->area; in snd_pcm_set_runtime_buffer()
1236 runtime->dma_addr = bufp->addr; in snd_pcm_set_runtime_buffer()
1237 runtime->dma_bytes = bufp->bytes; in snd_pcm_set_runtime_buffer()
1239 runtime->dma_buffer_p = NULL; in snd_pcm_set_runtime_buffer()
1240 runtime->dma_area = NULL; in snd_pcm_set_runtime_buffer()
1241 runtime->dma_addr = 0; in snd_pcm_set_runtime_buffer()
1242 runtime->dma_bytes = 0; in snd_pcm_set_runtime_buffer()
1247 * snd_pcm_gettime - Fill the timespec64 depending on the timestamp mode
1254 switch (runtime->tstamp_type) { in snd_pcm_gettime()
1289 * snd_pcm_set_fixed_buffer - Preallocate and set up the fixed size PCM buffer
1293 * @size: the requested pre-allocation size in bytes
1295 * This is a variant of snd_pcm_set_managed_buffer(), but this pre-allocates
1296 * only the given sized buffer and doesn't allow re-allocation nor dynamic
1298 * The function may return -ENOMEM error, hence the caller must check it.
1310 * snd_pcm_set_fixed_buffer_all - Preallocate and set up the fixed size PCM buffer
1314 * @size: the requested pre-allocation size in bytes
1317 * all substream. If any of allocation fails, it returns -ENOMEM, hence the
1335 * snd_pcm_lib_alloc_vmalloc_buffer - allocate virtual DMA buffer
1354 * snd_pcm_lib_alloc_vmalloc_32_buffer - allocate 32-bit-addressable buffer
1359 * vmalloc_32(), i.e., the pages are allocated from 32-bit-addressable memory.
1371 #define snd_pcm_get_dma_buf(substream) ((substream)->runtime->dma_buffer_p)
1374 * snd_pcm_sgbuf_get_addr - Get the DMA address at the corresponding offset
1387 * snd_pcm_sgbuf_get_chunk_size - Compute the max size that fits within the
1403 * snd_pcm_mmap_data_open - increase the mmap counter
1410 struct snd_pcm_substream *substream = (struct snd_pcm_substream *)area->vm_private_data; in snd_pcm_mmap_data_open()
1411 atomic_inc(&substream->mmap_count); in snd_pcm_mmap_data_open()
1415 * snd_pcm_mmap_data_close - decrease the mmap counter
1422 struct snd_pcm_substream *substream = (struct snd_pcm_substream *)area->vm_private_data; in snd_pcm_mmap_data_close()
1423 atomic_dec(&substream->mmap_count); in snd_pcm_mmap_data_close()
1428 /* mmap for io-memory area */
1438 * snd_pcm_limit_isa_dma_size - Get the max size fitting with ISA DMA transfer
1459 * snd_pcm_direction_name - Get a string naming the direction of a stream
1473 * snd_pcm_stream_str - Get a string naming the direction of a stream
1480 return snd_pcm_direction_name(substream->stream); in snd_pcm_stream_str()
1484 * PCM channel-mapping control API
1504 * snd_pcm_chmap_substream - get the PCM substream assigned to the given chmap info
1514 for (s = info->pcm->streams[info->stream].substream; s; s = s->next) in snd_pcm_chmap_substream()
1515 if (s->number == idx) in snd_pcm_chmap_substream()
1520 /* ALSA-standard channel maps (RL/RR prior to C/LFE) */
1537 * pcm_format_to_bits - Strong-typed conversion of pcm_format to bitwise
1548 * pcm_for_each_format - helper to iterate for each format type
1558 dev_err((pcm)->card->dev, fmt, ##args)
1560 dev_warn((pcm)->card->dev, fmt, ##args)
1562 dev_dbg((pcm)->card->dev, fmt, ##args)
1583 …__u32 audio_tstamp_data; /* needed for 64-bit alignment, used for configs/report to/from userspac…
1584 s64 audio_tstamp_sec; /* sample counter, wall clock, PHC or on-demand sync'ed */
1589 unsigned char reserved[52-4*sizeof(s64)]; /* must be filled with zero */
1608 u32 audio_tstamp_data; /* needed for 64-bit alignment, used for configs/report to/from userspace */
1609 s32 audio_tstamp_sec; /* sample counter, wall clock, PHC or on-demand sync'ed */
1614 unsigned char reserved[52-4*sizeof(s32)]; /* must be filled with zero */