Lines Matching refs:hiddev
49 struct hiddev { struct
65 struct hiddev *hiddev; argument
164 struct hiddev *hiddev = hid->hiddev; in hiddev_send_event() local
168 spin_lock_irqsave(&hiddev->list_lock, flags); in hiddev_send_event()
169 list_for_each_entry(list, &hiddev->list, node) { in hiddev_send_event()
178 spin_unlock_irqrestore(&hiddev->list_lock, flags); in hiddev_send_event()
180 wake_up_interruptible(&hiddev->wait); in hiddev_send_event()
242 spin_lock_irqsave(&list->hiddev->list_lock, flags); in hiddev_release()
244 spin_unlock_irqrestore(&list->hiddev->list_lock, flags); in hiddev_release()
246 mutex_lock(&list->hiddev->existancelock); in hiddev_release()
247 if (!--list->hiddev->open) { in hiddev_release()
248 if (list->hiddev->exist) { in hiddev_release()
249 usbhid_close(list->hiddev->hid); in hiddev_release()
250 usbhid_put_power(list->hiddev->hid); in hiddev_release()
252 mutex_unlock(&list->hiddev->existancelock); in hiddev_release()
253 kfree(list->hiddev); in hiddev_release()
259 mutex_unlock(&list->hiddev->existancelock); in hiddev_release()
273 struct hiddev *hiddev; in hiddev_open() local
280 hiddev = hid->hiddev; in hiddev_open()
285 list->hiddev = hiddev; in hiddev_open()
292 if (list->hiddev->exist) { in hiddev_open()
293 if (!list->hiddev->open++) { in hiddev_open()
294 res = usbhid_open(hiddev->hid); in hiddev_open()
305 spin_lock_irq(&list->hiddev->list_lock); in hiddev_open()
306 list_add_tail(&list->node, &hiddev->list); in hiddev_open()
307 spin_unlock_irq(&list->hiddev->list_lock); in hiddev_open()
309 mutex_lock(&hiddev->existancelock); in hiddev_open()
310 if (!list->hiddev->open++) in hiddev_open()
311 if (list->hiddev->exist) { in hiddev_open()
312 struct hid_device *hid = hiddev->hid; in hiddev_open()
320 mutex_unlock(&hiddev->existancelock); in hiddev_open()
323 mutex_unlock(&hiddev->existancelock); in hiddev_open()
361 prepare_to_wait(&list->hiddev->wait, &wait, TASK_INTERRUPTIBLE); in hiddev_read()
368 if (!list->hiddev->exist) { in hiddev_read()
381 finish_wait(&list->hiddev->wait, &wait); in hiddev_read()
386 finish_wait(&list->hiddev->wait, &wait); in hiddev_read()
438 poll_wait(file, &list->hiddev->wait, wait); in hiddev_poll()
441 if (!list->hiddev->exist) in hiddev_poll()
449 static noinline int hiddev_ioctl_usage(struct hiddev *hiddev, unsigned int cmd, void __user *user_a… in hiddev_ioctl_usage() argument
451 struct hid_device *hid = hiddev->hid; in hiddev_ioctl_usage()
568 static noinline int hiddev_ioctl_string(struct hiddev *hiddev, unsigned int cmd, void __user *user_… in hiddev_ioctl_string() argument
570 struct hid_device *hid = hiddev->hid; in hiddev_ioctl_string()
599 struct hiddev *hiddev = list->hiddev; in hiddev_ioctl() local
612 mutex_lock(&hiddev->existancelock); in hiddev_ioctl()
613 if (!hiddev->exist) { in hiddev_ioctl()
618 hid = hiddev->hid; in hiddev_ioctl()
687 r = hiddev_ioctl_string(hiddev, cmd, user_arg); in hiddev_ioctl()
793 r = hiddev_ioctl_usage(hiddev, cmd, user_arg); in hiddev_ioctl()
837 mutex_unlock(&hiddev->existancelock); in hiddev_ioctl()
880 struct hiddev *hiddev; in hiddev_connect() local
896 if (!(hiddev = kzalloc(sizeof(struct hiddev), GFP_KERNEL))) in hiddev_connect()
899 init_waitqueue_head(&hiddev->wait); in hiddev_connect()
900 INIT_LIST_HEAD(&hiddev->list); in hiddev_connect()
901 spin_lock_init(&hiddev->list_lock); in hiddev_connect()
902 mutex_init(&hiddev->existancelock); in hiddev_connect()
903 hid->hiddev = hiddev; in hiddev_connect()
904 hiddev->hid = hid; in hiddev_connect()
905 hiddev->exist = 1; in hiddev_connect()
909 hid->hiddev = NULL; in hiddev_connect()
910 kfree(hiddev); in hiddev_connect()
923 struct hiddev *hiddev = hid->hiddev; in hiddev_disconnect() local
928 mutex_lock(&hiddev->existancelock); in hiddev_disconnect()
929 hiddev->exist = 0; in hiddev_disconnect()
931 if (hiddev->open) { in hiddev_disconnect()
932 mutex_unlock(&hiddev->existancelock); in hiddev_disconnect()
933 usbhid_close(hiddev->hid); in hiddev_disconnect()
934 wake_up_interruptible(&hiddev->wait); in hiddev_disconnect()
936 mutex_unlock(&hiddev->existancelock); in hiddev_disconnect()
937 kfree(hiddev); in hiddev_disconnect()