summaryrefslogtreecommitdiff
path: root/static/freebsd/man4/sndstat.4 3.html
diff options
context:
space:
mode:
Diffstat (limited to 'static/freebsd/man4/sndstat.4 3.html')
-rw-r--r--static/freebsd/man4/sndstat.4 3.html382
1 files changed, 0 insertions, 382 deletions
diff --git a/static/freebsd/man4/sndstat.4 3.html b/static/freebsd/man4/sndstat.4 3.html
deleted file mode 100644
index 30f37c7f..00000000
--- a/static/freebsd/man4/sndstat.4 3.html
+++ /dev/null
@@ -1,382 +0,0 @@
-<table class="head">
- <tr>
- <td class="head-ltitle">SNDSTAT(4)</td>
- <td class="head-vol">Device Drivers Manual</td>
- <td class="head-rtitle">SNDSTAT(4)</td>
- </tr>
-</table>
-<div class="manual-text">
-<section class="Sh">
-<h1 class="Sh" id="NAME"><a class="permalink" href="#NAME">NAME</a></h1>
-<p class="Pp"><code class="Nm">sndstat</code> &#x2014;
- <span class="Nd">nvlist-based PCM audio device enumeration
- interface</span></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">SYNOPSIS</a></h1>
-<p class="Pp">To compile the driver into the kernel, place the following lines
- in the kernel configuration file:</p>
-<div class="Bd Pp Bd-indent"><code class="Cd">device sound</code></div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">DESCRIPTION</a></h1>
-<p class="Pp">The ioctl interface provided by
- <span class="Pa">/dev/sndstat</span> device allows callers to enumerate PCM
- audio devices available for use. In other words, it provides means to get
- the list of all audio devices available to the system.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="IOCTLS"><a class="permalink" href="#IOCTLS">IOCTLS</a></h1>
-<p class="Pp">For ioctl calls that take an argument, the following structure is
- used:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>struct sndstioc_nv_arg {
- size_t nbytes;
- void *buf;
-};</pre>
-</div>
-<p class="Pp">Here is an example of an nvlist object with explanations of the
- common fields:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>dsps (NVLIST ARRAY): 1
- from_user (BOOL): FALSE
- nameunit (STRING): [pcm0]
- devnode (STRING): [dsp0]
- desc (STRING): [Generic (0x8086) (Analog Line-out)]
- pchan (NUMBER): 1
- rchan (NUMBER): 0
- info_play (NVLIST):
- min_rate (NUMBER): 48000
- max_rate (NUMBER): 48000
- formats (NUMBER): 16
- min_chn (NUMBER): 2
- max_chn (NUMBER): 2
- provider_info (NVLIST):
- unit (NUMBER): 0
- status (STRING): on hdaa0
- bitperfect (BOOL): FALSE
- pvchan (BOOL): TRUE
- pvchanrate (NUMBER): 48000
- pvchanformat (NUMBER): 0x00000010
- rvchan (BOOL): TRUE
- rvchanrate (NUMBER): 48000
- rvchanformat (NUMBER): 0x00000010
- channel_info (NVLIST_ARRAY): 1
- name (STRING): dsp0.virtual_play.0
- parentchan (STRING): dsp0.play.0
- unit (NUMBER): 1
- caps (NUMBER): 0x073200
- latency (NUMBER): 2
- rate (NUMBER): 48000
- format (NUMBER): 0x201000
- pid (NUMBER): 1234
- comm (STRING): mpv
- interrupts (NUMBER): 0
- feedcount (NUMBER): 0
- xruns (NUMBER): 0
- left_volume (NUMBER): 45
- right_volume (NUMBER): 45
- hwbuf_fmt (NUMBER): 0x200010
- hwbuf_rate (NUMBER): 48000
- hwbuf_size (NUMBER): 0
- hwbuf_blksz (NUMBER): 0
- hwbuf_blkcnt (NUMBER): 0
- hwbuf_free (NUMBER): 0
- hwbuf_ready (NUMBER): 0
- swbuf_fmt (NUMBER): 0x201000
- swbuf_rate (NUMBER): 48000
- swbuf_size (NUMBER): 16384
- swbuf_blksz (NUMBER): 2048
- swbuf_blkcnt (NUMBER): 8
- swbuf_free (NUMBER): 16384
- swbuf_ready (NUMBER): 0
- feederchain (STRING):
- [userland -&gt;
- feeder_root(0x00201000) -&gt;
- feeder_format(0x00201000 -&gt; 0x00200010) -&gt;
- feeder_volume(0x00200010) -&gt; hardware]
- provider (STRING): [sound(4)]</pre>
-</div>
-<dl class="Bl-tag">
- <dt id="from_user"><a class="permalink" href="#from_user"><code class="Dv">from_user</code></a></dt>
- <dd>Whether the PCM audio device node is created by in-kernel audio subsystem
- or userspace providers.</dd>
- <dt id="nameunit"><a class="permalink" href="#nameunit"><code class="Dv">nameunit</code></a></dt>
- <dd>The device identification in the form of subsystem plus a unit
- number.</dd>
- <dt id="devnode"><a class="permalink" href="#devnode"><code class="Dv">devnode</code></a></dt>
- <dd>The PCM audio device node relative path in devfs.</dd>
- <dt id="desc"><a class="permalink" href="#desc"><code class="Dv">desc</code></a></dt>
- <dd>The description of the PCM audio device.</dd>
- <dt id="pchan"><a class="permalink" href="#pchan"><code class="Dv">pchan</code></a></dt>
- <dd>The number of playback channels supported by hardware. This can be 0 if
- this PCM audio device does not support playback at all.</dd>
- <dt id="rchan"><a class="permalink" href="#rchan"><code class="Dv">rchan</code></a></dt>
- <dd>The number of recording channels supported by hardware. This can be 0 if
- this PCM audio device does not support recording at all.</dd>
- <dt id="info_play"><a class="permalink" href="#info_play"><code class="Dv">info_play</code></a></dt>
- <dd>Supported configurations in playback direction. This exists only if this
- PCM audio device supports playback. There are a number of name/value pairs
- inside this field:
- <dl class="Bl-tag">
- <dt id="min_rate"><a class="permalink" href="#min_rate"><code class="Dv">min_rate</code></a></dt>
- <dd>Minimum supported sampling rate.</dd>
- <dt id="max_rate"><a class="permalink" href="#max_rate"><code class="Dv">max_rate</code></a></dt>
- <dd>Maximum supported sampling rate.</dd>
- <dt id="formats"><a class="permalink" href="#formats"><code class="Dv">formats</code></a></dt>
- <dd>Supported sample formats.</dd>
- <dt id="min_chn"><a class="permalink" href="#min_chn"><code class="Dv">min_chn</code></a></dt>
- <dd>Minimum supported number of channels in channel layout</dd>
- <dt id="max_chn"><a class="permalink" href="#max_chn"><code class="Dv">max_chn</code></a></dt>
- <dd>Maximum supported number of channels in channel layout</dd>
- </dl>
- </dd>
- <dt id="info_rec"><a class="permalink" href="#info_rec"><code class="Dv">info_rec</code></a></dt>
- <dd>Supported configurations in recording direction. This exists only if this
- PCM audio device supports recording. There are a number of name/value
- pairs inside this field:
- <dl class="Bl-tag">
- <dt id="min_rate~2"><a class="permalink" href="#min_rate~2"><code class="Dv">min_rate</code></a></dt>
- <dd>Minimum supported sampling rate.</dd>
- <dt id="max_rate~2"><a class="permalink" href="#max_rate~2"><code class="Dv">max_rate</code></a></dt>
- <dd>Maximum supported sampling rate.</dd>
- <dt id="formats~2"><a class="permalink" href="#formats~2"><code class="Dv">formats</code></a></dt>
- <dd>Supported sample formats.</dd>
- <dt id="min_chn~2"><a class="permalink" href="#min_chn~2"><code class="Dv">min_chn</code></a></dt>
- <dd>Minimum supported number of channels in channel layout</dd>
- <dt id="max_chn~2"><a class="permalink" href="#max_chn~2"><code class="Dv">max_chn</code></a></dt>
- <dd>Maximum supported number of channels in channel layout</dd>
- </dl>
- </dd>
- <dt id="provider_info"><a class="permalink" href="#provider_info"><code class="Dv">provider_info</code></a></dt>
- <dd>Provider-specific fields. This field may not exist if the PCM audio device
- is not provided by in-kernel interface. This field will not exist if the
- provider field is an empty string. For the <a class="Xr">sound(4)</a>
- provider, there are a number of name/value pairs inside this field:
- <dl class="Bl-tag">
- <dt id="unit"><a class="permalink" href="#unit"><code class="Dv">unit</code></a></dt>
- <dd>Sound card unit.</dd>
- <dt id="status"><a class="permalink" href="#status"><code class="Dv">status</code></a></dt>
- <dd>Status string. Usually reports the driver the device is attached
- on.</dd>
- <dt id="bitperfect"><a class="permalink" href="#bitperfect"><code class="Dv">bitperfect</code></a></dt>
- <dd>Whether the sound card has bit-perfect mode enabled.</dd>
- <dt id="pvchan"><a class="permalink" href="#pvchan"><code class="Dv">pvchan</code></a></dt>
- <dd>Playback virtual channels enabled.</dd>
- <dt id="pvchanrate"><a class="permalink" href="#pvchanrate"><code class="Dv">pvchanrate</code></a></dt>
- <dd>Playback virtual channel sample rate.</dd>
- <dt id="pvchanformat"><a class="permalink" href="#pvchanformat"><code class="Dv">pvchanformat</code></a></dt>
- <dd>Playback virtual channel format.</dd>
- <dt id="rvchan"><a class="permalink" href="#rvchan"><code class="Dv">rvchan</code></a></dt>
- <dd>Recording virtual channels enabled.</dd>
- <dt id="rvchanrate"><a class="permalink" href="#rvchanrate"><code class="Dv">rvchanrate</code></a></dt>
- <dd>Recording virtual channel sample rate.</dd>
- <dt id="rvchanformat"><a class="permalink" href="#rvchanformat"><code class="Dv">rvchanformat</code></a></dt>
- <dd>Recording virtual channel format.</dd>
- <dt id="channel_info"><a class="permalink" href="#channel_info"><code class="Dv">channel_info</code></a></dt>
- <dd>Channel information. There are a number of name/value pairs inside
- this field:
- <dl class="Bl-tag">
- <dt id="name"><a class="permalink" href="#name"><code class="Dv">name</code></a></dt>
- <dd>Channel name.</dd>
- <dt id="parentchan"><a class="permalink" href="#parentchan"><code class="Dv">parentchan</code></a></dt>
- <dd>Parent channel name (e.g., in the case of virtual channels).</dd>
- <dt id="unit~2"><a class="permalink" href="#unit~2"><code class="Dv">unit</code></a></dt>
- <dd>Channel unit.</dd>
- <dt id="caps"><a class="permalink" href="#caps"><code class="Dv">caps</code></a></dt>
- <dd>OSS capabilities.</dd>
- <dt id="latency"><a class="permalink" href="#latency"><code class="Dv">latency</code></a></dt>
- <dd>Latency.</dd>
- <dt id="rate"><a class="permalink" href="#rate"><code class="Dv">rate</code></a></dt>
- <dd>Sampling rate.</dd>
- <dt id="format"><a class="permalink" href="#format"><code class="Dv">format</code></a></dt>
- <dd>Sampling format.</dd>
- <dt id="pid"><a class="permalink" href="#pid"><code class="Dv">pid</code></a></dt>
- <dd>PID of the process consuming the channel.</dd>
- <dt id="comm"><a class="permalink" href="#comm"><code class="Dv">comm</code></a></dt>
- <dd>Name of the process consuming the channel.</dd>
- <dt id="interrupts"><a class="permalink" href="#interrupts"><code class="Dv">interrupts</code></a></dt>
- <dd>Number of interrupts since the channel has been opened.</dd>
- <dt id="xruns"><a class="permalink" href="#xruns"><code class="Dv">xruns</code></a></dt>
- <dd>Number of overruns/underruns, depending on channel direction.</dd>
- <dt id="feedcount"><a class="permalink" href="#feedcount"><code class="Dv">feedcount</code></a></dt>
- <dd>Number of read/written bytes since the channel has been
- opened.</dd>
- <dt id="left_volume"><a class="permalink" href="#left_volume"><code class="Dv">left_volume</code></a></dt>
- <dd>Left volume.</dd>
- <dt id="right_volume"><a class="permalink" href="#right_volume"><code class="Dv">right_volume</code></a></dt>
- <dd>Right volume.</dd>
- <dt id="hwbuf_format"><a class="permalink" href="#hwbuf_format"><code class="Dv">hwbuf_format</code></a></dt>
- <dd>Hardware buffer format.</dd>
- <dt id="hwbuf_rate"><a class="permalink" href="#hwbuf_rate"><code class="Dv">hwbuf_rate</code></a></dt>
- <dd>Hardware buffer sample rate;</dd>
- <dt id="hwbuf_size"><a class="permalink" href="#hwbuf_size"><code class="Dv">hwbuf_size</code></a></dt>
- <dd>Hardware buffer size.</dd>
- <dt id="hwbuf_blksz"><a class="permalink" href="#hwbuf_blksz"><code class="Dv">hwbuf_blksz</code></a></dt>
- <dd>Hardware buffer block size.</dd>
- <dt id="hwbuf_blkcnt"><a class="permalink" href="#hwbuf_blkcnt"><code class="Dv">hwbuf_blkcnt</code></a></dt>
- <dd>Hardware buffer block count.</dd>
- <dt id="hwbuf_free"><a class="permalink" href="#hwbuf_free"><code class="Dv">hwbuf_free</code></a></dt>
- <dd>Free space in hardware buffer (in bytes).</dd>
- <dt id="hwbuf_ready"><a class="permalink" href="#hwbuf_ready"><code class="Dv">hwbuf_ready</code></a></dt>
- <dd>Number of bytes ready to be read/written from hardware
- buffer.</dd>
- <dt id="swbuf_format"><a class="permalink" href="#swbuf_format"><code class="Dv">swbuf_format</code></a></dt>
- <dd>Software buffer format.</dd>
- <dt id="swbuf_rate"><a class="permalink" href="#swbuf_rate"><code class="Dv">swbuf_rate</code></a></dt>
- <dd>Software buffer sample rate;</dd>
- <dt id="swbuf_size"><a class="permalink" href="#swbuf_size"><code class="Dv">swbuf_size</code></a></dt>
- <dd>Software buffer size.</dd>
- <dt id="swbuf_blksz"><a class="permalink" href="#swbuf_blksz"><code class="Dv">swbuf_blksz</code></a></dt>
- <dd>Software buffer block size.</dd>
- <dt id="swbuf_blkcnt"><a class="permalink" href="#swbuf_blkcnt"><code class="Dv">swbuf_blkcnt</code></a></dt>
- <dd>Software buffer block count.</dd>
- <dt id="swbuf_free"><a class="permalink" href="#swbuf_free"><code class="Dv">swbuf_free</code></a></dt>
- <dd>Free space in software buffer (in bytes).</dd>
- <dt id="swbuf_ready"><a class="permalink" href="#swbuf_ready"><code class="Dv">swbuf_ready</code></a></dt>
- <dd>Number of bytes ready to be read/written from software
- buffer.</dd>
- <dt id="feederchain"><a class="permalink" href="#feederchain"><code class="Dv">feederchain</code></a></dt>
- <dd>Channel feeder chain.</dd>
- </dl>
- </dd>
- </dl>
- </dd>
- <dt id="provider"><a class="permalink" href="#provider"><code class="Dv">provider</code></a></dt>
- <dd>A string specifying the provider of the PCm audio device.</dd>
-</dl>
-<p class="Pp">The following ioctls are provided for use:</p>
-<dl class="Bl-tag">
- <dt id="SNDSTIOC_REFRESH_DEVS"><a class="permalink" href="#SNDSTIOC_REFRESH_DEVS"><code class="Dv">SNDSTIOC_REFRESH_DEVS</code></a></dt>
- <dd>Drop any previously fetched PCM audio devices list snapshots. This ioctl
- takes no arguments.</dd>
- <dt id="SNDSTIOC_GET_DEVS"><a class="permalink" href="#SNDSTIOC_GET_DEVS"><code class="Dv">SNDSTIOC_GET_DEVS</code></a></dt>
- <dd>Generate and/or return PCM audio devices list snapshots to callers. This
- ioctl takes a pointer to <var class="Fa">struct sndstioc_nv_arg</var> as
- the first and the only argument. Callers need to provide a sufficiently
- large buffer to hold a serialized nvlist. If there is no existing PCM
- audio device list snapshot available in the internal structure of the
- opened sndstat. <var class="Fa">fd</var>, a new PCM audio device list
- snapshot will be automatically generated. Callers have to set
- <var class="Fa">nbytes</var> to either 0 or the size of buffer provided.
- In case <var class="Fa">nbytes</var> is 0, the buffer size required to
- hold a serialized nvlist stream of current snapshot will be returned in
- <var class="Fa">nbytes</var>, and <var class="Fa">buf</var> will be
- ignored. Otherwise, if the buffer is not sufficiently large, the ioctl
- returns success, and <var class="Fa">nbytes</var> will be set to 0. If the
- buffer provided is sufficiently large, <var class="Fa">nbytes</var> will
- be set to the size of the serialized nvlist written to the provided
- buffer. Once a PCM audio device list snapshot is returned to user-space
- successfully, the snapshot stored in the subsystem's internal structure of
- the given <var class="Fa">fd</var> will be freed.</dd>
- <dt id="SNDSTIOC_ADD_USER_DEVS"><a class="permalink" href="#SNDSTIOC_ADD_USER_DEVS"><code class="Dv">SNDSTIOC_ADD_USER_DEVS</code></a></dt>
- <dd>Add a list of PCM audio devices provided by callers to
- <span class="Pa">/dev/sndstat</span> device. This ioctl takes a pointer to
- <var class="Fa">struct sndstioc_nv_arg</var> as the first and the only
- argument. Callers have to provide a buffer holding a serialized nvlist.
- <var class="Fa">nbytes</var> should be set to the length in bytes of the
- serialized nvlist. <var class="Fa">buf</var> should be pointed to a buffer
- storing the serialized nvlist. Userspace-backed PCM audio device nodes
- should be listed inside the serialized nvlist.</dd>
- <dt id="SNDSTIOC_FLUSH_USER_DEVS"><a class="permalink" href="#SNDSTIOC_FLUSH_USER_DEVS"><code class="Dv">SNDSTIOC_FLUSH_USER_DEVS</code></a></dt>
- <dd>Flush any PCM audio devices previously added by callers. This ioctl takes
- no arguments.</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="FILES"><a class="permalink" href="#FILES">FILES</a></h1>
-<dl class="Bl-tag Bl-compact">
- <dt><span class="Pa">/dev/sndstat</span></dt>
- <dd style="width: auto;">&#x00A0;</dd>
-</dl>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="EXAMPLES"><a class="permalink" href="#EXAMPLES">EXAMPLES</a></h1>
-<p class="Pp">The following code enumerates all available PCM audio devices:</p>
-<div class="Bd Pp Bd-indent Li">
-<pre>#include &lt;sys/types.h&gt;
-#include &lt;err.h&gt;
-#include &lt;fcntl.h&gt;
-#include &lt;stdio.h&gt;
-#include &lt;stdlib.h&gt;
-#include &lt;sys/nv.h&gt;
-#include &lt;sys/sndstat.h&gt;
-#include &lt;sysexits.h&gt;
-#include &lt;unistd.h&gt;
-
-int
-main()
-{
- int fd;
- struct sndstioc_nv_arg arg;
- const nvlist_t * const *di;
- size_t i, nitems;
- nvlist_t *nvl;
-
- /* Open sndstat node in read-only first */
- fd = open(&quot;/dev/sndstat&quot;, O_RDONLY);
-
- if (ioctl(fd, SNDSTIOC_REFRESH_DEVS, NULL))
- err(1, &quot;ioctl(fd, SNDSTIOC_REFRESH_DEVS, NULL)&quot;);
-
- /* Get the size of snapshot, when nbytes = 0 */
- arg.nbytes = 0;
- arg.buf = NULL;
- if (ioctl(fd, SNDSTIOC_GET_DEVS, &amp;arg))
- err(1, &quot;ioctl(fd, SNDSTIOC_GET_DEVS, &amp;arg)&quot;);
-
- /* Get snapshot data */
- arg.buf = malloc(arg.nbytes);
- if (arg.buf == NULL)
- err(EX_OSERR, &quot;malloc&quot;);
- if (ioctl(fd, SNDSTIOC_GET_DEVS, &amp;arg))
- err(1, &quot;ioctl(fd, SNDSTIOC_GET_DEVS, &amp;arg)&quot;);
-
- /* Deserialize the nvlist stream */
- nvl = nvlist_unpack(arg.buf, arg.nbytes, 0);
- free(arg.buf);
-
- /* Get DSPs array */
- di = nvlist_get_nvlist_array(nvl, SNDST_DSPS, &amp;nitems);
- for (i = 0; i &lt; nitems; i++) {
- const char *nameunit, *devnode, *desc;
-
- /*
- * Examine each device nvlist item
- */
-
- nameunit = nvlist_get_string(di[i], SNDST_DSPS_NAMEUNIT);
- devnode = nvlist_get_string(di[i], SNDST_DSPS_DEVNODE);
- desc = nvlist_get_string(di[i], SNDST_DSPS_DESC);
- printf(&quot;Name unit: `%s`, Device node: `%s`, Description: `%s`0,
- nameunit, devnode, desc);
- }
-
- nvlist_destroy(nvl);
- return (0);
-}</pre>
-</div>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="SEE_ALSO"><a class="permalink" href="#SEE_ALSO">SEE
- ALSO</a></h1>
-<p class="Pp"><a class="Xr">sound(4)</a>, <a class="Xr">nv(9)</a></p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="HISTORY"><a class="permalink" href="#HISTORY">HISTORY</a></h1>
-<p class="Pp">The nvlist-based ioctls support for
- <code class="Nm">sndstat</code> device first appeared in
- <span class="Ux">FreeBSD 13.0</span>.</p>
-</section>
-<section class="Sh">
-<h1 class="Sh" id="AUTHORS"><a class="permalink" href="#AUTHORS">AUTHORS</a></h1>
-<p class="Pp">This manual page was written by <span class="An">Ka Ho Ng</span>
- &lt;<a class="Mt" href="mailto:khng@FreeBSD.org">khng@FreeBSD.org</a>&gt;.</p>
-</section>
-</div>
-<table class="foot">
- <tr>
- <td class="foot-date">July 26, 2024</td>
- <td class="foot-os">FreeBSD 15.0</td>
- </tr>
-</table>