xref: /linux/net/bluetooth/hidp/core.c (revision f2ee442115c9b6219083c019939a9cc0c9abb2f8)
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 
55 static DECLARE_RWSEM(hidp_session_sem);
56 static LIST_HEAD(hidp_session_list);
57 
58 static 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 
79 static unsigned char hidp_mkeyspat[] = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
80 
81 static 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 
96 static 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 
104 static 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 
112 static 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 
142 static 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 
181 static 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 
189 static 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 
196 static 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 
251 static 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 
273 static 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 
285 static 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 
309 static 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 
323 static 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 
393 err_restartsys:
394 	clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
395 	mutex_unlock(&session->report_mutex);
396 	return -ERESTARTSYS;
397 err_eio:
398 	clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
399 	mutex_unlock(&session->report_mutex);
400 	return -EIO;
401 }
402 
403 static 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 
457 err:
458 	clear_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
459 	mutex_unlock(&session->report_mutex);
460 	return ret;
461 }
462 
463 static void hidp_idle_timeout(unsigned long arg)
464 {
465 	struct hidp_session *session = (struct hidp_session *) arg;
466 
467 	atomic_inc(&session->terminate);
468 	wake_up_process(session->task);
469 }
470 
471 static void hidp_set_timer(struct hidp_session *session)
472 {
473 	if (session->idle_to > 0)
474 		mod_timer(&session->timer, jiffies + HZ * session->idle_to);
475 }
476 
477 static inline void hidp_del_timer(struct hidp_session *session)
478 {
479 	if (session->idle_to > 0)
480 		del_timer(&session->timer);
481 }
482 
483 static void hidp_process_handshake(struct hidp_session *session,
484 					unsigned char param)
485 {
486 	BT_DBG("session %p param 0x%02x", session, param);
487 	session->output_report_success = 0; /* default condition */
488 
489 	switch (param) {
490 	case HIDP_HSHK_SUCCESSFUL:
491 		/* FIXME: Call into SET_ GET_ handlers here */
492 		session->output_report_success = 1;
493 		break;
494 
495 	case HIDP_HSHK_NOT_READY:
496 	case HIDP_HSHK_ERR_INVALID_REPORT_ID:
497 	case HIDP_HSHK_ERR_UNSUPPORTED_REQUEST:
498 	case HIDP_HSHK_ERR_INVALID_PARAMETER:
499 		if (test_bit(HIDP_WAITING_FOR_RETURN, &session->flags)) {
500 			clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
501 			wake_up_interruptible(&session->report_queue);
502 		}
503 		/* FIXME: Call into SET_ GET_ handlers here */
504 		break;
505 
506 	case HIDP_HSHK_ERR_UNKNOWN:
507 		break;
508 
509 	case HIDP_HSHK_ERR_FATAL:
510 		/* Device requests a reboot, as this is the only way this error
511 		 * can be recovered. */
512 		__hidp_send_ctrl_message(session,
513 			HIDP_TRANS_HID_CONTROL | HIDP_CTRL_SOFT_RESET, NULL, 0);
514 		break;
515 
516 	default:
517 		__hidp_send_ctrl_message(session,
518 			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_INVALID_PARAMETER, NULL, 0);
519 		break;
520 	}
521 
522 	/* Wake up the waiting thread. */
523 	if (test_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags)) {
524 		clear_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
525 		wake_up_interruptible(&session->report_queue);
526 	}
527 }
528 
529 static void hidp_process_hid_control(struct hidp_session *session,
530 					unsigned char param)
531 {
532 	BT_DBG("session %p param 0x%02x", session, param);
533 
534 	if (param == HIDP_CTRL_VIRTUAL_CABLE_UNPLUG) {
535 		/* Flush the transmit queues */
536 		skb_queue_purge(&session->ctrl_transmit);
537 		skb_queue_purge(&session->intr_transmit);
538 
539 		atomic_inc(&session->terminate);
540 		wake_up_process(current);
541 	}
542 }
543 
544 /* Returns true if the passed-in skb should be freed by the caller. */
545 static int hidp_process_data(struct hidp_session *session, struct sk_buff *skb,
546 				unsigned char param)
547 {
548 	int done_with_skb = 1;
549 	BT_DBG("session %p skb %p len %d param 0x%02x", session, skb, skb->len, param);
550 
551 	switch (param) {
552 	case HIDP_DATA_RTYPE_INPUT:
553 		hidp_set_timer(session);
554 
555 		if (session->input)
556 			hidp_input_report(session, skb);
557 
558 		if (session->hid)
559 			hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 0);
560 		break;
561 
562 	case HIDP_DATA_RTYPE_OTHER:
563 	case HIDP_DATA_RTYPE_OUPUT:
564 	case HIDP_DATA_RTYPE_FEATURE:
565 		break;
566 
567 	default:
568 		__hidp_send_ctrl_message(session,
569 			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_INVALID_PARAMETER, NULL, 0);
570 	}
571 
572 	if (test_bit(HIDP_WAITING_FOR_RETURN, &session->flags) &&
573 				param == session->waiting_report_type) {
574 		if (session->waiting_report_number < 0 ||
575 		    session->waiting_report_number == skb->data[0]) {
576 			/* hidp_get_raw_report() is waiting on this report. */
577 			session->report_return = skb;
578 			done_with_skb = 0;
579 			clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
580 			wake_up_interruptible(&session->report_queue);
581 		}
582 	}
583 
584 	return done_with_skb;
585 }
586 
587 static void hidp_recv_ctrl_frame(struct hidp_session *session,
588 					struct sk_buff *skb)
589 {
590 	unsigned char hdr, type, param;
591 	int free_skb = 1;
592 
593 	BT_DBG("session %p skb %p len %d", session, skb, skb->len);
594 
595 	hdr = skb->data[0];
596 	skb_pull(skb, 1);
597 
598 	type = hdr & HIDP_HEADER_TRANS_MASK;
599 	param = hdr & HIDP_HEADER_PARAM_MASK;
600 
601 	switch (type) {
602 	case HIDP_TRANS_HANDSHAKE:
603 		hidp_process_handshake(session, param);
604 		break;
605 
606 	case HIDP_TRANS_HID_CONTROL:
607 		hidp_process_hid_control(session, param);
608 		break;
609 
610 	case HIDP_TRANS_DATA:
611 		free_skb = hidp_process_data(session, skb, param);
612 		break;
613 
614 	default:
615 		__hidp_send_ctrl_message(session,
616 			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_UNSUPPORTED_REQUEST, NULL, 0);
617 		break;
618 	}
619 
620 	if (free_skb)
621 		kfree_skb(skb);
622 }
623 
624 static void hidp_recv_intr_frame(struct hidp_session *session,
625 				struct sk_buff *skb)
626 {
627 	unsigned char hdr;
628 
629 	BT_DBG("session %p skb %p len %d", session, skb, skb->len);
630 
631 	hdr = skb->data[0];
632 	skb_pull(skb, 1);
633 
634 	if (hdr == (HIDP_TRANS_DATA | HIDP_DATA_RTYPE_INPUT)) {
635 		hidp_set_timer(session);
636 
637 		if (session->input)
638 			hidp_input_report(session, skb);
639 
640 		if (session->hid) {
641 			hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 1);
642 			BT_DBG("report len %d", skb->len);
643 		}
644 	} else {
645 		BT_DBG("Unsupported protocol header 0x%02x", hdr);
646 	}
647 
648 	kfree_skb(skb);
649 }
650 
651 static int hidp_send_frame(struct socket *sock, unsigned char *data, int len)
652 {
653 	struct kvec iv = { data, len };
654 	struct msghdr msg;
655 
656 	BT_DBG("sock %p data %p len %d", sock, data, len);
657 
658 	if (!len)
659 		return 0;
660 
661 	memset(&msg, 0, sizeof(msg));
662 
663 	return kernel_sendmsg(sock, &msg, &iv, 1, len);
664 }
665 
666 static void hidp_process_transmit(struct hidp_session *session)
667 {
668 	struct sk_buff *skb;
669 
670 	BT_DBG("session %p", session);
671 
672 	while ((skb = skb_dequeue(&session->ctrl_transmit))) {
673 		if (hidp_send_frame(session->ctrl_sock, skb->data, skb->len) < 0) {
674 			skb_queue_head(&session->ctrl_transmit, skb);
675 			break;
676 		}
677 
678 		hidp_set_timer(session);
679 		kfree_skb(skb);
680 	}
681 
682 	while ((skb = skb_dequeue(&session->intr_transmit))) {
683 		if (hidp_send_frame(session->intr_sock, skb->data, skb->len) < 0) {
684 			skb_queue_head(&session->intr_transmit, skb);
685 			break;
686 		}
687 
688 		hidp_set_timer(session);
689 		kfree_skb(skb);
690 	}
691 }
692 
693 static int hidp_session(void *arg)
694 {
695 	struct hidp_session *session = arg;
696 	struct sock *ctrl_sk = session->ctrl_sock->sk;
697 	struct sock *intr_sk = session->intr_sock->sk;
698 	struct sk_buff *skb;
699 	wait_queue_t ctrl_wait, intr_wait;
700 
701 	BT_DBG("session %p", session);
702 
703 	set_user_nice(current, -15);
704 
705 	init_waitqueue_entry(&ctrl_wait, current);
706 	init_waitqueue_entry(&intr_wait, current);
707 	add_wait_queue(sk_sleep(ctrl_sk), &ctrl_wait);
708 	add_wait_queue(sk_sleep(intr_sk), &intr_wait);
709 	session->waiting_for_startup = 0;
710 	wake_up_interruptible(&session->startup_queue);
711 	set_current_state(TASK_INTERRUPTIBLE);
712 	while (!atomic_read(&session->terminate)) {
713 		if (ctrl_sk->sk_state != BT_CONNECTED ||
714 				intr_sk->sk_state != BT_CONNECTED)
715 			break;
716 
717 		while ((skb = skb_dequeue(&ctrl_sk->sk_receive_queue))) {
718 			skb_orphan(skb);
719 			if (!skb_linearize(skb))
720 				hidp_recv_ctrl_frame(session, skb);
721 			else
722 				kfree_skb(skb);
723 		}
724 
725 		while ((skb = skb_dequeue(&intr_sk->sk_receive_queue))) {
726 			skb_orphan(skb);
727 			if (!skb_linearize(skb))
728 				hidp_recv_intr_frame(session, skb);
729 			else
730 				kfree_skb(skb);
731 		}
732 
733 		hidp_process_transmit(session);
734 
735 		schedule();
736 		set_current_state(TASK_INTERRUPTIBLE);
737 	}
738 	set_current_state(TASK_RUNNING);
739 	remove_wait_queue(sk_sleep(intr_sk), &intr_wait);
740 	remove_wait_queue(sk_sleep(ctrl_sk), &ctrl_wait);
741 
742 	down_write(&hidp_session_sem);
743 
744 	hidp_del_timer(session);
745 
746 	if (session->input) {
747 		input_unregister_device(session->input);
748 		session->input = NULL;
749 	}
750 
751 	if (session->hid) {
752 		hid_destroy_device(session->hid);
753 		session->hid = NULL;
754 	}
755 
756 	/* Wakeup user-space polling for socket errors */
757 	session->intr_sock->sk->sk_err = EUNATCH;
758 	session->ctrl_sock->sk->sk_err = EUNATCH;
759 
760 	hidp_schedule(session);
761 
762 	fput(session->intr_sock->file);
763 
764 	wait_event_timeout(*(sk_sleep(ctrl_sk)),
765 		(ctrl_sk->sk_state == BT_CLOSED), msecs_to_jiffies(500));
766 
767 	fput(session->ctrl_sock->file);
768 
769 	__hidp_unlink_session(session);
770 
771 	up_write(&hidp_session_sem);
772 
773 	kfree(session->rd_data);
774 	kfree(session);
775 	return 0;
776 }
777 
778 static struct device *hidp_get_device(struct hidp_session *session)
779 {
780 	bdaddr_t *src = &bt_sk(session->ctrl_sock->sk)->src;
781 	bdaddr_t *dst = &bt_sk(session->ctrl_sock->sk)->dst;
782 	struct device *device = NULL;
783 	struct hci_dev *hdev;
784 
785 	hdev = hci_get_route(dst, src);
786 	if (!hdev)
787 		return NULL;
788 
789 	session->conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
790 	if (session->conn)
791 		device = &session->conn->dev;
792 
793 	hci_dev_put(hdev);
794 
795 	return device;
796 }
797 
798 static int hidp_setup_input(struct hidp_session *session,
799 				struct hidp_connadd_req *req)
800 {
801 	struct input_dev *input;
802 	int err, i;
803 
804 	input = input_allocate_device();
805 	if (!input)
806 		return -ENOMEM;
807 
808 	session->input = input;
809 
810 	input_set_drvdata(input, session);
811 
812 	input->name = "Bluetooth HID Boot Protocol Device";
813 
814 	input->id.bustype = BUS_BLUETOOTH;
815 	input->id.vendor  = req->vendor;
816 	input->id.product = req->product;
817 	input->id.version = req->version;
818 
819 	if (req->subclass & 0x40) {
820 		set_bit(EV_KEY, input->evbit);
821 		set_bit(EV_LED, input->evbit);
822 		set_bit(EV_REP, input->evbit);
823 
824 		set_bit(LED_NUML,    input->ledbit);
825 		set_bit(LED_CAPSL,   input->ledbit);
826 		set_bit(LED_SCROLLL, input->ledbit);
827 		set_bit(LED_COMPOSE, input->ledbit);
828 		set_bit(LED_KANA,    input->ledbit);
829 
830 		for (i = 0; i < sizeof(hidp_keycode); i++)
831 			set_bit(hidp_keycode[i], input->keybit);
832 		clear_bit(0, input->keybit);
833 	}
834 
835 	if (req->subclass & 0x80) {
836 		input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
837 		input->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
838 			BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
839 		input->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);
840 		input->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) |
841 			BIT_MASK(BTN_EXTRA);
842 		input->relbit[0] |= BIT_MASK(REL_WHEEL);
843 	}
844 
845 	input->dev.parent = hidp_get_device(session);
846 
847 	input->event = hidp_input_event;
848 
849 	err = input_register_device(input);
850 	if (err < 0) {
851 		input_free_device(input);
852 		session->input = NULL;
853 		return err;
854 	}
855 
856 	return 0;
857 }
858 
859 static int hidp_open(struct hid_device *hid)
860 {
861 	return 0;
862 }
863 
864 static void hidp_close(struct hid_device *hid)
865 {
866 }
867 
868 static int hidp_parse(struct hid_device *hid)
869 {
870 	struct hidp_session *session = hid->driver_data;
871 
872 	return hid_parse_report(session->hid, session->rd_data,
873 			session->rd_size);
874 }
875 
876 static int hidp_start(struct hid_device *hid)
877 {
878 	struct hidp_session *session = hid->driver_data;
879 	struct hid_report *report;
880 
881 	if (hid->quirks & HID_QUIRK_NO_INIT_REPORTS)
882 		return 0;
883 
884 	list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].
885 			report_list, list)
886 		hidp_send_report(session, report);
887 
888 	list_for_each_entry(report, &hid->report_enum[HID_FEATURE_REPORT].
889 			report_list, list)
890 		hidp_send_report(session, report);
891 
892 	return 0;
893 }
894 
895 static void hidp_stop(struct hid_device *hid)
896 {
897 	struct hidp_session *session = hid->driver_data;
898 
899 	skb_queue_purge(&session->ctrl_transmit);
900 	skb_queue_purge(&session->intr_transmit);
901 
902 	hid->claimed = 0;
903 }
904 
905 static struct hid_ll_driver hidp_hid_driver = {
906 	.parse = hidp_parse,
907 	.start = hidp_start,
908 	.stop = hidp_stop,
909 	.open  = hidp_open,
910 	.close = hidp_close,
911 	.hidinput_input_event = hidp_hidinput_event,
912 };
913 
914 /* This function sets up the hid device. It does not add it
915    to the HID system. That is done in hidp_add_connection(). */
916 static int hidp_setup_hid(struct hidp_session *session,
917 				struct hidp_connadd_req *req)
918 {
919 	struct hid_device *hid;
920 	int err;
921 
922 	session->rd_data = kzalloc(req->rd_size, GFP_KERNEL);
923 	if (!session->rd_data)
924 		return -ENOMEM;
925 
926 	if (copy_from_user(session->rd_data, req->rd_data, req->rd_size)) {
927 		err = -EFAULT;
928 		goto fault;
929 	}
930 	session->rd_size = req->rd_size;
931 
932 	hid = hid_allocate_device();
933 	if (IS_ERR(hid)) {
934 		err = PTR_ERR(hid);
935 		goto fault;
936 	}
937 
938 	session->hid = hid;
939 
940 	hid->driver_data = session;
941 
942 	hid->bus     = BUS_BLUETOOTH;
943 	hid->vendor  = req->vendor;
944 	hid->product = req->product;
945 	hid->version = req->version;
946 	hid->country = req->country;
947 
948 	strncpy(hid->name, req->name, 128);
949 	strncpy(hid->phys, batostr(&bt_sk(session->ctrl_sock->sk)->src), 64);
950 	strncpy(hid->uniq, batostr(&bt_sk(session->ctrl_sock->sk)->dst), 64);
951 
952 	hid->dev.parent = hidp_get_device(session);
953 	hid->ll_driver = &hidp_hid_driver;
954 
955 	hid->hid_get_raw_report = hidp_get_raw_report;
956 	hid->hid_output_raw_report = hidp_output_raw_report;
957 
958 	return 0;
959 
960 fault:
961 	kfree(session->rd_data);
962 	session->rd_data = NULL;
963 
964 	return err;
965 }
966 
967 int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock)
968 {
969 	struct hidp_session *session, *s;
970 	int vendor, product;
971 	int err;
972 
973 	BT_DBG("");
974 
975 	if (bacmp(&bt_sk(ctrl_sock->sk)->src, &bt_sk(intr_sock->sk)->src) ||
976 			bacmp(&bt_sk(ctrl_sock->sk)->dst, &bt_sk(intr_sock->sk)->dst))
977 		return -ENOTUNIQ;
978 
979 	session = kzalloc(sizeof(struct hidp_session), GFP_KERNEL);
980 	if (!session)
981 		return -ENOMEM;
982 
983 	BT_DBG("rd_data %p rd_size %d", req->rd_data, req->rd_size);
984 
985 	down_write(&hidp_session_sem);
986 
987 	s = __hidp_get_session(&bt_sk(ctrl_sock->sk)->dst);
988 	if (s && s->state == BT_CONNECTED) {
989 		err = -EEXIST;
990 		goto failed;
991 	}
992 
993 	bacpy(&session->bdaddr, &bt_sk(ctrl_sock->sk)->dst);
994 
995 	session->ctrl_mtu = min_t(uint, l2cap_pi(ctrl_sock->sk)->chan->omtu,
996 					l2cap_pi(ctrl_sock->sk)->chan->imtu);
997 	session->intr_mtu = min_t(uint, l2cap_pi(intr_sock->sk)->chan->omtu,
998 					l2cap_pi(intr_sock->sk)->chan->imtu);
999 
1000 	BT_DBG("ctrl mtu %d intr mtu %d", session->ctrl_mtu, session->intr_mtu);
1001 
1002 	session->ctrl_sock = ctrl_sock;
1003 	session->intr_sock = intr_sock;
1004 	session->state     = BT_CONNECTED;
1005 
1006 	setup_timer(&session->timer, hidp_idle_timeout, (unsigned long)session);
1007 
1008 	skb_queue_head_init(&session->ctrl_transmit);
1009 	skb_queue_head_init(&session->intr_transmit);
1010 
1011 	mutex_init(&session->report_mutex);
1012 	init_waitqueue_head(&session->report_queue);
1013 	init_waitqueue_head(&session->startup_queue);
1014 	session->waiting_for_startup = 1;
1015 	session->flags   = req->flags & (1 << HIDP_BLUETOOTH_VENDOR_ID);
1016 	session->idle_to = req->idle_to;
1017 
1018 	if (req->rd_size > 0) {
1019 		err = hidp_setup_hid(session, req);
1020 		if (err && err != -ENODEV)
1021 			goto purge;
1022 	}
1023 
1024 	if (!session->hid) {
1025 		err = hidp_setup_input(session, req);
1026 		if (err < 0)
1027 			goto purge;
1028 	}
1029 
1030 	__hidp_link_session(session);
1031 
1032 	hidp_set_timer(session);
1033 
1034 	if (session->hid) {
1035 		vendor  = session->hid->vendor;
1036 		product = session->hid->product;
1037 	} else if (session->input) {
1038 		vendor  = session->input->id.vendor;
1039 		product = session->input->id.product;
1040 	} else {
1041 		vendor = 0x0000;
1042 		product = 0x0000;
1043 	}
1044 
1045 	session->task = kthread_run(hidp_session, session, "khidpd_%04x%04x",
1046 							vendor, product);
1047 	if (IS_ERR(session->task)) {
1048 		err = PTR_ERR(session->task);
1049 		goto unlink;
1050 	}
1051 
1052 	while (session->waiting_for_startup) {
1053 		wait_event_interruptible(session->startup_queue,
1054 			!session->waiting_for_startup);
1055 	}
1056 
1057 	err = hid_add_device(session->hid);
1058 	if (err < 0) {
1059 		atomic_inc(&session->terminate);
1060 		wake_up_process(session->task);
1061 		up_write(&hidp_session_sem);
1062 		return err;
1063 	}
1064 
1065 	if (session->input) {
1066 		hidp_send_ctrl_message(session,
1067 			HIDP_TRANS_SET_PROTOCOL | HIDP_PROTO_BOOT, NULL, 0);
1068 		session->flags |= (1 << HIDP_BOOT_PROTOCOL_MODE);
1069 
1070 		session->leds = 0xff;
1071 		hidp_input_event(session->input, EV_LED, 0, 0);
1072 	}
1073 
1074 	up_write(&hidp_session_sem);
1075 	return 0;
1076 
1077 unlink:
1078 	hidp_del_timer(session);
1079 
1080 	__hidp_unlink_session(session);
1081 
1082 	if (session->input) {
1083 		input_unregister_device(session->input);
1084 		session->input = NULL;
1085 	}
1086 
1087 	if (session->hid) {
1088 		hid_destroy_device(session->hid);
1089 		session->hid = NULL;
1090 	}
1091 
1092 	kfree(session->rd_data);
1093 	session->rd_data = NULL;
1094 
1095 purge:
1096 	skb_queue_purge(&session->ctrl_transmit);
1097 	skb_queue_purge(&session->intr_transmit);
1098 
1099 failed:
1100 	up_write(&hidp_session_sem);
1101 
1102 	kfree(session);
1103 	return err;
1104 }
1105 
1106 int hidp_del_connection(struct hidp_conndel_req *req)
1107 {
1108 	struct hidp_session *session;
1109 	int err = 0;
1110 
1111 	BT_DBG("");
1112 
1113 	down_read(&hidp_session_sem);
1114 
1115 	session = __hidp_get_session(&req->bdaddr);
1116 	if (session) {
1117 		if (req->flags & (1 << HIDP_VIRTUAL_CABLE_UNPLUG)) {
1118 			hidp_send_ctrl_message(session,
1119 				HIDP_TRANS_HID_CONTROL | HIDP_CTRL_VIRTUAL_CABLE_UNPLUG, NULL, 0);
1120 		} else {
1121 			/* Flush the transmit queues */
1122 			skb_queue_purge(&session->ctrl_transmit);
1123 			skb_queue_purge(&session->intr_transmit);
1124 
1125 			atomic_inc(&session->terminate);
1126 			wake_up_process(session->task);
1127 		}
1128 	} else
1129 		err = -ENOENT;
1130 
1131 	up_read(&hidp_session_sem);
1132 	return err;
1133 }
1134 
1135 int hidp_get_connlist(struct hidp_connlist_req *req)
1136 {
1137 	struct list_head *p;
1138 	int err = 0, n = 0;
1139 
1140 	BT_DBG("");
1141 
1142 	down_read(&hidp_session_sem);
1143 
1144 	list_for_each(p, &hidp_session_list) {
1145 		struct hidp_session *session;
1146 		struct hidp_conninfo ci;
1147 
1148 		session = list_entry(p, struct hidp_session, list);
1149 
1150 		__hidp_copy_session(session, &ci);
1151 
1152 		if (copy_to_user(req->ci, &ci, sizeof(ci))) {
1153 			err = -EFAULT;
1154 			break;
1155 		}
1156 
1157 		if (++n >= req->cnum)
1158 			break;
1159 
1160 		req->ci++;
1161 	}
1162 	req->cnum = n;
1163 
1164 	up_read(&hidp_session_sem);
1165 	return err;
1166 }
1167 
1168 int hidp_get_conninfo(struct hidp_conninfo *ci)
1169 {
1170 	struct hidp_session *session;
1171 	int err = 0;
1172 
1173 	down_read(&hidp_session_sem);
1174 
1175 	session = __hidp_get_session(&ci->bdaddr);
1176 	if (session)
1177 		__hidp_copy_session(session, ci);
1178 	else
1179 		err = -ENOENT;
1180 
1181 	up_read(&hidp_session_sem);
1182 	return err;
1183 }
1184 
1185 static const struct hid_device_id hidp_table[] = {
1186 	{ HID_BLUETOOTH_DEVICE(HID_ANY_ID, HID_ANY_ID) },
1187 	{ }
1188 };
1189 
1190 static struct hid_driver hidp_driver = {
1191 	.name = "generic-bluetooth",
1192 	.id_table = hidp_table,
1193 };
1194 
1195 static int __init hidp_init(void)
1196 {
1197 	int ret;
1198 
1199 	BT_INFO("HIDP (Human Interface Emulation) ver %s", VERSION);
1200 
1201 	ret = hid_register_driver(&hidp_driver);
1202 	if (ret)
1203 		goto err;
1204 
1205 	ret = hidp_init_sockets();
1206 	if (ret)
1207 		goto err_drv;
1208 
1209 	return 0;
1210 err_drv:
1211 	hid_unregister_driver(&hidp_driver);
1212 err:
1213 	return ret;
1214 }
1215 
1216 static void __exit hidp_exit(void)
1217 {
1218 	hidp_cleanup_sockets();
1219 	hid_unregister_driver(&hidp_driver);
1220 }
1221 
1222 module_init(hidp_init);
1223 module_exit(hidp_exit);
1224 
1225 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
1226 MODULE_DESCRIPTION("Bluetooth HIDP ver " VERSION);
1227 MODULE_VERSION(VERSION);
1228 MODULE_LICENSE("GPL");
1229 MODULE_ALIAS("bt-proto-6");
1230