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