Lines Matching refs:list
55 struct list_head list; member
83 struct list_head *list; in hiddev_lookup_report() local
100 list = report_enum->report_list.next; in hiddev_lookup_report()
101 report = list_entry(list, struct hid_report, list); in hiddev_lookup_report()
110 list = report->list.next; in hiddev_lookup_report()
111 if (list == &report_enum->report_list) in hiddev_lookup_report()
114 report = list_entry(list, struct hid_report, list); in hiddev_lookup_report()
144 list_for_each_entry(report, &report_enum->report_list, list) { in hiddev_lookup_usage()
165 struct hiddev_list *list; in hiddev_send_event() local
169 list_for_each_entry(list, &hiddev->list, node) { in hiddev_send_event()
171 (list->flags & HIDDEV_FLAG_REPORT) != 0) { in hiddev_send_event()
172 list->buffer[list->head] = *uref; in hiddev_send_event()
173 list->head = (list->head + 1) & in hiddev_send_event()
175 kill_fasync(&list->fasync, SIGIO, POLL_IN); in hiddev_send_event()
228 struct hiddev_list *list = file->private_data; in hiddev_fasync() local
230 return fasync_helper(fd, file, on, &list->fasync); in hiddev_fasync()
239 struct hiddev_list *list = file->private_data; in hiddev_release() local
242 spin_lock_irqsave(&list->hiddev->list_lock, flags); in hiddev_release()
243 list_del(&list->node); 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()
254 vfree(list); in hiddev_release()
259 mutex_unlock(&list->hiddev->existancelock); in hiddev_release()
260 vfree(list); in hiddev_release()
270 struct hiddev_list *list; in hiddev_open() local
282 if (!(list = vzalloc(sizeof(struct hiddev_list)))) in hiddev_open()
284 mutex_init(&list->thread_lock); in hiddev_open()
285 list->hiddev = hiddev; in hiddev_open()
286 file->private_data = list; in hiddev_open()
292 if (list->hiddev->exist) { in hiddev_open()
293 if (!list->hiddev->open++) { 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()
310 if (!list->hiddev->open++) in hiddev_open()
311 if (list->hiddev->exist) { in hiddev_open()
326 vfree(list); in hiddev_open()
344 struct hiddev_list *list = file->private_data; in hiddev_read() local
348 event_size = ((list->flags & HIDDEV_FLAG_UREF) != 0) ? in hiddev_read()
355 retval = mutex_lock_interruptible(&list->thread_lock); in hiddev_read()
360 if (list->head == list->tail) { in hiddev_read()
361 prepare_to_wait(&list->hiddev->wait, &wait, TASK_INTERRUPTIBLE); in hiddev_read()
363 while (list->head == list->tail) { in hiddev_read()
368 if (!list->hiddev->exist) { in hiddev_read()
378 mutex_unlock(&list->thread_lock); in hiddev_read()
380 if (mutex_lock_interruptible(&list->thread_lock)) { in hiddev_read()
381 finish_wait(&list->hiddev->wait, &wait); in hiddev_read()
386 finish_wait(&list->hiddev->wait, &wait); in hiddev_read()
391 mutex_unlock(&list->thread_lock); in hiddev_read()
396 while (list->head != list->tail && in hiddev_read()
398 if ((list->flags & HIDDEV_FLAG_UREF) == 0) { in hiddev_read()
399 if (list->buffer[list->tail].field_index != HID_FIELD_INDEX_NONE) { in hiddev_read()
402 event.hid = list->buffer[list->tail].usage_code; in hiddev_read()
403 event.value = list->buffer[list->tail].value; in hiddev_read()
405 mutex_unlock(&list->thread_lock); in hiddev_read()
411 if (list->buffer[list->tail].field_index != HID_FIELD_INDEX_NONE || in hiddev_read()
412 (list->flags & HIDDEV_FLAG_REPORT) != 0) { in hiddev_read()
414 … if (copy_to_user(buffer + retval, list->buffer + list->tail, sizeof(struct hiddev_usage_ref))) { in hiddev_read()
415 mutex_unlock(&list->thread_lock); in hiddev_read()
421 list->tail = (list->tail + 1) & (HIDDEV_BUFFER_SIZE - 1); in hiddev_read()
425 mutex_unlock(&list->thread_lock); in hiddev_read()
436 struct hiddev_list *list = file->private_data; in hiddev_poll() local
438 poll_wait(file, &list->hiddev->wait, wait); in hiddev_poll()
439 if (list->head != list->tail) in hiddev_poll()
441 if (!list->hiddev->exist) in hiddev_poll()
598 struct hiddev_list *list = file->private_data; in hiddev_ioctl() local
599 struct hiddev *hiddev = list->hiddev; in hiddev_ioctl()
662 r = put_user(list->flags, (int __user *)arg) ? in hiddev_ioctl()
680 list->flags = newflags; in hiddev_ioctl()
900 INIT_LIST_HEAD(&hiddev->list); in hiddev_connect()