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:
Ovidiu Panait 2025-12-27 23:26:33 +02:00 committed by Greg Kroah-Hartman
parent 87d653a894
commit c83d8445f3

View File

@ -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)