2 * User level driver support for input subsystem
4 * Heavily based on evdev.c by Vojtech Pavlik
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
23 * 0.4 01/09/2014 (Benjamin Tissoires <benjamin.tissoires@redhat.com>)
24 * - add UI_GET_SYSNAME ioctl
25 * 0.3 09/04/2006 (Anssi Hannula <anssi.hannula@gmail.com>)
26 * - updated ff support for the changes in kernel interface
27 * - added MODULE_VERSION
28 * 0.2 16/10/2004 (Micah Dowty <micah@navi.cx>)
29 * - added force feedback support
32 * - first public version
34 #include <uapi/linux/uinput.h>
35 #include <linux/poll.h>
36 #include <linux/sched.h>
37 #include <linux/slab.h>
38 #include <linux/module.h>
39 #include <linux/init.h>
41 #include <linux/miscdevice.h>
42 #include <linux/input/mt.h>
43 #include "../input-compat.h"
45 #define UINPUT_NAME "uinput"
46 #define UINPUT_BUFFER_SIZE 16
47 #define UINPUT_NUM_REQUESTS 16
49 enum uinput_state
{ UIST_NEW_DEVICE
, UIST_SETUP_COMPLETE
, UIST_CREATED
};
51 struct uinput_request
{
53 unsigned int code
; /* UI_FF_UPLOAD, UI_FF_ERASE */
56 struct completion done
;
59 unsigned int effect_id
;
61 struct ff_effect
*effect
;
62 struct ff_effect
*old
;
67 struct uinput_device
{
68 struct input_dev
*dev
;
70 enum uinput_state state
;
71 wait_queue_head_t waitq
;
75 struct input_event buff
[UINPUT_BUFFER_SIZE
];
76 unsigned int ff_effects_max
;
78 struct uinput_request
*requests
[UINPUT_NUM_REQUESTS
];
79 wait_queue_head_t requests_waitq
;
80 spinlock_t requests_lock
;
83 static int uinput_dev_event(struct input_dev
*dev
,
84 unsigned int type
, unsigned int code
, int value
)
86 struct uinput_device
*udev
= input_get_drvdata(dev
);
89 udev
->buff
[udev
->head
].type
= type
;
90 udev
->buff
[udev
->head
].code
= code
;
91 udev
->buff
[udev
->head
].value
= value
;
93 udev
->buff
[udev
->head
].input_event_sec
= ts
.tv_sec
;
94 udev
->buff
[udev
->head
].input_event_usec
= ts
.tv_nsec
/ NSEC_PER_USEC
;
95 udev
->head
= (udev
->head
+ 1) % UINPUT_BUFFER_SIZE
;
97 wake_up_interruptible(&udev
->waitq
);
102 /* Atomically allocate an ID for the given request. Returns 0 on success. */
103 static bool uinput_request_alloc_id(struct uinput_device
*udev
,
104 struct uinput_request
*request
)
107 bool reserved
= false;
109 spin_lock(&udev
->requests_lock
);
111 for (id
= 0; id
< UINPUT_NUM_REQUESTS
; id
++) {
112 if (!udev
->requests
[id
]) {
114 udev
->requests
[id
] = request
;
120 spin_unlock(&udev
->requests_lock
);
124 static struct uinput_request
*uinput_request_find(struct uinput_device
*udev
,
127 /* Find an input request, by ID. Returns NULL if the ID isn't valid. */
128 if (id
>= UINPUT_NUM_REQUESTS
)
131 return udev
->requests
[id
];
134 static int uinput_request_reserve_slot(struct uinput_device
*udev
,
135 struct uinput_request
*request
)
137 /* Allocate slot. If none are available right away, wait. */
138 return wait_event_interruptible(udev
->requests_waitq
,
139 uinput_request_alloc_id(udev
, request
));
142 static void uinput_request_release_slot(struct uinput_device
*udev
,
145 /* Mark slot as available */
146 spin_lock(&udev
->requests_lock
);
147 udev
->requests
[id
] = NULL
;
148 spin_unlock(&udev
->requests_lock
);
150 wake_up(&udev
->requests_waitq
);
153 static int uinput_request_send(struct uinput_device
*udev
,
154 struct uinput_request
*request
)
158 retval
= mutex_lock_interruptible(&udev
->mutex
);
162 if (udev
->state
!= UIST_CREATED
) {
167 init_completion(&request
->done
);
170 * Tell our userspace application about this new request
171 * by queueing an input event.
173 uinput_dev_event(udev
->dev
, EV_UINPUT
, request
->code
, request
->id
);
176 mutex_unlock(&udev
->mutex
);
180 static int uinput_request_submit(struct uinput_device
*udev
,
181 struct uinput_request
*request
)
185 retval
= uinput_request_reserve_slot(udev
, request
);
189 retval
= uinput_request_send(udev
, request
);
193 if (!wait_for_completion_timeout(&request
->done
, 30 * HZ
)) {
198 retval
= request
->retval
;
201 uinput_request_release_slot(udev
, request
->id
);
206 * Fail all outstanding requests so handlers don't wait for the userspace
207 * to finish processing them.
209 static void uinput_flush_requests(struct uinput_device
*udev
)
211 struct uinput_request
*request
;
214 spin_lock(&udev
->requests_lock
);
216 for (i
= 0; i
< UINPUT_NUM_REQUESTS
; i
++) {
217 request
= udev
->requests
[i
];
219 request
->retval
= -ENODEV
;
220 complete(&request
->done
);
224 spin_unlock(&udev
->requests_lock
);
227 static void uinput_dev_set_gain(struct input_dev
*dev
, u16 gain
)
229 uinput_dev_event(dev
, EV_FF
, FF_GAIN
, gain
);
232 static void uinput_dev_set_autocenter(struct input_dev
*dev
, u16 magnitude
)
234 uinput_dev_event(dev
, EV_FF
, FF_AUTOCENTER
, magnitude
);
237 static int uinput_dev_playback(struct input_dev
*dev
, int effect_id
, int value
)
239 return uinput_dev_event(dev
, EV_FF
, effect_id
, value
);
242 static int uinput_dev_upload_effect(struct input_dev
*dev
,
243 struct ff_effect
*effect
,
244 struct ff_effect
*old
)
246 struct uinput_device
*udev
= input_get_drvdata(dev
);
247 struct uinput_request request
;
250 * uinput driver does not currently support periodic effects with
251 * custom waveform since it does not have a way to pass buffer of
252 * samples (custom_data) to userspace. If ever there is a device
253 * supporting custom waveforms we would need to define an additional
254 * ioctl (UI_UPLOAD_SAMPLES) but for now we just bail out.
256 if (effect
->type
== FF_PERIODIC
&&
257 effect
->u
.periodic
.waveform
== FF_CUSTOM
)
260 request
.code
= UI_FF_UPLOAD
;
261 request
.u
.upload
.effect
= effect
;
262 request
.u
.upload
.old
= old
;
264 return uinput_request_submit(udev
, &request
);
267 static int uinput_dev_erase_effect(struct input_dev
*dev
, int effect_id
)
269 struct uinput_device
*udev
= input_get_drvdata(dev
);
270 struct uinput_request request
;
272 if (!test_bit(EV_FF
, dev
->evbit
))
275 request
.code
= UI_FF_ERASE
;
276 request
.u
.effect_id
= effect_id
;
278 return uinput_request_submit(udev
, &request
);
281 static int uinput_dev_flush(struct input_dev
*dev
, struct file
*file
)
284 * If we are called with file == NULL that means we are tearing
285 * down the device, and therefore we can not handle FF erase
286 * requests: either we are handling UI_DEV_DESTROY (and holding
287 * the udev->mutex), or the file descriptor is closed and there is
288 * nobody on the other side anymore.
290 return file
? input_ff_flush(dev
, file
) : 0;
293 static void uinput_destroy_device(struct uinput_device
*udev
)
295 const char *name
, *phys
;
296 struct input_dev
*dev
= udev
->dev
;
297 enum uinput_state old_state
= udev
->state
;
299 udev
->state
= UIST_NEW_DEVICE
;
304 if (old_state
== UIST_CREATED
) {
305 uinput_flush_requests(udev
);
306 input_unregister_device(dev
);
308 input_free_device(dev
);
316 static int uinput_create_device(struct uinput_device
*udev
)
318 struct input_dev
*dev
= udev
->dev
;
321 if (udev
->state
!= UIST_SETUP_COMPLETE
) {
322 printk(KERN_DEBUG
"%s: write device info first\n", UINPUT_NAME
);
326 if (test_bit(EV_ABS
, dev
->evbit
)) {
327 input_alloc_absinfo(dev
);
333 if (test_bit(ABS_MT_SLOT
, dev
->absbit
)) {
334 nslot
= input_abs_get_max(dev
, ABS_MT_SLOT
) + 1;
335 error
= input_mt_init_slots(dev
, nslot
, 0);
338 } else if (test_bit(ABS_MT_POSITION_X
, dev
->absbit
)) {
339 input_set_events_per_packet(dev
, 60);
343 if (test_bit(EV_FF
, dev
->evbit
) && !udev
->ff_effects_max
) {
344 printk(KERN_DEBUG
"%s: ff_effects_max should be non-zero when FF_BIT is set\n",
350 if (udev
->ff_effects_max
) {
351 error
= input_ff_create(dev
, udev
->ff_effects_max
);
355 dev
->ff
->upload
= uinput_dev_upload_effect
;
356 dev
->ff
->erase
= uinput_dev_erase_effect
;
357 dev
->ff
->playback
= uinput_dev_playback
;
358 dev
->ff
->set_gain
= uinput_dev_set_gain
;
359 dev
->ff
->set_autocenter
= uinput_dev_set_autocenter
;
361 * The standard input_ff_flush() implementation does
362 * not quite work for uinput as we can't reasonably
363 * handle FF requests during device teardown.
365 dev
->flush
= uinput_dev_flush
;
368 dev
->event
= uinput_dev_event
;
370 input_set_drvdata(udev
->dev
, udev
);
372 error
= input_register_device(udev
->dev
);
376 udev
->state
= UIST_CREATED
;
380 fail2
: input_ff_destroy(dev
);
381 fail1
: uinput_destroy_device(udev
);
385 static int uinput_open(struct inode
*inode
, struct file
*file
)
387 struct uinput_device
*newdev
;
389 newdev
= kzalloc(sizeof(struct uinput_device
), GFP_KERNEL
);
393 mutex_init(&newdev
->mutex
);
394 spin_lock_init(&newdev
->requests_lock
);
395 init_waitqueue_head(&newdev
->requests_waitq
);
396 init_waitqueue_head(&newdev
->waitq
);
397 newdev
->state
= UIST_NEW_DEVICE
;
399 file
->private_data
= newdev
;
400 nonseekable_open(inode
, file
);
405 static int uinput_validate_absinfo(struct input_dev
*dev
, unsigned int code
,
406 const struct input_absinfo
*abs
)
413 if ((min
!= 0 || max
!= 0) && max
<= min
) {
415 "%s: invalid abs[%02x] min:%d max:%d\n",
416 UINPUT_NAME
, code
, min
, max
);
420 if (abs
->flat
> max
- min
) {
422 "%s: abs_flat #%02x out of range: %d (min:%d/max:%d)\n",
423 UINPUT_NAME
, code
, abs
->flat
, min
, max
);
430 static int uinput_validate_absbits(struct input_dev
*dev
)
435 if (!test_bit(EV_ABS
, dev
->evbit
))
439 * Check if absmin/absmax/absfuzz/absflat are sane.
442 for_each_set_bit(cnt
, dev
->absbit
, ABS_CNT
) {
446 error
= uinput_validate_absinfo(dev
, cnt
, &dev
->absinfo
[cnt
]);
454 static int uinput_dev_setup(struct uinput_device
*udev
,
455 struct uinput_setup __user
*arg
)
457 struct uinput_setup setup
;
458 struct input_dev
*dev
;
460 if (udev
->state
== UIST_CREATED
)
463 if (copy_from_user(&setup
, arg
, sizeof(setup
)))
471 udev
->ff_effects_max
= setup
.ff_effects_max
;
474 dev
->name
= kstrndup(setup
.name
, UINPUT_MAX_NAME_SIZE
, GFP_KERNEL
);
478 udev
->state
= UIST_SETUP_COMPLETE
;
482 static int uinput_abs_setup(struct uinput_device
*udev
,
483 struct uinput_setup __user
*arg
, size_t size
)
485 struct uinput_abs_setup setup
= {};
486 struct input_dev
*dev
;
489 if (size
> sizeof(setup
))
492 if (udev
->state
== UIST_CREATED
)
495 if (copy_from_user(&setup
, arg
, size
))
498 if (setup
.code
> ABS_MAX
)
503 error
= uinput_validate_absinfo(dev
, setup
.code
, &setup
.absinfo
);
507 input_alloc_absinfo(dev
);
511 set_bit(setup
.code
, dev
->absbit
);
512 dev
->absinfo
[setup
.code
] = setup
.absinfo
;
516 /* legacy setup via write() */
517 static int uinput_setup_device_legacy(struct uinput_device
*udev
,
518 const char __user
*buffer
, size_t count
)
520 struct uinput_user_dev
*user_dev
;
521 struct input_dev
*dev
;
525 if (count
!= sizeof(struct uinput_user_dev
))
529 udev
->dev
= input_allocate_device();
536 user_dev
= memdup_user(buffer
, sizeof(struct uinput_user_dev
));
537 if (IS_ERR(user_dev
))
538 return PTR_ERR(user_dev
);
540 udev
->ff_effects_max
= user_dev
->ff_effects_max
;
542 /* Ensure name is filled in */
543 if (!user_dev
->name
[0]) {
549 dev
->name
= kstrndup(user_dev
->name
, UINPUT_MAX_NAME_SIZE
,
556 dev
->id
.bustype
= user_dev
->id
.bustype
;
557 dev
->id
.vendor
= user_dev
->id
.vendor
;
558 dev
->id
.product
= user_dev
->id
.product
;
559 dev
->id
.version
= user_dev
->id
.version
;
561 for (i
= 0; i
< ABS_CNT
; i
++) {
562 input_abs_set_max(dev
, i
, user_dev
->absmax
[i
]);
563 input_abs_set_min(dev
, i
, user_dev
->absmin
[i
]);
564 input_abs_set_fuzz(dev
, i
, user_dev
->absfuzz
[i
]);
565 input_abs_set_flat(dev
, i
, user_dev
->absflat
[i
]);
568 retval
= uinput_validate_absbits(dev
);
572 udev
->state
= UIST_SETUP_COMPLETE
;
580 static ssize_t
uinput_inject_events(struct uinput_device
*udev
,
581 const char __user
*buffer
, size_t count
)
583 struct input_event ev
;
586 if (count
!= 0 && count
< input_event_size())
589 while (bytes
+ input_event_size() <= count
) {
591 * Note that even if some events were fetched successfully
592 * we are still going to return EFAULT instead of partial
593 * count to let userspace know that it got it's buffers
596 if (input_event_from_user(buffer
+ bytes
, &ev
))
599 input_event(udev
->dev
, ev
.type
, ev
.code
, ev
.value
);
600 bytes
+= input_event_size();
606 static ssize_t
uinput_write(struct file
*file
, const char __user
*buffer
,
607 size_t count
, loff_t
*ppos
)
609 struct uinput_device
*udev
= file
->private_data
;
615 retval
= mutex_lock_interruptible(&udev
->mutex
);
619 retval
= udev
->state
== UIST_CREATED
?
620 uinput_inject_events(udev
, buffer
, count
) :
621 uinput_setup_device_legacy(udev
, buffer
, count
);
623 mutex_unlock(&udev
->mutex
);
628 static bool uinput_fetch_next_event(struct uinput_device
*udev
,
629 struct input_event
*event
)
633 spin_lock_irq(&udev
->dev
->event_lock
);
635 have_event
= udev
->head
!= udev
->tail
;
637 *event
= udev
->buff
[udev
->tail
];
638 udev
->tail
= (udev
->tail
+ 1) % UINPUT_BUFFER_SIZE
;
641 spin_unlock_irq(&udev
->dev
->event_lock
);
646 static ssize_t
uinput_events_to_user(struct uinput_device
*udev
,
647 char __user
*buffer
, size_t count
)
649 struct input_event event
;
652 while (read
+ input_event_size() <= count
&&
653 uinput_fetch_next_event(udev
, &event
)) {
655 if (input_event_to_user(buffer
+ read
, &event
))
658 read
+= input_event_size();
664 static ssize_t
uinput_read(struct file
*file
, char __user
*buffer
,
665 size_t count
, loff_t
*ppos
)
667 struct uinput_device
*udev
= file
->private_data
;
670 if (count
!= 0 && count
< input_event_size())
674 retval
= mutex_lock_interruptible(&udev
->mutex
);
678 if (udev
->state
!= UIST_CREATED
)
680 else if (udev
->head
== udev
->tail
&&
681 (file
->f_flags
& O_NONBLOCK
))
684 retval
= uinput_events_to_user(udev
, buffer
, count
);
686 mutex_unlock(&udev
->mutex
);
688 if (retval
|| count
== 0)
691 if (!(file
->f_flags
& O_NONBLOCK
))
692 retval
= wait_event_interruptible(udev
->waitq
,
693 udev
->head
!= udev
->tail
||
694 udev
->state
!= UIST_CREATED
);
695 } while (retval
== 0);
700 static __poll_t
uinput_poll(struct file
*file
, poll_table
*wait
)
702 struct uinput_device
*udev
= file
->private_data
;
704 poll_wait(file
, &udev
->waitq
, wait
);
706 if (udev
->head
!= udev
->tail
)
707 return EPOLLIN
| EPOLLRDNORM
;
712 static int uinput_release(struct inode
*inode
, struct file
*file
)
714 struct uinput_device
*udev
= file
->private_data
;
716 uinput_destroy_device(udev
);
723 struct uinput_ff_upload_compat
{
726 struct ff_effect_compat effect
;
727 struct ff_effect_compat old
;
730 static int uinput_ff_upload_to_user(char __user
*buffer
,
731 const struct uinput_ff_upload
*ff_up
)
733 if (in_compat_syscall()) {
734 struct uinput_ff_upload_compat ff_up_compat
;
736 ff_up_compat
.request_id
= ff_up
->request_id
;
737 ff_up_compat
.retval
= ff_up
->retval
;
739 * It so happens that the pointer that gives us the trouble
740 * is the last field in the structure. Since we don't support
741 * custom waveforms in uinput anyway we can just copy the whole
742 * thing (to the compat size) and ignore the pointer.
744 memcpy(&ff_up_compat
.effect
, &ff_up
->effect
,
745 sizeof(struct ff_effect_compat
));
746 memcpy(&ff_up_compat
.old
, &ff_up
->old
,
747 sizeof(struct ff_effect_compat
));
749 if (copy_to_user(buffer
, &ff_up_compat
,
750 sizeof(struct uinput_ff_upload_compat
)))
753 if (copy_to_user(buffer
, ff_up
,
754 sizeof(struct uinput_ff_upload
)))
761 static int uinput_ff_upload_from_user(const char __user
*buffer
,
762 struct uinput_ff_upload
*ff_up
)
764 if (in_compat_syscall()) {
765 struct uinput_ff_upload_compat ff_up_compat
;
767 if (copy_from_user(&ff_up_compat
, buffer
,
768 sizeof(struct uinput_ff_upload_compat
)))
771 ff_up
->request_id
= ff_up_compat
.request_id
;
772 ff_up
->retval
= ff_up_compat
.retval
;
773 memcpy(&ff_up
->effect
, &ff_up_compat
.effect
,
774 sizeof(struct ff_effect_compat
));
775 memcpy(&ff_up
->old
, &ff_up_compat
.old
,
776 sizeof(struct ff_effect_compat
));
779 if (copy_from_user(ff_up
, buffer
,
780 sizeof(struct uinput_ff_upload
)))
789 static int uinput_ff_upload_to_user(char __user
*buffer
,
790 const struct uinput_ff_upload
*ff_up
)
792 if (copy_to_user(buffer
, ff_up
, sizeof(struct uinput_ff_upload
)))
798 static int uinput_ff_upload_from_user(const char __user
*buffer
,
799 struct uinput_ff_upload
*ff_up
)
801 if (copy_from_user(ff_up
, buffer
, sizeof(struct uinput_ff_upload
)))
809 #define uinput_set_bit(_arg, _bit, _max) \
812 if (udev->state == UIST_CREATED) \
814 else if ((_arg) > (_max)) \
816 else set_bit((_arg), udev->dev->_bit); \
820 static int uinput_str_to_user(void __user
*dest
, const char *str
,
823 char __user
*p
= dest
;
832 len
= strlen(str
) + 1;
836 ret
= copy_to_user(p
, str
, len
);
840 /* force terminating '\0' */
841 ret
= put_user(0, p
+ len
- 1);
842 return ret
? -EFAULT
: len
;
845 static long uinput_ioctl_handler(struct file
*file
, unsigned int cmd
,
846 unsigned long arg
, void __user
*p
)
849 struct uinput_device
*udev
= file
->private_data
;
850 struct uinput_ff_upload ff_up
;
851 struct uinput_ff_erase ff_erase
;
852 struct uinput_request
*req
;
857 retval
= mutex_lock_interruptible(&udev
->mutex
);
862 udev
->dev
= input_allocate_device();
871 if (put_user(UINPUT_VERSION
, (unsigned int __user
*)p
))
876 retval
= uinput_create_device(udev
);
880 uinput_destroy_device(udev
);
884 retval
= uinput_dev_setup(udev
, p
);
887 /* UI_ABS_SETUP is handled in the variable size ioctls */
890 retval
= uinput_set_bit(arg
, evbit
, EV_MAX
);
894 retval
= uinput_set_bit(arg
, keybit
, KEY_MAX
);
898 retval
= uinput_set_bit(arg
, relbit
, REL_MAX
);
902 retval
= uinput_set_bit(arg
, absbit
, ABS_MAX
);
906 retval
= uinput_set_bit(arg
, mscbit
, MSC_MAX
);
910 retval
= uinput_set_bit(arg
, ledbit
, LED_MAX
);
914 retval
= uinput_set_bit(arg
, sndbit
, SND_MAX
);
918 retval
= uinput_set_bit(arg
, ffbit
, FF_MAX
);
922 retval
= uinput_set_bit(arg
, swbit
, SW_MAX
);
926 retval
= uinput_set_bit(arg
, propbit
, INPUT_PROP_MAX
);
930 if (udev
->state
== UIST_CREATED
) {
935 phys
= strndup_user(p
, 1024);
937 retval
= PTR_ERR(phys
);
941 kfree(udev
->dev
->phys
);
942 udev
->dev
->phys
= phys
;
945 case UI_BEGIN_FF_UPLOAD
:
946 retval
= uinput_ff_upload_from_user(p
, &ff_up
);
950 req
= uinput_request_find(udev
, ff_up
.request_id
);
951 if (!req
|| req
->code
!= UI_FF_UPLOAD
||
952 !req
->u
.upload
.effect
) {
958 ff_up
.effect
= *req
->u
.upload
.effect
;
959 if (req
->u
.upload
.old
)
960 ff_up
.old
= *req
->u
.upload
.old
;
962 memset(&ff_up
.old
, 0, sizeof(struct ff_effect
));
964 retval
= uinput_ff_upload_to_user(p
, &ff_up
);
967 case UI_BEGIN_FF_ERASE
:
968 if (copy_from_user(&ff_erase
, p
, sizeof(ff_erase
))) {
973 req
= uinput_request_find(udev
, ff_erase
.request_id
);
974 if (!req
|| req
->code
!= UI_FF_ERASE
) {
980 ff_erase
.effect_id
= req
->u
.effect_id
;
981 if (copy_to_user(p
, &ff_erase
, sizeof(ff_erase
))) {
988 case UI_END_FF_UPLOAD
:
989 retval
= uinput_ff_upload_from_user(p
, &ff_up
);
993 req
= uinput_request_find(udev
, ff_up
.request_id
);
994 if (!req
|| req
->code
!= UI_FF_UPLOAD
||
995 !req
->u
.upload
.effect
) {
1000 req
->retval
= ff_up
.retval
;
1001 complete(&req
->done
);
1004 case UI_END_FF_ERASE
:
1005 if (copy_from_user(&ff_erase
, p
, sizeof(ff_erase
))) {
1010 req
= uinput_request_find(udev
, ff_erase
.request_id
);
1011 if (!req
|| req
->code
!= UI_FF_ERASE
) {
1016 req
->retval
= ff_erase
.retval
;
1017 complete(&req
->done
);
1021 size
= _IOC_SIZE(cmd
);
1023 /* Now check variable-length commands */
1024 switch (cmd
& ~IOCSIZE_MASK
) {
1025 case UI_GET_SYSNAME(0):
1026 if (udev
->state
!= UIST_CREATED
) {
1030 name
= dev_name(&udev
->dev
->dev
);
1031 retval
= uinput_str_to_user(p
, name
, size
);
1034 case UI_ABS_SETUP
& ~IOCSIZE_MASK
:
1035 retval
= uinput_abs_setup(udev
, p
, size
);
1041 mutex_unlock(&udev
->mutex
);
1045 static long uinput_ioctl(struct file
*file
, unsigned int cmd
, unsigned long arg
)
1047 return uinput_ioctl_handler(file
, cmd
, arg
, (void __user
*)arg
);
1050 #ifdef CONFIG_COMPAT
1052 #define UI_SET_PHYS_COMPAT _IOW(UINPUT_IOCTL_BASE, 108, compat_uptr_t)
1054 static long uinput_compat_ioctl(struct file
*file
,
1055 unsigned int cmd
, unsigned long arg
)
1057 if (cmd
== UI_SET_PHYS_COMPAT
)
1060 return uinput_ioctl_handler(file
, cmd
, arg
, compat_ptr(arg
));
1064 static const struct file_operations uinput_fops
= {
1065 .owner
= THIS_MODULE
,
1066 .open
= uinput_open
,
1067 .release
= uinput_release
,
1068 .read
= uinput_read
,
1069 .write
= uinput_write
,
1070 .poll
= uinput_poll
,
1071 .unlocked_ioctl
= uinput_ioctl
,
1072 #ifdef CONFIG_COMPAT
1073 .compat_ioctl
= uinput_compat_ioctl
,
1075 .llseek
= no_llseek
,
1078 static struct miscdevice uinput_misc
= {
1079 .fops
= &uinput_fops
,
1080 .minor
= UINPUT_MINOR
,
1081 .name
= UINPUT_NAME
,
1083 module_misc_device(uinput_misc
);
1085 MODULE_ALIAS_MISCDEV(UINPUT_MINOR
);
1086 MODULE_ALIAS("devname:" UINPUT_NAME
);
1088 MODULE_AUTHOR("Aristeu Sergio Rozanski Filho");
1089 MODULE_DESCRIPTION("User level driver support for input subsystem");
1090 MODULE_LICENSE("GPL");