Lines Matching defs:rb

655 ringbuf_allocate(struct ring_buf *rb, size_t blksize, int maxblk)
657 rb->rb_bufsize = blksize * maxblk;
658 rb->rb_blksize = blksize;
659 rb->rb_maxblks = maxblk;
661 rb->rb_buf = (u_int32_t)kmem_alloc(rb->rb_bufsize, KM_SLEEP);
663 rb->rb_buf = (u_int32_t)dmabuf_static;
665 if (rb->rb_buf == 0) {
669 memset((char*)rb->rb_buf, 0, rb->rb_bufsize);
671 rb->rb_bufcnt = kmem_alloc(rb->rb_maxblks * sizeof(size_t), KM_SLEEP);
673 rb->rb_bufcnt = dmabufcnt_static;
675 if (rb->rb_bufcnt == 0) {
679 memset((char*)rb->rb_bufcnt, 0, rb->rb_maxblks * sizeof(size_t));
681 ringbuf_reset(rb);
687 ringbuf_deallocate(struct ring_buf *rb)
690 kmem_free((void*)rb->rb_buf, rb->rb_bufsize);
691 kmem_free(rb->rb_bufcnt, rb->rb_maxblks * sizeof(size_t));
696 ringbuf_reset(struct ring_buf *rb)
698 rb->rb_outp = 0;
699 rb->rb_inp = 0;
703 ringbuf_full(struct ring_buf *rb)
707 ret = rb->rb_outp == rb->rb_maxblks;
713 ringbuf_producer_get(struct ring_buf *rb)
719 ret = ringbuf_full(rb) ? 0 :
720 rb->rb_buf + rb->rb_inp * rb->rb_blksize;
727 ringbuf_producer_return(struct ring_buf *rb, size_t cnt)
731 assert(cnt <= rb->rb_blksize);
734 rb->rb_outp++;
736 rb->rb_bufcnt[rb->rb_inp] = cnt;
737 rb->rb_inp = (rb->rb_inp + 1) % rb->rb_maxblks;
742 ringbuf_consumer_get(struct ring_buf *rb, size_t *cntp)
747 if (rb->rb_outp == 0)
750 idx = (rb->rb_inp - rb->rb_outp + rb->rb_maxblks) % rb->rb_maxblks;
752 p = rb->rb_buf + idx * rb->rb_blksize;
753 *cntp = rb->rb_bufcnt[idx];
759 ringbuf_consumer_return(struct ring_buf *rb)
762 if (rb->rb_outp > 0)
763 rb->rb_outp--;