Lines Matching refs:rbuf

42 void dvb_ringbuffer_init(struct dvb_ringbuffer *rbuf, void *data, size_t len)  in dvb_ringbuffer_init()  argument
44 rbuf->pread=rbuf->pwrite=0; in dvb_ringbuffer_init()
45 rbuf->data=data; in dvb_ringbuffer_init()
46 rbuf->size=len; in dvb_ringbuffer_init()
47 rbuf->error=0; in dvb_ringbuffer_init()
49 init_waitqueue_head(&rbuf->queue); in dvb_ringbuffer_init()
51 spin_lock_init(&(rbuf->lock)); in dvb_ringbuffer_init()
56 int dvb_ringbuffer_empty(struct dvb_ringbuffer *rbuf) in dvb_ringbuffer_empty() argument
58 return (rbuf->pread==rbuf->pwrite); in dvb_ringbuffer_empty()
63 ssize_t dvb_ringbuffer_free(struct dvb_ringbuffer *rbuf) in dvb_ringbuffer_free() argument
67 free = rbuf->pread - rbuf->pwrite; in dvb_ringbuffer_free()
69 free += rbuf->size; in dvb_ringbuffer_free()
75 ssize_t dvb_ringbuffer_avail(struct dvb_ringbuffer *rbuf) in dvb_ringbuffer_avail() argument
79 avail = rbuf->pwrite - rbuf->pread; in dvb_ringbuffer_avail()
81 avail += rbuf->size; in dvb_ringbuffer_avail()
87 void dvb_ringbuffer_flush(struct dvb_ringbuffer *rbuf) in dvb_ringbuffer_flush() argument
89 rbuf->pread = rbuf->pwrite; in dvb_ringbuffer_flush()
90 rbuf->error = 0; in dvb_ringbuffer_flush()
94 void dvb_ringbuffer_reset(struct dvb_ringbuffer *rbuf) in dvb_ringbuffer_reset() argument
96 rbuf->pread = rbuf->pwrite = 0; in dvb_ringbuffer_reset()
97 rbuf->error = 0; in dvb_ringbuffer_reset()
100 void dvb_ringbuffer_flush_spinlock_wakeup(struct dvb_ringbuffer *rbuf) in dvb_ringbuffer_flush_spinlock_wakeup() argument
104 spin_lock_irqsave(&rbuf->lock, flags); in dvb_ringbuffer_flush_spinlock_wakeup()
105 dvb_ringbuffer_flush(rbuf); in dvb_ringbuffer_flush_spinlock_wakeup()
106 spin_unlock_irqrestore(&rbuf->lock, flags); in dvb_ringbuffer_flush_spinlock_wakeup()
108 wake_up(&rbuf->queue); in dvb_ringbuffer_flush_spinlock_wakeup()
111 ssize_t dvb_ringbuffer_read_user(struct dvb_ringbuffer *rbuf, u8 __user *buf, size_t len) in dvb_ringbuffer_read_user() argument
116 split = (rbuf->pread + len > rbuf->size) ? rbuf->size - rbuf->pread : 0; in dvb_ringbuffer_read_user()
118 if (copy_to_user(buf, rbuf->data+rbuf->pread, split)) in dvb_ringbuffer_read_user()
122 rbuf->pread = 0; in dvb_ringbuffer_read_user()
124 if (copy_to_user(buf, rbuf->data+rbuf->pread, todo)) in dvb_ringbuffer_read_user()
127 rbuf->pread = (rbuf->pread + todo) % rbuf->size; in dvb_ringbuffer_read_user()
132 void dvb_ringbuffer_read(struct dvb_ringbuffer *rbuf, u8 *buf, size_t len) in dvb_ringbuffer_read() argument
137 split = (rbuf->pread + len > rbuf->size) ? rbuf->size - rbuf->pread : 0; in dvb_ringbuffer_read()
139 memcpy(buf, rbuf->data+rbuf->pread, split); in dvb_ringbuffer_read()
142 rbuf->pread = 0; in dvb_ringbuffer_read()
144 memcpy(buf, rbuf->data+rbuf->pread, todo); in dvb_ringbuffer_read()
146 rbuf->pread = (rbuf->pread + todo) % rbuf->size; in dvb_ringbuffer_read()
150 ssize_t dvb_ringbuffer_write(struct dvb_ringbuffer *rbuf, const u8 *buf, size_t len) in dvb_ringbuffer_write() argument
155 split = (rbuf->pwrite + len > rbuf->size) ? rbuf->size - rbuf->pwrite : 0; in dvb_ringbuffer_write()
158 memcpy(rbuf->data+rbuf->pwrite, buf, split); in dvb_ringbuffer_write()
161 rbuf->pwrite = 0; in dvb_ringbuffer_write()
163 memcpy(rbuf->data+rbuf->pwrite, buf, todo); in dvb_ringbuffer_write()
164 rbuf->pwrite = (rbuf->pwrite + todo) % rbuf->size; in dvb_ringbuffer_write()
169 ssize_t dvb_ringbuffer_write_user(struct dvb_ringbuffer *rbuf, in dvb_ringbuffer_write_user() argument
176 split = (rbuf->pwrite + len > rbuf->size) ? rbuf->size - rbuf->pwrite : 0; in dvb_ringbuffer_write_user()
179 status = copy_from_user(rbuf->data+rbuf->pwrite, buf, split); in dvb_ringbuffer_write_user()
184 rbuf->pwrite = 0; in dvb_ringbuffer_write_user()
186 status = copy_from_user(rbuf->data+rbuf->pwrite, buf, todo); in dvb_ringbuffer_write_user()
189 rbuf->pwrite = (rbuf->pwrite + todo) % rbuf->size; in dvb_ringbuffer_write_user()
194 ssize_t dvb_ringbuffer_pkt_write(struct dvb_ringbuffer *rbuf, u8* buf, size_t len) in dvb_ringbuffer_pkt_write() argument
197 ssize_t oldpwrite = rbuf->pwrite; in dvb_ringbuffer_pkt_write()
199 DVB_RINGBUFFER_WRITE_BYTE(rbuf, len >> 8); in dvb_ringbuffer_pkt_write()
200 DVB_RINGBUFFER_WRITE_BYTE(rbuf, len & 0xff); in dvb_ringbuffer_pkt_write()
201 DVB_RINGBUFFER_WRITE_BYTE(rbuf, PKT_READY); in dvb_ringbuffer_pkt_write()
202 status = dvb_ringbuffer_write(rbuf, buf, len); in dvb_ringbuffer_pkt_write()
204 if (status < 0) rbuf->pwrite = oldpwrite; in dvb_ringbuffer_pkt_write()
208 ssize_t dvb_ringbuffer_pkt_read_user(struct dvb_ringbuffer *rbuf, size_t idx, in dvb_ringbuffer_pkt_read_user() argument
215 pktlen = rbuf->data[idx] << 8; in dvb_ringbuffer_pkt_read_user()
216 pktlen |= rbuf->data[(idx + 1) % rbuf->size]; in dvb_ringbuffer_pkt_read_user()
220 idx = (idx + DVB_RINGBUFFER_PKTHDRSIZE + offset) % rbuf->size; in dvb_ringbuffer_pkt_read_user()
222 split = ((idx + len) > rbuf->size) ? rbuf->size - idx : 0; in dvb_ringbuffer_pkt_read_user()
224 if (copy_to_user(buf, rbuf->data+idx, split)) in dvb_ringbuffer_pkt_read_user()
230 if (copy_to_user(buf, rbuf->data+idx, todo)) in dvb_ringbuffer_pkt_read_user()
236 ssize_t dvb_ringbuffer_pkt_read(struct dvb_ringbuffer *rbuf, size_t idx, in dvb_ringbuffer_pkt_read() argument
243 pktlen = rbuf->data[idx] << 8; in dvb_ringbuffer_pkt_read()
244 pktlen |= rbuf->data[(idx + 1) % rbuf->size]; in dvb_ringbuffer_pkt_read()
248 idx = (idx + DVB_RINGBUFFER_PKTHDRSIZE + offset) % rbuf->size; in dvb_ringbuffer_pkt_read()
250 split = ((idx + len) > rbuf->size) ? rbuf->size - idx : 0; in dvb_ringbuffer_pkt_read()
252 memcpy(buf, rbuf->data+idx, split); in dvb_ringbuffer_pkt_read()
257 memcpy(buf, rbuf->data+idx, todo); in dvb_ringbuffer_pkt_read()
261 void dvb_ringbuffer_pkt_dispose(struct dvb_ringbuffer *rbuf, size_t idx) in dvb_ringbuffer_pkt_dispose() argument
265 rbuf->data[(idx + 2) % rbuf->size] = PKT_DISPOSED; in dvb_ringbuffer_pkt_dispose()
268 while(dvb_ringbuffer_avail(rbuf) > DVB_RINGBUFFER_PKTHDRSIZE) { in dvb_ringbuffer_pkt_dispose()
269 if (DVB_RINGBUFFER_PEEK(rbuf, 2) == PKT_DISPOSED) { in dvb_ringbuffer_pkt_dispose()
270 pktlen = DVB_RINGBUFFER_PEEK(rbuf, 0) << 8; in dvb_ringbuffer_pkt_dispose()
271 pktlen |= DVB_RINGBUFFER_PEEK(rbuf, 1); in dvb_ringbuffer_pkt_dispose()
272 DVB_RINGBUFFER_SKIP(rbuf, pktlen + DVB_RINGBUFFER_PKTHDRSIZE); in dvb_ringbuffer_pkt_dispose()
280 ssize_t dvb_ringbuffer_pkt_next(struct dvb_ringbuffer *rbuf, size_t idx, size_t* pktlen) in dvb_ringbuffer_pkt_next() argument
287 idx = rbuf->pread; in dvb_ringbuffer_pkt_next()
289 curpktlen = rbuf->data[idx] << 8; in dvb_ringbuffer_pkt_next()
290 curpktlen |= rbuf->data[(idx + 1) % rbuf->size]; in dvb_ringbuffer_pkt_next()
291 idx = (idx + curpktlen + DVB_RINGBUFFER_PKTHDRSIZE) % rbuf->size; in dvb_ringbuffer_pkt_next()
294 consumed = (idx - rbuf->pread) % rbuf->size; in dvb_ringbuffer_pkt_next()
296 while((dvb_ringbuffer_avail(rbuf) - consumed) > DVB_RINGBUFFER_PKTHDRSIZE) { in dvb_ringbuffer_pkt_next()
298 curpktlen = rbuf->data[idx] << 8; in dvb_ringbuffer_pkt_next()
299 curpktlen |= rbuf->data[(idx + 1) % rbuf->size]; in dvb_ringbuffer_pkt_next()
300 curpktstatus = rbuf->data[(idx + 2) % rbuf->size]; in dvb_ringbuffer_pkt_next()
308 idx = (idx + curpktlen + DVB_RINGBUFFER_PKTHDRSIZE) % rbuf->size; in dvb_ringbuffer_pkt_next()