Lines Matching refs:udev

74 	struct uinput_device	*udev = input_get_drvdata(dev);  in uinput_dev_event()  local
79 udev->buff[udev->head] = (struct input_event) { in uinput_dev_event()
87 udev->head = (udev->head + 1) % UINPUT_BUFFER_SIZE; in uinput_dev_event()
89 wake_up_interruptible(&udev->waitq); in uinput_dev_event()
95 static bool uinput_request_alloc_id(struct uinput_device *udev, in uinput_request_alloc_id() argument
101 spin_lock(&udev->requests_lock); in uinput_request_alloc_id()
104 if (!udev->requests[id]) { in uinput_request_alloc_id()
106 udev->requests[id] = request; in uinput_request_alloc_id()
112 spin_unlock(&udev->requests_lock); in uinput_request_alloc_id()
116 static struct uinput_request *uinput_request_find(struct uinput_device *udev, in uinput_request_find() argument
123 return udev->requests[id]; in uinput_request_find()
126 static int uinput_request_reserve_slot(struct uinput_device *udev, in uinput_request_reserve_slot() argument
130 return wait_event_interruptible(udev->requests_waitq, in uinput_request_reserve_slot()
131 uinput_request_alloc_id(udev, request)); in uinput_request_reserve_slot()
134 static void uinput_request_release_slot(struct uinput_device *udev, in uinput_request_release_slot() argument
138 spin_lock(&udev->requests_lock); in uinput_request_release_slot()
139 udev->requests[id] = NULL; in uinput_request_release_slot()
140 spin_unlock(&udev->requests_lock); in uinput_request_release_slot()
142 wake_up(&udev->requests_waitq); in uinput_request_release_slot()
145 static int uinput_request_send(struct uinput_device *udev, in uinput_request_send() argument
150 retval = mutex_lock_interruptible(&udev->mutex); in uinput_request_send()
154 if (udev->state != UIST_CREATED) { in uinput_request_send()
165 uinput_dev_event(udev->dev, EV_UINPUT, request->code, request->id); in uinput_request_send()
168 mutex_unlock(&udev->mutex); in uinput_request_send()
172 static int uinput_request_submit(struct uinput_device *udev, in uinput_request_submit() argument
177 retval = uinput_request_reserve_slot(udev, request); in uinput_request_submit()
181 retval = uinput_request_send(udev, request); in uinput_request_submit()
193 uinput_request_release_slot(udev, request->id); in uinput_request_submit()
201 static void uinput_flush_requests(struct uinput_device *udev) in uinput_flush_requests() argument
206 spin_lock(&udev->requests_lock); in uinput_flush_requests()
209 request = udev->requests[i]; in uinput_flush_requests()
216 spin_unlock(&udev->requests_lock); in uinput_flush_requests()
238 struct uinput_device *udev = input_get_drvdata(dev); in uinput_dev_upload_effect() local
256 return uinput_request_submit(udev, &request); in uinput_dev_upload_effect()
261 struct uinput_device *udev = input_get_drvdata(dev); in uinput_dev_erase_effect() local
270 return uinput_request_submit(udev, &request); in uinput_dev_erase_effect()
285 static void uinput_destroy_device(struct uinput_device *udev) in uinput_destroy_device() argument
288 struct input_dev *dev = udev->dev; in uinput_destroy_device()
289 enum uinput_state old_state = udev->state; in uinput_destroy_device()
291 udev->state = UIST_NEW_DEVICE; in uinput_destroy_device()
297 uinput_flush_requests(udev); in uinput_destroy_device()
304 udev->dev = NULL; in uinput_destroy_device()
308 static int uinput_create_device(struct uinput_device *udev) in uinput_create_device() argument
310 struct input_dev *dev = udev->dev; in uinput_create_device()
313 if (udev->state != UIST_SETUP_COMPLETE) { in uinput_create_device()
335 if (test_bit(EV_FF, dev->evbit) && !udev->ff_effects_max) { in uinput_create_device()
342 if (udev->ff_effects_max) { in uinput_create_device()
343 error = input_ff_create(dev, udev->ff_effects_max); in uinput_create_device()
362 input_set_drvdata(udev->dev, udev); in uinput_create_device()
364 error = input_register_device(udev->dev); in uinput_create_device()
368 udev->state = UIST_CREATED; in uinput_create_device()
373 fail1: uinput_destroy_device(udev); in uinput_create_device()
446 static int uinput_dev_setup(struct uinput_device *udev, in uinput_dev_setup() argument
452 if (udev->state == UIST_CREATED) in uinput_dev_setup()
461 dev = udev->dev; in uinput_dev_setup()
463 udev->ff_effects_max = setup.ff_effects_max; in uinput_dev_setup()
470 udev->state = UIST_SETUP_COMPLETE; in uinput_dev_setup()
474 static int uinput_abs_setup(struct uinput_device *udev, in uinput_abs_setup() argument
484 if (udev->state == UIST_CREATED) in uinput_abs_setup()
493 dev = udev->dev; in uinput_abs_setup()
509 static int uinput_setup_device_legacy(struct uinput_device *udev, in uinput_setup_device_legacy() argument
520 if (!udev->dev) { in uinput_setup_device_legacy()
521 udev->dev = input_allocate_device(); in uinput_setup_device_legacy()
522 if (!udev->dev) in uinput_setup_device_legacy()
526 dev = udev->dev; in uinput_setup_device_legacy()
532 udev->ff_effects_max = user_dev->ff_effects_max; in uinput_setup_device_legacy()
564 udev->state = UIST_SETUP_COMPLETE; in uinput_setup_device_legacy()
572 static ssize_t uinput_inject_events(struct uinput_device *udev, in uinput_inject_events() argument
591 input_event(udev->dev, ev.type, ev.code, ev.value); in uinput_inject_events()
602 struct uinput_device *udev = file->private_data; in uinput_write() local
608 retval = mutex_lock_interruptible(&udev->mutex); in uinput_write()
612 retval = udev->state == UIST_CREATED ? in uinput_write()
613 uinput_inject_events(udev, buffer, count) : in uinput_write()
614 uinput_setup_device_legacy(udev, buffer, count); in uinput_write()
616 mutex_unlock(&udev->mutex); in uinput_write()
621 static bool uinput_fetch_next_event(struct uinput_device *udev, in uinput_fetch_next_event() argument
626 spin_lock_irq(&udev->dev->event_lock); in uinput_fetch_next_event()
628 have_event = udev->head != udev->tail; in uinput_fetch_next_event()
630 *event = udev->buff[udev->tail]; in uinput_fetch_next_event()
631 udev->tail = (udev->tail + 1) % UINPUT_BUFFER_SIZE; in uinput_fetch_next_event()
634 spin_unlock_irq(&udev->dev->event_lock); in uinput_fetch_next_event()
639 static ssize_t uinput_events_to_user(struct uinput_device *udev, in uinput_events_to_user() argument
646 uinput_fetch_next_event(udev, &event)) { in uinput_events_to_user()
660 struct uinput_device *udev = file->private_data; in uinput_read() local
667 retval = mutex_lock_interruptible(&udev->mutex); in uinput_read()
671 if (udev->state != UIST_CREATED) in uinput_read()
673 else if (udev->head == udev->tail && in uinput_read()
677 retval = uinput_events_to_user(udev, buffer, count); in uinput_read()
679 mutex_unlock(&udev->mutex); in uinput_read()
685 retval = wait_event_interruptible(udev->waitq, in uinput_read()
686 udev->head != udev->tail || in uinput_read()
687 udev->state != UIST_CREATED); in uinput_read()
695 struct uinput_device *udev = file->private_data; in uinput_poll() local
698 poll_wait(file, &udev->waitq, wait); in uinput_poll()
700 if (udev->head != udev->tail) in uinput_poll()
708 struct uinput_device *udev = file->private_data; in uinput_release() local
710 uinput_destroy_device(udev); in uinput_release()
711 kfree(udev); in uinput_release()
806 if (udev->state == UIST_CREATED) \
810 else set_bit((_arg), udev->dev->_bit); \
843 struct uinput_device *udev = file->private_data; in uinput_ioctl_handler() local
851 retval = mutex_lock_interruptible(&udev->mutex); in uinput_ioctl_handler()
855 if (!udev->dev) { in uinput_ioctl_handler()
856 udev->dev = input_allocate_device(); in uinput_ioctl_handler()
857 if (!udev->dev) { in uinput_ioctl_handler()
870 retval = uinput_create_device(udev); in uinput_ioctl_handler()
874 uinput_destroy_device(udev); in uinput_ioctl_handler()
878 retval = uinput_dev_setup(udev, p); in uinput_ioctl_handler()
924 if (udev->state == UIST_CREATED) { in uinput_ioctl_handler()
935 kfree(udev->dev->phys); in uinput_ioctl_handler()
936 udev->dev->phys = phys; in uinput_ioctl_handler()
944 req = uinput_request_find(udev, ff_up.request_id); in uinput_ioctl_handler()
967 req = uinput_request_find(udev, ff_erase.request_id); in uinput_ioctl_handler()
987 req = uinput_request_find(udev, ff_up.request_id); in uinput_ioctl_handler()
1004 req = uinput_request_find(udev, ff_erase.request_id); in uinput_ioctl_handler()
1020 if (udev->state != UIST_CREATED) { in uinput_ioctl_handler()
1024 name = dev_name(&udev->dev->dev); in uinput_ioctl_handler()
1029 retval = uinput_abs_setup(udev, p, size); in uinput_ioctl_handler()
1035 mutex_unlock(&udev->mutex); in uinput_ioctl_handler()