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()
447 static int uinput_dev_setup(struct uinput_device *udev, in uinput_dev_setup() argument
453 if (udev->state == UIST_CREATED) in uinput_dev_setup()
462 dev = udev->dev; in uinput_dev_setup()
464 udev->ff_effects_max = setup.ff_effects_max; in uinput_dev_setup()
471 udev->state = UIST_SETUP_COMPLETE; in uinput_dev_setup()
475 static int uinput_abs_setup(struct uinput_device *udev, in uinput_abs_setup() argument
485 if (udev->state == UIST_CREATED) in uinput_abs_setup()
494 dev = udev->dev; in uinput_abs_setup()
510 static int uinput_setup_device_legacy(struct uinput_device *udev, in uinput_setup_device_legacy() argument
521 if (!udev->dev) { in uinput_setup_device_legacy()
522 udev->dev = input_allocate_device(); in uinput_setup_device_legacy()
523 if (!udev->dev) in uinput_setup_device_legacy()
527 dev = udev->dev; in uinput_setup_device_legacy()
533 udev->ff_effects_max = user_dev->ff_effects_max; in uinput_setup_device_legacy()
565 udev->state = UIST_SETUP_COMPLETE; in uinput_setup_device_legacy()
601 static ssize_t uinput_inject_events(struct uinput_device *udev, in uinput_inject_events() argument
623 input_set_timestamp(udev->dev, timestamp); in uinput_inject_events()
625 input_event(udev->dev, ev.type, ev.code, ev.value); in uinput_inject_events()
636 struct uinput_device *udev = file->private_data; in uinput_write() local
642 retval = mutex_lock_interruptible(&udev->mutex); in uinput_write()
646 retval = udev->state == UIST_CREATED ? in uinput_write()
647 uinput_inject_events(udev, buffer, count) : in uinput_write()
648 uinput_setup_device_legacy(udev, buffer, count); in uinput_write()
650 mutex_unlock(&udev->mutex); in uinput_write()
655 static bool uinput_fetch_next_event(struct uinput_device *udev, in uinput_fetch_next_event() argument
660 spin_lock_irq(&udev->dev->event_lock); in uinput_fetch_next_event()
662 have_event = udev->head != udev->tail; in uinput_fetch_next_event()
664 *event = udev->buff[udev->tail]; in uinput_fetch_next_event()
665 udev->tail = (udev->tail + 1) % UINPUT_BUFFER_SIZE; in uinput_fetch_next_event()
668 spin_unlock_irq(&udev->dev->event_lock); in uinput_fetch_next_event()
673 static ssize_t uinput_events_to_user(struct uinput_device *udev, in uinput_events_to_user() argument
680 uinput_fetch_next_event(udev, &event)) { in uinput_events_to_user()
694 struct uinput_device *udev = file->private_data; in uinput_read() local
701 retval = mutex_lock_interruptible(&udev->mutex); in uinput_read()
705 if (udev->state != UIST_CREATED) in uinput_read()
707 else if (udev->head == udev->tail && in uinput_read()
711 retval = uinput_events_to_user(udev, buffer, count); in uinput_read()
713 mutex_unlock(&udev->mutex); in uinput_read()
719 retval = wait_event_interruptible(udev->waitq, in uinput_read()
720 udev->head != udev->tail || in uinput_read()
721 udev->state != UIST_CREATED); in uinput_read()
729 struct uinput_device *udev = file->private_data; in uinput_poll() local
732 poll_wait(file, &udev->waitq, wait); in uinput_poll()
734 if (udev->head != udev->tail) in uinput_poll()
742 struct uinput_device *udev = file->private_data; in uinput_release() local
744 uinput_destroy_device(udev); in uinput_release()
745 kfree(udev); in uinput_release()
840 if (udev->state == UIST_CREATED) \
844 else set_bit((_arg), udev->dev->_bit); \
877 struct uinput_device *udev = file->private_data; in uinput_ioctl_handler() local
885 retval = mutex_lock_interruptible(&udev->mutex); in uinput_ioctl_handler()
889 if (!udev->dev) { in uinput_ioctl_handler()
890 udev->dev = input_allocate_device(); in uinput_ioctl_handler()
891 if (!udev->dev) { in uinput_ioctl_handler()
904 retval = uinput_create_device(udev); in uinput_ioctl_handler()
908 uinput_destroy_device(udev); in uinput_ioctl_handler()
912 retval = uinput_dev_setup(udev, p); in uinput_ioctl_handler()
958 if (udev->state == UIST_CREATED) { in uinput_ioctl_handler()
969 kfree(udev->dev->phys); in uinput_ioctl_handler()
970 udev->dev->phys = phys; in uinput_ioctl_handler()
978 req = uinput_request_find(udev, ff_up.request_id); in uinput_ioctl_handler()
1001 req = uinput_request_find(udev, ff_erase.request_id); in uinput_ioctl_handler()
1021 req = uinput_request_find(udev, ff_up.request_id); in uinput_ioctl_handler()
1038 req = uinput_request_find(udev, ff_erase.request_id); in uinput_ioctl_handler()
1054 if (udev->state != UIST_CREATED) { in uinput_ioctl_handler()
1058 name = dev_name(&udev->dev->dev); in uinput_ioctl_handler()
1063 retval = uinput_abs_setup(udev, p, size); in uinput_ioctl_handler()
1069 mutex_unlock(&udev->mutex); in uinput_ioctl_handler()