xref: /openbmc/linux/net/bluetooth/hidp/core.c (revision a2fb4d78)
1 /*
2    HIDP implementation for Linux Bluetooth stack (BlueZ).
3    Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
4    Copyright (C) 2013 David Herrmann <dh.herrmann@gmail.com>
5 
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License version 2 as
8    published by the Free Software Foundation;
9 
10    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 
19    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21    SOFTWARE IS DISCLAIMED.
22 */
23 
24 #include <linux/kref.h>
25 #include <linux/module.h>
26 #include <linux/file.h>
27 #include <linux/kthread.h>
28 #include <linux/hidraw.h>
29 
30 #include <net/bluetooth/bluetooth.h>
31 #include <net/bluetooth/hci_core.h>
32 #include <net/bluetooth/l2cap.h>
33 
34 #include "hidp.h"
35 
36 #define VERSION "1.2"
37 
38 static DECLARE_RWSEM(hidp_session_sem);
39 static LIST_HEAD(hidp_session_list);
40 
41 static unsigned char hidp_keycode[256] = {
42 	  0,   0,   0,   0,  30,  48,  46,  32,  18,  33,  34,  35,  23,  36,
43 	 37,  38,  50,  49,  24,  25,  16,  19,  31,  20,  22,  47,  17,  45,
44 	 21,  44,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  28,   1,
45 	 14,  15,  57,  12,  13,  26,  27,  43,  43,  39,  40,  41,  51,  52,
46 	 53,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  87,  88,
47 	 99,  70, 119, 110, 102, 104, 111, 107, 109, 106, 105, 108, 103,  69,
48 	 98,  55,  74,  78,  96,  79,  80,  81,  75,  76,  77,  71,  72,  73,
49 	 82,  83,  86, 127, 116, 117, 183, 184, 185, 186, 187, 188, 189, 190,
50 	191, 192, 193, 194, 134, 138, 130, 132, 128, 129, 131, 137, 133, 135,
51 	136, 113, 115, 114,   0,   0,   0, 121,   0,  89,  93, 124,  92,  94,
52 	 95,   0,   0,   0, 122, 123,  90,  91,  85,   0,   0,   0,   0,   0,
53 	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
54 	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
55 	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
56 	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
57 	  0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
58 	 29,  42,  56, 125,  97,  54, 100, 126, 164, 166, 165, 163, 161, 115,
59 	114, 113, 150, 158, 159, 128, 136, 177, 178, 176, 142, 152, 173, 140
60 };
61 
62 static unsigned char hidp_mkeyspat[] = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
63 
64 static int hidp_session_probe(struct l2cap_conn *conn,
65 			      struct l2cap_user *user);
66 static void hidp_session_remove(struct l2cap_conn *conn,
67 				struct l2cap_user *user);
68 static int hidp_session_thread(void *arg);
69 static void hidp_session_terminate(struct hidp_session *s);
70 
71 static void hidp_copy_session(struct hidp_session *session, struct hidp_conninfo *ci)
72 {
73 	memset(ci, 0, sizeof(*ci));
74 	bacpy(&ci->bdaddr, &session->bdaddr);
75 
76 	ci->flags = session->flags;
77 	ci->state = BT_CONNECTED;
78 
79 	if (session->input) {
80 		ci->vendor  = session->input->id.vendor;
81 		ci->product = session->input->id.product;
82 		ci->version = session->input->id.version;
83 		if (session->input->name)
84 			strlcpy(ci->name, session->input->name, 128);
85 		else
86 			strlcpy(ci->name, "HID Boot Device", 128);
87 	} else if (session->hid) {
88 		ci->vendor  = session->hid->vendor;
89 		ci->product = session->hid->product;
90 		ci->version = session->hid->version;
91 		strlcpy(ci->name, session->hid->name, 128);
92 	}
93 }
94 
95 /* assemble skb, queue message on @transmit and wake up the session thread */
96 static int hidp_send_message(struct hidp_session *session, struct socket *sock,
97 			     struct sk_buff_head *transmit, unsigned char hdr,
98 			     const unsigned char *data, int size)
99 {
100 	struct sk_buff *skb;
101 	struct sock *sk = sock->sk;
102 
103 	BT_DBG("session %p data %p size %d", session, data, size);
104 
105 	if (atomic_read(&session->terminate))
106 		return -EIO;
107 
108 	skb = alloc_skb(size + 1, GFP_ATOMIC);
109 	if (!skb) {
110 		BT_ERR("Can't allocate memory for new frame");
111 		return -ENOMEM;
112 	}
113 
114 	*skb_put(skb, 1) = hdr;
115 	if (data && size > 0)
116 		memcpy(skb_put(skb, size), data, size);
117 
118 	skb_queue_tail(transmit, skb);
119 	wake_up_interruptible(sk_sleep(sk));
120 
121 	return 0;
122 }
123 
124 static int hidp_send_ctrl_message(struct hidp_session *session,
125 				  unsigned char hdr, const unsigned char *data,
126 				  int size)
127 {
128 	return hidp_send_message(session, session->ctrl_sock,
129 				 &session->ctrl_transmit, hdr, data, size);
130 }
131 
132 static int hidp_send_intr_message(struct hidp_session *session,
133 				  unsigned char hdr, const unsigned char *data,
134 				  int size)
135 {
136 	return hidp_send_message(session, session->intr_sock,
137 				 &session->intr_transmit, hdr, data, size);
138 }
139 
140 static int hidp_input_event(struct input_dev *dev, unsigned int type,
141 			    unsigned int code, int value)
142 {
143 	struct hidp_session *session = input_get_drvdata(dev);
144 	unsigned char newleds;
145 	unsigned char hdr, data[2];
146 
147 	BT_DBG("session %p type %d code %d value %d",
148 	       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 	hdr = HIDP_TRANS_DATA | HIDP_DATA_RTYPE_OUPUT;
165 	data[0] = 0x01;
166 	data[1] = newleds;
167 
168 	return hidp_send_intr_message(session, hdr, data, 2);
169 }
170 
171 static void hidp_input_report(struct hidp_session *session, struct sk_buff *skb)
172 {
173 	struct input_dev *dev = session->input;
174 	unsigned char *keys = session->keys;
175 	unsigned char *udata = skb->data + 1;
176 	signed char *sdata = skb->data + 1;
177 	int i, size = skb->len - 1;
178 
179 	switch (skb->data[0]) {
180 	case 0x01:	/* Keyboard report */
181 		for (i = 0; i < 8; i++)
182 			input_report_key(dev, hidp_keycode[i + 224], (udata[0] >> i) & 1);
183 
184 		/* If all the key codes have been set to 0x01, it means
185 		 * too many keys were pressed at the same time. */
186 		if (!memcmp(udata + 2, hidp_mkeyspat, 6))
187 			break;
188 
189 		for (i = 2; i < 8; i++) {
190 			if (keys[i] > 3 && memscan(udata + 2, keys[i], 6) == udata + 8) {
191 				if (hidp_keycode[keys[i]])
192 					input_report_key(dev, hidp_keycode[keys[i]], 0);
193 				else
194 					BT_ERR("Unknown key (scancode %#x) released.", keys[i]);
195 			}
196 
197 			if (udata[i] > 3 && memscan(keys + 2, udata[i], 6) == keys + 8) {
198 				if (hidp_keycode[udata[i]])
199 					input_report_key(dev, hidp_keycode[udata[i]], 1);
200 				else
201 					BT_ERR("Unknown key (scancode %#x) pressed.", udata[i]);
202 			}
203 		}
204 
205 		memcpy(keys, udata, 8);
206 		break;
207 
208 	case 0x02:	/* Mouse report */
209 		input_report_key(dev, BTN_LEFT,   sdata[0] & 0x01);
210 		input_report_key(dev, BTN_RIGHT,  sdata[0] & 0x02);
211 		input_report_key(dev, BTN_MIDDLE, sdata[0] & 0x04);
212 		input_report_key(dev, BTN_SIDE,   sdata[0] & 0x08);
213 		input_report_key(dev, BTN_EXTRA,  sdata[0] & 0x10);
214 
215 		input_report_rel(dev, REL_X, sdata[1]);
216 		input_report_rel(dev, REL_Y, sdata[2]);
217 
218 		if (size > 3)
219 			input_report_rel(dev, REL_WHEEL, sdata[3]);
220 		break;
221 	}
222 
223 	input_sync(dev);
224 }
225 
226 static int hidp_send_report(struct hidp_session *session, struct hid_report *report)
227 {
228 	unsigned char hdr;
229 	u8 *buf;
230 	int rsize, ret;
231 
232 	buf = hid_alloc_report_buf(report, GFP_ATOMIC);
233 	if (!buf)
234 		return -EIO;
235 
236 	hid_output_report(report, buf);
237 	hdr = HIDP_TRANS_DATA | HIDP_DATA_RTYPE_OUPUT;
238 
239 	rsize = ((report->size - 1) >> 3) + 1 + (report->id > 0);
240 	ret = hidp_send_intr_message(session, hdr, buf, rsize);
241 
242 	kfree(buf);
243 	return ret;
244 }
245 
246 static int hidp_hidinput_event(struct input_dev *dev, unsigned int type,
247 			       unsigned int code, int value)
248 {
249 	struct hid_device *hid = input_get_drvdata(dev);
250 	struct hidp_session *session = hid->driver_data;
251 	struct hid_field *field;
252 	int offset;
253 
254 	BT_DBG("session %p type %d code %d value %d",
255 	       session, type, code, value);
256 
257 	if (type != EV_LED)
258 		return -1;
259 
260 	offset = hidinput_find_field(hid, type, code, &field);
261 	if (offset == -1) {
262 		hid_warn(dev, "event field not found\n");
263 		return -1;
264 	}
265 
266 	hid_set_field(field, offset, value);
267 
268 	return hidp_send_report(session, field->report);
269 }
270 
271 static int hidp_get_raw_report(struct hid_device *hid,
272 		unsigned char report_number,
273 		unsigned char *data, size_t count,
274 		unsigned char report_type)
275 {
276 	struct hidp_session *session = hid->driver_data;
277 	struct sk_buff *skb;
278 	size_t len;
279 	int numbered_reports = hid->report_enum[report_type].numbered;
280 	int ret;
281 
282 	if (atomic_read(&session->terminate))
283 		return -EIO;
284 
285 	switch (report_type) {
286 	case HID_FEATURE_REPORT:
287 		report_type = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_FEATURE;
288 		break;
289 	case HID_INPUT_REPORT:
290 		report_type = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_INPUT;
291 		break;
292 	case HID_OUTPUT_REPORT:
293 		report_type = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_OUPUT;
294 		break;
295 	default:
296 		return -EINVAL;
297 	}
298 
299 	if (mutex_lock_interruptible(&session->report_mutex))
300 		return -ERESTARTSYS;
301 
302 	/* Set up our wait, and send the report request to the device. */
303 	session->waiting_report_type = report_type & HIDP_DATA_RTYPE_MASK;
304 	session->waiting_report_number = numbered_reports ? report_number : -1;
305 	set_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
306 	data[0] = report_number;
307 	ret = hidp_send_ctrl_message(session, report_type, data, 1);
308 	if (ret)
309 		goto err;
310 
311 	/* Wait for the return of the report. The returned report
312 	   gets put in session->report_return.  */
313 	while (test_bit(HIDP_WAITING_FOR_RETURN, &session->flags) &&
314 	       !atomic_read(&session->terminate)) {
315 		int res;
316 
317 		res = wait_event_interruptible_timeout(session->report_queue,
318 			!test_bit(HIDP_WAITING_FOR_RETURN, &session->flags)
319 				|| atomic_read(&session->terminate),
320 			5*HZ);
321 		if (res == 0) {
322 			/* timeout */
323 			ret = -EIO;
324 			goto err;
325 		}
326 		if (res < 0) {
327 			/* signal */
328 			ret = -ERESTARTSYS;
329 			goto err;
330 		}
331 	}
332 
333 	skb = session->report_return;
334 	if (skb) {
335 		len = skb->len < count ? skb->len : count;
336 		memcpy(data, skb->data, len);
337 
338 		kfree_skb(skb);
339 		session->report_return = NULL;
340 	} else {
341 		/* Device returned a HANDSHAKE, indicating  protocol error. */
342 		len = -EIO;
343 	}
344 
345 	clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
346 	mutex_unlock(&session->report_mutex);
347 
348 	return len;
349 
350 err:
351 	clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
352 	mutex_unlock(&session->report_mutex);
353 	return ret;
354 }
355 
356 static int hidp_output_raw_report(struct hid_device *hid, unsigned char *data, size_t count,
357 		unsigned char report_type)
358 {
359 	struct hidp_session *session = hid->driver_data;
360 	int ret;
361 
362 	if (report_type == HID_OUTPUT_REPORT) {
363 		report_type = HIDP_TRANS_DATA | HIDP_DATA_RTYPE_OUPUT;
364 		return hidp_send_intr_message(session, report_type,
365 					      data, count);
366 	} else if (report_type != HID_FEATURE_REPORT) {
367 		return -EINVAL;
368 	}
369 
370 	if (mutex_lock_interruptible(&session->report_mutex))
371 		return -ERESTARTSYS;
372 
373 	/* Set up our wait, and send the report request to the device. */
374 	set_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
375 	report_type = HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_FEATURE;
376 	ret = hidp_send_ctrl_message(session, report_type, data, count);
377 	if (ret)
378 		goto err;
379 
380 	/* Wait for the ACK from the device. */
381 	while (test_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags) &&
382 	       !atomic_read(&session->terminate)) {
383 		int res;
384 
385 		res = wait_event_interruptible_timeout(session->report_queue,
386 			!test_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags)
387 				|| atomic_read(&session->terminate),
388 			10*HZ);
389 		if (res == 0) {
390 			/* timeout */
391 			ret = -EIO;
392 			goto err;
393 		}
394 		if (res < 0) {
395 			/* signal */
396 			ret = -ERESTARTSYS;
397 			goto err;
398 		}
399 	}
400 
401 	if (!session->output_report_success) {
402 		ret = -EIO;
403 		goto err;
404 	}
405 
406 	ret = count;
407 
408 err:
409 	clear_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
410 	mutex_unlock(&session->report_mutex);
411 	return ret;
412 }
413 
414 static void hidp_idle_timeout(unsigned long arg)
415 {
416 	struct hidp_session *session = (struct hidp_session *) arg;
417 
418 	hidp_session_terminate(session);
419 }
420 
421 static void hidp_set_timer(struct hidp_session *session)
422 {
423 	if (session->idle_to > 0)
424 		mod_timer(&session->timer, jiffies + HZ * session->idle_to);
425 }
426 
427 static void hidp_del_timer(struct hidp_session *session)
428 {
429 	if (session->idle_to > 0)
430 		del_timer(&session->timer);
431 }
432 
433 static void hidp_process_report(struct hidp_session *session,
434 				int type, const u8 *data, int len, int intr)
435 {
436 	if (len > HID_MAX_BUFFER_SIZE)
437 		len = HID_MAX_BUFFER_SIZE;
438 
439 	memcpy(session->input_buf, data, len);
440 	hid_input_report(session->hid, type, session->input_buf, len, intr);
441 }
442 
443 static void hidp_process_handshake(struct hidp_session *session,
444 					unsigned char param)
445 {
446 	BT_DBG("session %p param 0x%02x", session, param);
447 	session->output_report_success = 0; /* default condition */
448 
449 	switch (param) {
450 	case HIDP_HSHK_SUCCESSFUL:
451 		/* FIXME: Call into SET_ GET_ handlers here */
452 		session->output_report_success = 1;
453 		break;
454 
455 	case HIDP_HSHK_NOT_READY:
456 	case HIDP_HSHK_ERR_INVALID_REPORT_ID:
457 	case HIDP_HSHK_ERR_UNSUPPORTED_REQUEST:
458 	case HIDP_HSHK_ERR_INVALID_PARAMETER:
459 		if (test_and_clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags))
460 			wake_up_interruptible(&session->report_queue);
461 
462 		/* FIXME: Call into SET_ GET_ handlers here */
463 		break;
464 
465 	case HIDP_HSHK_ERR_UNKNOWN:
466 		break;
467 
468 	case HIDP_HSHK_ERR_FATAL:
469 		/* Device requests a reboot, as this is the only way this error
470 		 * can be recovered. */
471 		hidp_send_ctrl_message(session,
472 			HIDP_TRANS_HID_CONTROL | HIDP_CTRL_SOFT_RESET, NULL, 0);
473 		break;
474 
475 	default:
476 		hidp_send_ctrl_message(session,
477 			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_INVALID_PARAMETER, NULL, 0);
478 		break;
479 	}
480 
481 	/* Wake up the waiting thread. */
482 	if (test_and_clear_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags))
483 		wake_up_interruptible(&session->report_queue);
484 }
485 
486 static void hidp_process_hid_control(struct hidp_session *session,
487 					unsigned char param)
488 {
489 	BT_DBG("session %p param 0x%02x", session, param);
490 
491 	if (param == HIDP_CTRL_VIRTUAL_CABLE_UNPLUG) {
492 		/* Flush the transmit queues */
493 		skb_queue_purge(&session->ctrl_transmit);
494 		skb_queue_purge(&session->intr_transmit);
495 
496 		hidp_session_terminate(session);
497 	}
498 }
499 
500 /* Returns true if the passed-in skb should be freed by the caller. */
501 static int hidp_process_data(struct hidp_session *session, struct sk_buff *skb,
502 				unsigned char param)
503 {
504 	int done_with_skb = 1;
505 	BT_DBG("session %p skb %p len %d param 0x%02x", session, skb, skb->len, param);
506 
507 	switch (param) {
508 	case HIDP_DATA_RTYPE_INPUT:
509 		hidp_set_timer(session);
510 
511 		if (session->input)
512 			hidp_input_report(session, skb);
513 
514 		if (session->hid)
515 			hidp_process_report(session, HID_INPUT_REPORT,
516 					    skb->data, skb->len, 0);
517 		break;
518 
519 	case HIDP_DATA_RTYPE_OTHER:
520 	case HIDP_DATA_RTYPE_OUPUT:
521 	case HIDP_DATA_RTYPE_FEATURE:
522 		break;
523 
524 	default:
525 		hidp_send_ctrl_message(session,
526 			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_INVALID_PARAMETER, NULL, 0);
527 	}
528 
529 	if (test_bit(HIDP_WAITING_FOR_RETURN, &session->flags) &&
530 				param == session->waiting_report_type) {
531 		if (session->waiting_report_number < 0 ||
532 		    session->waiting_report_number == skb->data[0]) {
533 			/* hidp_get_raw_report() is waiting on this report. */
534 			session->report_return = skb;
535 			done_with_skb = 0;
536 			clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
537 			wake_up_interruptible(&session->report_queue);
538 		}
539 	}
540 
541 	return done_with_skb;
542 }
543 
544 static void hidp_recv_ctrl_frame(struct hidp_session *session,
545 					struct sk_buff *skb)
546 {
547 	unsigned char hdr, type, param;
548 	int free_skb = 1;
549 
550 	BT_DBG("session %p skb %p len %d", session, skb, skb->len);
551 
552 	hdr = skb->data[0];
553 	skb_pull(skb, 1);
554 
555 	type = hdr & HIDP_HEADER_TRANS_MASK;
556 	param = hdr & HIDP_HEADER_PARAM_MASK;
557 
558 	switch (type) {
559 	case HIDP_TRANS_HANDSHAKE:
560 		hidp_process_handshake(session, param);
561 		break;
562 
563 	case HIDP_TRANS_HID_CONTROL:
564 		hidp_process_hid_control(session, param);
565 		break;
566 
567 	case HIDP_TRANS_DATA:
568 		free_skb = hidp_process_data(session, skb, param);
569 		break;
570 
571 	default:
572 		hidp_send_ctrl_message(session,
573 			HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_UNSUPPORTED_REQUEST, NULL, 0);
574 		break;
575 	}
576 
577 	if (free_skb)
578 		kfree_skb(skb);
579 }
580 
581 static void hidp_recv_intr_frame(struct hidp_session *session,
582 				struct sk_buff *skb)
583 {
584 	unsigned char hdr;
585 
586 	BT_DBG("session %p skb %p len %d", session, skb, skb->len);
587 
588 	hdr = skb->data[0];
589 	skb_pull(skb, 1);
590 
591 	if (hdr == (HIDP_TRANS_DATA | HIDP_DATA_RTYPE_INPUT)) {
592 		hidp_set_timer(session);
593 
594 		if (session->input)
595 			hidp_input_report(session, skb);
596 
597 		if (session->hid) {
598 			hidp_process_report(session, HID_INPUT_REPORT,
599 					    skb->data, skb->len, 1);
600 			BT_DBG("report len %d", skb->len);
601 		}
602 	} else {
603 		BT_DBG("Unsupported protocol header 0x%02x", hdr);
604 	}
605 
606 	kfree_skb(skb);
607 }
608 
609 static int hidp_send_frame(struct socket *sock, unsigned char *data, int len)
610 {
611 	struct kvec iv = { data, len };
612 	struct msghdr msg;
613 
614 	BT_DBG("sock %p data %p len %d", sock, data, len);
615 
616 	if (!len)
617 		return 0;
618 
619 	memset(&msg, 0, sizeof(msg));
620 
621 	return kernel_sendmsg(sock, &msg, &iv, 1, len);
622 }
623 
624 /* dequeue message from @transmit and send via @sock */
625 static void hidp_process_transmit(struct hidp_session *session,
626 				  struct sk_buff_head *transmit,
627 				  struct socket *sock)
628 {
629 	struct sk_buff *skb;
630 	int ret;
631 
632 	BT_DBG("session %p", session);
633 
634 	while ((skb = skb_dequeue(transmit))) {
635 		ret = hidp_send_frame(sock, skb->data, skb->len);
636 		if (ret == -EAGAIN) {
637 			skb_queue_head(transmit, skb);
638 			break;
639 		} else if (ret < 0) {
640 			hidp_session_terminate(session);
641 			kfree_skb(skb);
642 			break;
643 		}
644 
645 		hidp_set_timer(session);
646 		kfree_skb(skb);
647 	}
648 }
649 
650 static int hidp_setup_input(struct hidp_session *session,
651 				struct hidp_connadd_req *req)
652 {
653 	struct input_dev *input;
654 	int i;
655 
656 	input = input_allocate_device();
657 	if (!input)
658 		return -ENOMEM;
659 
660 	session->input = input;
661 
662 	input_set_drvdata(input, session);
663 
664 	input->name = "Bluetooth HID Boot Protocol Device";
665 
666 	input->id.bustype = BUS_BLUETOOTH;
667 	input->id.vendor  = req->vendor;
668 	input->id.product = req->product;
669 	input->id.version = req->version;
670 
671 	if (req->subclass & 0x40) {
672 		set_bit(EV_KEY, input->evbit);
673 		set_bit(EV_LED, input->evbit);
674 		set_bit(EV_REP, input->evbit);
675 
676 		set_bit(LED_NUML,    input->ledbit);
677 		set_bit(LED_CAPSL,   input->ledbit);
678 		set_bit(LED_SCROLLL, input->ledbit);
679 		set_bit(LED_COMPOSE, input->ledbit);
680 		set_bit(LED_KANA,    input->ledbit);
681 
682 		for (i = 0; i < sizeof(hidp_keycode); i++)
683 			set_bit(hidp_keycode[i], input->keybit);
684 		clear_bit(0, input->keybit);
685 	}
686 
687 	if (req->subclass & 0x80) {
688 		input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
689 		input->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
690 			BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
691 		input->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);
692 		input->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) |
693 			BIT_MASK(BTN_EXTRA);
694 		input->relbit[0] |= BIT_MASK(REL_WHEEL);
695 	}
696 
697 	input->dev.parent = &session->conn->hcon->dev;
698 
699 	input->event = hidp_input_event;
700 
701 	return 0;
702 }
703 
704 static int hidp_open(struct hid_device *hid)
705 {
706 	return 0;
707 }
708 
709 static void hidp_close(struct hid_device *hid)
710 {
711 }
712 
713 static int hidp_parse(struct hid_device *hid)
714 {
715 	struct hidp_session *session = hid->driver_data;
716 
717 	return hid_parse_report(session->hid, session->rd_data,
718 			session->rd_size);
719 }
720 
721 static int hidp_start(struct hid_device *hid)
722 {
723 	return 0;
724 }
725 
726 static void hidp_stop(struct hid_device *hid)
727 {
728 	struct hidp_session *session = hid->driver_data;
729 
730 	skb_queue_purge(&session->ctrl_transmit);
731 	skb_queue_purge(&session->intr_transmit);
732 
733 	hid->claimed = 0;
734 }
735 
736 static struct hid_ll_driver hidp_hid_driver = {
737 	.parse = hidp_parse,
738 	.start = hidp_start,
739 	.stop = hidp_stop,
740 	.open  = hidp_open,
741 	.close = hidp_close,
742 	.hidinput_input_event = hidp_hidinput_event,
743 };
744 
745 /* This function sets up the hid device. It does not add it
746    to the HID system. That is done in hidp_add_connection(). */
747 static int hidp_setup_hid(struct hidp_session *session,
748 				struct hidp_connadd_req *req)
749 {
750 	struct hid_device *hid;
751 	int err;
752 
753 	session->rd_data = kzalloc(req->rd_size, GFP_KERNEL);
754 	if (!session->rd_data)
755 		return -ENOMEM;
756 
757 	if (copy_from_user(session->rd_data, req->rd_data, req->rd_size)) {
758 		err = -EFAULT;
759 		goto fault;
760 	}
761 	session->rd_size = req->rd_size;
762 
763 	hid = hid_allocate_device();
764 	if (IS_ERR(hid)) {
765 		err = PTR_ERR(hid);
766 		goto fault;
767 	}
768 
769 	session->hid = hid;
770 
771 	hid->driver_data = session;
772 
773 	hid->bus     = BUS_BLUETOOTH;
774 	hid->vendor  = req->vendor;
775 	hid->product = req->product;
776 	hid->version = req->version;
777 	hid->country = req->country;
778 
779 	strncpy(hid->name, req->name, sizeof(req->name) - 1);
780 
781 	snprintf(hid->phys, sizeof(hid->phys), "%pMR",
782 		 &l2cap_pi(session->ctrl_sock->sk)->chan->src);
783 
784 	snprintf(hid->uniq, sizeof(hid->uniq), "%pMR",
785 		 &l2cap_pi(session->ctrl_sock->sk)->chan->dst);
786 
787 	hid->dev.parent = &session->conn->hcon->dev;
788 	hid->ll_driver = &hidp_hid_driver;
789 
790 	hid->hid_get_raw_report = hidp_get_raw_report;
791 	hid->hid_output_raw_report = hidp_output_raw_report;
792 
793 	/* True if device is blacklisted in drivers/hid/hid-core.c */
794 	if (hid_ignore(hid)) {
795 		hid_destroy_device(session->hid);
796 		session->hid = NULL;
797 		return -ENODEV;
798 	}
799 
800 	return 0;
801 
802 fault:
803 	kfree(session->rd_data);
804 	session->rd_data = NULL;
805 
806 	return err;
807 }
808 
809 /* initialize session devices */
810 static int hidp_session_dev_init(struct hidp_session *session,
811 				 struct hidp_connadd_req *req)
812 {
813 	int ret;
814 
815 	if (req->rd_size > 0) {
816 		ret = hidp_setup_hid(session, req);
817 		if (ret && ret != -ENODEV)
818 			return ret;
819 	}
820 
821 	if (!session->hid) {
822 		ret = hidp_setup_input(session, req);
823 		if (ret < 0)
824 			return ret;
825 	}
826 
827 	return 0;
828 }
829 
830 /* destroy session devices */
831 static void hidp_session_dev_destroy(struct hidp_session *session)
832 {
833 	if (session->hid)
834 		put_device(&session->hid->dev);
835 	else if (session->input)
836 		input_put_device(session->input);
837 
838 	kfree(session->rd_data);
839 	session->rd_data = NULL;
840 }
841 
842 /* add HID/input devices to their underlying bus systems */
843 static int hidp_session_dev_add(struct hidp_session *session)
844 {
845 	int ret;
846 
847 	/* Both HID and input systems drop a ref-count when unregistering the
848 	 * device but they don't take a ref-count when registering them. Work
849 	 * around this by explicitly taking a refcount during registration
850 	 * which is dropped automatically by unregistering the devices. */
851 
852 	if (session->hid) {
853 		ret = hid_add_device(session->hid);
854 		if (ret)
855 			return ret;
856 		get_device(&session->hid->dev);
857 	} else if (session->input) {
858 		ret = input_register_device(session->input);
859 		if (ret)
860 			return ret;
861 		input_get_device(session->input);
862 	}
863 
864 	return 0;
865 }
866 
867 /* remove HID/input devices from their bus systems */
868 static void hidp_session_dev_del(struct hidp_session *session)
869 {
870 	if (session->hid)
871 		hid_destroy_device(session->hid);
872 	else if (session->input)
873 		input_unregister_device(session->input);
874 }
875 
876 /*
877  * Asynchronous device registration
878  * HID device drivers might want to perform I/O during initialization to
879  * detect device types. Therefore, call device registration in a separate
880  * worker so the HIDP thread can schedule I/O operations.
881  * Note that this must be called after the worker thread was initialized
882  * successfully. This will then add the devices and increase session state
883  * on success, otherwise it will terminate the session thread.
884  */
885 static void hidp_session_dev_work(struct work_struct *work)
886 {
887 	struct hidp_session *session = container_of(work,
888 						    struct hidp_session,
889 						    dev_init);
890 	int ret;
891 
892 	ret = hidp_session_dev_add(session);
893 	if (!ret)
894 		atomic_inc(&session->state);
895 	else
896 		hidp_session_terminate(session);
897 }
898 
899 /*
900  * Create new session object
901  * Allocate session object, initialize static fields, copy input data into the
902  * object and take a reference to all sub-objects.
903  * This returns 0 on success and puts a pointer to the new session object in
904  * \out. Otherwise, an error code is returned.
905  * The new session object has an initial ref-count of 1.
906  */
907 static int hidp_session_new(struct hidp_session **out, const bdaddr_t *bdaddr,
908 			    struct socket *ctrl_sock,
909 			    struct socket *intr_sock,
910 			    struct hidp_connadd_req *req,
911 			    struct l2cap_conn *conn)
912 {
913 	struct hidp_session *session;
914 	int ret;
915 	struct bt_sock *ctrl, *intr;
916 
917 	ctrl = bt_sk(ctrl_sock->sk);
918 	intr = bt_sk(intr_sock->sk);
919 
920 	session = kzalloc(sizeof(*session), GFP_KERNEL);
921 	if (!session)
922 		return -ENOMEM;
923 
924 	/* object and runtime management */
925 	kref_init(&session->ref);
926 	atomic_set(&session->state, HIDP_SESSION_IDLING);
927 	init_waitqueue_head(&session->state_queue);
928 	session->flags = req->flags & (1 << HIDP_BLUETOOTH_VENDOR_ID);
929 
930 	/* connection management */
931 	bacpy(&session->bdaddr, bdaddr);
932 	session->conn = conn;
933 	session->user.probe = hidp_session_probe;
934 	session->user.remove = hidp_session_remove;
935 	session->ctrl_sock = ctrl_sock;
936 	session->intr_sock = intr_sock;
937 	skb_queue_head_init(&session->ctrl_transmit);
938 	skb_queue_head_init(&session->intr_transmit);
939 	session->ctrl_mtu = min_t(uint, l2cap_pi(ctrl)->chan->omtu,
940 					l2cap_pi(ctrl)->chan->imtu);
941 	session->intr_mtu = min_t(uint, l2cap_pi(intr)->chan->omtu,
942 					l2cap_pi(intr)->chan->imtu);
943 	session->idle_to = req->idle_to;
944 
945 	/* device management */
946 	INIT_WORK(&session->dev_init, hidp_session_dev_work);
947 	setup_timer(&session->timer, hidp_idle_timeout,
948 		    (unsigned long)session);
949 
950 	/* session data */
951 	mutex_init(&session->report_mutex);
952 	init_waitqueue_head(&session->report_queue);
953 
954 	ret = hidp_session_dev_init(session, req);
955 	if (ret)
956 		goto err_free;
957 
958 	l2cap_conn_get(session->conn);
959 	get_file(session->intr_sock->file);
960 	get_file(session->ctrl_sock->file);
961 	*out = session;
962 	return 0;
963 
964 err_free:
965 	kfree(session);
966 	return ret;
967 }
968 
969 /* increase ref-count of the given session by one */
970 static void hidp_session_get(struct hidp_session *session)
971 {
972 	kref_get(&session->ref);
973 }
974 
975 /* release callback */
976 static void session_free(struct kref *ref)
977 {
978 	struct hidp_session *session = container_of(ref, struct hidp_session,
979 						    ref);
980 
981 	hidp_session_dev_destroy(session);
982 	skb_queue_purge(&session->ctrl_transmit);
983 	skb_queue_purge(&session->intr_transmit);
984 	fput(session->intr_sock->file);
985 	fput(session->ctrl_sock->file);
986 	l2cap_conn_put(session->conn);
987 	kfree(session);
988 }
989 
990 /* decrease ref-count of the given session by one */
991 static void hidp_session_put(struct hidp_session *session)
992 {
993 	kref_put(&session->ref, session_free);
994 }
995 
996 /*
997  * Search the list of active sessions for a session with target address
998  * \bdaddr. You must hold at least a read-lock on \hidp_session_sem. As long as
999  * you do not release this lock, the session objects cannot vanish and you can
1000  * safely take a reference to the session yourself.
1001  */
1002 static struct hidp_session *__hidp_session_find(const bdaddr_t *bdaddr)
1003 {
1004 	struct hidp_session *session;
1005 
1006 	list_for_each_entry(session, &hidp_session_list, list) {
1007 		if (!bacmp(bdaddr, &session->bdaddr))
1008 			return session;
1009 	}
1010 
1011 	return NULL;
1012 }
1013 
1014 /*
1015  * Same as __hidp_session_find() but no locks must be held. This also takes a
1016  * reference of the returned session (if non-NULL) so you must drop this
1017  * reference if you no longer use the object.
1018  */
1019 static struct hidp_session *hidp_session_find(const bdaddr_t *bdaddr)
1020 {
1021 	struct hidp_session *session;
1022 
1023 	down_read(&hidp_session_sem);
1024 
1025 	session = __hidp_session_find(bdaddr);
1026 	if (session)
1027 		hidp_session_get(session);
1028 
1029 	up_read(&hidp_session_sem);
1030 
1031 	return session;
1032 }
1033 
1034 /*
1035  * Start session synchronously
1036  * This starts a session thread and waits until initialization
1037  * is done or returns an error if it couldn't be started.
1038  * If this returns 0 the session thread is up and running. You must call
1039  * hipd_session_stop_sync() before deleting any runtime resources.
1040  */
1041 static int hidp_session_start_sync(struct hidp_session *session)
1042 {
1043 	unsigned int vendor, product;
1044 
1045 	if (session->hid) {
1046 		vendor  = session->hid->vendor;
1047 		product = session->hid->product;
1048 	} else if (session->input) {
1049 		vendor  = session->input->id.vendor;
1050 		product = session->input->id.product;
1051 	} else {
1052 		vendor = 0x0000;
1053 		product = 0x0000;
1054 	}
1055 
1056 	session->task = kthread_run(hidp_session_thread, session,
1057 				    "khidpd_%04x%04x", vendor, product);
1058 	if (IS_ERR(session->task))
1059 		return PTR_ERR(session->task);
1060 
1061 	while (atomic_read(&session->state) <= HIDP_SESSION_IDLING)
1062 		wait_event(session->state_queue,
1063 			   atomic_read(&session->state) > HIDP_SESSION_IDLING);
1064 
1065 	return 0;
1066 }
1067 
1068 /*
1069  * Terminate session thread
1070  * Wake up session thread and notify it to stop. This is asynchronous and
1071  * returns immediately. Call this whenever a runtime error occurs and you want
1072  * the session to stop.
1073  * Note: wake_up_process() performs any necessary memory-barriers for us.
1074  */
1075 static void hidp_session_terminate(struct hidp_session *session)
1076 {
1077 	atomic_inc(&session->terminate);
1078 	wake_up_process(session->task);
1079 }
1080 
1081 /*
1082  * Probe HIDP session
1083  * This is called from the l2cap_conn core when our l2cap_user object is bound
1084  * to the hci-connection. We get the session via the \user object and can now
1085  * start the session thread, link it into the global session list and
1086  * schedule HID/input device registration.
1087  * The global session-list owns its own reference to the session object so you
1088  * can drop your own reference after registering the l2cap_user object.
1089  */
1090 static int hidp_session_probe(struct l2cap_conn *conn,
1091 			      struct l2cap_user *user)
1092 {
1093 	struct hidp_session *session = container_of(user,
1094 						    struct hidp_session,
1095 						    user);
1096 	struct hidp_session *s;
1097 	int ret;
1098 
1099 	down_write(&hidp_session_sem);
1100 
1101 	/* check that no other session for this device exists */
1102 	s = __hidp_session_find(&session->bdaddr);
1103 	if (s) {
1104 		ret = -EEXIST;
1105 		goto out_unlock;
1106 	}
1107 
1108 	if (session->input) {
1109 		ret = hidp_session_dev_add(session);
1110 		if (ret)
1111 			goto out_unlock;
1112 	}
1113 
1114 	ret = hidp_session_start_sync(session);
1115 	if (ret)
1116 		goto out_del;
1117 
1118 	/* HID device registration is async to allow I/O during probe */
1119 	if (session->input)
1120 		atomic_inc(&session->state);
1121 	else
1122 		schedule_work(&session->dev_init);
1123 
1124 	hidp_session_get(session);
1125 	list_add(&session->list, &hidp_session_list);
1126 	ret = 0;
1127 	goto out_unlock;
1128 
1129 out_del:
1130 	if (session->input)
1131 		hidp_session_dev_del(session);
1132 out_unlock:
1133 	up_write(&hidp_session_sem);
1134 	return ret;
1135 }
1136 
1137 /*
1138  * Remove HIDP session
1139  * Called from the l2cap_conn core when either we explicitly unregistered
1140  * the l2cap_user object or if the underlying connection is shut down.
1141  * We signal the hidp-session thread to shut down, unregister the HID/input
1142  * devices and unlink the session from the global list.
1143  * This drops the reference to the session that is owned by the global
1144  * session-list.
1145  * Note: We _must_ not synchronosly wait for the session-thread to shut down.
1146  * This is, because the session-thread might be waiting for an HCI lock that is
1147  * held while we are called. Therefore, we only unregister the devices and
1148  * notify the session-thread to terminate. The thread itself owns a reference
1149  * to the session object so it can safely shut down.
1150  */
1151 static void hidp_session_remove(struct l2cap_conn *conn,
1152 				struct l2cap_user *user)
1153 {
1154 	struct hidp_session *session = container_of(user,
1155 						    struct hidp_session,
1156 						    user);
1157 
1158 	down_write(&hidp_session_sem);
1159 
1160 	hidp_session_terminate(session);
1161 
1162 	cancel_work_sync(&session->dev_init);
1163 	if (session->input ||
1164 	    atomic_read(&session->state) > HIDP_SESSION_PREPARING)
1165 		hidp_session_dev_del(session);
1166 
1167 	list_del(&session->list);
1168 
1169 	up_write(&hidp_session_sem);
1170 
1171 	hidp_session_put(session);
1172 }
1173 
1174 /*
1175  * Session Worker
1176  * This performs the actual main-loop of the HIDP worker. We first check
1177  * whether the underlying connection is still alive, then parse all pending
1178  * messages and finally send all outstanding messages.
1179  */
1180 static void hidp_session_run(struct hidp_session *session)
1181 {
1182 	struct sock *ctrl_sk = session->ctrl_sock->sk;
1183 	struct sock *intr_sk = session->intr_sock->sk;
1184 	struct sk_buff *skb;
1185 
1186 	for (;;) {
1187 		/*
1188 		 * This thread can be woken up two ways:
1189 		 *  - You call hidp_session_terminate() which sets the
1190 		 *    session->terminate flag and wakes this thread up.
1191 		 *  - Via modifying the socket state of ctrl/intr_sock. This
1192 		 *    thread is woken up by ->sk_state_changed().
1193 		 *
1194 		 * Note: set_current_state() performs any necessary
1195 		 * memory-barriers for us.
1196 		 */
1197 		set_current_state(TASK_INTERRUPTIBLE);
1198 
1199 		if (atomic_read(&session->terminate))
1200 			break;
1201 
1202 		if (ctrl_sk->sk_state != BT_CONNECTED ||
1203 		    intr_sk->sk_state != BT_CONNECTED)
1204 			break;
1205 
1206 		/* parse incoming intr-skbs */
1207 		while ((skb = skb_dequeue(&intr_sk->sk_receive_queue))) {
1208 			skb_orphan(skb);
1209 			if (!skb_linearize(skb))
1210 				hidp_recv_intr_frame(session, skb);
1211 			else
1212 				kfree_skb(skb);
1213 		}
1214 
1215 		/* send pending intr-skbs */
1216 		hidp_process_transmit(session, &session->intr_transmit,
1217 				      session->intr_sock);
1218 
1219 		/* parse incoming ctrl-skbs */
1220 		while ((skb = skb_dequeue(&ctrl_sk->sk_receive_queue))) {
1221 			skb_orphan(skb);
1222 			if (!skb_linearize(skb))
1223 				hidp_recv_ctrl_frame(session, skb);
1224 			else
1225 				kfree_skb(skb);
1226 		}
1227 
1228 		/* send pending ctrl-skbs */
1229 		hidp_process_transmit(session, &session->ctrl_transmit,
1230 				      session->ctrl_sock);
1231 
1232 		schedule();
1233 	}
1234 
1235 	atomic_inc(&session->terminate);
1236 	set_current_state(TASK_RUNNING);
1237 }
1238 
1239 /*
1240  * HIDP session thread
1241  * This thread runs the I/O for a single HIDP session. Startup is synchronous
1242  * which allows us to take references to ourself here instead of doing that in
1243  * the caller.
1244  * When we are ready to run we notify the caller and call hidp_session_run().
1245  */
1246 static int hidp_session_thread(void *arg)
1247 {
1248 	struct hidp_session *session = arg;
1249 	wait_queue_t ctrl_wait, intr_wait;
1250 
1251 	BT_DBG("session %p", session);
1252 
1253 	/* initialize runtime environment */
1254 	hidp_session_get(session);
1255 	__module_get(THIS_MODULE);
1256 	set_user_nice(current, -15);
1257 	hidp_set_timer(session);
1258 
1259 	init_waitqueue_entry(&ctrl_wait, current);
1260 	init_waitqueue_entry(&intr_wait, current);
1261 	add_wait_queue(sk_sleep(session->ctrl_sock->sk), &ctrl_wait);
1262 	add_wait_queue(sk_sleep(session->intr_sock->sk), &intr_wait);
1263 	/* This memory barrier is paired with wq_has_sleeper(). See
1264 	 * sock_poll_wait() for more information why this is needed. */
1265 	smp_mb();
1266 
1267 	/* notify synchronous startup that we're ready */
1268 	atomic_inc(&session->state);
1269 	wake_up(&session->state_queue);
1270 
1271 	/* run session */
1272 	hidp_session_run(session);
1273 
1274 	/* cleanup runtime environment */
1275 	remove_wait_queue(sk_sleep(session->intr_sock->sk), &intr_wait);
1276 	remove_wait_queue(sk_sleep(session->intr_sock->sk), &ctrl_wait);
1277 	wake_up_interruptible(&session->report_queue);
1278 	hidp_del_timer(session);
1279 
1280 	/*
1281 	 * If we stopped ourself due to any internal signal, we should try to
1282 	 * unregister our own session here to avoid having it linger until the
1283 	 * parent l2cap_conn dies or user-space cleans it up.
1284 	 * This does not deadlock as we don't do any synchronous shutdown.
1285 	 * Instead, this call has the same semantics as if user-space tried to
1286 	 * delete the session.
1287 	 */
1288 	l2cap_unregister_user(session->conn, &session->user);
1289 	hidp_session_put(session);
1290 
1291 	module_put_and_exit(0);
1292 	return 0;
1293 }
1294 
1295 static int hidp_verify_sockets(struct socket *ctrl_sock,
1296 			       struct socket *intr_sock)
1297 {
1298 	struct l2cap_chan *ctrl_chan, *intr_chan;
1299 	struct bt_sock *ctrl, *intr;
1300 	struct hidp_session *session;
1301 
1302 	if (!l2cap_is_socket(ctrl_sock) || !l2cap_is_socket(intr_sock))
1303 		return -EINVAL;
1304 
1305 	ctrl_chan = l2cap_pi(ctrl_sock->sk)->chan;
1306 	intr_chan = l2cap_pi(intr_sock->sk)->chan;
1307 
1308 	if (bacmp(&ctrl_chan->src, &intr_chan->src) ||
1309 	    bacmp(&ctrl_chan->dst, &intr_chan->dst))
1310 		return -ENOTUNIQ;
1311 
1312 	ctrl = bt_sk(ctrl_sock->sk);
1313 	intr = bt_sk(intr_sock->sk);
1314 
1315 	if (ctrl->sk.sk_state != BT_CONNECTED ||
1316 	    intr->sk.sk_state != BT_CONNECTED)
1317 		return -EBADFD;
1318 
1319 	/* early session check, we check again during session registration */
1320 	session = hidp_session_find(&ctrl_chan->dst);
1321 	if (session) {
1322 		hidp_session_put(session);
1323 		return -EEXIST;
1324 	}
1325 
1326 	return 0;
1327 }
1328 
1329 int hidp_connection_add(struct hidp_connadd_req *req,
1330 			struct socket *ctrl_sock,
1331 			struct socket *intr_sock)
1332 {
1333 	struct hidp_session *session;
1334 	struct l2cap_conn *conn;
1335 	struct l2cap_chan *chan = l2cap_pi(ctrl_sock->sk)->chan;
1336 	int ret;
1337 
1338 	ret = hidp_verify_sockets(ctrl_sock, intr_sock);
1339 	if (ret)
1340 		return ret;
1341 
1342 	conn = NULL;
1343 	l2cap_chan_lock(chan);
1344 	if (chan->conn) {
1345 		l2cap_conn_get(chan->conn);
1346 		conn = chan->conn;
1347 	}
1348 	l2cap_chan_unlock(chan);
1349 
1350 	if (!conn)
1351 		return -EBADFD;
1352 
1353 	ret = hidp_session_new(&session, &chan->dst, ctrl_sock,
1354 			       intr_sock, req, conn);
1355 	if (ret)
1356 		goto out_conn;
1357 
1358 	ret = l2cap_register_user(conn, &session->user);
1359 	if (ret)
1360 		goto out_session;
1361 
1362 	ret = 0;
1363 
1364 out_session:
1365 	hidp_session_put(session);
1366 out_conn:
1367 	l2cap_conn_put(conn);
1368 	return ret;
1369 }
1370 
1371 int hidp_connection_del(struct hidp_conndel_req *req)
1372 {
1373 	struct hidp_session *session;
1374 
1375 	session = hidp_session_find(&req->bdaddr);
1376 	if (!session)
1377 		return -ENOENT;
1378 
1379 	if (req->flags & (1 << HIDP_VIRTUAL_CABLE_UNPLUG))
1380 		hidp_send_ctrl_message(session,
1381 				       HIDP_TRANS_HID_CONTROL |
1382 				         HIDP_CTRL_VIRTUAL_CABLE_UNPLUG,
1383 				       NULL, 0);
1384 	else
1385 		l2cap_unregister_user(session->conn, &session->user);
1386 
1387 	hidp_session_put(session);
1388 
1389 	return 0;
1390 }
1391 
1392 int hidp_get_connlist(struct hidp_connlist_req *req)
1393 {
1394 	struct hidp_session *session;
1395 	int err = 0, n = 0;
1396 
1397 	BT_DBG("");
1398 
1399 	down_read(&hidp_session_sem);
1400 
1401 	list_for_each_entry(session, &hidp_session_list, list) {
1402 		struct hidp_conninfo ci;
1403 
1404 		hidp_copy_session(session, &ci);
1405 
1406 		if (copy_to_user(req->ci, &ci, sizeof(ci))) {
1407 			err = -EFAULT;
1408 			break;
1409 		}
1410 
1411 		if (++n >= req->cnum)
1412 			break;
1413 
1414 		req->ci++;
1415 	}
1416 	req->cnum = n;
1417 
1418 	up_read(&hidp_session_sem);
1419 	return err;
1420 }
1421 
1422 int hidp_get_conninfo(struct hidp_conninfo *ci)
1423 {
1424 	struct hidp_session *session;
1425 
1426 	session = hidp_session_find(&ci->bdaddr);
1427 	if (session) {
1428 		hidp_copy_session(session, ci);
1429 		hidp_session_put(session);
1430 	}
1431 
1432 	return session ? 0 : -ENOENT;
1433 }
1434 
1435 static int __init hidp_init(void)
1436 {
1437 	BT_INFO("HIDP (Human Interface Emulation) ver %s", VERSION);
1438 
1439 	return hidp_init_sockets();
1440 }
1441 
1442 static void __exit hidp_exit(void)
1443 {
1444 	hidp_cleanup_sockets();
1445 }
1446 
1447 module_init(hidp_init);
1448 module_exit(hidp_exit);
1449 
1450 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
1451 MODULE_AUTHOR("David Herrmann <dh.herrmann@gmail.com>");
1452 MODULE_DESCRIPTION("Bluetooth HIDP ver " VERSION);
1453 MODULE_VERSION(VERSION);
1454 MODULE_LICENSE("GPL");
1455 MODULE_ALIAS("bt-proto-6");
1456