mirror of
https://github.com/torvalds/linux.git
synced 2026-04-19 07:13:56 -04:00
media: rc: introduce BPF_PROG_LIRC_MODE2
Add support for BPF_PROG_LIRC_MODE2. This type of BPF program can call rc_keydown() to reported decoded IR scancodes, or rc_repeat() to report that the last key should be repeated. The bpf program can be attached to using the bpf(BPF_PROG_ATTACH) syscall; the target_fd must be the /dev/lircN device. Acked-by: Yonghong Song <yhs@fb.com> Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
This commit is contained in:
committed by
Daniel Borkmann
parent
170a7e3ea0
commit
f4364dcfc8
@@ -20,6 +20,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/file.h>
|
||||
#include <linux/idr.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/sched.h>
|
||||
@@ -104,6 +105,12 @@ void ir_lirc_raw_event(struct rc_dev *dev, struct ir_raw_event ev)
|
||||
TO_US(ev.duration), TO_STR(ev.pulse));
|
||||
}
|
||||
|
||||
/*
|
||||
* bpf does not care about the gap generated above; that exists
|
||||
* for backwards compatibility
|
||||
*/
|
||||
lirc_bpf_run(dev, sample);
|
||||
|
||||
spin_lock_irqsave(&dev->lirc_fh_lock, flags);
|
||||
list_for_each_entry(fh, &dev->lirc_fh, list) {
|
||||
if (LIRC_IS_TIMEOUT(sample) && !fh->send_timeout_reports)
|
||||
@@ -816,4 +823,27 @@ void __exit lirc_dev_exit(void)
|
||||
unregister_chrdev_region(lirc_base_dev, RC_DEV_MAX);
|
||||
}
|
||||
|
||||
struct rc_dev *rc_dev_get_from_fd(int fd)
|
||||
{
|
||||
struct fd f = fdget(fd);
|
||||
struct lirc_fh *fh;
|
||||
struct rc_dev *dev;
|
||||
|
||||
if (!f.file)
|
||||
return ERR_PTR(-EBADF);
|
||||
|
||||
if (f.file->f_op != &lirc_fops) {
|
||||
fdput(f);
|
||||
return ERR_PTR(-EINVAL);
|
||||
}
|
||||
|
||||
fh = f.file->private_data;
|
||||
dev = fh->rc;
|
||||
|
||||
get_device(&dev->dev);
|
||||
fdput(f);
|
||||
|
||||
return dev;
|
||||
}
|
||||
|
||||
MODULE_ALIAS("lirc_dev");
|
||||
|
||||
Reference in New Issue
Block a user