xref: /linux/net/bluetooth/hidp/core.c (revision 12871a0bd67dd4db4418e1daafcd46e9d329ef10)
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 	kthread_stop(session->task);
468 }
469 
470 static 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 
476 static inline void hidp_del_timer(struct hidp_session *session)
477 {
478 	if (session->idle_to > 0)
479 		del_timer(&session->timer);
480 }
481 
482 static 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 
528 static 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. */
543 static 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 
585 static 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 
622 static 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 
649 static 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 
664 static 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 
691 static 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 
769 static 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 
789 static 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 
849 static int hidp_open(struct hid_device *hid)
850 {
851 	return 0;
852 }
853 
854 static void hidp_close(struct hid_device *hid)
855 {
856 }
857 
858 static 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 
866 static 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 
882 static 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 
892 static 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(). */
903 static 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 
947 fault:
948 	kfree(session->rd_data);
949 	session->rd_data = NULL;
950 
951 	return err;
952 }
953 
954 int 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 
1060 err_add_device:
1061 	hid_destroy_device(session->hid);
1062 	session->hid = NULL;
1063 	kthread_stop(session->task);
1064 
1065 unlink:
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 
1083 purge:
1084 	skb_queue_purge(&session->ctrl_transmit);
1085 	skb_queue_purge(&session->intr_transmit);
1086 
1087 failed:
1088 	up_write(&hidp_session_sem);
1089 
1090 	input_free_device(session->input);
1091 	kfree(session);
1092 	return err;
1093 }
1094 
1095 int 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 
1123 int 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 
1156 int 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 
1173 static const struct hid_device_id hidp_table[] = {
1174 	{ HID_BLUETOOTH_DEVICE(HID_ANY_ID, HID_ANY_ID) },
1175 	{ }
1176 };
1177 
1178 static struct hid_driver hidp_driver = {
1179 	.name = "generic-bluetooth",
1180 	.id_table = hidp_table,
1181 };
1182 
1183 static 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;
1198 err_drv:
1199 	hid_unregister_driver(&hidp_driver);
1200 err:
1201 	return ret;
1202 }
1203 
1204 static void __exit hidp_exit(void)
1205 {
1206 	hidp_cleanup_sockets();
1207 	hid_unregister_driver(&hidp_driver);
1208 }
1209 
1210 module_init(hidp_init);
1211 module_exit(hidp_exit);
1212 
1213 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
1214 MODULE_DESCRIPTION("Bluetooth HIDP ver " VERSION);
1215 MODULE_VERSION(VERSION);
1216 MODULE_LICENSE("GPL");
1217 MODULE_ALIAS("bt-proto-6");
1218