]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - net/bluetooth/hidp/core.c
regulator: max8997: Convert max8997_safeout_ops to set_voltage_sel and list_voltage_table
[karo-tx-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
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License version 2 as
7    published by the Free Software Foundation;
8
9    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
12    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
13    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
14    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
18    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
19    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
20    SOFTWARE IS DISCLAIMED.
21 */
22
23 #include <linux/module.h>
24 #include <linux/file.h>
25 #include <linux/kthread.h>
26 #include <linux/hidraw.h>
27
28 #include <net/bluetooth/bluetooth.h>
29 #include <net/bluetooth/hci_core.h>
30 #include <net/bluetooth/l2cap.h>
31
32 #include "hidp.h"
33
34 #define VERSION "1.2"
35
36 static DECLARE_RWSEM(hidp_session_sem);
37 static LIST_HEAD(hidp_session_list);
38
39 static unsigned char hidp_keycode[256] = {
40           0,   0,   0,   0,  30,  48,  46,  32,  18,  33,  34,  35,  23,  36,
41          37,  38,  50,  49,  24,  25,  16,  19,  31,  20,  22,  47,  17,  45,
42          21,  44,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  28,   1,
43          14,  15,  57,  12,  13,  26,  27,  43,  43,  39,  40,  41,  51,  52,
44          53,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  87,  88,
45          99,  70, 119, 110, 102, 104, 111, 107, 109, 106, 105, 108, 103,  69,
46          98,  55,  74,  78,  96,  79,  80,  81,  75,  76,  77,  71,  72,  73,
47          82,  83,  86, 127, 116, 117, 183, 184, 185, 186, 187, 188, 189, 190,
48         191, 192, 193, 194, 134, 138, 130, 132, 128, 129, 131, 137, 133, 135,
49         136, 113, 115, 114,   0,   0,   0, 121,   0,  89,  93, 124,  92,  94,
50          95,   0,   0,   0, 122, 123,  90,  91,  85,   0,   0,   0,   0,   0,
51           0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,   0,
52           0,   0,   0,   0,   0,   0,   0,   0,   0,   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          29,  42,  56, 125,  97,  54, 100, 126, 164, 166, 165, 163, 161, 115,
57         114, 113, 150, 158, 159, 128, 136, 177, 178, 176, 142, 152, 173, 140
58 };
59
60 static unsigned char hidp_mkeyspat[] = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 };
61
62 static struct hidp_session *__hidp_get_session(bdaddr_t *bdaddr)
63 {
64         struct hidp_session *session;
65
66         BT_DBG("");
67
68         list_for_each_entry(session, &hidp_session_list, list) {
69                 if (!bacmp(bdaddr, &session->bdaddr))
70                         return session;
71         }
72
73         return NULL;
74 }
75
76 static void __hidp_link_session(struct hidp_session *session)
77 {
78         list_add(&session->list, &hidp_session_list);
79 }
80
81 static void __hidp_unlink_session(struct hidp_session *session)
82 {
83         hci_conn_put_device(session->conn);
84
85         list_del(&session->list);
86 }
87
88 static void __hidp_copy_session(struct hidp_session *session, struct hidp_conninfo *ci)
89 {
90         memset(ci, 0, sizeof(*ci));
91         bacpy(&ci->bdaddr, &session->bdaddr);
92
93         ci->flags = session->flags;
94         ci->state = session->state;
95
96         ci->vendor  = 0x0000;
97         ci->product = 0x0000;
98         ci->version = 0x0000;
99
100         if (session->input) {
101                 ci->vendor  = session->input->id.vendor;
102                 ci->product = session->input->id.product;
103                 ci->version = session->input->id.version;
104                 if (session->input->name)
105                         strncpy(ci->name, session->input->name, 128);
106                 else
107                         strncpy(ci->name, "HID Boot Device", 128);
108         }
109
110         if (session->hid) {
111                 ci->vendor  = session->hid->vendor;
112                 ci->product = session->hid->product;
113                 ci->version = session->hid->version;
114                 strncpy(ci->name, session->hid->name, 128);
115         }
116 }
117
118 static int hidp_queue_event(struct hidp_session *session, struct input_dev *dev,
119                                 unsigned int type, unsigned int code, int value)
120 {
121         unsigned char newleds;
122         struct sk_buff *skb;
123
124         BT_DBG("session %p type %d code %d value %d", session, type, code, value);
125
126         if (type != EV_LED)
127                 return -1;
128
129         newleds = (!!test_bit(LED_KANA,    dev->led) << 3) |
130                   (!!test_bit(LED_COMPOSE, dev->led) << 3) |
131                   (!!test_bit(LED_SCROLLL, dev->led) << 2) |
132                   (!!test_bit(LED_CAPSL,   dev->led) << 1) |
133                   (!!test_bit(LED_NUML,    dev->led));
134
135         if (session->leds == newleds)
136                 return 0;
137
138         session->leds = newleds;
139
140         skb = alloc_skb(3, GFP_ATOMIC);
141         if (!skb) {
142                 BT_ERR("Can't allocate memory for new frame");
143                 return -ENOMEM;
144         }
145
146         *skb_put(skb, 1) = HIDP_TRANS_DATA | HIDP_DATA_RTYPE_OUPUT;
147         *skb_put(skb, 1) = 0x01;
148         *skb_put(skb, 1) = newleds;
149
150         skb_queue_tail(&session->intr_transmit, skb);
151
152         hidp_schedule(session);
153
154         return 0;
155 }
156
157 static int hidp_hidinput_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
158 {
159         struct hid_device *hid = input_get_drvdata(dev);
160         struct hidp_session *session = hid->driver_data;
161
162         return hidp_queue_event(session, dev, type, code, value);
163 }
164
165 static int hidp_input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value)
166 {
167         struct hidp_session *session = input_get_drvdata(dev);
168
169         return hidp_queue_event(session, dev, type, code, value);
170 }
171
172 static void hidp_input_report(struct hidp_session *session, struct sk_buff *skb)
173 {
174         struct input_dev *dev = session->input;
175         unsigned char *keys = session->keys;
176         unsigned char *udata = skb->data + 1;
177         signed char *sdata = skb->data + 1;
178         int i, size = skb->len - 1;
179
180         switch (skb->data[0]) {
181         case 0x01:      /* Keyboard report */
182                 for (i = 0; i < 8; i++)
183                         input_report_key(dev, hidp_keycode[i + 224], (udata[0] >> i) & 1);
184
185                 /* If all the key codes have been set to 0x01, it means
186                  * too many keys were pressed at the same time. */
187                 if (!memcmp(udata + 2, hidp_mkeyspat, 6))
188                         break;
189
190                 for (i = 2; i < 8; i++) {
191                         if (keys[i] > 3 && memscan(udata + 2, keys[i], 6) == udata + 8) {
192                                 if (hidp_keycode[keys[i]])
193                                         input_report_key(dev, hidp_keycode[keys[i]], 0);
194                                 else
195                                         BT_ERR("Unknown key (scancode %#x) released.", keys[i]);
196                         }
197
198                         if (udata[i] > 3 && memscan(keys + 2, udata[i], 6) == keys + 8) {
199                                 if (hidp_keycode[udata[i]])
200                                         input_report_key(dev, hidp_keycode[udata[i]], 1);
201                                 else
202                                         BT_ERR("Unknown key (scancode %#x) pressed.", udata[i]);
203                         }
204                 }
205
206                 memcpy(keys, udata, 8);
207                 break;
208
209         case 0x02:      /* Mouse report */
210                 input_report_key(dev, BTN_LEFT,   sdata[0] & 0x01);
211                 input_report_key(dev, BTN_RIGHT,  sdata[0] & 0x02);
212                 input_report_key(dev, BTN_MIDDLE, sdata[0] & 0x04);
213                 input_report_key(dev, BTN_SIDE,   sdata[0] & 0x08);
214                 input_report_key(dev, BTN_EXTRA,  sdata[0] & 0x10);
215
216                 input_report_rel(dev, REL_X, sdata[1]);
217                 input_report_rel(dev, REL_Y, sdata[2]);
218
219                 if (size > 3)
220                         input_report_rel(dev, REL_WHEEL, sdata[3]);
221                 break;
222         }
223
224         input_sync(dev);
225 }
226
227 static int __hidp_send_ctrl_message(struct hidp_session *session,
228                                     unsigned char hdr, unsigned char *data,
229                                     int size)
230 {
231         struct sk_buff *skb;
232
233         BT_DBG("session %p data %p size %d", session, data, size);
234
235         if (atomic_read(&session->terminate))
236                 return -EIO;
237
238         skb = alloc_skb(size + 1, GFP_ATOMIC);
239         if (!skb) {
240                 BT_ERR("Can't allocate memory for new frame");
241                 return -ENOMEM;
242         }
243
244         *skb_put(skb, 1) = hdr;
245         if (data && size > 0)
246                 memcpy(skb_put(skb, size), data, size);
247
248         skb_queue_tail(&session->ctrl_transmit, skb);
249
250         return 0;
251 }
252
253 static int hidp_send_ctrl_message(struct hidp_session *session,
254                         unsigned char hdr, unsigned char *data, int size)
255 {
256         int err;
257
258         err = __hidp_send_ctrl_message(session, hdr, data, size);
259
260         hidp_schedule(session);
261
262         return err;
263 }
264
265 static int hidp_queue_report(struct hidp_session *session,
266                                 unsigned char *data, int size)
267 {
268         struct sk_buff *skb;
269
270         BT_DBG("session %p hid %p data %p size %d", session, session->hid, data, size);
271
272         skb = alloc_skb(size + 1, GFP_ATOMIC);
273         if (!skb) {
274                 BT_ERR("Can't allocate memory for new frame");
275                 return -ENOMEM;
276         }
277
278         *skb_put(skb, 1) = 0xa2;
279         if (size > 0)
280                 memcpy(skb_put(skb, size), data, size);
281
282         skb_queue_tail(&session->intr_transmit, skb);
283
284         hidp_schedule(session);
285
286         return 0;
287 }
288
289 static int hidp_send_report(struct hidp_session *session, struct hid_report *report)
290 {
291         unsigned char buf[32];
292         int rsize;
293
294         rsize = ((report->size - 1) >> 3) + 1 + (report->id > 0);
295         if (rsize > sizeof(buf))
296                 return -EIO;
297
298         hid_output_report(report, buf);
299
300         return hidp_queue_report(session, buf, rsize);
301 }
302
303 static int hidp_get_raw_report(struct hid_device *hid,
304                 unsigned char report_number,
305                 unsigned char *data, size_t count,
306                 unsigned char report_type)
307 {
308         struct hidp_session *session = hid->driver_data;
309         struct sk_buff *skb;
310         size_t len;
311         int numbered_reports = hid->report_enum[report_type].numbered;
312         int ret;
313
314         switch (report_type) {
315         case HID_FEATURE_REPORT:
316                 report_type = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_FEATURE;
317                 break;
318         case HID_INPUT_REPORT:
319                 report_type = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_INPUT;
320                 break;
321         case HID_OUTPUT_REPORT:
322                 report_type = HIDP_TRANS_GET_REPORT | HIDP_DATA_RTYPE_OUPUT;
323                 break;
324         default:
325                 return -EINVAL;
326         }
327
328         if (mutex_lock_interruptible(&session->report_mutex))
329                 return -ERESTARTSYS;
330
331         /* Set up our wait, and send the report request to the device. */
332         session->waiting_report_type = report_type & HIDP_DATA_RTYPE_MASK;
333         session->waiting_report_number = numbered_reports ? report_number : -1;
334         set_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
335         data[0] = report_number;
336         ret = hidp_send_ctrl_message(hid->driver_data, report_type, data, 1);
337         if (ret)
338                 goto err;
339
340         /* Wait for the return of the report. The returned report
341            gets put in session->report_return.  */
342         while (test_bit(HIDP_WAITING_FOR_RETURN, &session->flags)) {
343                 int res;
344
345                 res = wait_event_interruptible_timeout(session->report_queue,
346                         !test_bit(HIDP_WAITING_FOR_RETURN, &session->flags),
347                         5*HZ);
348                 if (res == 0) {
349                         /* timeout */
350                         ret = -EIO;
351                         goto err;
352                 }
353                 if (res < 0) {
354                         /* signal */
355                         ret = -ERESTARTSYS;
356                         goto err;
357                 }
358         }
359
360         skb = session->report_return;
361         if (skb) {
362                 len = skb->len < count ? skb->len : count;
363                 memcpy(data, skb->data, len);
364
365                 kfree_skb(skb);
366                 session->report_return = NULL;
367         } else {
368                 /* Device returned a HANDSHAKE, indicating  protocol error. */
369                 len = -EIO;
370         }
371
372         clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
373         mutex_unlock(&session->report_mutex);
374
375         return len;
376
377 err:
378         clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
379         mutex_unlock(&session->report_mutex);
380         return ret;
381 }
382
383 static int hidp_output_raw_report(struct hid_device *hid, unsigned char *data, size_t count,
384                 unsigned char report_type)
385 {
386         struct hidp_session *session = hid->driver_data;
387         int ret;
388
389         switch (report_type) {
390         case HID_FEATURE_REPORT:
391                 report_type = HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_FEATURE;
392                 break;
393         case HID_OUTPUT_REPORT:
394                 report_type = HIDP_TRANS_SET_REPORT | HIDP_DATA_RTYPE_OUPUT;
395                 break;
396         default:
397                 return -EINVAL;
398         }
399
400         if (mutex_lock_interruptible(&session->report_mutex))
401                 return -ERESTARTSYS;
402
403         /* Set up our wait, and send the report request to the device. */
404         set_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
405         ret = hidp_send_ctrl_message(hid->driver_data, report_type, data,
406                                                                         count);
407         if (ret)
408                 goto err;
409
410         /* Wait for the ACK from the device. */
411         while (test_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags)) {
412                 int res;
413
414                 res = wait_event_interruptible_timeout(session->report_queue,
415                         !test_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags),
416                         10*HZ);
417                 if (res == 0) {
418                         /* timeout */
419                         ret = -EIO;
420                         goto err;
421                 }
422                 if (res < 0) {
423                         /* signal */
424                         ret = -ERESTARTSYS;
425                         goto err;
426                 }
427         }
428
429         if (!session->output_report_success) {
430                 ret = -EIO;
431                 goto err;
432         }
433
434         ret = count;
435
436 err:
437         clear_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
438         mutex_unlock(&session->report_mutex);
439         return ret;
440 }
441
442 static void hidp_idle_timeout(unsigned long arg)
443 {
444         struct hidp_session *session = (struct hidp_session *) arg;
445
446         atomic_inc(&session->terminate);
447         wake_up_process(session->task);
448 }
449
450 static void hidp_set_timer(struct hidp_session *session)
451 {
452         if (session->idle_to > 0)
453                 mod_timer(&session->timer, jiffies + HZ * session->idle_to);
454 }
455
456 static void hidp_del_timer(struct hidp_session *session)
457 {
458         if (session->idle_to > 0)
459                 del_timer(&session->timer);
460 }
461
462 static void hidp_process_handshake(struct hidp_session *session,
463                                         unsigned char param)
464 {
465         BT_DBG("session %p param 0x%02x", session, param);
466         session->output_report_success = 0; /* default condition */
467
468         switch (param) {
469         case HIDP_HSHK_SUCCESSFUL:
470                 /* FIXME: Call into SET_ GET_ handlers here */
471                 session->output_report_success = 1;
472                 break;
473
474         case HIDP_HSHK_NOT_READY:
475         case HIDP_HSHK_ERR_INVALID_REPORT_ID:
476         case HIDP_HSHK_ERR_UNSUPPORTED_REQUEST:
477         case HIDP_HSHK_ERR_INVALID_PARAMETER:
478                 if (test_and_clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags))
479                         wake_up_interruptible(&session->report_queue);
480
481                 /* FIXME: Call into SET_ GET_ handlers here */
482                 break;
483
484         case HIDP_HSHK_ERR_UNKNOWN:
485                 break;
486
487         case HIDP_HSHK_ERR_FATAL:
488                 /* Device requests a reboot, as this is the only way this error
489                  * can be recovered. */
490                 __hidp_send_ctrl_message(session,
491                         HIDP_TRANS_HID_CONTROL | HIDP_CTRL_SOFT_RESET, NULL, 0);
492                 break;
493
494         default:
495                 __hidp_send_ctrl_message(session,
496                         HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_INVALID_PARAMETER, NULL, 0);
497                 break;
498         }
499
500         /* Wake up the waiting thread. */
501         if (test_and_clear_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags))
502                 wake_up_interruptible(&session->report_queue);
503 }
504
505 static void hidp_process_hid_control(struct hidp_session *session,
506                                         unsigned char param)
507 {
508         BT_DBG("session %p param 0x%02x", session, param);
509
510         if (param == HIDP_CTRL_VIRTUAL_CABLE_UNPLUG) {
511                 /* Flush the transmit queues */
512                 skb_queue_purge(&session->ctrl_transmit);
513                 skb_queue_purge(&session->intr_transmit);
514
515                 atomic_inc(&session->terminate);
516                 wake_up_process(current);
517         }
518 }
519
520 /* Returns true if the passed-in skb should be freed by the caller. */
521 static int hidp_process_data(struct hidp_session *session, struct sk_buff *skb,
522                                 unsigned char param)
523 {
524         int done_with_skb = 1;
525         BT_DBG("session %p skb %p len %d param 0x%02x", session, skb, skb->len, param);
526
527         switch (param) {
528         case HIDP_DATA_RTYPE_INPUT:
529                 hidp_set_timer(session);
530
531                 if (session->input)
532                         hidp_input_report(session, skb);
533
534                 if (session->hid)
535                         hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 0);
536                 break;
537
538         case HIDP_DATA_RTYPE_OTHER:
539         case HIDP_DATA_RTYPE_OUPUT:
540         case HIDP_DATA_RTYPE_FEATURE:
541                 break;
542
543         default:
544                 __hidp_send_ctrl_message(session,
545                         HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_INVALID_PARAMETER, NULL, 0);
546         }
547
548         if (test_bit(HIDP_WAITING_FOR_RETURN, &session->flags) &&
549                                 param == session->waiting_report_type) {
550                 if (session->waiting_report_number < 0 ||
551                     session->waiting_report_number == skb->data[0]) {
552                         /* hidp_get_raw_report() is waiting on this report. */
553                         session->report_return = skb;
554                         done_with_skb = 0;
555                         clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
556                         wake_up_interruptible(&session->report_queue);
557                 }
558         }
559
560         return done_with_skb;
561 }
562
563 static void hidp_recv_ctrl_frame(struct hidp_session *session,
564                                         struct sk_buff *skb)
565 {
566         unsigned char hdr, type, param;
567         int free_skb = 1;
568
569         BT_DBG("session %p skb %p len %d", session, skb, skb->len);
570
571         hdr = skb->data[0];
572         skb_pull(skb, 1);
573
574         type = hdr & HIDP_HEADER_TRANS_MASK;
575         param = hdr & HIDP_HEADER_PARAM_MASK;
576
577         switch (type) {
578         case HIDP_TRANS_HANDSHAKE:
579                 hidp_process_handshake(session, param);
580                 break;
581
582         case HIDP_TRANS_HID_CONTROL:
583                 hidp_process_hid_control(session, param);
584                 break;
585
586         case HIDP_TRANS_DATA:
587                 free_skb = hidp_process_data(session, skb, param);
588                 break;
589
590         default:
591                 __hidp_send_ctrl_message(session,
592                         HIDP_TRANS_HANDSHAKE | HIDP_HSHK_ERR_UNSUPPORTED_REQUEST, NULL, 0);
593                 break;
594         }
595
596         if (free_skb)
597                 kfree_skb(skb);
598 }
599
600 static void hidp_recv_intr_frame(struct hidp_session *session,
601                                 struct sk_buff *skb)
602 {
603         unsigned char hdr;
604
605         BT_DBG("session %p skb %p len %d", session, skb, skb->len);
606
607         hdr = skb->data[0];
608         skb_pull(skb, 1);
609
610         if (hdr == (HIDP_TRANS_DATA | HIDP_DATA_RTYPE_INPUT)) {
611                 hidp_set_timer(session);
612
613                 if (session->input)
614                         hidp_input_report(session, skb);
615
616                 if (session->hid) {
617                         hid_input_report(session->hid, HID_INPUT_REPORT, skb->data, skb->len, 1);
618                         BT_DBG("report len %d", skb->len);
619                 }
620         } else {
621                 BT_DBG("Unsupported protocol header 0x%02x", hdr);
622         }
623
624         kfree_skb(skb);
625 }
626
627 static int hidp_send_frame(struct socket *sock, unsigned char *data, int len)
628 {
629         struct kvec iv = { data, len };
630         struct msghdr msg;
631
632         BT_DBG("sock %p data %p len %d", sock, data, len);
633
634         if (!len)
635                 return 0;
636
637         memset(&msg, 0, sizeof(msg));
638
639         return kernel_sendmsg(sock, &msg, &iv, 1, len);
640 }
641
642 static void hidp_process_intr_transmit(struct hidp_session *session)
643 {
644         struct sk_buff *skb;
645
646         BT_DBG("session %p", session);
647
648         while ((skb = skb_dequeue(&session->intr_transmit))) {
649                 if (hidp_send_frame(session->intr_sock, skb->data, skb->len) < 0) {
650                         skb_queue_head(&session->intr_transmit, skb);
651                         break;
652                 }
653
654                 hidp_set_timer(session);
655                 kfree_skb(skb);
656         }
657 }
658
659 static void hidp_process_ctrl_transmit(struct hidp_session *session)
660 {
661         struct sk_buff *skb;
662
663         BT_DBG("session %p", session);
664
665         while ((skb = skb_dequeue(&session->ctrl_transmit))) {
666                 if (hidp_send_frame(session->ctrl_sock, skb->data, skb->len) < 0) {
667                         skb_queue_head(&session->ctrl_transmit, skb);
668                         break;
669                 }
670
671                 hidp_set_timer(session);
672                 kfree_skb(skb);
673         }
674 }
675
676 static int hidp_session(void *arg)
677 {
678         struct hidp_session *session = arg;
679         struct sock *ctrl_sk = session->ctrl_sock->sk;
680         struct sock *intr_sk = session->intr_sock->sk;
681         struct sk_buff *skb;
682         wait_queue_t ctrl_wait, intr_wait;
683
684         BT_DBG("session %p", session);
685
686         __module_get(THIS_MODULE);
687         set_user_nice(current, -15);
688
689         init_waitqueue_entry(&ctrl_wait, current);
690         init_waitqueue_entry(&intr_wait, current);
691         add_wait_queue(sk_sleep(ctrl_sk), &ctrl_wait);
692         add_wait_queue(sk_sleep(intr_sk), &intr_wait);
693         session->waiting_for_startup = 0;
694         wake_up_interruptible(&session->startup_queue);
695         set_current_state(TASK_INTERRUPTIBLE);
696         while (!atomic_read(&session->terminate)) {
697                 if (ctrl_sk->sk_state != BT_CONNECTED ||
698                                 intr_sk->sk_state != BT_CONNECTED)
699                         break;
700
701                 while ((skb = skb_dequeue(&intr_sk->sk_receive_queue))) {
702                         skb_orphan(skb);
703                         if (!skb_linearize(skb))
704                                 hidp_recv_intr_frame(session, skb);
705                         else
706                                 kfree_skb(skb);
707                 }
708
709                 hidp_process_intr_transmit(session);
710
711                 while ((skb = skb_dequeue(&ctrl_sk->sk_receive_queue))) {
712                         skb_orphan(skb);
713                         if (!skb_linearize(skb))
714                                 hidp_recv_ctrl_frame(session, skb);
715                         else
716                                 kfree_skb(skb);
717                 }
718
719                 hidp_process_ctrl_transmit(session);
720
721                 schedule();
722                 set_current_state(TASK_INTERRUPTIBLE);
723         }
724         set_current_state(TASK_RUNNING);
725         remove_wait_queue(sk_sleep(intr_sk), &intr_wait);
726         remove_wait_queue(sk_sleep(ctrl_sk), &ctrl_wait);
727
728         clear_bit(HIDP_WAITING_FOR_SEND_ACK, &session->flags);
729         clear_bit(HIDP_WAITING_FOR_RETURN, &session->flags);
730         wake_up_interruptible(&session->report_queue);
731
732         down_write(&hidp_session_sem);
733
734         hidp_del_timer(session);
735
736         if (session->input) {
737                 input_unregister_device(session->input);
738                 session->input = NULL;
739         }
740
741         if (session->hid) {
742                 hid_destroy_device(session->hid);
743                 session->hid = NULL;
744         }
745
746         /* Wakeup user-space polling for socket errors */
747         session->intr_sock->sk->sk_err = EUNATCH;
748         session->ctrl_sock->sk->sk_err = EUNATCH;
749
750         hidp_schedule(session);
751
752         fput(session->intr_sock->file);
753
754         wait_event_timeout(*(sk_sleep(ctrl_sk)),
755                 (ctrl_sk->sk_state == BT_CLOSED), msecs_to_jiffies(500));
756
757         fput(session->ctrl_sock->file);
758
759         __hidp_unlink_session(session);
760
761         up_write(&hidp_session_sem);
762
763         kfree(session->rd_data);
764         kfree(session);
765         module_put_and_exit(0);
766         return 0;
767 }
768
769 static struct hci_conn *hidp_get_connection(struct hidp_session *session)
770 {
771         bdaddr_t *src = &bt_sk(session->ctrl_sock->sk)->src;
772         bdaddr_t *dst = &bt_sk(session->ctrl_sock->sk)->dst;
773         struct hci_conn *conn;
774         struct hci_dev *hdev;
775
776         hdev = hci_get_route(dst, src);
777         if (!hdev)
778                 return NULL;
779
780         hci_dev_lock(hdev);
781         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
782         if (conn)
783                 hci_conn_hold_device(conn);
784         hci_dev_unlock(hdev);
785
786         hci_dev_put(hdev);
787
788         return conn;
789 }
790
791 static int hidp_setup_input(struct hidp_session *session,
792                                 struct hidp_connadd_req *req)
793 {
794         struct input_dev *input;
795         int i;
796
797         input = input_allocate_device();
798         if (!input)
799                 return -ENOMEM;
800
801         session->input = input;
802
803         input_set_drvdata(input, session);
804
805         input->name = "Bluetooth HID Boot Protocol Device";
806
807         input->id.bustype = BUS_BLUETOOTH;
808         input->id.vendor  = req->vendor;
809         input->id.product = req->product;
810         input->id.version = req->version;
811
812         if (req->subclass & 0x40) {
813                 set_bit(EV_KEY, input->evbit);
814                 set_bit(EV_LED, input->evbit);
815                 set_bit(EV_REP, input->evbit);
816
817                 set_bit(LED_NUML,    input->ledbit);
818                 set_bit(LED_CAPSL,   input->ledbit);
819                 set_bit(LED_SCROLLL, input->ledbit);
820                 set_bit(LED_COMPOSE, input->ledbit);
821                 set_bit(LED_KANA,    input->ledbit);
822
823                 for (i = 0; i < sizeof(hidp_keycode); i++)
824                         set_bit(hidp_keycode[i], input->keybit);
825                 clear_bit(0, input->keybit);
826         }
827
828         if (req->subclass & 0x80) {
829                 input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL);
830                 input->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
831                         BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
832                 input->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y);
833                 input->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_SIDE) |
834                         BIT_MASK(BTN_EXTRA);
835                 input->relbit[0] |= BIT_MASK(REL_WHEEL);
836         }
837
838         input->dev.parent = &session->conn->dev;
839
840         input->event = hidp_input_event;
841
842         return 0;
843 }
844
845 static int hidp_open(struct hid_device *hid)
846 {
847         return 0;
848 }
849
850 static void hidp_close(struct hid_device *hid)
851 {
852 }
853
854 static int hidp_parse(struct hid_device *hid)
855 {
856         struct hidp_session *session = hid->driver_data;
857
858         return hid_parse_report(session->hid, session->rd_data,
859                         session->rd_size);
860 }
861
862 static int hidp_start(struct hid_device *hid)
863 {
864         struct hidp_session *session = hid->driver_data;
865         struct hid_report *report;
866
867         if (hid->quirks & HID_QUIRK_NO_INIT_REPORTS)
868                 return 0;
869
870         list_for_each_entry(report, &hid->report_enum[HID_INPUT_REPORT].
871                         report_list, list)
872                 hidp_send_report(session, report);
873
874         list_for_each_entry(report, &hid->report_enum[HID_FEATURE_REPORT].
875                         report_list, list)
876                 hidp_send_report(session, report);
877
878         return 0;
879 }
880
881 static void hidp_stop(struct hid_device *hid)
882 {
883         struct hidp_session *session = hid->driver_data;
884
885         skb_queue_purge(&session->ctrl_transmit);
886         skb_queue_purge(&session->intr_transmit);
887
888         hid->claimed = 0;
889 }
890
891 static struct hid_ll_driver hidp_hid_driver = {
892         .parse = hidp_parse,
893         .start = hidp_start,
894         .stop = hidp_stop,
895         .open  = hidp_open,
896         .close = hidp_close,
897         .hidinput_input_event = hidp_hidinput_event,
898 };
899
900 /* This function sets up the hid device. It does not add it
901    to the HID system. That is done in hidp_add_connection(). */
902 static int hidp_setup_hid(struct hidp_session *session,
903                                 struct hidp_connadd_req *req)
904 {
905         struct hid_device *hid;
906         int err;
907
908         session->rd_data = kzalloc(req->rd_size, GFP_KERNEL);
909         if (!session->rd_data)
910                 return -ENOMEM;
911
912         if (copy_from_user(session->rd_data, req->rd_data, req->rd_size)) {
913                 err = -EFAULT;
914                 goto fault;
915         }
916         session->rd_size = req->rd_size;
917
918         hid = hid_allocate_device();
919         if (IS_ERR(hid)) {
920                 err = PTR_ERR(hid);
921                 goto fault;
922         }
923
924         session->hid = hid;
925
926         hid->driver_data = session;
927
928         hid->bus     = BUS_BLUETOOTH;
929         hid->vendor  = req->vendor;
930         hid->product = req->product;
931         hid->version = req->version;
932         hid->country = req->country;
933
934         strncpy(hid->name, req->name, 128);
935
936         snprintf(hid->phys, sizeof(hid->phys), "%pMR",
937                  &bt_sk(session->ctrl_sock->sk)->src);
938
939         snprintf(hid->uniq, sizeof(hid->uniq), "%pMR",
940                  &bt_sk(session->ctrl_sock->sk)->dst);
941
942         hid->dev.parent = &session->conn->dev;
943         hid->ll_driver = &hidp_hid_driver;
944
945         hid->hid_get_raw_report = hidp_get_raw_report;
946         hid->hid_output_raw_report = hidp_output_raw_report;
947
948         /* True if device is blacklisted in drivers/hid/hid-core.c */
949         if (hid_ignore(hid)) {
950                 hid_destroy_device(session->hid);
951                 session->hid = NULL;
952                 return -ENODEV;
953         }
954
955         return 0;
956
957 fault:
958         kfree(session->rd_data);
959         session->rd_data = NULL;
960
961         return err;
962 }
963
964 int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock)
965 {
966         struct hidp_session *session, *s;
967         int vendor, product;
968         int err;
969
970         BT_DBG("");
971
972         if (bacmp(&bt_sk(ctrl_sock->sk)->src, &bt_sk(intr_sock->sk)->src) ||
973                         bacmp(&bt_sk(ctrl_sock->sk)->dst, &bt_sk(intr_sock->sk)->dst))
974                 return -ENOTUNIQ;
975
976         BT_DBG("rd_data %p rd_size %d", req->rd_data, req->rd_size);
977
978         down_write(&hidp_session_sem);
979
980         s = __hidp_get_session(&bt_sk(ctrl_sock->sk)->dst);
981         if (s && s->state == BT_CONNECTED) {
982                 up_write(&hidp_session_sem);
983                 return -EEXIST;
984         }
985
986         session = kzalloc(sizeof(struct hidp_session), GFP_KERNEL);
987         if (!session) {
988                 up_write(&hidp_session_sem);
989                 return -ENOMEM;
990         }
991
992         bacpy(&session->bdaddr, &bt_sk(ctrl_sock->sk)->dst);
993
994         session->ctrl_mtu = min_t(uint, l2cap_pi(ctrl_sock->sk)->chan->omtu,
995                                         l2cap_pi(ctrl_sock->sk)->chan->imtu);
996         session->intr_mtu = min_t(uint, l2cap_pi(intr_sock->sk)->chan->omtu,
997                                         l2cap_pi(intr_sock->sk)->chan->imtu);
998
999         BT_DBG("ctrl mtu %d intr mtu %d", session->ctrl_mtu, session->intr_mtu);
1000
1001         session->ctrl_sock = ctrl_sock;
1002         session->intr_sock = intr_sock;
1003         session->state     = BT_CONNECTED;
1004
1005         session->conn = hidp_get_connection(session);
1006         if (!session->conn) {
1007                 err = -ENOTCONN;
1008                 goto failed;
1009         }
1010
1011         setup_timer(&session->timer, hidp_idle_timeout, (unsigned long)session);
1012
1013         skb_queue_head_init(&session->ctrl_transmit);
1014         skb_queue_head_init(&session->intr_transmit);
1015
1016         mutex_init(&session->report_mutex);
1017         init_waitqueue_head(&session->report_queue);
1018         init_waitqueue_head(&session->startup_queue);
1019         session->waiting_for_startup = 1;
1020         session->flags   = req->flags & (1 << HIDP_BLUETOOTH_VENDOR_ID);
1021         session->idle_to = req->idle_to;
1022
1023         __hidp_link_session(session);
1024
1025         if (req->rd_size > 0) {
1026                 err = hidp_setup_hid(session, req);
1027                 if (err && err != -ENODEV)
1028                         goto purge;
1029         }
1030
1031         if (!session->hid) {
1032                 err = hidp_setup_input(session, req);
1033                 if (err < 0)
1034                         goto purge;
1035         }
1036
1037         hidp_set_timer(session);
1038
1039         if (session->hid) {
1040                 vendor  = session->hid->vendor;
1041                 product = session->hid->product;
1042         } else if (session->input) {
1043                 vendor  = session->input->id.vendor;
1044                 product = session->input->id.product;
1045         } else {
1046                 vendor = 0x0000;
1047                 product = 0x0000;
1048         }
1049
1050         session->task = kthread_run(hidp_session, session, "khidpd_%04x%04x",
1051                                                         vendor, product);
1052         if (IS_ERR(session->task)) {
1053                 err = PTR_ERR(session->task);
1054                 goto unlink;
1055         }
1056
1057         while (session->waiting_for_startup) {
1058                 wait_event_interruptible(session->startup_queue,
1059                         !session->waiting_for_startup);
1060         }
1061
1062         if (session->hid)
1063                 err = hid_add_device(session->hid);
1064         else
1065                 err = input_register_device(session->input);
1066
1067         if (err < 0) {
1068                 atomic_inc(&session->terminate);
1069                 wake_up_process(session->task);
1070                 up_write(&hidp_session_sem);
1071                 return err;
1072         }
1073
1074         if (session->input) {
1075                 hidp_send_ctrl_message(session,
1076                         HIDP_TRANS_SET_PROTOCOL | HIDP_PROTO_BOOT, NULL, 0);
1077                 session->flags |= (1 << HIDP_BOOT_PROTOCOL_MODE);
1078
1079                 session->leds = 0xff;
1080                 hidp_input_event(session->input, EV_LED, 0, 0);
1081         }
1082
1083         up_write(&hidp_session_sem);
1084         return 0;
1085
1086 unlink:
1087         hidp_del_timer(session);
1088
1089         if (session->input) {
1090                 input_unregister_device(session->input);
1091                 session->input = NULL;
1092         }
1093
1094         if (session->hid) {
1095                 hid_destroy_device(session->hid);
1096                 session->hid = NULL;
1097         }
1098
1099         kfree(session->rd_data);
1100         session->rd_data = NULL;
1101
1102 purge:
1103         __hidp_unlink_session(session);
1104
1105         skb_queue_purge(&session->ctrl_transmit);
1106         skb_queue_purge(&session->intr_transmit);
1107
1108 failed:
1109         up_write(&hidp_session_sem);
1110
1111         kfree(session);
1112         return err;
1113 }
1114
1115 int hidp_del_connection(struct hidp_conndel_req *req)
1116 {
1117         struct hidp_session *session;
1118         int err = 0;
1119
1120         BT_DBG("");
1121
1122         down_read(&hidp_session_sem);
1123
1124         session = __hidp_get_session(&req->bdaddr);
1125         if (session) {
1126                 if (req->flags & (1 << HIDP_VIRTUAL_CABLE_UNPLUG)) {
1127                         hidp_send_ctrl_message(session,
1128                                 HIDP_TRANS_HID_CONTROL | HIDP_CTRL_VIRTUAL_CABLE_UNPLUG, NULL, 0);
1129                 } else {
1130                         /* Flush the transmit queues */
1131                         skb_queue_purge(&session->ctrl_transmit);
1132                         skb_queue_purge(&session->intr_transmit);
1133
1134                         atomic_inc(&session->terminate);
1135                         wake_up_process(session->task);
1136                 }
1137         } else
1138                 err = -ENOENT;
1139
1140         up_read(&hidp_session_sem);
1141         return err;
1142 }
1143
1144 int hidp_get_connlist(struct hidp_connlist_req *req)
1145 {
1146         struct hidp_session *session;
1147         int err = 0, n = 0;
1148
1149         BT_DBG("");
1150
1151         down_read(&hidp_session_sem);
1152
1153         list_for_each_entry(session, &hidp_session_list, list) {
1154                 struct hidp_conninfo ci;
1155
1156                 __hidp_copy_session(session, &ci);
1157
1158                 if (copy_to_user(req->ci, &ci, sizeof(ci))) {
1159                         err = -EFAULT;
1160                         break;
1161                 }
1162
1163                 if (++n >= req->cnum)
1164                         break;
1165
1166                 req->ci++;
1167         }
1168         req->cnum = n;
1169
1170         up_read(&hidp_session_sem);
1171         return err;
1172 }
1173
1174 int hidp_get_conninfo(struct hidp_conninfo *ci)
1175 {
1176         struct hidp_session *session;
1177         int err = 0;
1178
1179         down_read(&hidp_session_sem);
1180
1181         session = __hidp_get_session(&ci->bdaddr);
1182         if (session)
1183                 __hidp_copy_session(session, ci);
1184         else
1185                 err = -ENOENT;
1186
1187         up_read(&hidp_session_sem);
1188         return err;
1189 }
1190
1191 static int __init hidp_init(void)
1192 {
1193         BT_INFO("HIDP (Human Interface Emulation) ver %s", VERSION);
1194
1195         return hidp_init_sockets();
1196 }
1197
1198 static void __exit hidp_exit(void)
1199 {
1200         hidp_cleanup_sockets();
1201 }
1202
1203 module_init(hidp_init);
1204 module_exit(hidp_exit);
1205
1206 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
1207 MODULE_DESCRIPTION("Bluetooth HIDP ver " VERSION);
1208 MODULE_VERSION(VERSION);
1209 MODULE_LICENSE("GPL");
1210 MODULE_ALIAS("bt-proto-6");