Lines Matching refs:udev

74 	struct uinput_device	*udev = input_get_drvdata(dev);  in uinput_dev_event()  local
77 udev->buff[udev->head].type = type; in uinput_dev_event()
78 udev->buff[udev->head].code = code; in uinput_dev_event()
79 udev->buff[udev->head].value = value; in uinput_dev_event()
81 udev->buff[udev->head].input_event_sec = ts.tv_sec; in uinput_dev_event()
82 udev->buff[udev->head].input_event_usec = ts.tv_nsec / NSEC_PER_USEC; in uinput_dev_event()
83 udev->head = (udev->head + 1) % UINPUT_BUFFER_SIZE; in uinput_dev_event()
85 wake_up_interruptible(&udev->waitq); in uinput_dev_event()
91 static bool uinput_request_alloc_id(struct uinput_device *udev, in uinput_request_alloc_id() argument
97 spin_lock(&udev->requests_lock); in uinput_request_alloc_id()
100 if (!udev->requests[id]) { in uinput_request_alloc_id()
102 udev->requests[id] = request; in uinput_request_alloc_id()
108 spin_unlock(&udev->requests_lock); in uinput_request_alloc_id()
112 static struct uinput_request *uinput_request_find(struct uinput_device *udev, in uinput_request_find() argument
119 return udev->requests[id]; in uinput_request_find()
122 static int uinput_request_reserve_slot(struct uinput_device *udev, in uinput_request_reserve_slot() argument
126 return wait_event_interruptible(udev->requests_waitq, in uinput_request_reserve_slot()
127 uinput_request_alloc_id(udev, request)); in uinput_request_reserve_slot()
130 static void uinput_request_release_slot(struct uinput_device *udev, in uinput_request_release_slot() argument
134 spin_lock(&udev->requests_lock); in uinput_request_release_slot()
135 udev->requests[id] = NULL; in uinput_request_release_slot()
136 spin_unlock(&udev->requests_lock); in uinput_request_release_slot()
138 wake_up(&udev->requests_waitq); in uinput_request_release_slot()
141 static int uinput_request_send(struct uinput_device *udev, in uinput_request_send() argument
146 retval = mutex_lock_interruptible(&udev->mutex); in uinput_request_send()
150 if (udev->state != UIST_CREATED) { in uinput_request_send()
161 uinput_dev_event(udev->dev, EV_UINPUT, request->code, request->id); in uinput_request_send()
164 mutex_unlock(&udev->mutex); in uinput_request_send()
168 static int uinput_request_submit(struct uinput_device *udev, in uinput_request_submit() argument
173 retval = uinput_request_reserve_slot(udev, request); in uinput_request_submit()
177 retval = uinput_request_send(udev, request); in uinput_request_submit()
189 uinput_request_release_slot(udev, request->id); in uinput_request_submit()
197 static void uinput_flush_requests(struct uinput_device *udev) in uinput_flush_requests() argument
202 spin_lock(&udev->requests_lock); in uinput_flush_requests()
205 request = udev->requests[i]; in uinput_flush_requests()
212 spin_unlock(&udev->requests_lock); in uinput_flush_requests()
234 struct uinput_device *udev = input_get_drvdata(dev); in uinput_dev_upload_effect() local
252 return uinput_request_submit(udev, &request); in uinput_dev_upload_effect()
257 struct uinput_device *udev = input_get_drvdata(dev); in uinput_dev_erase_effect() local
266 return uinput_request_submit(udev, &request); in uinput_dev_erase_effect()
281 static void uinput_destroy_device(struct uinput_device *udev) in uinput_destroy_device() argument
284 struct input_dev *dev = udev->dev; in uinput_destroy_device()
285 enum uinput_state old_state = udev->state; in uinput_destroy_device()
287 udev->state = UIST_NEW_DEVICE; in uinput_destroy_device()
293 uinput_flush_requests(udev); in uinput_destroy_device()
300 udev->dev = NULL; in uinput_destroy_device()
304 static int uinput_create_device(struct uinput_device *udev) in uinput_create_device() argument
306 struct input_dev *dev = udev->dev; in uinput_create_device()
309 if (udev->state != UIST_SETUP_COMPLETE) { in uinput_create_device()
331 if (test_bit(EV_FF, dev->evbit) && !udev->ff_effects_max) { in uinput_create_device()
338 if (udev->ff_effects_max) { in uinput_create_device()
339 error = input_ff_create(dev, udev->ff_effects_max); in uinput_create_device()
358 input_set_drvdata(udev->dev, udev); in uinput_create_device()
360 error = input_register_device(udev->dev); in uinput_create_device()
364 udev->state = UIST_CREATED; in uinput_create_device()
369 fail1: uinput_destroy_device(udev); in uinput_create_device()
442 static int uinput_dev_setup(struct uinput_device *udev, in uinput_dev_setup() argument
448 if (udev->state == UIST_CREATED) in uinput_dev_setup()
457 dev = udev->dev; in uinput_dev_setup()
459 udev->ff_effects_max = setup.ff_effects_max; in uinput_dev_setup()
466 udev->state = UIST_SETUP_COMPLETE; in uinput_dev_setup()
470 static int uinput_abs_setup(struct uinput_device *udev, in uinput_abs_setup() argument
480 if (udev->state == UIST_CREATED) in uinput_abs_setup()
489 dev = udev->dev; in uinput_abs_setup()
505 static int uinput_setup_device_legacy(struct uinput_device *udev, in uinput_setup_device_legacy() argument
516 if (!udev->dev) { in uinput_setup_device_legacy()
517 udev->dev = input_allocate_device(); in uinput_setup_device_legacy()
518 if (!udev->dev) in uinput_setup_device_legacy()
522 dev = udev->dev; in uinput_setup_device_legacy()
528 udev->ff_effects_max = user_dev->ff_effects_max; in uinput_setup_device_legacy()
560 udev->state = UIST_SETUP_COMPLETE; in uinput_setup_device_legacy()
568 static ssize_t uinput_inject_events(struct uinput_device *udev, in uinput_inject_events() argument
587 input_event(udev->dev, ev.type, ev.code, ev.value); in uinput_inject_events()
598 struct uinput_device *udev = file->private_data; in uinput_write() local
604 retval = mutex_lock_interruptible(&udev->mutex); in uinput_write()
608 retval = udev->state == UIST_CREATED ? in uinput_write()
609 uinput_inject_events(udev, buffer, count) : in uinput_write()
610 uinput_setup_device_legacy(udev, buffer, count); in uinput_write()
612 mutex_unlock(&udev->mutex); in uinput_write()
617 static bool uinput_fetch_next_event(struct uinput_device *udev, in uinput_fetch_next_event() argument
622 spin_lock_irq(&udev->dev->event_lock); in uinput_fetch_next_event()
624 have_event = udev->head != udev->tail; in uinput_fetch_next_event()
626 *event = udev->buff[udev->tail]; in uinput_fetch_next_event()
627 udev->tail = (udev->tail + 1) % UINPUT_BUFFER_SIZE; in uinput_fetch_next_event()
630 spin_unlock_irq(&udev->dev->event_lock); in uinput_fetch_next_event()
635 static ssize_t uinput_events_to_user(struct uinput_device *udev, in uinput_events_to_user() argument
642 uinput_fetch_next_event(udev, &event)) { in uinput_events_to_user()
656 struct uinput_device *udev = file->private_data; in uinput_read() local
663 retval = mutex_lock_interruptible(&udev->mutex); in uinput_read()
667 if (udev->state != UIST_CREATED) in uinput_read()
669 else if (udev->head == udev->tail && in uinput_read()
673 retval = uinput_events_to_user(udev, buffer, count); in uinput_read()
675 mutex_unlock(&udev->mutex); in uinput_read()
681 retval = wait_event_interruptible(udev->waitq, in uinput_read()
682 udev->head != udev->tail || in uinput_read()
683 udev->state != UIST_CREATED); in uinput_read()
691 struct uinput_device *udev = file->private_data; in uinput_poll() local
693 poll_wait(file, &udev->waitq, wait); in uinput_poll()
695 if (udev->head != udev->tail) in uinput_poll()
703 struct uinput_device *udev = file->private_data; in uinput_release() local
705 uinput_destroy_device(udev); in uinput_release()
706 kfree(udev); in uinput_release()
801 if (udev->state == UIST_CREATED) \
805 else set_bit((_arg), udev->dev->_bit); \
838 struct uinput_device *udev = file->private_data; in uinput_ioctl_handler() local
846 retval = mutex_lock_interruptible(&udev->mutex); in uinput_ioctl_handler()
850 if (!udev->dev) { in uinput_ioctl_handler()
851 udev->dev = input_allocate_device(); in uinput_ioctl_handler()
852 if (!udev->dev) { in uinput_ioctl_handler()
865 retval = uinput_create_device(udev); in uinput_ioctl_handler()
869 uinput_destroy_device(udev); in uinput_ioctl_handler()
873 retval = uinput_dev_setup(udev, p); in uinput_ioctl_handler()
919 if (udev->state == UIST_CREATED) { in uinput_ioctl_handler()
930 kfree(udev->dev->phys); in uinput_ioctl_handler()
931 udev->dev->phys = phys; in uinput_ioctl_handler()
939 req = uinput_request_find(udev, ff_up.request_id); in uinput_ioctl_handler()
962 req = uinput_request_find(udev, ff_erase.request_id); in uinput_ioctl_handler()
982 req = uinput_request_find(udev, ff_up.request_id); in uinput_ioctl_handler()
999 req = uinput_request_find(udev, ff_erase.request_id); in uinput_ioctl_handler()
1015 if (udev->state != UIST_CREATED) { in uinput_ioctl_handler()
1019 name = dev_name(&udev->dev->dev); in uinput_ioctl_handler()
1024 retval = uinput_abs_setup(udev, p, size); in uinput_ioctl_handler()
1030 mutex_unlock(&udev->mutex); in uinput_ioctl_handler()