Merge remote-tracking branch 'regulator/topic/twl' into v3.9-rc8
[GitHub/mt8127/android_kernel_alcatel_ttab.git] / net / bluetooth / hci_event.c
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 <asm/unaligned.h>
28
29 #include <net/bluetooth/bluetooth.h>
30 #include <net/bluetooth/hci_core.h>
31 #include <net/bluetooth/mgmt.h>
32 #include <net/bluetooth/a2mp.h>
33 #include <net/bluetooth/amp.h>
34
35 /* Handle HCI Event packets */
36
37 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
38 {
39 __u8 status = *((__u8 *) skb->data);
40
41 BT_DBG("%s status 0x%2.2x", hdev->name, status);
42
43 if (status) {
44 hci_dev_lock(hdev);
45 mgmt_stop_discovery_failed(hdev, status);
46 hci_dev_unlock(hdev);
47 return;
48 }
49
50 clear_bit(HCI_INQUIRY, &hdev->flags);
51
52 hci_dev_lock(hdev);
53 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
54 hci_dev_unlock(hdev);
55
56 hci_req_complete(hdev, HCI_OP_INQUIRY_CANCEL, status);
57
58 hci_conn_check_pending(hdev);
59 }
60
61 static void hci_cc_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
62 {
63 __u8 status = *((__u8 *) skb->data);
64
65 BT_DBG("%s status 0x%2.2x", hdev->name, status);
66
67 if (status)
68 return;
69
70 set_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
71 }
72
73 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
74 {
75 __u8 status = *((__u8 *) skb->data);
76
77 BT_DBG("%s status 0x%2.2x", hdev->name, status);
78
79 if (status)
80 return;
81
82 clear_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
83
84 hci_conn_check_pending(hdev);
85 }
86
87 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev,
88 struct sk_buff *skb)
89 {
90 BT_DBG("%s", hdev->name);
91 }
92
93 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
94 {
95 struct hci_rp_role_discovery *rp = (void *) skb->data;
96 struct hci_conn *conn;
97
98 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
99
100 if (rp->status)
101 return;
102
103 hci_dev_lock(hdev);
104
105 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
106 if (conn) {
107 if (rp->role)
108 conn->link_mode &= ~HCI_LM_MASTER;
109 else
110 conn->link_mode |= HCI_LM_MASTER;
111 }
112
113 hci_dev_unlock(hdev);
114 }
115
116 static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
117 {
118 struct hci_rp_read_link_policy *rp = (void *) skb->data;
119 struct hci_conn *conn;
120
121 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
122
123 if (rp->status)
124 return;
125
126 hci_dev_lock(hdev);
127
128 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
129 if (conn)
130 conn->link_policy = __le16_to_cpu(rp->policy);
131
132 hci_dev_unlock(hdev);
133 }
134
135 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
136 {
137 struct hci_rp_write_link_policy *rp = (void *) skb->data;
138 struct hci_conn *conn;
139 void *sent;
140
141 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
142
143 if (rp->status)
144 return;
145
146 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
147 if (!sent)
148 return;
149
150 hci_dev_lock(hdev);
151
152 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
153 if (conn)
154 conn->link_policy = get_unaligned_le16(sent + 2);
155
156 hci_dev_unlock(hdev);
157 }
158
159 static void hci_cc_read_def_link_policy(struct hci_dev *hdev,
160 struct sk_buff *skb)
161 {
162 struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
163
164 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
165
166 if (rp->status)
167 return;
168
169 hdev->link_policy = __le16_to_cpu(rp->policy);
170 }
171
172 static void hci_cc_write_def_link_policy(struct hci_dev *hdev,
173 struct sk_buff *skb)
174 {
175 __u8 status = *((__u8 *) skb->data);
176 void *sent;
177
178 BT_DBG("%s status 0x%2.2x", hdev->name, status);
179
180 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
181 if (!sent)
182 return;
183
184 if (!status)
185 hdev->link_policy = get_unaligned_le16(sent);
186
187 hci_req_complete(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, status);
188 }
189
190 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
191 {
192 __u8 status = *((__u8 *) skb->data);
193
194 BT_DBG("%s status 0x%2.2x", hdev->name, status);
195
196 clear_bit(HCI_RESET, &hdev->flags);
197
198 hci_req_complete(hdev, HCI_OP_RESET, status);
199
200 /* Reset all non-persistent flags */
201 hdev->dev_flags &= ~(BIT(HCI_LE_SCAN) | BIT(HCI_PENDING_CLASS) |
202 BIT(HCI_PERIODIC_INQ));
203
204 hdev->discovery.state = DISCOVERY_STOPPED;
205 hdev->inq_tx_power = HCI_TX_POWER_INVALID;
206 hdev->adv_tx_power = HCI_TX_POWER_INVALID;
207
208 memset(hdev->adv_data, 0, sizeof(hdev->adv_data));
209 hdev->adv_data_len = 0;
210 }
211
212 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
213 {
214 __u8 status = *((__u8 *) skb->data);
215 void *sent;
216
217 BT_DBG("%s status 0x%2.2x", hdev->name, status);
218
219 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
220 if (!sent)
221 return;
222
223 hci_dev_lock(hdev);
224
225 if (test_bit(HCI_MGMT, &hdev->dev_flags))
226 mgmt_set_local_name_complete(hdev, sent, status);
227 else if (!status)
228 memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
229
230 hci_dev_unlock(hdev);
231
232 if (!status && !test_bit(HCI_INIT, &hdev->flags))
233 hci_update_ad(hdev);
234
235 hci_req_complete(hdev, HCI_OP_WRITE_LOCAL_NAME, status);
236 }
237
238 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
239 {
240 struct hci_rp_read_local_name *rp = (void *) skb->data;
241
242 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
243
244 if (rp->status)
245 return;
246
247 if (test_bit(HCI_SETUP, &hdev->dev_flags))
248 memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
249 }
250
251 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
252 {
253 __u8 status = *((__u8 *) skb->data);
254 void *sent;
255
256 BT_DBG("%s status 0x%2.2x", hdev->name, status);
257
258 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
259 if (!sent)
260 return;
261
262 if (!status) {
263 __u8 param = *((__u8 *) sent);
264
265 if (param == AUTH_ENABLED)
266 set_bit(HCI_AUTH, &hdev->flags);
267 else
268 clear_bit(HCI_AUTH, &hdev->flags);
269 }
270
271 if (test_bit(HCI_MGMT, &hdev->dev_flags))
272 mgmt_auth_enable_complete(hdev, status);
273
274 hci_req_complete(hdev, HCI_OP_WRITE_AUTH_ENABLE, status);
275 }
276
277 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
278 {
279 __u8 status = *((__u8 *) skb->data);
280 void *sent;
281
282 BT_DBG("%s status 0x%2.2x", hdev->name, status);
283
284 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
285 if (!sent)
286 return;
287
288 if (!status) {
289 __u8 param = *((__u8 *) sent);
290
291 if (param)
292 set_bit(HCI_ENCRYPT, &hdev->flags);
293 else
294 clear_bit(HCI_ENCRYPT, &hdev->flags);
295 }
296
297 hci_req_complete(hdev, HCI_OP_WRITE_ENCRYPT_MODE, status);
298 }
299
300 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
301 {
302 __u8 param, status = *((__u8 *) skb->data);
303 int old_pscan, old_iscan;
304 void *sent;
305
306 BT_DBG("%s status 0x%2.2x", hdev->name, status);
307
308 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
309 if (!sent)
310 return;
311
312 param = *((__u8 *) sent);
313
314 hci_dev_lock(hdev);
315
316 if (status) {
317 mgmt_write_scan_failed(hdev, param, status);
318 hdev->discov_timeout = 0;
319 goto done;
320 }
321
322 old_pscan = test_and_clear_bit(HCI_PSCAN, &hdev->flags);
323 old_iscan = test_and_clear_bit(HCI_ISCAN, &hdev->flags);
324
325 if (param & SCAN_INQUIRY) {
326 set_bit(HCI_ISCAN, &hdev->flags);
327 if (!old_iscan)
328 mgmt_discoverable(hdev, 1);
329 if (hdev->discov_timeout > 0) {
330 int to = msecs_to_jiffies(hdev->discov_timeout * 1000);
331 queue_delayed_work(hdev->workqueue, &hdev->discov_off,
332 to);
333 }
334 } else if (old_iscan)
335 mgmt_discoverable(hdev, 0);
336
337 if (param & SCAN_PAGE) {
338 set_bit(HCI_PSCAN, &hdev->flags);
339 if (!old_pscan)
340 mgmt_connectable(hdev, 1);
341 } else if (old_pscan)
342 mgmt_connectable(hdev, 0);
343
344 done:
345 hci_dev_unlock(hdev);
346 hci_req_complete(hdev, HCI_OP_WRITE_SCAN_ENABLE, status);
347 }
348
349 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
350 {
351 struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
352
353 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
354
355 if (rp->status)
356 return;
357
358 memcpy(hdev->dev_class, rp->dev_class, 3);
359
360 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
361 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
362 }
363
364 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
365 {
366 __u8 status = *((__u8 *) skb->data);
367 void *sent;
368
369 BT_DBG("%s status 0x%2.2x", hdev->name, status);
370
371 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
372 if (!sent)
373 return;
374
375 hci_dev_lock(hdev);
376
377 if (status == 0)
378 memcpy(hdev->dev_class, sent, 3);
379
380 if (test_bit(HCI_MGMT, &hdev->dev_flags))
381 mgmt_set_class_of_dev_complete(hdev, sent, status);
382
383 hci_dev_unlock(hdev);
384 }
385
386 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
387 {
388 struct hci_rp_read_voice_setting *rp = (void *) skb->data;
389 __u16 setting;
390
391 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
392
393 if (rp->status)
394 return;
395
396 setting = __le16_to_cpu(rp->voice_setting);
397
398 if (hdev->voice_setting == setting)
399 return;
400
401 hdev->voice_setting = setting;
402
403 BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
404
405 if (hdev->notify)
406 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
407 }
408
409 static void hci_cc_write_voice_setting(struct hci_dev *hdev,
410 struct sk_buff *skb)
411 {
412 __u8 status = *((__u8 *) skb->data);
413 __u16 setting;
414 void *sent;
415
416 BT_DBG("%s status 0x%2.2x", hdev->name, status);
417
418 if (status)
419 return;
420
421 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
422 if (!sent)
423 return;
424
425 setting = get_unaligned_le16(sent);
426
427 if (hdev->voice_setting == setting)
428 return;
429
430 hdev->voice_setting = setting;
431
432 BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
433
434 if (hdev->notify)
435 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
436 }
437
438 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
439 {
440 __u8 status = *((__u8 *) skb->data);
441
442 BT_DBG("%s status 0x%2.2x", hdev->name, status);
443
444 hci_req_complete(hdev, HCI_OP_HOST_BUFFER_SIZE, status);
445 }
446
447 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
448 {
449 __u8 status = *((__u8 *) skb->data);
450 struct hci_cp_write_ssp_mode *sent;
451
452 BT_DBG("%s status 0x%2.2x", hdev->name, status);
453
454 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
455 if (!sent)
456 return;
457
458 if (!status) {
459 if (sent->mode)
460 hdev->host_features[0] |= LMP_HOST_SSP;
461 else
462 hdev->host_features[0] &= ~LMP_HOST_SSP;
463 }
464
465 if (test_bit(HCI_MGMT, &hdev->dev_flags))
466 mgmt_ssp_enable_complete(hdev, sent->mode, status);
467 else if (!status) {
468 if (sent->mode)
469 set_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
470 else
471 clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
472 }
473 }
474
475 static u8 hci_get_inquiry_mode(struct hci_dev *hdev)
476 {
477 if (lmp_ext_inq_capable(hdev))
478 return 2;
479
480 if (lmp_inq_rssi_capable(hdev))
481 return 1;
482
483 if (hdev->manufacturer == 11 && hdev->hci_rev == 0x00 &&
484 hdev->lmp_subver == 0x0757)
485 return 1;
486
487 if (hdev->manufacturer == 15) {
488 if (hdev->hci_rev == 0x03 && hdev->lmp_subver == 0x6963)
489 return 1;
490 if (hdev->hci_rev == 0x09 && hdev->lmp_subver == 0x6963)
491 return 1;
492 if (hdev->hci_rev == 0x00 && hdev->lmp_subver == 0x6965)
493 return 1;
494 }
495
496 if (hdev->manufacturer == 31 && hdev->hci_rev == 0x2005 &&
497 hdev->lmp_subver == 0x1805)
498 return 1;
499
500 return 0;
501 }
502
503 static void hci_setup_inquiry_mode(struct hci_dev *hdev)
504 {
505 u8 mode;
506
507 mode = hci_get_inquiry_mode(hdev);
508
509 hci_send_cmd(hdev, HCI_OP_WRITE_INQUIRY_MODE, 1, &mode);
510 }
511
512 static void hci_setup_event_mask(struct hci_dev *hdev)
513 {
514 /* The second byte is 0xff instead of 0x9f (two reserved bits
515 * disabled) since a Broadcom 1.2 dongle doesn't respond to the
516 * command otherwise */
517 u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
518
519 /* CSR 1.1 dongles does not accept any bitfield so don't try to set
520 * any event mask for pre 1.2 devices */
521 if (hdev->hci_ver < BLUETOOTH_VER_1_2)
522 return;
523
524 if (lmp_bredr_capable(hdev)) {
525 events[4] |= 0x01; /* Flow Specification Complete */
526 events[4] |= 0x02; /* Inquiry Result with RSSI */
527 events[4] |= 0x04; /* Read Remote Extended Features Complete */
528 events[5] |= 0x08; /* Synchronous Connection Complete */
529 events[5] |= 0x10; /* Synchronous Connection Changed */
530 }
531
532 if (lmp_inq_rssi_capable(hdev))
533 events[4] |= 0x02; /* Inquiry Result with RSSI */
534
535 if (lmp_sniffsubr_capable(hdev))
536 events[5] |= 0x20; /* Sniff Subrating */
537
538 if (lmp_pause_enc_capable(hdev))
539 events[5] |= 0x80; /* Encryption Key Refresh Complete */
540
541 if (lmp_ext_inq_capable(hdev))
542 events[5] |= 0x40; /* Extended Inquiry Result */
543
544 if (lmp_no_flush_capable(hdev))
545 events[7] |= 0x01; /* Enhanced Flush Complete */
546
547 if (lmp_lsto_capable(hdev))
548 events[6] |= 0x80; /* Link Supervision Timeout Changed */
549
550 if (lmp_ssp_capable(hdev)) {
551 events[6] |= 0x01; /* IO Capability Request */
552 events[6] |= 0x02; /* IO Capability Response */
553 events[6] |= 0x04; /* User Confirmation Request */
554 events[6] |= 0x08; /* User Passkey Request */
555 events[6] |= 0x10; /* Remote OOB Data Request */
556 events[6] |= 0x20; /* Simple Pairing Complete */
557 events[7] |= 0x04; /* User Passkey Notification */
558 events[7] |= 0x08; /* Keypress Notification */
559 events[7] |= 0x10; /* Remote Host Supported
560 * Features Notification */
561 }
562
563 if (lmp_le_capable(hdev))
564 events[7] |= 0x20; /* LE Meta-Event */
565
566 hci_send_cmd(hdev, HCI_OP_SET_EVENT_MASK, sizeof(events), events);
567
568 if (lmp_le_capable(hdev)) {
569 memset(events, 0, sizeof(events));
570 events[0] = 0x1f;
571 hci_send_cmd(hdev, HCI_OP_LE_SET_EVENT_MASK,
572 sizeof(events), events);
573 }
574 }
575
576 static void bredr_setup(struct hci_dev *hdev)
577 {
578 struct hci_cp_delete_stored_link_key cp;
579 __le16 param;
580 __u8 flt_type;
581
582 /* Read Buffer Size (ACL mtu, max pkt, etc.) */
583 hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
584
585 /* Read Class of Device */
586 hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
587
588 /* Read Local Name */
589 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL);
590
591 /* Read Voice Setting */
592 hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL);
593
594 /* Clear Event Filters */
595 flt_type = HCI_FLT_CLEAR_ALL;
596 hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
597
598 /* Connection accept timeout ~20 secs */
599 param = __constant_cpu_to_le16(0x7d00);
600 hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, &param);
601
602 bacpy(&cp.bdaddr, BDADDR_ANY);
603 cp.delete_all = 1;
604 hci_send_cmd(hdev, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp);
605 }
606
607 static void le_setup(struct hci_dev *hdev)
608 {
609 /* Read LE Buffer Size */
610 hci_send_cmd(hdev, HCI_OP_LE_READ_BUFFER_SIZE, 0, NULL);
611
612 /* Read LE Local Supported Features */
613 hci_send_cmd(hdev, HCI_OP_LE_READ_LOCAL_FEATURES, 0, NULL);
614
615 /* Read LE Advertising Channel TX Power */
616 hci_send_cmd(hdev, HCI_OP_LE_READ_ADV_TX_POWER, 0, NULL);
617
618 /* Read LE White List Size */
619 hci_send_cmd(hdev, HCI_OP_LE_READ_WHITE_LIST_SIZE, 0, NULL);
620
621 /* Read LE Supported States */
622 hci_send_cmd(hdev, HCI_OP_LE_READ_SUPPORTED_STATES, 0, NULL);
623 }
624
625 static void hci_setup(struct hci_dev *hdev)
626 {
627 if (hdev->dev_type != HCI_BREDR)
628 return;
629
630 /* Read BD Address */
631 hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
632
633 if (lmp_bredr_capable(hdev))
634 bredr_setup(hdev);
635
636 if (lmp_le_capable(hdev))
637 le_setup(hdev);
638
639 hci_setup_event_mask(hdev);
640
641 if (hdev->hci_ver > BLUETOOTH_VER_1_1)
642 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
643
644 if (lmp_ssp_capable(hdev)) {
645 if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
646 u8 mode = 0x01;
647 hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE,
648 sizeof(mode), &mode);
649 } else {
650 struct hci_cp_write_eir cp;
651
652 memset(hdev->eir, 0, sizeof(hdev->eir));
653 memset(&cp, 0, sizeof(cp));
654
655 hci_send_cmd(hdev, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
656 }
657 }
658
659 if (lmp_inq_rssi_capable(hdev))
660 hci_setup_inquiry_mode(hdev);
661
662 if (lmp_inq_tx_pwr_capable(hdev))
663 hci_send_cmd(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, 0, NULL);
664
665 if (lmp_ext_feat_capable(hdev)) {
666 struct hci_cp_read_local_ext_features cp;
667
668 cp.page = 0x01;
669 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES, sizeof(cp),
670 &cp);
671 }
672
673 if (test_bit(HCI_LINK_SECURITY, &hdev->dev_flags)) {
674 u8 enable = 1;
675 hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, sizeof(enable),
676 &enable);
677 }
678 }
679
680 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
681 {
682 struct hci_rp_read_local_version *rp = (void *) skb->data;
683
684 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
685
686 if (rp->status)
687 goto done;
688
689 hdev->hci_ver = rp->hci_ver;
690 hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
691 hdev->lmp_ver = rp->lmp_ver;
692 hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
693 hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
694
695 BT_DBG("%s manufacturer 0x%4.4x hci ver %d:%d", hdev->name,
696 hdev->manufacturer, hdev->hci_ver, hdev->hci_rev);
697
698 if (test_bit(HCI_INIT, &hdev->flags))
699 hci_setup(hdev);
700
701 done:
702 hci_req_complete(hdev, HCI_OP_READ_LOCAL_VERSION, rp->status);
703 }
704
705 static void hci_setup_link_policy(struct hci_dev *hdev)
706 {
707 struct hci_cp_write_def_link_policy cp;
708 u16 link_policy = 0;
709
710 if (lmp_rswitch_capable(hdev))
711 link_policy |= HCI_LP_RSWITCH;
712 if (lmp_hold_capable(hdev))
713 link_policy |= HCI_LP_HOLD;
714 if (lmp_sniff_capable(hdev))
715 link_policy |= HCI_LP_SNIFF;
716 if (lmp_park_capable(hdev))
717 link_policy |= HCI_LP_PARK;
718
719 cp.policy = cpu_to_le16(link_policy);
720 hci_send_cmd(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, sizeof(cp), &cp);
721 }
722
723 static void hci_cc_read_local_commands(struct hci_dev *hdev,
724 struct sk_buff *skb)
725 {
726 struct hci_rp_read_local_commands *rp = (void *) skb->data;
727
728 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
729
730 if (rp->status)
731 goto done;
732
733 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
734
735 if (test_bit(HCI_INIT, &hdev->flags) && (hdev->commands[5] & 0x10))
736 hci_setup_link_policy(hdev);
737
738 done:
739 hci_req_complete(hdev, HCI_OP_READ_LOCAL_COMMANDS, rp->status);
740 }
741
742 static void hci_cc_read_local_features(struct hci_dev *hdev,
743 struct sk_buff *skb)
744 {
745 struct hci_rp_read_local_features *rp = (void *) skb->data;
746
747 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
748
749 if (rp->status)
750 return;
751
752 memcpy(hdev->features, rp->features, 8);
753
754 /* Adjust default settings according to features
755 * supported by device. */
756
757 if (hdev->features[0] & LMP_3SLOT)
758 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
759
760 if (hdev->features[0] & LMP_5SLOT)
761 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
762
763 if (hdev->features[1] & LMP_HV2) {
764 hdev->pkt_type |= (HCI_HV2);
765 hdev->esco_type |= (ESCO_HV2);
766 }
767
768 if (hdev->features[1] & LMP_HV3) {
769 hdev->pkt_type |= (HCI_HV3);
770 hdev->esco_type |= (ESCO_HV3);
771 }
772
773 if (lmp_esco_capable(hdev))
774 hdev->esco_type |= (ESCO_EV3);
775
776 if (hdev->features[4] & LMP_EV4)
777 hdev->esco_type |= (ESCO_EV4);
778
779 if (hdev->features[4] & LMP_EV5)
780 hdev->esco_type |= (ESCO_EV5);
781
782 if (hdev->features[5] & LMP_EDR_ESCO_2M)
783 hdev->esco_type |= (ESCO_2EV3);
784
785 if (hdev->features[5] & LMP_EDR_ESCO_3M)
786 hdev->esco_type |= (ESCO_3EV3);
787
788 if (hdev->features[5] & LMP_EDR_3S_ESCO)
789 hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
790
791 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
792 hdev->features[0], hdev->features[1],
793 hdev->features[2], hdev->features[3],
794 hdev->features[4], hdev->features[5],
795 hdev->features[6], hdev->features[7]);
796 }
797
798 static void hci_set_le_support(struct hci_dev *hdev)
799 {
800 struct hci_cp_write_le_host_supported cp;
801
802 memset(&cp, 0, sizeof(cp));
803
804 if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
805 cp.le = 1;
806 cp.simul = lmp_le_br_capable(hdev);
807 }
808
809 if (cp.le != lmp_host_le_capable(hdev))
810 hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(cp),
811 &cp);
812 }
813
814 static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
815 struct sk_buff *skb)
816 {
817 struct hci_rp_read_local_ext_features *rp = (void *) skb->data;
818
819 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
820
821 if (rp->status)
822 goto done;
823
824 switch (rp->page) {
825 case 0:
826 memcpy(hdev->features, rp->features, 8);
827 break;
828 case 1:
829 memcpy(hdev->host_features, rp->features, 8);
830 break;
831 }
832
833 if (test_bit(HCI_INIT, &hdev->flags) && lmp_le_capable(hdev))
834 hci_set_le_support(hdev);
835
836 done:
837 hci_req_complete(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES, rp->status);
838 }
839
840 static void hci_cc_read_flow_control_mode(struct hci_dev *hdev,
841 struct sk_buff *skb)
842 {
843 struct hci_rp_read_flow_control_mode *rp = (void *) skb->data;
844
845 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
846
847 if (rp->status)
848 return;
849
850 hdev->flow_ctl_mode = rp->mode;
851
852 hci_req_complete(hdev, HCI_OP_READ_FLOW_CONTROL_MODE, rp->status);
853 }
854
855 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
856 {
857 struct hci_rp_read_buffer_size *rp = (void *) skb->data;
858
859 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
860
861 if (rp->status)
862 return;
863
864 hdev->acl_mtu = __le16_to_cpu(rp->acl_mtu);
865 hdev->sco_mtu = rp->sco_mtu;
866 hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
867 hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
868
869 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
870 hdev->sco_mtu = 64;
871 hdev->sco_pkts = 8;
872 }
873
874 hdev->acl_cnt = hdev->acl_pkts;
875 hdev->sco_cnt = hdev->sco_pkts;
876
877 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name, hdev->acl_mtu,
878 hdev->acl_pkts, hdev->sco_mtu, hdev->sco_pkts);
879 }
880
881 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
882 {
883 struct hci_rp_read_bd_addr *rp = (void *) skb->data;
884
885 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
886
887 if (!rp->status)
888 bacpy(&hdev->bdaddr, &rp->bdaddr);
889
890 hci_req_complete(hdev, HCI_OP_READ_BD_ADDR, rp->status);
891 }
892
893 static void hci_cc_read_data_block_size(struct hci_dev *hdev,
894 struct sk_buff *skb)
895 {
896 struct hci_rp_read_data_block_size *rp = (void *) skb->data;
897
898 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
899
900 if (rp->status)
901 return;
902
903 hdev->block_mtu = __le16_to_cpu(rp->max_acl_len);
904 hdev->block_len = __le16_to_cpu(rp->block_len);
905 hdev->num_blocks = __le16_to_cpu(rp->num_blocks);
906
907 hdev->block_cnt = hdev->num_blocks;
908
909 BT_DBG("%s blk mtu %d cnt %d len %d", hdev->name, hdev->block_mtu,
910 hdev->block_cnt, hdev->block_len);
911
912 hci_req_complete(hdev, HCI_OP_READ_DATA_BLOCK_SIZE, rp->status);
913 }
914
915 static void hci_cc_write_ca_timeout(struct hci_dev *hdev, struct sk_buff *skb)
916 {
917 __u8 status = *((__u8 *) skb->data);
918
919 BT_DBG("%s status 0x%2.2x", hdev->name, status);
920
921 hci_req_complete(hdev, HCI_OP_WRITE_CA_TIMEOUT, status);
922 }
923
924 static void hci_cc_read_local_amp_info(struct hci_dev *hdev,
925 struct sk_buff *skb)
926 {
927 struct hci_rp_read_local_amp_info *rp = (void *) skb->data;
928
929 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
930
931 if (rp->status)
932 goto a2mp_rsp;
933
934 hdev->amp_status = rp->amp_status;
935 hdev->amp_total_bw = __le32_to_cpu(rp->total_bw);
936 hdev->amp_max_bw = __le32_to_cpu(rp->max_bw);
937 hdev->amp_min_latency = __le32_to_cpu(rp->min_latency);
938 hdev->amp_max_pdu = __le32_to_cpu(rp->max_pdu);
939 hdev->amp_type = rp->amp_type;
940 hdev->amp_pal_cap = __le16_to_cpu(rp->pal_cap);
941 hdev->amp_assoc_size = __le16_to_cpu(rp->max_assoc_size);
942 hdev->amp_be_flush_to = __le32_to_cpu(rp->be_flush_to);
943 hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to);
944
945 hci_req_complete(hdev, HCI_OP_READ_LOCAL_AMP_INFO, rp->status);
946
947 a2mp_rsp:
948 a2mp_send_getinfo_rsp(hdev);
949 }
950
951 static void hci_cc_read_local_amp_assoc(struct hci_dev *hdev,
952 struct sk_buff *skb)
953 {
954 struct hci_rp_read_local_amp_assoc *rp = (void *) skb->data;
955 struct amp_assoc *assoc = &hdev->loc_assoc;
956 size_t rem_len, frag_len;
957
958 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
959
960 if (rp->status)
961 goto a2mp_rsp;
962
963 frag_len = skb->len - sizeof(*rp);
964 rem_len = __le16_to_cpu(rp->rem_len);
965
966 if (rem_len > frag_len) {
967 BT_DBG("frag_len %zu rem_len %zu", frag_len, rem_len);
968
969 memcpy(assoc->data + assoc->offset, rp->frag, frag_len);
970 assoc->offset += frag_len;
971
972 /* Read other fragments */
973 amp_read_loc_assoc_frag(hdev, rp->phy_handle);
974
975 return;
976 }
977
978 memcpy(assoc->data + assoc->offset, rp->frag, rem_len);
979 assoc->len = assoc->offset + rem_len;
980 assoc->offset = 0;
981
982 a2mp_rsp:
983 /* Send A2MP Rsp when all fragments are received */
984 a2mp_send_getampassoc_rsp(hdev, rp->status);
985 a2mp_send_create_phy_link_req(hdev, rp->status);
986 }
987
988 static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
989 struct sk_buff *skb)
990 {
991 __u8 status = *((__u8 *) skb->data);
992
993 BT_DBG("%s status 0x%2.2x", hdev->name, status);
994
995 hci_req_complete(hdev, HCI_OP_DELETE_STORED_LINK_KEY, status);
996 }
997
998 static void hci_cc_set_event_mask(struct hci_dev *hdev, struct sk_buff *skb)
999 {
1000 __u8 status = *((__u8 *) skb->data);
1001
1002 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1003
1004 hci_req_complete(hdev, HCI_OP_SET_EVENT_MASK, status);
1005 }
1006
1007 static void hci_cc_write_inquiry_mode(struct hci_dev *hdev,
1008 struct sk_buff *skb)
1009 {
1010 __u8 status = *((__u8 *) skb->data);
1011
1012 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1013
1014 hci_req_complete(hdev, HCI_OP_WRITE_INQUIRY_MODE, status);
1015 }
1016
1017 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
1018 struct sk_buff *skb)
1019 {
1020 struct hci_rp_read_inq_rsp_tx_power *rp = (void *) skb->data;
1021
1022 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1023
1024 if (!rp->status)
1025 hdev->inq_tx_power = rp->tx_power;
1026
1027 hci_req_complete(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, rp->status);
1028 }
1029
1030 static void hci_cc_set_event_flt(struct hci_dev *hdev, struct sk_buff *skb)
1031 {
1032 __u8 status = *((__u8 *) skb->data);
1033
1034 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1035
1036 hci_req_complete(hdev, HCI_OP_SET_EVENT_FLT, status);
1037 }
1038
1039 static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
1040 {
1041 struct hci_rp_pin_code_reply *rp = (void *) skb->data;
1042 struct hci_cp_pin_code_reply *cp;
1043 struct hci_conn *conn;
1044
1045 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1046
1047 hci_dev_lock(hdev);
1048
1049 if (test_bit(HCI_MGMT, &hdev->dev_flags))
1050 mgmt_pin_code_reply_complete(hdev, &rp->bdaddr, rp->status);
1051
1052 if (rp->status)
1053 goto unlock;
1054
1055 cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
1056 if (!cp)
1057 goto unlock;
1058
1059 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1060 if (conn)
1061 conn->pin_length = cp->pin_len;
1062
1063 unlock:
1064 hci_dev_unlock(hdev);
1065 }
1066
1067 static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
1068 {
1069 struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
1070
1071 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1072
1073 hci_dev_lock(hdev);
1074
1075 if (test_bit(HCI_MGMT, &hdev->dev_flags))
1076 mgmt_pin_code_neg_reply_complete(hdev, &rp->bdaddr,
1077 rp->status);
1078
1079 hci_dev_unlock(hdev);
1080 }
1081
1082 static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
1083 struct sk_buff *skb)
1084 {
1085 struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
1086
1087 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1088
1089 if (rp->status)
1090 return;
1091
1092 hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
1093 hdev->le_pkts = rp->le_max_pkt;
1094
1095 hdev->le_cnt = hdev->le_pkts;
1096
1097 BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
1098
1099 hci_req_complete(hdev, HCI_OP_LE_READ_BUFFER_SIZE, rp->status);
1100 }
1101
1102 static void hci_cc_le_read_local_features(struct hci_dev *hdev,
1103 struct sk_buff *skb)
1104 {
1105 struct hci_rp_le_read_local_features *rp = (void *) skb->data;
1106
1107 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1108
1109 if (!rp->status)
1110 memcpy(hdev->le_features, rp->features, 8);
1111
1112 hci_req_complete(hdev, HCI_OP_LE_READ_LOCAL_FEATURES, rp->status);
1113 }
1114
1115 static void hci_cc_le_read_adv_tx_power(struct hci_dev *hdev,
1116 struct sk_buff *skb)
1117 {
1118 struct hci_rp_le_read_adv_tx_power *rp = (void *) skb->data;
1119
1120 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1121
1122 if (!rp->status) {
1123 hdev->adv_tx_power = rp->tx_power;
1124 if (!test_bit(HCI_INIT, &hdev->flags))
1125 hci_update_ad(hdev);
1126 }
1127
1128 hci_req_complete(hdev, HCI_OP_LE_READ_ADV_TX_POWER, rp->status);
1129 }
1130
1131 static void hci_cc_le_set_event_mask(struct hci_dev *hdev, struct sk_buff *skb)
1132 {
1133 __u8 status = *((__u8 *) skb->data);
1134
1135 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1136
1137 hci_req_complete(hdev, HCI_OP_LE_SET_EVENT_MASK, status);
1138 }
1139
1140 static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
1141 {
1142 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1143
1144 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1145
1146 hci_dev_lock(hdev);
1147
1148 if (test_bit(HCI_MGMT, &hdev->dev_flags))
1149 mgmt_user_confirm_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 0,
1150 rp->status);
1151
1152 hci_dev_unlock(hdev);
1153 }
1154
1155 static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
1156 struct sk_buff *skb)
1157 {
1158 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1159
1160 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1161
1162 hci_dev_lock(hdev);
1163
1164 if (test_bit(HCI_MGMT, &hdev->dev_flags))
1165 mgmt_user_confirm_neg_reply_complete(hdev, &rp->bdaddr,
1166 ACL_LINK, 0, rp->status);
1167
1168 hci_dev_unlock(hdev);
1169 }
1170
1171 static void hci_cc_user_passkey_reply(struct hci_dev *hdev, struct sk_buff *skb)
1172 {
1173 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1174
1175 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1176
1177 hci_dev_lock(hdev);
1178
1179 if (test_bit(HCI_MGMT, &hdev->dev_flags))
1180 mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr, ACL_LINK,
1181 0, rp->status);
1182
1183 hci_dev_unlock(hdev);
1184 }
1185
1186 static void hci_cc_user_passkey_neg_reply(struct hci_dev *hdev,
1187 struct sk_buff *skb)
1188 {
1189 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1190
1191 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1192
1193 hci_dev_lock(hdev);
1194
1195 if (test_bit(HCI_MGMT, &hdev->dev_flags))
1196 mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr,
1197 ACL_LINK, 0, rp->status);
1198
1199 hci_dev_unlock(hdev);
1200 }
1201
1202 static void hci_cc_read_local_oob_data_reply(struct hci_dev *hdev,
1203 struct sk_buff *skb)
1204 {
1205 struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
1206
1207 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1208
1209 hci_dev_lock(hdev);
1210 mgmt_read_local_oob_data_reply_complete(hdev, rp->hash,
1211 rp->randomizer, rp->status);
1212 hci_dev_unlock(hdev);
1213 }
1214
1215 static void hci_cc_le_set_adv_enable(struct hci_dev *hdev, struct sk_buff *skb)
1216 {
1217 __u8 *sent, status = *((__u8 *) skb->data);
1218
1219 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1220
1221 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_ENABLE);
1222 if (!sent)
1223 return;
1224
1225 hci_dev_lock(hdev);
1226
1227 if (!status) {
1228 if (*sent)
1229 set_bit(HCI_LE_PERIPHERAL, &hdev->dev_flags);
1230 else
1231 clear_bit(HCI_LE_PERIPHERAL, &hdev->dev_flags);
1232 }
1233
1234 hci_dev_unlock(hdev);
1235
1236 if (!test_bit(HCI_INIT, &hdev->flags))
1237 hci_update_ad(hdev);
1238
1239 hci_req_complete(hdev, HCI_OP_LE_SET_ADV_ENABLE, status);
1240 }
1241
1242 static void hci_cc_le_set_scan_param(struct hci_dev *hdev, struct sk_buff *skb)
1243 {
1244 __u8 status = *((__u8 *) skb->data);
1245
1246 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1247
1248 hci_req_complete(hdev, HCI_OP_LE_SET_SCAN_PARAM, status);
1249
1250 if (status) {
1251 hci_dev_lock(hdev);
1252 mgmt_start_discovery_failed(hdev, status);
1253 hci_dev_unlock(hdev);
1254 return;
1255 }
1256 }
1257
1258 static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
1259 struct sk_buff *skb)
1260 {
1261 struct hci_cp_le_set_scan_enable *cp;
1262 __u8 status = *((__u8 *) skb->data);
1263
1264 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1265
1266 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
1267 if (!cp)
1268 return;
1269
1270 switch (cp->enable) {
1271 case LE_SCANNING_ENABLED:
1272 hci_req_complete(hdev, HCI_OP_LE_SET_SCAN_ENABLE, status);
1273
1274 if (status) {
1275 hci_dev_lock(hdev);
1276 mgmt_start_discovery_failed(hdev, status);
1277 hci_dev_unlock(hdev);
1278 return;
1279 }
1280
1281 set_bit(HCI_LE_SCAN, &hdev->dev_flags);
1282
1283 hci_dev_lock(hdev);
1284 hci_discovery_set_state(hdev, DISCOVERY_FINDING);
1285 hci_dev_unlock(hdev);
1286 break;
1287
1288 case LE_SCANNING_DISABLED:
1289 if (status) {
1290 hci_dev_lock(hdev);
1291 mgmt_stop_discovery_failed(hdev, status);
1292 hci_dev_unlock(hdev);
1293 return;
1294 }
1295
1296 clear_bit(HCI_LE_SCAN, &hdev->dev_flags);
1297
1298 if (hdev->discovery.type == DISCOV_TYPE_INTERLEAVED &&
1299 hdev->discovery.state == DISCOVERY_FINDING) {
1300 mgmt_interleaved_discovery(hdev);
1301 } else {
1302 hci_dev_lock(hdev);
1303 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1304 hci_dev_unlock(hdev);
1305 }
1306
1307 break;
1308
1309 default:
1310 BT_ERR("Used reserved LE_Scan_Enable param %d", cp->enable);
1311 break;
1312 }
1313 }
1314
1315 static void hci_cc_le_read_white_list_size(struct hci_dev *hdev,
1316 struct sk_buff *skb)
1317 {
1318 struct hci_rp_le_read_white_list_size *rp = (void *) skb->data;
1319
1320 BT_DBG("%s status 0x%2.2x size %u", hdev->name, rp->status, rp->size);
1321
1322 if (!rp->status)
1323 hdev->le_white_list_size = rp->size;
1324
1325 hci_req_complete(hdev, HCI_OP_LE_READ_WHITE_LIST_SIZE, rp->status);
1326 }
1327
1328 static void hci_cc_le_ltk_reply(struct hci_dev *hdev, struct sk_buff *skb)
1329 {
1330 struct hci_rp_le_ltk_reply *rp = (void *) skb->data;
1331
1332 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1333
1334 if (rp->status)
1335 return;
1336
1337 hci_req_complete(hdev, HCI_OP_LE_LTK_REPLY, rp->status);
1338 }
1339
1340 static void hci_cc_le_ltk_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
1341 {
1342 struct hci_rp_le_ltk_neg_reply *rp = (void *) skb->data;
1343
1344 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1345
1346 if (rp->status)
1347 return;
1348
1349 hci_req_complete(hdev, HCI_OP_LE_LTK_NEG_REPLY, rp->status);
1350 }
1351
1352 static void hci_cc_le_read_supported_states(struct hci_dev *hdev,
1353 struct sk_buff *skb)
1354 {
1355 struct hci_rp_le_read_supported_states *rp = (void *) skb->data;
1356
1357 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1358
1359 if (!rp->status)
1360 memcpy(hdev->le_states, rp->le_states, 8);
1361
1362 hci_req_complete(hdev, HCI_OP_LE_READ_SUPPORTED_STATES, rp->status);
1363 }
1364
1365 static void hci_cc_write_le_host_supported(struct hci_dev *hdev,
1366 struct sk_buff *skb)
1367 {
1368 struct hci_cp_write_le_host_supported *sent;
1369 __u8 status = *((__u8 *) skb->data);
1370
1371 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1372
1373 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED);
1374 if (!sent)
1375 return;
1376
1377 if (!status) {
1378 if (sent->le)
1379 hdev->host_features[0] |= LMP_HOST_LE;
1380 else
1381 hdev->host_features[0] &= ~LMP_HOST_LE;
1382
1383 if (sent->simul)
1384 hdev->host_features[0] |= LMP_HOST_LE_BREDR;
1385 else
1386 hdev->host_features[0] &= ~LMP_HOST_LE_BREDR;
1387 }
1388
1389 if (test_bit(HCI_MGMT, &hdev->dev_flags) &&
1390 !test_bit(HCI_INIT, &hdev->flags))
1391 mgmt_le_enable_complete(hdev, sent->le, status);
1392
1393 hci_req_complete(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, status);
1394 }
1395
1396 static void hci_cc_write_remote_amp_assoc(struct hci_dev *hdev,
1397 struct sk_buff *skb)
1398 {
1399 struct hci_rp_write_remote_amp_assoc *rp = (void *) skb->data;
1400
1401 BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1402 hdev->name, rp->status, rp->phy_handle);
1403
1404 if (rp->status)
1405 return;
1406
1407 amp_write_rem_assoc_continue(hdev, rp->phy_handle);
1408 }
1409
1410 static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
1411 {
1412 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1413
1414 if (status) {
1415 hci_req_complete(hdev, HCI_OP_INQUIRY, status);
1416 hci_conn_check_pending(hdev);
1417 hci_dev_lock(hdev);
1418 if (test_bit(HCI_MGMT, &hdev->dev_flags))
1419 mgmt_start_discovery_failed(hdev, status);
1420 hci_dev_unlock(hdev);
1421 return;
1422 }
1423
1424 set_bit(HCI_INQUIRY, &hdev->flags);
1425
1426 hci_dev_lock(hdev);
1427 hci_discovery_set_state(hdev, DISCOVERY_FINDING);
1428 hci_dev_unlock(hdev);
1429 }
1430
1431 static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
1432 {
1433 struct hci_cp_create_conn *cp;
1434 struct hci_conn *conn;
1435
1436 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1437
1438 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
1439 if (!cp)
1440 return;
1441
1442 hci_dev_lock(hdev);
1443
1444 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1445
1446 BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn);
1447
1448 if (status) {
1449 if (conn && conn->state == BT_CONNECT) {
1450 if (status != 0x0c || conn->attempt > 2) {
1451 conn->state = BT_CLOSED;
1452 hci_proto_connect_cfm(conn, status);
1453 hci_conn_del(conn);
1454 } else
1455 conn->state = BT_CONNECT2;
1456 }
1457 } else {
1458 if (!conn) {
1459 conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
1460 if (conn) {
1461 conn->out = true;
1462 conn->link_mode |= HCI_LM_MASTER;
1463 } else
1464 BT_ERR("No memory for new connection");
1465 }
1466 }
1467
1468 hci_dev_unlock(hdev);
1469 }
1470
1471 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
1472 {
1473 struct hci_cp_add_sco *cp;
1474 struct hci_conn *acl, *sco;
1475 __u16 handle;
1476
1477 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1478
1479 if (!status)
1480 return;
1481
1482 cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
1483 if (!cp)
1484 return;
1485
1486 handle = __le16_to_cpu(cp->handle);
1487
1488 BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1489
1490 hci_dev_lock(hdev);
1491
1492 acl = hci_conn_hash_lookup_handle(hdev, handle);
1493 if (acl) {
1494 sco = acl->link;
1495 if (sco) {
1496 sco->state = BT_CLOSED;
1497
1498 hci_proto_connect_cfm(sco, status);
1499 hci_conn_del(sco);
1500 }
1501 }
1502
1503 hci_dev_unlock(hdev);
1504 }
1505
1506 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
1507 {
1508 struct hci_cp_auth_requested *cp;
1509 struct hci_conn *conn;
1510
1511 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1512
1513 if (!status)
1514 return;
1515
1516 cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
1517 if (!cp)
1518 return;
1519
1520 hci_dev_lock(hdev);
1521
1522 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1523 if (conn) {
1524 if (conn->state == BT_CONFIG) {
1525 hci_proto_connect_cfm(conn, status);
1526 hci_conn_put(conn);
1527 }
1528 }
1529
1530 hci_dev_unlock(hdev);
1531 }
1532
1533 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
1534 {
1535 struct hci_cp_set_conn_encrypt *cp;
1536 struct hci_conn *conn;
1537
1538 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1539
1540 if (!status)
1541 return;
1542
1543 cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
1544 if (!cp)
1545 return;
1546
1547 hci_dev_lock(hdev);
1548
1549 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1550 if (conn) {
1551 if (conn->state == BT_CONFIG) {
1552 hci_proto_connect_cfm(conn, status);
1553 hci_conn_put(conn);
1554 }
1555 }
1556
1557 hci_dev_unlock(hdev);
1558 }
1559
1560 static int hci_outgoing_auth_needed(struct hci_dev *hdev,
1561 struct hci_conn *conn)
1562 {
1563 if (conn->state != BT_CONFIG || !conn->out)
1564 return 0;
1565
1566 if (conn->pending_sec_level == BT_SECURITY_SDP)
1567 return 0;
1568
1569 /* Only request authentication for SSP connections or non-SSP
1570 * devices with sec_level HIGH or if MITM protection is requested */
1571 if (!hci_conn_ssp_enabled(conn) && !(conn->auth_type & 0x01) &&
1572 conn->pending_sec_level != BT_SECURITY_HIGH)
1573 return 0;
1574
1575 return 1;
1576 }
1577
1578 static int hci_resolve_name(struct hci_dev *hdev,
1579 struct inquiry_entry *e)
1580 {
1581 struct hci_cp_remote_name_req cp;
1582
1583 memset(&cp, 0, sizeof(cp));
1584
1585 bacpy(&cp.bdaddr, &e->data.bdaddr);
1586 cp.pscan_rep_mode = e->data.pscan_rep_mode;
1587 cp.pscan_mode = e->data.pscan_mode;
1588 cp.clock_offset = e->data.clock_offset;
1589
1590 return hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1591 }
1592
1593 static bool hci_resolve_next_name(struct hci_dev *hdev)
1594 {
1595 struct discovery_state *discov = &hdev->discovery;
1596 struct inquiry_entry *e;
1597
1598 if (list_empty(&discov->resolve))
1599 return false;
1600
1601 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1602 if (!e)
1603 return false;
1604
1605 if (hci_resolve_name(hdev, e) == 0) {
1606 e->name_state = NAME_PENDING;
1607 return true;
1608 }
1609
1610 return false;
1611 }
1612
1613 static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
1614 bdaddr_t *bdaddr, u8 *name, u8 name_len)
1615 {
1616 struct discovery_state *discov = &hdev->discovery;
1617 struct inquiry_entry *e;
1618
1619 if (conn && !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
1620 mgmt_device_connected(hdev, bdaddr, ACL_LINK, 0x00, 0, name,
1621 name_len, conn->dev_class);
1622
1623 if (discov->state == DISCOVERY_STOPPED)
1624 return;
1625
1626 if (discov->state == DISCOVERY_STOPPING)
1627 goto discov_complete;
1628
1629 if (discov->state != DISCOVERY_RESOLVING)
1630 return;
1631
1632 e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
1633 /* If the device was not found in a list of found devices names of which
1634 * are pending. there is no need to continue resolving a next name as it
1635 * will be done upon receiving another Remote Name Request Complete
1636 * Event */
1637 if (!e)
1638 return;
1639
1640 list_del(&e->list);
1641 if (name) {
1642 e->name_state = NAME_KNOWN;
1643 mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
1644 e->data.rssi, name, name_len);
1645 } else {
1646 e->name_state = NAME_NOT_KNOWN;
1647 }
1648
1649 if (hci_resolve_next_name(hdev))
1650 return;
1651
1652 discov_complete:
1653 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1654 }
1655
1656 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
1657 {
1658 struct hci_cp_remote_name_req *cp;
1659 struct hci_conn *conn;
1660
1661 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1662
1663 /* If successful wait for the name req complete event before
1664 * checking for the need to do authentication */
1665 if (!status)
1666 return;
1667
1668 cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
1669 if (!cp)
1670 return;
1671
1672 hci_dev_lock(hdev);
1673
1674 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1675
1676 if (test_bit(HCI_MGMT, &hdev->dev_flags))
1677 hci_check_pending_name(hdev, conn, &cp->bdaddr, NULL, 0);
1678
1679 if (!conn)
1680 goto unlock;
1681
1682 if (!hci_outgoing_auth_needed(hdev, conn))
1683 goto unlock;
1684
1685 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1686 struct hci_cp_auth_requested cp;
1687 cp.handle = __cpu_to_le16(conn->handle);
1688 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
1689 }
1690
1691 unlock:
1692 hci_dev_unlock(hdev);
1693 }
1694
1695 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
1696 {
1697 struct hci_cp_read_remote_features *cp;
1698 struct hci_conn *conn;
1699
1700 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1701
1702 if (!status)
1703 return;
1704
1705 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
1706 if (!cp)
1707 return;
1708
1709 hci_dev_lock(hdev);
1710
1711 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1712 if (conn) {
1713 if (conn->state == BT_CONFIG) {
1714 hci_proto_connect_cfm(conn, status);
1715 hci_conn_put(conn);
1716 }
1717 }
1718
1719 hci_dev_unlock(hdev);
1720 }
1721
1722 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
1723 {
1724 struct hci_cp_read_remote_ext_features *cp;
1725 struct hci_conn *conn;
1726
1727 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1728
1729 if (!status)
1730 return;
1731
1732 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
1733 if (!cp)
1734 return;
1735
1736 hci_dev_lock(hdev);
1737
1738 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1739 if (conn) {
1740 if (conn->state == BT_CONFIG) {
1741 hci_proto_connect_cfm(conn, status);
1742 hci_conn_put(conn);
1743 }
1744 }
1745
1746 hci_dev_unlock(hdev);
1747 }
1748
1749 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
1750 {
1751 struct hci_cp_setup_sync_conn *cp;
1752 struct hci_conn *acl, *sco;
1753 __u16 handle;
1754
1755 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1756
1757 if (!status)
1758 return;
1759
1760 cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
1761 if (!cp)
1762 return;
1763
1764 handle = __le16_to_cpu(cp->handle);
1765
1766 BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1767
1768 hci_dev_lock(hdev);
1769
1770 acl = hci_conn_hash_lookup_handle(hdev, handle);
1771 if (acl) {
1772 sco = acl->link;
1773 if (sco) {
1774 sco->state = BT_CLOSED;
1775
1776 hci_proto_connect_cfm(sco, status);
1777 hci_conn_del(sco);
1778 }
1779 }
1780
1781 hci_dev_unlock(hdev);
1782 }
1783
1784 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
1785 {
1786 struct hci_cp_sniff_mode *cp;
1787 struct hci_conn *conn;
1788
1789 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1790
1791 if (!status)
1792 return;
1793
1794 cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
1795 if (!cp)
1796 return;
1797
1798 hci_dev_lock(hdev);
1799
1800 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1801 if (conn) {
1802 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1803
1804 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1805 hci_sco_setup(conn, status);
1806 }
1807
1808 hci_dev_unlock(hdev);
1809 }
1810
1811 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
1812 {
1813 struct hci_cp_exit_sniff_mode *cp;
1814 struct hci_conn *conn;
1815
1816 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1817
1818 if (!status)
1819 return;
1820
1821 cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
1822 if (!cp)
1823 return;
1824
1825 hci_dev_lock(hdev);
1826
1827 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1828 if (conn) {
1829 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1830
1831 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1832 hci_sco_setup(conn, status);
1833 }
1834
1835 hci_dev_unlock(hdev);
1836 }
1837
1838 static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
1839 {
1840 struct hci_cp_disconnect *cp;
1841 struct hci_conn *conn;
1842
1843 if (!status)
1844 return;
1845
1846 cp = hci_sent_cmd_data(hdev, HCI_OP_DISCONNECT);
1847 if (!cp)
1848 return;
1849
1850 hci_dev_lock(hdev);
1851
1852 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1853 if (conn)
1854 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
1855 conn->dst_type, status);
1856
1857 hci_dev_unlock(hdev);
1858 }
1859
1860 static void hci_cs_le_create_conn(struct hci_dev *hdev, __u8 status)
1861 {
1862 struct hci_conn *conn;
1863
1864 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1865
1866 if (status) {
1867 hci_dev_lock(hdev);
1868
1869 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
1870 if (!conn) {
1871 hci_dev_unlock(hdev);
1872 return;
1873 }
1874
1875 BT_DBG("%s bdaddr %pMR conn %p", hdev->name, &conn->dst, conn);
1876
1877 conn->state = BT_CLOSED;
1878 mgmt_connect_failed(hdev, &conn->dst, conn->type,
1879 conn->dst_type, status);
1880 hci_proto_connect_cfm(conn, status);
1881 hci_conn_del(conn);
1882
1883 hci_dev_unlock(hdev);
1884 }
1885 }
1886
1887 static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
1888 {
1889 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1890 }
1891
1892 static void hci_cs_create_phylink(struct hci_dev *hdev, u8 status)
1893 {
1894 struct hci_cp_create_phy_link *cp;
1895
1896 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1897
1898 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_PHY_LINK);
1899 if (!cp)
1900 return;
1901
1902 hci_dev_lock(hdev);
1903
1904 if (status) {
1905 struct hci_conn *hcon;
1906
1907 hcon = hci_conn_hash_lookup_handle(hdev, cp->phy_handle);
1908 if (hcon)
1909 hci_conn_del(hcon);
1910 } else {
1911 amp_write_remote_assoc(hdev, cp->phy_handle);
1912 }
1913
1914 hci_dev_unlock(hdev);
1915 }
1916
1917 static void hci_cs_accept_phylink(struct hci_dev *hdev, u8 status)
1918 {
1919 struct hci_cp_accept_phy_link *cp;
1920
1921 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1922
1923 if (status)
1924 return;
1925
1926 cp = hci_sent_cmd_data(hdev, HCI_OP_ACCEPT_PHY_LINK);
1927 if (!cp)
1928 return;
1929
1930 amp_write_remote_assoc(hdev, cp->phy_handle);
1931 }
1932
1933 static void hci_cs_create_logical_link(struct hci_dev *hdev, u8 status)
1934 {
1935 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1936 }
1937
1938 static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1939 {
1940 __u8 status = *((__u8 *) skb->data);
1941 struct discovery_state *discov = &hdev->discovery;
1942 struct inquiry_entry *e;
1943
1944 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1945
1946 hci_req_complete(hdev, HCI_OP_INQUIRY, status);
1947
1948 hci_conn_check_pending(hdev);
1949
1950 if (!test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
1951 return;
1952
1953 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
1954 return;
1955
1956 hci_dev_lock(hdev);
1957
1958 if (discov->state != DISCOVERY_FINDING)
1959 goto unlock;
1960
1961 if (list_empty(&discov->resolve)) {
1962 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1963 goto unlock;
1964 }
1965
1966 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1967 if (e && hci_resolve_name(hdev, e) == 0) {
1968 e->name_state = NAME_PENDING;
1969 hci_discovery_set_state(hdev, DISCOVERY_RESOLVING);
1970 } else {
1971 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1972 }
1973
1974 unlock:
1975 hci_dev_unlock(hdev);
1976 }
1977
1978 static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1979 {
1980 struct inquiry_data data;
1981 struct inquiry_info *info = (void *) (skb->data + 1);
1982 int num_rsp = *((__u8 *) skb->data);
1983
1984 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1985
1986 if (!num_rsp)
1987 return;
1988
1989 if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
1990 return;
1991
1992 hci_dev_lock(hdev);
1993
1994 for (; num_rsp; num_rsp--, info++) {
1995 bool name_known, ssp;
1996
1997 bacpy(&data.bdaddr, &info->bdaddr);
1998 data.pscan_rep_mode = info->pscan_rep_mode;
1999 data.pscan_period_mode = info->pscan_period_mode;
2000 data.pscan_mode = info->pscan_mode;
2001 memcpy(data.dev_class, info->dev_class, 3);
2002 data.clock_offset = info->clock_offset;
2003 data.rssi = 0x00;
2004 data.ssp_mode = 0x00;
2005
2006 name_known = hci_inquiry_cache_update(hdev, &data, false, &ssp);
2007 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2008 info->dev_class, 0, !name_known, ssp, NULL,
2009 0);
2010 }
2011
2012 hci_dev_unlock(hdev);
2013 }
2014
2015 static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2016 {
2017 struct hci_ev_conn_complete *ev = (void *) skb->data;
2018 struct hci_conn *conn;
2019
2020 BT_DBG("%s", hdev->name);
2021
2022 hci_dev_lock(hdev);
2023
2024 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2025 if (!conn) {
2026 if (ev->link_type != SCO_LINK)
2027 goto unlock;
2028
2029 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
2030 if (!conn)
2031 goto unlock;
2032
2033 conn->type = SCO_LINK;
2034 }
2035
2036 if (!ev->status) {
2037 conn->handle = __le16_to_cpu(ev->handle);
2038
2039 if (conn->type == ACL_LINK) {
2040 conn->state = BT_CONFIG;
2041 hci_conn_hold(conn);
2042
2043 if (!conn->out && !hci_conn_ssp_enabled(conn) &&
2044 !hci_find_link_key(hdev, &ev->bdaddr))
2045 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2046 else
2047 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2048 } else
2049 conn->state = BT_CONNECTED;
2050
2051 hci_conn_hold_device(conn);
2052 hci_conn_add_sysfs(conn);
2053
2054 if (test_bit(HCI_AUTH, &hdev->flags))
2055 conn->link_mode |= HCI_LM_AUTH;
2056
2057 if (test_bit(HCI_ENCRYPT, &hdev->flags))
2058 conn->link_mode |= HCI_LM_ENCRYPT;
2059
2060 /* Get remote features */
2061 if (conn->type == ACL_LINK) {
2062 struct hci_cp_read_remote_features cp;
2063 cp.handle = ev->handle;
2064 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
2065 sizeof(cp), &cp);
2066 }
2067
2068 /* Set packet type for incoming connection */
2069 if (!conn->out && hdev->hci_ver < BLUETOOTH_VER_2_0) {
2070 struct hci_cp_change_conn_ptype cp;
2071 cp.handle = ev->handle;
2072 cp.pkt_type = cpu_to_le16(conn->pkt_type);
2073 hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp),
2074 &cp);
2075 }
2076 } else {
2077 conn->state = BT_CLOSED;
2078 if (conn->type == ACL_LINK)
2079 mgmt_connect_failed(hdev, &ev->bdaddr, conn->type,
2080 conn->dst_type, ev->status);
2081 }
2082
2083 if (conn->type == ACL_LINK)
2084 hci_sco_setup(conn, ev->status);
2085
2086 if (ev->status) {
2087 hci_proto_connect_cfm(conn, ev->status);
2088 hci_conn_del(conn);
2089 } else if (ev->link_type != ACL_LINK)
2090 hci_proto_connect_cfm(conn, ev->status);
2091
2092 unlock:
2093 hci_dev_unlock(hdev);
2094
2095 hci_conn_check_pending(hdev);
2096 }
2097
2098 void hci_conn_accept(struct hci_conn *conn, int mask)
2099 {
2100 struct hci_dev *hdev = conn->hdev;
2101
2102 BT_DBG("conn %p", conn);
2103
2104 conn->state = BT_CONFIG;
2105
2106 if (!lmp_esco_capable(hdev)) {
2107 struct hci_cp_accept_conn_req cp;
2108
2109 bacpy(&cp.bdaddr, &conn->dst);
2110
2111 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2112 cp.role = 0x00; /* Become master */
2113 else
2114 cp.role = 0x01; /* Remain slave */
2115
2116 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
2117 } else /* lmp_esco_capable(hdev)) */ {
2118 struct hci_cp_accept_sync_conn_req cp;
2119
2120 bacpy(&cp.bdaddr, &conn->dst);
2121 cp.pkt_type = cpu_to_le16(conn->pkt_type);
2122
2123 cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40);
2124 cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40);
2125 cp.max_latency = __constant_cpu_to_le16(0xffff);
2126 cp.content_format = cpu_to_le16(hdev->voice_setting);
2127 cp.retrans_effort = 0xff;
2128
2129 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
2130 sizeof(cp), &cp);
2131 }
2132 }
2133
2134 static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2135 {
2136 struct hci_ev_conn_request *ev = (void *) skb->data;
2137 int mask = hdev->link_mode;
2138 __u8 flags = 0;
2139
2140 BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
2141 ev->link_type);
2142
2143 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
2144 &flags);
2145
2146 if ((mask & HCI_LM_ACCEPT) &&
2147 !hci_blacklist_lookup(hdev, &ev->bdaddr)) {
2148 /* Connection accepted */
2149 struct inquiry_entry *ie;
2150 struct hci_conn *conn;
2151
2152 hci_dev_lock(hdev);
2153
2154 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2155 if (ie)
2156 memcpy(ie->data.dev_class, ev->dev_class, 3);
2157
2158 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type,
2159 &ev->bdaddr);
2160 if (!conn) {
2161 conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr);
2162 if (!conn) {
2163 BT_ERR("No memory for new connection");
2164 hci_dev_unlock(hdev);
2165 return;
2166 }
2167 }
2168
2169 memcpy(conn->dev_class, ev->dev_class, 3);
2170
2171 hci_dev_unlock(hdev);
2172
2173 if (ev->link_type == ACL_LINK ||
2174 (!(flags & HCI_PROTO_DEFER) && !lmp_esco_capable(hdev))) {
2175 struct hci_cp_accept_conn_req cp;
2176 conn->state = BT_CONNECT;
2177
2178 bacpy(&cp.bdaddr, &ev->bdaddr);
2179
2180 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2181 cp.role = 0x00; /* Become master */
2182 else
2183 cp.role = 0x01; /* Remain slave */
2184
2185 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp),
2186 &cp);
2187 } else if (!(flags & HCI_PROTO_DEFER)) {
2188 struct hci_cp_accept_sync_conn_req cp;
2189 conn->state = BT_CONNECT;
2190
2191 bacpy(&cp.bdaddr, &ev->bdaddr);
2192 cp.pkt_type = cpu_to_le16(conn->pkt_type);
2193
2194 cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40);
2195 cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40);
2196 cp.max_latency = __constant_cpu_to_le16(0xffff);
2197 cp.content_format = cpu_to_le16(hdev->voice_setting);
2198 cp.retrans_effort = 0xff;
2199
2200 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
2201 sizeof(cp), &cp);
2202 } else {
2203 conn->state = BT_CONNECT2;
2204 hci_proto_connect_cfm(conn, 0);
2205 hci_conn_put(conn);
2206 }
2207 } else {
2208 /* Connection rejected */
2209 struct hci_cp_reject_conn_req cp;
2210
2211 bacpy(&cp.bdaddr, &ev->bdaddr);
2212 cp.reason = HCI_ERROR_REJ_BAD_ADDR;
2213 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
2214 }
2215 }
2216
2217 static u8 hci_to_mgmt_reason(u8 err)
2218 {
2219 switch (err) {
2220 case HCI_ERROR_CONNECTION_TIMEOUT:
2221 return MGMT_DEV_DISCONN_TIMEOUT;
2222 case HCI_ERROR_REMOTE_USER_TERM:
2223 case HCI_ERROR_REMOTE_LOW_RESOURCES:
2224 case HCI_ERROR_REMOTE_POWER_OFF:
2225 return MGMT_DEV_DISCONN_REMOTE;
2226 case HCI_ERROR_LOCAL_HOST_TERM:
2227 return MGMT_DEV_DISCONN_LOCAL_HOST;
2228 default:
2229 return MGMT_DEV_DISCONN_UNKNOWN;
2230 }
2231 }
2232
2233 static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2234 {
2235 struct hci_ev_disconn_complete *ev = (void *) skb->data;
2236 struct hci_conn *conn;
2237
2238 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2239
2240 hci_dev_lock(hdev);
2241
2242 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2243 if (!conn)
2244 goto unlock;
2245
2246 if (ev->status == 0)
2247 conn->state = BT_CLOSED;
2248
2249 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags) &&
2250 (conn->type == ACL_LINK || conn->type == LE_LINK)) {
2251 if (ev->status) {
2252 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
2253 conn->dst_type, ev->status);
2254 } else {
2255 u8 reason = hci_to_mgmt_reason(ev->reason);
2256
2257 mgmt_device_disconnected(hdev, &conn->dst, conn->type,
2258 conn->dst_type, reason);
2259 }
2260 }
2261
2262 if (ev->status == 0) {
2263 if (conn->type == ACL_LINK && conn->flush_key)
2264 hci_remove_link_key(hdev, &conn->dst);
2265 hci_proto_disconn_cfm(conn, ev->reason);
2266 hci_conn_del(conn);
2267 }
2268
2269 unlock:
2270 hci_dev_unlock(hdev);
2271 }
2272
2273 static void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2274 {
2275 struct hci_ev_auth_complete *ev = (void *) skb->data;
2276 struct hci_conn *conn;
2277
2278 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2279
2280 hci_dev_lock(hdev);
2281
2282 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2283 if (!conn)
2284 goto unlock;
2285
2286 if (!ev->status) {
2287 if (!hci_conn_ssp_enabled(conn) &&
2288 test_bit(HCI_CONN_REAUTH_PEND, &conn->flags)) {
2289 BT_INFO("re-auth of legacy device is not possible.");
2290 } else {
2291 conn->link_mode |= HCI_LM_AUTH;
2292 conn->sec_level = conn->pending_sec_level;
2293 }
2294 } else {
2295 mgmt_auth_failed(hdev, &conn->dst, conn->type, conn->dst_type,
2296 ev->status);
2297 }
2298
2299 clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2300 clear_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
2301
2302 if (conn->state == BT_CONFIG) {
2303 if (!ev->status && hci_conn_ssp_enabled(conn)) {
2304 struct hci_cp_set_conn_encrypt cp;
2305 cp.handle = ev->handle;
2306 cp.encrypt = 0x01;
2307 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2308 &cp);
2309 } else {
2310 conn->state = BT_CONNECTED;
2311 hci_proto_connect_cfm(conn, ev->status);
2312 hci_conn_put(conn);
2313 }
2314 } else {
2315 hci_auth_cfm(conn, ev->status);
2316
2317 hci_conn_hold(conn);
2318 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2319 hci_conn_put(conn);
2320 }
2321
2322 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
2323 if (!ev->status) {
2324 struct hci_cp_set_conn_encrypt cp;
2325 cp.handle = ev->handle;
2326 cp.encrypt = 0x01;
2327 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2328 &cp);
2329 } else {
2330 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2331 hci_encrypt_cfm(conn, ev->status, 0x00);
2332 }
2333 }
2334
2335 unlock:
2336 hci_dev_unlock(hdev);
2337 }
2338
2339 static void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
2340 {
2341 struct hci_ev_remote_name *ev = (void *) skb->data;
2342 struct hci_conn *conn;
2343
2344 BT_DBG("%s", hdev->name);
2345
2346 hci_conn_check_pending(hdev);
2347
2348 hci_dev_lock(hdev);
2349
2350 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2351
2352 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
2353 goto check_auth;
2354
2355 if (ev->status == 0)
2356 hci_check_pending_name(hdev, conn, &ev->bdaddr, ev->name,
2357 strnlen(ev->name, HCI_MAX_NAME_LENGTH));
2358 else
2359 hci_check_pending_name(hdev, conn, &ev->bdaddr, NULL, 0);
2360
2361 check_auth:
2362 if (!conn)
2363 goto unlock;
2364
2365 if (!hci_outgoing_auth_needed(hdev, conn))
2366 goto unlock;
2367
2368 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
2369 struct hci_cp_auth_requested cp;
2370 cp.handle = __cpu_to_le16(conn->handle);
2371 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
2372 }
2373
2374 unlock:
2375 hci_dev_unlock(hdev);
2376 }
2377
2378 static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2379 {
2380 struct hci_ev_encrypt_change *ev = (void *) skb->data;
2381 struct hci_conn *conn;
2382
2383 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2384
2385 hci_dev_lock(hdev);
2386
2387 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2388 if (conn) {
2389 if (!ev->status) {
2390 if (ev->encrypt) {
2391 /* Encryption implies authentication */
2392 conn->link_mode |= HCI_LM_AUTH;
2393 conn->link_mode |= HCI_LM_ENCRYPT;
2394 conn->sec_level = conn->pending_sec_level;
2395 } else
2396 conn->link_mode &= ~HCI_LM_ENCRYPT;
2397 }
2398
2399 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2400
2401 if (ev->status && conn->state == BT_CONNECTED) {
2402 hci_acl_disconn(conn, HCI_ERROR_AUTH_FAILURE);
2403 hci_conn_put(conn);
2404 goto unlock;
2405 }
2406
2407 if (conn->state == BT_CONFIG) {
2408 if (!ev->status)
2409 conn->state = BT_CONNECTED;
2410
2411 hci_proto_connect_cfm(conn, ev->status);
2412 hci_conn_put(conn);
2413 } else
2414 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
2415 }
2416
2417 unlock:
2418 hci_dev_unlock(hdev);
2419 }
2420
2421 static void hci_change_link_key_complete_evt(struct hci_dev *hdev,
2422 struct sk_buff *skb)
2423 {
2424 struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
2425 struct hci_conn *conn;
2426
2427 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2428
2429 hci_dev_lock(hdev);
2430
2431 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2432 if (conn) {
2433 if (!ev->status)
2434 conn->link_mode |= HCI_LM_SECURE;
2435
2436 clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2437
2438 hci_key_change_cfm(conn, ev->status);
2439 }
2440
2441 hci_dev_unlock(hdev);
2442 }
2443
2444 static void hci_remote_features_evt(struct hci_dev *hdev,
2445 struct sk_buff *skb)
2446 {
2447 struct hci_ev_remote_features *ev = (void *) skb->data;
2448 struct hci_conn *conn;
2449
2450 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2451
2452 hci_dev_lock(hdev);
2453
2454 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2455 if (!conn)
2456 goto unlock;
2457
2458 if (!ev->status)
2459 memcpy(conn->features, ev->features, 8);
2460
2461 if (conn->state != BT_CONFIG)
2462 goto unlock;
2463
2464 if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
2465 struct hci_cp_read_remote_ext_features cp;
2466 cp.handle = ev->handle;
2467 cp.page = 0x01;
2468 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
2469 sizeof(cp), &cp);
2470 goto unlock;
2471 }
2472
2473 if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
2474 struct hci_cp_remote_name_req cp;
2475 memset(&cp, 0, sizeof(cp));
2476 bacpy(&cp.bdaddr, &conn->dst);
2477 cp.pscan_rep_mode = 0x02;
2478 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2479 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2480 mgmt_device_connected(hdev, &conn->dst, conn->type,
2481 conn->dst_type, 0, NULL, 0,
2482 conn->dev_class);
2483
2484 if (!hci_outgoing_auth_needed(hdev, conn)) {
2485 conn->state = BT_CONNECTED;
2486 hci_proto_connect_cfm(conn, ev->status);
2487 hci_conn_put(conn);
2488 }
2489
2490 unlock:
2491 hci_dev_unlock(hdev);
2492 }
2493
2494 static void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
2495 {
2496 BT_DBG("%s", hdev->name);
2497 }
2498
2499 static void hci_qos_setup_complete_evt(struct hci_dev *hdev,
2500 struct sk_buff *skb)
2501 {
2502 BT_DBG("%s", hdev->name);
2503 }
2504
2505 static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2506 {
2507 struct hci_ev_cmd_complete *ev = (void *) skb->data;
2508 __u16 opcode;
2509
2510 skb_pull(skb, sizeof(*ev));
2511
2512 opcode = __le16_to_cpu(ev->opcode);
2513
2514 switch (opcode) {
2515 case HCI_OP_INQUIRY_CANCEL:
2516 hci_cc_inquiry_cancel(hdev, skb);
2517 break;
2518
2519 case HCI_OP_PERIODIC_INQ:
2520 hci_cc_periodic_inq(hdev, skb);
2521 break;
2522
2523 case HCI_OP_EXIT_PERIODIC_INQ:
2524 hci_cc_exit_periodic_inq(hdev, skb);
2525 break;
2526
2527 case HCI_OP_REMOTE_NAME_REQ_CANCEL:
2528 hci_cc_remote_name_req_cancel(hdev, skb);
2529 break;
2530
2531 case HCI_OP_ROLE_DISCOVERY:
2532 hci_cc_role_discovery(hdev, skb);
2533 break;
2534
2535 case HCI_OP_READ_LINK_POLICY:
2536 hci_cc_read_link_policy(hdev, skb);
2537 break;
2538
2539 case HCI_OP_WRITE_LINK_POLICY:
2540 hci_cc_write_link_policy(hdev, skb);
2541 break;
2542
2543 case HCI_OP_READ_DEF_LINK_POLICY:
2544 hci_cc_read_def_link_policy(hdev, skb);
2545 break;
2546
2547 case HCI_OP_WRITE_DEF_LINK_POLICY:
2548 hci_cc_write_def_link_policy(hdev, skb);
2549 break;
2550
2551 case HCI_OP_RESET:
2552 hci_cc_reset(hdev, skb);
2553 break;
2554
2555 case HCI_OP_WRITE_LOCAL_NAME:
2556 hci_cc_write_local_name(hdev, skb);
2557 break;
2558
2559 case HCI_OP_READ_LOCAL_NAME:
2560 hci_cc_read_local_name(hdev, skb);
2561 break;
2562
2563 case HCI_OP_WRITE_AUTH_ENABLE:
2564 hci_cc_write_auth_enable(hdev, skb);
2565 break;
2566
2567 case HCI_OP_WRITE_ENCRYPT_MODE:
2568 hci_cc_write_encrypt_mode(hdev, skb);
2569 break;
2570
2571 case HCI_OP_WRITE_SCAN_ENABLE:
2572 hci_cc_write_scan_enable(hdev, skb);
2573 break;
2574
2575 case HCI_OP_READ_CLASS_OF_DEV:
2576 hci_cc_read_class_of_dev(hdev, skb);
2577 break;
2578
2579 case HCI_OP_WRITE_CLASS_OF_DEV:
2580 hci_cc_write_class_of_dev(hdev, skb);
2581 break;
2582
2583 case HCI_OP_READ_VOICE_SETTING:
2584 hci_cc_read_voice_setting(hdev, skb);
2585 break;
2586
2587 case HCI_OP_WRITE_VOICE_SETTING:
2588 hci_cc_write_voice_setting(hdev, skb);
2589 break;
2590
2591 case HCI_OP_HOST_BUFFER_SIZE:
2592 hci_cc_host_buffer_size(hdev, skb);
2593 break;
2594
2595 case HCI_OP_WRITE_SSP_MODE:
2596 hci_cc_write_ssp_mode(hdev, skb);
2597 break;
2598
2599 case HCI_OP_READ_LOCAL_VERSION:
2600 hci_cc_read_local_version(hdev, skb);
2601 break;
2602
2603 case HCI_OP_READ_LOCAL_COMMANDS:
2604 hci_cc_read_local_commands(hdev, skb);
2605 break;
2606
2607 case HCI_OP_READ_LOCAL_FEATURES:
2608 hci_cc_read_local_features(hdev, skb);
2609 break;
2610
2611 case HCI_OP_READ_LOCAL_EXT_FEATURES:
2612 hci_cc_read_local_ext_features(hdev, skb);
2613 break;
2614
2615 case HCI_OP_READ_BUFFER_SIZE:
2616 hci_cc_read_buffer_size(hdev, skb);
2617 break;
2618
2619 case HCI_OP_READ_BD_ADDR:
2620 hci_cc_read_bd_addr(hdev, skb);
2621 break;
2622
2623 case HCI_OP_READ_DATA_BLOCK_SIZE:
2624 hci_cc_read_data_block_size(hdev, skb);
2625 break;
2626
2627 case HCI_OP_WRITE_CA_TIMEOUT:
2628 hci_cc_write_ca_timeout(hdev, skb);
2629 break;
2630
2631 case HCI_OP_READ_FLOW_CONTROL_MODE:
2632 hci_cc_read_flow_control_mode(hdev, skb);
2633 break;
2634
2635 case HCI_OP_READ_LOCAL_AMP_INFO:
2636 hci_cc_read_local_amp_info(hdev, skb);
2637 break;
2638
2639 case HCI_OP_READ_LOCAL_AMP_ASSOC:
2640 hci_cc_read_local_amp_assoc(hdev, skb);
2641 break;
2642
2643 case HCI_OP_DELETE_STORED_LINK_KEY:
2644 hci_cc_delete_stored_link_key(hdev, skb);
2645 break;
2646
2647 case HCI_OP_SET_EVENT_MASK:
2648 hci_cc_set_event_mask(hdev, skb);
2649 break;
2650
2651 case HCI_OP_WRITE_INQUIRY_MODE:
2652 hci_cc_write_inquiry_mode(hdev, skb);
2653 break;
2654
2655 case HCI_OP_READ_INQ_RSP_TX_POWER:
2656 hci_cc_read_inq_rsp_tx_power(hdev, skb);
2657 break;
2658
2659 case HCI_OP_SET_EVENT_FLT:
2660 hci_cc_set_event_flt(hdev, skb);
2661 break;
2662
2663 case HCI_OP_PIN_CODE_REPLY:
2664 hci_cc_pin_code_reply(hdev, skb);
2665 break;
2666
2667 case HCI_OP_PIN_CODE_NEG_REPLY:
2668 hci_cc_pin_code_neg_reply(hdev, skb);
2669 break;
2670
2671 case HCI_OP_READ_LOCAL_OOB_DATA:
2672 hci_cc_read_local_oob_data_reply(hdev, skb);
2673 break;
2674
2675 case HCI_OP_LE_READ_BUFFER_SIZE:
2676 hci_cc_le_read_buffer_size(hdev, skb);
2677 break;
2678
2679 case HCI_OP_LE_READ_LOCAL_FEATURES:
2680 hci_cc_le_read_local_features(hdev, skb);
2681 break;
2682
2683 case HCI_OP_LE_READ_ADV_TX_POWER:
2684 hci_cc_le_read_adv_tx_power(hdev, skb);
2685 break;
2686
2687 case HCI_OP_LE_SET_EVENT_MASK:
2688 hci_cc_le_set_event_mask(hdev, skb);
2689 break;
2690
2691 case HCI_OP_USER_CONFIRM_REPLY:
2692 hci_cc_user_confirm_reply(hdev, skb);
2693 break;
2694
2695 case HCI_OP_USER_CONFIRM_NEG_REPLY:
2696 hci_cc_user_confirm_neg_reply(hdev, skb);
2697 break;
2698
2699 case HCI_OP_USER_PASSKEY_REPLY:
2700 hci_cc_user_passkey_reply(hdev, skb);
2701 break;
2702
2703 case HCI_OP_USER_PASSKEY_NEG_REPLY:
2704 hci_cc_user_passkey_neg_reply(hdev, skb);
2705 break;
2706
2707 case HCI_OP_LE_SET_SCAN_PARAM:
2708 hci_cc_le_set_scan_param(hdev, skb);
2709 break;
2710
2711 case HCI_OP_LE_SET_ADV_ENABLE:
2712 hci_cc_le_set_adv_enable(hdev, skb);
2713 break;
2714
2715 case HCI_OP_LE_SET_SCAN_ENABLE:
2716 hci_cc_le_set_scan_enable(hdev, skb);
2717 break;
2718
2719 case HCI_OP_LE_READ_WHITE_LIST_SIZE:
2720 hci_cc_le_read_white_list_size(hdev, skb);
2721 break;
2722
2723 case HCI_OP_LE_LTK_REPLY:
2724 hci_cc_le_ltk_reply(hdev, skb);
2725 break;
2726
2727 case HCI_OP_LE_LTK_NEG_REPLY:
2728 hci_cc_le_ltk_neg_reply(hdev, skb);
2729 break;
2730
2731 case HCI_OP_LE_READ_SUPPORTED_STATES:
2732 hci_cc_le_read_supported_states(hdev, skb);
2733 break;
2734
2735 case HCI_OP_WRITE_LE_HOST_SUPPORTED:
2736 hci_cc_write_le_host_supported(hdev, skb);
2737 break;
2738
2739 case HCI_OP_WRITE_REMOTE_AMP_ASSOC:
2740 hci_cc_write_remote_amp_assoc(hdev, skb);
2741 break;
2742
2743 default:
2744 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2745 break;
2746 }
2747
2748 if (ev->opcode != HCI_OP_NOP)
2749 del_timer(&hdev->cmd_timer);
2750
2751 if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2752 atomic_set(&hdev->cmd_cnt, 1);
2753 if (!skb_queue_empty(&hdev->cmd_q))
2754 queue_work(hdev->workqueue, &hdev->cmd_work);
2755 }
2756 }
2757
2758 static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
2759 {
2760 struct hci_ev_cmd_status *ev = (void *) skb->data;
2761 __u16 opcode;
2762
2763 skb_pull(skb, sizeof(*ev));
2764
2765 opcode = __le16_to_cpu(ev->opcode);
2766
2767 switch (opcode) {
2768 case HCI_OP_INQUIRY:
2769 hci_cs_inquiry(hdev, ev->status);
2770 break;
2771
2772 case HCI_OP_CREATE_CONN:
2773 hci_cs_create_conn(hdev, ev->status);
2774 break;
2775
2776 case HCI_OP_ADD_SCO:
2777 hci_cs_add_sco(hdev, ev->status);
2778 break;
2779
2780 case HCI_OP_AUTH_REQUESTED:
2781 hci_cs_auth_requested(hdev, ev->status);
2782 break;
2783
2784 case HCI_OP_SET_CONN_ENCRYPT:
2785 hci_cs_set_conn_encrypt(hdev, ev->status);
2786 break;
2787
2788 case HCI_OP_REMOTE_NAME_REQ:
2789 hci_cs_remote_name_req(hdev, ev->status);
2790 break;
2791
2792 case HCI_OP_READ_REMOTE_FEATURES:
2793 hci_cs_read_remote_features(hdev, ev->status);
2794 break;
2795
2796 case HCI_OP_READ_REMOTE_EXT_FEATURES:
2797 hci_cs_read_remote_ext_features(hdev, ev->status);
2798 break;
2799
2800 case HCI_OP_SETUP_SYNC_CONN:
2801 hci_cs_setup_sync_conn(hdev, ev->status);
2802 break;
2803
2804 case HCI_OP_SNIFF_MODE:
2805 hci_cs_sniff_mode(hdev, ev->status);
2806 break;
2807
2808 case HCI_OP_EXIT_SNIFF_MODE:
2809 hci_cs_exit_sniff_mode(hdev, ev->status);
2810 break;
2811
2812 case HCI_OP_DISCONNECT:
2813 hci_cs_disconnect(hdev, ev->status);
2814 break;
2815
2816 case HCI_OP_LE_CREATE_CONN:
2817 hci_cs_le_create_conn(hdev, ev->status);
2818 break;
2819
2820 case HCI_OP_LE_START_ENC:
2821 hci_cs_le_start_enc(hdev, ev->status);
2822 break;
2823
2824 case HCI_OP_CREATE_PHY_LINK:
2825 hci_cs_create_phylink(hdev, ev->status);
2826 break;
2827
2828 case HCI_OP_ACCEPT_PHY_LINK:
2829 hci_cs_accept_phylink(hdev, ev->status);
2830 break;
2831
2832 case HCI_OP_CREATE_LOGICAL_LINK:
2833 hci_cs_create_logical_link(hdev, ev->status);
2834 break;
2835
2836 default:
2837 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2838 break;
2839 }
2840
2841 if (ev->opcode != HCI_OP_NOP)
2842 del_timer(&hdev->cmd_timer);
2843
2844 if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2845 atomic_set(&hdev->cmd_cnt, 1);
2846 if (!skb_queue_empty(&hdev->cmd_q))
2847 queue_work(hdev->workqueue, &hdev->cmd_work);
2848 }
2849 }
2850
2851 static void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2852 {
2853 struct hci_ev_role_change *ev = (void *) skb->data;
2854 struct hci_conn *conn;
2855
2856 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2857
2858 hci_dev_lock(hdev);
2859
2860 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2861 if (conn) {
2862 if (!ev->status) {
2863 if (ev->role)
2864 conn->link_mode &= ~HCI_LM_MASTER;
2865 else
2866 conn->link_mode |= HCI_LM_MASTER;
2867 }
2868
2869 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
2870
2871 hci_role_switch_cfm(conn, ev->status, ev->role);
2872 }
2873
2874 hci_dev_unlock(hdev);
2875 }
2876
2877 static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
2878 {
2879 struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
2880 int i;
2881
2882 if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
2883 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
2884 return;
2885 }
2886
2887 if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
2888 ev->num_hndl * sizeof(struct hci_comp_pkts_info)) {
2889 BT_DBG("%s bad parameters", hdev->name);
2890 return;
2891 }
2892
2893 BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
2894
2895 for (i = 0; i < ev->num_hndl; i++) {
2896 struct hci_comp_pkts_info *info = &ev->handles[i];
2897 struct hci_conn *conn;
2898 __u16 handle, count;
2899
2900 handle = __le16_to_cpu(info->handle);
2901 count = __le16_to_cpu(info->count);
2902
2903 conn = hci_conn_hash_lookup_handle(hdev, handle);
2904 if (!conn)
2905 continue;
2906
2907 conn->sent -= count;
2908
2909 switch (conn->type) {
2910 case ACL_LINK:
2911 hdev->acl_cnt += count;
2912 if (hdev->acl_cnt > hdev->acl_pkts)
2913 hdev->acl_cnt = hdev->acl_pkts;
2914 break;
2915
2916 case LE_LINK:
2917 if (hdev->le_pkts) {
2918 hdev->le_cnt += count;
2919 if (hdev->le_cnt > hdev->le_pkts)
2920 hdev->le_cnt = hdev->le_pkts;
2921 } else {
2922 hdev->acl_cnt += count;
2923 if (hdev->acl_cnt > hdev->acl_pkts)
2924 hdev->acl_cnt = hdev->acl_pkts;
2925 }
2926 break;
2927
2928 case SCO_LINK:
2929 hdev->sco_cnt += count;
2930 if (hdev->sco_cnt > hdev->sco_pkts)
2931 hdev->sco_cnt = hdev->sco_pkts;
2932 break;
2933
2934 default:
2935 BT_ERR("Unknown type %d conn %p", conn->type, conn);
2936 break;
2937 }
2938 }
2939
2940 queue_work(hdev->workqueue, &hdev->tx_work);
2941 }
2942
2943 static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
2944 __u16 handle)
2945 {
2946 struct hci_chan *chan;
2947
2948 switch (hdev->dev_type) {
2949 case HCI_BREDR:
2950 return hci_conn_hash_lookup_handle(hdev, handle);
2951 case HCI_AMP:
2952 chan = hci_chan_lookup_handle(hdev, handle);
2953 if (chan)
2954 return chan->conn;
2955 break;
2956 default:
2957 BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type);
2958 break;
2959 }
2960
2961 return NULL;
2962 }
2963
2964 static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb)
2965 {
2966 struct hci_ev_num_comp_blocks *ev = (void *) skb->data;
2967 int i;
2968
2969 if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
2970 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
2971 return;
2972 }
2973
2974 if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
2975 ev->num_hndl * sizeof(struct hci_comp_blocks_info)) {
2976 BT_DBG("%s bad parameters", hdev->name);
2977 return;
2978 }
2979
2980 BT_DBG("%s num_blocks %d num_hndl %d", hdev->name, ev->num_blocks,
2981 ev->num_hndl);
2982
2983 for (i = 0; i < ev->num_hndl; i++) {
2984 struct hci_comp_blocks_info *info = &ev->handles[i];
2985 struct hci_conn *conn = NULL;
2986 __u16 handle, block_count;
2987
2988 handle = __le16_to_cpu(info->handle);
2989 block_count = __le16_to_cpu(info->blocks);
2990
2991 conn = __hci_conn_lookup_handle(hdev, handle);
2992 if (!conn)
2993 continue;
2994
2995 conn->sent -= block_count;
2996
2997 switch (conn->type) {
2998 case ACL_LINK:
2999 case AMP_LINK:
3000 hdev->block_cnt += block_count;
3001 if (hdev->block_cnt > hdev->num_blocks)
3002 hdev->block_cnt = hdev->num_blocks;
3003 break;
3004
3005 default:
3006 BT_ERR("Unknown type %d conn %p", conn->type, conn);
3007 break;
3008 }
3009 }
3010
3011 queue_work(hdev->workqueue, &hdev->tx_work);
3012 }
3013
3014 static void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3015 {
3016 struct hci_ev_mode_change *ev = (void *) skb->data;
3017 struct hci_conn *conn;
3018
3019 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3020
3021 hci_dev_lock(hdev);
3022
3023 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3024 if (conn) {
3025 conn->mode = ev->mode;
3026 conn->interval = __le16_to_cpu(ev->interval);
3027
3028 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND,
3029 &conn->flags)) {
3030 if (conn->mode == HCI_CM_ACTIVE)
3031 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3032 else
3033 clear_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3034 }
3035
3036 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
3037 hci_sco_setup(conn, ev->status);
3038 }
3039
3040 hci_dev_unlock(hdev);
3041 }
3042
3043 static void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3044 {
3045 struct hci_ev_pin_code_req *ev = (void *) skb->data;
3046 struct hci_conn *conn;
3047
3048 BT_DBG("%s", hdev->name);
3049
3050 hci_dev_lock(hdev);
3051
3052 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3053 if (!conn)
3054 goto unlock;
3055
3056 if (conn->state == BT_CONNECTED) {
3057 hci_conn_hold(conn);
3058 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
3059 hci_conn_put(conn);
3060 }
3061
3062 if (!test_bit(HCI_PAIRABLE, &hdev->dev_flags))
3063 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
3064 sizeof(ev->bdaddr), &ev->bdaddr);
3065 else if (test_bit(HCI_MGMT, &hdev->dev_flags)) {
3066 u8 secure;
3067
3068 if (conn->pending_sec_level == BT_SECURITY_HIGH)
3069 secure = 1;
3070 else
3071 secure = 0;
3072
3073 mgmt_pin_code_request(hdev, &ev->bdaddr, secure);
3074 }
3075
3076 unlock:
3077 hci_dev_unlock(hdev);
3078 }
3079
3080 static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3081 {
3082 struct hci_ev_link_key_req *ev = (void *) skb->data;
3083 struct hci_cp_link_key_reply cp;
3084 struct hci_conn *conn;
3085 struct link_key *key;
3086
3087 BT_DBG("%s", hdev->name);
3088
3089 if (!test_bit(HCI_LINK_KEYS, &hdev->dev_flags))
3090 return;
3091
3092 hci_dev_lock(hdev);
3093
3094 key = hci_find_link_key(hdev, &ev->bdaddr);
3095 if (!key) {
3096 BT_DBG("%s link key not found for %pMR", hdev->name,
3097 &ev->bdaddr);
3098 goto not_found;
3099 }
3100
3101 BT_DBG("%s found key type %u for %pMR", hdev->name, key->type,
3102 &ev->bdaddr);
3103
3104 if (!test_bit(HCI_DEBUG_KEYS, &hdev->dev_flags) &&
3105 key->type == HCI_LK_DEBUG_COMBINATION) {
3106 BT_DBG("%s ignoring debug key", hdev->name);
3107 goto not_found;
3108 }
3109
3110 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3111 if (conn) {
3112 if (key->type == HCI_LK_UNAUTH_COMBINATION &&
3113 conn->auth_type != 0xff && (conn->auth_type & 0x01)) {
3114 BT_DBG("%s ignoring unauthenticated key", hdev->name);
3115 goto not_found;
3116 }
3117
3118 if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
3119 conn->pending_sec_level == BT_SECURITY_HIGH) {
3120 BT_DBG("%s ignoring key unauthenticated for high security",
3121 hdev->name);
3122 goto not_found;
3123 }
3124
3125 conn->key_type = key->type;
3126 conn->pin_length = key->pin_len;
3127 }
3128
3129 bacpy(&cp.bdaddr, &ev->bdaddr);
3130 memcpy(cp.link_key, key->val, HCI_LINK_KEY_SIZE);
3131
3132 hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
3133
3134 hci_dev_unlock(hdev);
3135
3136 return;
3137
3138 not_found:
3139 hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
3140 hci_dev_unlock(hdev);
3141 }
3142
3143 static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3144 {
3145 struct hci_ev_link_key_notify *ev = (void *) skb->data;
3146 struct hci_conn *conn;
3147 u8 pin_len = 0;
3148
3149 BT_DBG("%s", hdev->name);
3150
3151 hci_dev_lock(hdev);
3152
3153 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3154 if (conn) {
3155 hci_conn_hold(conn);
3156 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3157 pin_len = conn->pin_length;
3158
3159 if (ev->key_type != HCI_LK_CHANGED_COMBINATION)
3160 conn->key_type = ev->key_type;
3161
3162 hci_conn_put(conn);
3163 }
3164
3165 if (test_bit(HCI_LINK_KEYS, &hdev->dev_flags))
3166 hci_add_link_key(hdev, conn, 1, &ev->bdaddr, ev->link_key,
3167 ev->key_type, pin_len);
3168
3169 hci_dev_unlock(hdev);
3170 }
3171
3172 static void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
3173 {
3174 struct hci_ev_clock_offset *ev = (void *) skb->data;
3175 struct hci_conn *conn;
3176
3177 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3178
3179 hci_dev_lock(hdev);
3180
3181 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3182 if (conn && !ev->status) {
3183 struct inquiry_entry *ie;
3184
3185 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3186 if (ie) {
3187 ie->data.clock_offset = ev->clock_offset;
3188 ie->timestamp = jiffies;
3189 }
3190 }
3191
3192 hci_dev_unlock(hdev);
3193 }
3194
3195 static void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3196 {
3197 struct hci_ev_pkt_type_change *ev = (void *) skb->data;
3198 struct hci_conn *conn;
3199
3200 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3201
3202 hci_dev_lock(hdev);
3203
3204 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3205 if (conn && !ev->status)
3206 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
3207
3208 hci_dev_unlock(hdev);
3209 }
3210
3211 static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
3212 {
3213 struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
3214 struct inquiry_entry *ie;
3215
3216 BT_DBG("%s", hdev->name);
3217
3218 hci_dev_lock(hdev);
3219
3220 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3221 if (ie) {
3222 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
3223 ie->timestamp = jiffies;
3224 }
3225
3226 hci_dev_unlock(hdev);
3227 }
3228
3229 static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
3230 struct sk_buff *skb)
3231 {
3232 struct inquiry_data data;
3233 int num_rsp = *((__u8 *) skb->data);
3234 bool name_known, ssp;
3235
3236 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3237
3238 if (!num_rsp)
3239 return;
3240
3241 if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
3242 return;
3243
3244 hci_dev_lock(hdev);
3245
3246 if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
3247 struct inquiry_info_with_rssi_and_pscan_mode *info;
3248 info = (void *) (skb->data + 1);
3249
3250 for (; num_rsp; num_rsp--, info++) {
3251 bacpy(&data.bdaddr, &info->bdaddr);
3252 data.pscan_rep_mode = info->pscan_rep_mode;
3253 data.pscan_period_mode = info->pscan_period_mode;
3254 data.pscan_mode = info->pscan_mode;
3255 memcpy(data.dev_class, info->dev_class, 3);
3256 data.clock_offset = info->clock_offset;
3257 data.rssi = info->rssi;
3258 data.ssp_mode = 0x00;
3259
3260 name_known = hci_inquiry_cache_update(hdev, &data,
3261 false, &ssp);
3262 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3263 info->dev_class, info->rssi,
3264 !name_known, ssp, NULL, 0);
3265 }
3266 } else {
3267 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
3268
3269 for (; num_rsp; num_rsp--, info++) {
3270 bacpy(&data.bdaddr, &info->bdaddr);
3271 data.pscan_rep_mode = info->pscan_rep_mode;
3272 data.pscan_period_mode = info->pscan_period_mode;
3273 data.pscan_mode = 0x00;
3274 memcpy(data.dev_class, info->dev_class, 3);
3275 data.clock_offset = info->clock_offset;
3276 data.rssi = info->rssi;
3277 data.ssp_mode = 0x00;
3278 name_known = hci_inquiry_cache_update(hdev, &data,
3279 false, &ssp);
3280 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3281 info->dev_class, info->rssi,
3282 !name_known, ssp, NULL, 0);
3283 }
3284 }
3285
3286 hci_dev_unlock(hdev);
3287 }
3288
3289 static void hci_remote_ext_features_evt(struct hci_dev *hdev,
3290 struct sk_buff *skb)
3291 {
3292 struct hci_ev_remote_ext_features *ev = (void *) skb->data;
3293 struct hci_conn *conn;
3294
3295 BT_DBG("%s", hdev->name);
3296
3297 hci_dev_lock(hdev);
3298
3299 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3300 if (!conn)
3301 goto unlock;
3302
3303 if (!ev->status && ev->page == 0x01) {
3304 struct inquiry_entry *ie;
3305
3306 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3307 if (ie)
3308 ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3309
3310 if (ev->features[0] & LMP_HOST_SSP)
3311 set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3312 }
3313
3314 if (conn->state != BT_CONFIG)
3315 goto unlock;
3316
3317 if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
3318 struct hci_cp_remote_name_req cp;
3319 memset(&cp, 0, sizeof(cp));
3320 bacpy(&cp.bdaddr, &conn->dst);
3321 cp.pscan_rep_mode = 0x02;
3322 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
3323 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3324 mgmt_device_connected(hdev, &conn->dst, conn->type,
3325 conn->dst_type, 0, NULL, 0,
3326 conn->dev_class);
3327
3328 if (!hci_outgoing_auth_needed(hdev, conn)) {
3329 conn->state = BT_CONNECTED;
3330 hci_proto_connect_cfm(conn, ev->status);
3331 hci_conn_put(conn);
3332 }
3333
3334 unlock:
3335 hci_dev_unlock(hdev);
3336 }
3337
3338 static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
3339 struct sk_buff *skb)
3340 {
3341 struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
3342 struct hci_conn *conn;
3343
3344 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3345
3346 hci_dev_lock(hdev);
3347
3348 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
3349 if (!conn) {
3350 if (ev->link_type == ESCO_LINK)
3351 goto unlock;
3352
3353 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
3354 if (!conn)
3355 goto unlock;
3356
3357 conn->type = SCO_LINK;
3358 }
3359
3360 switch (ev->status) {
3361 case 0x00:
3362 conn->handle = __le16_to_cpu(ev->handle);
3363 conn->state = BT_CONNECTED;
3364
3365 hci_conn_hold_device(conn);
3366 hci_conn_add_sysfs(conn);
3367 break;
3368
3369 case 0x11: /* Unsupported Feature or Parameter Value */
3370 case 0x1c: /* SCO interval rejected */
3371 case 0x1a: /* Unsupported Remote Feature */
3372 case 0x1f: /* Unspecified error */
3373 if (conn->out && conn->attempt < 2) {
3374 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
3375 (hdev->esco_type & EDR_ESCO_MASK);
3376 hci_setup_sync(conn, conn->link->handle);
3377 goto unlock;
3378 }
3379 /* fall through */
3380
3381 default:
3382 conn->state = BT_CLOSED;
3383 break;
3384 }
3385
3386 hci_proto_connect_cfm(conn, ev->status);
3387 if (ev->status)
3388 hci_conn_del(conn);
3389
3390 unlock:
3391 hci_dev_unlock(hdev);
3392 }
3393
3394 static void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
3395 {
3396 BT_DBG("%s", hdev->name);
3397 }
3398
3399 static void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
3400 {
3401 struct hci_ev_sniff_subrate *ev = (void *) skb->data;
3402
3403 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3404 }
3405
3406 static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
3407 struct sk_buff *skb)
3408 {
3409 struct inquiry_data data;
3410 struct extended_inquiry_info *info = (void *) (skb->data + 1);
3411 int num_rsp = *((__u8 *) skb->data);
3412 size_t eir_len;
3413
3414 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3415
3416 if (!num_rsp)
3417 return;
3418
3419 if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
3420 return;
3421
3422 hci_dev_lock(hdev);
3423
3424 for (; num_rsp; num_rsp--, info++) {
3425 bool name_known, ssp;
3426
3427 bacpy(&data.bdaddr, &info->bdaddr);
3428 data.pscan_rep_mode = info->pscan_rep_mode;
3429 data.pscan_period_mode = info->pscan_period_mode;
3430 data.pscan_mode = 0x00;
3431 memcpy(data.dev_class, info->dev_class, 3);
3432 data.clock_offset = info->clock_offset;
3433 data.rssi = info->rssi;
3434 data.ssp_mode = 0x01;
3435
3436 if (test_bit(HCI_MGMT, &hdev->dev_flags))
3437 name_known = eir_has_data_type(info->data,
3438 sizeof(info->data),
3439 EIR_NAME_COMPLETE);
3440 else
3441 name_known = true;
3442
3443 name_known = hci_inquiry_cache_update(hdev, &data, name_known,
3444 &ssp);
3445 eir_len = eir_get_length(info->data, sizeof(info->data));
3446 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3447 info->dev_class, info->rssi, !name_known,
3448 ssp, info->data, eir_len);
3449 }
3450
3451 hci_dev_unlock(hdev);
3452 }
3453
3454 static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
3455 struct sk_buff *skb)
3456 {
3457 struct hci_ev_key_refresh_complete *ev = (void *) skb->data;
3458 struct hci_conn *conn;
3459
3460 BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev->name, ev->status,
3461 __le16_to_cpu(ev->handle));
3462
3463 hci_dev_lock(hdev);
3464
3465 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3466 if (!conn)
3467 goto unlock;
3468
3469 if (!ev->status)
3470 conn->sec_level = conn->pending_sec_level;
3471
3472 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
3473
3474 if (ev->status && conn->state == BT_CONNECTED) {
3475 hci_acl_disconn(conn, HCI_ERROR_AUTH_FAILURE);
3476 hci_conn_put(conn);
3477 goto unlock;
3478 }
3479
3480 if (conn->state == BT_CONFIG) {
3481 if (!ev->status)
3482 conn->state = BT_CONNECTED;
3483
3484 hci_proto_connect_cfm(conn, ev->status);
3485 hci_conn_put(conn);
3486 } else {
3487 hci_auth_cfm(conn, ev->status);
3488
3489 hci_conn_hold(conn);
3490 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3491 hci_conn_put(conn);
3492 }
3493
3494 unlock:
3495 hci_dev_unlock(hdev);
3496 }
3497
3498 static u8 hci_get_auth_req(struct hci_conn *conn)
3499 {
3500 /* If remote requests dedicated bonding follow that lead */
3501 if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03) {
3502 /* If both remote and local IO capabilities allow MITM
3503 * protection then require it, otherwise don't */
3504 if (conn->remote_cap == 0x03 || conn->io_capability == 0x03)
3505 return 0x02;
3506 else
3507 return 0x03;
3508 }
3509
3510 /* If remote requests no-bonding follow that lead */
3511 if (conn->remote_auth == 0x00 || conn->remote_auth == 0x01)
3512 return conn->remote_auth | (conn->auth_type & 0x01);
3513
3514 return conn->auth_type;
3515 }
3516
3517 static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3518 {
3519 struct hci_ev_io_capa_request *ev = (void *) skb->data;
3520 struct hci_conn *conn;
3521
3522 BT_DBG("%s", hdev->name);
3523
3524 hci_dev_lock(hdev);
3525
3526 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3527 if (!conn)
3528 goto unlock;
3529
3530 hci_conn_hold(conn);
3531
3532 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3533 goto unlock;
3534
3535 if (test_bit(HCI_PAIRABLE, &hdev->dev_flags) ||
3536 (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
3537 struct hci_cp_io_capability_reply cp;
3538
3539 bacpy(&cp.bdaddr, &ev->bdaddr);
3540 /* Change the IO capability from KeyboardDisplay
3541 * to DisplayYesNo as it is not supported by BT spec. */
3542 cp.capability = (conn->io_capability == 0x04) ?
3543 0x01 : conn->io_capability;
3544 conn->auth_type = hci_get_auth_req(conn);
3545 cp.authentication = conn->auth_type;
3546
3547 if (hci_find_remote_oob_data(hdev, &conn->dst) &&
3548 (conn->out || test_bit(HCI_CONN_REMOTE_OOB, &conn->flags)))
3549 cp.oob_data = 0x01;
3550 else
3551 cp.oob_data = 0x00;
3552
3553 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
3554 sizeof(cp), &cp);
3555 } else {
3556 struct hci_cp_io_capability_neg_reply cp;
3557
3558 bacpy(&cp.bdaddr, &ev->bdaddr);
3559 cp.reason = HCI_ERROR_PAIRING_NOT_ALLOWED;
3560
3561 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
3562 sizeof(cp), &cp);
3563 }
3564
3565 unlock:
3566 hci_dev_unlock(hdev);
3567 }
3568
3569 static void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
3570 {
3571 struct hci_ev_io_capa_reply *ev = (void *) skb->data;
3572 struct hci_conn *conn;
3573
3574 BT_DBG("%s", hdev->name);
3575
3576 hci_dev_lock(hdev);
3577
3578 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3579 if (!conn)
3580 goto unlock;
3581
3582 conn->remote_cap = ev->capability;
3583 conn->remote_auth = ev->authentication;
3584 if (ev->oob_data)
3585 set_bit(HCI_CONN_REMOTE_OOB, &conn->flags);
3586
3587 unlock:
3588 hci_dev_unlock(hdev);
3589 }
3590
3591 static void hci_user_confirm_request_evt(struct hci_dev *hdev,
3592 struct sk_buff *skb)
3593 {
3594 struct hci_ev_user_confirm_req *ev = (void *) skb->data;
3595 int loc_mitm, rem_mitm, confirm_hint = 0;
3596 struct hci_conn *conn;
3597
3598 BT_DBG("%s", hdev->name);
3599
3600 hci_dev_lock(hdev);
3601
3602 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3603 goto unlock;
3604
3605 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3606 if (!conn)
3607 goto unlock;
3608
3609 loc_mitm = (conn->auth_type & 0x01);
3610 rem_mitm = (conn->remote_auth & 0x01);
3611
3612 /* If we require MITM but the remote device can't provide that
3613 * (it has NoInputNoOutput) then reject the confirmation
3614 * request. The only exception is when we're dedicated bonding
3615 * initiators (connect_cfm_cb set) since then we always have the MITM
3616 * bit set. */
3617 if (!conn->connect_cfm_cb && loc_mitm && conn->remote_cap == 0x03) {
3618 BT_DBG("Rejecting request: remote device can't provide MITM");
3619 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
3620 sizeof(ev->bdaddr), &ev->bdaddr);
3621 goto unlock;
3622 }
3623
3624 /* If no side requires MITM protection; auto-accept */
3625 if ((!loc_mitm || conn->remote_cap == 0x03) &&
3626 (!rem_mitm || conn->io_capability == 0x03)) {
3627
3628 /* If we're not the initiators request authorization to
3629 * proceed from user space (mgmt_user_confirm with
3630 * confirm_hint set to 1). */
3631 if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
3632 BT_DBG("Confirming auto-accept as acceptor");
3633 confirm_hint = 1;
3634 goto confirm;
3635 }
3636
3637 BT_DBG("Auto-accept of user confirmation with %ums delay",
3638 hdev->auto_accept_delay);
3639
3640 if (hdev->auto_accept_delay > 0) {
3641 int delay = msecs_to_jiffies(hdev->auto_accept_delay);
3642 mod_timer(&conn->auto_accept_timer, jiffies + delay);
3643 goto unlock;
3644 }
3645
3646 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
3647 sizeof(ev->bdaddr), &ev->bdaddr);
3648 goto unlock;
3649 }
3650
3651 confirm:
3652 mgmt_user_confirm_request(hdev, &ev->bdaddr, ACL_LINK, 0, ev->passkey,
3653 confirm_hint);
3654
3655 unlock:
3656 hci_dev_unlock(hdev);
3657 }
3658
3659 static void hci_user_passkey_request_evt(struct hci_dev *hdev,
3660 struct sk_buff *skb)
3661 {
3662 struct hci_ev_user_passkey_req *ev = (void *) skb->data;
3663
3664 BT_DBG("%s", hdev->name);
3665
3666 if (test_bit(HCI_MGMT, &hdev->dev_flags))
3667 mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0);
3668 }
3669
3670 static void hci_user_passkey_notify_evt(struct hci_dev *hdev,
3671 struct sk_buff *skb)
3672 {
3673 struct hci_ev_user_passkey_notify *ev = (void *) skb->data;
3674 struct hci_conn *conn;
3675
3676 BT_DBG("%s", hdev->name);
3677
3678 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3679 if (!conn)
3680 return;
3681
3682 conn->passkey_notify = __le32_to_cpu(ev->passkey);
3683 conn->passkey_entered = 0;
3684
3685 if (test_bit(HCI_MGMT, &hdev->dev_flags))
3686 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3687 conn->dst_type, conn->passkey_notify,
3688 conn->passkey_entered);
3689 }
3690
3691 static void hci_keypress_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3692 {
3693 struct hci_ev_keypress_notify *ev = (void *) skb->data;
3694 struct hci_conn *conn;
3695
3696 BT_DBG("%s", hdev->name);
3697
3698 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3699 if (!conn)
3700 return;
3701
3702 switch (ev->type) {
3703 case HCI_KEYPRESS_STARTED:
3704 conn->passkey_entered = 0;
3705 return;
3706
3707 case HCI_KEYPRESS_ENTERED:
3708 conn->passkey_entered++;
3709 break;
3710
3711 case HCI_KEYPRESS_ERASED:
3712 conn->passkey_entered--;
3713 break;
3714
3715 case HCI_KEYPRESS_CLEARED:
3716 conn->passkey_entered = 0;
3717 break;
3718
3719 case HCI_KEYPRESS_COMPLETED:
3720 return;
3721 }
3722
3723 if (test_bit(HCI_MGMT, &hdev->dev_flags))
3724 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3725 conn->dst_type, conn->passkey_notify,
3726 conn->passkey_entered);
3727 }
3728
3729 static void hci_simple_pair_complete_evt(struct hci_dev *hdev,
3730 struct sk_buff *skb)
3731 {
3732 struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
3733 struct hci_conn *conn;
3734
3735 BT_DBG("%s", hdev->name);
3736
3737 hci_dev_lock(hdev);
3738
3739 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3740 if (!conn)
3741 goto unlock;
3742
3743 /* To avoid duplicate auth_failed events to user space we check
3744 * the HCI_CONN_AUTH_PEND flag which will be set if we
3745 * initiated the authentication. A traditional auth_complete
3746 * event gets always produced as initiator and is also mapped to
3747 * the mgmt_auth_failed event */
3748 if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) && ev->status)
3749 mgmt_auth_failed(hdev, &conn->dst, conn->type, conn->dst_type,
3750 ev->status);
3751
3752 hci_conn_put(conn);
3753
3754 unlock:
3755 hci_dev_unlock(hdev);
3756 }
3757
3758 static void hci_remote_host_features_evt(struct hci_dev *hdev,
3759 struct sk_buff *skb)
3760 {
3761 struct hci_ev_remote_host_features *ev = (void *) skb->data;
3762 struct inquiry_entry *ie;
3763
3764 BT_DBG("%s", hdev->name);
3765
3766 hci_dev_lock(hdev);
3767
3768 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3769 if (ie)
3770 ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3771
3772 hci_dev_unlock(hdev);
3773 }
3774
3775 static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
3776 struct sk_buff *skb)
3777 {
3778 struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
3779 struct oob_data *data;
3780
3781 BT_DBG("%s", hdev->name);
3782
3783 hci_dev_lock(hdev);
3784
3785 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3786 goto unlock;
3787
3788 data = hci_find_remote_oob_data(hdev, &ev->bdaddr);
3789 if (data) {
3790 struct hci_cp_remote_oob_data_reply cp;
3791
3792 bacpy(&cp.bdaddr, &ev->bdaddr);
3793 memcpy(cp.hash, data->hash, sizeof(cp.hash));
3794 memcpy(cp.randomizer, data->randomizer, sizeof(cp.randomizer));
3795
3796 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY, sizeof(cp),
3797 &cp);
3798 } else {
3799 struct hci_cp_remote_oob_data_neg_reply cp;
3800
3801 bacpy(&cp.bdaddr, &ev->bdaddr);
3802 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY, sizeof(cp),
3803 &cp);
3804 }
3805
3806 unlock:
3807 hci_dev_unlock(hdev);
3808 }
3809
3810 static void hci_phy_link_complete_evt(struct hci_dev *hdev,
3811 struct sk_buff *skb)
3812 {
3813 struct hci_ev_phy_link_complete *ev = (void *) skb->data;
3814 struct hci_conn *hcon, *bredr_hcon;
3815
3816 BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev->name, ev->phy_handle,
3817 ev->status);
3818
3819 hci_dev_lock(hdev);
3820
3821 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3822 if (!hcon) {
3823 hci_dev_unlock(hdev);
3824 return;
3825 }
3826
3827 if (ev->status) {
3828 hci_conn_del(hcon);
3829 hci_dev_unlock(hdev);
3830 return;
3831 }
3832
3833 bredr_hcon = hcon->amp_mgr->l2cap_conn->hcon;
3834
3835 hcon->state = BT_CONNECTED;
3836 bacpy(&hcon->dst, &bredr_hcon->dst);
3837
3838 hci_conn_hold(hcon);
3839 hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
3840 hci_conn_put(hcon);
3841
3842 hci_conn_hold_device(hcon);
3843 hci_conn_add_sysfs(hcon);
3844
3845 amp_physical_cfm(bredr_hcon, hcon);
3846
3847 hci_dev_unlock(hdev);
3848 }
3849
3850 static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
3851 {
3852 struct hci_ev_logical_link_complete *ev = (void *) skb->data;
3853 struct hci_conn *hcon;
3854 struct hci_chan *hchan;
3855 struct amp_mgr *mgr;
3856
3857 BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
3858 hdev->name, le16_to_cpu(ev->handle), ev->phy_handle,
3859 ev->status);
3860
3861 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3862 if (!hcon)
3863 return;
3864
3865 /* Create AMP hchan */
3866 hchan = hci_chan_create(hcon);
3867 if (!hchan)
3868 return;
3869
3870 hchan->handle = le16_to_cpu(ev->handle);
3871
3872 BT_DBG("hcon %p mgr %p hchan %p", hcon, hcon->amp_mgr, hchan);
3873
3874 mgr = hcon->amp_mgr;
3875 if (mgr && mgr->bredr_chan) {
3876 struct l2cap_chan *bredr_chan = mgr->bredr_chan;
3877
3878 l2cap_chan_lock(bredr_chan);
3879
3880 bredr_chan->conn->mtu = hdev->block_mtu;
3881 l2cap_logical_cfm(bredr_chan, hchan, 0);
3882 hci_conn_hold(hcon);
3883
3884 l2cap_chan_unlock(bredr_chan);
3885 }
3886 }
3887
3888 static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
3889 struct sk_buff *skb)
3890 {
3891 struct hci_ev_disconn_logical_link_complete *ev = (void *) skb->data;
3892 struct hci_chan *hchan;
3893
3894 BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
3895 le16_to_cpu(ev->handle), ev->status);
3896
3897 if (ev->status)
3898 return;
3899
3900 hci_dev_lock(hdev);
3901
3902 hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
3903 if (!hchan)
3904 goto unlock;
3905
3906 amp_destroy_logical_link(hchan, ev->reason);
3907
3908 unlock:
3909 hci_dev_unlock(hdev);
3910 }
3911
3912 static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
3913 struct sk_buff *skb)
3914 {
3915 struct hci_ev_disconn_phy_link_complete *ev = (void *) skb->data;
3916 struct hci_conn *hcon;
3917
3918 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3919
3920 if (ev->status)
3921 return;
3922
3923 hci_dev_lock(hdev);
3924
3925 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3926 if (hcon) {
3927 hcon->state = BT_CLOSED;
3928 hci_conn_del(hcon);
3929 }
3930
3931 hci_dev_unlock(hdev);
3932 }
3933
3934 static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
3935 {
3936 struct hci_ev_le_conn_complete *ev = (void *) skb->data;
3937 struct hci_conn *conn;
3938
3939 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3940
3941 hci_dev_lock(hdev);
3942
3943 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
3944 if (!conn) {
3945 conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr);
3946 if (!conn) {
3947 BT_ERR("No memory for new connection");
3948 goto unlock;
3949 }
3950
3951 conn->dst_type = ev->bdaddr_type;
3952
3953 if (ev->role == LE_CONN_ROLE_MASTER) {
3954 conn->out = true;
3955 conn->link_mode |= HCI_LM_MASTER;
3956 }
3957 }
3958
3959 if (ev->status) {
3960 mgmt_connect_failed(hdev, &conn->dst, conn->type,
3961 conn->dst_type, ev->status);
3962 hci_proto_connect_cfm(conn, ev->status);
3963 conn->state = BT_CLOSED;
3964 hci_conn_del(conn);
3965 goto unlock;
3966 }
3967
3968 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3969 mgmt_device_connected(hdev, &ev->bdaddr, conn->type,
3970 conn->dst_type, 0, NULL, 0, NULL);
3971
3972 conn->sec_level = BT_SECURITY_LOW;
3973 conn->handle = __le16_to_cpu(ev->handle);
3974 conn->state = BT_CONNECTED;
3975
3976 hci_conn_hold_device(conn);
3977 hci_conn_add_sysfs(conn);
3978
3979 hci_proto_connect_cfm(conn, ev->status);
3980
3981 unlock:
3982 hci_dev_unlock(hdev);
3983 }
3984
3985 static void hci_le_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
3986 {
3987 u8 num_reports = skb->data[0];
3988 void *ptr = &skb->data[1];
3989 s8 rssi;
3990
3991 while (num_reports--) {
3992 struct hci_ev_le_advertising_info *ev = ptr;
3993
3994 rssi = ev->data[ev->length];
3995 mgmt_device_found(hdev, &ev->bdaddr, LE_LINK, ev->bdaddr_type,
3996 NULL, rssi, 0, 1, ev->data, ev->length);
3997
3998 ptr += sizeof(*ev) + ev->length + 1;
3999 }
4000 }
4001
4002 static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
4003 {
4004 struct hci_ev_le_ltk_req *ev = (void *) skb->data;
4005 struct hci_cp_le_ltk_reply cp;
4006 struct hci_cp_le_ltk_neg_reply neg;
4007 struct hci_conn *conn;
4008 struct smp_ltk *ltk;
4009
4010 BT_DBG("%s handle 0x%4.4x", hdev->name, __le16_to_cpu(ev->handle));
4011
4012 hci_dev_lock(hdev);
4013
4014 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4015 if (conn == NULL)
4016 goto not_found;
4017
4018 ltk = hci_find_ltk(hdev, ev->ediv, ev->random);
4019 if (ltk == NULL)
4020 goto not_found;
4021
4022 memcpy(cp.ltk, ltk->val, sizeof(ltk->val));
4023 cp.handle = cpu_to_le16(conn->handle);
4024
4025 if (ltk->authenticated)
4026 conn->sec_level = BT_SECURITY_HIGH;
4027
4028 hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
4029
4030 if (ltk->type & HCI_SMP_STK) {
4031 list_del(&ltk->list);
4032 kfree(ltk);
4033 }
4034
4035 hci_dev_unlock(hdev);
4036
4037 return;
4038
4039 not_found:
4040 neg.handle = ev->handle;
4041 hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
4042 hci_dev_unlock(hdev);
4043 }
4044
4045 static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
4046 {
4047 struct hci_ev_le_meta *le_ev = (void *) skb->data;
4048
4049 skb_pull(skb, sizeof(*le_ev));
4050
4051 switch (le_ev->subevent) {
4052 case HCI_EV_LE_CONN_COMPLETE:
4053 hci_le_conn_complete_evt(hdev, skb);
4054 break;
4055
4056 case HCI_EV_LE_ADVERTISING_REPORT:
4057 hci_le_adv_report_evt(hdev, skb);
4058 break;
4059
4060 case HCI_EV_LE_LTK_REQ:
4061 hci_le_ltk_request_evt(hdev, skb);
4062 break;
4063
4064 default:
4065 break;
4066 }
4067 }
4068
4069 static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
4070 {
4071 struct hci_ev_channel_selected *ev = (void *) skb->data;
4072 struct hci_conn *hcon;
4073
4074 BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
4075
4076 skb_pull(skb, sizeof(*ev));
4077
4078 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4079 if (!hcon)
4080 return;
4081
4082 amp_read_loc_assoc_final_data(hdev, hcon);
4083 }
4084
4085 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
4086 {
4087 struct hci_event_hdr *hdr = (void *) skb->data;
4088 __u8 event = hdr->evt;
4089
4090 skb_pull(skb, HCI_EVENT_HDR_SIZE);
4091
4092 switch (event) {
4093 case HCI_EV_INQUIRY_COMPLETE:
4094 hci_inquiry_complete_evt(hdev, skb);
4095 break;
4096
4097 case HCI_EV_INQUIRY_RESULT:
4098 hci_inquiry_result_evt(hdev, skb);
4099 break;
4100
4101 case HCI_EV_CONN_COMPLETE:
4102 hci_conn_complete_evt(hdev, skb);
4103 break;
4104
4105 case HCI_EV_CONN_REQUEST:
4106 hci_conn_request_evt(hdev, skb);
4107 break;
4108
4109 case HCI_EV_DISCONN_COMPLETE:
4110 hci_disconn_complete_evt(hdev, skb);
4111 break;
4112
4113 case HCI_EV_AUTH_COMPLETE:
4114 hci_auth_complete_evt(hdev, skb);
4115 break;
4116
4117 case HCI_EV_REMOTE_NAME:
4118 hci_remote_name_evt(hdev, skb);
4119 break;
4120
4121 case HCI_EV_ENCRYPT_CHANGE:
4122 hci_encrypt_change_evt(hdev, skb);
4123 break;
4124
4125 case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
4126 hci_change_link_key_complete_evt(hdev, skb);
4127 break;
4128
4129 case HCI_EV_REMOTE_FEATURES:
4130 hci_remote_features_evt(hdev, skb);
4131 break;
4132
4133 case HCI_EV_REMOTE_VERSION:
4134 hci_remote_version_evt(hdev, skb);
4135 break;
4136
4137 case HCI_EV_QOS_SETUP_COMPLETE:
4138 hci_qos_setup_complete_evt(hdev, skb);
4139 break;
4140
4141 case HCI_EV_CMD_COMPLETE:
4142 hci_cmd_complete_evt(hdev, skb);
4143 break;
4144
4145 case HCI_EV_CMD_STATUS:
4146 hci_cmd_status_evt(hdev, skb);
4147 break;
4148
4149 case HCI_EV_ROLE_CHANGE:
4150 hci_role_change_evt(hdev, skb);
4151 break;
4152
4153 case HCI_EV_NUM_COMP_PKTS:
4154 hci_num_comp_pkts_evt(hdev, skb);
4155 break;
4156
4157 case HCI_EV_MODE_CHANGE:
4158 hci_mode_change_evt(hdev, skb);
4159 break;
4160
4161 case HCI_EV_PIN_CODE_REQ:
4162 hci_pin_code_request_evt(hdev, skb);
4163 break;
4164
4165 case HCI_EV_LINK_KEY_REQ:
4166 hci_link_key_request_evt(hdev, skb);
4167 break;
4168
4169 case HCI_EV_LINK_KEY_NOTIFY:
4170 hci_link_key_notify_evt(hdev, skb);
4171 break;
4172
4173 case HCI_EV_CLOCK_OFFSET:
4174 hci_clock_offset_evt(hdev, skb);
4175 break;
4176
4177 case HCI_EV_PKT_TYPE_CHANGE:
4178 hci_pkt_type_change_evt(hdev, skb);
4179 break;
4180
4181 case HCI_EV_PSCAN_REP_MODE:
4182 hci_pscan_rep_mode_evt(hdev, skb);
4183 break;
4184
4185 case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
4186 hci_inquiry_result_with_rssi_evt(hdev, skb);
4187 break;
4188
4189 case HCI_EV_REMOTE_EXT_FEATURES:
4190 hci_remote_ext_features_evt(hdev, skb);
4191 break;
4192
4193 case HCI_EV_SYNC_CONN_COMPLETE:
4194 hci_sync_conn_complete_evt(hdev, skb);
4195 break;
4196
4197 case HCI_EV_SYNC_CONN_CHANGED:
4198 hci_sync_conn_changed_evt(hdev, skb);
4199 break;
4200
4201 case HCI_EV_SNIFF_SUBRATE:
4202 hci_sniff_subrate_evt(hdev, skb);
4203 break;
4204
4205 case HCI_EV_EXTENDED_INQUIRY_RESULT:
4206 hci_extended_inquiry_result_evt(hdev, skb);
4207 break;
4208
4209 case HCI_EV_KEY_REFRESH_COMPLETE:
4210 hci_key_refresh_complete_evt(hdev, skb);
4211 break;
4212
4213 case HCI_EV_IO_CAPA_REQUEST:
4214 hci_io_capa_request_evt(hdev, skb);
4215 break;
4216
4217 case HCI_EV_IO_CAPA_REPLY:
4218 hci_io_capa_reply_evt(hdev, skb);
4219 break;
4220
4221 case HCI_EV_USER_CONFIRM_REQUEST:
4222 hci_user_confirm_request_evt(hdev, skb);
4223 break;
4224
4225 case HCI_EV_USER_PASSKEY_REQUEST:
4226 hci_user_passkey_request_evt(hdev, skb);
4227 break;
4228
4229 case HCI_EV_USER_PASSKEY_NOTIFY:
4230 hci_user_passkey_notify_evt(hdev, skb);
4231 break;
4232
4233 case HCI_EV_KEYPRESS_NOTIFY:
4234 hci_keypress_notify_evt(hdev, skb);
4235 break;
4236
4237 case HCI_EV_SIMPLE_PAIR_COMPLETE:
4238 hci_simple_pair_complete_evt(hdev, skb);
4239 break;
4240
4241 case HCI_EV_REMOTE_HOST_FEATURES:
4242 hci_remote_host_features_evt(hdev, skb);
4243 break;
4244
4245 case HCI_EV_LE_META:
4246 hci_le_meta_evt(hdev, skb);
4247 break;
4248
4249 case HCI_EV_CHANNEL_SELECTED:
4250 hci_chan_selected_evt(hdev, skb);
4251 break;
4252
4253 case HCI_EV_REMOTE_OOB_DATA_REQUEST:
4254 hci_remote_oob_data_request_evt(hdev, skb);
4255 break;
4256
4257 case HCI_EV_PHY_LINK_COMPLETE:
4258 hci_phy_link_complete_evt(hdev, skb);
4259 break;
4260
4261 case HCI_EV_LOGICAL_LINK_COMPLETE:
4262 hci_loglink_complete_evt(hdev, skb);
4263 break;
4264
4265 case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE:
4266 hci_disconn_loglink_complete_evt(hdev, skb);
4267 break;
4268
4269 case HCI_EV_DISCONN_PHY_LINK_COMPLETE:
4270 hci_disconn_phylink_complete_evt(hdev, skb);
4271 break;
4272
4273 case HCI_EV_NUM_COMP_BLOCKS:
4274 hci_num_comp_blocks_evt(hdev, skb);
4275 break;
4276
4277 default:
4278 BT_DBG("%s event 0x%2.2x", hdev->name, event);
4279 break;
4280 }
4281
4282 kfree_skb(skb);
4283 hdev->stat.evt_rx++;
4284 }