Lines Matching refs:udev
48 struct uinput_device *udev = input_get_drvdata(dev); in uinput_dev_event() local
50 udev->buff[udev->head].type = type; in uinput_dev_event()
51 udev->buff[udev->head].code = code; in uinput_dev_event()
52 udev->buff[udev->head].value = value; in uinput_dev_event()
53 do_gettimeofday(&udev->buff[udev->head].time); in uinput_dev_event()
54 udev->head = (udev->head + 1) % UINPUT_BUFFER_SIZE; in uinput_dev_event()
56 wake_up_interruptible(&udev->waitq); in uinput_dev_event()
62 static bool uinput_request_alloc_id(struct uinput_device *udev, in uinput_request_alloc_id() argument
68 spin_lock(&udev->requests_lock); in uinput_request_alloc_id()
71 if (!udev->requests[id]) { in uinput_request_alloc_id()
73 udev->requests[id] = request; in uinput_request_alloc_id()
79 spin_unlock(&udev->requests_lock); in uinput_request_alloc_id()
83 static struct uinput_request *uinput_request_find(struct uinput_device *udev, in uinput_request_find() argument
90 return udev->requests[id]; in uinput_request_find()
93 static int uinput_request_reserve_slot(struct uinput_device *udev, in uinput_request_reserve_slot() argument
97 return wait_event_interruptible(udev->requests_waitq, in uinput_request_reserve_slot()
98 uinput_request_alloc_id(udev, request)); in uinput_request_reserve_slot()
101 static void uinput_request_done(struct uinput_device *udev, in uinput_request_done() argument
105 udev->requests[request->id] = NULL; in uinput_request_done()
106 wake_up(&udev->requests_waitq); in uinput_request_done()
111 static int uinput_request_send(struct uinput_device *udev, in uinput_request_send() argument
116 retval = mutex_lock_interruptible(&udev->mutex); in uinput_request_send()
120 if (udev->state != UIST_CREATED) { in uinput_request_send()
131 uinput_dev_event(udev->dev, EV_UINPUT, request->code, request->id); in uinput_request_send()
134 mutex_unlock(&udev->mutex); in uinput_request_send()
138 static int uinput_request_submit(struct uinput_device *udev, in uinput_request_submit() argument
143 error = uinput_request_reserve_slot(udev, request); in uinput_request_submit()
147 error = uinput_request_send(udev, request); in uinput_request_submit()
149 uinput_request_done(udev, request); in uinput_request_submit()
161 static void uinput_flush_requests(struct uinput_device *udev) in uinput_flush_requests() argument
166 spin_lock(&udev->requests_lock); in uinput_flush_requests()
169 request = udev->requests[i]; in uinput_flush_requests()
172 uinput_request_done(udev, request); in uinput_flush_requests()
176 spin_unlock(&udev->requests_lock); in uinput_flush_requests()
198 struct uinput_device *udev = input_get_drvdata(dev); in uinput_dev_upload_effect() local
216 return uinput_request_submit(udev, &request); in uinput_dev_upload_effect()
221 struct uinput_device *udev = input_get_drvdata(dev); in uinput_dev_erase_effect() local
230 return uinput_request_submit(udev, &request); in uinput_dev_erase_effect()
233 static void uinput_destroy_device(struct uinput_device *udev) in uinput_destroy_device() argument
236 struct input_dev *dev = udev->dev; in uinput_destroy_device()
237 enum uinput_state old_state = udev->state; in uinput_destroy_device()
239 udev->state = UIST_NEW_DEVICE; in uinput_destroy_device()
245 uinput_flush_requests(udev); in uinput_destroy_device()
252 udev->dev = NULL; in uinput_destroy_device()
256 static int uinput_create_device(struct uinput_device *udev) in uinput_create_device() argument
258 struct input_dev *dev = udev->dev; in uinput_create_device()
261 if (udev->state != UIST_SETUP_COMPLETE) { in uinput_create_device()
266 if (udev->ff_effects_max) { in uinput_create_device()
267 error = input_ff_create(dev, udev->ff_effects_max); in uinput_create_device()
278 error = input_register_device(udev->dev); in uinput_create_device()
282 udev->state = UIST_CREATED; in uinput_create_device()
287 fail1: uinput_destroy_device(udev); in uinput_create_device()
361 static int uinput_allocate_device(struct uinput_device *udev) in uinput_allocate_device() argument
363 udev->dev = input_allocate_device(); in uinput_allocate_device()
364 if (!udev->dev) in uinput_allocate_device()
367 udev->dev->event = uinput_dev_event; in uinput_allocate_device()
368 input_set_drvdata(udev->dev, udev); in uinput_allocate_device()
373 static int uinput_setup_device(struct uinput_device *udev, in uinput_setup_device() argument
384 if (!udev->dev) { in uinput_setup_device()
385 retval = uinput_allocate_device(udev); in uinput_setup_device()
390 dev = udev->dev; in uinput_setup_device()
396 udev->ff_effects_max = user_dev->ff_effects_max; in uinput_setup_device()
428 udev->state = UIST_SETUP_COMPLETE; in uinput_setup_device()
436 static ssize_t uinput_inject_events(struct uinput_device *udev, in uinput_inject_events() argument
455 input_event(udev->dev, ev.type, ev.code, ev.value); in uinput_inject_events()
465 struct uinput_device *udev = file->private_data; in uinput_write() local
471 retval = mutex_lock_interruptible(&udev->mutex); in uinput_write()
475 retval = udev->state == UIST_CREATED ? in uinput_write()
476 uinput_inject_events(udev, buffer, count) : in uinput_write()
477 uinput_setup_device(udev, buffer, count); in uinput_write()
479 mutex_unlock(&udev->mutex); in uinput_write()
484 static bool uinput_fetch_next_event(struct uinput_device *udev, in uinput_fetch_next_event() argument
489 spin_lock_irq(&udev->dev->event_lock); in uinput_fetch_next_event()
491 have_event = udev->head != udev->tail; in uinput_fetch_next_event()
493 *event = udev->buff[udev->tail]; in uinput_fetch_next_event()
494 udev->tail = (udev->tail + 1) % UINPUT_BUFFER_SIZE; in uinput_fetch_next_event()
497 spin_unlock_irq(&udev->dev->event_lock); in uinput_fetch_next_event()
502 static ssize_t uinput_events_to_user(struct uinput_device *udev, in uinput_events_to_user() argument
509 uinput_fetch_next_event(udev, &event)) { in uinput_events_to_user()
523 struct uinput_device *udev = file->private_data; in uinput_read() local
530 retval = mutex_lock_interruptible(&udev->mutex); in uinput_read()
534 if (udev->state != UIST_CREATED) in uinput_read()
536 else if (udev->head == udev->tail && in uinput_read()
540 retval = uinput_events_to_user(udev, buffer, count); in uinput_read()
542 mutex_unlock(&udev->mutex); in uinput_read()
548 retval = wait_event_interruptible(udev->waitq, in uinput_read()
549 udev->head != udev->tail || in uinput_read()
550 udev->state != UIST_CREATED); in uinput_read()
558 struct uinput_device *udev = file->private_data; in uinput_poll() local
560 poll_wait(file, &udev->waitq, wait); in uinput_poll()
562 if (udev->head != udev->tail) in uinput_poll()
570 struct uinput_device *udev = file->private_data; in uinput_release() local
572 uinput_destroy_device(udev); in uinput_release()
573 kfree(udev); in uinput_release()
668 if (udev->state == UIST_CREATED) \
672 else set_bit((_arg), udev->dev->_bit); \
705 struct uinput_device *udev = file->private_data; in uinput_ioctl_handler() local
713 retval = mutex_lock_interruptible(&udev->mutex); in uinput_ioctl_handler()
717 if (!udev->dev) { in uinput_ioctl_handler()
718 retval = uinput_allocate_device(udev); in uinput_ioctl_handler()
731 retval = uinput_create_device(udev); in uinput_ioctl_handler()
735 uinput_destroy_device(udev); in uinput_ioctl_handler()
779 if (udev->state == UIST_CREATED) { in uinput_ioctl_handler()
790 kfree(udev->dev->phys); in uinput_ioctl_handler()
791 udev->dev->phys = phys; in uinput_ioctl_handler()
799 req = uinput_request_find(udev, ff_up.request_id); in uinput_ioctl_handler()
822 req = uinput_request_find(udev, ff_erase.request_id); in uinput_ioctl_handler()
842 req = uinput_request_find(udev, ff_up.request_id); in uinput_ioctl_handler()
850 uinput_request_done(udev, req); in uinput_ioctl_handler()
859 req = uinput_request_find(udev, ff_erase.request_id); in uinput_ioctl_handler()
866 uinput_request_done(udev, req); in uinput_ioctl_handler()
875 if (udev->state != UIST_CREATED) { in uinput_ioctl_handler()
879 name = dev_name(&udev->dev->dev); in uinput_ioctl_handler()
886 mutex_unlock(&udev->mutex); in uinput_ioctl_handler()