~ubuntu-branches/ubuntu/natty/linux-backports-modules-2.6.38/natty-proposed

« back to all changes in this revision

Viewing changes to updates/cw-2.6.39/net/bluetooth/hci_event.c

  • Committer: Bazaar Package Importer
  • Author(s): Tim Gardner, Tim Gardner
  • Date: 2011-06-08 10:44:09 UTC
  • Revision ID: james.westby@ubuntu.com-20110608104409-fnl8carkdo15bwsz
Tags: 2.6.38-10.6
[ Tim Gardner ]

Shorten compat-wireless package name to cw to accomodate
CDROM file name length restrictions.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
   BlueZ - Bluetooth protocol stack for Linux
 
3
   Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
 
4
 
 
5
   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
 
6
 
 
7
   This program is free software; you can redistribute it and/or modify
 
8
   it under the terms of the GNU General Public License version 2 as
 
9
   published by the Free Software Foundation;
 
10
 
 
11
   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 
12
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
13
   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
 
14
   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
 
15
   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
 
16
   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 
17
   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 
18
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 
19
 
 
20
   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
 
21
   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
 
22
   SOFTWARE IS DISCLAIMED.
 
23
*/
 
24
 
 
25
/* Bluetooth HCI event handling. */
 
26
 
 
27
#include <linux/module.h>
 
28
 
 
29
#include <linux/types.h>
 
30
#include <linux/errno.h>
 
31
#include <linux/kernel.h>
 
32
#include <linux/slab.h>
 
33
#include <linux/poll.h>
 
34
#include <linux/fcntl.h>
 
35
#include <linux/init.h>
 
36
#include <linux/skbuff.h>
 
37
#include <linux/interrupt.h>
 
38
#include <linux/notifier.h>
 
39
#include <net/sock.h>
 
40
 
 
41
#include <asm/system.h>
 
42
#include <linux/uaccess.h>
 
43
#include <asm/unaligned.h>
 
44
 
 
45
#include <net/bluetooth/bluetooth.h>
 
46
#include <net/bluetooth/hci_core.h>
 
47
 
 
48
/* Handle HCI Event packets */
 
49
 
 
50
static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
 
51
{
 
52
        __u8 status = *((__u8 *) skb->data);
 
53
 
 
54
        BT_DBG("%s status 0x%x", hdev->name, status);
 
55
 
 
56
        if (status)
 
57
                return;
 
58
 
 
59
        clear_bit(HCI_INQUIRY, &hdev->flags);
 
60
 
 
61
        hci_req_complete(hdev, HCI_OP_INQUIRY_CANCEL, status);
 
62
 
 
63
        hci_conn_check_pending(hdev);
 
64
}
 
65
 
 
66
static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
 
67
{
 
68
        __u8 status = *((__u8 *) skb->data);
 
69
 
 
70
        BT_DBG("%s status 0x%x", hdev->name, status);
 
71
 
 
72
        if (status)
 
73
                return;
 
74
 
 
75
        clear_bit(HCI_INQUIRY, &hdev->flags);
 
76
 
 
77
        hci_conn_check_pending(hdev);
 
78
}
 
79
 
 
80
static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev, struct sk_buff *skb)
 
81
{
 
82
        BT_DBG("%s", hdev->name);
 
83
}
 
84
 
 
85
static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
 
86
{
 
87
        struct hci_rp_role_discovery *rp = (void *) skb->data;
 
88
        struct hci_conn *conn;
 
89
 
 
90
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
91
 
 
92
        if (rp->status)
 
93
                return;
 
94
 
 
95
        hci_dev_lock(hdev);
 
96
 
 
97
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
 
98
        if (conn) {
 
99
                if (rp->role)
 
100
                        conn->link_mode &= ~HCI_LM_MASTER;
 
101
                else
 
102
                        conn->link_mode |= HCI_LM_MASTER;
 
103
        }
 
104
 
 
105
        hci_dev_unlock(hdev);
 
106
}
 
107
 
 
108
static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
 
109
{
 
110
        struct hci_rp_read_link_policy *rp = (void *) skb->data;
 
111
        struct hci_conn *conn;
 
112
 
 
113
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
114
 
 
115
        if (rp->status)
 
116
                return;
 
117
 
 
118
        hci_dev_lock(hdev);
 
119
 
 
120
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
 
121
        if (conn)
 
122
                conn->link_policy = __le16_to_cpu(rp->policy);
 
123
 
 
124
        hci_dev_unlock(hdev);
 
125
}
 
126
 
 
127
static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
 
128
{
 
129
        struct hci_rp_write_link_policy *rp = (void *) skb->data;
 
130
        struct hci_conn *conn;
 
131
        void *sent;
 
132
 
 
133
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
134
 
 
135
        if (rp->status)
 
136
                return;
 
137
 
 
138
        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
 
139
        if (!sent)
 
140
                return;
 
141
 
 
142
        hci_dev_lock(hdev);
 
143
 
 
144
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
 
145
        if (conn)
 
146
                conn->link_policy = get_unaligned_le16(sent + 2);
 
147
 
 
148
        hci_dev_unlock(hdev);
 
149
}
 
150
 
 
151
static void hci_cc_read_def_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
 
152
{
 
153
        struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
 
154
 
 
155
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
156
 
 
157
        if (rp->status)
 
158
                return;
 
159
 
 
160
        hdev->link_policy = __le16_to_cpu(rp->policy);
 
161
}
 
162
 
 
163
static void hci_cc_write_def_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
 
164
{
 
165
        __u8 status = *((__u8 *) skb->data);
 
166
        void *sent;
 
167
 
 
168
        BT_DBG("%s status 0x%x", hdev->name, status);
 
169
 
 
170
        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
 
171
        if (!sent)
 
172
                return;
 
173
 
 
174
        if (!status)
 
175
                hdev->link_policy = get_unaligned_le16(sent);
 
176
 
 
177
        hci_req_complete(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, status);
 
178
}
 
179
 
 
180
static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
 
181
{
 
182
        __u8 status = *((__u8 *) skb->data);
 
183
 
 
184
        BT_DBG("%s status 0x%x", hdev->name, status);
 
185
 
 
186
        clear_bit(HCI_RESET, &hdev->flags);
 
187
 
 
188
        hci_req_complete(hdev, HCI_OP_RESET, status);
 
189
}
 
190
 
 
191
static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
 
192
{
 
193
        __u8 status = *((__u8 *) skb->data);
 
194
        void *sent;
 
195
 
 
196
        BT_DBG("%s status 0x%x", hdev->name, status);
 
197
 
 
198
        if (status)
 
199
                return;
 
200
 
 
201
        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
 
202
        if (!sent)
 
203
                return;
 
204
 
 
205
        memcpy(hdev->dev_name, sent, 248);
 
206
}
 
207
 
 
208
static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
 
209
{
 
210
        struct hci_rp_read_local_name *rp = (void *) skb->data;
 
211
 
 
212
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
213
 
 
214
        if (rp->status)
 
215
                return;
 
216
 
 
217
        memcpy(hdev->dev_name, rp->name, 248);
 
218
}
 
219
 
 
220
static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
 
221
{
 
222
        __u8 status = *((__u8 *) skb->data);
 
223
        void *sent;
 
224
 
 
225
        BT_DBG("%s status 0x%x", hdev->name, status);
 
226
 
 
227
        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
 
228
        if (!sent)
 
229
                return;
 
230
 
 
231
        if (!status) {
 
232
                __u8 param = *((__u8 *) sent);
 
233
 
 
234
                if (param == AUTH_ENABLED)
 
235
                        set_bit(HCI_AUTH, &hdev->flags);
 
236
                else
 
237
                        clear_bit(HCI_AUTH, &hdev->flags);
 
238
        }
 
239
 
 
240
        hci_req_complete(hdev, HCI_OP_WRITE_AUTH_ENABLE, status);
 
241
}
 
242
 
 
243
static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
 
244
{
 
245
        __u8 status = *((__u8 *) skb->data);
 
246
        void *sent;
 
247
 
 
248
        BT_DBG("%s status 0x%x", hdev->name, status);
 
249
 
 
250
        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
 
251
        if (!sent)
 
252
                return;
 
253
 
 
254
        if (!status) {
 
255
                __u8 param = *((__u8 *) sent);
 
256
 
 
257
                if (param)
 
258
                        set_bit(HCI_ENCRYPT, &hdev->flags);
 
259
                else
 
260
                        clear_bit(HCI_ENCRYPT, &hdev->flags);
 
261
        }
 
262
 
 
263
        hci_req_complete(hdev, HCI_OP_WRITE_ENCRYPT_MODE, status);
 
264
}
 
265
 
 
266
static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
 
267
{
 
268
        __u8 status = *((__u8 *) skb->data);
 
269
        void *sent;
 
270
 
 
271
        BT_DBG("%s status 0x%x", hdev->name, status);
 
272
 
 
273
        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
 
274
        if (!sent)
 
275
                return;
 
276
 
 
277
        if (!status) {
 
278
                __u8 param = *((__u8 *) sent);
 
279
                int old_pscan, old_iscan;
 
280
 
 
281
                old_pscan = test_and_clear_bit(HCI_PSCAN, &hdev->flags);
 
282
                old_iscan = test_and_clear_bit(HCI_ISCAN, &hdev->flags);
 
283
 
 
284
                if (param & SCAN_INQUIRY) {
 
285
                        set_bit(HCI_ISCAN, &hdev->flags);
 
286
                        if (!old_iscan)
 
287
                                mgmt_discoverable(hdev->id, 1);
 
288
                } else if (old_iscan)
 
289
                        mgmt_discoverable(hdev->id, 0);
 
290
 
 
291
                if (param & SCAN_PAGE) {
 
292
                        set_bit(HCI_PSCAN, &hdev->flags);
 
293
                        if (!old_pscan)
 
294
                                mgmt_connectable(hdev->id, 1);
 
295
                } else if (old_pscan)
 
296
                        mgmt_connectable(hdev->id, 0);
 
297
        }
 
298
 
 
299
        hci_req_complete(hdev, HCI_OP_WRITE_SCAN_ENABLE, status);
 
300
}
 
301
 
 
302
static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
 
303
{
 
304
        struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
 
305
 
 
306
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
307
 
 
308
        if (rp->status)
 
309
                return;
 
310
 
 
311
        memcpy(hdev->dev_class, rp->dev_class, 3);
 
312
 
 
313
        BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
 
314
                hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
 
315
}
 
316
 
 
317
static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
 
318
{
 
319
        __u8 status = *((__u8 *) skb->data);
 
320
        void *sent;
 
321
 
 
322
        BT_DBG("%s status 0x%x", hdev->name, status);
 
323
 
 
324
        if (status)
 
325
                return;
 
326
 
 
327
        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
 
328
        if (!sent)
 
329
                return;
 
330
 
 
331
        memcpy(hdev->dev_class, sent, 3);
 
332
}
 
333
 
 
334
static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
 
335
{
 
336
        struct hci_rp_read_voice_setting *rp = (void *) skb->data;
 
337
        __u16 setting;
 
338
 
 
339
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
340
 
 
341
        if (rp->status)
 
342
                return;
 
343
 
 
344
        setting = __le16_to_cpu(rp->voice_setting);
 
345
 
 
346
        if (hdev->voice_setting == setting)
 
347
                return;
 
348
 
 
349
        hdev->voice_setting = setting;
 
350
 
 
351
        BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
 
352
 
 
353
        if (hdev->notify) {
 
354
                tasklet_disable(&hdev->tx_task);
 
355
                hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
 
356
                tasklet_enable(&hdev->tx_task);
 
357
        }
 
358
}
 
359
 
 
360
static void hci_cc_write_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
 
361
{
 
362
        __u8 status = *((__u8 *) skb->data);
 
363
        __u16 setting;
 
364
        void *sent;
 
365
 
 
366
        BT_DBG("%s status 0x%x", hdev->name, status);
 
367
 
 
368
        if (status)
 
369
                return;
 
370
 
 
371
        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
 
372
        if (!sent)
 
373
                return;
 
374
 
 
375
        setting = get_unaligned_le16(sent);
 
376
 
 
377
        if (hdev->voice_setting == setting)
 
378
                return;
 
379
 
 
380
        hdev->voice_setting = setting;
 
381
 
 
382
        BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
 
383
 
 
384
        if (hdev->notify) {
 
385
                tasklet_disable(&hdev->tx_task);
 
386
                hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
 
387
                tasklet_enable(&hdev->tx_task);
 
388
        }
 
389
}
 
390
 
 
391
static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
 
392
{
 
393
        __u8 status = *((__u8 *) skb->data);
 
394
 
 
395
        BT_DBG("%s status 0x%x", hdev->name, status);
 
396
 
 
397
        hci_req_complete(hdev, HCI_OP_HOST_BUFFER_SIZE, status);
 
398
}
 
399
 
 
400
static void hci_cc_read_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
 
401
{
 
402
        struct hci_rp_read_ssp_mode *rp = (void *) skb->data;
 
403
 
 
404
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
405
 
 
406
        if (rp->status)
 
407
                return;
 
408
 
 
409
        hdev->ssp_mode = rp->mode;
 
410
}
 
411
 
 
412
static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
 
413
{
 
414
        __u8 status = *((__u8 *) skb->data);
 
415
        void *sent;
 
416
 
 
417
        BT_DBG("%s status 0x%x", hdev->name, status);
 
418
 
 
419
        if (status)
 
420
                return;
 
421
 
 
422
        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
 
423
        if (!sent)
 
424
                return;
 
425
 
 
426
        hdev->ssp_mode = *((__u8 *) sent);
 
427
}
 
428
 
 
429
static u8 hci_get_inquiry_mode(struct hci_dev *hdev)
 
430
{
 
431
        if (hdev->features[6] & LMP_EXT_INQ)
 
432
                return 2;
 
433
 
 
434
        if (hdev->features[3] & LMP_RSSI_INQ)
 
435
                return 1;
 
436
 
 
437
        if (hdev->manufacturer == 11 && hdev->hci_rev == 0x00 &&
 
438
                                                hdev->lmp_subver == 0x0757)
 
439
                return 1;
 
440
 
 
441
        if (hdev->manufacturer == 15) {
 
442
                if (hdev->hci_rev == 0x03 && hdev->lmp_subver == 0x6963)
 
443
                        return 1;
 
444
                if (hdev->hci_rev == 0x09 && hdev->lmp_subver == 0x6963)
 
445
                        return 1;
 
446
                if (hdev->hci_rev == 0x00 && hdev->lmp_subver == 0x6965)
 
447
                        return 1;
 
448
        }
 
449
 
 
450
        if (hdev->manufacturer == 31 && hdev->hci_rev == 0x2005 &&
 
451
                                                hdev->lmp_subver == 0x1805)
 
452
                return 1;
 
453
 
 
454
        return 0;
 
455
}
 
456
 
 
457
static void hci_setup_inquiry_mode(struct hci_dev *hdev)
 
458
{
 
459
        u8 mode;
 
460
 
 
461
        mode = hci_get_inquiry_mode(hdev);
 
462
 
 
463
        hci_send_cmd(hdev, HCI_OP_WRITE_INQUIRY_MODE, 1, &mode);
 
464
}
 
465
 
 
466
static void hci_setup_event_mask(struct hci_dev *hdev)
 
467
{
 
468
        /* The second byte is 0xff instead of 0x9f (two reserved bits
 
469
         * disabled) since a Broadcom 1.2 dongle doesn't respond to the
 
470
         * command otherwise */
 
471
        u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
 
472
 
 
473
        /* Events for 1.2 and newer controllers */
 
474
        if (hdev->lmp_ver > 1) {
 
475
                events[4] |= 0x01; /* Flow Specification Complete */
 
476
                events[4] |= 0x02; /* Inquiry Result with RSSI */
 
477
                events[4] |= 0x04; /* Read Remote Extended Features Complete */
 
478
                events[5] |= 0x08; /* Synchronous Connection Complete */
 
479
                events[5] |= 0x10; /* Synchronous Connection Changed */
 
480
        }
 
481
 
 
482
        if (hdev->features[3] & LMP_RSSI_INQ)
 
483
                events[4] |= 0x04; /* Inquiry Result with RSSI */
 
484
 
 
485
        if (hdev->features[5] & LMP_SNIFF_SUBR)
 
486
                events[5] |= 0x20; /* Sniff Subrating */
 
487
 
 
488
        if (hdev->features[5] & LMP_PAUSE_ENC)
 
489
                events[5] |= 0x80; /* Encryption Key Refresh Complete */
 
490
 
 
491
        if (hdev->features[6] & LMP_EXT_INQ)
 
492
                events[5] |= 0x40; /* Extended Inquiry Result */
 
493
 
 
494
        if (hdev->features[6] & LMP_NO_FLUSH)
 
495
                events[7] |= 0x01; /* Enhanced Flush Complete */
 
496
 
 
497
        if (hdev->features[7] & LMP_LSTO)
 
498
                events[6] |= 0x80; /* Link Supervision Timeout Changed */
 
499
 
 
500
        if (hdev->features[6] & LMP_SIMPLE_PAIR) {
 
501
                events[6] |= 0x01;      /* IO Capability Request */
 
502
                events[6] |= 0x02;      /* IO Capability Response */
 
503
                events[6] |= 0x04;      /* User Confirmation Request */
 
504
                events[6] |= 0x08;      /* User Passkey Request */
 
505
                events[6] |= 0x10;      /* Remote OOB Data Request */
 
506
                events[6] |= 0x20;      /* Simple Pairing Complete */
 
507
                events[7] |= 0x04;      /* User Passkey Notification */
 
508
                events[7] |= 0x08;      /* Keypress Notification */
 
509
                events[7] |= 0x10;      /* Remote Host Supported
 
510
                                         * Features Notification */
 
511
        }
 
512
 
 
513
        if (hdev->features[4] & LMP_LE)
 
514
                events[7] |= 0x20;      /* LE Meta-Event */
 
515
 
 
516
        hci_send_cmd(hdev, HCI_OP_SET_EVENT_MASK, sizeof(events), events);
 
517
}
 
518
 
 
519
static void hci_setup(struct hci_dev *hdev)
 
520
{
 
521
        hci_setup_event_mask(hdev);
 
522
 
 
523
        if (hdev->lmp_ver > 1)
 
524
                hci_send_cmd(hdev, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
 
525
 
 
526
        if (hdev->features[6] & LMP_SIMPLE_PAIR) {
 
527
                u8 mode = 0x01;
 
528
                hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, sizeof(mode), &mode);
 
529
        }
 
530
 
 
531
        if (hdev->features[3] & LMP_RSSI_INQ)
 
532
                hci_setup_inquiry_mode(hdev);
 
533
 
 
534
        if (hdev->features[7] & LMP_INQ_TX_PWR)
 
535
                hci_send_cmd(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, 0, NULL);
 
536
}
 
537
 
 
538
static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
 
539
{
 
540
        struct hci_rp_read_local_version *rp = (void *) skb->data;
 
541
 
 
542
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
543
 
 
544
        if (rp->status)
 
545
                return;
 
546
 
 
547
        hdev->hci_ver = rp->hci_ver;
 
548
        hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
 
549
        hdev->lmp_ver = rp->lmp_ver;
 
550
        hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
 
551
        hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
 
552
 
 
553
        BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
 
554
                                        hdev->manufacturer,
 
555
                                        hdev->hci_ver, hdev->hci_rev);
 
556
 
 
557
        if (test_bit(HCI_INIT, &hdev->flags))
 
558
                hci_setup(hdev);
 
559
}
 
560
 
 
561
static void hci_setup_link_policy(struct hci_dev *hdev)
 
562
{
 
563
        u16 link_policy = 0;
 
564
 
 
565
        if (hdev->features[0] & LMP_RSWITCH)
 
566
                link_policy |= HCI_LP_RSWITCH;
 
567
        if (hdev->features[0] & LMP_HOLD)
 
568
                link_policy |= HCI_LP_HOLD;
 
569
        if (hdev->features[0] & LMP_SNIFF)
 
570
                link_policy |= HCI_LP_SNIFF;
 
571
        if (hdev->features[1] & LMP_PARK)
 
572
                link_policy |= HCI_LP_PARK;
 
573
 
 
574
        link_policy = cpu_to_le16(link_policy);
 
575
        hci_send_cmd(hdev, HCI_OP_WRITE_DEF_LINK_POLICY,
 
576
                                        sizeof(link_policy), &link_policy);
 
577
}
 
578
 
 
579
static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
 
580
{
 
581
        struct hci_rp_read_local_commands *rp = (void *) skb->data;
 
582
 
 
583
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
584
 
 
585
        if (rp->status)
 
586
                goto done;
 
587
 
 
588
        memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
 
589
 
 
590
        if (test_bit(HCI_INIT, &hdev->flags) && (hdev->commands[5] & 0x10))
 
591
                hci_setup_link_policy(hdev);
 
592
 
 
593
done:
 
594
        hci_req_complete(hdev, HCI_OP_READ_LOCAL_COMMANDS, rp->status);
 
595
}
 
596
 
 
597
static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
 
598
{
 
599
        struct hci_rp_read_local_features *rp = (void *) skb->data;
 
600
 
 
601
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
602
 
 
603
        if (rp->status)
 
604
                return;
 
605
 
 
606
        memcpy(hdev->features, rp->features, 8);
 
607
 
 
608
        /* Adjust default settings according to features
 
609
         * supported by device. */
 
610
 
 
611
        if (hdev->features[0] & LMP_3SLOT)
 
612
                hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
 
613
 
 
614
        if (hdev->features[0] & LMP_5SLOT)
 
615
                hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
 
616
 
 
617
        if (hdev->features[1] & LMP_HV2) {
 
618
                hdev->pkt_type  |= (HCI_HV2);
 
619
                hdev->esco_type |= (ESCO_HV2);
 
620
        }
 
621
 
 
622
        if (hdev->features[1] & LMP_HV3) {
 
623
                hdev->pkt_type  |= (HCI_HV3);
 
624
                hdev->esco_type |= (ESCO_HV3);
 
625
        }
 
626
 
 
627
        if (hdev->features[3] & LMP_ESCO)
 
628
                hdev->esco_type |= (ESCO_EV3);
 
629
 
 
630
        if (hdev->features[4] & LMP_EV4)
 
631
                hdev->esco_type |= (ESCO_EV4);
 
632
 
 
633
        if (hdev->features[4] & LMP_EV5)
 
634
                hdev->esco_type |= (ESCO_EV5);
 
635
 
 
636
        if (hdev->features[5] & LMP_EDR_ESCO_2M)
 
637
                hdev->esco_type |= (ESCO_2EV3);
 
638
 
 
639
        if (hdev->features[5] & LMP_EDR_ESCO_3M)
 
640
                hdev->esco_type |= (ESCO_3EV3);
 
641
 
 
642
        if (hdev->features[5] & LMP_EDR_3S_ESCO)
 
643
                hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
 
644
 
 
645
        BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
 
646
                                        hdev->features[0], hdev->features[1],
 
647
                                        hdev->features[2], hdev->features[3],
 
648
                                        hdev->features[4], hdev->features[5],
 
649
                                        hdev->features[6], hdev->features[7]);
 
650
}
 
651
 
 
652
static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
 
653
{
 
654
        struct hci_rp_read_buffer_size *rp = (void *) skb->data;
 
655
 
 
656
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
657
 
 
658
        if (rp->status)
 
659
                return;
 
660
 
 
661
        hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
 
662
        hdev->sco_mtu  = rp->sco_mtu;
 
663
        hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
 
664
        hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
 
665
 
 
666
        if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
 
667
                hdev->sco_mtu  = 64;
 
668
                hdev->sco_pkts = 8;
 
669
        }
 
670
 
 
671
        hdev->acl_cnt = hdev->acl_pkts;
 
672
        hdev->sco_cnt = hdev->sco_pkts;
 
673
 
 
674
        BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
 
675
                                        hdev->acl_mtu, hdev->acl_pkts,
 
676
                                        hdev->sco_mtu, hdev->sco_pkts);
 
677
}
 
678
 
 
679
static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
 
680
{
 
681
        struct hci_rp_read_bd_addr *rp = (void *) skb->data;
 
682
 
 
683
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
684
 
 
685
        if (!rp->status)
 
686
                bacpy(&hdev->bdaddr, &rp->bdaddr);
 
687
 
 
688
        hci_req_complete(hdev, HCI_OP_READ_BD_ADDR, rp->status);
 
689
}
 
690
 
 
691
static void hci_cc_write_ca_timeout(struct hci_dev *hdev, struct sk_buff *skb)
 
692
{
 
693
        __u8 status = *((__u8 *) skb->data);
 
694
 
 
695
        BT_DBG("%s status 0x%x", hdev->name, status);
 
696
 
 
697
        hci_req_complete(hdev, HCI_OP_WRITE_CA_TIMEOUT, status);
 
698
}
 
699
 
 
700
static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
 
701
                                                        struct sk_buff *skb)
 
702
{
 
703
        __u8 status = *((__u8 *) skb->data);
 
704
 
 
705
        BT_DBG("%s status 0x%x", hdev->name, status);
 
706
 
 
707
        hci_req_complete(hdev, HCI_OP_DELETE_STORED_LINK_KEY, status);
 
708
}
 
709
 
 
710
static void hci_cc_set_event_mask(struct hci_dev *hdev, struct sk_buff *skb)
 
711
{
 
712
        __u8 status = *((__u8 *) skb->data);
 
713
 
 
714
        BT_DBG("%s status 0x%x", hdev->name, status);
 
715
 
 
716
        hci_req_complete(hdev, HCI_OP_SET_EVENT_MASK, status);
 
717
}
 
718
 
 
719
static void hci_cc_write_inquiry_mode(struct hci_dev *hdev,
 
720
                                                        struct sk_buff *skb)
 
721
{
 
722
        __u8 status = *((__u8 *) skb->data);
 
723
 
 
724
        BT_DBG("%s status 0x%x", hdev->name, status);
 
725
 
 
726
        hci_req_complete(hdev, HCI_OP_WRITE_INQUIRY_MODE, status);
 
727
}
 
728
 
 
729
static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
 
730
                                                        struct sk_buff *skb)
 
731
{
 
732
        __u8 status = *((__u8 *) skb->data);
 
733
 
 
734
        BT_DBG("%s status 0x%x", hdev->name, status);
 
735
 
 
736
        hci_req_complete(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, status);
 
737
}
 
738
 
 
739
static void hci_cc_set_event_flt(struct hci_dev *hdev, struct sk_buff *skb)
 
740
{
 
741
        __u8 status = *((__u8 *) skb->data);
 
742
 
 
743
        BT_DBG("%s status 0x%x", hdev->name, status);
 
744
 
 
745
        hci_req_complete(hdev, HCI_OP_SET_EVENT_FLT, status);
 
746
}
 
747
 
 
748
static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
 
749
{
 
750
        struct hci_rp_pin_code_reply *rp = (void *) skb->data;
 
751
        struct hci_cp_pin_code_reply *cp;
 
752
        struct hci_conn *conn;
 
753
 
 
754
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
755
 
 
756
        if (test_bit(HCI_MGMT, &hdev->flags))
 
757
                mgmt_pin_code_reply_complete(hdev->id, &rp->bdaddr, rp->status);
 
758
 
 
759
        if (rp->status != 0)
 
760
                return;
 
761
 
 
762
        cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
 
763
        if (!cp)
 
764
                return;
 
765
 
 
766
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
 
767
        if (conn)
 
768
                conn->pin_length = cp->pin_len;
 
769
}
 
770
 
 
771
static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
 
772
{
 
773
        struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
 
774
 
 
775
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
776
 
 
777
        if (test_bit(HCI_MGMT, &hdev->flags))
 
778
                mgmt_pin_code_neg_reply_complete(hdev->id, &rp->bdaddr,
 
779
                                                                rp->status);
 
780
}
 
781
static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
 
782
                                       struct sk_buff *skb)
 
783
{
 
784
        struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
 
785
 
 
786
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
787
 
 
788
        if (rp->status)
 
789
                return;
 
790
 
 
791
        hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
 
792
        hdev->le_pkts = rp->le_max_pkt;
 
793
 
 
794
        hdev->le_cnt = hdev->le_pkts;
 
795
 
 
796
        BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
 
797
 
 
798
        hci_req_complete(hdev, HCI_OP_LE_READ_BUFFER_SIZE, rp->status);
 
799
}
 
800
 
 
801
static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
 
802
{
 
803
        struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
 
804
 
 
805
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
806
 
 
807
        if (test_bit(HCI_MGMT, &hdev->flags))
 
808
                mgmt_user_confirm_reply_complete(hdev->id, &rp->bdaddr,
 
809
                                                                rp->status);
 
810
}
 
811
 
 
812
static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
 
813
                                                        struct sk_buff *skb)
 
814
{
 
815
        struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
 
816
 
 
817
        BT_DBG("%s status 0x%x", hdev->name, rp->status);
 
818
 
 
819
        if (test_bit(HCI_MGMT, &hdev->flags))
 
820
                mgmt_user_confirm_neg_reply_complete(hdev->id, &rp->bdaddr,
 
821
                                                                rp->status);
 
822
}
 
823
 
 
824
static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
 
825
{
 
826
        BT_DBG("%s status 0x%x", hdev->name, status);
 
827
 
 
828
        if (status) {
 
829
                hci_req_complete(hdev, HCI_OP_INQUIRY, status);
 
830
 
 
831
                hci_conn_check_pending(hdev);
 
832
        } else
 
833
                set_bit(HCI_INQUIRY, &hdev->flags);
 
834
}
 
835
 
 
836
static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
 
837
{
 
838
        struct hci_cp_create_conn *cp;
 
839
        struct hci_conn *conn;
 
840
 
 
841
        BT_DBG("%s status 0x%x", hdev->name, status);
 
842
 
 
843
        cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
 
844
        if (!cp)
 
845
                return;
 
846
 
 
847
        hci_dev_lock(hdev);
 
848
 
 
849
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
 
850
 
 
851
        BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
 
852
 
 
853
        if (status) {
 
854
                if (conn && conn->state == BT_CONNECT) {
 
855
                        if (status != 0x0c || conn->attempt > 2) {
 
856
                                conn->state = BT_CLOSED;
 
857
                                hci_proto_connect_cfm(conn, status);
 
858
                                hci_conn_del(conn);
 
859
                        } else
 
860
                                conn->state = BT_CONNECT2;
 
861
                }
 
862
        } else {
 
863
                if (!conn) {
 
864
                        conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
 
865
                        if (conn) {
 
866
                                conn->out = 1;
 
867
                                conn->link_mode |= HCI_LM_MASTER;
 
868
                        } else
 
869
                                BT_ERR("No memory for new connection");
 
870
                }
 
871
        }
 
872
 
 
873
        hci_dev_unlock(hdev);
 
874
}
 
875
 
 
876
static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
 
877
{
 
878
        struct hci_cp_add_sco *cp;
 
879
        struct hci_conn *acl, *sco;
 
880
        __u16 handle;
 
881
 
 
882
        BT_DBG("%s status 0x%x", hdev->name, status);
 
883
 
 
884
        if (!status)
 
885
                return;
 
886
 
 
887
        cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
 
888
        if (!cp)
 
889
                return;
 
890
 
 
891
        handle = __le16_to_cpu(cp->handle);
 
892
 
 
893
        BT_DBG("%s handle %d", hdev->name, handle);
 
894
 
 
895
        hci_dev_lock(hdev);
 
896
 
 
897
        acl = hci_conn_hash_lookup_handle(hdev, handle);
 
898
        if (acl) {
 
899
                sco = acl->link;
 
900
                if (sco) {
 
901
                        sco->state = BT_CLOSED;
 
902
 
 
903
                        hci_proto_connect_cfm(sco, status);
 
904
                        hci_conn_del(sco);
 
905
                }
 
906
        }
 
907
 
 
908
        hci_dev_unlock(hdev);
 
909
}
 
910
 
 
911
static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
 
912
{
 
913
        struct hci_cp_auth_requested *cp;
 
914
        struct hci_conn *conn;
 
915
 
 
916
        BT_DBG("%s status 0x%x", hdev->name, status);
 
917
 
 
918
        if (!status)
 
919
                return;
 
920
 
 
921
        cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
 
922
        if (!cp)
 
923
                return;
 
924
 
 
925
        hci_dev_lock(hdev);
 
926
 
 
927
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
 
928
        if (conn) {
 
929
                if (conn->state == BT_CONFIG) {
 
930
                        hci_proto_connect_cfm(conn, status);
 
931
                        hci_conn_put(conn);
 
932
                }
 
933
        }
 
934
 
 
935
        hci_dev_unlock(hdev);
 
936
}
 
937
 
 
938
static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
 
939
{
 
940
        struct hci_cp_set_conn_encrypt *cp;
 
941
        struct hci_conn *conn;
 
942
 
 
943
        BT_DBG("%s status 0x%x", hdev->name, status);
 
944
 
 
945
        if (!status)
 
946
                return;
 
947
 
 
948
        cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
 
949
        if (!cp)
 
950
                return;
 
951
 
 
952
        hci_dev_lock(hdev);
 
953
 
 
954
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
 
955
        if (conn) {
 
956
                if (conn->state == BT_CONFIG) {
 
957
                        hci_proto_connect_cfm(conn, status);
 
958
                        hci_conn_put(conn);
 
959
                }
 
960
        }
 
961
 
 
962
        hci_dev_unlock(hdev);
 
963
}
 
964
 
 
965
static int hci_outgoing_auth_needed(struct hci_dev *hdev,
 
966
                                                        struct hci_conn *conn)
 
967
{
 
968
        if (conn->state != BT_CONFIG || !conn->out)
 
969
                return 0;
 
970
 
 
971
        if (conn->pending_sec_level == BT_SECURITY_SDP)
 
972
                return 0;
 
973
 
 
974
        /* Only request authentication for SSP connections or non-SSP
 
975
         * devices with sec_level HIGH */
 
976
        if (!(hdev->ssp_mode > 0 && conn->ssp_mode > 0) &&
 
977
                                conn->pending_sec_level != BT_SECURITY_HIGH)
 
978
                return 0;
 
979
 
 
980
        return 1;
 
981
}
 
982
 
 
983
static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
 
984
{
 
985
        struct hci_cp_remote_name_req *cp;
 
986
        struct hci_conn *conn;
 
987
 
 
988
        BT_DBG("%s status 0x%x", hdev->name, status);
 
989
 
 
990
        /* If successful wait for the name req complete event before
 
991
         * checking for the need to do authentication */
 
992
        if (!status)
 
993
                return;
 
994
 
 
995
        cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
 
996
        if (!cp)
 
997
                return;
 
998
 
 
999
        hci_dev_lock(hdev);
 
1000
 
 
1001
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
 
1002
        if (conn && hci_outgoing_auth_needed(hdev, conn)) {
 
1003
                struct hci_cp_auth_requested cp;
 
1004
                cp.handle = __cpu_to_le16(conn->handle);
 
1005
                hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
 
1006
        }
 
1007
 
 
1008
        hci_dev_unlock(hdev);
 
1009
}
 
1010
 
 
1011
static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
 
1012
{
 
1013
        struct hci_cp_read_remote_features *cp;
 
1014
        struct hci_conn *conn;
 
1015
 
 
1016
        BT_DBG("%s status 0x%x", hdev->name, status);
 
1017
 
 
1018
        if (!status)
 
1019
                return;
 
1020
 
 
1021
        cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
 
1022
        if (!cp)
 
1023
                return;
 
1024
 
 
1025
        hci_dev_lock(hdev);
 
1026
 
 
1027
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
 
1028
        if (conn) {
 
1029
                if (conn->state == BT_CONFIG) {
 
1030
                        hci_proto_connect_cfm(conn, status);
 
1031
                        hci_conn_put(conn);
 
1032
                }
 
1033
        }
 
1034
 
 
1035
        hci_dev_unlock(hdev);
 
1036
}
 
1037
 
 
1038
static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
 
1039
{
 
1040
        struct hci_cp_read_remote_ext_features *cp;
 
1041
        struct hci_conn *conn;
 
1042
 
 
1043
        BT_DBG("%s status 0x%x", hdev->name, status);
 
1044
 
 
1045
        if (!status)
 
1046
                return;
 
1047
 
 
1048
        cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
 
1049
        if (!cp)
 
1050
                return;
 
1051
 
 
1052
        hci_dev_lock(hdev);
 
1053
 
 
1054
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
 
1055
        if (conn) {
 
1056
                if (conn->state == BT_CONFIG) {
 
1057
                        hci_proto_connect_cfm(conn, status);
 
1058
                        hci_conn_put(conn);
 
1059
                }
 
1060
        }
 
1061
 
 
1062
        hci_dev_unlock(hdev);
 
1063
}
 
1064
 
 
1065
static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
 
1066
{
 
1067
        struct hci_cp_setup_sync_conn *cp;
 
1068
        struct hci_conn *acl, *sco;
 
1069
        __u16 handle;
 
1070
 
 
1071
        BT_DBG("%s status 0x%x", hdev->name, status);
 
1072
 
 
1073
        if (!status)
 
1074
                return;
 
1075
 
 
1076
        cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
 
1077
        if (!cp)
 
1078
                return;
 
1079
 
 
1080
        handle = __le16_to_cpu(cp->handle);
 
1081
 
 
1082
        BT_DBG("%s handle %d", hdev->name, handle);
 
1083
 
 
1084
        hci_dev_lock(hdev);
 
1085
 
 
1086
        acl = hci_conn_hash_lookup_handle(hdev, handle);
 
1087
        if (acl) {
 
1088
                sco = acl->link;
 
1089
                if (sco) {
 
1090
                        sco->state = BT_CLOSED;
 
1091
 
 
1092
                        hci_proto_connect_cfm(sco, status);
 
1093
                        hci_conn_del(sco);
 
1094
                }
 
1095
        }
 
1096
 
 
1097
        hci_dev_unlock(hdev);
 
1098
}
 
1099
 
 
1100
static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
 
1101
{
 
1102
        struct hci_cp_sniff_mode *cp;
 
1103
        struct hci_conn *conn;
 
1104
 
 
1105
        BT_DBG("%s status 0x%x", hdev->name, status);
 
1106
 
 
1107
        if (!status)
 
1108
                return;
 
1109
 
 
1110
        cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
 
1111
        if (!cp)
 
1112
                return;
 
1113
 
 
1114
        hci_dev_lock(hdev);
 
1115
 
 
1116
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
 
1117
        if (conn) {
 
1118
                clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
 
1119
 
 
1120
                if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
 
1121
                        hci_sco_setup(conn, status);
 
1122
        }
 
1123
 
 
1124
        hci_dev_unlock(hdev);
 
1125
}
 
1126
 
 
1127
static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
 
1128
{
 
1129
        struct hci_cp_exit_sniff_mode *cp;
 
1130
        struct hci_conn *conn;
 
1131
 
 
1132
        BT_DBG("%s status 0x%x", hdev->name, status);
 
1133
 
 
1134
        if (!status)
 
1135
                return;
 
1136
 
 
1137
        cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
 
1138
        if (!cp)
 
1139
                return;
 
1140
 
 
1141
        hci_dev_lock(hdev);
 
1142
 
 
1143
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
 
1144
        if (conn) {
 
1145
                clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
 
1146
 
 
1147
                if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
 
1148
                        hci_sco_setup(conn, status);
 
1149
        }
 
1150
 
 
1151
        hci_dev_unlock(hdev);
 
1152
}
 
1153
 
 
1154
static void hci_cs_le_create_conn(struct hci_dev *hdev, __u8 status)
 
1155
{
 
1156
        struct hci_cp_le_create_conn *cp;
 
1157
        struct hci_conn *conn;
 
1158
 
 
1159
        BT_DBG("%s status 0x%x", hdev->name, status);
 
1160
 
 
1161
        cp = hci_sent_cmd_data(hdev, HCI_OP_LE_CREATE_CONN);
 
1162
        if (!cp)
 
1163
                return;
 
1164
 
 
1165
        hci_dev_lock(hdev);
 
1166
 
 
1167
        conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->peer_addr);
 
1168
 
 
1169
        BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->peer_addr),
 
1170
                conn);
 
1171
 
 
1172
        if (status) {
 
1173
                if (conn && conn->state == BT_CONNECT) {
 
1174
                        conn->state = BT_CLOSED;
 
1175
                        hci_proto_connect_cfm(conn, status);
 
1176
                        hci_conn_del(conn);
 
1177
                }
 
1178
        } else {
 
1179
                if (!conn) {
 
1180
                        conn = hci_conn_add(hdev, LE_LINK, &cp->peer_addr);
 
1181
                        if (conn)
 
1182
                                conn->out = 1;
 
1183
                        else
 
1184
                                BT_ERR("No memory for new connection");
 
1185
                }
 
1186
        }
 
1187
 
 
1188
        hci_dev_unlock(hdev);
 
1189
}
 
1190
 
 
1191
static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1192
{
 
1193
        __u8 status = *((__u8 *) skb->data);
 
1194
 
 
1195
        BT_DBG("%s status %d", hdev->name, status);
 
1196
 
 
1197
        clear_bit(HCI_INQUIRY, &hdev->flags);
 
1198
 
 
1199
        hci_req_complete(hdev, HCI_OP_INQUIRY, status);
 
1200
 
 
1201
        hci_conn_check_pending(hdev);
 
1202
}
 
1203
 
 
1204
static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1205
{
 
1206
        struct inquiry_data data;
 
1207
        struct inquiry_info *info = (void *) (skb->data + 1);
 
1208
        int num_rsp = *((__u8 *) skb->data);
 
1209
 
 
1210
        BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
 
1211
 
 
1212
        if (!num_rsp)
 
1213
                return;
 
1214
 
 
1215
        hci_dev_lock(hdev);
 
1216
 
 
1217
        for (; num_rsp; num_rsp--) {
 
1218
                bacpy(&data.bdaddr, &info->bdaddr);
 
1219
                data.pscan_rep_mode     = info->pscan_rep_mode;
 
1220
                data.pscan_period_mode  = info->pscan_period_mode;
 
1221
                data.pscan_mode         = info->pscan_mode;
 
1222
                memcpy(data.dev_class, info->dev_class, 3);
 
1223
                data.clock_offset       = info->clock_offset;
 
1224
                data.rssi               = 0x00;
 
1225
                data.ssp_mode           = 0x00;
 
1226
                info++;
 
1227
                hci_inquiry_cache_update(hdev, &data);
 
1228
        }
 
1229
 
 
1230
        hci_dev_unlock(hdev);
 
1231
}
 
1232
 
 
1233
static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1234
{
 
1235
        struct hci_ev_conn_complete *ev = (void *) skb->data;
 
1236
        struct hci_conn *conn;
 
1237
 
 
1238
        BT_DBG("%s", hdev->name);
 
1239
 
 
1240
        hci_dev_lock(hdev);
 
1241
 
 
1242
        conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
 
1243
        if (!conn) {
 
1244
                if (ev->link_type != SCO_LINK)
 
1245
                        goto unlock;
 
1246
 
 
1247
                conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
 
1248
                if (!conn)
 
1249
                        goto unlock;
 
1250
 
 
1251
                conn->type = SCO_LINK;
 
1252
        }
 
1253
 
 
1254
        if (!ev->status) {
 
1255
                conn->handle = __le16_to_cpu(ev->handle);
 
1256
 
 
1257
                if (conn->type == ACL_LINK) {
 
1258
                        conn->state = BT_CONFIG;
 
1259
                        hci_conn_hold(conn);
 
1260
                        conn->disc_timeout = HCI_DISCONN_TIMEOUT;
 
1261
                        mgmt_connected(hdev->id, &ev->bdaddr);
 
1262
                } else
 
1263
                        conn->state = BT_CONNECTED;
 
1264
 
 
1265
                hci_conn_hold_device(conn);
 
1266
                hci_conn_add_sysfs(conn);
 
1267
 
 
1268
                if (test_bit(HCI_AUTH, &hdev->flags))
 
1269
                        conn->link_mode |= HCI_LM_AUTH;
 
1270
 
 
1271
                if (test_bit(HCI_ENCRYPT, &hdev->flags))
 
1272
                        conn->link_mode |= HCI_LM_ENCRYPT;
 
1273
 
 
1274
                /* Get remote features */
 
1275
                if (conn->type == ACL_LINK) {
 
1276
                        struct hci_cp_read_remote_features cp;
 
1277
                        cp.handle = ev->handle;
 
1278
                        hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
 
1279
                                                        sizeof(cp), &cp);
 
1280
                }
 
1281
 
 
1282
                /* Set packet type for incoming connection */
 
1283
                if (!conn->out && hdev->hci_ver < 3) {
 
1284
                        struct hci_cp_change_conn_ptype cp;
 
1285
                        cp.handle = ev->handle;
 
1286
                        cp.pkt_type = cpu_to_le16(conn->pkt_type);
 
1287
                        hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE,
 
1288
                                                        sizeof(cp), &cp);
 
1289
                }
 
1290
        } else {
 
1291
                conn->state = BT_CLOSED;
 
1292
                if (conn->type == ACL_LINK)
 
1293
                        mgmt_connect_failed(hdev->id, &ev->bdaddr, ev->status);
 
1294
        }
 
1295
 
 
1296
        if (conn->type == ACL_LINK)
 
1297
                hci_sco_setup(conn, ev->status);
 
1298
 
 
1299
        if (ev->status) {
 
1300
                hci_proto_connect_cfm(conn, ev->status);
 
1301
                hci_conn_del(conn);
 
1302
        } else if (ev->link_type != ACL_LINK)
 
1303
                hci_proto_connect_cfm(conn, ev->status);
 
1304
 
 
1305
unlock:
 
1306
        hci_dev_unlock(hdev);
 
1307
 
 
1308
        hci_conn_check_pending(hdev);
 
1309
}
 
1310
 
 
1311
static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1312
{
 
1313
        struct hci_ev_conn_request *ev = (void *) skb->data;
 
1314
        int mask = hdev->link_mode;
 
1315
 
 
1316
        BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
 
1317
                                        batostr(&ev->bdaddr), ev->link_type);
 
1318
 
 
1319
        mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
 
1320
 
 
1321
        if ((mask & HCI_LM_ACCEPT) &&
 
1322
                        !hci_blacklist_lookup(hdev, &ev->bdaddr)) {
 
1323
                /* Connection accepted */
 
1324
                struct inquiry_entry *ie;
 
1325
                struct hci_conn *conn;
 
1326
 
 
1327
                hci_dev_lock(hdev);
 
1328
 
 
1329
                ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
 
1330
                if (ie)
 
1331
                        memcpy(ie->data.dev_class, ev->dev_class, 3);
 
1332
 
 
1333
                conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
 
1334
                if (!conn) {
 
1335
                        conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr);
 
1336
                        if (!conn) {
 
1337
                                BT_ERR("No memory for new connection");
 
1338
                                hci_dev_unlock(hdev);
 
1339
                                return;
 
1340
                        }
 
1341
                }
 
1342
 
 
1343
                memcpy(conn->dev_class, ev->dev_class, 3);
 
1344
                conn->state = BT_CONNECT;
 
1345
 
 
1346
                hci_dev_unlock(hdev);
 
1347
 
 
1348
                if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) {
 
1349
                        struct hci_cp_accept_conn_req cp;
 
1350
 
 
1351
                        bacpy(&cp.bdaddr, &ev->bdaddr);
 
1352
 
 
1353
                        if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
 
1354
                                cp.role = 0x00; /* Become master */
 
1355
                        else
 
1356
                                cp.role = 0x01; /* Remain slave */
 
1357
 
 
1358
                        hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ,
 
1359
                                                        sizeof(cp), &cp);
 
1360
                } else {
 
1361
                        struct hci_cp_accept_sync_conn_req cp;
 
1362
 
 
1363
                        bacpy(&cp.bdaddr, &ev->bdaddr);
 
1364
                        cp.pkt_type = cpu_to_le16(conn->pkt_type);
 
1365
 
 
1366
                        cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
 
1367
                        cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
 
1368
                        cp.max_latency    = cpu_to_le16(0xffff);
 
1369
                        cp.content_format = cpu_to_le16(hdev->voice_setting);
 
1370
                        cp.retrans_effort = 0xff;
 
1371
 
 
1372
                        hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
 
1373
                                                        sizeof(cp), &cp);
 
1374
                }
 
1375
        } else {
 
1376
                /* Connection rejected */
 
1377
                struct hci_cp_reject_conn_req cp;
 
1378
 
 
1379
                bacpy(&cp.bdaddr, &ev->bdaddr);
 
1380
                cp.reason = 0x0f;
 
1381
                hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
 
1382
        }
 
1383
}
 
1384
 
 
1385
static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1386
{
 
1387
        struct hci_ev_disconn_complete *ev = (void *) skb->data;
 
1388
        struct hci_conn *conn;
 
1389
 
 
1390
        BT_DBG("%s status %d", hdev->name, ev->status);
 
1391
 
 
1392
        if (ev->status) {
 
1393
                mgmt_disconnect_failed(hdev->id);
 
1394
                return;
 
1395
        }
 
1396
 
 
1397
        hci_dev_lock(hdev);
 
1398
 
 
1399
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
 
1400
        if (!conn)
 
1401
                goto unlock;
 
1402
 
 
1403
        conn->state = BT_CLOSED;
 
1404
 
 
1405
        if (conn->type == ACL_LINK)
 
1406
                mgmt_disconnected(hdev->id, &conn->dst);
 
1407
 
 
1408
        hci_proto_disconn_cfm(conn, ev->reason);
 
1409
        hci_conn_del(conn);
 
1410
 
 
1411
unlock:
 
1412
        hci_dev_unlock(hdev);
 
1413
}
 
1414
 
 
1415
static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1416
{
 
1417
        struct hci_ev_auth_complete *ev = (void *) skb->data;
 
1418
        struct hci_conn *conn;
 
1419
 
 
1420
        BT_DBG("%s status %d", hdev->name, ev->status);
 
1421
 
 
1422
        hci_dev_lock(hdev);
 
1423
 
 
1424
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
 
1425
        if (conn) {
 
1426
                if (!ev->status) {
 
1427
                        conn->link_mode |= HCI_LM_AUTH;
 
1428
                        conn->sec_level = conn->pending_sec_level;
 
1429
                } else {
 
1430
                        mgmt_auth_failed(hdev->id, &conn->dst, ev->status);
 
1431
                        conn->sec_level = BT_SECURITY_LOW;
 
1432
                }
 
1433
 
 
1434
                clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
 
1435
 
 
1436
                if (conn->state == BT_CONFIG) {
 
1437
                        if (!ev->status && hdev->ssp_mode > 0 &&
 
1438
                                                        conn->ssp_mode > 0) {
 
1439
                                struct hci_cp_set_conn_encrypt cp;
 
1440
                                cp.handle  = ev->handle;
 
1441
                                cp.encrypt = 0x01;
 
1442
                                hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
 
1443
                                                        sizeof(cp), &cp);
 
1444
                        } else {
 
1445
                                conn->state = BT_CONNECTED;
 
1446
                                hci_proto_connect_cfm(conn, ev->status);
 
1447
                                hci_conn_put(conn);
 
1448
                        }
 
1449
                } else {
 
1450
                        hci_auth_cfm(conn, ev->status);
 
1451
 
 
1452
                        hci_conn_hold(conn);
 
1453
                        conn->disc_timeout = HCI_DISCONN_TIMEOUT;
 
1454
                        hci_conn_put(conn);
 
1455
                }
 
1456
 
 
1457
                if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
 
1458
                        if (!ev->status) {
 
1459
                                struct hci_cp_set_conn_encrypt cp;
 
1460
                                cp.handle  = ev->handle;
 
1461
                                cp.encrypt = 0x01;
 
1462
                                hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
 
1463
                                                        sizeof(cp), &cp);
 
1464
                        } else {
 
1465
                                clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
 
1466
                                hci_encrypt_cfm(conn, ev->status, 0x00);
 
1467
                        }
 
1468
                }
 
1469
        }
 
1470
 
 
1471
        hci_dev_unlock(hdev);
 
1472
}
 
1473
 
 
1474
static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1475
{
 
1476
        struct hci_ev_remote_name *ev = (void *) skb->data;
 
1477
        struct hci_conn *conn;
 
1478
 
 
1479
        BT_DBG("%s", hdev->name);
 
1480
 
 
1481
        hci_conn_check_pending(hdev);
 
1482
 
 
1483
        hci_dev_lock(hdev);
 
1484
 
 
1485
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
 
1486
        if (conn && hci_outgoing_auth_needed(hdev, conn)) {
 
1487
                struct hci_cp_auth_requested cp;
 
1488
                cp.handle = __cpu_to_le16(conn->handle);
 
1489
                hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
 
1490
        }
 
1491
 
 
1492
        hci_dev_unlock(hdev);
 
1493
}
 
1494
 
 
1495
static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1496
{
 
1497
        struct hci_ev_encrypt_change *ev = (void *) skb->data;
 
1498
        struct hci_conn *conn;
 
1499
 
 
1500
        BT_DBG("%s status %d", hdev->name, ev->status);
 
1501
 
 
1502
        hci_dev_lock(hdev);
 
1503
 
 
1504
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
 
1505
        if (conn) {
 
1506
                if (!ev->status) {
 
1507
                        if (ev->encrypt) {
 
1508
                                /* Encryption implies authentication */
 
1509
                                conn->link_mode |= HCI_LM_AUTH;
 
1510
                                conn->link_mode |= HCI_LM_ENCRYPT;
 
1511
                        } else
 
1512
                                conn->link_mode &= ~HCI_LM_ENCRYPT;
 
1513
                }
 
1514
 
 
1515
                clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
 
1516
 
 
1517
                if (conn->state == BT_CONFIG) {
 
1518
                        if (!ev->status)
 
1519
                                conn->state = BT_CONNECTED;
 
1520
 
 
1521
                        hci_proto_connect_cfm(conn, ev->status);
 
1522
                        hci_conn_put(conn);
 
1523
                } else
 
1524
                        hci_encrypt_cfm(conn, ev->status, ev->encrypt);
 
1525
        }
 
1526
 
 
1527
        hci_dev_unlock(hdev);
 
1528
}
 
1529
 
 
1530
static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1531
{
 
1532
        struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
 
1533
        struct hci_conn *conn;
 
1534
 
 
1535
        BT_DBG("%s status %d", hdev->name, ev->status);
 
1536
 
 
1537
        hci_dev_lock(hdev);
 
1538
 
 
1539
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
 
1540
        if (conn) {
 
1541
                if (!ev->status)
 
1542
                        conn->link_mode |= HCI_LM_SECURE;
 
1543
 
 
1544
                clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
 
1545
 
 
1546
                hci_key_change_cfm(conn, ev->status);
 
1547
        }
 
1548
 
 
1549
        hci_dev_unlock(hdev);
 
1550
}
 
1551
 
 
1552
static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1553
{
 
1554
        struct hci_ev_remote_features *ev = (void *) skb->data;
 
1555
        struct hci_conn *conn;
 
1556
 
 
1557
        BT_DBG("%s status %d", hdev->name, ev->status);
 
1558
 
 
1559
        hci_dev_lock(hdev);
 
1560
 
 
1561
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
 
1562
        if (!conn)
 
1563
                goto unlock;
 
1564
 
 
1565
        if (!ev->status)
 
1566
                memcpy(conn->features, ev->features, 8);
 
1567
 
 
1568
        if (conn->state != BT_CONFIG)
 
1569
                goto unlock;
 
1570
 
 
1571
        if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
 
1572
                struct hci_cp_read_remote_ext_features cp;
 
1573
                cp.handle = ev->handle;
 
1574
                cp.page = 0x01;
 
1575
                hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
 
1576
                                                        sizeof(cp), &cp);
 
1577
                goto unlock;
 
1578
        }
 
1579
 
 
1580
        if (!ev->status) {
 
1581
                struct hci_cp_remote_name_req cp;
 
1582
                memset(&cp, 0, sizeof(cp));
 
1583
                bacpy(&cp.bdaddr, &conn->dst);
 
1584
                cp.pscan_rep_mode = 0x02;
 
1585
                hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
 
1586
        }
 
1587
 
 
1588
        if (!hci_outgoing_auth_needed(hdev, conn)) {
 
1589
                conn->state = BT_CONNECTED;
 
1590
                hci_proto_connect_cfm(conn, ev->status);
 
1591
                hci_conn_put(conn);
 
1592
        }
 
1593
 
 
1594
unlock:
 
1595
        hci_dev_unlock(hdev);
 
1596
}
 
1597
 
 
1598
static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1599
{
 
1600
        BT_DBG("%s", hdev->name);
 
1601
}
 
1602
 
 
1603
static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1604
{
 
1605
        BT_DBG("%s", hdev->name);
 
1606
}
 
1607
 
 
1608
static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1609
{
 
1610
        struct hci_ev_cmd_complete *ev = (void *) skb->data;
 
1611
        __u16 opcode;
 
1612
 
 
1613
        skb_pull(skb, sizeof(*ev));
 
1614
 
 
1615
        opcode = __le16_to_cpu(ev->opcode);
 
1616
 
 
1617
        switch (opcode) {
 
1618
        case HCI_OP_INQUIRY_CANCEL:
 
1619
                hci_cc_inquiry_cancel(hdev, skb);
 
1620
                break;
 
1621
 
 
1622
        case HCI_OP_EXIT_PERIODIC_INQ:
 
1623
                hci_cc_exit_periodic_inq(hdev, skb);
 
1624
                break;
 
1625
 
 
1626
        case HCI_OP_REMOTE_NAME_REQ_CANCEL:
 
1627
                hci_cc_remote_name_req_cancel(hdev, skb);
 
1628
                break;
 
1629
 
 
1630
        case HCI_OP_ROLE_DISCOVERY:
 
1631
                hci_cc_role_discovery(hdev, skb);
 
1632
                break;
 
1633
 
 
1634
        case HCI_OP_READ_LINK_POLICY:
 
1635
                hci_cc_read_link_policy(hdev, skb);
 
1636
                break;
 
1637
 
 
1638
        case HCI_OP_WRITE_LINK_POLICY:
 
1639
                hci_cc_write_link_policy(hdev, skb);
 
1640
                break;
 
1641
 
 
1642
        case HCI_OP_READ_DEF_LINK_POLICY:
 
1643
                hci_cc_read_def_link_policy(hdev, skb);
 
1644
                break;
 
1645
 
 
1646
        case HCI_OP_WRITE_DEF_LINK_POLICY:
 
1647
                hci_cc_write_def_link_policy(hdev, skb);
 
1648
                break;
 
1649
 
 
1650
        case HCI_OP_RESET:
 
1651
                hci_cc_reset(hdev, skb);
 
1652
                break;
 
1653
 
 
1654
        case HCI_OP_WRITE_LOCAL_NAME:
 
1655
                hci_cc_write_local_name(hdev, skb);
 
1656
                break;
 
1657
 
 
1658
        case HCI_OP_READ_LOCAL_NAME:
 
1659
                hci_cc_read_local_name(hdev, skb);
 
1660
                break;
 
1661
 
 
1662
        case HCI_OP_WRITE_AUTH_ENABLE:
 
1663
                hci_cc_write_auth_enable(hdev, skb);
 
1664
                break;
 
1665
 
 
1666
        case HCI_OP_WRITE_ENCRYPT_MODE:
 
1667
                hci_cc_write_encrypt_mode(hdev, skb);
 
1668
                break;
 
1669
 
 
1670
        case HCI_OP_WRITE_SCAN_ENABLE:
 
1671
                hci_cc_write_scan_enable(hdev, skb);
 
1672
                break;
 
1673
 
 
1674
        case HCI_OP_READ_CLASS_OF_DEV:
 
1675
                hci_cc_read_class_of_dev(hdev, skb);
 
1676
                break;
 
1677
 
 
1678
        case HCI_OP_WRITE_CLASS_OF_DEV:
 
1679
                hci_cc_write_class_of_dev(hdev, skb);
 
1680
                break;
 
1681
 
 
1682
        case HCI_OP_READ_VOICE_SETTING:
 
1683
                hci_cc_read_voice_setting(hdev, skb);
 
1684
                break;
 
1685
 
 
1686
        case HCI_OP_WRITE_VOICE_SETTING:
 
1687
                hci_cc_write_voice_setting(hdev, skb);
 
1688
                break;
 
1689
 
 
1690
        case HCI_OP_HOST_BUFFER_SIZE:
 
1691
                hci_cc_host_buffer_size(hdev, skb);
 
1692
                break;
 
1693
 
 
1694
        case HCI_OP_READ_SSP_MODE:
 
1695
                hci_cc_read_ssp_mode(hdev, skb);
 
1696
                break;
 
1697
 
 
1698
        case HCI_OP_WRITE_SSP_MODE:
 
1699
                hci_cc_write_ssp_mode(hdev, skb);
 
1700
                break;
 
1701
 
 
1702
        case HCI_OP_READ_LOCAL_VERSION:
 
1703
                hci_cc_read_local_version(hdev, skb);
 
1704
                break;
 
1705
 
 
1706
        case HCI_OP_READ_LOCAL_COMMANDS:
 
1707
                hci_cc_read_local_commands(hdev, skb);
 
1708
                break;
 
1709
 
 
1710
        case HCI_OP_READ_LOCAL_FEATURES:
 
1711
                hci_cc_read_local_features(hdev, skb);
 
1712
                break;
 
1713
 
 
1714
        case HCI_OP_READ_BUFFER_SIZE:
 
1715
                hci_cc_read_buffer_size(hdev, skb);
 
1716
                break;
 
1717
 
 
1718
        case HCI_OP_READ_BD_ADDR:
 
1719
                hci_cc_read_bd_addr(hdev, skb);
 
1720
                break;
 
1721
 
 
1722
        case HCI_OP_WRITE_CA_TIMEOUT:
 
1723
                hci_cc_write_ca_timeout(hdev, skb);
 
1724
                break;
 
1725
 
 
1726
        case HCI_OP_DELETE_STORED_LINK_KEY:
 
1727
                hci_cc_delete_stored_link_key(hdev, skb);
 
1728
                break;
 
1729
 
 
1730
        case HCI_OP_SET_EVENT_MASK:
 
1731
                hci_cc_set_event_mask(hdev, skb);
 
1732
                break;
 
1733
 
 
1734
        case HCI_OP_WRITE_INQUIRY_MODE:
 
1735
                hci_cc_write_inquiry_mode(hdev, skb);
 
1736
                break;
 
1737
 
 
1738
        case HCI_OP_READ_INQ_RSP_TX_POWER:
 
1739
                hci_cc_read_inq_rsp_tx_power(hdev, skb);
 
1740
                break;
 
1741
 
 
1742
        case HCI_OP_SET_EVENT_FLT:
 
1743
                hci_cc_set_event_flt(hdev, skb);
 
1744
                break;
 
1745
 
 
1746
        case HCI_OP_PIN_CODE_REPLY:
 
1747
                hci_cc_pin_code_reply(hdev, skb);
 
1748
                break;
 
1749
 
 
1750
        case HCI_OP_PIN_CODE_NEG_REPLY:
 
1751
                hci_cc_pin_code_neg_reply(hdev, skb);
 
1752
                break;
 
1753
 
 
1754
        case HCI_OP_LE_READ_BUFFER_SIZE:
 
1755
                hci_cc_le_read_buffer_size(hdev, skb);
 
1756
                break;
 
1757
 
 
1758
        case HCI_OP_USER_CONFIRM_REPLY:
 
1759
                hci_cc_user_confirm_reply(hdev, skb);
 
1760
                break;
 
1761
 
 
1762
        case HCI_OP_USER_CONFIRM_NEG_REPLY:
 
1763
                hci_cc_user_confirm_neg_reply(hdev, skb);
 
1764
                break;
 
1765
 
 
1766
        default:
 
1767
                BT_DBG("%s opcode 0x%x", hdev->name, opcode);
 
1768
                break;
 
1769
        }
 
1770
 
 
1771
        if (ev->opcode != HCI_OP_NOP)
 
1772
                del_timer(&hdev->cmd_timer);
 
1773
 
 
1774
        if (ev->ncmd) {
 
1775
                atomic_set(&hdev->cmd_cnt, 1);
 
1776
                if (!skb_queue_empty(&hdev->cmd_q))
 
1777
                        tasklet_schedule(&hdev->cmd_task);
 
1778
        }
 
1779
}
 
1780
 
 
1781
static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1782
{
 
1783
        struct hci_ev_cmd_status *ev = (void *) skb->data;
 
1784
        __u16 opcode;
 
1785
 
 
1786
        skb_pull(skb, sizeof(*ev));
 
1787
 
 
1788
        opcode = __le16_to_cpu(ev->opcode);
 
1789
 
 
1790
        switch (opcode) {
 
1791
        case HCI_OP_INQUIRY:
 
1792
                hci_cs_inquiry(hdev, ev->status);
 
1793
                break;
 
1794
 
 
1795
        case HCI_OP_CREATE_CONN:
 
1796
                hci_cs_create_conn(hdev, ev->status);
 
1797
                break;
 
1798
 
 
1799
        case HCI_OP_ADD_SCO:
 
1800
                hci_cs_add_sco(hdev, ev->status);
 
1801
                break;
 
1802
 
 
1803
        case HCI_OP_AUTH_REQUESTED:
 
1804
                hci_cs_auth_requested(hdev, ev->status);
 
1805
                break;
 
1806
 
 
1807
        case HCI_OP_SET_CONN_ENCRYPT:
 
1808
                hci_cs_set_conn_encrypt(hdev, ev->status);
 
1809
                break;
 
1810
 
 
1811
        case HCI_OP_REMOTE_NAME_REQ:
 
1812
                hci_cs_remote_name_req(hdev, ev->status);
 
1813
                break;
 
1814
 
 
1815
        case HCI_OP_READ_REMOTE_FEATURES:
 
1816
                hci_cs_read_remote_features(hdev, ev->status);
 
1817
                break;
 
1818
 
 
1819
        case HCI_OP_READ_REMOTE_EXT_FEATURES:
 
1820
                hci_cs_read_remote_ext_features(hdev, ev->status);
 
1821
                break;
 
1822
 
 
1823
        case HCI_OP_SETUP_SYNC_CONN:
 
1824
                hci_cs_setup_sync_conn(hdev, ev->status);
 
1825
                break;
 
1826
 
 
1827
        case HCI_OP_SNIFF_MODE:
 
1828
                hci_cs_sniff_mode(hdev, ev->status);
 
1829
                break;
 
1830
 
 
1831
        case HCI_OP_EXIT_SNIFF_MODE:
 
1832
                hci_cs_exit_sniff_mode(hdev, ev->status);
 
1833
                break;
 
1834
 
 
1835
        case HCI_OP_DISCONNECT:
 
1836
                if (ev->status != 0)
 
1837
                        mgmt_disconnect_failed(hdev->id);
 
1838
                break;
 
1839
 
 
1840
        case HCI_OP_LE_CREATE_CONN:
 
1841
                hci_cs_le_create_conn(hdev, ev->status);
 
1842
                break;
 
1843
 
 
1844
        default:
 
1845
                BT_DBG("%s opcode 0x%x", hdev->name, opcode);
 
1846
                break;
 
1847
        }
 
1848
 
 
1849
        if (ev->opcode != HCI_OP_NOP)
 
1850
                del_timer(&hdev->cmd_timer);
 
1851
 
 
1852
        if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
 
1853
                atomic_set(&hdev->cmd_cnt, 1);
 
1854
                if (!skb_queue_empty(&hdev->cmd_q))
 
1855
                        tasklet_schedule(&hdev->cmd_task);
 
1856
        }
 
1857
}
 
1858
 
 
1859
static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1860
{
 
1861
        struct hci_ev_role_change *ev = (void *) skb->data;
 
1862
        struct hci_conn *conn;
 
1863
 
 
1864
        BT_DBG("%s status %d", hdev->name, ev->status);
 
1865
 
 
1866
        hci_dev_lock(hdev);
 
1867
 
 
1868
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
 
1869
        if (conn) {
 
1870
                if (!ev->status) {
 
1871
                        if (ev->role)
 
1872
                                conn->link_mode &= ~HCI_LM_MASTER;
 
1873
                        else
 
1874
                                conn->link_mode |= HCI_LM_MASTER;
 
1875
                }
 
1876
 
 
1877
                clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
 
1878
 
 
1879
                hci_role_switch_cfm(conn, ev->status, ev->role);
 
1880
        }
 
1881
 
 
1882
        hci_dev_unlock(hdev);
 
1883
}
 
1884
 
 
1885
static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1886
{
 
1887
        struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
 
1888
        __le16 *ptr;
 
1889
        int i;
 
1890
 
 
1891
        skb_pull(skb, sizeof(*ev));
 
1892
 
 
1893
        BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
 
1894
 
 
1895
        if (skb->len < ev->num_hndl * 4) {
 
1896
                BT_DBG("%s bad parameters", hdev->name);
 
1897
                return;
 
1898
        }
 
1899
 
 
1900
        tasklet_disable(&hdev->tx_task);
 
1901
 
 
1902
        for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
 
1903
                struct hci_conn *conn;
 
1904
                __u16  handle, count;
 
1905
 
 
1906
                handle = get_unaligned_le16(ptr++);
 
1907
                count  = get_unaligned_le16(ptr++);
 
1908
 
 
1909
                conn = hci_conn_hash_lookup_handle(hdev, handle);
 
1910
                if (conn) {
 
1911
                        conn->sent -= count;
 
1912
 
 
1913
                        if (conn->type == ACL_LINK) {
 
1914
                                hdev->acl_cnt += count;
 
1915
                                if (hdev->acl_cnt > hdev->acl_pkts)
 
1916
                                        hdev->acl_cnt = hdev->acl_pkts;
 
1917
                        } else if (conn->type == LE_LINK) {
 
1918
                                if (hdev->le_pkts) {
 
1919
                                        hdev->le_cnt += count;
 
1920
                                        if (hdev->le_cnt > hdev->le_pkts)
 
1921
                                                hdev->le_cnt = hdev->le_pkts;
 
1922
                                } else {
 
1923
                                        hdev->acl_cnt += count;
 
1924
                                        if (hdev->acl_cnt > hdev->acl_pkts)
 
1925
                                                hdev->acl_cnt = hdev->acl_pkts;
 
1926
                                }
 
1927
                        } else {
 
1928
                                hdev->sco_cnt += count;
 
1929
                                if (hdev->sco_cnt > hdev->sco_pkts)
 
1930
                                        hdev->sco_cnt = hdev->sco_pkts;
 
1931
                        }
 
1932
                }
 
1933
        }
 
1934
 
 
1935
        tasklet_schedule(&hdev->tx_task);
 
1936
 
 
1937
        tasklet_enable(&hdev->tx_task);
 
1938
}
 
1939
 
 
1940
static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1941
{
 
1942
        struct hci_ev_mode_change *ev = (void *) skb->data;
 
1943
        struct hci_conn *conn;
 
1944
 
 
1945
        BT_DBG("%s status %d", hdev->name, ev->status);
 
1946
 
 
1947
        hci_dev_lock(hdev);
 
1948
 
 
1949
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
 
1950
        if (conn) {
 
1951
                conn->mode = ev->mode;
 
1952
                conn->interval = __le16_to_cpu(ev->interval);
 
1953
 
 
1954
                if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
 
1955
                        if (conn->mode == HCI_CM_ACTIVE)
 
1956
                                conn->power_save = 1;
 
1957
                        else
 
1958
                                conn->power_save = 0;
 
1959
                }
 
1960
 
 
1961
                if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
 
1962
                        hci_sco_setup(conn, ev->status);
 
1963
        }
 
1964
 
 
1965
        hci_dev_unlock(hdev);
 
1966
}
 
1967
 
 
1968
static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1969
{
 
1970
        struct hci_ev_pin_code_req *ev = (void *) skb->data;
 
1971
        struct hci_conn *conn;
 
1972
 
 
1973
        BT_DBG("%s", hdev->name);
 
1974
 
 
1975
        hci_dev_lock(hdev);
 
1976
 
 
1977
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
 
1978
        if (conn && conn->state == BT_CONNECTED) {
 
1979
                hci_conn_hold(conn);
 
1980
                conn->disc_timeout = HCI_PAIRING_TIMEOUT;
 
1981
                hci_conn_put(conn);
 
1982
        }
 
1983
 
 
1984
        if (!test_bit(HCI_PAIRABLE, &hdev->flags))
 
1985
                hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
 
1986
                                        sizeof(ev->bdaddr), &ev->bdaddr);
 
1987
 
 
1988
        if (test_bit(HCI_MGMT, &hdev->flags))
 
1989
                mgmt_pin_code_request(hdev->id, &ev->bdaddr);
 
1990
 
 
1991
        hci_dev_unlock(hdev);
 
1992
}
 
1993
 
 
1994
static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
1995
{
 
1996
        struct hci_ev_link_key_req *ev = (void *) skb->data;
 
1997
        struct hci_cp_link_key_reply cp;
 
1998
        struct hci_conn *conn;
 
1999
        struct link_key *key;
 
2000
 
 
2001
        BT_DBG("%s", hdev->name);
 
2002
 
 
2003
        if (!test_bit(HCI_LINK_KEYS, &hdev->flags))
 
2004
                return;
 
2005
 
 
2006
        hci_dev_lock(hdev);
 
2007
 
 
2008
        key = hci_find_link_key(hdev, &ev->bdaddr);
 
2009
        if (!key) {
 
2010
                BT_DBG("%s link key not found for %s", hdev->name,
 
2011
                                                        batostr(&ev->bdaddr));
 
2012
                goto not_found;
 
2013
        }
 
2014
 
 
2015
        BT_DBG("%s found key type %u for %s", hdev->name, key->type,
 
2016
                                                        batostr(&ev->bdaddr));
 
2017
 
 
2018
        if (!test_bit(HCI_DEBUG_KEYS, &hdev->flags) && key->type == 0x03) {
 
2019
                BT_DBG("%s ignoring debug key", hdev->name);
 
2020
                goto not_found;
 
2021
        }
 
2022
 
 
2023
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
 
2024
 
 
2025
        if (key->type == 0x04 && conn && conn->auth_type != 0xff &&
 
2026
                                                (conn->auth_type & 0x01)) {
 
2027
                BT_DBG("%s ignoring unauthenticated key", hdev->name);
 
2028
                goto not_found;
 
2029
        }
 
2030
 
 
2031
        bacpy(&cp.bdaddr, &ev->bdaddr);
 
2032
        memcpy(cp.link_key, key->val, 16);
 
2033
 
 
2034
        hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
 
2035
 
 
2036
        hci_dev_unlock(hdev);
 
2037
 
 
2038
        return;
 
2039
 
 
2040
not_found:
 
2041
        hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
 
2042
        hci_dev_unlock(hdev);
 
2043
}
 
2044
 
 
2045
static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2046
{
 
2047
        struct hci_ev_link_key_notify *ev = (void *) skb->data;
 
2048
        struct hci_conn *conn;
 
2049
        u8 pin_len = 0;
 
2050
 
 
2051
        BT_DBG("%s", hdev->name);
 
2052
 
 
2053
        hci_dev_lock(hdev);
 
2054
 
 
2055
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
 
2056
        if (conn) {
 
2057
                hci_conn_hold(conn);
 
2058
                conn->disc_timeout = HCI_DISCONN_TIMEOUT;
 
2059
                pin_len = conn->pin_length;
 
2060
                hci_conn_put(conn);
 
2061
        }
 
2062
 
 
2063
        if (test_bit(HCI_LINK_KEYS, &hdev->flags))
 
2064
                hci_add_link_key(hdev, 1, &ev->bdaddr, ev->link_key,
 
2065
                                                        ev->key_type, pin_len);
 
2066
 
 
2067
        hci_dev_unlock(hdev);
 
2068
}
 
2069
 
 
2070
static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2071
{
 
2072
        struct hci_ev_clock_offset *ev = (void *) skb->data;
 
2073
        struct hci_conn *conn;
 
2074
 
 
2075
        BT_DBG("%s status %d", hdev->name, ev->status);
 
2076
 
 
2077
        hci_dev_lock(hdev);
 
2078
 
 
2079
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
 
2080
        if (conn && !ev->status) {
 
2081
                struct inquiry_entry *ie;
 
2082
 
 
2083
                ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
 
2084
                if (ie) {
 
2085
                        ie->data.clock_offset = ev->clock_offset;
 
2086
                        ie->timestamp = jiffies;
 
2087
                }
 
2088
        }
 
2089
 
 
2090
        hci_dev_unlock(hdev);
 
2091
}
 
2092
 
 
2093
static inline void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2094
{
 
2095
        struct hci_ev_pkt_type_change *ev = (void *) skb->data;
 
2096
        struct hci_conn *conn;
 
2097
 
 
2098
        BT_DBG("%s status %d", hdev->name, ev->status);
 
2099
 
 
2100
        hci_dev_lock(hdev);
 
2101
 
 
2102
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
 
2103
        if (conn && !ev->status)
 
2104
                conn->pkt_type = __le16_to_cpu(ev->pkt_type);
 
2105
 
 
2106
        hci_dev_unlock(hdev);
 
2107
}
 
2108
 
 
2109
static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2110
{
 
2111
        struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
 
2112
        struct inquiry_entry *ie;
 
2113
 
 
2114
        BT_DBG("%s", hdev->name);
 
2115
 
 
2116
        hci_dev_lock(hdev);
 
2117
 
 
2118
        ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
 
2119
        if (ie) {
 
2120
                ie->data.pscan_rep_mode = ev->pscan_rep_mode;
 
2121
                ie->timestamp = jiffies;
 
2122
        }
 
2123
 
 
2124
        hci_dev_unlock(hdev);
 
2125
}
 
2126
 
 
2127
static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2128
{
 
2129
        struct inquiry_data data;
 
2130
        int num_rsp = *((__u8 *) skb->data);
 
2131
 
 
2132
        BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
 
2133
 
 
2134
        if (!num_rsp)
 
2135
                return;
 
2136
 
 
2137
        hci_dev_lock(hdev);
 
2138
 
 
2139
        if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
 
2140
                struct inquiry_info_with_rssi_and_pscan_mode *info;
 
2141
                info = (void *) (skb->data + 1);
 
2142
 
 
2143
                for (; num_rsp; num_rsp--) {
 
2144
                        bacpy(&data.bdaddr, &info->bdaddr);
 
2145
                        data.pscan_rep_mode     = info->pscan_rep_mode;
 
2146
                        data.pscan_period_mode  = info->pscan_period_mode;
 
2147
                        data.pscan_mode         = info->pscan_mode;
 
2148
                        memcpy(data.dev_class, info->dev_class, 3);
 
2149
                        data.clock_offset       = info->clock_offset;
 
2150
                        data.rssi               = info->rssi;
 
2151
                        data.ssp_mode           = 0x00;
 
2152
                        info++;
 
2153
                        hci_inquiry_cache_update(hdev, &data);
 
2154
                }
 
2155
        } else {
 
2156
                struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
 
2157
 
 
2158
                for (; num_rsp; num_rsp--) {
 
2159
                        bacpy(&data.bdaddr, &info->bdaddr);
 
2160
                        data.pscan_rep_mode     = info->pscan_rep_mode;
 
2161
                        data.pscan_period_mode  = info->pscan_period_mode;
 
2162
                        data.pscan_mode         = 0x00;
 
2163
                        memcpy(data.dev_class, info->dev_class, 3);
 
2164
                        data.clock_offset       = info->clock_offset;
 
2165
                        data.rssi               = info->rssi;
 
2166
                        data.ssp_mode           = 0x00;
 
2167
                        info++;
 
2168
                        hci_inquiry_cache_update(hdev, &data);
 
2169
                }
 
2170
        }
 
2171
 
 
2172
        hci_dev_unlock(hdev);
 
2173
}
 
2174
 
 
2175
static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2176
{
 
2177
        struct hci_ev_remote_ext_features *ev = (void *) skb->data;
 
2178
        struct hci_conn *conn;
 
2179
 
 
2180
        BT_DBG("%s", hdev->name);
 
2181
 
 
2182
        hci_dev_lock(hdev);
 
2183
 
 
2184
        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
 
2185
        if (!conn)
 
2186
                goto unlock;
 
2187
 
 
2188
        if (!ev->status && ev->page == 0x01) {
 
2189
                struct inquiry_entry *ie;
 
2190
 
 
2191
                ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
 
2192
                if (ie)
 
2193
                        ie->data.ssp_mode = (ev->features[0] & 0x01);
 
2194
 
 
2195
                conn->ssp_mode = (ev->features[0] & 0x01);
 
2196
        }
 
2197
 
 
2198
        if (conn->state != BT_CONFIG)
 
2199
                goto unlock;
 
2200
 
 
2201
        if (!ev->status) {
 
2202
                struct hci_cp_remote_name_req cp;
 
2203
                memset(&cp, 0, sizeof(cp));
 
2204
                bacpy(&cp.bdaddr, &conn->dst);
 
2205
                cp.pscan_rep_mode = 0x02;
 
2206
                hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
 
2207
        }
 
2208
 
 
2209
        if (!hci_outgoing_auth_needed(hdev, conn)) {
 
2210
                conn->state = BT_CONNECTED;
 
2211
                hci_proto_connect_cfm(conn, ev->status);
 
2212
                hci_conn_put(conn);
 
2213
        }
 
2214
 
 
2215
unlock:
 
2216
        hci_dev_unlock(hdev);
 
2217
}
 
2218
 
 
2219
static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2220
{
 
2221
        struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
 
2222
        struct hci_conn *conn;
 
2223
 
 
2224
        BT_DBG("%s status %d", hdev->name, ev->status);
 
2225
 
 
2226
        hci_dev_lock(hdev);
 
2227
 
 
2228
        conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
 
2229
        if (!conn) {
 
2230
                if (ev->link_type == ESCO_LINK)
 
2231
                        goto unlock;
 
2232
 
 
2233
                conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
 
2234
                if (!conn)
 
2235
                        goto unlock;
 
2236
 
 
2237
                conn->type = SCO_LINK;
 
2238
        }
 
2239
 
 
2240
        switch (ev->status) {
 
2241
        case 0x00:
 
2242
                conn->handle = __le16_to_cpu(ev->handle);
 
2243
                conn->state  = BT_CONNECTED;
 
2244
 
 
2245
                hci_conn_hold_device(conn);
 
2246
                hci_conn_add_sysfs(conn);
 
2247
                break;
 
2248
 
 
2249
        case 0x11:      /* Unsupported Feature or Parameter Value */
 
2250
        case 0x1c:      /* SCO interval rejected */
 
2251
        case 0x1a:      /* Unsupported Remote Feature */
 
2252
        case 0x1f:      /* Unspecified error */
 
2253
                if (conn->out && conn->attempt < 2) {
 
2254
                        conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
 
2255
                                        (hdev->esco_type & EDR_ESCO_MASK);
 
2256
                        hci_setup_sync(conn, conn->link->handle);
 
2257
                        goto unlock;
 
2258
                }
 
2259
                /* fall through */
 
2260
 
 
2261
        default:
 
2262
                conn->state = BT_CLOSED;
 
2263
                break;
 
2264
        }
 
2265
 
 
2266
        hci_proto_connect_cfm(conn, ev->status);
 
2267
        if (ev->status)
 
2268
                hci_conn_del(conn);
 
2269
 
 
2270
unlock:
 
2271
        hci_dev_unlock(hdev);
 
2272
}
 
2273
 
 
2274
static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2275
{
 
2276
        BT_DBG("%s", hdev->name);
 
2277
}
 
2278
 
 
2279
static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2280
{
 
2281
        struct hci_ev_sniff_subrate *ev = (void *) skb->data;
 
2282
 
 
2283
        BT_DBG("%s status %d", hdev->name, ev->status);
 
2284
}
 
2285
 
 
2286
static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2287
{
 
2288
        struct inquiry_data data;
 
2289
        struct extended_inquiry_info *info = (void *) (skb->data + 1);
 
2290
        int num_rsp = *((__u8 *) skb->data);
 
2291
 
 
2292
        BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
 
2293
 
 
2294
        if (!num_rsp)
 
2295
                return;
 
2296
 
 
2297
        hci_dev_lock(hdev);
 
2298
 
 
2299
        for (; num_rsp; num_rsp--) {
 
2300
                bacpy(&data.bdaddr, &info->bdaddr);
 
2301
                data.pscan_rep_mode     = info->pscan_rep_mode;
 
2302
                data.pscan_period_mode  = info->pscan_period_mode;
 
2303
                data.pscan_mode         = 0x00;
 
2304
                memcpy(data.dev_class, info->dev_class, 3);
 
2305
                data.clock_offset       = info->clock_offset;
 
2306
                data.rssi               = info->rssi;
 
2307
                data.ssp_mode           = 0x01;
 
2308
                info++;
 
2309
                hci_inquiry_cache_update(hdev, &data);
 
2310
        }
 
2311
 
 
2312
        hci_dev_unlock(hdev);
 
2313
}
 
2314
 
 
2315
static inline u8 hci_get_auth_req(struct hci_conn *conn)
 
2316
{
 
2317
        /* If remote requests dedicated bonding follow that lead */
 
2318
        if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03) {
 
2319
                /* If both remote and local IO capabilities allow MITM
 
2320
                 * protection then require it, otherwise don't */
 
2321
                if (conn->remote_cap == 0x03 || conn->io_capability == 0x03)
 
2322
                        return 0x02;
 
2323
                else
 
2324
                        return 0x03;
 
2325
        }
 
2326
 
 
2327
        /* If remote requests no-bonding follow that lead */
 
2328
        if (conn->remote_auth == 0x00 || conn->remote_auth == 0x01)
 
2329
                return 0x00;
 
2330
 
 
2331
        return conn->auth_type;
 
2332
}
 
2333
 
 
2334
static inline void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2335
{
 
2336
        struct hci_ev_io_capa_request *ev = (void *) skb->data;
 
2337
        struct hci_conn *conn;
 
2338
 
 
2339
        BT_DBG("%s", hdev->name);
 
2340
 
 
2341
        hci_dev_lock(hdev);
 
2342
 
 
2343
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
 
2344
        if (!conn)
 
2345
                goto unlock;
 
2346
 
 
2347
        hci_conn_hold(conn);
 
2348
 
 
2349
        if (!test_bit(HCI_MGMT, &hdev->flags))
 
2350
                goto unlock;
 
2351
 
 
2352
        if (test_bit(HCI_PAIRABLE, &hdev->flags) ||
 
2353
                        (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
 
2354
                struct hci_cp_io_capability_reply cp;
 
2355
 
 
2356
                bacpy(&cp.bdaddr, &ev->bdaddr);
 
2357
                cp.capability = conn->io_capability;
 
2358
                cp.oob_data = 0;
 
2359
                cp.authentication = hci_get_auth_req(conn);
 
2360
 
 
2361
                hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
 
2362
                                                        sizeof(cp), &cp);
 
2363
        } else {
 
2364
                struct hci_cp_io_capability_neg_reply cp;
 
2365
 
 
2366
                bacpy(&cp.bdaddr, &ev->bdaddr);
 
2367
                cp.reason = 0x16; /* Pairing not allowed */
 
2368
 
 
2369
                hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
 
2370
                                                        sizeof(cp), &cp);
 
2371
        }
 
2372
 
 
2373
unlock:
 
2374
        hci_dev_unlock(hdev);
 
2375
}
 
2376
 
 
2377
static inline void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2378
{
 
2379
        struct hci_ev_io_capa_reply *ev = (void *) skb->data;
 
2380
        struct hci_conn *conn;
 
2381
 
 
2382
        BT_DBG("%s", hdev->name);
 
2383
 
 
2384
        hci_dev_lock(hdev);
 
2385
 
 
2386
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
 
2387
        if (!conn)
 
2388
                goto unlock;
 
2389
 
 
2390
        conn->remote_cap = ev->capability;
 
2391
        conn->remote_oob = ev->oob_data;
 
2392
        conn->remote_auth = ev->authentication;
 
2393
 
 
2394
unlock:
 
2395
        hci_dev_unlock(hdev);
 
2396
}
 
2397
 
 
2398
static inline void hci_user_confirm_request_evt(struct hci_dev *hdev,
 
2399
                                                        struct sk_buff *skb)
 
2400
{
 
2401
        struct hci_ev_user_confirm_req *ev = (void *) skb->data;
 
2402
 
 
2403
        BT_DBG("%s", hdev->name);
 
2404
 
 
2405
        hci_dev_lock(hdev);
 
2406
 
 
2407
        if (test_bit(HCI_MGMT, &hdev->flags))
 
2408
                mgmt_user_confirm_request(hdev->id, &ev->bdaddr, ev->passkey);
 
2409
 
 
2410
        hci_dev_unlock(hdev);
 
2411
}
 
2412
 
 
2413
static inline void hci_simple_pair_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2414
{
 
2415
        struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
 
2416
        struct hci_conn *conn;
 
2417
 
 
2418
        BT_DBG("%s", hdev->name);
 
2419
 
 
2420
        hci_dev_lock(hdev);
 
2421
 
 
2422
        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
 
2423
        if (!conn)
 
2424
                goto unlock;
 
2425
 
 
2426
        /* To avoid duplicate auth_failed events to user space we check
 
2427
         * the HCI_CONN_AUTH_PEND flag which will be set if we
 
2428
         * initiated the authentication. A traditional auth_complete
 
2429
         * event gets always produced as initiator and is also mapped to
 
2430
         * the mgmt_auth_failed event */
 
2431
        if (!test_bit(HCI_CONN_AUTH_PEND, &conn->pend) && ev->status != 0)
 
2432
                mgmt_auth_failed(hdev->id, &conn->dst, ev->status);
 
2433
 
 
2434
        hci_conn_put(conn);
 
2435
 
 
2436
unlock:
 
2437
        hci_dev_unlock(hdev);
 
2438
}
 
2439
 
 
2440
static inline void hci_remote_host_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2441
{
 
2442
        struct hci_ev_remote_host_features *ev = (void *) skb->data;
 
2443
        struct inquiry_entry *ie;
 
2444
 
 
2445
        BT_DBG("%s", hdev->name);
 
2446
 
 
2447
        hci_dev_lock(hdev);
 
2448
 
 
2449
        ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
 
2450
        if (ie)
 
2451
                ie->data.ssp_mode = (ev->features[0] & 0x01);
 
2452
 
 
2453
        hci_dev_unlock(hdev);
 
2454
}
 
2455
 
 
2456
static inline void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2457
{
 
2458
        struct hci_ev_le_conn_complete *ev = (void *) skb->data;
 
2459
        struct hci_conn *conn;
 
2460
 
 
2461
        BT_DBG("%s status %d", hdev->name, ev->status);
 
2462
 
 
2463
        hci_dev_lock(hdev);
 
2464
 
 
2465
        conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &ev->bdaddr);
 
2466
        if (!conn) {
 
2467
                conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr);
 
2468
                if (!conn) {
 
2469
                        BT_ERR("No memory for new connection");
 
2470
                        hci_dev_unlock(hdev);
 
2471
                        return;
 
2472
                }
 
2473
        }
 
2474
 
 
2475
        if (ev->status) {
 
2476
                hci_proto_connect_cfm(conn, ev->status);
 
2477
                conn->state = BT_CLOSED;
 
2478
                hci_conn_del(conn);
 
2479
                goto unlock;
 
2480
        }
 
2481
 
 
2482
        conn->handle = __le16_to_cpu(ev->handle);
 
2483
        conn->state = BT_CONNECTED;
 
2484
 
 
2485
        hci_conn_hold_device(conn);
 
2486
        hci_conn_add_sysfs(conn);
 
2487
 
 
2488
        hci_proto_connect_cfm(conn, ev->status);
 
2489
 
 
2490
unlock:
 
2491
        hci_dev_unlock(hdev);
 
2492
}
 
2493
 
 
2494
static inline void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
 
2495
{
 
2496
        struct hci_ev_le_meta *le_ev = (void *) skb->data;
 
2497
 
 
2498
        skb_pull(skb, sizeof(*le_ev));
 
2499
 
 
2500
        switch (le_ev->subevent) {
 
2501
        case HCI_EV_LE_CONN_COMPLETE:
 
2502
                hci_le_conn_complete_evt(hdev, skb);
 
2503
                break;
 
2504
 
 
2505
        default:
 
2506
                break;
 
2507
        }
 
2508
}
 
2509
 
 
2510
void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
 
2511
{
 
2512
        struct hci_event_hdr *hdr = (void *) skb->data;
 
2513
        __u8 event = hdr->evt;
 
2514
 
 
2515
        skb_pull(skb, HCI_EVENT_HDR_SIZE);
 
2516
 
 
2517
        switch (event) {
 
2518
        case HCI_EV_INQUIRY_COMPLETE:
 
2519
                hci_inquiry_complete_evt(hdev, skb);
 
2520
                break;
 
2521
 
 
2522
        case HCI_EV_INQUIRY_RESULT:
 
2523
                hci_inquiry_result_evt(hdev, skb);
 
2524
                break;
 
2525
 
 
2526
        case HCI_EV_CONN_COMPLETE:
 
2527
                hci_conn_complete_evt(hdev, skb);
 
2528
                break;
 
2529
 
 
2530
        case HCI_EV_CONN_REQUEST:
 
2531
                hci_conn_request_evt(hdev, skb);
 
2532
                break;
 
2533
 
 
2534
        case HCI_EV_DISCONN_COMPLETE:
 
2535
                hci_disconn_complete_evt(hdev, skb);
 
2536
                break;
 
2537
 
 
2538
        case HCI_EV_AUTH_COMPLETE:
 
2539
                hci_auth_complete_evt(hdev, skb);
 
2540
                break;
 
2541
 
 
2542
        case HCI_EV_REMOTE_NAME:
 
2543
                hci_remote_name_evt(hdev, skb);
 
2544
                break;
 
2545
 
 
2546
        case HCI_EV_ENCRYPT_CHANGE:
 
2547
                hci_encrypt_change_evt(hdev, skb);
 
2548
                break;
 
2549
 
 
2550
        case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
 
2551
                hci_change_link_key_complete_evt(hdev, skb);
 
2552
                break;
 
2553
 
 
2554
        case HCI_EV_REMOTE_FEATURES:
 
2555
                hci_remote_features_evt(hdev, skb);
 
2556
                break;
 
2557
 
 
2558
        case HCI_EV_REMOTE_VERSION:
 
2559
                hci_remote_version_evt(hdev, skb);
 
2560
                break;
 
2561
 
 
2562
        case HCI_EV_QOS_SETUP_COMPLETE:
 
2563
                hci_qos_setup_complete_evt(hdev, skb);
 
2564
                break;
 
2565
 
 
2566
        case HCI_EV_CMD_COMPLETE:
 
2567
                hci_cmd_complete_evt(hdev, skb);
 
2568
                break;
 
2569
 
 
2570
        case HCI_EV_CMD_STATUS:
 
2571
                hci_cmd_status_evt(hdev, skb);
 
2572
                break;
 
2573
 
 
2574
        case HCI_EV_ROLE_CHANGE:
 
2575
                hci_role_change_evt(hdev, skb);
 
2576
                break;
 
2577
 
 
2578
        case HCI_EV_NUM_COMP_PKTS:
 
2579
                hci_num_comp_pkts_evt(hdev, skb);
 
2580
                break;
 
2581
 
 
2582
        case HCI_EV_MODE_CHANGE:
 
2583
                hci_mode_change_evt(hdev, skb);
 
2584
                break;
 
2585
 
 
2586
        case HCI_EV_PIN_CODE_REQ:
 
2587
                hci_pin_code_request_evt(hdev, skb);
 
2588
                break;
 
2589
 
 
2590
        case HCI_EV_LINK_KEY_REQ:
 
2591
                hci_link_key_request_evt(hdev, skb);
 
2592
                break;
 
2593
 
 
2594
        case HCI_EV_LINK_KEY_NOTIFY:
 
2595
                hci_link_key_notify_evt(hdev, skb);
 
2596
                break;
 
2597
 
 
2598
        case HCI_EV_CLOCK_OFFSET:
 
2599
                hci_clock_offset_evt(hdev, skb);
 
2600
                break;
 
2601
 
 
2602
        case HCI_EV_PKT_TYPE_CHANGE:
 
2603
                hci_pkt_type_change_evt(hdev, skb);
 
2604
                break;
 
2605
 
 
2606
        case HCI_EV_PSCAN_REP_MODE:
 
2607
                hci_pscan_rep_mode_evt(hdev, skb);
 
2608
                break;
 
2609
 
 
2610
        case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
 
2611
                hci_inquiry_result_with_rssi_evt(hdev, skb);
 
2612
                break;
 
2613
 
 
2614
        case HCI_EV_REMOTE_EXT_FEATURES:
 
2615
                hci_remote_ext_features_evt(hdev, skb);
 
2616
                break;
 
2617
 
 
2618
        case HCI_EV_SYNC_CONN_COMPLETE:
 
2619
                hci_sync_conn_complete_evt(hdev, skb);
 
2620
                break;
 
2621
 
 
2622
        case HCI_EV_SYNC_CONN_CHANGED:
 
2623
                hci_sync_conn_changed_evt(hdev, skb);
 
2624
                break;
 
2625
 
 
2626
        case HCI_EV_SNIFF_SUBRATE:
 
2627
                hci_sniff_subrate_evt(hdev, skb);
 
2628
                break;
 
2629
 
 
2630
        case HCI_EV_EXTENDED_INQUIRY_RESULT:
 
2631
                hci_extended_inquiry_result_evt(hdev, skb);
 
2632
                break;
 
2633
 
 
2634
        case HCI_EV_IO_CAPA_REQUEST:
 
2635
                hci_io_capa_request_evt(hdev, skb);
 
2636
                break;
 
2637
 
 
2638
        case HCI_EV_IO_CAPA_REPLY:
 
2639
                hci_io_capa_reply_evt(hdev, skb);
 
2640
                break;
 
2641
 
 
2642
        case HCI_EV_USER_CONFIRM_REQUEST:
 
2643
                hci_user_confirm_request_evt(hdev, skb);
 
2644
                break;
 
2645
 
 
2646
        case HCI_EV_SIMPLE_PAIR_COMPLETE:
 
2647
                hci_simple_pair_complete_evt(hdev, skb);
 
2648
                break;
 
2649
 
 
2650
        case HCI_EV_REMOTE_HOST_FEATURES:
 
2651
                hci_remote_host_features_evt(hdev, skb);
 
2652
                break;
 
2653
 
 
2654
        case HCI_EV_LE_META:
 
2655
                hci_le_meta_evt(hdev, skb);
 
2656
                break;
 
2657
 
 
2658
        default:
 
2659
                BT_DBG("%s event 0x%x", hdev->name, event);
 
2660
                break;
 
2661
        }
 
2662
 
 
2663
        kfree_skb(skb);
 
2664
        hdev->stat.evt_rx++;
 
2665
}
 
2666
 
 
2667
/* Generate internal stack event */
 
2668
void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
 
2669
{
 
2670
        struct hci_event_hdr *hdr;
 
2671
        struct hci_ev_stack_internal *ev;
 
2672
        struct sk_buff *skb;
 
2673
 
 
2674
        skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
 
2675
        if (!skb)
 
2676
                return;
 
2677
 
 
2678
        hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
 
2679
        hdr->evt  = HCI_EV_STACK_INTERNAL;
 
2680
        hdr->plen = sizeof(*ev) + dlen;
 
2681
 
 
2682
        ev  = (void *) skb_put(skb, sizeof(*ev) + dlen);
 
2683
        ev->type = type;
 
2684
        memcpy(ev->data, data, dlen);
 
2685
 
 
2686
        bt_cb(skb)->incoming = 1;
 
2687
        __net_timestamp(skb);
 
2688
 
 
2689
        bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
 
2690
        skb->dev = (void *) hdev;
 
2691
        hci_send_to_sock(hdev, skb, NULL);
 
2692
        kfree_skb(skb);
 
2693
}