xref: /openbmc/linux/net/bluetooth/hidp/core.c (revision ecba1060)
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 <net/sock.h>
40 
41 #include <linux/input.h>
42 #include <linux/hid.h>
43 
44 #include <net/bluetooth/bluetooth.h>
45 #include <net/bluetooth/hci_core.h>
46 #include <net/bluetooth/l2cap.h>
47 
48 #include "hidp.h"
49 
50 #define VERSION "1.2"
51 
52 static DECLARE_RWSEM(hidp_session_sem);
53 static LIST_HEAD(hidp_session_list);
54 
55 static unsigned char hidp_keycode[256] = {
56 	  0,  0,  0,  0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,
57 	 50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44,  2,  3,
58 	  4,  5,  6,  7,  8,  9, 10, 11, 28,  1, 14, 15, 57, 12, 13, 26,
59 	 27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,
60 	 65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,
61 	105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,
62 	 72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,
63 	191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,
64 	115,114,  0,  0,  0,121,  0, 89, 93,124, 92, 94, 95,  0,  0,  0,
65 	122,123, 90, 91, 85,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
66 	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
67 	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
68 	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
69 	  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,  0,
70 	 29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,
71 	150,158,159,128,136,177,178,176,142,152,173,140
72 };
73 
74 static unsigned char hidp_mkeyspat[] = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
75 
76 static struct hidp_session *__hidp_get_session(bdaddr_t *bdaddr)
77 {
78 	struct hidp_session *session;
79 	struct list_head *p;
80 
81 	BT_DBG("");
82 
83 	list_for_each(p, &hidp_session_list) {
84 		session = list_entry(p, struct hidp_session, list);
85 		if (!bacmp(bdaddr, &session->bdaddr))
86 			return session;
87 	}
88 	return NULL;
89 }
90 
91 static void __hidp_link_session(struct hidp_session *session)
92 {
93 	__module_get(THIS_MODULE);
94 	list_add(&session->list, &hidp_session_list);
95 }
96 
97 static void __hidp_unlink_session(struct hidp_session *session)
98 {
99 	list_del(&session->list);
100 	module_put(THIS_MODULE);
101 }
102 
103 static void __hidp_copy_session(struct hidp_session *session, struct hidp_conninfo *ci)
104 {
105 	bacpy(&ci->bdaddr, &session->bdaddr);
106 
107 	ci->flags = session->flags;
108 	ci->state = session->state;
109 
110 	ci->vendor  = 0x0000;
111 	ci->product = 0x0000;
112 	ci->version = 0x0000;
113 	memset(ci->name, 0, 128);
114 
115 	if (session->input) {
116 		ci->vendor  = session->input->id.vendor;
117 		ci->product = session->input->id.product;
118 		ci->version = session->input->id.version;
119 		if (session->input->name)
120 			strncpy(ci->name, session->input->name, 128);
121 		else
122 			strncpy(ci->name, "HID Boot Device", 128);
123 	}
124 
125 	if (session->hid) {
126 		ci->vendor  = session->hid->vendor;
127 		ci->product = session->hid->product;
128 		ci->version = session->hid->version;
129 		strncpy(ci->name, session->hid->name, 128);
130 	}
131 }
132 
133 static int hidp_queue_event(struct hidp_session *session, struct input_dev *dev,
134 				unsigned int type, unsigned int code, int value)
135 {
136 	unsigned char newleds;
137 	struct sk_buff *skb;
138 
139 	BT_DBG("session %p type %d code %d value %d", session, type, code, value);
140 
141 	if (type != EV_LED)
142 		return -1;
143 
144 	newleds = (!!test_bit(LED_KANA,    dev->led) << 3) |
145 		  (!!test_bit(LED_COMPOSE, dev->led) << 3) |
146 		  (!!test_bit(LED_SCROLLL, dev->led) << 2) |
147 		  (!!test_bit(LED_CAPSL,   dev->led) << 1) |
148 		  (!!test_bit(LED_NUML,    dev->led));
149 
150 	if (session->leds == newleds)
151 		return 0;
152 
153 	session->leds = newleds;
154 
155 	if (!(skb = alloc_skb(3, GFP_ATOMIC))) {
156 		BT_ERR("Can't allocate memory for new frame");
157 		return -ENOMEM;
158 	}
159 
160 	*skb_put(skb, 1) = HIDP_TRANS_DATA | HIDP_DATA_RTYPE_OUPUT;
161 	*skb_put(skb, 1) = 0x01;
162 	*skb_put(skb, 1) = newleds;
163 
164 	skb_queue_tail(&session->intr_transmit, skb);
165 
166 	hidp_schedule(session);
167 
168 	return 0;
169 }
170 
171 static int hidp_hidinput_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
172 {
173 	struct hid_device *hid = input_get_drvdata(dev);
174 	struct hidp_session *session = hid->driver_data;
175 
176 	return hidp_queue_event(session, dev, type, code, value);
177 }
178 
179 static int hidp_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
180 {
181 	struct hidp_session *session = input_get_drvdata(dev);
182 
183 	return hidp_queue_event(session, dev, type, code, value);
184 }
185 
186 static void hidp_input_report(struct hidp_session *session, struct sk_buff *skb)
187 {
188 	struct input_dev *dev = session->input;
189 	unsigned char *keys = session->keys;
190 	unsigned char *udata = skb->data + 1;
191 	signed char *sdata = skb->data + 1;
192 	int i, size = skb->len - 1;
193 
194 	switch (skb->data[0]) {
195 	case 0x01:	/* Keyboard report */
196 		for (i = 0; i < 8; i++)
197 			input_report_key(dev, hidp_keycode[i + 224], (udata[0] >> i) & 1);
198 
199 		/* If all the key codes have been set to 0x01, it means
200 		 * too many keys were pressed at the same time. */
201 		if (!memcmp(udata + 2, hidp_mkeyspat, 6))
202 			break;
203 
204 		for (i = 2; i < 8; i++) {
205 			if (keys[i] > 3 && memscan(udata + 2, keys[i], 6) == udata + 8) {
206 				if (hidp_keycode[keys[i]])
207 					input_report_key(dev, hidp_keycode[keys[i]], 0);
208 				else
209 					BT_ERR("Unknown key (scancode %#x) released.", keys[i]);
210 			}
211 
212 			if (udata[i] > 3 && memscan(keys + 2, udata[i], 6) == keys + 8) {
213 				if (hidp_keycode[udata[i]])
214 					input_report_key(dev, hidp_keycode[udata[i]], 1);
215 				else
216 					BT_ERR("Unknown key (scancode %#x) pressed.", udata[i]);
217 			}
218 		}
219 
220 		memcpy(keys, udata, 8);
221 		break;
222 
223 	case 0x02:	/* Mouse report */
224 		input_report_key(dev, BTN_LEFT,   sdata[0] & 0x01);
225 		input_report_key(dev, BTN_RIGHT,  sdata[0] & 0x02);
226 		input_report_key(dev, BTN_MIDDLE, sdata[0] & 0x04);
227 		input_report_key(dev, BTN_SIDE,   sdata[0] & 0x08);
228 		input_report_key(dev, BTN_EXTRA,  sdata[0] & 0x10);
229 
230 		input_report_rel(dev, REL_X, sdata[1]);
231 		input_report_rel(dev, REL_Y, sdata[2]);
232 
233 		if (size > 3)
234 			input_report_rel(dev, REL_WHEEL, sdata[3]);
235 		break;
236 	}
237 
238 	input_sync(dev);
239 }
240 
241 static int hidp_queue_report(struct hidp_session *session,
242 				unsigned char *data, int size)
243 {
244 	struct sk_buff *skb;
245 
246 	BT_DBG("session %p hid %p data %p size %d", session, session->hid, data, size);
247 
248 	if (!(skb = alloc_skb(size + 1, GFP_ATOMIC))) {
249 		BT_ERR("Can't allocate memory for new frame");
250 		return -ENOMEM;
251 	}
252 
253 	*skb_put(skb, 1) = 0xa2;
254 	if (size > 0)
255 		memcpy(skb_put(skb, size), data, size);
256 
257 	skb_queue_tail(&session->intr_transmit, skb);
258 
259 	hidp_schedule(session);
260 
261 	return 0;
262 }
263 
264 static int hidp_send_report(struct hidp_session *session, struct hid_report *report)
265 {
266 	unsigned char buf[32];
267 	int rsize;
268 
269 	rsize = ((report->size - 1) >> 3) + 1 + (report->id > 0);
270 	if (rsize > sizeof(buf))
271 		return -EIO;
272 
273 	hid_output_report(report, buf);
274 
275 	return hidp_queue_report(session, buf, rsize);
276 }
277 
278 static void hidp_idle_timeout(unsigned long arg)
279 {
280 	struct hidp_session *session = (struct hidp_session *) arg;
281 
282 	atomic_inc(&session->terminate);
283 	hidp_schedule(session);
284 }
285 
286 static void hidp_set_timer(struct hidp_session *session)
287 {
288 	if (session->idle_to > 0)
289 		mod_timer(&session->timer, jiffies + HZ * session->idle_to);
290 }
291 
292 static inline void hidp_del_timer(struct hidp_session *session)
293 {
294 	if (session->idle_to > 0)
295 		del_timer(&session->timer);
296 }
297 
298 static int __hidp_send_ctrl_message(struct hidp_session *session,
299 			unsigned char hdr, unsigned char *data, int size)
300 {
301 	struct sk_buff *skb;
302 
303 	BT_DBG("session %p data %p size %d", session, data, size);
304 
305 	if (!(skb = alloc_skb(size + 1, GFP_ATOMIC))) {
306 		BT_ERR("Can't allocate memory for new frame");
307 		return -ENOMEM;
308 	}
309 
310 	*skb_put(skb, 1) = hdr;
311 	if (data && size > 0)
312 		memcpy(skb_put(skb, size), data, size);
313 
314 	skb_queue_tail(&session->ctrl_transmit, skb);
315 
316 	return 0;
317 }
318 
319 static inline int hidp_send_ctrl_message(struct hidp_session *session,
320 			unsigned char hdr, unsigned char *data, int size)
321 {
322 	int err;
323 
324 	err = __hidp_send_ctrl_message(session, hdr, data, size);
325 
326 	hidp_schedule(session);
327 
328 	return err;
329 }
330 
331 static void hidp_process_handshake(struct hidp_session *session,
332 					unsigned char param)
333 {
334 	BT_DBG("session %p param 0x%02x", session, param);
335 
336 	switch (param) {
337 	case HIDP_HSHK_SUCCESSFUL:
338 		/* FIXME: Call into SET_ GET_ handlers here */
339 		break;
340 
341 	case HIDP_HSHK_NOT_READY:
342 	case HIDP_HSHK_ERR_INVALID_REPORT_ID:
343 	case HIDP_HSHK_ERR_UNSUPPORTED_REQUEST:
344 	case HIDP_HSHK_ERR_INVALID_PARAMETER:
345 		/* FIXME: Call into SET_ GET_ handlers here */
346 		break;
347 
348 	case HIDP_HSHK_ERR_UNKNOWN:
349 		break;
350 
351 	case HIDP_HSHK_ERR_FATAL:
352 		/* Device requests a reboot, as this is the only way this error
353 		 * can be recovered. */
354 		__hidp_send_ctrl_message(session,
355 			HIDP_TRANS_HID_CONTROL | HIDP_CTRL_SOFT_RESET, NULL, 0);
356 		break;
357 
358 	default:
359 		__hidp_send_ctrl_message(session,
360 			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_INVALID_PARAMETER, NULL, 0);
361 		break;
362 	}
363 }
364 
365 static void hidp_process_hid_control(struct hidp_session *session,
366 					unsigned char param)
367 {
368 	BT_DBG("session %p param 0x%02x", session, param);
369 
370 	if (param == HIDP_CTRL_VIRTUAL_CABLE_UNPLUG) {
371 		/* Flush the transmit queues */
372 		skb_queue_purge(&session->ctrl_transmit);
373 		skb_queue_purge(&session->intr_transmit);
374 
375 		/* Kill session thread */
376 		atomic_inc(&session->terminate);
377 	}
378 }
379 
380 static void hidp_process_data(struct hidp_session *session, struct sk_buff *skb,
381 				unsigned char param)
382 {
383 	BT_DBG("session %p skb %p len %d param 0x%02x", session, skb, skb->len, param);
384 
385 	switch (param) {
386 	case HIDP_DATA_RTYPE_INPUT:
387 		hidp_set_timer(session);
388 
389 		if (session->input)
390 			hidp_input_report(session, skb);
391 
392 		if (session->hid)
393 			hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 0);
394 
395 		break;
396 
397 	case HIDP_DATA_RTYPE_OTHER:
398 	case HIDP_DATA_RTYPE_OUPUT:
399 	case HIDP_DATA_RTYPE_FEATURE:
400 		break;
401 
402 	default:
403 		__hidp_send_ctrl_message(session,
404 			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_INVALID_PARAMETER, NULL, 0);
405 	}
406 }
407 
408 static void hidp_recv_ctrl_frame(struct hidp_session *session,
409 					struct sk_buff *skb)
410 {
411 	unsigned char hdr, type, param;
412 
413 	BT_DBG("session %p skb %p len %d", session, skb, skb->len);
414 
415 	hdr = skb->data[0];
416 	skb_pull(skb, 1);
417 
418 	type = hdr & HIDP_HEADER_TRANS_MASK;
419 	param = hdr & HIDP_HEADER_PARAM_MASK;
420 
421 	switch (type) {
422 	case HIDP_TRANS_HANDSHAKE:
423 		hidp_process_handshake(session, param);
424 		break;
425 
426 	case HIDP_TRANS_HID_CONTROL:
427 		hidp_process_hid_control(session, param);
428 		break;
429 
430 	case HIDP_TRANS_DATA:
431 		hidp_process_data(session, skb, param);
432 		break;
433 
434 	default:
435 		__hidp_send_ctrl_message(session,
436 			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_UNSUPPORTED_REQUEST, NULL, 0);
437 		break;
438 	}
439 
440 	kfree_skb(skb);
441 }
442 
443 static void hidp_recv_intr_frame(struct hidp_session *session,
444 				struct sk_buff *skb)
445 {
446 	unsigned char hdr;
447 
448 	BT_DBG("session %p skb %p len %d", session, skb, skb->len);
449 
450 	hdr = skb->data[0];
451 	skb_pull(skb, 1);
452 
453 	if (hdr == (HIDP_TRANS_DATA | HIDP_DATA_RTYPE_INPUT)) {
454 		hidp_set_timer(session);
455 
456 		if (session->input)
457 			hidp_input_report(session, skb);
458 
459 		if (session->hid) {
460 			hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 1);
461 			BT_DBG("report len %d", skb->len);
462 		}
463 	} else {
464 		BT_DBG("Unsupported protocol header 0x%02x", hdr);
465 	}
466 
467 	kfree_skb(skb);
468 }
469 
470 static int hidp_send_frame(struct socket *sock, unsigned char *data, int len)
471 {
472 	struct kvec iv = { data, len };
473 	struct msghdr msg;
474 
475 	BT_DBG("sock %p data %p len %d", sock, data, len);
476 
477 	if (!len)
478 		return 0;
479 
480 	memset(&msg, 0, sizeof(msg));
481 
482 	return kernel_sendmsg(sock, &msg, &iv, 1, len);
483 }
484 
485 static void hidp_process_transmit(struct hidp_session *session)
486 {
487 	struct sk_buff *skb;
488 
489 	BT_DBG("session %p", session);
490 
491 	while ((skb = skb_dequeue(&session->ctrl_transmit))) {
492 		if (hidp_send_frame(session->ctrl_sock, skb->data, skb->len) < 0) {
493 			skb_queue_head(&session->ctrl_transmit, skb);
494 			break;
495 		}
496 
497 		hidp_set_timer(session);
498 		kfree_skb(skb);
499 	}
500 
501 	while ((skb = skb_dequeue(&session->intr_transmit))) {
502 		if (hidp_send_frame(session->intr_sock, skb->data, skb->len) < 0) {
503 			skb_queue_head(&session->intr_transmit, skb);
504 			break;
505 		}
506 
507 		hidp_set_timer(session);
508 		kfree_skb(skb);
509 	}
510 }
511 
512 static int hidp_session(void *arg)
513 {
514 	struct hidp_session *session = arg;
515 	struct sock *ctrl_sk = session->ctrl_sock->sk;
516 	struct sock *intr_sk = session->intr_sock->sk;
517 	struct sk_buff *skb;
518 	int vendor = 0x0000, product = 0x0000;
519 	wait_queue_t ctrl_wait, intr_wait;
520 
521 	BT_DBG("session %p", session);
522 
523 	if (session->input) {
524 		vendor  = session->input->id.vendor;
525 		product = session->input->id.product;
526 	}
527 
528 	if (session->hid) {
529 		vendor  = session->hid->vendor;
530 		product = session->hid->product;
531 	}
532 
533 	daemonize("khidpd_%04x%04x", vendor, product);
534 	set_user_nice(current, -15);
535 
536 	init_waitqueue_entry(&ctrl_wait, current);
537 	init_waitqueue_entry(&intr_wait, current);
538 	add_wait_queue(ctrl_sk->sk_sleep, &ctrl_wait);
539 	add_wait_queue(intr_sk->sk_sleep, &intr_wait);
540 	while (!atomic_read(&session->terminate)) {
541 		set_current_state(TASK_INTERRUPTIBLE);
542 
543 		if (ctrl_sk->sk_state != BT_CONNECTED || intr_sk->sk_state != BT_CONNECTED)
544 			break;
545 
546 		while ((skb = skb_dequeue(&ctrl_sk->sk_receive_queue))) {
547 			skb_orphan(skb);
548 			hidp_recv_ctrl_frame(session, skb);
549 		}
550 
551 		while ((skb = skb_dequeue(&intr_sk->sk_receive_queue))) {
552 			skb_orphan(skb);
553 			hidp_recv_intr_frame(session, skb);
554 		}
555 
556 		hidp_process_transmit(session);
557 
558 		schedule();
559 	}
560 	set_current_state(TASK_RUNNING);
561 	remove_wait_queue(intr_sk->sk_sleep, &intr_wait);
562 	remove_wait_queue(ctrl_sk->sk_sleep, &ctrl_wait);
563 
564 	down_write(&hidp_session_sem);
565 
566 	hidp_del_timer(session);
567 
568 	if (session->input) {
569 		input_unregister_device(session->input);
570 		session->input = NULL;
571 	}
572 
573 	if (session->hid) {
574 		if (session->hid->claimed & HID_CLAIMED_INPUT)
575 			hidinput_disconnect(session->hid);
576 		hid_destroy_device(session->hid);
577 	}
578 
579 	/* Wakeup user-space polling for socket errors */
580 	session->intr_sock->sk->sk_err = EUNATCH;
581 	session->ctrl_sock->sk->sk_err = EUNATCH;
582 
583 	hidp_schedule(session);
584 
585 	fput(session->intr_sock->file);
586 
587 	wait_event_timeout(*(ctrl_sk->sk_sleep),
588 		(ctrl_sk->sk_state == BT_CLOSED), msecs_to_jiffies(500));
589 
590 	fput(session->ctrl_sock->file);
591 
592 	__hidp_unlink_session(session);
593 
594 	up_write(&hidp_session_sem);
595 
596 	kfree(session);
597 	return 0;
598 }
599 
600 static struct device *hidp_get_device(struct hidp_session *session)
601 {
602 	bdaddr_t *src = &bt_sk(session->ctrl_sock->sk)->src;
603 	bdaddr_t *dst = &bt_sk(session->ctrl_sock->sk)->dst;
604 	struct hci_dev *hdev;
605 	struct hci_conn *conn;
606 
607 	hdev = hci_get_route(dst, src);
608 	if (!hdev)
609 		return NULL;
610 
611 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
612 
613 	hci_dev_put(hdev);
614 
615 	return conn ? &conn->dev : NULL;
616 }
617 
618 static int hidp_setup_input(struct hidp_session *session,
619 				struct hidp_connadd_req *req)
620 {
621 	struct input_dev *input;
622 	int i;
623 
624 	input = input_allocate_device();
625 	if (!input)
626 		return -ENOMEM;
627 
628 	session->input = input;
629 
630 	input_set_drvdata(input, session);
631 
632 	input->name = "Bluetooth HID Boot Protocol Device";
633 
634 	input->id.bustype = BUS_BLUETOOTH;
635 	input->id.vendor  = req->vendor;
636 	input->id.product = req->product;
637 	input->id.version = req->version;
638 
639 	if (req->subclass & 0x40) {
640 		set_bit(EV_KEY, input->evbit);
641 		set_bit(EV_LED, input->evbit);
642 		set_bit(EV_REP, input->evbit);
643 
644 		set_bit(LED_NUML,    input->ledbit);
645 		set_bit(LED_CAPSL,   input->ledbit);
646 		set_bit(LED_SCROLLL, input->ledbit);
647 		set_bit(LED_COMPOSE, input->ledbit);
648 		set_bit(LED_KANA,    input->ledbit);
649 
650 		for (i = 0; i < sizeof(hidp_keycode); i++)
651 			set_bit(hidp_keycode[i], input->keybit);
652 		clear_bit(0, input->keybit);
653 	}
654 
655 	if (req->subclass & 0x80) {
656 		input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
657 		input->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
658 			BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
659 		input->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);
660 		input->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) |
661 			BIT_MASK(BTN_EXTRA);
662 		input->relbit[0] |= BIT_MASK(REL_WHEEL);
663 	}
664 
665 	input->dev.parent = hidp_get_device(session);
666 
667 	input->event = hidp_input_event;
668 
669 	return input_register_device(input);
670 }
671 
672 static int hidp_open(struct hid_device *hid)
673 {
674 	return 0;
675 }
676 
677 static void hidp_close(struct hid_device *hid)
678 {
679 }
680 
681 static int hidp_parse(struct hid_device *hid)
682 {
683 	struct hidp_session *session = hid->driver_data;
684 	struct hidp_connadd_req *req = session->req;
685 	unsigned char *buf;
686 	int ret;
687 
688 	buf = kmalloc(req->rd_size, GFP_KERNEL);
689 	if (!buf)
690 		return -ENOMEM;
691 
692 	if (copy_from_user(buf, req->rd_data, req->rd_size)) {
693 		kfree(buf);
694 		return -EFAULT;
695 	}
696 
697 	ret = hid_parse_report(session->hid, buf, req->rd_size);
698 
699 	kfree(buf);
700 
701 	if (ret)
702 		return ret;
703 
704 	session->req = NULL;
705 
706 	return 0;
707 }
708 
709 static int hidp_start(struct hid_device *hid)
710 {
711 	struct hidp_session *session = hid->driver_data;
712 	struct hid_report *report;
713 
714 	list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].
715 			report_list, list)
716 		hidp_send_report(session, report);
717 
718 	list_for_each_entry(report, &hid->report_enum[HID_FEATURE_REPORT].
719 			report_list, list)
720 		hidp_send_report(session, report);
721 
722 	return 0;
723 }
724 
725 static void hidp_stop(struct hid_device *hid)
726 {
727 	struct hidp_session *session = hid->driver_data;
728 
729 	skb_queue_purge(&session->ctrl_transmit);
730 	skb_queue_purge(&session->intr_transmit);
731 
732 	if (hid->claimed & HID_CLAIMED_INPUT)
733 		hidinput_disconnect(hid);
734 	hid->claimed = 0;
735 }
736 
737 static struct hid_ll_driver hidp_hid_driver = {
738 	.parse = hidp_parse,
739 	.start = hidp_start,
740 	.stop = hidp_stop,
741 	.open  = hidp_open,
742 	.close = hidp_close,
743 	.hidinput_input_event = hidp_hidinput_event,
744 };
745 
746 static int hidp_setup_hid(struct hidp_session *session,
747 				struct hidp_connadd_req *req)
748 {
749 	struct hid_device *hid;
750 	bdaddr_t src, dst;
751 	int ret;
752 
753 	hid = hid_allocate_device();
754 	if (IS_ERR(hid)) {
755 		ret = PTR_ERR(session->hid);
756 		goto err;
757 	}
758 
759 	session->hid = hid;
760 	session->req = req;
761 	hid->driver_data = session;
762 
763 	baswap(&src, &bt_sk(session->ctrl_sock->sk)->src);
764 	baswap(&dst, &bt_sk(session->ctrl_sock->sk)->dst);
765 
766 	hid->bus     = BUS_BLUETOOTH;
767 	hid->vendor  = req->vendor;
768 	hid->product = req->product;
769 	hid->version = req->version;
770 	hid->country = req->country;
771 
772 	strncpy(hid->name, req->name, 128);
773 	strncpy(hid->phys, batostr(&src), 64);
774 	strncpy(hid->uniq, batostr(&dst), 64);
775 
776 	hid->dev.parent = hidp_get_device(session);
777 	hid->ll_driver = &hidp_hid_driver;
778 
779 	ret = hid_add_device(hid);
780 	if (ret)
781 		goto err_hid;
782 
783 	return 0;
784 err_hid:
785 	hid_destroy_device(hid);
786 	session->hid = NULL;
787 err:
788 	return ret;
789 }
790 
791 int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock)
792 {
793 	struct hidp_session *session, *s;
794 	int err;
795 
796 	BT_DBG("");
797 
798 	if (bacmp(&bt_sk(ctrl_sock->sk)->src, &bt_sk(intr_sock->sk)->src) ||
799 			bacmp(&bt_sk(ctrl_sock->sk)->dst, &bt_sk(intr_sock->sk)->dst))
800 		return -ENOTUNIQ;
801 
802 	session = kzalloc(sizeof(struct hidp_session), GFP_KERNEL);
803 	if (!session)
804 		return -ENOMEM;
805 
806 	BT_DBG("rd_data %p rd_size %d", req->rd_data, req->rd_size);
807 
808 	down_write(&hidp_session_sem);
809 
810 	s = __hidp_get_session(&bt_sk(ctrl_sock->sk)->dst);
811 	if (s && s->state == BT_CONNECTED) {
812 		err = -EEXIST;
813 		goto failed;
814 	}
815 
816 	bacpy(&session->bdaddr, &bt_sk(ctrl_sock->sk)->dst);
817 
818 	session->ctrl_mtu = min_t(uint, l2cap_pi(ctrl_sock->sk)->omtu, l2cap_pi(ctrl_sock->sk)->imtu);
819 	session->intr_mtu = min_t(uint, l2cap_pi(intr_sock->sk)->omtu, l2cap_pi(intr_sock->sk)->imtu);
820 
821 	BT_DBG("ctrl mtu %d intr mtu %d", session->ctrl_mtu, session->intr_mtu);
822 
823 	session->ctrl_sock = ctrl_sock;
824 	session->intr_sock = intr_sock;
825 	session->state     = BT_CONNECTED;
826 
827 	setup_timer(&session->timer, hidp_idle_timeout, (unsigned long)session);
828 
829 	skb_queue_head_init(&session->ctrl_transmit);
830 	skb_queue_head_init(&session->intr_transmit);
831 
832 	session->flags   = req->flags & (1 << HIDP_BLUETOOTH_VENDOR_ID);
833 	session->idle_to = req->idle_to;
834 
835 	if (req->rd_size > 0) {
836 		err = hidp_setup_hid(session, req);
837 		if (err && err != -ENODEV)
838 			goto err_skb;
839 	}
840 
841 	if (!session->hid) {
842 		err = hidp_setup_input(session, req);
843 		if (err < 0)
844 			goto err_skb;
845 	}
846 
847 	__hidp_link_session(session);
848 
849 	hidp_set_timer(session);
850 
851 	err = kernel_thread(hidp_session, session, CLONE_KERNEL);
852 	if (err < 0)
853 		goto unlink;
854 
855 	if (session->input) {
856 		hidp_send_ctrl_message(session,
857 			HIDP_TRANS_SET_PROTOCOL | HIDP_PROTO_BOOT, NULL, 0);
858 		session->flags |= (1 << HIDP_BOOT_PROTOCOL_MODE);
859 
860 		session->leds = 0xff;
861 		hidp_input_event(session->input, EV_LED, 0, 0);
862 	}
863 
864 	up_write(&hidp_session_sem);
865 	return 0;
866 
867 unlink:
868 	hidp_del_timer(session);
869 
870 	__hidp_unlink_session(session);
871 
872 	if (session->input)
873 		input_unregister_device(session->input);
874 	if (session->hid)
875 		hid_destroy_device(session->hid);
876 err_skb:
877 	skb_queue_purge(&session->ctrl_transmit);
878 	skb_queue_purge(&session->intr_transmit);
879 failed:
880 	up_write(&hidp_session_sem);
881 
882 	input_free_device(session->input);
883 	kfree(session);
884 	return err;
885 }
886 
887 int hidp_del_connection(struct hidp_conndel_req *req)
888 {
889 	struct hidp_session *session;
890 	int err = 0;
891 
892 	BT_DBG("");
893 
894 	down_read(&hidp_session_sem);
895 
896 	session = __hidp_get_session(&req->bdaddr);
897 	if (session) {
898 		if (req->flags & (1 << HIDP_VIRTUAL_CABLE_UNPLUG)) {
899 			hidp_send_ctrl_message(session,
900 				HIDP_TRANS_HID_CONTROL | HIDP_CTRL_VIRTUAL_CABLE_UNPLUG, NULL, 0);
901 		} else {
902 			/* Flush the transmit queues */
903 			skb_queue_purge(&session->ctrl_transmit);
904 			skb_queue_purge(&session->intr_transmit);
905 
906 			/* Wakeup user-space polling for socket errors */
907 			session->intr_sock->sk->sk_err = EUNATCH;
908 			session->ctrl_sock->sk->sk_err = EUNATCH;
909 
910 			/* Kill session thread */
911 			atomic_inc(&session->terminate);
912 			hidp_schedule(session);
913 		}
914 	} else
915 		err = -ENOENT;
916 
917 	up_read(&hidp_session_sem);
918 	return err;
919 }
920 
921 int hidp_get_connlist(struct hidp_connlist_req *req)
922 {
923 	struct list_head *p;
924 	int err = 0, n = 0;
925 
926 	BT_DBG("");
927 
928 	down_read(&hidp_session_sem);
929 
930 	list_for_each(p, &hidp_session_list) {
931 		struct hidp_session *session;
932 		struct hidp_conninfo ci;
933 
934 		session = list_entry(p, struct hidp_session, list);
935 
936 		__hidp_copy_session(session, &ci);
937 
938 		if (copy_to_user(req->ci, &ci, sizeof(ci))) {
939 			err = -EFAULT;
940 			break;
941 		}
942 
943 		if (++n >= req->cnum)
944 			break;
945 
946 		req->ci++;
947 	}
948 	req->cnum = n;
949 
950 	up_read(&hidp_session_sem);
951 	return err;
952 }
953 
954 int hidp_get_conninfo(struct hidp_conninfo *ci)
955 {
956 	struct hidp_session *session;
957 	int err = 0;
958 
959 	down_read(&hidp_session_sem);
960 
961 	session = __hidp_get_session(&ci->bdaddr);
962 	if (session)
963 		__hidp_copy_session(session, ci);
964 	else
965 		err = -ENOENT;
966 
967 	up_read(&hidp_session_sem);
968 	return err;
969 }
970 
971 static const struct hid_device_id hidp_table[] = {
972 	{ HID_BLUETOOTH_DEVICE(HID_ANY_ID, HID_ANY_ID) },
973 	{ }
974 };
975 
976 static struct hid_driver hidp_driver = {
977 	.name = "generic-bluetooth",
978 	.id_table = hidp_table,
979 };
980 
981 static int __init hidp_init(void)
982 {
983 	int ret;
984 
985 	l2cap_load();
986 
987 	BT_INFO("HIDP (Human Interface Emulation) ver %s", VERSION);
988 
989 	ret = hid_register_driver(&hidp_driver);
990 	if (ret)
991 		goto err;
992 
993 	ret = hidp_init_sockets();
994 	if (ret)
995 		goto err_drv;
996 
997 	return 0;
998 err_drv:
999 	hid_unregister_driver(&hidp_driver);
1000 err:
1001 	return ret;
1002 }
1003 
1004 static void __exit hidp_exit(void)
1005 {
1006 	hidp_cleanup_sockets();
1007 	hid_unregister_driver(&hidp_driver);
1008 }
1009 
1010 module_init(hidp_init);
1011 module_exit(hidp_exit);
1012 
1013 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
1014 MODULE_DESCRIPTION("Bluetooth HIDP ver " VERSION);
1015 MODULE_VERSION(VERSION);
1016 MODULE_LICENSE("GPL");
1017 MODULE_ALIAS("bt-proto-6");
1018