summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound/pcm/sound.c
diff options
context:
space:
mode:
authorcg <cg@FreeBSD.org>2001-08-29 02:49:54 +0000
committercg <cg@FreeBSD.org>2001-08-29 02:49:54 +0000
commitbf28cfba58b1a7895383d4ec68d72573fb5cd2a6 (patch)
tree407b331880ea4820591f73bd9fe09c4c0ea093fe /sys/dev/sound/pcm/sound.c
parentbe67da33283716a7b1e17c3e7adfee3da9ea77d4 (diff)
downloadFreeBSD-src-bf28cfba58b1a7895383d4ec68d72573fb5cd2a6.zip
FreeBSD-src-bf28cfba58b1a7895383d4ec68d72573fb5cd2a6.tar.gz
add some extra diagnostic info to sndstat output.
Diffstat (limited to 'sys/dev/sound/pcm/sound.c')
-rw-r--r--sys/dev/sound/pcm/sound.c28
1 files changed, 21 insertions, 7 deletions
diff --git a/sys/dev/sound/pcm/sound.c b/sys/dev/sound/pcm/sound.c
index 08da0a4..4ea2b58 100644
--- a/sys/dev/sound/pcm/sound.c
+++ b/sys/dev/sound/pcm/sound.c
@@ -633,6 +633,7 @@ sndstat_prepare_pcm(struct sbuf *s, device_t dev, int verbose)
struct snddev_channel *sce;
struct pcm_channel *c;
struct pcm_feeder *f;
+ char *fsep;
int pc, rc, vc;
if (verbose < 1)
@@ -667,25 +668,38 @@ sndstat_prepare_pcm(struct sbuf *s, device_t dev, int verbose)
goto skipverbose;
SLIST_FOREACH(sce, &d->channels, link) {
c = sce->channel;
- sbuf_printf(s, "\n\t%s[%s]: speed %d, format %08x, flags %08x",
- c->parentchannel? c->parentchannel->name : "",
- c->name, c->speed, c->format, c->flags);
+ sbuf_printf(s, "\n\t");
+
+ sbuf_printf(s, "%s[%s]: ", c->parentchannel? c->parentchannel->name : "", c->name);
+ sbuf_printf(s, "speed %d, format %08x, flags %08x", c->speed, c->format, c->flags);
if (c->pid != -1)
sbuf_printf(s, ", pid %d", c->pid);
sbuf_printf(s, "\n\t");
+ if (c->pid != -1 && c->bufhard != NULL && c->bufsoft != NULL) {
+ sbuf_printf(s, "interrupts %d, ", c->interrupts);
+ if (c->direction == PCMDIR_REC)
+ sbuf_printf(s, "overruns %d, hfree %d, sfree %d",
+ c->xruns, sndbuf_getfree(c->bufhard), sndbuf_getfree(c->bufsoft));
+ else
+ sbuf_printf(s, "underruns %d, hready %d, sready %d",
+ c->xruns, sndbuf_getready(c->bufhard), sndbuf_getready(c->bufsoft));
+ sbuf_printf(s, "\n\t");
+ }
+ fsep = (c->direction == PCMDIR_REC)? " -> " : " <- ";
+ sbuf_printf(s, "[hardware]%s", fsep);
f = c->feeder;
while (f) {
sbuf_printf(s, "%s", f->class->name);
if (f->desc->type == FEEDER_FMT)
- sbuf_printf(s, "(%08x <- %08x)", f->desc->out, f->desc->in);
+ sbuf_printf(s, "(%08x%s%08x)", f->desc->out, fsep, f->desc->in);
if (f->desc->type == FEEDER_RATE)
- sbuf_printf(s, "(%d <- %d)", FEEDER_GET(f, FEEDRATE_DST), FEEDER_GET(f, FEEDRATE_SRC));
+ sbuf_printf(s, "(%d%s%d)", FEEDER_GET(f, FEEDRATE_DST), fsep, FEEDER_GET(f, FEEDRATE_SRC));
if (f->desc->type == FEEDER_ROOT || f->desc->type == FEEDER_MIXER)
sbuf_printf(s, "(%08x)", f->desc->out);
- if (f->source)
- sbuf_printf(s, " <- ");
+ sbuf_printf(s, "%s", fsep);
f = f->source;
}
+ sbuf_printf(s, "[userland]");
}
skipverbose:
} else
OpenPOWER on IntegriCloud