mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 11:37:06 +02:00
staging: axis-fifo: Add poll() support
Implement poll() file operation to allow userspace applications to wait for FIFO readiness using select()/poll()/epoll(). This replaces the module parameter-based timeouts removed in the previous commit. Signed-off-by: Ovidiu Panait <ovidiu.panait.oss@gmail.com> Link: https://patch.msgid.link/20251227212640.3321310-2-ovidiu.panait.oss@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
87d653a894
commit
c83d8445f3
|
|
@ -32,6 +32,7 @@
|
|||
#include <linux/jiffies.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/poll.h>
|
||||
|
||||
/* ----------------------------
|
||||
* driver parameters
|
||||
|
|
@ -345,6 +346,28 @@ static ssize_t axis_fifo_write(struct file *f, const char __user *buf,
|
|||
return ret;
|
||||
}
|
||||
|
||||
static __poll_t axis_fifo_poll(struct file *f, poll_table *wait)
|
||||
{
|
||||
struct axis_fifo *fifo = f->private_data;
|
||||
__poll_t mask = 0;
|
||||
|
||||
if (fifo->has_rx_fifo) {
|
||||
poll_wait(f, &fifo->read_queue, wait);
|
||||
|
||||
if (ioread32(fifo->base_addr + XLLF_RDFO_OFFSET))
|
||||
mask |= EPOLLIN | EPOLLRDNORM;
|
||||
}
|
||||
|
||||
if (fifo->has_tx_fifo) {
|
||||
poll_wait(f, &fifo->write_queue, wait);
|
||||
|
||||
if (ioread32(fifo->base_addr + XLLF_TDFV_OFFSET))
|
||||
mask |= EPOLLOUT | EPOLLWRNORM;
|
||||
}
|
||||
|
||||
return mask;
|
||||
}
|
||||
|
||||
static irqreturn_t axis_fifo_irq(int irq, void *dw)
|
||||
{
|
||||
struct axis_fifo *fifo = dw;
|
||||
|
|
@ -410,7 +433,8 @@ static const struct file_operations fops = {
|
|||
.open = axis_fifo_open,
|
||||
.release = axis_fifo_close,
|
||||
.read = axis_fifo_read,
|
||||
.write = axis_fifo_write
|
||||
.write = axis_fifo_write,
|
||||
.poll = axis_fifo_poll,
|
||||
};
|
||||
|
||||
static int axis_fifo_debugfs_regs_show(struct seq_file *m, void *p)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user