Lines Matching refs:msgbuf
35 struct msgbuf { struct
47 static void msgbuf_read_enqueue(struct msgbuf *, struct ibuf *); argument
48 static void msgbuf_enqueue(struct msgbuf *, struct ibuf *);
49 static void msgbuf_dequeue(struct msgbuf *, struct ibuf *);
50 static void msgbuf_drain(struct msgbuf *, size_t);
387 ibuf_close(struct msgbuf *msgbuf, struct ibuf *buf) in ibuf_close() argument
389 msgbuf_enqueue(msgbuf, buf); in ibuf_close()
562 struct msgbuf *
565 struct msgbuf *msgbuf; in msgbuf_new() local
567 if ((msgbuf = calloc(1, sizeof(*msgbuf))) == NULL) in msgbuf_new()
569 msgbuf->queued = 0; in msgbuf_new()
570 TAILQ_INIT(&msgbuf->bufs); in msgbuf_new()
571 TAILQ_INIT(&msgbuf->rbufs); in msgbuf_new()
573 return msgbuf; in msgbuf_new()
576 struct msgbuf *
580 struct msgbuf *msgbuf; in msgbuf_new_reader() local
591 msgbuf = msgbuf_new(); in msgbuf_new_reader()
592 if (msgbuf == NULL) { in msgbuf_new_reader()
597 msgbuf->rbuf = buf; in msgbuf_new_reader()
598 msgbuf->hdrsize = hdrsz; in msgbuf_new_reader()
599 msgbuf->readhdr = readhdr; in msgbuf_new_reader()
600 msgbuf->rarg = arg; in msgbuf_new_reader()
602 return (msgbuf); in msgbuf_new_reader()
606 msgbuf_free(struct msgbuf *msgbuf) in msgbuf_free() argument
608 if (msgbuf == NULL) in msgbuf_free()
610 msgbuf_clear(msgbuf); in msgbuf_free()
611 free(msgbuf->rbuf); in msgbuf_free()
612 free(msgbuf); in msgbuf_free()
616 msgbuf_queuelen(struct msgbuf *msgbuf) in msgbuf_queuelen() argument
618 return (msgbuf->queued); in msgbuf_queuelen()
622 msgbuf_clear(struct msgbuf *msgbuf) in msgbuf_clear() argument
627 while ((buf = TAILQ_FIRST(&msgbuf->bufs)) != NULL) in msgbuf_clear()
628 msgbuf_dequeue(msgbuf, buf); in msgbuf_clear()
629 msgbuf->queued = 0; in msgbuf_clear()
632 while ((buf = TAILQ_FIRST(&msgbuf->rbufs)) != NULL) { in msgbuf_clear()
633 TAILQ_REMOVE(&msgbuf->rbufs, buf, entry); in msgbuf_clear()
636 msgbuf->roff = 0; in msgbuf_clear()
637 ibuf_free(msgbuf->rpmsg); in msgbuf_clear()
638 msgbuf->rpmsg = NULL; in msgbuf_clear()
642 msgbuf_get(struct msgbuf *msgbuf) in msgbuf_get() argument
646 if ((buf = TAILQ_FIRST(&msgbuf->rbufs)) != NULL) in msgbuf_get()
647 TAILQ_REMOVE(&msgbuf->rbufs, buf, entry); in msgbuf_get()
652 ibuf_write(int fd, struct msgbuf *msgbuf) in ibuf_write() argument
660 TAILQ_FOREACH(buf, &msgbuf->bufs, entry) { in ibuf_write()
680 msgbuf_drain(msgbuf, n); in ibuf_write()
685 msgbuf_write(int fd, struct msgbuf *msgbuf) in msgbuf_write() argument
701 TAILQ_FOREACH(buf, &msgbuf->bufs, entry) { in msgbuf_write()
748 msgbuf_drain(msgbuf, n); in msgbuf_write()
754 ibuf_read_process(struct msgbuf *msgbuf, int fd) in ibuf_read_process() argument
759 ibuf_from_buffer(&rbuf, msgbuf->rbuf, msgbuf->roff); in ibuf_read_process()
762 if (msgbuf->rpmsg == NULL) { in ibuf_read_process()
763 if (ibuf_size(&rbuf) < msgbuf->hdrsize) in ibuf_read_process()
767 msgbuf->hdrsize); in ibuf_read_process()
768 if ((msgbuf->rpmsg = msgbuf->readhdr(&msg, in ibuf_read_process()
769 msgbuf->rarg, &fd)) == NULL) in ibuf_read_process()
773 if (ibuf_left(msgbuf->rpmsg) <= ibuf_size(&rbuf)) in ibuf_read_process()
774 sz = ibuf_left(msgbuf->rpmsg); in ibuf_read_process()
780 ibuf_add_ibuf(msgbuf->rpmsg, &msg) == -1) in ibuf_read_process()
783 if (ibuf_left(msgbuf->rpmsg) == 0) { in ibuf_read_process()
784 msgbuf_read_enqueue(msgbuf, msgbuf->rpmsg); in ibuf_read_process()
785 msgbuf->rpmsg = NULL; in ibuf_read_process()
790 memmove(msgbuf->rbuf, ibuf_data(&rbuf), ibuf_size(&rbuf)); in ibuf_read_process()
791 msgbuf->roff = ibuf_size(&rbuf); in ibuf_read_process()
805 ibuf_read(int fd, struct msgbuf *msgbuf) in ibuf_read() argument
810 if (msgbuf->rbuf == NULL) { in ibuf_read()
815 iov.iov_base = msgbuf->rbuf + msgbuf->roff; in ibuf_read()
816 iov.iov_len = IBUF_READ_SIZE - msgbuf->roff; in ibuf_read()
830 msgbuf->roff += n; in ibuf_read()
832 return (ibuf_read_process(msgbuf, -1)); in ibuf_read()
836 msgbuf_read(int fd, struct msgbuf *msgbuf) in msgbuf_read() argument
848 if (msgbuf->rbuf == NULL) { in msgbuf_read()
856 iov.iov_base = msgbuf->rbuf + msgbuf->roff; in msgbuf_read()
857 iov.iov_len = IBUF_READ_SIZE - msgbuf->roff; in msgbuf_read()
882 msgbuf->roff += n; in msgbuf_read()
909 return (ibuf_read_process(msgbuf, fdpass)); in msgbuf_read()
913 msgbuf_read_enqueue(struct msgbuf *msgbuf, struct ibuf *buf) in msgbuf_read_enqueue() argument
918 TAILQ_INSERT_TAIL(&msgbuf->rbufs, buf, entry); in msgbuf_read_enqueue()
922 msgbuf_enqueue(struct msgbuf *msgbuf, struct ibuf *buf) in msgbuf_enqueue() argument
927 TAILQ_INSERT_TAIL(&msgbuf->bufs, buf, entry); in msgbuf_enqueue()
928 msgbuf->queued++; in msgbuf_enqueue()
932 msgbuf_dequeue(struct msgbuf *msgbuf, struct ibuf *buf) in msgbuf_dequeue() argument
934 TAILQ_REMOVE(&msgbuf->bufs, buf, entry); in msgbuf_dequeue()
935 msgbuf->queued--; in msgbuf_dequeue()
940 msgbuf_drain(struct msgbuf *msgbuf, size_t n) in msgbuf_drain() argument
944 for (buf = TAILQ_FIRST(&msgbuf->bufs); buf != NULL && n > 0; in msgbuf_drain()
949 msgbuf_dequeue(msgbuf, buf); in msgbuf_drain()