>From Joris van Rantwijk <jorispubl@xs4all.nl>: I tested lirc_serial and found that it works fine. Except the LIRC ioctls do not work in my 64-bit-kernel/32-bit-user setup. I added compat_ioctl entries in the drivers to fix this. While doing so, I noticed inconsistencies in the argument type of the LIRC ioctls. All ioctls are declared in lirc.h as having argument type __u32, however there are a few places where the driver calls get_user/put_user with an unsigned long argument. The patch below changes lirc_dev and lirc_serial to use __u32 for all ioctl arguments, and adds compat_ioctl entries. It should probably also be done in the other low-level drivers, but I don't have hardware to test those. I've dropped the .compat_ioctl addition from Joris' original patch, as I swear the non-compat definition should now work for both 32-bit and 64-bit userspace. Technically, I think we still need/want a in getting a reply to you).
Showing the changes to include/media/lirc_dev.h (1 of 3 files). Show all
Unified · Split
| @@ -125,10 +125,10 @@ static inline unsigned int lirc_buffer_write(struct lirc_buffer *buf, · 124 unmodified lines | ||
| 125 | 125 | struct lirc_driver { |
| 126 | 126 | char name[40]; |
| 127 | 127 | int minor; |
| 128 | − unsigned long code_length; | |
| 128 | + __u32 code_length; | |
| 129 | 129 | unsigned int buffer_size; /* in chunks holding one code each */ |
| 130 | 130 | int sample_rate; |
| 131 | − unsigned long features; | |
| 131 | + __u32 features; | |
| 132 | 132 | |
| 133 | 133 | unsigned int chunk_size; |
| 134 | 134 | |