Lines Matching defs:fifo

106 	struct xillyfifo fifo;
223 static int fifo_write(struct xillyfifo *fifo,
230 unsigned int writepos = fifo->writepos;
231 unsigned int writebuf = fifo->writebuf;
235 nmax = fifo->size - READ_ONCE(fifo->fill);
238 unsigned int nrail = fifo->bufsize - writepos;
242 spin_lock_irqsave(&fifo->lock, flags);
243 fifo->fill += done;
244 spin_unlock_irqrestore(&fifo->lock, flags);
246 fifo->writepos = writepos;
247 fifo->writebuf = writebuf;
255 rc = (*copier)(fifo->mem[writebuf] + writepos, data + done, n);
266 if (writepos == fifo->bufsize) {
270 if (writebuf == fifo->bufnum)
276 static int fifo_read(struct xillyfifo *fifo,
283 unsigned int readpos = fifo->readpos;
284 unsigned int readbuf = fifo->readbuf;
289 * The spinlock here is necessary, because otherwise fifo->fill
292 * visible on this thread at the time the updated fifo->fill was.
296 spin_lock_irqsave(&fifo->lock, flags);
297 fill = fifo->fill;
298 spin_unlock_irqrestore(&fifo->lock, flags);
301 unsigned int nrail = fifo->bufsize - readpos;
305 spin_lock_irqsave(&fifo->lock, flags);
306 fifo->fill -= done;
307 spin_unlock_irqrestore(&fifo->lock, flags);
309 fifo->readpos = readpos;
310 fifo->readbuf = readbuf;
318 rc = (*copier)(data + done, fifo->mem[readbuf] + readpos, n);
329 if (readpos == fifo->bufsize) {
333 if (readbuf == fifo->bufnum)
368 static int fifo_init(struct xillyfifo *fifo,
383 fifo->bufsize = 1 << log2_fifo_buf_size;
388 fifo->bufsize = 1 << log2_size;
391 fifo->bufnum = 1 << log2_bufnum;
392 fifo->size = fifo->bufnum * fifo->bufsize;
393 fifo->buf_order = buf_order;
395 fifo->mem = kmalloc_array(fifo->bufnum, sizeof(void *), GFP_KERNEL);
397 if (!fifo->mem)
400 for (i = 0; i < fifo->bufnum; i++) {
401 fifo->mem[i] = (void *)
404 if (!fifo->mem[i])
408 fifo->fill = 0;
409 fifo->readpos = 0;
410 fifo->readbuf = 0;
411 fifo->writepos = 0;
412 fifo->writebuf = 0;
413 spin_lock_init(&fifo->lock);
414 init_waitqueue_head(&fifo->waitq);
419 free_pages((unsigned long)fifo->mem[i], buf_order);
421 kfree(fifo->mem);
422 fifo->mem = NULL;
432 static void fifo_mem_release(struct xillyfifo *fifo)
436 if (!fifo->mem)
439 for (i = 0; i < fifo->bufnum; i++)
440 free_pages((unsigned long)fifo->mem[i], fifo->buf_order);
442 kfree(fifo->mem);
462 * Note that endpoint_dealloc() also frees fifo memory (if allocated), even
470 fifo_mem_release(&ep->fifo);
601 wake_up_interruptible(&chan->out_ep->fifo.waitq);
610 wake_up_interruptible(&xdev->msg_ep->fifo.waitq);
640 struct xillyfifo *fifo)
643 chan->in_fifo = fifo;
768 struct xillyfifo *fifo = &ep->fifo;
783 fill = READ_ONCE(fifo->fill) & ep->fill_mask;
826 count = fifo_read(&ep->fifo, xb->buf, max_read, xilly_memcpy);
873 wake_up_interruptible(&fifo->waitq);
946 struct xillyfifo *fifo;
1005 fifo = chan->in_fifo;
1007 if (unlikely(!fifo))
1010 if (bytes != fifo_write(fifo, p, bytes, xilly_memcpy)) {
1015 wake_up_interruptible(&fifo->waitq);
1075 struct xillyfifo *fifo = &ep->fifo;
1094 while (wait_event_interruptible(fifo->waitq,
1095 fifo->fill <= (fifo->size - 8) ||
1104 fifo_write(fifo, (void *)msg, 8, xilly_memcpy);
1311 rc = fifo_init(&out_ep->fifo, chan->out_log2_fifo_size);
1439 struct xillyfifo *fifo = chan->in_fifo;
1462 rc = fifo_read(fifo, (__force void *)userbuf + bytes_done,
1481 fifo_checkpoint_bytes = chan->in_consumed_bytes + fifo->size;
1514 (leap > (fifo->size >> 3) ||
1539 if (READ_ONCE(fifo->fill))
1571 * fifo->waitq is awaken.
1576 (fifo->waitq,
1577 fifo->fill || !chan->read_data_ok,
1587 (fifo->waitq,
1588 fifo->fill || !chan->read_data_ok);
1598 !READ_ONCE(fifo->fill))
1650 struct xillyfifo *fifo = &chan->out_ep->fifo;
1667 rc = fifo_write(fifo, (__force void *)userbuf, count,
1679 (fifo->waitq,
1680 fifo->fill != fifo->size || xdev->error)) {
1858 poll_wait(filp, &chan->out_ep->fifo.waitq, wait);
1887 (READ_ONCE(chan->out_ep->fifo.fill) != chan->out_ep->fifo.size))
1914 if (fifo_init(&xdev->msg_ep->fifo, 13)) /* 8 kiB */
2185 struct xillyfifo *fifo = &msg_ep->fifo;
2206 rc = wait_event_interruptible_timeout(fifo->waitq,