core.c revision 0c1bc5c626e9783034264ccca4b262b3acc628f1
1/*
2   HIDP implementation for Linux Bluetooth stack (BlueZ).
3   Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
4
5   This program is free software; you can redistribute it and/or modify
6   it under the terms of the GNU General Public License version 2 as
7   published by the Free Software Foundation;
8
9   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
12   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
13   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
14   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
18   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
19   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
20   SOFTWARE IS DISCLAIMED.
21*/
22
23#include <linux/module.h>
24
25#include <linux/types.h>
26#include <linux/errno.h>
27#include <linux/kernel.h>
28#include <linux/sched.h>
29#include <linux/slab.h>
30#include <linux/poll.h>
31#include <linux/freezer.h>
32#include <linux/fcntl.h>
33#include <linux/skbuff.h>
34#include <linux/socket.h>
35#include <linux/ioctl.h>
36#include <linux/file.h>
37#include <linux/init.h>
38#include <linux/wait.h>
39#include <linux/mutex.h>
40#include <linux/kthread.h>
41#include <net/sock.h>
42
43#include <linux/input.h>
44#include <linux/hid.h>
45#include <linux/hidraw.h>
46
47#include <net/bluetooth/bluetooth.h>
48#include <net/bluetooth/hci_core.h>
49#include <net/bluetooth/l2cap.h>
50
51#include "hidp.h"
52
53#define VERSION "1.2"
54
55static DECLARE_RWSEM(hidp_session_sem);
56static LIST_HEAD(hidp_session_list);
57
58static unsigned char hidp_keycode[256] = {
59	  0,   0,   0,   0,  30,  48,  46,  32,  18,  33,  34,  35,  23,  36,
60	 37,  38,  50,  49,  24,  25,  16,  19,  31,  20,  22,  47,  17,  45,
61	 21,  44,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  28,   1,
62	 14,  15,  57,  12,  13,  26,  27,  43,  43,  39,  40,  41,  51,  52,
63	 53,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  87,  88,
64	 99,  70, 119, 110, 102, 104, 111, 107, 109, 106, 105, 108, 103,  69,
65	 98,  55,  74,  78,  96,  79,  80,  81,  75,  76,  77,  71,  72,  73,
66	 82,  83,  86, 127, 116, 117, 183, 184, 185, 186, 187, 188, 189, 190,
67	191, 192, 193, 194, 134, 138, 130, 132, 128, 129, 131, 137, 133, 135,
68	136, 113, 115, 114,   0,   0,   0, 121,   0,  89,  93, 124,  92,  94,
69	 95,   0,   0,   0, 122, 123,  90,  91,  85,   0,   0,   0,   0,   0,
70	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
71	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
72	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
73	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
74	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
75	 29,  42,  56, 125,  97,  54, 100, 126, 164, 166, 165, 163, 161, 115,
76	114, 113, 150, 158, 159, 128, 136, 177, 178, 176, 142, 152, 173, 140
77};
78
79static unsigned char hidp_mkeyspat[] = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
80
81static struct hidp_session *__hidp_get_session(bdaddr_t *bdaddr)
82{
83	struct hidp_session *session;
84	struct list_head *p;
85
86	BT_DBG("");
87
88	list_for_each(p, &hidp_session_list) {
89		session = list_entry(p, struct hidp_session, list);
90		if (!bacmp(bdaddr, &session->bdaddr))
91			return session;
92	}
93	return NULL;
94}
95
96static void __hidp_link_session(struct hidp_session *session)
97{
98	__module_get(THIS_MODULE);
99	list_add(&session->list, &hidp_session_list);
100
101	hci_conn_hold_device(session->conn);
102}
103
104static void __hidp_unlink_session(struct hidp_session *session)
105{
106	hci_conn_put_device(session->conn);
107
108	list_del(&session->list);
109	module_put(THIS_MODULE);
110}
111
112static void __hidp_copy_session(struct hidp_session *session, struct hidp_conninfo *ci)
113{
114	memset(ci, 0, sizeof(*ci));
115	bacpy(&ci->bdaddr, &session->bdaddr);
116
117	ci->flags = session->flags;
118	ci->state = session->state;
119
120	ci->vendor  = 0x0000;
121	ci->product = 0x0000;
122	ci->version = 0x0000;
123
124	if (session->input) {
125		ci->vendor  = session->input->id.vendor;
126		ci->product = session->input->id.product;
127		ci->version = session->input->id.version;
128		if (session->input->name)
129			strncpy(ci->name, session->input->name, 128);
130		else
131			strncpy(ci->name, "HID Boot Device", 128);
132	}
133
134	if (session->hid) {
135		ci->vendor  = session->hid->vendor;
136		ci->product = session->hid->product;
137		ci->version = session->hid->version;
138		strncpy(ci->name, session->hid->name, 128);
139	}
140}
141
142static int hidp_queue_event(struct hidp_session *session, struct input_dev *dev,
143				unsigned int type, unsigned int code, int value)
144{
145	unsigned char newleds;
146	struct sk_buff *skb;
147
148	BT_DBG("session %p type %d code %d value %d", session, type, code, value);
149
150	if (type != EV_LED)
151		return -1;
152
153	newleds = (!!test_bit(LED_KANA,    dev->led) << 3) |
154		  (!!test_bit(LED_COMPOSE, dev->led) << 3) |
155		  (!!test_bit(LED_SCROLLL, dev->led) << 2) |
156		  (!!test_bit(LED_CAPSL,   dev->led) << 1) |
157		  (!!test_bit(LED_NUML,    dev->led));
158
159	if (session->leds == newleds)
160		return 0;
161
162	session->leds = newleds;
163
164	skb = alloc_skb(3, GFP_ATOMIC);
165	if (!skb) {
166		BT_ERR("Can't allocate memory for new frame");
167		return -ENOMEM;
168	}
169
170	*skb_put(skb, 1) = HIDP_TRANS_DATA | HIDP_DATA_RTYPE_OUPUT;
171	*skb_put(skb, 1) = 0x01;
172	*skb_put(skb, 1) = newleds;
173
174	skb_queue_tail(&session->intr_transmit, skb);
175
176	hidp_schedule(session);
177
178	return 0;
179}
180
181static int hidp_hidinput_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
182{
183	struct hid_device *hid = input_get_drvdata(dev);
184	struct hidp_session *session = hid->driver_data;
185
186	return hidp_queue_event(session, dev, type, code, value);
187}
188
189static int hidp_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
190{
191	struct hidp_session *session = input_get_drvdata(dev);
192
193	return hidp_queue_event(session, dev, type, code, value);
194}
195
196static void hidp_input_report(struct hidp_session *session, struct sk_buff *skb)
197{
198	struct input_dev *dev = session->input;
199	unsigned char *keys = session->keys;
200	unsigned char *udata = skb->data + 1;
201	signed char *sdata = skb->data + 1;
202	int i, size = skb->len - 1;
203
204	switch (skb->data[0]) {
205	case 0x01:	/* Keyboard report */
206		for (i = 0; i < 8; i++)
207			input_report_key(dev, hidp_keycode[i + 224], (udata[0] >> i) & 1);
208
209		/* If all the key codes have been set to 0x01, it means
210		 * too many keys were pressed at the same time. */
211		if (!memcmp(udata + 2, hidp_mkeyspat, 6))
212			break;
213
214		for (i = 2; i < 8; i++) {
215			if (keys[i] > 3 && memscan(udata + 2, keys[i], 6) == udata + 8) {
216				if (hidp_keycode[keys[i]])
217					input_report_key(dev, hidp_keycode[keys[i]], 0);
218				else
219					BT_ERR("Unknown key (scancode %#x) released.", keys[i]);
220			}
221
222			if (udata[i] > 3 && memscan(keys + 2, udata[i], 6) == keys + 8) {
223				if (hidp_keycode[udata[i]])
224					input_report_key(dev, hidp_keycode[udata[i]], 1);
225				else
226					BT_ERR("Unknown key (scancode %#x) pressed.", udata[i]);
227			}
228		}
229
230		memcpy(keys, udata, 8);
231		break;
232
233	case 0x02:	/* Mouse report */
234		input_report_key(dev, BTN_LEFT,   sdata[0] & 0x01);
235		input_report_key(dev, BTN_RIGHT,  sdata[0] & 0x02);
236		input_report_key(dev, BTN_MIDDLE, sdata[0] & 0x04);
237		input_report_key(dev, BTN_SIDE,   sdata[0] & 0x08);
238		input_report_key(dev, BTN_EXTRA,  sdata[0] & 0x10);
239
240		input_report_rel(dev, REL_X, sdata[1]);
241		input_report_rel(dev, REL_Y, sdata[2]);
242
243		if (size > 3)
244			input_report_rel(dev, REL_WHEEL, sdata[3]);
245		break;
246	}
247
248	input_sync(dev);
249}
250
251static int __hidp_send_ctrl_message(struct hidp_session *session,
252			unsigned char hdr, unsigned char *data, int size)
253{
254	struct sk_buff *skb;
255
256	BT_DBG("session %p data %p size %d", session, data, size);
257
258	skb = alloc_skb(size + 1, GFP_ATOMIC);
259	if (!skb) {
260		BT_ERR("Can't allocate memory for new frame");
261		return -ENOMEM;
262	}
263
264	*skb_put(skb, 1) = hdr;
265	if (data && size > 0)
266		memcpy(skb_put(skb, size), data, size);
267
268	skb_queue_tail(&session->ctrl_transmit, skb);
269
270	return 0;
271}
272
273static inline int hidp_send_ctrl_message(struct hidp_session *session,
274			unsigned char hdr, unsigned char *data, int size)
275{
276	int err;
277
278	err = __hidp_send_ctrl_message(session, hdr, data, size);
279
280	hidp_schedule(session);
281
282	return err;
283}
284
285static int hidp_queue_report(struct hidp_session *session,
286				unsigned char *data, int size)
287{
288	struct sk_buff *skb;
289
290	BT_DBG("session %p hid %p data %p size %d", session, session->hid, data, size);
291
292	skb = alloc_skb(size + 1, GFP_ATOMIC);
293	if (!skb) {
294		BT_ERR("Can't allocate memory for new frame");
295		return -ENOMEM;
296	}
297
298	*skb_put(skb, 1) = 0xa2;
299	if (size > 0)
300		memcpy(skb_put(skb, size), data, size);
301
302	skb_queue_tail(&session->intr_transmit, skb);
303
304	hidp_schedule(session);
305
306	return 0;
307}
308
309static int hidp_send_report(struct hidp_session *session, struct hid_report *report)
310{
311	unsigned char buf[32];
312	int rsize;
313
314	rsize = ((report->size - 1) >> 3) + 1 + (report->id > 0);
315	if (rsize > sizeof(buf))
316		return -EIO;
317
318	hid_output_report(report, buf);
319
320	return hidp_queue_report(session, buf, rsize);
321}
322
323static int hidp_get_raw_report(struct hid_device *hid,
324		unsigned char report_number,
325		unsigned char *data, size_t count,
326		unsigned char report_type)
327{
328	struct hidp_session *session = hid->driver_data;
329	struct sk_buff *skb;
330	size_t len;
331	int numbered_reports = hid->report_enum[report_type].numbered;
332
333	switch (report_type) {
334	case HID_FEATURE_REPORT:
335		report_type = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_FEATURE;
336		break;
337	case HID_INPUT_REPORT:
338		report_type = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_INPUT;
339		break;
340	case HID_OUTPUT_REPORT:
341		report_type = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_OUPUT;
342		break;
343	default:
344		return -EINVAL;
345	}
346
347	if (mutex_lock_interruptible(&session->report_mutex))
348		return -ERESTARTSYS;
349
350	/* Set up our wait, and send the report request to the device. */
351	session->waiting_report_type = report_type & HIDP_DATA_RTYPE_MASK;
352	session->waiting_report_number = numbered_reports ? report_number : -1;
353	set_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
354	data[0] = report_number;
355	if (hidp_send_ctrl_message(hid->driver_data, report_type, data, 1))
356		goto err_eio;
357
358	/* Wait for the return of the report. The returned report
359	   gets put in session->report_return.  */
360	while (test_bit(HIDP_WAITING_FOR_RETURN, &session->flags)) {
361		int res;
362
363		res = wait_event_interruptible_timeout(session->report_queue,
364			!test_bit(HIDP_WAITING_FOR_RETURN, &session->flags),
365			5*HZ);
366		if (res == 0) {
367			/* timeout */
368			goto err_eio;
369		}
370		if (res < 0) {
371			/* signal */
372			goto err_restartsys;
373		}
374	}
375
376	skb = session->report_return;
377	if (skb) {
378		len = skb->len < count ? skb->len : count;
379		memcpy(data, skb->data, len);
380
381		kfree_skb(skb);
382		session->report_return = NULL;
383	} else {
384		/* Device returned a HANDSHAKE, indicating  protocol error. */
385		len = -EIO;
386	}
387
388	clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
389	mutex_unlock(&session->report_mutex);
390
391	return len;
392
393err_restartsys:
394	clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
395	mutex_unlock(&session->report_mutex);
396	return -ERESTARTSYS;
397err_eio:
398	clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
399	mutex_unlock(&session->report_mutex);
400	return -EIO;
401}
402
403static int hidp_output_raw_report(struct hid_device *hid, unsigned char *data, size_t count,
404		unsigned char report_type)
405{
406	struct hidp_session *session = hid->driver_data;
407	int ret;
408
409	switch (report_type) {
410	case HID_FEATURE_REPORT:
411		report_type = HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_FEATURE;
412		break;
413	case HID_OUTPUT_REPORT:
414		report_type = HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_OUPUT;
415		break;
416	default:
417		return -EINVAL;
418	}
419
420	if (mutex_lock_interruptible(&session->report_mutex))
421		return -ERESTARTSYS;
422
423	/* Set up our wait, and send the report request to the device. */
424	set_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
425	if (hidp_send_ctrl_message(hid->driver_data, report_type,
426			data, count)) {
427		ret = -ENOMEM;
428		goto err;
429	}
430
431	/* Wait for the ACK from the device. */
432	while (test_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags)) {
433		int res;
434
435		res = wait_event_interruptible_timeout(session->report_queue,
436			!test_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags),
437			10*HZ);
438		if (res == 0) {
439			/* timeout */
440			ret = -EIO;
441			goto err;
442		}
443		if (res < 0) {
444			/* signal */
445			ret = -ERESTARTSYS;
446			goto err;
447		}
448	}
449
450	if (!session->output_report_success) {
451		ret = -EIO;
452		goto err;
453	}
454
455	ret = count;
456
457err:
458	clear_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
459	mutex_unlock(&session->report_mutex);
460	return ret;
461}
462
463static void hidp_idle_timeout(unsigned long arg)
464{
465	struct hidp_session *session = (struct hidp_session *) arg;
466
467	kthread_stop(session->task);
468}
469
470static void hidp_set_timer(struct hidp_session *session)
471{
472	if (session->idle_to > 0)
473		mod_timer(&session->timer, jiffies + HZ * session->idle_to);
474}
475
476static inline void hidp_del_timer(struct hidp_session *session)
477{
478	if (session->idle_to > 0)
479		del_timer(&session->timer);
480}
481
482static void hidp_process_handshake(struct hidp_session *session,
483					unsigned char param)
484{
485	BT_DBG("session %p param 0x%02x", session, param);
486	session->output_report_success = 0; /* default condition */
487
488	switch (param) {
489	case HIDP_HSHK_SUCCESSFUL:
490		/* FIXME: Call into SET_ GET_ handlers here */
491		session->output_report_success = 1;
492		break;
493
494	case HIDP_HSHK_NOT_READY:
495	case HIDP_HSHK_ERR_INVALID_REPORT_ID:
496	case HIDP_HSHK_ERR_UNSUPPORTED_REQUEST:
497	case HIDP_HSHK_ERR_INVALID_PARAMETER:
498		if (test_bit(HIDP_WAITING_FOR_RETURN, &session->flags)) {
499			clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
500			wake_up_interruptible(&session->report_queue);
501		}
502		/* FIXME: Call into SET_ GET_ handlers here */
503		break;
504
505	case HIDP_HSHK_ERR_UNKNOWN:
506		break;
507
508	case HIDP_HSHK_ERR_FATAL:
509		/* Device requests a reboot, as this is the only way this error
510		 * can be recovered. */
511		__hidp_send_ctrl_message(session,
512			HIDP_TRANS_HID_CONTROL | HIDP_CTRL_SOFT_RESET, NULL, 0);
513		break;
514
515	default:
516		__hidp_send_ctrl_message(session,
517			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_INVALID_PARAMETER, NULL, 0);
518		break;
519	}
520
521	/* Wake up the waiting thread. */
522	if (test_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags)) {
523		clear_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
524		wake_up_interruptible(&session->report_queue);
525	}
526}
527
528static void hidp_process_hid_control(struct hidp_session *session,
529					unsigned char param)
530{
531	BT_DBG("session %p param 0x%02x", session, param);
532
533	if (param == HIDP_CTRL_VIRTUAL_CABLE_UNPLUG) {
534		/* Flush the transmit queues */
535		skb_queue_purge(&session->ctrl_transmit);
536		skb_queue_purge(&session->intr_transmit);
537
538		kthread_stop(session->task);
539	}
540}
541
542/* Returns true if the passed-in skb should be freed by the caller. */
543static int hidp_process_data(struct hidp_session *session, struct sk_buff *skb,
544				unsigned char param)
545{
546	int done_with_skb = 1;
547	BT_DBG("session %p skb %p len %d param 0x%02x", session, skb, skb->len, param);
548
549	switch (param) {
550	case HIDP_DATA_RTYPE_INPUT:
551		hidp_set_timer(session);
552
553		if (session->input)
554			hidp_input_report(session, skb);
555
556		if (session->hid)
557			hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 0);
558		break;
559
560	case HIDP_DATA_RTYPE_OTHER:
561	case HIDP_DATA_RTYPE_OUPUT:
562	case HIDP_DATA_RTYPE_FEATURE:
563		break;
564
565	default:
566		__hidp_send_ctrl_message(session,
567			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_INVALID_PARAMETER, NULL, 0);
568	}
569
570	if (test_bit(HIDP_WAITING_FOR_RETURN, &session->flags) &&
571				param == session->waiting_report_type) {
572		if (session->waiting_report_number < 0 ||
573		    session->waiting_report_number == skb->data[0]) {
574			/* hidp_get_raw_report() is waiting on this report. */
575			session->report_return = skb;
576			done_with_skb = 0;
577			clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
578			wake_up_interruptible(&session->report_queue);
579		}
580	}
581
582	return done_with_skb;
583}
584
585static void hidp_recv_ctrl_frame(struct hidp_session *session,
586					struct sk_buff *skb)
587{
588	unsigned char hdr, type, param;
589	int free_skb = 1;
590
591	BT_DBG("session %p skb %p len %d", session, skb, skb->len);
592
593	hdr = skb->data[0];
594	skb_pull(skb, 1);
595
596	type = hdr & HIDP_HEADER_TRANS_MASK;
597	param = hdr & HIDP_HEADER_PARAM_MASK;
598
599	switch (type) {
600	case HIDP_TRANS_HANDSHAKE:
601		hidp_process_handshake(session, param);
602		break;
603
604	case HIDP_TRANS_HID_CONTROL:
605		hidp_process_hid_control(session, param);
606		break;
607
608	case HIDP_TRANS_DATA:
609		free_skb = hidp_process_data(session, skb, param);
610		break;
611
612	default:
613		__hidp_send_ctrl_message(session,
614			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_UNSUPPORTED_REQUEST, NULL, 0);
615		break;
616	}
617
618	if (free_skb)
619		kfree_skb(skb);
620}
621
622static void hidp_recv_intr_frame(struct hidp_session *session,
623				struct sk_buff *skb)
624{
625	unsigned char hdr;
626
627	BT_DBG("session %p skb %p len %d", session, skb, skb->len);
628
629	hdr = skb->data[0];
630	skb_pull(skb, 1);
631
632	if (hdr == (HIDP_TRANS_DATA | HIDP_DATA_RTYPE_INPUT)) {
633		hidp_set_timer(session);
634
635		if (session->input)
636			hidp_input_report(session, skb);
637
638		if (session->hid) {
639			hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 1);
640			BT_DBG("report len %d", skb->len);
641		}
642	} else {
643		BT_DBG("Unsupported protocol header 0x%02x", hdr);
644	}
645
646	kfree_skb(skb);
647}
648
649static int hidp_send_frame(struct socket *sock, unsigned char *data, int len)
650{
651	struct kvec iv = { data, len };
652	struct msghdr msg;
653
654	BT_DBG("sock %p data %p len %d", sock, data, len);
655
656	if (!len)
657		return 0;
658
659	memset(&msg, 0, sizeof(msg));
660
661	return kernel_sendmsg(sock, &msg, &iv, 1, len);
662}
663
664static void hidp_process_transmit(struct hidp_session *session)
665{
666	struct sk_buff *skb;
667
668	BT_DBG("session %p", session);
669
670	while ((skb = skb_dequeue(&session->ctrl_transmit))) {
671		if (hidp_send_frame(session->ctrl_sock, skb->data, skb->len) < 0) {
672			skb_queue_head(&session->ctrl_transmit, skb);
673			break;
674		}
675
676		hidp_set_timer(session);
677		kfree_skb(skb);
678	}
679
680	while ((skb = skb_dequeue(&session->intr_transmit))) {
681		if (hidp_send_frame(session->intr_sock, skb->data, skb->len) < 0) {
682			skb_queue_head(&session->intr_transmit, skb);
683			break;
684		}
685
686		hidp_set_timer(session);
687		kfree_skb(skb);
688	}
689}
690
691static int hidp_session(void *arg)
692{
693	struct hidp_session *session = arg;
694	struct sock *ctrl_sk = session->ctrl_sock->sk;
695	struct sock *intr_sk = session->intr_sock->sk;
696	struct sk_buff *skb;
697	wait_queue_t ctrl_wait, intr_wait;
698
699	BT_DBG("session %p", session);
700
701	set_user_nice(current, -15);
702
703	init_waitqueue_entry(&ctrl_wait, current);
704	init_waitqueue_entry(&intr_wait, current);
705	add_wait_queue(sk_sleep(ctrl_sk), &ctrl_wait);
706	add_wait_queue(sk_sleep(intr_sk), &intr_wait);
707	session->waiting_for_startup = 0;
708	wake_up_interruptible(&session->startup_queue);
709	while (!kthread_should_stop()) {
710		set_current_state(TASK_INTERRUPTIBLE);
711
712		if (ctrl_sk->sk_state != BT_CONNECTED ||
713				intr_sk->sk_state != BT_CONNECTED)
714			break;
715
716		while ((skb = skb_dequeue(&ctrl_sk->sk_receive_queue))) {
717			skb_orphan(skb);
718			hidp_recv_ctrl_frame(session, skb);
719		}
720
721		while ((skb = skb_dequeue(&intr_sk->sk_receive_queue))) {
722			skb_orphan(skb);
723			hidp_recv_intr_frame(session, skb);
724		}
725
726		hidp_process_transmit(session);
727
728		schedule();
729	}
730	set_current_state(TASK_RUNNING);
731	remove_wait_queue(sk_sleep(intr_sk), &intr_wait);
732	remove_wait_queue(sk_sleep(ctrl_sk), &ctrl_wait);
733
734	down_write(&hidp_session_sem);
735
736	hidp_del_timer(session);
737
738	if (session->input) {
739		input_unregister_device(session->input);
740		session->input = NULL;
741	}
742
743	if (session->hid) {
744		hid_destroy_device(session->hid);
745		session->hid = NULL;
746	}
747
748	/* Wakeup user-space polling for socket errors */
749	session->intr_sock->sk->sk_err = EUNATCH;
750	session->ctrl_sock->sk->sk_err = EUNATCH;
751
752	hidp_schedule(session);
753
754	fput(session->intr_sock->file);
755
756	wait_event_timeout(*(sk_sleep(ctrl_sk)),
757		(ctrl_sk->sk_state == BT_CLOSED), msecs_to_jiffies(500));
758
759	fput(session->ctrl_sock->file);
760
761	__hidp_unlink_session(session);
762
763	up_write(&hidp_session_sem);
764
765	kfree(session);
766	return 0;
767}
768
769static struct device *hidp_get_device(struct hidp_session *session)
770{
771	bdaddr_t *src = &bt_sk(session->ctrl_sock->sk)->src;
772	bdaddr_t *dst = &bt_sk(session->ctrl_sock->sk)->dst;
773	struct device *device = NULL;
774	struct hci_dev *hdev;
775
776	hdev = hci_get_route(dst, src);
777	if (!hdev)
778		return NULL;
779
780	session->conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
781	if (session->conn)
782		device = &session->conn->dev;
783
784	hci_dev_put(hdev);
785
786	return device;
787}
788
789static int hidp_setup_input(struct hidp_session *session,
790				struct hidp_connadd_req *req)
791{
792	struct input_dev *input;
793	int err, i;
794
795	input = input_allocate_device();
796	if (!input)
797		return -ENOMEM;
798
799	session->input = input;
800
801	input_set_drvdata(input, session);
802
803	input->name = "Bluetooth HID Boot Protocol Device";
804
805	input->id.bustype = BUS_BLUETOOTH;
806	input->id.vendor  = req->vendor;
807	input->id.product = req->product;
808	input->id.version = req->version;
809
810	if (req->subclass & 0x40) {
811		set_bit(EV_KEY, input->evbit);
812		set_bit(EV_LED, input->evbit);
813		set_bit(EV_REP, input->evbit);
814
815		set_bit(LED_NUML,    input->ledbit);
816		set_bit(LED_CAPSL,   input->ledbit);
817		set_bit(LED_SCROLLL, input->ledbit);
818		set_bit(LED_COMPOSE, input->ledbit);
819		set_bit(LED_KANA,    input->ledbit);
820
821		for (i = 0; i < sizeof(hidp_keycode); i++)
822			set_bit(hidp_keycode[i], input->keybit);
823		clear_bit(0, input->keybit);
824	}
825
826	if (req->subclass & 0x80) {
827		input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
828		input->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
829			BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
830		input->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);
831		input->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) |
832			BIT_MASK(BTN_EXTRA);
833		input->relbit[0] |= BIT_MASK(REL_WHEEL);
834	}
835
836	input->dev.parent = hidp_get_device(session);
837
838	input->event = hidp_input_event;
839
840	err = input_register_device(input);
841	if (err < 0) {
842		hci_conn_put_device(session->conn);
843		return err;
844	}
845
846	return 0;
847}
848
849static int hidp_open(struct hid_device *hid)
850{
851	return 0;
852}
853
854static void hidp_close(struct hid_device *hid)
855{
856}
857
858static int hidp_parse(struct hid_device *hid)
859{
860	struct hidp_session *session = hid->driver_data;
861
862	return hid_parse_report(session->hid, session->rd_data,
863			session->rd_size);
864}
865
866static int hidp_start(struct hid_device *hid)
867{
868	struct hidp_session *session = hid->driver_data;
869	struct hid_report *report;
870
871	list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].
872			report_list, list)
873		hidp_send_report(session, report);
874
875	list_for_each_entry(report, &hid->report_enum[HID_FEATURE_REPORT].
876			report_list, list)
877		hidp_send_report(session, report);
878
879	return 0;
880}
881
882static void hidp_stop(struct hid_device *hid)
883{
884	struct hidp_session *session = hid->driver_data;
885
886	skb_queue_purge(&session->ctrl_transmit);
887	skb_queue_purge(&session->intr_transmit);
888
889	hid->claimed = 0;
890}
891
892static struct hid_ll_driver hidp_hid_driver = {
893	.parse = hidp_parse,
894	.start = hidp_start,
895	.stop = hidp_stop,
896	.open  = hidp_open,
897	.close = hidp_close,
898	.hidinput_input_event = hidp_hidinput_event,
899};
900
901/* This function sets up the hid device. It does not add it
902   to the HID system. That is done in hidp_add_connection(). */
903static int hidp_setup_hid(struct hidp_session *session,
904				struct hidp_connadd_req *req)
905{
906	struct hid_device *hid;
907	int err;
908
909	session->rd_data = kzalloc(req->rd_size, GFP_KERNEL);
910	if (!session->rd_data)
911		return -ENOMEM;
912
913	if (copy_from_user(session->rd_data, req->rd_data, req->rd_size)) {
914		err = -EFAULT;
915		goto fault;
916	}
917	session->rd_size = req->rd_size;
918
919	hid = hid_allocate_device();
920	if (IS_ERR(hid)) {
921		err = PTR_ERR(hid);
922		goto fault;
923	}
924
925	session->hid = hid;
926
927	hid->driver_data = session;
928
929	hid->bus     = BUS_BLUETOOTH;
930	hid->vendor  = req->vendor;
931	hid->product = req->product;
932	hid->version = req->version;
933	hid->country = req->country;
934
935	strncpy(hid->name, req->name, 128);
936	strncpy(hid->phys, batostr(&bt_sk(session->ctrl_sock->sk)->src), 64);
937	strncpy(hid->uniq, batostr(&bt_sk(session->ctrl_sock->sk)->dst), 64);
938
939	hid->dev.parent = hidp_get_device(session);
940	hid->ll_driver = &hidp_hid_driver;
941
942	hid->hid_get_raw_report = hidp_get_raw_report;
943	hid->hid_output_raw_report = hidp_output_raw_report;
944
945	return 0;
946
947fault:
948	kfree(session->rd_data);
949	session->rd_data = NULL;
950
951	return err;
952}
953
954int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock)
955{
956	struct hidp_session *session, *s;
957	int vendor, product;
958	int err;
959
960	BT_DBG("");
961
962	if (bacmp(&bt_sk(ctrl_sock->sk)->src, &bt_sk(intr_sock->sk)->src) ||
963			bacmp(&bt_sk(ctrl_sock->sk)->dst, &bt_sk(intr_sock->sk)->dst))
964		return -ENOTUNIQ;
965
966	session = kzalloc(sizeof(struct hidp_session), GFP_KERNEL);
967	if (!session)
968		return -ENOMEM;
969
970	BT_DBG("rd_data %p rd_size %d", req->rd_data, req->rd_size);
971
972	down_write(&hidp_session_sem);
973
974	s = __hidp_get_session(&bt_sk(ctrl_sock->sk)->dst);
975	if (s && s->state == BT_CONNECTED) {
976		err = -EEXIST;
977		goto failed;
978	}
979
980	bacpy(&session->bdaddr, &bt_sk(ctrl_sock->sk)->dst);
981
982	session->ctrl_mtu = min_t(uint, l2cap_pi(ctrl_sock->sk)->chan->omtu,
983					l2cap_pi(ctrl_sock->sk)->chan->imtu);
984	session->intr_mtu = min_t(uint, l2cap_pi(intr_sock->sk)->chan->omtu,
985					l2cap_pi(intr_sock->sk)->chan->imtu);
986
987	BT_DBG("ctrl mtu %d intr mtu %d", session->ctrl_mtu, session->intr_mtu);
988
989	session->ctrl_sock = ctrl_sock;
990	session->intr_sock = intr_sock;
991	session->state     = BT_CONNECTED;
992
993	setup_timer(&session->timer, hidp_idle_timeout, (unsigned long)session);
994
995	skb_queue_head_init(&session->ctrl_transmit);
996	skb_queue_head_init(&session->intr_transmit);
997
998	mutex_init(&session->report_mutex);
999	init_waitqueue_head(&session->report_queue);
1000	init_waitqueue_head(&session->startup_queue);
1001	session->waiting_for_startup = 1;
1002	session->flags   = req->flags & (1 << HIDP_BLUETOOTH_VENDOR_ID);
1003	session->idle_to = req->idle_to;
1004
1005	if (req->rd_size > 0) {
1006		err = hidp_setup_hid(session, req);
1007		if (err && err != -ENODEV)
1008			goto purge;
1009	}
1010
1011	if (!session->hid) {
1012		err = hidp_setup_input(session, req);
1013		if (err < 0)
1014			goto purge;
1015	}
1016
1017	__hidp_link_session(session);
1018
1019	hidp_set_timer(session);
1020
1021	if (session->hid) {
1022		vendor  = session->hid->vendor;
1023		product = session->hid->product;
1024	} else if (session->input) {
1025		vendor  = session->input->id.vendor;
1026		product = session->input->id.product;
1027	} else {
1028		vendor = 0x0000;
1029		product = 0x0000;
1030	}
1031
1032	session->task = kthread_run(hidp_session, session, "khidpd_%04x%04x",
1033							vendor, product);
1034	if (IS_ERR(session->task)) {
1035		err = PTR_ERR(session->task);
1036		goto unlink;
1037	}
1038
1039	while (session->waiting_for_startup) {
1040		wait_event_interruptible(session->startup_queue,
1041			!session->waiting_for_startup);
1042	}
1043
1044	err = hid_add_device(session->hid);
1045	if (err < 0)
1046		goto err_add_device;
1047
1048	if (session->input) {
1049		hidp_send_ctrl_message(session,
1050			HIDP_TRANS_SET_PROTOCOL | HIDP_PROTO_BOOT, NULL, 0);
1051		session->flags |= (1 << HIDP_BOOT_PROTOCOL_MODE);
1052
1053		session->leds = 0xff;
1054		hidp_input_event(session->input, EV_LED, 0, 0);
1055	}
1056
1057	up_write(&hidp_session_sem);
1058	return 0;
1059
1060err_add_device:
1061	hid_destroy_device(session->hid);
1062	session->hid = NULL;
1063	kthread_stop(session->task);
1064
1065unlink:
1066	hidp_del_timer(session);
1067
1068	__hidp_unlink_session(session);
1069
1070	if (session->input) {
1071		input_unregister_device(session->input);
1072		session->input = NULL;
1073	}
1074
1075	if (session->hid) {
1076		hid_destroy_device(session->hid);
1077		session->hid = NULL;
1078	}
1079
1080	kfree(session->rd_data);
1081	session->rd_data = NULL;
1082
1083purge:
1084	skb_queue_purge(&session->ctrl_transmit);
1085	skb_queue_purge(&session->intr_transmit);
1086
1087failed:
1088	up_write(&hidp_session_sem);
1089
1090	input_free_device(session->input);
1091	kfree(session);
1092	return err;
1093}
1094
1095int hidp_del_connection(struct hidp_conndel_req *req)
1096{
1097	struct hidp_session *session;
1098	int err = 0;
1099
1100	BT_DBG("");
1101
1102	down_read(&hidp_session_sem);
1103
1104	session = __hidp_get_session(&req->bdaddr);
1105	if (session) {
1106		if (req->flags & (1 << HIDP_VIRTUAL_CABLE_UNPLUG)) {
1107			hidp_send_ctrl_message(session,
1108				HIDP_TRANS_HID_CONTROL | HIDP_CTRL_VIRTUAL_CABLE_UNPLUG, NULL, 0);
1109		} else {
1110			/* Flush the transmit queues */
1111			skb_queue_purge(&session->ctrl_transmit);
1112			skb_queue_purge(&session->intr_transmit);
1113
1114			kthread_stop(session->task);
1115		}
1116	} else
1117		err = -ENOENT;
1118
1119	up_read(&hidp_session_sem);
1120	return err;
1121}
1122
1123int hidp_get_connlist(struct hidp_connlist_req *req)
1124{
1125	struct list_head *p;
1126	int err = 0, n = 0;
1127
1128	BT_DBG("");
1129
1130	down_read(&hidp_session_sem);
1131
1132	list_for_each(p, &hidp_session_list) {
1133		struct hidp_session *session;
1134		struct hidp_conninfo ci;
1135
1136		session = list_entry(p, struct hidp_session, list);
1137
1138		__hidp_copy_session(session, &ci);
1139
1140		if (copy_to_user(req->ci, &ci, sizeof(ci))) {
1141			err = -EFAULT;
1142			break;
1143		}
1144
1145		if (++n >= req->cnum)
1146			break;
1147
1148		req->ci++;
1149	}
1150	req->cnum = n;
1151
1152	up_read(&hidp_session_sem);
1153	return err;
1154}
1155
1156int hidp_get_conninfo(struct hidp_conninfo *ci)
1157{
1158	struct hidp_session *session;
1159	int err = 0;
1160
1161	down_read(&hidp_session_sem);
1162
1163	session = __hidp_get_session(&ci->bdaddr);
1164	if (session)
1165		__hidp_copy_session(session, ci);
1166	else
1167		err = -ENOENT;
1168
1169	up_read(&hidp_session_sem);
1170	return err;
1171}
1172
1173static const struct hid_device_id hidp_table[] = {
1174	{ HID_BLUETOOTH_DEVICE(HID_ANY_ID, HID_ANY_ID) },
1175	{ }
1176};
1177
1178static struct hid_driver hidp_driver = {
1179	.name = "generic-bluetooth",
1180	.id_table = hidp_table,
1181};
1182
1183static int __init hidp_init(void)
1184{
1185	int ret;
1186
1187	BT_INFO("HIDP (Human Interface Emulation) ver %s", VERSION);
1188
1189	ret = hid_register_driver(&hidp_driver);
1190	if (ret)
1191		goto err;
1192
1193	ret = hidp_init_sockets();
1194	if (ret)
1195		goto err_drv;
1196
1197	return 0;
1198err_drv:
1199	hid_unregister_driver(&hidp_driver);
1200err:
1201	return ret;
1202}
1203
1204static void __exit hidp_exit(void)
1205{
1206	hidp_cleanup_sockets();
1207	hid_unregister_driver(&hidp_driver);
1208}
1209
1210module_init(hidp_init);
1211module_exit(hidp_exit);
1212
1213MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
1214MODULE_DESCRIPTION("Bluetooth HIDP ver " VERSION);
1215MODULE_VERSION(VERSION);
1216MODULE_LICENSE("GPL");
1217MODULE_ALIAS("bt-proto-6");
1218