Lines Matching refs:b
46 struct snd_dbuf *b; in sndbuf_create() local
48 b = malloc(sizeof(*b), M_DEVBUF, M_WAITOK | M_ZERO); in sndbuf_create()
49 snprintf(b->name, SNDBUF_NAMELEN, "%s:%s", drv, desc); in sndbuf_create()
50 b->dev = dev; in sndbuf_create()
51 b->channel = channel; in sndbuf_create()
53 return b; in sndbuf_create()
57 sndbuf_destroy(struct snd_dbuf *b) in sndbuf_destroy() argument
59 sndbuf_free(b); in sndbuf_destroy()
60 free(b, M_DEVBUF); in sndbuf_destroy()
72 struct snd_dbuf *b = (struct snd_dbuf *)arg; in sndbuf_setmap() local
75 device_printf(b->dev, "sndbuf_setmap %lx, %lx; ", in sndbuf_setmap()
77 printf("%p -> %lx\n", b->buf, (u_long)segs[0].ds_addr); in sndbuf_setmap()
80 b->buf_addr = segs[0].ds_addr; in sndbuf_setmap()
82 b->buf_addr = 0; in sndbuf_setmap()
91 sndbuf_alloc(struct snd_dbuf *b, bus_dma_tag_t dmatag, int dmaflags, in sndbuf_alloc() argument
96 b->dmatag = dmatag; in sndbuf_alloc()
97 b->dmaflags = dmaflags | BUS_DMA_NOWAIT | BUS_DMA_COHERENT; in sndbuf_alloc()
98 b->maxsize = size; in sndbuf_alloc()
99 b->bufsize = b->maxsize; in sndbuf_alloc()
100 b->buf_addr = 0; in sndbuf_alloc()
101 b->flags |= SNDBUF_F_MANAGED; in sndbuf_alloc()
102 if (bus_dmamem_alloc(b->dmatag, (void **)&b->buf, b->dmaflags, in sndbuf_alloc()
103 &b->dmamap)) { in sndbuf_alloc()
104 sndbuf_free(b); in sndbuf_alloc()
107 if (bus_dmamap_load(b->dmatag, b->dmamap, b->buf, b->maxsize, in sndbuf_alloc()
108 sndbuf_setmap, b, BUS_DMA_NOWAIT) != 0 || b->buf_addr == 0) { in sndbuf_alloc()
109 sndbuf_free(b); in sndbuf_alloc()
113 ret = sndbuf_resize(b, 2, b->maxsize / 2); in sndbuf_alloc()
115 sndbuf_free(b); in sndbuf_alloc()
121 sndbuf_setup(struct snd_dbuf *b, void *buf, unsigned int size) in sndbuf_setup() argument
123 b->flags &= ~SNDBUF_F_MANAGED; in sndbuf_setup()
125 b->flags |= SNDBUF_F_MANAGED; in sndbuf_setup()
126 b->buf = buf; in sndbuf_setup()
127 b->maxsize = size; in sndbuf_setup()
128 b->bufsize = b->maxsize; in sndbuf_setup()
129 return sndbuf_resize(b, 2, b->maxsize / 2); in sndbuf_setup()
133 sndbuf_free(struct snd_dbuf *b) in sndbuf_free() argument
135 if (b->tmpbuf) in sndbuf_free()
136 free(b->tmpbuf, M_DEVBUF); in sndbuf_free()
138 if (b->shadbuf) in sndbuf_free()
139 free(b->shadbuf, M_DEVBUF); in sndbuf_free()
141 if (b->buf) { in sndbuf_free()
142 if (b->flags & SNDBUF_F_MANAGED) { in sndbuf_free()
143 if (b->buf_addr) in sndbuf_free()
144 bus_dmamap_unload(b->dmatag, b->dmamap); in sndbuf_free()
145 if (b->dmatag) in sndbuf_free()
146 bus_dmamem_free(b->dmatag, b->buf, b->dmamap); in sndbuf_free()
148 free(b->buf, M_DEVBUF); in sndbuf_free()
150 seldrain(sndbuf_getsel(b)); in sndbuf_free()
152 b->tmpbuf = NULL; in sndbuf_free()
153 b->shadbuf = NULL; in sndbuf_free()
154 b->buf = NULL; in sndbuf_free()
155 b->sl = 0; in sndbuf_free()
156 b->dmatag = NULL; in sndbuf_free()
157 b->dmamap = NULL; in sndbuf_free()
163 sndbuf_resize(struct snd_dbuf *b, unsigned int blkcnt, unsigned int blksz) in sndbuf_resize() argument
168 CHN_LOCK(b->channel); in sndbuf_resize()
169 if (b->maxsize == 0) in sndbuf_resize()
172 blkcnt = b->blkcnt; in sndbuf_resize()
174 blksz = b->blksz; in sndbuf_resize()
175 if (blkcnt < 2 || blksz < 16 || (blkcnt * blksz) > b->maxsize) { in sndbuf_resize()
176 CHN_UNLOCK(b->channel); in sndbuf_resize()
179 if (blkcnt == b->blkcnt && blksz == b->blksz) in sndbuf_resize()
184 if (bufsize > b->allocsize || in sndbuf_resize()
185 bufsize < (b->allocsize >> SNDBUF_CACHE_SHIFT)) { in sndbuf_resize()
187 CHN_UNLOCK(b->channel); in sndbuf_resize()
189 CHN_LOCK(b->channel); in sndbuf_resize()
192 __func__, b, b->tmpbuf, tmpbuf, in sndbuf_resize()
193 b->allocsize, allocsize, bufsize); in sndbuf_resize()
194 if (b->tmpbuf != NULL) in sndbuf_resize()
195 free(b->tmpbuf, M_DEVBUF); in sndbuf_resize()
196 b->tmpbuf = tmpbuf; in sndbuf_resize()
197 b->allocsize = allocsize; in sndbuf_resize()
200 __func__, b, b->allocsize, b->bufsize); in sndbuf_resize()
202 b->blkcnt = blkcnt; in sndbuf_resize()
203 b->blksz = blksz; in sndbuf_resize()
204 b->bufsize = bufsize; in sndbuf_resize()
206 sndbuf_reset(b); in sndbuf_resize()
208 CHN_UNLOCK(b->channel); in sndbuf_resize()
213 sndbuf_remalloc(struct snd_dbuf *b, unsigned int blkcnt, unsigned int blksz) in sndbuf_remalloc() argument
223 if (bufsize > b->allocsize || in sndbuf_remalloc()
224 bufsize < (b->allocsize >> SNDBUF_CACHE_SHIFT)) { in sndbuf_remalloc()
226 CHN_UNLOCK(b->channel); in sndbuf_remalloc()
230 CHN_LOCK(b->channel); in sndbuf_remalloc()
231 if (b->buf != NULL) in sndbuf_remalloc()
232 free(b->buf, M_DEVBUF); in sndbuf_remalloc()
233 b->buf = buf; in sndbuf_remalloc()
234 if (b->tmpbuf != NULL) in sndbuf_remalloc()
235 free(b->tmpbuf, M_DEVBUF); in sndbuf_remalloc()
236 b->tmpbuf = tmpbuf; in sndbuf_remalloc()
237 if (b->shadbuf != NULL) in sndbuf_remalloc()
238 free(b->shadbuf, M_DEVBUF); in sndbuf_remalloc()
239 b->shadbuf = shadbuf; in sndbuf_remalloc()
242 __func__, b, b->allocsize, allocsize, bufsize); in sndbuf_remalloc()
243 b->allocsize = allocsize; in sndbuf_remalloc()
246 __func__, b, b->allocsize, b->bufsize); in sndbuf_remalloc()
248 b->blkcnt = blkcnt; in sndbuf_remalloc()
249 b->blksz = blksz; in sndbuf_remalloc()
250 b->bufsize = bufsize; in sndbuf_remalloc()
251 b->maxsize = bufsize; in sndbuf_remalloc()
252 b->sl = bufsize; in sndbuf_remalloc()
254 sndbuf_reset(b); in sndbuf_remalloc()
269 sndbuf_clear(struct snd_dbuf *b, unsigned int length) in sndbuf_clear() argument
276 if (length > b->bufsize) in sndbuf_clear()
277 length = b->bufsize; in sndbuf_clear()
279 data = sndbuf_zerodata(b->fmt); in sndbuf_clear()
281 i = sndbuf_getfreeptr(b); in sndbuf_clear()
282 p = sndbuf_getbuf(b); in sndbuf_clear()
287 if (i >= b->bufsize) in sndbuf_clear()
298 sndbuf_fillsilence(struct snd_dbuf *b) in sndbuf_fillsilence() argument
300 if (b->bufsize > 0) in sndbuf_fillsilence()
301 memset(sndbuf_getbuf(b), sndbuf_zerodata(b->fmt), b->bufsize); in sndbuf_fillsilence()
302 b->rp = 0; in sndbuf_fillsilence()
303 b->rl = b->bufsize; in sndbuf_fillsilence()
307 sndbuf_fillsilence_rl(struct snd_dbuf *b, u_int rl) in sndbuf_fillsilence_rl() argument
309 if (b->bufsize > 0) in sndbuf_fillsilence_rl()
310 memset(sndbuf_getbuf(b), sndbuf_zerodata(b->fmt), b->bufsize); in sndbuf_fillsilence_rl()
311 b->rp = 0; in sndbuf_fillsilence_rl()
312 b->rl = min(b->bufsize, rl); in sndbuf_fillsilence_rl()
325 sndbuf_softreset(struct snd_dbuf *b) in sndbuf_softreset() argument
327 b->rl = 0; in sndbuf_softreset()
328 if (b->buf && b->bufsize > 0) in sndbuf_softreset()
329 sndbuf_clear(b, b->bufsize); in sndbuf_softreset()
333 sndbuf_reset(struct snd_dbuf *b) in sndbuf_reset() argument
335 b->hp = 0; in sndbuf_reset()
336 b->rp = 0; in sndbuf_reset()
337 b->rl = 0; in sndbuf_reset()
338 b->dl = 0; in sndbuf_reset()
339 b->prev_total = 0; in sndbuf_reset()
340 b->total = 0; in sndbuf_reset()
341 b->xrun = 0; in sndbuf_reset()
342 if (b->buf && b->bufsize > 0) in sndbuf_reset()
343 sndbuf_clear(b, b->bufsize); in sndbuf_reset()
344 sndbuf_clearshadow(b); in sndbuf_reset()
348 sndbuf_getfmt(struct snd_dbuf *b) in sndbuf_getfmt() argument
350 return b->fmt; in sndbuf_getfmt()
354 sndbuf_setfmt(struct snd_dbuf *b, u_int32_t fmt) in sndbuf_setfmt() argument
356 b->fmt = fmt; in sndbuf_setfmt()
357 b->bps = AFMT_BPS(b->fmt); in sndbuf_setfmt()
358 b->align = AFMT_ALIGN(b->fmt); in sndbuf_setfmt()
360 b->bps = AFMT_CHANNEL(b->fmt); in sndbuf_setfmt()
361 if (b->fmt & AFMT_16BIT) in sndbuf_setfmt()
362 b->bps <<= 1; in sndbuf_setfmt()
363 else if (b->fmt & AFMT_24BIT) in sndbuf_setfmt()
364 b->bps *= 3; in sndbuf_setfmt()
365 else if (b->fmt & AFMT_32BIT) in sndbuf_setfmt()
366 b->bps <<= 2; in sndbuf_setfmt()
372 sndbuf_getspd(struct snd_dbuf *b) in sndbuf_getspd() argument
374 return b->spd; in sndbuf_getspd()
378 sndbuf_setspd(struct snd_dbuf *b, unsigned int spd) in sndbuf_setspd() argument
380 b->spd = spd; in sndbuf_setspd()
384 sndbuf_getalign(struct snd_dbuf *b) in sndbuf_getalign() argument
386 return (b->align); in sndbuf_getalign()
390 sndbuf_getblkcnt(struct snd_dbuf *b) in sndbuf_getblkcnt() argument
392 return b->blkcnt; in sndbuf_getblkcnt()
396 sndbuf_setblkcnt(struct snd_dbuf *b, unsigned int blkcnt) in sndbuf_setblkcnt() argument
398 b->blkcnt = blkcnt; in sndbuf_setblkcnt()
402 sndbuf_getblksz(struct snd_dbuf *b) in sndbuf_getblksz() argument
404 return b->blksz; in sndbuf_getblksz()
408 sndbuf_setblksz(struct snd_dbuf *b, unsigned int blksz) in sndbuf_setblksz() argument
410 b->blksz = blksz; in sndbuf_setblksz()
414 sndbuf_getbps(struct snd_dbuf *b) in sndbuf_getbps() argument
416 return b->bps; in sndbuf_getbps()
420 sndbuf_getbuf(struct snd_dbuf *b) in sndbuf_getbuf() argument
422 return b->buf; in sndbuf_getbuf()
426 sndbuf_getbufofs(struct snd_dbuf *b, unsigned int ofs) in sndbuf_getbufofs() argument
428 KASSERT(ofs < b->bufsize, ("%s: ofs invalid %d", __func__, ofs)); in sndbuf_getbufofs()
430 return b->buf + ofs; in sndbuf_getbufofs()
434 sndbuf_getsize(struct snd_dbuf *b) in sndbuf_getsize() argument
436 return b->bufsize; in sndbuf_getsize()
440 sndbuf_getmaxsize(struct snd_dbuf *b) in sndbuf_getmaxsize() argument
442 return b->maxsize; in sndbuf_getmaxsize()
446 sndbuf_getallocsize(struct snd_dbuf *b) in sndbuf_getallocsize() argument
448 return b->allocsize; in sndbuf_getallocsize()
452 sndbuf_runsz(struct snd_dbuf *b) in sndbuf_runsz() argument
454 return b->dl; in sndbuf_runsz()
458 sndbuf_setrun(struct snd_dbuf *b, int go) in sndbuf_setrun() argument
460 b->dl = go? b->blksz : 0; in sndbuf_setrun()
464 sndbuf_getsel(struct snd_dbuf *b) in sndbuf_getsel() argument
466 return &b->sel; in sndbuf_getsel()
471 sndbuf_getxrun(struct snd_dbuf *b) in sndbuf_getxrun() argument
473 SNDBUF_LOCKASSERT(b); in sndbuf_getxrun()
475 return b->xrun; in sndbuf_getxrun()
479 sndbuf_setxrun(struct snd_dbuf *b, unsigned int xrun) in sndbuf_setxrun() argument
481 SNDBUF_LOCKASSERT(b); in sndbuf_setxrun()
483 b->xrun = xrun; in sndbuf_setxrun()
487 sndbuf_gethwptr(struct snd_dbuf *b) in sndbuf_gethwptr() argument
489 SNDBUF_LOCKASSERT(b); in sndbuf_gethwptr()
491 return b->hp; in sndbuf_gethwptr()
495 sndbuf_sethwptr(struct snd_dbuf *b, unsigned int ptr) in sndbuf_sethwptr() argument
497 SNDBUF_LOCKASSERT(b); in sndbuf_sethwptr()
499 b->hp = ptr; in sndbuf_sethwptr()
503 sndbuf_getready(struct snd_dbuf *b) in sndbuf_getready() argument
505 SNDBUF_LOCKASSERT(b); in sndbuf_getready()
506 KASSERT((b->rl >= 0) && (b->rl <= b->bufsize), ("%s: b->rl invalid %d", __func__, b->rl)); in sndbuf_getready()
508 return b->rl; in sndbuf_getready()
512 sndbuf_getreadyptr(struct snd_dbuf *b) in sndbuf_getreadyptr() argument
514 SNDBUF_LOCKASSERT(b); in sndbuf_getreadyptr()
515 KASSERT((b->rp >= 0) && (b->rp <= b->bufsize), ("%s: b->rp invalid %d", __func__, b->rp)); in sndbuf_getreadyptr()
517 return b->rp; in sndbuf_getreadyptr()
521 sndbuf_getfree(struct snd_dbuf *b) in sndbuf_getfree() argument
523 SNDBUF_LOCKASSERT(b); in sndbuf_getfree()
524 KASSERT((b->rl >= 0) && (b->rl <= b->bufsize), ("%s: b->rl invalid %d", __func__, b->rl)); in sndbuf_getfree()
526 return b->bufsize - b->rl; in sndbuf_getfree()
530 sndbuf_getfreeptr(struct snd_dbuf *b) in sndbuf_getfreeptr() argument
532 SNDBUF_LOCKASSERT(b); in sndbuf_getfreeptr()
533 KASSERT((b->rp >= 0) && (b->rp <= b->bufsize), ("%s: b->rp invalid %d", __func__, b->rp)); in sndbuf_getfreeptr()
534 KASSERT((b->rl >= 0) && (b->rl <= b->bufsize), ("%s: b->rl invalid %d", __func__, b->rl)); in sndbuf_getfreeptr()
536 return (b->rp + b->rl) % b->bufsize; in sndbuf_getfreeptr()
540 sndbuf_getblocks(struct snd_dbuf *b) in sndbuf_getblocks() argument
542 SNDBUF_LOCKASSERT(b); in sndbuf_getblocks()
544 return b->total / b->blksz; in sndbuf_getblocks()
548 sndbuf_getprevblocks(struct snd_dbuf *b) in sndbuf_getprevblocks() argument
550 SNDBUF_LOCKASSERT(b); in sndbuf_getprevblocks()
552 return b->prev_total / b->blksz; in sndbuf_getprevblocks()
556 sndbuf_gettotal(struct snd_dbuf *b) in sndbuf_gettotal() argument
558 SNDBUF_LOCKASSERT(b); in sndbuf_gettotal()
560 return b->total; in sndbuf_gettotal()
564 sndbuf_getprevtotal(struct snd_dbuf *b) in sndbuf_getprevtotal() argument
566 SNDBUF_LOCKASSERT(b); in sndbuf_getprevtotal()
568 return b->prev_total; in sndbuf_getprevtotal()
572 sndbuf_updateprevtotal(struct snd_dbuf *b) in sndbuf_updateprevtotal() argument
574 SNDBUF_LOCKASSERT(b); in sndbuf_updateprevtotal()
576 b->prev_total = b->total; in sndbuf_updateprevtotal()
617 sndbuf_acquire(struct snd_dbuf *b, u_int8_t *from, unsigned int count) in sndbuf_acquire() argument
621 …KASSERT(count <= sndbuf_getfree(b), ("%s: count %d > free %d", __func__, count, sndbuf_getfree(b))… in sndbuf_acquire()
622 KASSERT((b->rl >= 0) && (b->rl <= b->bufsize), ("%s: b->rl invalid %d", __func__, b->rl)); in sndbuf_acquire()
623 b->total += count; in sndbuf_acquire()
626 l = min(count, sndbuf_getsize(b) - sndbuf_getfreeptr(b)); in sndbuf_acquire()
627 bcopy(from, sndbuf_getbufofs(b, sndbuf_getfreeptr(b)), l); in sndbuf_acquire()
629 b->rl += l; in sndbuf_acquire()
633 b->rl += count; in sndbuf_acquire()
634 …KASSERT((b->rl >= 0) && (b->rl <= b->bufsize), ("%s: b->rl invalid %d, count %d", __func__, b->rl,… in sndbuf_acquire()
654 sndbuf_dispose(struct snd_dbuf *b, u_int8_t *to, unsigned int count) in sndbuf_dispose() argument
658 …KASSERT(count <= sndbuf_getready(b), ("%s: count %d > ready %d", __func__, count, sndbuf_getready(… in sndbuf_dispose()
659 KASSERT((b->rl >= 0) && (b->rl <= b->bufsize), ("%s: b->rl invalid %d", __func__, b->rl)); in sndbuf_dispose()
662 l = min(count, sndbuf_getsize(b) - sndbuf_getreadyptr(b)); in sndbuf_dispose()
663 bcopy(sndbuf_getbufofs(b, sndbuf_getreadyptr(b)), to, l); in sndbuf_dispose()
665 b->rl -= l; in sndbuf_dispose()
666 b->rp = (b->rp + l) % b->bufsize; in sndbuf_dispose()
670 b->rl -= count; in sndbuf_dispose()
671 b->rp = (b->rp + count) % b->bufsize; in sndbuf_dispose()
673 …KASSERT((b->rl >= 0) && (b->rl <= b->bufsize), ("%s: b->rl invalid %d, count %d", __func__, b->rl,… in sndbuf_dispose()
732 sndbuf_dump(struct snd_dbuf *b, char *s, u_int32_t what) in sndbuf_dump() argument
736 printf(" bufsize: %d, maxsize: %d", b->bufsize, b->maxsize); in sndbuf_dump()
738 printf(" dl: %d, rp: %d, rl: %d, hp: %d", b->dl, b->rp, b->rl, b->hp); in sndbuf_dump()
740 …printf(" total: %ju, prev_total: %ju, xrun: %d", (uintmax_t)b->total, (uintmax_t)b->prev_total, b-… in sndbuf_dump()
742 printf(" fmt: 0x%x, spd: %d", b->fmt, b->spd); in sndbuf_dump()
744 printf(" blksz: %d, blkcnt: %d, flags: 0x%x", b->blksz, b->blkcnt, b->flags); in sndbuf_dump()
750 sndbuf_getflags(struct snd_dbuf *b) in sndbuf_getflags() argument
752 return b->flags; in sndbuf_getflags()
756 sndbuf_setflags(struct snd_dbuf *b, u_int32_t flags, int on) in sndbuf_setflags() argument
758 b->flags &= ~flags; in sndbuf_setflags()
760 b->flags |= flags; in sndbuf_setflags()
769 sndbuf_clearshadow(struct snd_dbuf *b) in sndbuf_clearshadow() argument
771 KASSERT(b != NULL, ("b is a null pointer")); in sndbuf_clearshadow()
772 KASSERT(b->sl >= 0, ("illegal shadow length")); in sndbuf_clearshadow()
774 if ((b->shadbuf != NULL) && (b->sl > 0)) in sndbuf_clearshadow()
775 memset(b->shadbuf, sndbuf_zerodata(b->fmt), b->sl); in sndbuf_clearshadow()
793 sndbuf_getpeaks(struct snd_dbuf *b, int *lp, int *rp) in sndbuf_getpeaks() argument