Lines Matching refs:udev
75 struct uinput_device *udev = input_get_drvdata(dev); in uinput_dev_event() local
80 udev->buff[udev->head] = (struct input_event) { in uinput_dev_event()
88 udev->head = (udev->head + 1) % UINPUT_BUFFER_SIZE; in uinput_dev_event()
90 wake_up_interruptible(&udev->waitq); in uinput_dev_event()
96 static bool uinput_request_alloc_id(struct uinput_device *udev, in uinput_request_alloc_id() argument
102 spin_lock(&udev->requests_lock); in uinput_request_alloc_id()
105 if (!udev->requests[id]) { in uinput_request_alloc_id()
107 udev->requests[id] = request; in uinput_request_alloc_id()
113 spin_unlock(&udev->requests_lock); in uinput_request_alloc_id()
117 static struct uinput_request *uinput_request_find(struct uinput_device *udev, in uinput_request_find() argument
124 return udev->requests[id]; in uinput_request_find()
127 static int uinput_request_reserve_slot(struct uinput_device *udev, in uinput_request_reserve_slot() argument
131 return wait_event_interruptible(udev->requests_waitq, in uinput_request_reserve_slot()
132 uinput_request_alloc_id(udev, request)); in uinput_request_reserve_slot()
135 static void uinput_request_release_slot(struct uinput_device *udev, in uinput_request_release_slot() argument
139 spin_lock(&udev->requests_lock); in uinput_request_release_slot()
140 udev->requests[id] = NULL; in uinput_request_release_slot()
141 spin_unlock(&udev->requests_lock); in uinput_request_release_slot()
143 wake_up(&udev->requests_waitq); in uinput_request_release_slot()
146 static int uinput_request_send(struct uinput_device *udev, in uinput_request_send() argument
151 retval = mutex_lock_interruptible(&udev->mutex); in uinput_request_send()
155 if (udev->state != UIST_CREATED) { in uinput_request_send()
166 uinput_dev_event(udev->dev, EV_UINPUT, request->code, request->id); in uinput_request_send()
169 mutex_unlock(&udev->mutex); in uinput_request_send()
173 static int uinput_request_submit(struct uinput_device *udev, in uinput_request_submit() argument
178 retval = uinput_request_reserve_slot(udev, request); in uinput_request_submit()
182 retval = uinput_request_send(udev, request); in uinput_request_submit()
194 uinput_request_release_slot(udev, request->id); in uinput_request_submit()
202 static void uinput_flush_requests(struct uinput_device *udev) in uinput_flush_requests() argument
207 spin_lock(&udev->requests_lock); in uinput_flush_requests()
210 request = udev->requests[i]; in uinput_flush_requests()
217 spin_unlock(&udev->requests_lock); in uinput_flush_requests()
239 struct uinput_device *udev = input_get_drvdata(dev); in uinput_dev_upload_effect() local
257 return uinput_request_submit(udev, &request); in uinput_dev_upload_effect()
262 struct uinput_device *udev = input_get_drvdata(dev); in uinput_dev_erase_effect() local
271 return uinput_request_submit(udev, &request); in uinput_dev_erase_effect()
286 static void uinput_destroy_device(struct uinput_device *udev) in uinput_destroy_device() argument
289 struct input_dev *dev = udev->dev; in uinput_destroy_device()
290 enum uinput_state old_state = udev->state; in uinput_destroy_device()
292 udev->state = UIST_NEW_DEVICE; in uinput_destroy_device()
298 uinput_flush_requests(udev); in uinput_destroy_device()
305 udev->dev = NULL; in uinput_destroy_device()
309 static int uinput_create_device(struct uinput_device *udev) in uinput_create_device() argument
311 struct input_dev *dev = udev->dev; in uinput_create_device()
314 if (udev->state != UIST_SETUP_COMPLETE) { in uinput_create_device()
336 if (test_bit(EV_FF, dev->evbit) && !udev->ff_effects_max) { in uinput_create_device()
343 if (udev->ff_effects_max) { in uinput_create_device()
344 error = input_ff_create(dev, udev->ff_effects_max); in uinput_create_device()
363 input_set_drvdata(udev->dev, udev); in uinput_create_device()
365 error = input_register_device(udev->dev); in uinput_create_device()
369 udev->state = UIST_CREATED; in uinput_create_device()
374 fail1: uinput_destroy_device(udev); in uinput_create_device()
461 static int uinput_dev_setup(struct uinput_device *udev, in uinput_dev_setup() argument
467 if (udev->state == UIST_CREATED) in uinput_dev_setup()
476 dev = udev->dev; in uinput_dev_setup()
478 udev->ff_effects_max = setup.ff_effects_max; in uinput_dev_setup()
485 udev->state = UIST_SETUP_COMPLETE; in uinput_dev_setup()
489 static int uinput_abs_setup(struct uinput_device *udev, in uinput_abs_setup() argument
499 if (udev->state == UIST_CREATED) in uinput_abs_setup()
508 dev = udev->dev; in uinput_abs_setup()
524 static int uinput_setup_device_legacy(struct uinput_device *udev, in uinput_setup_device_legacy() argument
535 if (!udev->dev) { in uinput_setup_device_legacy()
536 udev->dev = input_allocate_device(); in uinput_setup_device_legacy()
537 if (!udev->dev) in uinput_setup_device_legacy()
541 dev = udev->dev; in uinput_setup_device_legacy()
547 udev->ff_effects_max = user_dev->ff_effects_max; in uinput_setup_device_legacy()
579 udev->state = UIST_SETUP_COMPLETE; in uinput_setup_device_legacy()
615 static ssize_t uinput_inject_events(struct uinput_device *udev, in uinput_inject_events() argument
637 input_set_timestamp(udev->dev, timestamp); in uinput_inject_events()
639 input_event(udev->dev, ev.type, ev.code, ev.value); in uinput_inject_events()
650 struct uinput_device *udev = file->private_data; in uinput_write() local
656 retval = mutex_lock_interruptible(&udev->mutex); in uinput_write()
660 retval = udev->state == UIST_CREATED ? in uinput_write()
661 uinput_inject_events(udev, buffer, count) : in uinput_write()
662 uinput_setup_device_legacy(udev, buffer, count); in uinput_write()
664 mutex_unlock(&udev->mutex); in uinput_write()
669 static bool uinput_fetch_next_event(struct uinput_device *udev, in uinput_fetch_next_event() argument
674 spin_lock_irq(&udev->dev->event_lock); in uinput_fetch_next_event()
676 have_event = udev->head != udev->tail; in uinput_fetch_next_event()
678 *event = udev->buff[udev->tail]; in uinput_fetch_next_event()
679 udev->tail = (udev->tail + 1) % UINPUT_BUFFER_SIZE; in uinput_fetch_next_event()
682 spin_unlock_irq(&udev->dev->event_lock); in uinput_fetch_next_event()
687 static ssize_t uinput_events_to_user(struct uinput_device *udev, in uinput_events_to_user() argument
694 uinput_fetch_next_event(udev, &event)) { in uinput_events_to_user()
708 struct uinput_device *udev = file->private_data; in uinput_read() local
715 retval = mutex_lock_interruptible(&udev->mutex); in uinput_read()
719 if (udev->state != UIST_CREATED) in uinput_read()
721 else if (udev->head == udev->tail && in uinput_read()
725 retval = uinput_events_to_user(udev, buffer, count); in uinput_read()
727 mutex_unlock(&udev->mutex); in uinput_read()
733 retval = wait_event_interruptible(udev->waitq, in uinput_read()
734 udev->head != udev->tail || in uinput_read()
735 udev->state != UIST_CREATED); in uinput_read()
743 struct uinput_device *udev = file->private_data; in uinput_poll() local
746 poll_wait(file, &udev->waitq, wait); in uinput_poll()
748 if (udev->head != udev->tail) in uinput_poll()
756 struct uinput_device *udev = file->private_data; in uinput_release() local
758 uinput_destroy_device(udev); in uinput_release()
759 kfree(udev); in uinput_release()
854 if (udev->state == UIST_CREATED) \
858 else set_bit((_arg), udev->dev->_bit); \
891 struct uinput_device *udev = file->private_data; in uinput_ioctl_handler() local
899 retval = mutex_lock_interruptible(&udev->mutex); in uinput_ioctl_handler()
903 if (!udev->dev) { in uinput_ioctl_handler()
904 udev->dev = input_allocate_device(); in uinput_ioctl_handler()
905 if (!udev->dev) { in uinput_ioctl_handler()
918 retval = uinput_create_device(udev); in uinput_ioctl_handler()
922 uinput_destroy_device(udev); in uinput_ioctl_handler()
926 retval = uinput_dev_setup(udev, p); in uinput_ioctl_handler()
972 if (udev->state == UIST_CREATED) { in uinput_ioctl_handler()
983 kfree(udev->dev->phys); in uinput_ioctl_handler()
984 udev->dev->phys = phys; in uinput_ioctl_handler()
992 req = uinput_request_find(udev, ff_up.request_id); in uinput_ioctl_handler()
1015 req = uinput_request_find(udev, ff_erase.request_id); in uinput_ioctl_handler()
1035 req = uinput_request_find(udev, ff_up.request_id); in uinput_ioctl_handler()
1052 req = uinput_request_find(udev, ff_erase.request_id); in uinput_ioctl_handler()
1068 if (udev->state != UIST_CREATED) { in uinput_ioctl_handler()
1072 name = dev_name(&udev->dev->dev); in uinput_ioctl_handler()
1077 retval = uinput_abs_setup(udev, p, size); in uinput_ioctl_handler()
1083 mutex_unlock(&udev->mutex); in uinput_ioctl_handler()