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)