uhid 59 drivers/hid/uhid.c struct uhid_device *uhid = container_of(work, struct uhid_device, worker); uhid 62 drivers/hid/uhid.c ret = hid_add_device(uhid->hid); uhid 64 drivers/hid/uhid.c hid_err(uhid->hid, "Cannot register HID device: error %d\n", ret); uhid 66 drivers/hid/uhid.c hid_destroy_device(uhid->hid); uhid 67 drivers/hid/uhid.c uhid->hid = NULL; uhid 68 drivers/hid/uhid.c uhid->running = false; uhid 72 drivers/hid/uhid.c static void uhid_queue(struct uhid_device *uhid, struct uhid_event *ev) uhid 76 drivers/hid/uhid.c newhead = (uhid->head + 1) % UHID_BUFSIZE; uhid 78 drivers/hid/uhid.c if (newhead != uhid->tail) { uhid 79 drivers/hid/uhid.c uhid->outq[uhid->head] = ev; uhid 80 drivers/hid/uhid.c uhid->head = newhead; uhid 81 drivers/hid/uhid.c wake_up_interruptible(&uhid->waitq); uhid 83 drivers/hid/uhid.c hid_warn(uhid->hid, "Output queue is full\n"); uhid 88 drivers/hid/uhid.c static int uhid_queue_event(struct uhid_device *uhid, __u32 event) uhid 99 drivers/hid/uhid.c spin_lock_irqsave(&uhid->qlock, flags); uhid 100 drivers/hid/uhid.c uhid_queue(uhid, ev); uhid 101 drivers/hid/uhid.c spin_unlock_irqrestore(&uhid->qlock, flags); uhid 108 drivers/hid/uhid.c struct uhid_device *uhid = hid->driver_data; uhid 125 drivers/hid/uhid.c spin_lock_irqsave(&uhid->qlock, flags); uhid 126 drivers/hid/uhid.c uhid_queue(uhid, ev); uhid 127 drivers/hid/uhid.c spin_unlock_irqrestore(&uhid->qlock, flags); uhid 134 drivers/hid/uhid.c struct uhid_device *uhid = hid->driver_data; uhid 137 drivers/hid/uhid.c uhid_queue_event(uhid, UHID_STOP); uhid 142 drivers/hid/uhid.c struct uhid_device *uhid = hid->driver_data; uhid 144 drivers/hid/uhid.c return uhid_queue_event(uhid, UHID_OPEN); uhid 149 drivers/hid/uhid.c struct uhid_device *uhid = hid->driver_data; uhid 151 drivers/hid/uhid.c uhid_queue_event(uhid, UHID_CLOSE); uhid 156 drivers/hid/uhid.c struct uhid_device *uhid = hid->driver_data; uhid 158 drivers/hid/uhid.c return hid_parse_report(hid, uhid->rd_data, uhid->rd_size); uhid 162 drivers/hid/uhid.c static int __uhid_report_queue_and_wait(struct uhid_device *uhid, uhid 169 drivers/hid/uhid.c spin_lock_irqsave(&uhid->qlock, flags); uhid 170 drivers/hid/uhid.c *report_id = ++uhid->report_id; uhid 171 drivers/hid/uhid.c uhid->report_type = ev->type + 1; uhid 172 drivers/hid/uhid.c uhid->report_running = true; uhid 173 drivers/hid/uhid.c uhid_queue(uhid, ev); uhid 174 drivers/hid/uhid.c spin_unlock_irqrestore(&uhid->qlock, flags); uhid 176 drivers/hid/uhid.c ret = wait_event_interruptible_timeout(uhid->report_wait, uhid 177 drivers/hid/uhid.c !uhid->report_running || !uhid->running, uhid 179 drivers/hid/uhid.c if (!ret || !uhid->running || uhid->report_running) uhid 186 drivers/hid/uhid.c uhid->report_running = false; uhid 191 drivers/hid/uhid.c static void uhid_report_wake_up(struct uhid_device *uhid, u32 id, uhid 196 drivers/hid/uhid.c spin_lock_irqsave(&uhid->qlock, flags); uhid 199 drivers/hid/uhid.c if (uhid->report_type != ev->type || uhid->report_id != id) uhid 201 drivers/hid/uhid.c if (!uhid->report_running) uhid 204 drivers/hid/uhid.c memcpy(&uhid->report_buf, ev, sizeof(*ev)); uhid 205 drivers/hid/uhid.c uhid->report_running = false; uhid 206 drivers/hid/uhid.c wake_up_interruptible(&uhid->report_wait); uhid 209 drivers/hid/uhid.c spin_unlock_irqrestore(&uhid->qlock, flags); uhid 215 drivers/hid/uhid.c struct uhid_device *uhid = hid->driver_data; uhid 220 drivers/hid/uhid.c if (!uhid->running) uhid 231 drivers/hid/uhid.c ret = mutex_lock_interruptible(&uhid->report_lock); uhid 238 drivers/hid/uhid.c ret = __uhid_report_queue_and_wait(uhid, ev, &ev->u.get_report.id); uhid 242 drivers/hid/uhid.c req = &uhid->report_buf.u.get_report_reply; uhid 251 drivers/hid/uhid.c mutex_unlock(&uhid->report_lock); uhid 258 drivers/hid/uhid.c struct uhid_device *uhid = hid->driver_data; uhid 262 drivers/hid/uhid.c if (!uhid->running || count > UHID_DATA_MAX) uhid 275 drivers/hid/uhid.c ret = mutex_lock_interruptible(&uhid->report_lock); uhid 282 drivers/hid/uhid.c ret = __uhid_report_queue_and_wait(uhid, ev, &ev->u.set_report.id); uhid 286 drivers/hid/uhid.c if (uhid->report_buf.u.set_report_reply.err) uhid 292 drivers/hid/uhid.c mutex_unlock(&uhid->report_lock); uhid 329 drivers/hid/uhid.c struct uhid_device *uhid = hid->driver_data; uhid 357 drivers/hid/uhid.c spin_lock_irqsave(&uhid->qlock, flags); uhid 358 drivers/hid/uhid.c uhid_queue(uhid, ev); uhid 359 drivers/hid/uhid.c spin_unlock_irqrestore(&uhid->qlock, flags); uhid 469 drivers/hid/uhid.c static int uhid_dev_create2(struct uhid_device *uhid, uhid 477 drivers/hid/uhid.c if (uhid->running) uhid 488 drivers/hid/uhid.c uhid->rd_size = rd_size; uhid 489 drivers/hid/uhid.c uhid->rd_data = rd_data; uhid 511 drivers/hid/uhid.c hid->driver_data = uhid; uhid 514 drivers/hid/uhid.c uhid->hid = hid; uhid 515 drivers/hid/uhid.c uhid->running = true; uhid 521 drivers/hid/uhid.c schedule_work(&uhid->worker); uhid 526 drivers/hid/uhid.c kfree(uhid->rd_data); uhid 527 drivers/hid/uhid.c uhid->rd_data = NULL; uhid 528 drivers/hid/uhid.c uhid->rd_size = 0; uhid 532 drivers/hid/uhid.c static int uhid_dev_create(struct uhid_device *uhid, uhid 554 drivers/hid/uhid.c return uhid_dev_create2(uhid, ev); uhid 557 drivers/hid/uhid.c static int uhid_dev_destroy(struct uhid_device *uhid) uhid 559 drivers/hid/uhid.c if (!uhid->running) uhid 562 drivers/hid/uhid.c uhid->running = false; uhid 563 drivers/hid/uhid.c wake_up_interruptible(&uhid->report_wait); uhid 565 drivers/hid/uhid.c cancel_work_sync(&uhid->worker); uhid 567 drivers/hid/uhid.c hid_destroy_device(uhid->hid); uhid 568 drivers/hid/uhid.c kfree(uhid->rd_data); uhid 573 drivers/hid/uhid.c static int uhid_dev_input(struct uhid_device *uhid, struct uhid_event *ev) uhid 575 drivers/hid/uhid.c if (!uhid->running) uhid 578 drivers/hid/uhid.c hid_input_report(uhid->hid, HID_INPUT_REPORT, ev->u.input.data, uhid 584 drivers/hid/uhid.c static int uhid_dev_input2(struct uhid_device *uhid, struct uhid_event *ev) uhid 586 drivers/hid/uhid.c if (!uhid->running) uhid 589 drivers/hid/uhid.c hid_input_report(uhid->hid, HID_INPUT_REPORT, ev->u.input2.data, uhid 595 drivers/hid/uhid.c static int uhid_dev_get_report_reply(struct uhid_device *uhid, uhid 598 drivers/hid/uhid.c if (!uhid->running) uhid 601 drivers/hid/uhid.c uhid_report_wake_up(uhid, ev->u.get_report_reply.id, ev); uhid 605 drivers/hid/uhid.c static int uhid_dev_set_report_reply(struct uhid_device *uhid, uhid 608 drivers/hid/uhid.c if (!uhid->running) uhid 611 drivers/hid/uhid.c uhid_report_wake_up(uhid, ev->u.set_report_reply.id, ev); uhid 617 drivers/hid/uhid.c struct uhid_device *uhid; uhid 619 drivers/hid/uhid.c uhid = kzalloc(sizeof(*uhid), GFP_KERNEL); uhid 620 drivers/hid/uhid.c if (!uhid) uhid 623 drivers/hid/uhid.c mutex_init(&uhid->devlock); uhid 624 drivers/hid/uhid.c mutex_init(&uhid->report_lock); uhid 625 drivers/hid/uhid.c spin_lock_init(&uhid->qlock); uhid 626 drivers/hid/uhid.c init_waitqueue_head(&uhid->waitq); uhid 627 drivers/hid/uhid.c init_waitqueue_head(&uhid->report_wait); uhid 628 drivers/hid/uhid.c uhid->running = false; uhid 629 drivers/hid/uhid.c INIT_WORK(&uhid->worker, uhid_device_add_worker); uhid 631 drivers/hid/uhid.c file->private_data = uhid; uhid 639 drivers/hid/uhid.c struct uhid_device *uhid = file->private_data; uhid 642 drivers/hid/uhid.c uhid_dev_destroy(uhid); uhid 645 drivers/hid/uhid.c kfree(uhid->outq[i]); uhid 647 drivers/hid/uhid.c kfree(uhid); uhid 655 drivers/hid/uhid.c struct uhid_device *uhid = file->private_data; uhid 666 drivers/hid/uhid.c if (uhid->head == uhid->tail) uhid 669 drivers/hid/uhid.c ret = wait_event_interruptible(uhid->waitq, uhid 670 drivers/hid/uhid.c uhid->head != uhid->tail); uhid 675 drivers/hid/uhid.c ret = mutex_lock_interruptible(&uhid->devlock); uhid 679 drivers/hid/uhid.c if (uhid->head == uhid->tail) { uhid 680 drivers/hid/uhid.c mutex_unlock(&uhid->devlock); uhid 683 drivers/hid/uhid.c len = min(count, sizeof(**uhid->outq)); uhid 684 drivers/hid/uhid.c if (copy_to_user(buffer, uhid->outq[uhid->tail], len)) { uhid 687 drivers/hid/uhid.c kfree(uhid->outq[uhid->tail]); uhid 688 drivers/hid/uhid.c uhid->outq[uhid->tail] = NULL; uhid 690 drivers/hid/uhid.c spin_lock_irqsave(&uhid->qlock, flags); uhid 691 drivers/hid/uhid.c uhid->tail = (uhid->tail + 1) % UHID_BUFSIZE; uhid 692 drivers/hid/uhid.c spin_unlock_irqrestore(&uhid->qlock, flags); uhid 696 drivers/hid/uhid.c mutex_unlock(&uhid->devlock); uhid 703 drivers/hid/uhid.c struct uhid_device *uhid = file->private_data; uhid 711 drivers/hid/uhid.c ret = mutex_lock_interruptible(&uhid->devlock); uhid 715 drivers/hid/uhid.c memset(&uhid->input_buf, 0, sizeof(uhid->input_buf)); uhid 716 drivers/hid/uhid.c len = min(count, sizeof(uhid->input_buf)); uhid 718 drivers/hid/uhid.c ret = uhid_event_from_user(buffer, len, &uhid->input_buf); uhid 722 drivers/hid/uhid.c switch (uhid->input_buf.type) { uhid 735 drivers/hid/uhid.c ret = uhid_dev_create(uhid, &uhid->input_buf); uhid 738 drivers/hid/uhid.c ret = uhid_dev_create2(uhid, &uhid->input_buf); uhid 741 drivers/hid/uhid.c ret = uhid_dev_destroy(uhid); uhid 744 drivers/hid/uhid.c ret = uhid_dev_input(uhid, &uhid->input_buf); uhid 747 drivers/hid/uhid.c ret = uhid_dev_input2(uhid, &uhid->input_buf); uhid 750 drivers/hid/uhid.c ret = uhid_dev_get_report_reply(uhid, &uhid->input_buf); uhid 753 drivers/hid/uhid.c ret = uhid_dev_set_report_reply(uhid, &uhid->input_buf); uhid 760 drivers/hid/uhid.c mutex_unlock(&uhid->devlock); uhid 768 drivers/hid/uhid.c struct uhid_device *uhid = file->private_data; uhid 771 drivers/hid/uhid.c poll_wait(file, &uhid->waitq, wait); uhid 773 drivers/hid/uhid.c if (uhid->head != uhid->tail) uhid 681 include/linux/hid.h #define HID_USAGE_ID(uhid, utype, ucode) \ uhid 682 include/linux/hid.h .usage_hid = (uhid), .usage_type = (utype), .usage_code = (ucode)