Loading...
1/*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2011 ProFUSION Embedded Systems
5
6 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License version 2 as
10 published by the Free Software Foundation;
11
12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
15 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
16 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
17 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20
21 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
22 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
23 SOFTWARE IS DISCLAIMED.
24*/
25
26/* Bluetooth HCI core. */
27
28#include <linux/export.h>
29#include <linux/idr.h>
30#include <linux/rfkill.h>
31#include <linux/debugfs.h>
32#include <linux/crypto.h>
33#include <linux/property.h>
34#include <asm/unaligned.h>
35
36#include <net/bluetooth/bluetooth.h>
37#include <net/bluetooth/hci_core.h>
38#include <net/bluetooth/l2cap.h>
39#include <net/bluetooth/mgmt.h>
40
41#include "hci_request.h"
42#include "hci_debugfs.h"
43#include "smp.h"
44#include "leds.h"
45
46static void hci_rx_work(struct work_struct *work);
47static void hci_cmd_work(struct work_struct *work);
48static void hci_tx_work(struct work_struct *work);
49
50/* HCI device list */
51LIST_HEAD(hci_dev_list);
52DEFINE_RWLOCK(hci_dev_list_lock);
53
54/* HCI callback list */
55LIST_HEAD(hci_cb_list);
56DEFINE_MUTEX(hci_cb_list_lock);
57
58/* HCI ID Numbering */
59static DEFINE_IDA(hci_index_ida);
60
61/* ---- HCI debugfs entries ---- */
62
63static ssize_t dut_mode_read(struct file *file, char __user *user_buf,
64 size_t count, loff_t *ppos)
65{
66 struct hci_dev *hdev = file->private_data;
67 char buf[3];
68
69 buf[0] = hci_dev_test_flag(hdev, HCI_DUT_MODE) ? 'Y' : 'N';
70 buf[1] = '\n';
71 buf[2] = '\0';
72 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
73}
74
75static ssize_t dut_mode_write(struct file *file, const char __user *user_buf,
76 size_t count, loff_t *ppos)
77{
78 struct hci_dev *hdev = file->private_data;
79 struct sk_buff *skb;
80 bool enable;
81 int err;
82
83 if (!test_bit(HCI_UP, &hdev->flags))
84 return -ENETDOWN;
85
86 err = kstrtobool_from_user(user_buf, count, &enable);
87 if (err)
88 return err;
89
90 if (enable == hci_dev_test_flag(hdev, HCI_DUT_MODE))
91 return -EALREADY;
92
93 hci_req_sync_lock(hdev);
94 if (enable)
95 skb = __hci_cmd_sync(hdev, HCI_OP_ENABLE_DUT_MODE, 0, NULL,
96 HCI_CMD_TIMEOUT);
97 else
98 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL,
99 HCI_CMD_TIMEOUT);
100 hci_req_sync_unlock(hdev);
101
102 if (IS_ERR(skb))
103 return PTR_ERR(skb);
104
105 kfree_skb(skb);
106
107 hci_dev_change_flag(hdev, HCI_DUT_MODE);
108
109 return count;
110}
111
112static const struct file_operations dut_mode_fops = {
113 .open = simple_open,
114 .read = dut_mode_read,
115 .write = dut_mode_write,
116 .llseek = default_llseek,
117};
118
119static ssize_t vendor_diag_read(struct file *file, char __user *user_buf,
120 size_t count, loff_t *ppos)
121{
122 struct hci_dev *hdev = file->private_data;
123 char buf[3];
124
125 buf[0] = hci_dev_test_flag(hdev, HCI_VENDOR_DIAG) ? 'Y' : 'N';
126 buf[1] = '\n';
127 buf[2] = '\0';
128 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
129}
130
131static ssize_t vendor_diag_write(struct file *file, const char __user *user_buf,
132 size_t count, loff_t *ppos)
133{
134 struct hci_dev *hdev = file->private_data;
135 bool enable;
136 int err;
137
138 err = kstrtobool_from_user(user_buf, count, &enable);
139 if (err)
140 return err;
141
142 /* When the diagnostic flags are not persistent and the transport
143 * is not active or in user channel operation, then there is no need
144 * for the vendor callback. Instead just store the desired value and
145 * the setting will be programmed when the controller gets powered on.
146 */
147 if (test_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks) &&
148 (!test_bit(HCI_RUNNING, &hdev->flags) ||
149 hci_dev_test_flag(hdev, HCI_USER_CHANNEL)))
150 goto done;
151
152 hci_req_sync_lock(hdev);
153 err = hdev->set_diag(hdev, enable);
154 hci_req_sync_unlock(hdev);
155
156 if (err < 0)
157 return err;
158
159done:
160 if (enable)
161 hci_dev_set_flag(hdev, HCI_VENDOR_DIAG);
162 else
163 hci_dev_clear_flag(hdev, HCI_VENDOR_DIAG);
164
165 return count;
166}
167
168static const struct file_operations vendor_diag_fops = {
169 .open = simple_open,
170 .read = vendor_diag_read,
171 .write = vendor_diag_write,
172 .llseek = default_llseek,
173};
174
175static void hci_debugfs_create_basic(struct hci_dev *hdev)
176{
177 debugfs_create_file("dut_mode", 0644, hdev->debugfs, hdev,
178 &dut_mode_fops);
179
180 if (hdev->set_diag)
181 debugfs_create_file("vendor_diag", 0644, hdev->debugfs, hdev,
182 &vendor_diag_fops);
183}
184
185static int hci_reset_req(struct hci_request *req, unsigned long opt)
186{
187 BT_DBG("%s %ld", req->hdev->name, opt);
188
189 /* Reset device */
190 set_bit(HCI_RESET, &req->hdev->flags);
191 hci_req_add(req, HCI_OP_RESET, 0, NULL);
192 return 0;
193}
194
195static void bredr_init(struct hci_request *req)
196{
197 req->hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_PACKET_BASED;
198
199 /* Read Local Supported Features */
200 hci_req_add(req, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
201
202 /* Read Local Version */
203 hci_req_add(req, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
204
205 /* Read BD Address */
206 hci_req_add(req, HCI_OP_READ_BD_ADDR, 0, NULL);
207}
208
209static void amp_init1(struct hci_request *req)
210{
211 req->hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_BLOCK_BASED;
212
213 /* Read Local Version */
214 hci_req_add(req, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
215
216 /* Read Local Supported Commands */
217 hci_req_add(req, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
218
219 /* Read Local AMP Info */
220 hci_req_add(req, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);
221
222 /* Read Data Blk size */
223 hci_req_add(req, HCI_OP_READ_DATA_BLOCK_SIZE, 0, NULL);
224
225 /* Read Flow Control Mode */
226 hci_req_add(req, HCI_OP_READ_FLOW_CONTROL_MODE, 0, NULL);
227
228 /* Read Location Data */
229 hci_req_add(req, HCI_OP_READ_LOCATION_DATA, 0, NULL);
230}
231
232static int amp_init2(struct hci_request *req)
233{
234 /* Read Local Supported Features. Not all AMP controllers
235 * support this so it's placed conditionally in the second
236 * stage init.
237 */
238 if (req->hdev->commands[14] & 0x20)
239 hci_req_add(req, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
240
241 return 0;
242}
243
244static int hci_init1_req(struct hci_request *req, unsigned long opt)
245{
246 struct hci_dev *hdev = req->hdev;
247
248 BT_DBG("%s %ld", hdev->name, opt);
249
250 /* Reset */
251 if (!test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks))
252 hci_reset_req(req, 0);
253
254 switch (hdev->dev_type) {
255 case HCI_PRIMARY:
256 bredr_init(req);
257 break;
258 case HCI_AMP:
259 amp_init1(req);
260 break;
261 default:
262 bt_dev_err(hdev, "Unknown device type %d", hdev->dev_type);
263 break;
264 }
265
266 return 0;
267}
268
269static void bredr_setup(struct hci_request *req)
270{
271 __le16 param;
272 __u8 flt_type;
273
274 /* Read Buffer Size (ACL mtu, max pkt, etc.) */
275 hci_req_add(req, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
276
277 /* Read Class of Device */
278 hci_req_add(req, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
279
280 /* Read Local Name */
281 hci_req_add(req, HCI_OP_READ_LOCAL_NAME, 0, NULL);
282
283 /* Read Voice Setting */
284 hci_req_add(req, HCI_OP_READ_VOICE_SETTING, 0, NULL);
285
286 /* Read Number of Supported IAC */
287 hci_req_add(req, HCI_OP_READ_NUM_SUPPORTED_IAC, 0, NULL);
288
289 /* Read Current IAC LAP */
290 hci_req_add(req, HCI_OP_READ_CURRENT_IAC_LAP, 0, NULL);
291
292 /* Clear Event Filters */
293 flt_type = HCI_FLT_CLEAR_ALL;
294 hci_req_add(req, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
295
296 /* Connection accept timeout ~20 secs */
297 param = cpu_to_le16(0x7d00);
298 hci_req_add(req, HCI_OP_WRITE_CA_TIMEOUT, 2, ¶m);
299}
300
301static void le_setup(struct hci_request *req)
302{
303 struct hci_dev *hdev = req->hdev;
304
305 /* Read LE Buffer Size */
306 hci_req_add(req, HCI_OP_LE_READ_BUFFER_SIZE, 0, NULL);
307
308 /* Read LE Local Supported Features */
309 hci_req_add(req, HCI_OP_LE_READ_LOCAL_FEATURES, 0, NULL);
310
311 /* Read LE Supported States */
312 hci_req_add(req, HCI_OP_LE_READ_SUPPORTED_STATES, 0, NULL);
313
314 /* LE-only controllers have LE implicitly enabled */
315 if (!lmp_bredr_capable(hdev))
316 hci_dev_set_flag(hdev, HCI_LE_ENABLED);
317}
318
319static void hci_setup_event_mask(struct hci_request *req)
320{
321 struct hci_dev *hdev = req->hdev;
322
323 /* The second byte is 0xff instead of 0x9f (two reserved bits
324 * disabled) since a Broadcom 1.2 dongle doesn't respond to the
325 * command otherwise.
326 */
327 u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
328
329 /* CSR 1.1 dongles does not accept any bitfield so don't try to set
330 * any event mask for pre 1.2 devices.
331 */
332 if (hdev->hci_ver < BLUETOOTH_VER_1_2)
333 return;
334
335 if (lmp_bredr_capable(hdev)) {
336 events[4] |= 0x01; /* Flow Specification Complete */
337 } else {
338 /* Use a different default for LE-only devices */
339 memset(events, 0, sizeof(events));
340 events[1] |= 0x20; /* Command Complete */
341 events[1] |= 0x40; /* Command Status */
342 events[1] |= 0x80; /* Hardware Error */
343
344 /* If the controller supports the Disconnect command, enable
345 * the corresponding event. In addition enable packet flow
346 * control related events.
347 */
348 if (hdev->commands[0] & 0x20) {
349 events[0] |= 0x10; /* Disconnection Complete */
350 events[2] |= 0x04; /* Number of Completed Packets */
351 events[3] |= 0x02; /* Data Buffer Overflow */
352 }
353
354 /* If the controller supports the Read Remote Version
355 * Information command, enable the corresponding event.
356 */
357 if (hdev->commands[2] & 0x80)
358 events[1] |= 0x08; /* Read Remote Version Information
359 * Complete
360 */
361
362 if (hdev->le_features[0] & HCI_LE_ENCRYPTION) {
363 events[0] |= 0x80; /* Encryption Change */
364 events[5] |= 0x80; /* Encryption Key Refresh Complete */
365 }
366 }
367
368 if (lmp_inq_rssi_capable(hdev) ||
369 test_bit(HCI_QUIRK_FIXUP_INQUIRY_MODE, &hdev->quirks))
370 events[4] |= 0x02; /* Inquiry Result with RSSI */
371
372 if (lmp_ext_feat_capable(hdev))
373 events[4] |= 0x04; /* Read Remote Extended Features Complete */
374
375 if (lmp_esco_capable(hdev)) {
376 events[5] |= 0x08; /* Synchronous Connection Complete */
377 events[5] |= 0x10; /* Synchronous Connection Changed */
378 }
379
380 if (lmp_sniffsubr_capable(hdev))
381 events[5] |= 0x20; /* Sniff Subrating */
382
383 if (lmp_pause_enc_capable(hdev))
384 events[5] |= 0x80; /* Encryption Key Refresh Complete */
385
386 if (lmp_ext_inq_capable(hdev))
387 events[5] |= 0x40; /* Extended Inquiry Result */
388
389 if (lmp_no_flush_capable(hdev))
390 events[7] |= 0x01; /* Enhanced Flush Complete */
391
392 if (lmp_lsto_capable(hdev))
393 events[6] |= 0x80; /* Link Supervision Timeout Changed */
394
395 if (lmp_ssp_capable(hdev)) {
396 events[6] |= 0x01; /* IO Capability Request */
397 events[6] |= 0x02; /* IO Capability Response */
398 events[6] |= 0x04; /* User Confirmation Request */
399 events[6] |= 0x08; /* User Passkey Request */
400 events[6] |= 0x10; /* Remote OOB Data Request */
401 events[6] |= 0x20; /* Simple Pairing Complete */
402 events[7] |= 0x04; /* User Passkey Notification */
403 events[7] |= 0x08; /* Keypress Notification */
404 events[7] |= 0x10; /* Remote Host Supported
405 * Features Notification
406 */
407 }
408
409 if (lmp_le_capable(hdev))
410 events[7] |= 0x20; /* LE Meta-Event */
411
412 hci_req_add(req, HCI_OP_SET_EVENT_MASK, sizeof(events), events);
413}
414
415static int hci_init2_req(struct hci_request *req, unsigned long opt)
416{
417 struct hci_dev *hdev = req->hdev;
418
419 if (hdev->dev_type == HCI_AMP)
420 return amp_init2(req);
421
422 if (lmp_bredr_capable(hdev))
423 bredr_setup(req);
424 else
425 hci_dev_clear_flag(hdev, HCI_BREDR_ENABLED);
426
427 if (lmp_le_capable(hdev))
428 le_setup(req);
429
430 /* All Bluetooth 1.2 and later controllers should support the
431 * HCI command for reading the local supported commands.
432 *
433 * Unfortunately some controllers indicate Bluetooth 1.2 support,
434 * but do not have support for this command. If that is the case,
435 * the driver can quirk the behavior and skip reading the local
436 * supported commands.
437 */
438 if (hdev->hci_ver > BLUETOOTH_VER_1_1 &&
439 !test_bit(HCI_QUIRK_BROKEN_LOCAL_COMMANDS, &hdev->quirks))
440 hci_req_add(req, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
441
442 if (lmp_ssp_capable(hdev)) {
443 /* When SSP is available, then the host features page
444 * should also be available as well. However some
445 * controllers list the max_page as 0 as long as SSP
446 * has not been enabled. To achieve proper debugging
447 * output, force the minimum max_page to 1 at least.
448 */
449 hdev->max_page = 0x01;
450
451 if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) {
452 u8 mode = 0x01;
453
454 hci_req_add(req, HCI_OP_WRITE_SSP_MODE,
455 sizeof(mode), &mode);
456 } else {
457 struct hci_cp_write_eir cp;
458
459 memset(hdev->eir, 0, sizeof(hdev->eir));
460 memset(&cp, 0, sizeof(cp));
461
462 hci_req_add(req, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
463 }
464 }
465
466 if (lmp_inq_rssi_capable(hdev) ||
467 test_bit(HCI_QUIRK_FIXUP_INQUIRY_MODE, &hdev->quirks)) {
468 u8 mode;
469
470 /* If Extended Inquiry Result events are supported, then
471 * they are clearly preferred over Inquiry Result with RSSI
472 * events.
473 */
474 mode = lmp_ext_inq_capable(hdev) ? 0x02 : 0x01;
475
476 hci_req_add(req, HCI_OP_WRITE_INQUIRY_MODE, 1, &mode);
477 }
478
479 if (lmp_inq_tx_pwr_capable(hdev))
480 hci_req_add(req, HCI_OP_READ_INQ_RSP_TX_POWER, 0, NULL);
481
482 if (lmp_ext_feat_capable(hdev)) {
483 struct hci_cp_read_local_ext_features cp;
484
485 cp.page = 0x01;
486 hci_req_add(req, HCI_OP_READ_LOCAL_EXT_FEATURES,
487 sizeof(cp), &cp);
488 }
489
490 if (hci_dev_test_flag(hdev, HCI_LINK_SECURITY)) {
491 u8 enable = 1;
492 hci_req_add(req, HCI_OP_WRITE_AUTH_ENABLE, sizeof(enable),
493 &enable);
494 }
495
496 return 0;
497}
498
499static void hci_setup_link_policy(struct hci_request *req)
500{
501 struct hci_dev *hdev = req->hdev;
502 struct hci_cp_write_def_link_policy cp;
503 u16 link_policy = 0;
504
505 if (lmp_rswitch_capable(hdev))
506 link_policy |= HCI_LP_RSWITCH;
507 if (lmp_hold_capable(hdev))
508 link_policy |= HCI_LP_HOLD;
509 if (lmp_sniff_capable(hdev))
510 link_policy |= HCI_LP_SNIFF;
511 if (lmp_park_capable(hdev))
512 link_policy |= HCI_LP_PARK;
513
514 cp.policy = cpu_to_le16(link_policy);
515 hci_req_add(req, HCI_OP_WRITE_DEF_LINK_POLICY, sizeof(cp), &cp);
516}
517
518static void hci_set_le_support(struct hci_request *req)
519{
520 struct hci_dev *hdev = req->hdev;
521 struct hci_cp_write_le_host_supported cp;
522
523 /* LE-only devices do not support explicit enablement */
524 if (!lmp_bredr_capable(hdev))
525 return;
526
527 memset(&cp, 0, sizeof(cp));
528
529 if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
530 cp.le = 0x01;
531 cp.simul = 0x00;
532 }
533
534 if (cp.le != lmp_host_le_capable(hdev))
535 hci_req_add(req, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(cp),
536 &cp);
537}
538
539static void hci_set_event_mask_page_2(struct hci_request *req)
540{
541 struct hci_dev *hdev = req->hdev;
542 u8 events[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };
543 bool changed = false;
544
545 /* If Connectionless Slave Broadcast master role is supported
546 * enable all necessary events for it.
547 */
548 if (lmp_csb_master_capable(hdev)) {
549 events[1] |= 0x40; /* Triggered Clock Capture */
550 events[1] |= 0x80; /* Synchronization Train Complete */
551 events[2] |= 0x10; /* Slave Page Response Timeout */
552 events[2] |= 0x20; /* CSB Channel Map Change */
553 changed = true;
554 }
555
556 /* If Connectionless Slave Broadcast slave role is supported
557 * enable all necessary events for it.
558 */
559 if (lmp_csb_slave_capable(hdev)) {
560 events[2] |= 0x01; /* Synchronization Train Received */
561 events[2] |= 0x02; /* CSB Receive */
562 events[2] |= 0x04; /* CSB Timeout */
563 events[2] |= 0x08; /* Truncated Page Complete */
564 changed = true;
565 }
566
567 /* Enable Authenticated Payload Timeout Expired event if supported */
568 if (lmp_ping_capable(hdev) || hdev->le_features[0] & HCI_LE_PING) {
569 events[2] |= 0x80;
570 changed = true;
571 }
572
573 /* Some Broadcom based controllers indicate support for Set Event
574 * Mask Page 2 command, but then actually do not support it. Since
575 * the default value is all bits set to zero, the command is only
576 * required if the event mask has to be changed. In case no change
577 * to the event mask is needed, skip this command.
578 */
579 if (changed)
580 hci_req_add(req, HCI_OP_SET_EVENT_MASK_PAGE_2,
581 sizeof(events), events);
582}
583
584static int hci_init3_req(struct hci_request *req, unsigned long opt)
585{
586 struct hci_dev *hdev = req->hdev;
587 u8 p;
588
589 hci_setup_event_mask(req);
590
591 if (hdev->commands[6] & 0x20 &&
592 !test_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks)) {
593 struct hci_cp_read_stored_link_key cp;
594
595 bacpy(&cp.bdaddr, BDADDR_ANY);
596 cp.read_all = 0x01;
597 hci_req_add(req, HCI_OP_READ_STORED_LINK_KEY, sizeof(cp), &cp);
598 }
599
600 if (hdev->commands[5] & 0x10)
601 hci_setup_link_policy(req);
602
603 if (hdev->commands[8] & 0x01)
604 hci_req_add(req, HCI_OP_READ_PAGE_SCAN_ACTIVITY, 0, NULL);
605
606 /* Some older Broadcom based Bluetooth 1.2 controllers do not
607 * support the Read Page Scan Type command. Check support for
608 * this command in the bit mask of supported commands.
609 */
610 if (hdev->commands[13] & 0x01)
611 hci_req_add(req, HCI_OP_READ_PAGE_SCAN_TYPE, 0, NULL);
612
613 if (lmp_le_capable(hdev)) {
614 u8 events[8];
615
616 memset(events, 0, sizeof(events));
617
618 if (hdev->le_features[0] & HCI_LE_ENCRYPTION)
619 events[0] |= 0x10; /* LE Long Term Key Request */
620
621 /* If controller supports the Connection Parameters Request
622 * Link Layer Procedure, enable the corresponding event.
623 */
624 if (hdev->le_features[0] & HCI_LE_CONN_PARAM_REQ_PROC)
625 events[0] |= 0x20; /* LE Remote Connection
626 * Parameter Request
627 */
628
629 /* If the controller supports the Data Length Extension
630 * feature, enable the corresponding event.
631 */
632 if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT)
633 events[0] |= 0x40; /* LE Data Length Change */
634
635 /* If the controller supports Extended Scanner Filter
636 * Policies, enable the correspondig event.
637 */
638 if (hdev->le_features[0] & HCI_LE_EXT_SCAN_POLICY)
639 events[1] |= 0x04; /* LE Direct Advertising
640 * Report
641 */
642
643 /* If the controller supports Channel Selection Algorithm #2
644 * feature, enable the corresponding event.
645 */
646 if (hdev->le_features[1] & HCI_LE_CHAN_SEL_ALG2)
647 events[2] |= 0x08; /* LE Channel Selection
648 * Algorithm
649 */
650
651 /* If the controller supports the LE Set Scan Enable command,
652 * enable the corresponding advertising report event.
653 */
654 if (hdev->commands[26] & 0x08)
655 events[0] |= 0x02; /* LE Advertising Report */
656
657 /* If the controller supports the LE Create Connection
658 * command, enable the corresponding event.
659 */
660 if (hdev->commands[26] & 0x10)
661 events[0] |= 0x01; /* LE Connection Complete */
662
663 /* If the controller supports the LE Connection Update
664 * command, enable the corresponding event.
665 */
666 if (hdev->commands[27] & 0x04)
667 events[0] |= 0x04; /* LE Connection Update
668 * Complete
669 */
670
671 /* If the controller supports the LE Read Remote Used Features
672 * command, enable the corresponding event.
673 */
674 if (hdev->commands[27] & 0x20)
675 events[0] |= 0x08; /* LE Read Remote Used
676 * Features Complete
677 */
678
679 /* If the controller supports the LE Read Local P-256
680 * Public Key command, enable the corresponding event.
681 */
682 if (hdev->commands[34] & 0x02)
683 events[0] |= 0x80; /* LE Read Local P-256
684 * Public Key Complete
685 */
686
687 /* If the controller supports the LE Generate DHKey
688 * command, enable the corresponding event.
689 */
690 if (hdev->commands[34] & 0x04)
691 events[1] |= 0x01; /* LE Generate DHKey Complete */
692
693 /* If the controller supports the LE Set Default PHY or
694 * LE Set PHY commands, enable the corresponding event.
695 */
696 if (hdev->commands[35] & (0x20 | 0x40))
697 events[1] |= 0x08; /* LE PHY Update Complete */
698
699 /* If the controller supports LE Set Extended Scan Parameters
700 * and LE Set Extended Scan Enable commands, enable the
701 * corresponding event.
702 */
703 if (use_ext_scan(hdev))
704 events[1] |= 0x10; /* LE Extended Advertising
705 * Report
706 */
707
708 /* If the controller supports the LE Extended Create Connection
709 * command, enable the corresponding event.
710 */
711 if (use_ext_conn(hdev))
712 events[1] |= 0x02; /* LE Enhanced Connection
713 * Complete
714 */
715
716 /* If the controller supports the LE Extended Advertising
717 * command, enable the corresponding event.
718 */
719 if (ext_adv_capable(hdev))
720 events[2] |= 0x02; /* LE Advertising Set
721 * Terminated
722 */
723
724 hci_req_add(req, HCI_OP_LE_SET_EVENT_MASK, sizeof(events),
725 events);
726
727 /* Read LE Advertising Channel TX Power */
728 if ((hdev->commands[25] & 0x40) && !ext_adv_capable(hdev)) {
729 /* HCI TS spec forbids mixing of legacy and extended
730 * advertising commands wherein READ_ADV_TX_POWER is
731 * also included. So do not call it if extended adv
732 * is supported otherwise controller will return
733 * COMMAND_DISALLOWED for extended commands.
734 */
735 hci_req_add(req, HCI_OP_LE_READ_ADV_TX_POWER, 0, NULL);
736 }
737
738 if (hdev->commands[26] & 0x40) {
739 /* Read LE White List Size */
740 hci_req_add(req, HCI_OP_LE_READ_WHITE_LIST_SIZE,
741 0, NULL);
742 }
743
744 if (hdev->commands[26] & 0x80) {
745 /* Clear LE White List */
746 hci_req_add(req, HCI_OP_LE_CLEAR_WHITE_LIST, 0, NULL);
747 }
748
749 if (hdev->commands[34] & 0x40) {
750 /* Read LE Resolving List Size */
751 hci_req_add(req, HCI_OP_LE_READ_RESOLV_LIST_SIZE,
752 0, NULL);
753 }
754
755 if (hdev->commands[34] & 0x20) {
756 /* Clear LE Resolving List */
757 hci_req_add(req, HCI_OP_LE_CLEAR_RESOLV_LIST, 0, NULL);
758 }
759
760 if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT) {
761 /* Read LE Maximum Data Length */
762 hci_req_add(req, HCI_OP_LE_READ_MAX_DATA_LEN, 0, NULL);
763
764 /* Read LE Suggested Default Data Length */
765 hci_req_add(req, HCI_OP_LE_READ_DEF_DATA_LEN, 0, NULL);
766 }
767
768 if (ext_adv_capable(hdev)) {
769 /* Read LE Number of Supported Advertising Sets */
770 hci_req_add(req, HCI_OP_LE_READ_NUM_SUPPORTED_ADV_SETS,
771 0, NULL);
772 }
773
774 hci_set_le_support(req);
775 }
776
777 /* Read features beyond page 1 if available */
778 for (p = 2; p < HCI_MAX_PAGES && p <= hdev->max_page; p++) {
779 struct hci_cp_read_local_ext_features cp;
780
781 cp.page = p;
782 hci_req_add(req, HCI_OP_READ_LOCAL_EXT_FEATURES,
783 sizeof(cp), &cp);
784 }
785
786 return 0;
787}
788
789static int hci_init4_req(struct hci_request *req, unsigned long opt)
790{
791 struct hci_dev *hdev = req->hdev;
792
793 /* Some Broadcom based Bluetooth controllers do not support the
794 * Delete Stored Link Key command. They are clearly indicating its
795 * absence in the bit mask of supported commands.
796 *
797 * Check the supported commands and only if the the command is marked
798 * as supported send it. If not supported assume that the controller
799 * does not have actual support for stored link keys which makes this
800 * command redundant anyway.
801 *
802 * Some controllers indicate that they support handling deleting
803 * stored link keys, but they don't. The quirk lets a driver
804 * just disable this command.
805 */
806 if (hdev->commands[6] & 0x80 &&
807 !test_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks)) {
808 struct hci_cp_delete_stored_link_key cp;
809
810 bacpy(&cp.bdaddr, BDADDR_ANY);
811 cp.delete_all = 0x01;
812 hci_req_add(req, HCI_OP_DELETE_STORED_LINK_KEY,
813 sizeof(cp), &cp);
814 }
815
816 /* Set event mask page 2 if the HCI command for it is supported */
817 if (hdev->commands[22] & 0x04)
818 hci_set_event_mask_page_2(req);
819
820 /* Read local codec list if the HCI command is supported */
821 if (hdev->commands[29] & 0x20)
822 hci_req_add(req, HCI_OP_READ_LOCAL_CODECS, 0, NULL);
823
824 /* Get MWS transport configuration if the HCI command is supported */
825 if (hdev->commands[30] & 0x08)
826 hci_req_add(req, HCI_OP_GET_MWS_TRANSPORT_CONFIG, 0, NULL);
827
828 /* Check for Synchronization Train support */
829 if (lmp_sync_train_capable(hdev))
830 hci_req_add(req, HCI_OP_READ_SYNC_TRAIN_PARAMS, 0, NULL);
831
832 /* Enable Secure Connections if supported and configured */
833 if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED) &&
834 bredr_sc_enabled(hdev)) {
835 u8 support = 0x01;
836
837 hci_req_add(req, HCI_OP_WRITE_SC_SUPPORT,
838 sizeof(support), &support);
839 }
840
841 /* Set Suggested Default Data Length to maximum if supported */
842 if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT) {
843 struct hci_cp_le_write_def_data_len cp;
844
845 cp.tx_len = hdev->le_max_tx_len;
846 cp.tx_time = hdev->le_max_tx_time;
847 hci_req_add(req, HCI_OP_LE_WRITE_DEF_DATA_LEN, sizeof(cp), &cp);
848 }
849
850 /* Set Default PHY parameters if command is supported */
851 if (hdev->commands[35] & 0x20) {
852 struct hci_cp_le_set_default_phy cp;
853
854 cp.all_phys = 0x00;
855 cp.tx_phys = hdev->le_tx_def_phys;
856 cp.rx_phys = hdev->le_rx_def_phys;
857
858 hci_req_add(req, HCI_OP_LE_SET_DEFAULT_PHY, sizeof(cp), &cp);
859 }
860
861 return 0;
862}
863
864static int __hci_init(struct hci_dev *hdev)
865{
866 int err;
867
868 err = __hci_req_sync(hdev, hci_init1_req, 0, HCI_INIT_TIMEOUT, NULL);
869 if (err < 0)
870 return err;
871
872 if (hci_dev_test_flag(hdev, HCI_SETUP))
873 hci_debugfs_create_basic(hdev);
874
875 err = __hci_req_sync(hdev, hci_init2_req, 0, HCI_INIT_TIMEOUT, NULL);
876 if (err < 0)
877 return err;
878
879 /* HCI_PRIMARY covers both single-mode LE, BR/EDR and dual-mode
880 * BR/EDR/LE type controllers. AMP controllers only need the
881 * first two stages of init.
882 */
883 if (hdev->dev_type != HCI_PRIMARY)
884 return 0;
885
886 err = __hci_req_sync(hdev, hci_init3_req, 0, HCI_INIT_TIMEOUT, NULL);
887 if (err < 0)
888 return err;
889
890 err = __hci_req_sync(hdev, hci_init4_req, 0, HCI_INIT_TIMEOUT, NULL);
891 if (err < 0)
892 return err;
893
894 /* This function is only called when the controller is actually in
895 * configured state. When the controller is marked as unconfigured,
896 * this initialization procedure is not run.
897 *
898 * It means that it is possible that a controller runs through its
899 * setup phase and then discovers missing settings. If that is the
900 * case, then this function will not be called. It then will only
901 * be called during the config phase.
902 *
903 * So only when in setup phase or config phase, create the debugfs
904 * entries and register the SMP channels.
905 */
906 if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
907 !hci_dev_test_flag(hdev, HCI_CONFIG))
908 return 0;
909
910 hci_debugfs_create_common(hdev);
911
912 if (lmp_bredr_capable(hdev))
913 hci_debugfs_create_bredr(hdev);
914
915 if (lmp_le_capable(hdev))
916 hci_debugfs_create_le(hdev);
917
918 return 0;
919}
920
921static int hci_init0_req(struct hci_request *req, unsigned long opt)
922{
923 struct hci_dev *hdev = req->hdev;
924
925 BT_DBG("%s %ld", hdev->name, opt);
926
927 /* Reset */
928 if (!test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks))
929 hci_reset_req(req, 0);
930
931 /* Read Local Version */
932 hci_req_add(req, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
933
934 /* Read BD Address */
935 if (hdev->set_bdaddr)
936 hci_req_add(req, HCI_OP_READ_BD_ADDR, 0, NULL);
937
938 return 0;
939}
940
941static int __hci_unconf_init(struct hci_dev *hdev)
942{
943 int err;
944
945 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
946 return 0;
947
948 err = __hci_req_sync(hdev, hci_init0_req, 0, HCI_INIT_TIMEOUT, NULL);
949 if (err < 0)
950 return err;
951
952 if (hci_dev_test_flag(hdev, HCI_SETUP))
953 hci_debugfs_create_basic(hdev);
954
955 return 0;
956}
957
958static int hci_scan_req(struct hci_request *req, unsigned long opt)
959{
960 __u8 scan = opt;
961
962 BT_DBG("%s %x", req->hdev->name, scan);
963
964 /* Inquiry and Page scans */
965 hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
966 return 0;
967}
968
969static int hci_auth_req(struct hci_request *req, unsigned long opt)
970{
971 __u8 auth = opt;
972
973 BT_DBG("%s %x", req->hdev->name, auth);
974
975 /* Authentication */
976 hci_req_add(req, HCI_OP_WRITE_AUTH_ENABLE, 1, &auth);
977 return 0;
978}
979
980static int hci_encrypt_req(struct hci_request *req, unsigned long opt)
981{
982 __u8 encrypt = opt;
983
984 BT_DBG("%s %x", req->hdev->name, encrypt);
985
986 /* Encryption */
987 hci_req_add(req, HCI_OP_WRITE_ENCRYPT_MODE, 1, &encrypt);
988 return 0;
989}
990
991static int hci_linkpol_req(struct hci_request *req, unsigned long opt)
992{
993 __le16 policy = cpu_to_le16(opt);
994
995 BT_DBG("%s %x", req->hdev->name, policy);
996
997 /* Default link policy */
998 hci_req_add(req, HCI_OP_WRITE_DEF_LINK_POLICY, 2, &policy);
999 return 0;
1000}
1001
1002/* Get HCI device by index.
1003 * Device is held on return. */
1004struct hci_dev *hci_dev_get(int index)
1005{
1006 struct hci_dev *hdev = NULL, *d;
1007
1008 BT_DBG("%d", index);
1009
1010 if (index < 0)
1011 return NULL;
1012
1013 read_lock(&hci_dev_list_lock);
1014 list_for_each_entry(d, &hci_dev_list, list) {
1015 if (d->id == index) {
1016 hdev = hci_dev_hold(d);
1017 break;
1018 }
1019 }
1020 read_unlock(&hci_dev_list_lock);
1021 return hdev;
1022}
1023
1024/* ---- Inquiry support ---- */
1025
1026bool hci_discovery_active(struct hci_dev *hdev)
1027{
1028 struct discovery_state *discov = &hdev->discovery;
1029
1030 switch (discov->state) {
1031 case DISCOVERY_FINDING:
1032 case DISCOVERY_RESOLVING:
1033 return true;
1034
1035 default:
1036 return false;
1037 }
1038}
1039
1040void hci_discovery_set_state(struct hci_dev *hdev, int state)
1041{
1042 int old_state = hdev->discovery.state;
1043
1044 BT_DBG("%s state %u -> %u", hdev->name, hdev->discovery.state, state);
1045
1046 if (old_state == state)
1047 return;
1048
1049 hdev->discovery.state = state;
1050
1051 switch (state) {
1052 case DISCOVERY_STOPPED:
1053 hci_update_background_scan(hdev);
1054
1055 if (old_state != DISCOVERY_STARTING)
1056 mgmt_discovering(hdev, 0);
1057 break;
1058 case DISCOVERY_STARTING:
1059 break;
1060 case DISCOVERY_FINDING:
1061 mgmt_discovering(hdev, 1);
1062 break;
1063 case DISCOVERY_RESOLVING:
1064 break;
1065 case DISCOVERY_STOPPING:
1066 break;
1067 }
1068}
1069
1070void hci_inquiry_cache_flush(struct hci_dev *hdev)
1071{
1072 struct discovery_state *cache = &hdev->discovery;
1073 struct inquiry_entry *p, *n;
1074
1075 list_for_each_entry_safe(p, n, &cache->all, all) {
1076 list_del(&p->all);
1077 kfree(p);
1078 }
1079
1080 INIT_LIST_HEAD(&cache->unknown);
1081 INIT_LIST_HEAD(&cache->resolve);
1082}
1083
1084struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
1085 bdaddr_t *bdaddr)
1086{
1087 struct discovery_state *cache = &hdev->discovery;
1088 struct inquiry_entry *e;
1089
1090 BT_DBG("cache %p, %pMR", cache, bdaddr);
1091
1092 list_for_each_entry(e, &cache->all, all) {
1093 if (!bacmp(&e->data.bdaddr, bdaddr))
1094 return e;
1095 }
1096
1097 return NULL;
1098}
1099
1100struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
1101 bdaddr_t *bdaddr)
1102{
1103 struct discovery_state *cache = &hdev->discovery;
1104 struct inquiry_entry *e;
1105
1106 BT_DBG("cache %p, %pMR", cache, bdaddr);
1107
1108 list_for_each_entry(e, &cache->unknown, list) {
1109 if (!bacmp(&e->data.bdaddr, bdaddr))
1110 return e;
1111 }
1112
1113 return NULL;
1114}
1115
1116struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
1117 bdaddr_t *bdaddr,
1118 int state)
1119{
1120 struct discovery_state *cache = &hdev->discovery;
1121 struct inquiry_entry *e;
1122
1123 BT_DBG("cache %p bdaddr %pMR state %d", cache, bdaddr, state);
1124
1125 list_for_each_entry(e, &cache->resolve, list) {
1126 if (!bacmp(bdaddr, BDADDR_ANY) && e->name_state == state)
1127 return e;
1128 if (!bacmp(&e->data.bdaddr, bdaddr))
1129 return e;
1130 }
1131
1132 return NULL;
1133}
1134
1135void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
1136 struct inquiry_entry *ie)
1137{
1138 struct discovery_state *cache = &hdev->discovery;
1139 struct list_head *pos = &cache->resolve;
1140 struct inquiry_entry *p;
1141
1142 list_del(&ie->list);
1143
1144 list_for_each_entry(p, &cache->resolve, list) {
1145 if (p->name_state != NAME_PENDING &&
1146 abs(p->data.rssi) >= abs(ie->data.rssi))
1147 break;
1148 pos = &p->list;
1149 }
1150
1151 list_add(&ie->list, pos);
1152}
1153
1154u32 hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
1155 bool name_known)
1156{
1157 struct discovery_state *cache = &hdev->discovery;
1158 struct inquiry_entry *ie;
1159 u32 flags = 0;
1160
1161 BT_DBG("cache %p, %pMR", cache, &data->bdaddr);
1162
1163 hci_remove_remote_oob_data(hdev, &data->bdaddr, BDADDR_BREDR);
1164
1165 if (!data->ssp_mode)
1166 flags |= MGMT_DEV_FOUND_LEGACY_PAIRING;
1167
1168 ie = hci_inquiry_cache_lookup(hdev, &data->bdaddr);
1169 if (ie) {
1170 if (!ie->data.ssp_mode)
1171 flags |= MGMT_DEV_FOUND_LEGACY_PAIRING;
1172
1173 if (ie->name_state == NAME_NEEDED &&
1174 data->rssi != ie->data.rssi) {
1175 ie->data.rssi = data->rssi;
1176 hci_inquiry_cache_update_resolve(hdev, ie);
1177 }
1178
1179 goto update;
1180 }
1181
1182 /* Entry not in the cache. Add new one. */
1183 ie = kzalloc(sizeof(*ie), GFP_KERNEL);
1184 if (!ie) {
1185 flags |= MGMT_DEV_FOUND_CONFIRM_NAME;
1186 goto done;
1187 }
1188
1189 list_add(&ie->all, &cache->all);
1190
1191 if (name_known) {
1192 ie->name_state = NAME_KNOWN;
1193 } else {
1194 ie->name_state = NAME_NOT_KNOWN;
1195 list_add(&ie->list, &cache->unknown);
1196 }
1197
1198update:
1199 if (name_known && ie->name_state != NAME_KNOWN &&
1200 ie->name_state != NAME_PENDING) {
1201 ie->name_state = NAME_KNOWN;
1202 list_del(&ie->list);
1203 }
1204
1205 memcpy(&ie->data, data, sizeof(*data));
1206 ie->timestamp = jiffies;
1207 cache->timestamp = jiffies;
1208
1209 if (ie->name_state == NAME_NOT_KNOWN)
1210 flags |= MGMT_DEV_FOUND_CONFIRM_NAME;
1211
1212done:
1213 return flags;
1214}
1215
1216static int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf)
1217{
1218 struct discovery_state *cache = &hdev->discovery;
1219 struct inquiry_info *info = (struct inquiry_info *) buf;
1220 struct inquiry_entry *e;
1221 int copied = 0;
1222
1223 list_for_each_entry(e, &cache->all, all) {
1224 struct inquiry_data *data = &e->data;
1225
1226 if (copied >= num)
1227 break;
1228
1229 bacpy(&info->bdaddr, &data->bdaddr);
1230 info->pscan_rep_mode = data->pscan_rep_mode;
1231 info->pscan_period_mode = data->pscan_period_mode;
1232 info->pscan_mode = data->pscan_mode;
1233 memcpy(info->dev_class, data->dev_class, 3);
1234 info->clock_offset = data->clock_offset;
1235
1236 info++;
1237 copied++;
1238 }
1239
1240 BT_DBG("cache %p, copied %d", cache, copied);
1241 return copied;
1242}
1243
1244static int hci_inq_req(struct hci_request *req, unsigned long opt)
1245{
1246 struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
1247 struct hci_dev *hdev = req->hdev;
1248 struct hci_cp_inquiry cp;
1249
1250 BT_DBG("%s", hdev->name);
1251
1252 if (test_bit(HCI_INQUIRY, &hdev->flags))
1253 return 0;
1254
1255 /* Start Inquiry */
1256 memcpy(&cp.lap, &ir->lap, 3);
1257 cp.length = ir->length;
1258 cp.num_rsp = ir->num_rsp;
1259 hci_req_add(req, HCI_OP_INQUIRY, sizeof(cp), &cp);
1260
1261 return 0;
1262}
1263
1264int hci_inquiry(void __user *arg)
1265{
1266 __u8 __user *ptr = arg;
1267 struct hci_inquiry_req ir;
1268 struct hci_dev *hdev;
1269 int err = 0, do_inquiry = 0, max_rsp;
1270 long timeo;
1271 __u8 *buf;
1272
1273 if (copy_from_user(&ir, ptr, sizeof(ir)))
1274 return -EFAULT;
1275
1276 hdev = hci_dev_get(ir.dev_id);
1277 if (!hdev)
1278 return -ENODEV;
1279
1280 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
1281 err = -EBUSY;
1282 goto done;
1283 }
1284
1285 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
1286 err = -EOPNOTSUPP;
1287 goto done;
1288 }
1289
1290 if (hdev->dev_type != HCI_PRIMARY) {
1291 err = -EOPNOTSUPP;
1292 goto done;
1293 }
1294
1295 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
1296 err = -EOPNOTSUPP;
1297 goto done;
1298 }
1299
1300 hci_dev_lock(hdev);
1301 if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
1302 inquiry_cache_empty(hdev) || ir.flags & IREQ_CACHE_FLUSH) {
1303 hci_inquiry_cache_flush(hdev);
1304 do_inquiry = 1;
1305 }
1306 hci_dev_unlock(hdev);
1307
1308 timeo = ir.length * msecs_to_jiffies(2000);
1309
1310 if (do_inquiry) {
1311 err = hci_req_sync(hdev, hci_inq_req, (unsigned long) &ir,
1312 timeo, NULL);
1313 if (err < 0)
1314 goto done;
1315
1316 /* Wait until Inquiry procedure finishes (HCI_INQUIRY flag is
1317 * cleared). If it is interrupted by a signal, return -EINTR.
1318 */
1319 if (wait_on_bit(&hdev->flags, HCI_INQUIRY,
1320 TASK_INTERRUPTIBLE))
1321 return -EINTR;
1322 }
1323
1324 /* for unlimited number of responses we will use buffer with
1325 * 255 entries
1326 */
1327 max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
1328
1329 /* cache_dump can't sleep. Therefore we allocate temp buffer and then
1330 * copy it to the user space.
1331 */
1332 buf = kmalloc_array(max_rsp, sizeof(struct inquiry_info), GFP_KERNEL);
1333 if (!buf) {
1334 err = -ENOMEM;
1335 goto done;
1336 }
1337
1338 hci_dev_lock(hdev);
1339 ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
1340 hci_dev_unlock(hdev);
1341
1342 BT_DBG("num_rsp %d", ir.num_rsp);
1343
1344 if (!copy_to_user(ptr, &ir, sizeof(ir))) {
1345 ptr += sizeof(ir);
1346 if (copy_to_user(ptr, buf, sizeof(struct inquiry_info) *
1347 ir.num_rsp))
1348 err = -EFAULT;
1349 } else
1350 err = -EFAULT;
1351
1352 kfree(buf);
1353
1354done:
1355 hci_dev_put(hdev);
1356 return err;
1357}
1358
1359/**
1360 * hci_dev_get_bd_addr_from_property - Get the Bluetooth Device Address
1361 * (BD_ADDR) for a HCI device from
1362 * a firmware node property.
1363 * @hdev: The HCI device
1364 *
1365 * Search the firmware node for 'local-bd-address'.
1366 *
1367 * All-zero BD addresses are rejected, because those could be properties
1368 * that exist in the firmware tables, but were not updated by the firmware. For
1369 * example, the DTS could define 'local-bd-address', with zero BD addresses.
1370 */
1371static void hci_dev_get_bd_addr_from_property(struct hci_dev *hdev)
1372{
1373 struct fwnode_handle *fwnode = dev_fwnode(hdev->dev.parent);
1374 bdaddr_t ba;
1375 int ret;
1376
1377 ret = fwnode_property_read_u8_array(fwnode, "local-bd-address",
1378 (u8 *)&ba, sizeof(ba));
1379 if (ret < 0 || !bacmp(&ba, BDADDR_ANY))
1380 return;
1381
1382 bacpy(&hdev->public_addr, &ba);
1383}
1384
1385static int hci_dev_do_open(struct hci_dev *hdev)
1386{
1387 int ret = 0;
1388
1389 BT_DBG("%s %p", hdev->name, hdev);
1390
1391 hci_req_sync_lock(hdev);
1392
1393 if (hci_dev_test_flag(hdev, HCI_UNREGISTER)) {
1394 ret = -ENODEV;
1395 goto done;
1396 }
1397
1398 if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
1399 !hci_dev_test_flag(hdev, HCI_CONFIG)) {
1400 /* Check for rfkill but allow the HCI setup stage to
1401 * proceed (which in itself doesn't cause any RF activity).
1402 */
1403 if (hci_dev_test_flag(hdev, HCI_RFKILLED)) {
1404 ret = -ERFKILL;
1405 goto done;
1406 }
1407
1408 /* Check for valid public address or a configured static
1409 * random adddress, but let the HCI setup proceed to
1410 * be able to determine if there is a public address
1411 * or not.
1412 *
1413 * In case of user channel usage, it is not important
1414 * if a public address or static random address is
1415 * available.
1416 *
1417 * This check is only valid for BR/EDR controllers
1418 * since AMP controllers do not have an address.
1419 */
1420 if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1421 hdev->dev_type == HCI_PRIMARY &&
1422 !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
1423 !bacmp(&hdev->static_addr, BDADDR_ANY)) {
1424 ret = -EADDRNOTAVAIL;
1425 goto done;
1426 }
1427 }
1428
1429 if (test_bit(HCI_UP, &hdev->flags)) {
1430 ret = -EALREADY;
1431 goto done;
1432 }
1433
1434 if (hdev->open(hdev)) {
1435 ret = -EIO;
1436 goto done;
1437 }
1438
1439 set_bit(HCI_RUNNING, &hdev->flags);
1440 hci_sock_dev_event(hdev, HCI_DEV_OPEN);
1441
1442 atomic_set(&hdev->cmd_cnt, 1);
1443 set_bit(HCI_INIT, &hdev->flags);
1444
1445 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
1446 test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks)) {
1447 hci_sock_dev_event(hdev, HCI_DEV_SETUP);
1448
1449 if (hdev->setup)
1450 ret = hdev->setup(hdev);
1451
1452 if (ret)
1453 goto setup_failed;
1454
1455 if (test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks)) {
1456 if (!bacmp(&hdev->public_addr, BDADDR_ANY))
1457 hci_dev_get_bd_addr_from_property(hdev);
1458
1459 if (bacmp(&hdev->public_addr, BDADDR_ANY) &&
1460 hdev->set_bdaddr)
1461 ret = hdev->set_bdaddr(hdev,
1462 &hdev->public_addr);
1463 }
1464
1465setup_failed:
1466 /* The transport driver can set these quirks before
1467 * creating the HCI device or in its setup callback.
1468 *
1469 * In case any of them is set, the controller has to
1470 * start up as unconfigured.
1471 */
1472 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) ||
1473 test_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks))
1474 hci_dev_set_flag(hdev, HCI_UNCONFIGURED);
1475
1476 /* For an unconfigured controller it is required to
1477 * read at least the version information provided by
1478 * the Read Local Version Information command.
1479 *
1480 * If the set_bdaddr driver callback is provided, then
1481 * also the original Bluetooth public device address
1482 * will be read using the Read BD Address command.
1483 */
1484 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
1485 ret = __hci_unconf_init(hdev);
1486 }
1487
1488 if (hci_dev_test_flag(hdev, HCI_CONFIG)) {
1489 /* If public address change is configured, ensure that
1490 * the address gets programmed. If the driver does not
1491 * support changing the public address, fail the power
1492 * on procedure.
1493 */
1494 if (bacmp(&hdev->public_addr, BDADDR_ANY) &&
1495 hdev->set_bdaddr)
1496 ret = hdev->set_bdaddr(hdev, &hdev->public_addr);
1497 else
1498 ret = -EADDRNOTAVAIL;
1499 }
1500
1501 if (!ret) {
1502 if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
1503 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
1504 ret = __hci_init(hdev);
1505 if (!ret && hdev->post_init)
1506 ret = hdev->post_init(hdev);
1507 }
1508 }
1509
1510 /* If the HCI Reset command is clearing all diagnostic settings,
1511 * then they need to be reprogrammed after the init procedure
1512 * completed.
1513 */
1514 if (test_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks) &&
1515 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1516 hci_dev_test_flag(hdev, HCI_VENDOR_DIAG) && hdev->set_diag)
1517 ret = hdev->set_diag(hdev, true);
1518
1519 clear_bit(HCI_INIT, &hdev->flags);
1520
1521 if (!ret) {
1522 hci_dev_hold(hdev);
1523 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
1524 hci_adv_instances_set_rpa_expired(hdev, true);
1525 set_bit(HCI_UP, &hdev->flags);
1526 hci_sock_dev_event(hdev, HCI_DEV_UP);
1527 hci_leds_update_powered(hdev, true);
1528 if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
1529 !hci_dev_test_flag(hdev, HCI_CONFIG) &&
1530 !hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
1531 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1532 hci_dev_test_flag(hdev, HCI_MGMT) &&
1533 hdev->dev_type == HCI_PRIMARY) {
1534 ret = __hci_req_hci_power_on(hdev);
1535 mgmt_power_on(hdev, ret);
1536 }
1537 } else {
1538 /* Init failed, cleanup */
1539 flush_work(&hdev->tx_work);
1540 flush_work(&hdev->cmd_work);
1541 flush_work(&hdev->rx_work);
1542
1543 skb_queue_purge(&hdev->cmd_q);
1544 skb_queue_purge(&hdev->rx_q);
1545
1546 if (hdev->flush)
1547 hdev->flush(hdev);
1548
1549 if (hdev->sent_cmd) {
1550 kfree_skb(hdev->sent_cmd);
1551 hdev->sent_cmd = NULL;
1552 }
1553
1554 clear_bit(HCI_RUNNING, &hdev->flags);
1555 hci_sock_dev_event(hdev, HCI_DEV_CLOSE);
1556
1557 hdev->close(hdev);
1558 hdev->flags &= BIT(HCI_RAW);
1559 }
1560
1561done:
1562 hci_req_sync_unlock(hdev);
1563 return ret;
1564}
1565
1566/* ---- HCI ioctl helpers ---- */
1567
1568int hci_dev_open(__u16 dev)
1569{
1570 struct hci_dev *hdev;
1571 int err;
1572
1573 hdev = hci_dev_get(dev);
1574 if (!hdev)
1575 return -ENODEV;
1576
1577 /* Devices that are marked as unconfigured can only be powered
1578 * up as user channel. Trying to bring them up as normal devices
1579 * will result into a failure. Only user channel operation is
1580 * possible.
1581 *
1582 * When this function is called for a user channel, the flag
1583 * HCI_USER_CHANNEL will be set first before attempting to
1584 * open the device.
1585 */
1586 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
1587 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
1588 err = -EOPNOTSUPP;
1589 goto done;
1590 }
1591
1592 /* We need to ensure that no other power on/off work is pending
1593 * before proceeding to call hci_dev_do_open. This is
1594 * particularly important if the setup procedure has not yet
1595 * completed.
1596 */
1597 if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF))
1598 cancel_delayed_work(&hdev->power_off);
1599
1600 /* After this call it is guaranteed that the setup procedure
1601 * has finished. This means that error conditions like RFKILL
1602 * or no valid public or static random address apply.
1603 */
1604 flush_workqueue(hdev->req_workqueue);
1605
1606 /* For controllers not using the management interface and that
1607 * are brought up using legacy ioctl, set the HCI_BONDABLE bit
1608 * so that pairing works for them. Once the management interface
1609 * is in use this bit will be cleared again and userspace has
1610 * to explicitly enable it.
1611 */
1612 if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1613 !hci_dev_test_flag(hdev, HCI_MGMT))
1614 hci_dev_set_flag(hdev, HCI_BONDABLE);
1615
1616 err = hci_dev_do_open(hdev);
1617
1618done:
1619 hci_dev_put(hdev);
1620 return err;
1621}
1622
1623/* This function requires the caller holds hdev->lock */
1624static void hci_pend_le_actions_clear(struct hci_dev *hdev)
1625{
1626 struct hci_conn_params *p;
1627
1628 list_for_each_entry(p, &hdev->le_conn_params, list) {
1629 if (p->conn) {
1630 hci_conn_drop(p->conn);
1631 hci_conn_put(p->conn);
1632 p->conn = NULL;
1633 }
1634 list_del_init(&p->action);
1635 }
1636
1637 BT_DBG("All LE pending actions cleared");
1638}
1639
1640int hci_dev_do_close(struct hci_dev *hdev)
1641{
1642 bool auto_off;
1643
1644 BT_DBG("%s %p", hdev->name, hdev);
1645
1646 if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) &&
1647 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1648 test_bit(HCI_UP, &hdev->flags)) {
1649 /* Execute vendor specific shutdown routine */
1650 if (hdev->shutdown)
1651 hdev->shutdown(hdev);
1652 }
1653
1654 cancel_delayed_work(&hdev->power_off);
1655
1656 hci_request_cancel_all(hdev);
1657 hci_req_sync_lock(hdev);
1658
1659 if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
1660 cancel_delayed_work_sync(&hdev->cmd_timer);
1661 hci_req_sync_unlock(hdev);
1662 return 0;
1663 }
1664
1665 hci_leds_update_powered(hdev, false);
1666
1667 /* Flush RX and TX works */
1668 flush_work(&hdev->tx_work);
1669 flush_work(&hdev->rx_work);
1670
1671 if (hdev->discov_timeout > 0) {
1672 hdev->discov_timeout = 0;
1673 hci_dev_clear_flag(hdev, HCI_DISCOVERABLE);
1674 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
1675 }
1676
1677 if (hci_dev_test_and_clear_flag(hdev, HCI_SERVICE_CACHE))
1678 cancel_delayed_work(&hdev->service_cache);
1679
1680 if (hci_dev_test_flag(hdev, HCI_MGMT)) {
1681 struct adv_info *adv_instance;
1682
1683 cancel_delayed_work_sync(&hdev->rpa_expired);
1684
1685 list_for_each_entry(adv_instance, &hdev->adv_instances, list)
1686 cancel_delayed_work_sync(&adv_instance->rpa_expired_cb);
1687 }
1688
1689 /* Avoid potential lockdep warnings from the *_flush() calls by
1690 * ensuring the workqueue is empty up front.
1691 */
1692 drain_workqueue(hdev->workqueue);
1693
1694 hci_dev_lock(hdev);
1695
1696 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1697
1698 auto_off = hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF);
1699
1700 if (!auto_off && hdev->dev_type == HCI_PRIMARY &&
1701 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
1702 hci_dev_test_flag(hdev, HCI_MGMT))
1703 __mgmt_power_off(hdev);
1704
1705 hci_inquiry_cache_flush(hdev);
1706 hci_pend_le_actions_clear(hdev);
1707 hci_conn_hash_flush(hdev);
1708 hci_dev_unlock(hdev);
1709
1710 smp_unregister(hdev);
1711
1712 hci_sock_dev_event(hdev, HCI_DEV_DOWN);
1713
1714 if (hdev->flush)
1715 hdev->flush(hdev);
1716
1717 /* Reset device */
1718 skb_queue_purge(&hdev->cmd_q);
1719 atomic_set(&hdev->cmd_cnt, 1);
1720 if (test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks) &&
1721 !auto_off && !hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
1722 set_bit(HCI_INIT, &hdev->flags);
1723 __hci_req_sync(hdev, hci_reset_req, 0, HCI_CMD_TIMEOUT, NULL);
1724 clear_bit(HCI_INIT, &hdev->flags);
1725 }
1726
1727 /* flush cmd work */
1728 flush_work(&hdev->cmd_work);
1729
1730 /* Drop queues */
1731 skb_queue_purge(&hdev->rx_q);
1732 skb_queue_purge(&hdev->cmd_q);
1733 skb_queue_purge(&hdev->raw_q);
1734
1735 /* Drop last sent command */
1736 if (hdev->sent_cmd) {
1737 cancel_delayed_work_sync(&hdev->cmd_timer);
1738 kfree_skb(hdev->sent_cmd);
1739 hdev->sent_cmd = NULL;
1740 }
1741
1742 clear_bit(HCI_RUNNING, &hdev->flags);
1743 hci_sock_dev_event(hdev, HCI_DEV_CLOSE);
1744
1745 /* After this point our queues are empty
1746 * and no tasks are scheduled. */
1747 hdev->close(hdev);
1748
1749 /* Clear flags */
1750 hdev->flags &= BIT(HCI_RAW);
1751 hci_dev_clear_volatile_flags(hdev);
1752
1753 /* Controller radio is available but is currently powered down */
1754 hdev->amp_status = AMP_STATUS_POWERED_DOWN;
1755
1756 memset(hdev->eir, 0, sizeof(hdev->eir));
1757 memset(hdev->dev_class, 0, sizeof(hdev->dev_class));
1758 bacpy(&hdev->random_addr, BDADDR_ANY);
1759
1760 hci_req_sync_unlock(hdev);
1761
1762 hci_dev_put(hdev);
1763 return 0;
1764}
1765
1766int hci_dev_close(__u16 dev)
1767{
1768 struct hci_dev *hdev;
1769 int err;
1770
1771 hdev = hci_dev_get(dev);
1772 if (!hdev)
1773 return -ENODEV;
1774
1775 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
1776 err = -EBUSY;
1777 goto done;
1778 }
1779
1780 if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF))
1781 cancel_delayed_work(&hdev->power_off);
1782
1783 err = hci_dev_do_close(hdev);
1784
1785done:
1786 hci_dev_put(hdev);
1787 return err;
1788}
1789
1790static int hci_dev_do_reset(struct hci_dev *hdev)
1791{
1792 int ret;
1793
1794 BT_DBG("%s %p", hdev->name, hdev);
1795
1796 hci_req_sync_lock(hdev);
1797
1798 /* Drop queues */
1799 skb_queue_purge(&hdev->rx_q);
1800 skb_queue_purge(&hdev->cmd_q);
1801
1802 /* Avoid potential lockdep warnings from the *_flush() calls by
1803 * ensuring the workqueue is empty up front.
1804 */
1805 drain_workqueue(hdev->workqueue);
1806
1807 hci_dev_lock(hdev);
1808 hci_inquiry_cache_flush(hdev);
1809 hci_conn_hash_flush(hdev);
1810 hci_dev_unlock(hdev);
1811
1812 if (hdev->flush)
1813 hdev->flush(hdev);
1814
1815 atomic_set(&hdev->cmd_cnt, 1);
1816 hdev->acl_cnt = 0; hdev->sco_cnt = 0; hdev->le_cnt = 0;
1817
1818 ret = __hci_req_sync(hdev, hci_reset_req, 0, HCI_INIT_TIMEOUT, NULL);
1819
1820 hci_req_sync_unlock(hdev);
1821 return ret;
1822}
1823
1824int hci_dev_reset(__u16 dev)
1825{
1826 struct hci_dev *hdev;
1827 int err;
1828
1829 hdev = hci_dev_get(dev);
1830 if (!hdev)
1831 return -ENODEV;
1832
1833 if (!test_bit(HCI_UP, &hdev->flags)) {
1834 err = -ENETDOWN;
1835 goto done;
1836 }
1837
1838 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
1839 err = -EBUSY;
1840 goto done;
1841 }
1842
1843 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
1844 err = -EOPNOTSUPP;
1845 goto done;
1846 }
1847
1848 err = hci_dev_do_reset(hdev);
1849
1850done:
1851 hci_dev_put(hdev);
1852 return err;
1853}
1854
1855int hci_dev_reset_stat(__u16 dev)
1856{
1857 struct hci_dev *hdev;
1858 int ret = 0;
1859
1860 hdev = hci_dev_get(dev);
1861 if (!hdev)
1862 return -ENODEV;
1863
1864 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
1865 ret = -EBUSY;
1866 goto done;
1867 }
1868
1869 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
1870 ret = -EOPNOTSUPP;
1871 goto done;
1872 }
1873
1874 memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
1875
1876done:
1877 hci_dev_put(hdev);
1878 return ret;
1879}
1880
1881static void hci_update_scan_state(struct hci_dev *hdev, u8 scan)
1882{
1883 bool conn_changed, discov_changed;
1884
1885 BT_DBG("%s scan 0x%02x", hdev->name, scan);
1886
1887 if ((scan & SCAN_PAGE))
1888 conn_changed = !hci_dev_test_and_set_flag(hdev,
1889 HCI_CONNECTABLE);
1890 else
1891 conn_changed = hci_dev_test_and_clear_flag(hdev,
1892 HCI_CONNECTABLE);
1893
1894 if ((scan & SCAN_INQUIRY)) {
1895 discov_changed = !hci_dev_test_and_set_flag(hdev,
1896 HCI_DISCOVERABLE);
1897 } else {
1898 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
1899 discov_changed = hci_dev_test_and_clear_flag(hdev,
1900 HCI_DISCOVERABLE);
1901 }
1902
1903 if (!hci_dev_test_flag(hdev, HCI_MGMT))
1904 return;
1905
1906 if (conn_changed || discov_changed) {
1907 /* In case this was disabled through mgmt */
1908 hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
1909
1910 if (hci_dev_test_flag(hdev, HCI_LE_ENABLED))
1911 hci_req_update_adv_data(hdev, hdev->cur_adv_instance);
1912
1913 mgmt_new_settings(hdev);
1914 }
1915}
1916
1917int hci_dev_cmd(unsigned int cmd, void __user *arg)
1918{
1919 struct hci_dev *hdev;
1920 struct hci_dev_req dr;
1921 int err = 0;
1922
1923 if (copy_from_user(&dr, arg, sizeof(dr)))
1924 return -EFAULT;
1925
1926 hdev = hci_dev_get(dr.dev_id);
1927 if (!hdev)
1928 return -ENODEV;
1929
1930 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
1931 err = -EBUSY;
1932 goto done;
1933 }
1934
1935 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
1936 err = -EOPNOTSUPP;
1937 goto done;
1938 }
1939
1940 if (hdev->dev_type != HCI_PRIMARY) {
1941 err = -EOPNOTSUPP;
1942 goto done;
1943 }
1944
1945 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
1946 err = -EOPNOTSUPP;
1947 goto done;
1948 }
1949
1950 switch (cmd) {
1951 case HCISETAUTH:
1952 err = hci_req_sync(hdev, hci_auth_req, dr.dev_opt,
1953 HCI_INIT_TIMEOUT, NULL);
1954 break;
1955
1956 case HCISETENCRYPT:
1957 if (!lmp_encrypt_capable(hdev)) {
1958 err = -EOPNOTSUPP;
1959 break;
1960 }
1961
1962 if (!test_bit(HCI_AUTH, &hdev->flags)) {
1963 /* Auth must be enabled first */
1964 err = hci_req_sync(hdev, hci_auth_req, dr.dev_opt,
1965 HCI_INIT_TIMEOUT, NULL);
1966 if (err)
1967 break;
1968 }
1969
1970 err = hci_req_sync(hdev, hci_encrypt_req, dr.dev_opt,
1971 HCI_INIT_TIMEOUT, NULL);
1972 break;
1973
1974 case HCISETSCAN:
1975 err = hci_req_sync(hdev, hci_scan_req, dr.dev_opt,
1976 HCI_INIT_TIMEOUT, NULL);
1977
1978 /* Ensure that the connectable and discoverable states
1979 * get correctly modified as this was a non-mgmt change.
1980 */
1981 if (!err)
1982 hci_update_scan_state(hdev, dr.dev_opt);
1983 break;
1984
1985 case HCISETLINKPOL:
1986 err = hci_req_sync(hdev, hci_linkpol_req, dr.dev_opt,
1987 HCI_INIT_TIMEOUT, NULL);
1988 break;
1989
1990 case HCISETLINKMODE:
1991 hdev->link_mode = ((__u16) dr.dev_opt) &
1992 (HCI_LM_MASTER | HCI_LM_ACCEPT);
1993 break;
1994
1995 case HCISETPTYPE:
1996 if (hdev->pkt_type == (__u16) dr.dev_opt)
1997 break;
1998
1999 hdev->pkt_type = (__u16) dr.dev_opt;
2000 mgmt_phy_configuration_changed(hdev, NULL);
2001 break;
2002
2003 case HCISETACLMTU:
2004 hdev->acl_mtu = *((__u16 *) &dr.dev_opt + 1);
2005 hdev->acl_pkts = *((__u16 *) &dr.dev_opt + 0);
2006 break;
2007
2008 case HCISETSCOMTU:
2009 hdev->sco_mtu = *((__u16 *) &dr.dev_opt + 1);
2010 hdev->sco_pkts = *((__u16 *) &dr.dev_opt + 0);
2011 break;
2012
2013 default:
2014 err = -EINVAL;
2015 break;
2016 }
2017
2018done:
2019 hci_dev_put(hdev);
2020 return err;
2021}
2022
2023int hci_get_dev_list(void __user *arg)
2024{
2025 struct hci_dev *hdev;
2026 struct hci_dev_list_req *dl;
2027 struct hci_dev_req *dr;
2028 int n = 0, size, err;
2029 __u16 dev_num;
2030
2031 if (get_user(dev_num, (__u16 __user *) arg))
2032 return -EFAULT;
2033
2034 if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
2035 return -EINVAL;
2036
2037 size = sizeof(*dl) + dev_num * sizeof(*dr);
2038
2039 dl = kzalloc(size, GFP_KERNEL);
2040 if (!dl)
2041 return -ENOMEM;
2042
2043 dr = dl->dev_req;
2044
2045 read_lock(&hci_dev_list_lock);
2046 list_for_each_entry(hdev, &hci_dev_list, list) {
2047 unsigned long flags = hdev->flags;
2048
2049 /* When the auto-off is configured it means the transport
2050 * is running, but in that case still indicate that the
2051 * device is actually down.
2052 */
2053 if (hci_dev_test_flag(hdev, HCI_AUTO_OFF))
2054 flags &= ~BIT(HCI_UP);
2055
2056 (dr + n)->dev_id = hdev->id;
2057 (dr + n)->dev_opt = flags;
2058
2059 if (++n >= dev_num)
2060 break;
2061 }
2062 read_unlock(&hci_dev_list_lock);
2063
2064 dl->dev_num = n;
2065 size = sizeof(*dl) + n * sizeof(*dr);
2066
2067 err = copy_to_user(arg, dl, size);
2068 kfree(dl);
2069
2070 return err ? -EFAULT : 0;
2071}
2072
2073int hci_get_dev_info(void __user *arg)
2074{
2075 struct hci_dev *hdev;
2076 struct hci_dev_info di;
2077 unsigned long flags;
2078 int err = 0;
2079
2080 if (copy_from_user(&di, arg, sizeof(di)))
2081 return -EFAULT;
2082
2083 hdev = hci_dev_get(di.dev_id);
2084 if (!hdev)
2085 return -ENODEV;
2086
2087 /* When the auto-off is configured it means the transport
2088 * is running, but in that case still indicate that the
2089 * device is actually down.
2090 */
2091 if (hci_dev_test_flag(hdev, HCI_AUTO_OFF))
2092 flags = hdev->flags & ~BIT(HCI_UP);
2093 else
2094 flags = hdev->flags;
2095
2096 strcpy(di.name, hdev->name);
2097 di.bdaddr = hdev->bdaddr;
2098 di.type = (hdev->bus & 0x0f) | ((hdev->dev_type & 0x03) << 4);
2099 di.flags = flags;
2100 di.pkt_type = hdev->pkt_type;
2101 if (lmp_bredr_capable(hdev)) {
2102 di.acl_mtu = hdev->acl_mtu;
2103 di.acl_pkts = hdev->acl_pkts;
2104 di.sco_mtu = hdev->sco_mtu;
2105 di.sco_pkts = hdev->sco_pkts;
2106 } else {
2107 di.acl_mtu = hdev->le_mtu;
2108 di.acl_pkts = hdev->le_pkts;
2109 di.sco_mtu = 0;
2110 di.sco_pkts = 0;
2111 }
2112 di.link_policy = hdev->link_policy;
2113 di.link_mode = hdev->link_mode;
2114
2115 memcpy(&di.stat, &hdev->stat, sizeof(di.stat));
2116 memcpy(&di.features, &hdev->features, sizeof(di.features));
2117
2118 if (copy_to_user(arg, &di, sizeof(di)))
2119 err = -EFAULT;
2120
2121 hci_dev_put(hdev);
2122
2123 return err;
2124}
2125
2126/* ---- Interface to HCI drivers ---- */
2127
2128static int hci_rfkill_set_block(void *data, bool blocked)
2129{
2130 struct hci_dev *hdev = data;
2131
2132 BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked);
2133
2134 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL))
2135 return -EBUSY;
2136
2137 if (blocked) {
2138 hci_dev_set_flag(hdev, HCI_RFKILLED);
2139 if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
2140 !hci_dev_test_flag(hdev, HCI_CONFIG))
2141 hci_dev_do_close(hdev);
2142 } else {
2143 hci_dev_clear_flag(hdev, HCI_RFKILLED);
2144 }
2145
2146 return 0;
2147}
2148
2149static const struct rfkill_ops hci_rfkill_ops = {
2150 .set_block = hci_rfkill_set_block,
2151};
2152
2153static void hci_power_on(struct work_struct *work)
2154{
2155 struct hci_dev *hdev = container_of(work, struct hci_dev, power_on);
2156 int err;
2157
2158 BT_DBG("%s", hdev->name);
2159
2160 if (test_bit(HCI_UP, &hdev->flags) &&
2161 hci_dev_test_flag(hdev, HCI_MGMT) &&
2162 hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF)) {
2163 cancel_delayed_work(&hdev->power_off);
2164 hci_req_sync_lock(hdev);
2165 err = __hci_req_hci_power_on(hdev);
2166 hci_req_sync_unlock(hdev);
2167 mgmt_power_on(hdev, err);
2168 return;
2169 }
2170
2171 err = hci_dev_do_open(hdev);
2172 if (err < 0) {
2173 hci_dev_lock(hdev);
2174 mgmt_set_powered_failed(hdev, err);
2175 hci_dev_unlock(hdev);
2176 return;
2177 }
2178
2179 /* During the HCI setup phase, a few error conditions are
2180 * ignored and they need to be checked now. If they are still
2181 * valid, it is important to turn the device back off.
2182 */
2183 if (hci_dev_test_flag(hdev, HCI_RFKILLED) ||
2184 hci_dev_test_flag(hdev, HCI_UNCONFIGURED) ||
2185 (hdev->dev_type == HCI_PRIMARY &&
2186 !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
2187 !bacmp(&hdev->static_addr, BDADDR_ANY))) {
2188 hci_dev_clear_flag(hdev, HCI_AUTO_OFF);
2189 hci_dev_do_close(hdev);
2190 } else if (hci_dev_test_flag(hdev, HCI_AUTO_OFF)) {
2191 queue_delayed_work(hdev->req_workqueue, &hdev->power_off,
2192 HCI_AUTO_OFF_TIMEOUT);
2193 }
2194
2195 if (hci_dev_test_and_clear_flag(hdev, HCI_SETUP)) {
2196 /* For unconfigured devices, set the HCI_RAW flag
2197 * so that userspace can easily identify them.
2198 */
2199 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
2200 set_bit(HCI_RAW, &hdev->flags);
2201
2202 /* For fully configured devices, this will send
2203 * the Index Added event. For unconfigured devices,
2204 * it will send Unconfigued Index Added event.
2205 *
2206 * Devices with HCI_QUIRK_RAW_DEVICE are ignored
2207 * and no event will be send.
2208 */
2209 mgmt_index_added(hdev);
2210 } else if (hci_dev_test_and_clear_flag(hdev, HCI_CONFIG)) {
2211 /* When the controller is now configured, then it
2212 * is important to clear the HCI_RAW flag.
2213 */
2214 if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
2215 clear_bit(HCI_RAW, &hdev->flags);
2216
2217 /* Powering on the controller with HCI_CONFIG set only
2218 * happens with the transition from unconfigured to
2219 * configured. This will send the Index Added event.
2220 */
2221 mgmt_index_added(hdev);
2222 }
2223}
2224
2225static void hci_power_off(struct work_struct *work)
2226{
2227 struct hci_dev *hdev = container_of(work, struct hci_dev,
2228 power_off.work);
2229
2230 BT_DBG("%s", hdev->name);
2231
2232 hci_dev_do_close(hdev);
2233}
2234
2235static void hci_error_reset(struct work_struct *work)
2236{
2237 struct hci_dev *hdev = container_of(work, struct hci_dev, error_reset);
2238
2239 BT_DBG("%s", hdev->name);
2240
2241 if (hdev->hw_error)
2242 hdev->hw_error(hdev, hdev->hw_error_code);
2243 else
2244 bt_dev_err(hdev, "hardware error 0x%2.2x", hdev->hw_error_code);
2245
2246 if (hci_dev_do_close(hdev))
2247 return;
2248
2249 hci_dev_do_open(hdev);
2250}
2251
2252void hci_uuids_clear(struct hci_dev *hdev)
2253{
2254 struct bt_uuid *uuid, *tmp;
2255
2256 list_for_each_entry_safe(uuid, tmp, &hdev->uuids, list) {
2257 list_del(&uuid->list);
2258 kfree(uuid);
2259 }
2260}
2261
2262void hci_link_keys_clear(struct hci_dev *hdev)
2263{
2264 struct link_key *key;
2265
2266 list_for_each_entry_rcu(key, &hdev->link_keys, list) {
2267 list_del_rcu(&key->list);
2268 kfree_rcu(key, rcu);
2269 }
2270}
2271
2272void hci_smp_ltks_clear(struct hci_dev *hdev)
2273{
2274 struct smp_ltk *k;
2275
2276 list_for_each_entry_rcu(k, &hdev->long_term_keys, list) {
2277 list_del_rcu(&k->list);
2278 kfree_rcu(k, rcu);
2279 }
2280}
2281
2282void hci_smp_irks_clear(struct hci_dev *hdev)
2283{
2284 struct smp_irk *k;
2285
2286 list_for_each_entry_rcu(k, &hdev->identity_resolving_keys, list) {
2287 list_del_rcu(&k->list);
2288 kfree_rcu(k, rcu);
2289 }
2290}
2291
2292struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
2293{
2294 struct link_key *k;
2295
2296 rcu_read_lock();
2297 list_for_each_entry_rcu(k, &hdev->link_keys, list) {
2298 if (bacmp(bdaddr, &k->bdaddr) == 0) {
2299 rcu_read_unlock();
2300 return k;
2301 }
2302 }
2303 rcu_read_unlock();
2304
2305 return NULL;
2306}
2307
2308static bool hci_persistent_key(struct hci_dev *hdev, struct hci_conn *conn,
2309 u8 key_type, u8 old_key_type)
2310{
2311 /* Legacy key */
2312 if (key_type < 0x03)
2313 return true;
2314
2315 /* Debug keys are insecure so don't store them persistently */
2316 if (key_type == HCI_LK_DEBUG_COMBINATION)
2317 return false;
2318
2319 /* Changed combination key and there's no previous one */
2320 if (key_type == HCI_LK_CHANGED_COMBINATION && old_key_type == 0xff)
2321 return false;
2322
2323 /* Security mode 3 case */
2324 if (!conn)
2325 return true;
2326
2327 /* BR/EDR key derived using SC from an LE link */
2328 if (conn->type == LE_LINK)
2329 return true;
2330
2331 /* Neither local nor remote side had no-bonding as requirement */
2332 if (conn->auth_type > 0x01 && conn->remote_auth > 0x01)
2333 return true;
2334
2335 /* Local side had dedicated bonding as requirement */
2336 if (conn->auth_type == 0x02 || conn->auth_type == 0x03)
2337 return true;
2338
2339 /* Remote side had dedicated bonding as requirement */
2340 if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03)
2341 return true;
2342
2343 /* If none of the above criteria match, then don't store the key
2344 * persistently */
2345 return false;
2346}
2347
2348static u8 ltk_role(u8 type)
2349{
2350 if (type == SMP_LTK)
2351 return HCI_ROLE_MASTER;
2352
2353 return HCI_ROLE_SLAVE;
2354}
2355
2356struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
2357 u8 addr_type, u8 role)
2358{
2359 struct smp_ltk *k;
2360
2361 rcu_read_lock();
2362 list_for_each_entry_rcu(k, &hdev->long_term_keys, list) {
2363 if (addr_type != k->bdaddr_type || bacmp(bdaddr, &k->bdaddr))
2364 continue;
2365
2366 if (smp_ltk_is_sc(k) || ltk_role(k->type) == role) {
2367 rcu_read_unlock();
2368 return k;
2369 }
2370 }
2371 rcu_read_unlock();
2372
2373 return NULL;
2374}
2375
2376struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa)
2377{
2378 struct smp_irk *irk;
2379
2380 rcu_read_lock();
2381 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
2382 if (!bacmp(&irk->rpa, rpa)) {
2383 rcu_read_unlock();
2384 return irk;
2385 }
2386 }
2387
2388 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
2389 if (smp_irk_matches(hdev, irk->val, rpa)) {
2390 bacpy(&irk->rpa, rpa);
2391 rcu_read_unlock();
2392 return irk;
2393 }
2394 }
2395 rcu_read_unlock();
2396
2397 return NULL;
2398}
2399
2400struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
2401 u8 addr_type)
2402{
2403 struct smp_irk *irk;
2404
2405 /* Identity Address must be public or static random */
2406 if (addr_type == ADDR_LE_DEV_RANDOM && (bdaddr->b[5] & 0xc0) != 0xc0)
2407 return NULL;
2408
2409 rcu_read_lock();
2410 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
2411 if (addr_type == irk->addr_type &&
2412 bacmp(bdaddr, &irk->bdaddr) == 0) {
2413 rcu_read_unlock();
2414 return irk;
2415 }
2416 }
2417 rcu_read_unlock();
2418
2419 return NULL;
2420}
2421
2422struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
2423 bdaddr_t *bdaddr, u8 *val, u8 type,
2424 u8 pin_len, bool *persistent)
2425{
2426 struct link_key *key, *old_key;
2427 u8 old_key_type;
2428
2429 old_key = hci_find_link_key(hdev, bdaddr);
2430 if (old_key) {
2431 old_key_type = old_key->type;
2432 key = old_key;
2433 } else {
2434 old_key_type = conn ? conn->key_type : 0xff;
2435 key = kzalloc(sizeof(*key), GFP_KERNEL);
2436 if (!key)
2437 return NULL;
2438 list_add_rcu(&key->list, &hdev->link_keys);
2439 }
2440
2441 BT_DBG("%s key for %pMR type %u", hdev->name, bdaddr, type);
2442
2443 /* Some buggy controller combinations generate a changed
2444 * combination key for legacy pairing even when there's no
2445 * previous key */
2446 if (type == HCI_LK_CHANGED_COMBINATION &&
2447 (!conn || conn->remote_auth == 0xff) && old_key_type == 0xff) {
2448 type = HCI_LK_COMBINATION;
2449 if (conn)
2450 conn->key_type = type;
2451 }
2452
2453 bacpy(&key->bdaddr, bdaddr);
2454 memcpy(key->val, val, HCI_LINK_KEY_SIZE);
2455 key->pin_len = pin_len;
2456
2457 if (type == HCI_LK_CHANGED_COMBINATION)
2458 key->type = old_key_type;
2459 else
2460 key->type = type;
2461
2462 if (persistent)
2463 *persistent = hci_persistent_key(hdev, conn, type,
2464 old_key_type);
2465
2466 return key;
2467}
2468
2469struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
2470 u8 addr_type, u8 type, u8 authenticated,
2471 u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand)
2472{
2473 struct smp_ltk *key, *old_key;
2474 u8 role = ltk_role(type);
2475
2476 old_key = hci_find_ltk(hdev, bdaddr, addr_type, role);
2477 if (old_key)
2478 key = old_key;
2479 else {
2480 key = kzalloc(sizeof(*key), GFP_KERNEL);
2481 if (!key)
2482 return NULL;
2483 list_add_rcu(&key->list, &hdev->long_term_keys);
2484 }
2485
2486 bacpy(&key->bdaddr, bdaddr);
2487 key->bdaddr_type = addr_type;
2488 memcpy(key->val, tk, sizeof(key->val));
2489 key->authenticated = authenticated;
2490 key->ediv = ediv;
2491 key->rand = rand;
2492 key->enc_size = enc_size;
2493 key->type = type;
2494
2495 return key;
2496}
2497
2498struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
2499 u8 addr_type, u8 val[16], bdaddr_t *rpa)
2500{
2501 struct smp_irk *irk;
2502
2503 irk = hci_find_irk_by_addr(hdev, bdaddr, addr_type);
2504 if (!irk) {
2505 irk = kzalloc(sizeof(*irk), GFP_KERNEL);
2506 if (!irk)
2507 return NULL;
2508
2509 bacpy(&irk->bdaddr, bdaddr);
2510 irk->addr_type = addr_type;
2511
2512 list_add_rcu(&irk->list, &hdev->identity_resolving_keys);
2513 }
2514
2515 memcpy(irk->val, val, 16);
2516 bacpy(&irk->rpa, rpa);
2517
2518 return irk;
2519}
2520
2521int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
2522{
2523 struct link_key *key;
2524
2525 key = hci_find_link_key(hdev, bdaddr);
2526 if (!key)
2527 return -ENOENT;
2528
2529 BT_DBG("%s removing %pMR", hdev->name, bdaddr);
2530
2531 list_del_rcu(&key->list);
2532 kfree_rcu(key, rcu);
2533
2534 return 0;
2535}
2536
2537int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type)
2538{
2539 struct smp_ltk *k;
2540 int removed = 0;
2541
2542 list_for_each_entry_rcu(k, &hdev->long_term_keys, list) {
2543 if (bacmp(bdaddr, &k->bdaddr) || k->bdaddr_type != bdaddr_type)
2544 continue;
2545
2546 BT_DBG("%s removing %pMR", hdev->name, bdaddr);
2547
2548 list_del_rcu(&k->list);
2549 kfree_rcu(k, rcu);
2550 removed++;
2551 }
2552
2553 return removed ? 0 : -ENOENT;
2554}
2555
2556void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type)
2557{
2558 struct smp_irk *k;
2559
2560 list_for_each_entry_rcu(k, &hdev->identity_resolving_keys, list) {
2561 if (bacmp(bdaddr, &k->bdaddr) || k->addr_type != addr_type)
2562 continue;
2563
2564 BT_DBG("%s removing %pMR", hdev->name, bdaddr);
2565
2566 list_del_rcu(&k->list);
2567 kfree_rcu(k, rcu);
2568 }
2569}
2570
2571bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
2572{
2573 struct smp_ltk *k;
2574 struct smp_irk *irk;
2575 u8 addr_type;
2576
2577 if (type == BDADDR_BREDR) {
2578 if (hci_find_link_key(hdev, bdaddr))
2579 return true;
2580 return false;
2581 }
2582
2583 /* Convert to HCI addr type which struct smp_ltk uses */
2584 if (type == BDADDR_LE_PUBLIC)
2585 addr_type = ADDR_LE_DEV_PUBLIC;
2586 else
2587 addr_type = ADDR_LE_DEV_RANDOM;
2588
2589 irk = hci_get_irk(hdev, bdaddr, addr_type);
2590 if (irk) {
2591 bdaddr = &irk->bdaddr;
2592 addr_type = irk->addr_type;
2593 }
2594
2595 rcu_read_lock();
2596 list_for_each_entry_rcu(k, &hdev->long_term_keys, list) {
2597 if (k->bdaddr_type == addr_type && !bacmp(bdaddr, &k->bdaddr)) {
2598 rcu_read_unlock();
2599 return true;
2600 }
2601 }
2602 rcu_read_unlock();
2603
2604 return false;
2605}
2606
2607/* HCI command timer function */
2608static void hci_cmd_timeout(struct work_struct *work)
2609{
2610 struct hci_dev *hdev = container_of(work, struct hci_dev,
2611 cmd_timer.work);
2612
2613 if (hdev->sent_cmd) {
2614 struct hci_command_hdr *sent = (void *) hdev->sent_cmd->data;
2615 u16 opcode = __le16_to_cpu(sent->opcode);
2616
2617 bt_dev_err(hdev, "command 0x%4.4x tx timeout", opcode);
2618 } else {
2619 bt_dev_err(hdev, "command tx timeout");
2620 }
2621
2622 if (hdev->cmd_timeout)
2623 hdev->cmd_timeout(hdev);
2624
2625 atomic_set(&hdev->cmd_cnt, 1);
2626 queue_work(hdev->workqueue, &hdev->cmd_work);
2627}
2628
2629struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
2630 bdaddr_t *bdaddr, u8 bdaddr_type)
2631{
2632 struct oob_data *data;
2633
2634 list_for_each_entry(data, &hdev->remote_oob_data, list) {
2635 if (bacmp(bdaddr, &data->bdaddr) != 0)
2636 continue;
2637 if (data->bdaddr_type != bdaddr_type)
2638 continue;
2639 return data;
2640 }
2641
2642 return NULL;
2643}
2644
2645int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
2646 u8 bdaddr_type)
2647{
2648 struct oob_data *data;
2649
2650 data = hci_find_remote_oob_data(hdev, bdaddr, bdaddr_type);
2651 if (!data)
2652 return -ENOENT;
2653
2654 BT_DBG("%s removing %pMR (%u)", hdev->name, bdaddr, bdaddr_type);
2655
2656 list_del(&data->list);
2657 kfree(data);
2658
2659 return 0;
2660}
2661
2662void hci_remote_oob_data_clear(struct hci_dev *hdev)
2663{
2664 struct oob_data *data, *n;
2665
2666 list_for_each_entry_safe(data, n, &hdev->remote_oob_data, list) {
2667 list_del(&data->list);
2668 kfree(data);
2669 }
2670}
2671
2672int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
2673 u8 bdaddr_type, u8 *hash192, u8 *rand192,
2674 u8 *hash256, u8 *rand256)
2675{
2676 struct oob_data *data;
2677
2678 data = hci_find_remote_oob_data(hdev, bdaddr, bdaddr_type);
2679 if (!data) {
2680 data = kmalloc(sizeof(*data), GFP_KERNEL);
2681 if (!data)
2682 return -ENOMEM;
2683
2684 bacpy(&data->bdaddr, bdaddr);
2685 data->bdaddr_type = bdaddr_type;
2686 list_add(&data->list, &hdev->remote_oob_data);
2687 }
2688
2689 if (hash192 && rand192) {
2690 memcpy(data->hash192, hash192, sizeof(data->hash192));
2691 memcpy(data->rand192, rand192, sizeof(data->rand192));
2692 if (hash256 && rand256)
2693 data->present = 0x03;
2694 } else {
2695 memset(data->hash192, 0, sizeof(data->hash192));
2696 memset(data->rand192, 0, sizeof(data->rand192));
2697 if (hash256 && rand256)
2698 data->present = 0x02;
2699 else
2700 data->present = 0x00;
2701 }
2702
2703 if (hash256 && rand256) {
2704 memcpy(data->hash256, hash256, sizeof(data->hash256));
2705 memcpy(data->rand256, rand256, sizeof(data->rand256));
2706 } else {
2707 memset(data->hash256, 0, sizeof(data->hash256));
2708 memset(data->rand256, 0, sizeof(data->rand256));
2709 if (hash192 && rand192)
2710 data->present = 0x01;
2711 }
2712
2713 BT_DBG("%s for %pMR", hdev->name, bdaddr);
2714
2715 return 0;
2716}
2717
2718/* This function requires the caller holds hdev->lock */
2719struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance)
2720{
2721 struct adv_info *adv_instance;
2722
2723 list_for_each_entry(adv_instance, &hdev->adv_instances, list) {
2724 if (adv_instance->instance == instance)
2725 return adv_instance;
2726 }
2727
2728 return NULL;
2729}
2730
2731/* This function requires the caller holds hdev->lock */
2732struct adv_info *hci_get_next_instance(struct hci_dev *hdev, u8 instance)
2733{
2734 struct adv_info *cur_instance;
2735
2736 cur_instance = hci_find_adv_instance(hdev, instance);
2737 if (!cur_instance)
2738 return NULL;
2739
2740 if (cur_instance == list_last_entry(&hdev->adv_instances,
2741 struct adv_info, list))
2742 return list_first_entry(&hdev->adv_instances,
2743 struct adv_info, list);
2744 else
2745 return list_next_entry(cur_instance, list);
2746}
2747
2748/* This function requires the caller holds hdev->lock */
2749int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance)
2750{
2751 struct adv_info *adv_instance;
2752
2753 adv_instance = hci_find_adv_instance(hdev, instance);
2754 if (!adv_instance)
2755 return -ENOENT;
2756
2757 BT_DBG("%s removing %dMR", hdev->name, instance);
2758
2759 if (hdev->cur_adv_instance == instance) {
2760 if (hdev->adv_instance_timeout) {
2761 cancel_delayed_work(&hdev->adv_instance_expire);
2762 hdev->adv_instance_timeout = 0;
2763 }
2764 hdev->cur_adv_instance = 0x00;
2765 }
2766
2767 cancel_delayed_work_sync(&adv_instance->rpa_expired_cb);
2768
2769 list_del(&adv_instance->list);
2770 kfree(adv_instance);
2771
2772 hdev->adv_instance_cnt--;
2773
2774 return 0;
2775}
2776
2777void hci_adv_instances_set_rpa_expired(struct hci_dev *hdev, bool rpa_expired)
2778{
2779 struct adv_info *adv_instance, *n;
2780
2781 list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list)
2782 adv_instance->rpa_expired = rpa_expired;
2783}
2784
2785/* This function requires the caller holds hdev->lock */
2786void hci_adv_instances_clear(struct hci_dev *hdev)
2787{
2788 struct adv_info *adv_instance, *n;
2789
2790 if (hdev->adv_instance_timeout) {
2791 cancel_delayed_work(&hdev->adv_instance_expire);
2792 hdev->adv_instance_timeout = 0;
2793 }
2794
2795 list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list) {
2796 cancel_delayed_work_sync(&adv_instance->rpa_expired_cb);
2797 list_del(&adv_instance->list);
2798 kfree(adv_instance);
2799 }
2800
2801 hdev->adv_instance_cnt = 0;
2802 hdev->cur_adv_instance = 0x00;
2803}
2804
2805static void adv_instance_rpa_expired(struct work_struct *work)
2806{
2807 struct adv_info *adv_instance = container_of(work, struct adv_info,
2808 rpa_expired_cb.work);
2809
2810 BT_DBG("");
2811
2812 adv_instance->rpa_expired = true;
2813}
2814
2815/* This function requires the caller holds hdev->lock */
2816int hci_add_adv_instance(struct hci_dev *hdev, u8 instance, u32 flags,
2817 u16 adv_data_len, u8 *adv_data,
2818 u16 scan_rsp_len, u8 *scan_rsp_data,
2819 u16 timeout, u16 duration)
2820{
2821 struct adv_info *adv_instance;
2822
2823 adv_instance = hci_find_adv_instance(hdev, instance);
2824 if (adv_instance) {
2825 memset(adv_instance->adv_data, 0,
2826 sizeof(adv_instance->adv_data));
2827 memset(adv_instance->scan_rsp_data, 0,
2828 sizeof(adv_instance->scan_rsp_data));
2829 } else {
2830 if (hdev->adv_instance_cnt >= hdev->le_num_of_adv_sets ||
2831 instance < 1 || instance > HCI_MAX_ADV_INSTANCES)
2832 return -EOVERFLOW;
2833
2834 adv_instance = kzalloc(sizeof(*adv_instance), GFP_KERNEL);
2835 if (!adv_instance)
2836 return -ENOMEM;
2837
2838 adv_instance->pending = true;
2839 adv_instance->instance = instance;
2840 list_add(&adv_instance->list, &hdev->adv_instances);
2841 hdev->adv_instance_cnt++;
2842 }
2843
2844 adv_instance->flags = flags;
2845 adv_instance->adv_data_len = adv_data_len;
2846 adv_instance->scan_rsp_len = scan_rsp_len;
2847
2848 if (adv_data_len)
2849 memcpy(adv_instance->adv_data, adv_data, adv_data_len);
2850
2851 if (scan_rsp_len)
2852 memcpy(adv_instance->scan_rsp_data,
2853 scan_rsp_data, scan_rsp_len);
2854
2855 adv_instance->timeout = timeout;
2856 adv_instance->remaining_time = timeout;
2857
2858 if (duration == 0)
2859 adv_instance->duration = HCI_DEFAULT_ADV_DURATION;
2860 else
2861 adv_instance->duration = duration;
2862
2863 adv_instance->tx_power = HCI_TX_POWER_INVALID;
2864
2865 INIT_DELAYED_WORK(&adv_instance->rpa_expired_cb,
2866 adv_instance_rpa_expired);
2867
2868 BT_DBG("%s for %dMR", hdev->name, instance);
2869
2870 return 0;
2871}
2872
2873struct bdaddr_list *hci_bdaddr_list_lookup(struct list_head *bdaddr_list,
2874 bdaddr_t *bdaddr, u8 type)
2875{
2876 struct bdaddr_list *b;
2877
2878 list_for_each_entry(b, bdaddr_list, list) {
2879 if (!bacmp(&b->bdaddr, bdaddr) && b->bdaddr_type == type)
2880 return b;
2881 }
2882
2883 return NULL;
2884}
2885
2886struct bdaddr_list_with_irk *hci_bdaddr_list_lookup_with_irk(
2887 struct list_head *bdaddr_list, bdaddr_t *bdaddr,
2888 u8 type)
2889{
2890 struct bdaddr_list_with_irk *b;
2891
2892 list_for_each_entry(b, bdaddr_list, list) {
2893 if (!bacmp(&b->bdaddr, bdaddr) && b->bdaddr_type == type)
2894 return b;
2895 }
2896
2897 return NULL;
2898}
2899
2900void hci_bdaddr_list_clear(struct list_head *bdaddr_list)
2901{
2902 struct bdaddr_list *b, *n;
2903
2904 list_for_each_entry_safe(b, n, bdaddr_list, list) {
2905 list_del(&b->list);
2906 kfree(b);
2907 }
2908}
2909
2910int hci_bdaddr_list_add(struct list_head *list, bdaddr_t *bdaddr, u8 type)
2911{
2912 struct bdaddr_list *entry;
2913
2914 if (!bacmp(bdaddr, BDADDR_ANY))
2915 return -EBADF;
2916
2917 if (hci_bdaddr_list_lookup(list, bdaddr, type))
2918 return -EEXIST;
2919
2920 entry = kzalloc(sizeof(*entry), GFP_KERNEL);
2921 if (!entry)
2922 return -ENOMEM;
2923
2924 bacpy(&entry->bdaddr, bdaddr);
2925 entry->bdaddr_type = type;
2926
2927 list_add(&entry->list, list);
2928
2929 return 0;
2930}
2931
2932int hci_bdaddr_list_add_with_irk(struct list_head *list, bdaddr_t *bdaddr,
2933 u8 type, u8 *peer_irk, u8 *local_irk)
2934{
2935 struct bdaddr_list_with_irk *entry;
2936
2937 if (!bacmp(bdaddr, BDADDR_ANY))
2938 return -EBADF;
2939
2940 if (hci_bdaddr_list_lookup(list, bdaddr, type))
2941 return -EEXIST;
2942
2943 entry = kzalloc(sizeof(*entry), GFP_KERNEL);
2944 if (!entry)
2945 return -ENOMEM;
2946
2947 bacpy(&entry->bdaddr, bdaddr);
2948 entry->bdaddr_type = type;
2949
2950 if (peer_irk)
2951 memcpy(entry->peer_irk, peer_irk, 16);
2952
2953 if (local_irk)
2954 memcpy(entry->local_irk, local_irk, 16);
2955
2956 list_add(&entry->list, list);
2957
2958 return 0;
2959}
2960
2961int hci_bdaddr_list_del(struct list_head *list, bdaddr_t *bdaddr, u8 type)
2962{
2963 struct bdaddr_list *entry;
2964
2965 if (!bacmp(bdaddr, BDADDR_ANY)) {
2966 hci_bdaddr_list_clear(list);
2967 return 0;
2968 }
2969
2970 entry = hci_bdaddr_list_lookup(list, bdaddr, type);
2971 if (!entry)
2972 return -ENOENT;
2973
2974 list_del(&entry->list);
2975 kfree(entry);
2976
2977 return 0;
2978}
2979
2980int hci_bdaddr_list_del_with_irk(struct list_head *list, bdaddr_t *bdaddr,
2981 u8 type)
2982{
2983 struct bdaddr_list_with_irk *entry;
2984
2985 if (!bacmp(bdaddr, BDADDR_ANY)) {
2986 hci_bdaddr_list_clear(list);
2987 return 0;
2988 }
2989
2990 entry = hci_bdaddr_list_lookup_with_irk(list, bdaddr, type);
2991 if (!entry)
2992 return -ENOENT;
2993
2994 list_del(&entry->list);
2995 kfree(entry);
2996
2997 return 0;
2998}
2999
3000/* This function requires the caller holds hdev->lock */
3001struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
3002 bdaddr_t *addr, u8 addr_type)
3003{
3004 struct hci_conn_params *params;
3005
3006 list_for_each_entry(params, &hdev->le_conn_params, list) {
3007 if (bacmp(¶ms->addr, addr) == 0 &&
3008 params->addr_type == addr_type) {
3009 return params;
3010 }
3011 }
3012
3013 return NULL;
3014}
3015
3016/* This function requires the caller holds hdev->lock */
3017struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
3018 bdaddr_t *addr, u8 addr_type)
3019{
3020 struct hci_conn_params *param;
3021
3022 list_for_each_entry(param, list, action) {
3023 if (bacmp(¶m->addr, addr) == 0 &&
3024 param->addr_type == addr_type)
3025 return param;
3026 }
3027
3028 return NULL;
3029}
3030
3031/* This function requires the caller holds hdev->lock */
3032struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
3033 bdaddr_t *addr, u8 addr_type)
3034{
3035 struct hci_conn_params *params;
3036
3037 params = hci_conn_params_lookup(hdev, addr, addr_type);
3038 if (params)
3039 return params;
3040
3041 params = kzalloc(sizeof(*params), GFP_KERNEL);
3042 if (!params) {
3043 bt_dev_err(hdev, "out of memory");
3044 return NULL;
3045 }
3046
3047 bacpy(¶ms->addr, addr);
3048 params->addr_type = addr_type;
3049
3050 list_add(¶ms->list, &hdev->le_conn_params);
3051 INIT_LIST_HEAD(¶ms->action);
3052
3053 params->conn_min_interval = hdev->le_conn_min_interval;
3054 params->conn_max_interval = hdev->le_conn_max_interval;
3055 params->conn_latency = hdev->le_conn_latency;
3056 params->supervision_timeout = hdev->le_supv_timeout;
3057 params->auto_connect = HCI_AUTO_CONN_DISABLED;
3058
3059 BT_DBG("addr %pMR (type %u)", addr, addr_type);
3060
3061 return params;
3062}
3063
3064static void hci_conn_params_free(struct hci_conn_params *params)
3065{
3066 if (params->conn) {
3067 hci_conn_drop(params->conn);
3068 hci_conn_put(params->conn);
3069 }
3070
3071 list_del(¶ms->action);
3072 list_del(¶ms->list);
3073 kfree(params);
3074}
3075
3076/* This function requires the caller holds hdev->lock */
3077void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
3078{
3079 struct hci_conn_params *params;
3080
3081 params = hci_conn_params_lookup(hdev, addr, addr_type);
3082 if (!params)
3083 return;
3084
3085 hci_conn_params_free(params);
3086
3087 hci_update_background_scan(hdev);
3088
3089 BT_DBG("addr %pMR (type %u)", addr, addr_type);
3090}
3091
3092/* This function requires the caller holds hdev->lock */
3093void hci_conn_params_clear_disabled(struct hci_dev *hdev)
3094{
3095 struct hci_conn_params *params, *tmp;
3096
3097 list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) {
3098 if (params->auto_connect != HCI_AUTO_CONN_DISABLED)
3099 continue;
3100
3101 /* If trying to estabilish one time connection to disabled
3102 * device, leave the params, but mark them as just once.
3103 */
3104 if (params->explicit_connect) {
3105 params->auto_connect = HCI_AUTO_CONN_EXPLICIT;
3106 continue;
3107 }
3108
3109 list_del(¶ms->list);
3110 kfree(params);
3111 }
3112
3113 BT_DBG("All LE disabled connection parameters were removed");
3114}
3115
3116/* This function requires the caller holds hdev->lock */
3117static void hci_conn_params_clear_all(struct hci_dev *hdev)
3118{
3119 struct hci_conn_params *params, *tmp;
3120
3121 list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list)
3122 hci_conn_params_free(params);
3123
3124 BT_DBG("All LE connection parameters were removed");
3125}
3126
3127/* Copy the Identity Address of the controller.
3128 *
3129 * If the controller has a public BD_ADDR, then by default use that one.
3130 * If this is a LE only controller without a public address, default to
3131 * the static random address.
3132 *
3133 * For debugging purposes it is possible to force controllers with a
3134 * public address to use the static random address instead.
3135 *
3136 * In case BR/EDR has been disabled on a dual-mode controller and
3137 * userspace has configured a static address, then that address
3138 * becomes the identity address instead of the public BR/EDR address.
3139 */
3140void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
3141 u8 *bdaddr_type)
3142{
3143 if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
3144 !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
3145 (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
3146 bacmp(&hdev->static_addr, BDADDR_ANY))) {
3147 bacpy(bdaddr, &hdev->static_addr);
3148 *bdaddr_type = ADDR_LE_DEV_RANDOM;
3149 } else {
3150 bacpy(bdaddr, &hdev->bdaddr);
3151 *bdaddr_type = ADDR_LE_DEV_PUBLIC;
3152 }
3153}
3154
3155/* Alloc HCI device */
3156struct hci_dev *hci_alloc_dev(void)
3157{
3158 struct hci_dev *hdev;
3159
3160 hdev = kzalloc(sizeof(*hdev), GFP_KERNEL);
3161 if (!hdev)
3162 return NULL;
3163
3164 hdev->pkt_type = (HCI_DM1 | HCI_DH1 | HCI_HV1);
3165 hdev->esco_type = (ESCO_HV1);
3166 hdev->link_mode = (HCI_LM_ACCEPT);
3167 hdev->num_iac = 0x01; /* One IAC support is mandatory */
3168 hdev->io_capability = 0x03; /* No Input No Output */
3169 hdev->manufacturer = 0xffff; /* Default to internal use */
3170 hdev->inq_tx_power = HCI_TX_POWER_INVALID;
3171 hdev->adv_tx_power = HCI_TX_POWER_INVALID;
3172 hdev->adv_instance_cnt = 0;
3173 hdev->cur_adv_instance = 0x00;
3174 hdev->adv_instance_timeout = 0;
3175
3176 hdev->sniff_max_interval = 800;
3177 hdev->sniff_min_interval = 80;
3178
3179 hdev->le_adv_channel_map = 0x07;
3180 hdev->le_adv_min_interval = 0x0800;
3181 hdev->le_adv_max_interval = 0x0800;
3182 hdev->le_scan_interval = 0x0060;
3183 hdev->le_scan_window = 0x0030;
3184 hdev->le_conn_min_interval = 0x0018;
3185 hdev->le_conn_max_interval = 0x0028;
3186 hdev->le_conn_latency = 0x0000;
3187 hdev->le_supv_timeout = 0x002a;
3188 hdev->le_def_tx_len = 0x001b;
3189 hdev->le_def_tx_time = 0x0148;
3190 hdev->le_max_tx_len = 0x001b;
3191 hdev->le_max_tx_time = 0x0148;
3192 hdev->le_max_rx_len = 0x001b;
3193 hdev->le_max_rx_time = 0x0148;
3194 hdev->le_max_key_size = SMP_MAX_ENC_KEY_SIZE;
3195 hdev->le_min_key_size = SMP_MIN_ENC_KEY_SIZE;
3196 hdev->le_tx_def_phys = HCI_LE_SET_PHY_1M;
3197 hdev->le_rx_def_phys = HCI_LE_SET_PHY_1M;
3198 hdev->le_num_of_adv_sets = HCI_MAX_ADV_INSTANCES;
3199
3200 hdev->rpa_timeout = HCI_DEFAULT_RPA_TIMEOUT;
3201 hdev->discov_interleaved_timeout = DISCOV_INTERLEAVED_TIMEOUT;
3202 hdev->conn_info_min_age = DEFAULT_CONN_INFO_MIN_AGE;
3203 hdev->conn_info_max_age = DEFAULT_CONN_INFO_MAX_AGE;
3204 hdev->auth_payload_timeout = DEFAULT_AUTH_PAYLOAD_TIMEOUT;
3205 hdev->min_enc_key_size = HCI_MIN_ENC_KEY_SIZE;
3206
3207 mutex_init(&hdev->lock);
3208 mutex_init(&hdev->req_lock);
3209
3210 INIT_LIST_HEAD(&hdev->mgmt_pending);
3211 INIT_LIST_HEAD(&hdev->blacklist);
3212 INIT_LIST_HEAD(&hdev->whitelist);
3213 INIT_LIST_HEAD(&hdev->uuids);
3214 INIT_LIST_HEAD(&hdev->link_keys);
3215 INIT_LIST_HEAD(&hdev->long_term_keys);
3216 INIT_LIST_HEAD(&hdev->identity_resolving_keys);
3217 INIT_LIST_HEAD(&hdev->remote_oob_data);
3218 INIT_LIST_HEAD(&hdev->le_white_list);
3219 INIT_LIST_HEAD(&hdev->le_resolv_list);
3220 INIT_LIST_HEAD(&hdev->le_conn_params);
3221 INIT_LIST_HEAD(&hdev->pend_le_conns);
3222 INIT_LIST_HEAD(&hdev->pend_le_reports);
3223 INIT_LIST_HEAD(&hdev->conn_hash.list);
3224 INIT_LIST_HEAD(&hdev->adv_instances);
3225
3226 INIT_WORK(&hdev->rx_work, hci_rx_work);
3227 INIT_WORK(&hdev->cmd_work, hci_cmd_work);
3228 INIT_WORK(&hdev->tx_work, hci_tx_work);
3229 INIT_WORK(&hdev->power_on, hci_power_on);
3230 INIT_WORK(&hdev->error_reset, hci_error_reset);
3231
3232 INIT_DELAYED_WORK(&hdev->power_off, hci_power_off);
3233
3234 skb_queue_head_init(&hdev->rx_q);
3235 skb_queue_head_init(&hdev->cmd_q);
3236 skb_queue_head_init(&hdev->raw_q);
3237
3238 init_waitqueue_head(&hdev->req_wait_q);
3239
3240 INIT_DELAYED_WORK(&hdev->cmd_timer, hci_cmd_timeout);
3241
3242 hci_request_setup(hdev);
3243
3244 hci_init_sysfs(hdev);
3245 discovery_init(hdev);
3246
3247 return hdev;
3248}
3249EXPORT_SYMBOL(hci_alloc_dev);
3250
3251/* Free HCI device */
3252void hci_free_dev(struct hci_dev *hdev)
3253{
3254 /* will free via device release */
3255 put_device(&hdev->dev);
3256}
3257EXPORT_SYMBOL(hci_free_dev);
3258
3259/* Register HCI device */
3260int hci_register_dev(struct hci_dev *hdev)
3261{
3262 int id, error;
3263
3264 if (!hdev->open || !hdev->close || !hdev->send)
3265 return -EINVAL;
3266
3267 /* Do not allow HCI_AMP devices to register at index 0,
3268 * so the index can be used as the AMP controller ID.
3269 */
3270 switch (hdev->dev_type) {
3271 case HCI_PRIMARY:
3272 id = ida_simple_get(&hci_index_ida, 0, 0, GFP_KERNEL);
3273 break;
3274 case HCI_AMP:
3275 id = ida_simple_get(&hci_index_ida, 1, 0, GFP_KERNEL);
3276 break;
3277 default:
3278 return -EINVAL;
3279 }
3280
3281 if (id < 0)
3282 return id;
3283
3284 sprintf(hdev->name, "hci%d", id);
3285 hdev->id = id;
3286
3287 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
3288
3289 hdev->workqueue = alloc_ordered_workqueue("%s", WQ_HIGHPRI, hdev->name);
3290 if (!hdev->workqueue) {
3291 error = -ENOMEM;
3292 goto err;
3293 }
3294
3295 hdev->req_workqueue = alloc_ordered_workqueue("%s", WQ_HIGHPRI,
3296 hdev->name);
3297 if (!hdev->req_workqueue) {
3298 destroy_workqueue(hdev->workqueue);
3299 error = -ENOMEM;
3300 goto err;
3301 }
3302
3303 if (!IS_ERR_OR_NULL(bt_debugfs))
3304 hdev->debugfs = debugfs_create_dir(hdev->name, bt_debugfs);
3305
3306 dev_set_name(&hdev->dev, "%s", hdev->name);
3307
3308 error = device_add(&hdev->dev);
3309 if (error < 0)
3310 goto err_wqueue;
3311
3312 hci_leds_init(hdev);
3313
3314 hdev->rfkill = rfkill_alloc(hdev->name, &hdev->dev,
3315 RFKILL_TYPE_BLUETOOTH, &hci_rfkill_ops,
3316 hdev);
3317 if (hdev->rfkill) {
3318 if (rfkill_register(hdev->rfkill) < 0) {
3319 rfkill_destroy(hdev->rfkill);
3320 hdev->rfkill = NULL;
3321 }
3322 }
3323
3324 if (hdev->rfkill && rfkill_blocked(hdev->rfkill))
3325 hci_dev_set_flag(hdev, HCI_RFKILLED);
3326
3327 hci_dev_set_flag(hdev, HCI_SETUP);
3328 hci_dev_set_flag(hdev, HCI_AUTO_OFF);
3329
3330 if (hdev->dev_type == HCI_PRIMARY) {
3331 /* Assume BR/EDR support until proven otherwise (such as
3332 * through reading supported features during init.
3333 */
3334 hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
3335 }
3336
3337 write_lock(&hci_dev_list_lock);
3338 list_add(&hdev->list, &hci_dev_list);
3339 write_unlock(&hci_dev_list_lock);
3340
3341 /* Devices that are marked for raw-only usage are unconfigured
3342 * and should not be included in normal operation.
3343 */
3344 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
3345 hci_dev_set_flag(hdev, HCI_UNCONFIGURED);
3346
3347 hci_sock_dev_event(hdev, HCI_DEV_REG);
3348 hci_dev_hold(hdev);
3349
3350 queue_work(hdev->req_workqueue, &hdev->power_on);
3351
3352 return id;
3353
3354err_wqueue:
3355 destroy_workqueue(hdev->workqueue);
3356 destroy_workqueue(hdev->req_workqueue);
3357err:
3358 ida_simple_remove(&hci_index_ida, hdev->id);
3359
3360 return error;
3361}
3362EXPORT_SYMBOL(hci_register_dev);
3363
3364/* Unregister HCI device */
3365void hci_unregister_dev(struct hci_dev *hdev)
3366{
3367 int id;
3368
3369 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
3370
3371 hci_dev_set_flag(hdev, HCI_UNREGISTER);
3372
3373 id = hdev->id;
3374
3375 write_lock(&hci_dev_list_lock);
3376 list_del(&hdev->list);
3377 write_unlock(&hci_dev_list_lock);
3378
3379 cancel_work_sync(&hdev->power_on);
3380
3381 hci_dev_do_close(hdev);
3382
3383 if (!test_bit(HCI_INIT, &hdev->flags) &&
3384 !hci_dev_test_flag(hdev, HCI_SETUP) &&
3385 !hci_dev_test_flag(hdev, HCI_CONFIG)) {
3386 hci_dev_lock(hdev);
3387 mgmt_index_removed(hdev);
3388 hci_dev_unlock(hdev);
3389 }
3390
3391 /* mgmt_index_removed should take care of emptying the
3392 * pending list */
3393 BUG_ON(!list_empty(&hdev->mgmt_pending));
3394
3395 hci_sock_dev_event(hdev, HCI_DEV_UNREG);
3396
3397 if (hdev->rfkill) {
3398 rfkill_unregister(hdev->rfkill);
3399 rfkill_destroy(hdev->rfkill);
3400 }
3401
3402 device_del(&hdev->dev);
3403
3404 debugfs_remove_recursive(hdev->debugfs);
3405 kfree_const(hdev->hw_info);
3406 kfree_const(hdev->fw_info);
3407
3408 destroy_workqueue(hdev->workqueue);
3409 destroy_workqueue(hdev->req_workqueue);
3410
3411 hci_dev_lock(hdev);
3412 hci_bdaddr_list_clear(&hdev->blacklist);
3413 hci_bdaddr_list_clear(&hdev->whitelist);
3414 hci_uuids_clear(hdev);
3415 hci_link_keys_clear(hdev);
3416 hci_smp_ltks_clear(hdev);
3417 hci_smp_irks_clear(hdev);
3418 hci_remote_oob_data_clear(hdev);
3419 hci_adv_instances_clear(hdev);
3420 hci_bdaddr_list_clear(&hdev->le_white_list);
3421 hci_bdaddr_list_clear(&hdev->le_resolv_list);
3422 hci_conn_params_clear_all(hdev);
3423 hci_discovery_filter_clear(hdev);
3424 hci_dev_unlock(hdev);
3425
3426 hci_dev_put(hdev);
3427
3428 ida_simple_remove(&hci_index_ida, id);
3429}
3430EXPORT_SYMBOL(hci_unregister_dev);
3431
3432/* Suspend HCI device */
3433int hci_suspend_dev(struct hci_dev *hdev)
3434{
3435 hci_sock_dev_event(hdev, HCI_DEV_SUSPEND);
3436 return 0;
3437}
3438EXPORT_SYMBOL(hci_suspend_dev);
3439
3440/* Resume HCI device */
3441int hci_resume_dev(struct hci_dev *hdev)
3442{
3443 hci_sock_dev_event(hdev, HCI_DEV_RESUME);
3444 return 0;
3445}
3446EXPORT_SYMBOL(hci_resume_dev);
3447
3448/* Reset HCI device */
3449int hci_reset_dev(struct hci_dev *hdev)
3450{
3451 static const u8 hw_err[] = { HCI_EV_HARDWARE_ERROR, 0x01, 0x00 };
3452 struct sk_buff *skb;
3453
3454 skb = bt_skb_alloc(3, GFP_ATOMIC);
3455 if (!skb)
3456 return -ENOMEM;
3457
3458 hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
3459 skb_put_data(skb, hw_err, 3);
3460
3461 /* Send Hardware Error to upper stack */
3462 return hci_recv_frame(hdev, skb);
3463}
3464EXPORT_SYMBOL(hci_reset_dev);
3465
3466/* Receive frame from HCI drivers */
3467int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb)
3468{
3469 if (!hdev || (!test_bit(HCI_UP, &hdev->flags)
3470 && !test_bit(HCI_INIT, &hdev->flags))) {
3471 kfree_skb(skb);
3472 return -ENXIO;
3473 }
3474
3475 if (hci_skb_pkt_type(skb) != HCI_EVENT_PKT &&
3476 hci_skb_pkt_type(skb) != HCI_ACLDATA_PKT &&
3477 hci_skb_pkt_type(skb) != HCI_SCODATA_PKT) {
3478 kfree_skb(skb);
3479 return -EINVAL;
3480 }
3481
3482 /* Incoming skb */
3483 bt_cb(skb)->incoming = 1;
3484
3485 /* Time stamp */
3486 __net_timestamp(skb);
3487
3488 skb_queue_tail(&hdev->rx_q, skb);
3489 queue_work(hdev->workqueue, &hdev->rx_work);
3490
3491 return 0;
3492}
3493EXPORT_SYMBOL(hci_recv_frame);
3494
3495/* Receive diagnostic message from HCI drivers */
3496int hci_recv_diag(struct hci_dev *hdev, struct sk_buff *skb)
3497{
3498 /* Mark as diagnostic packet */
3499 hci_skb_pkt_type(skb) = HCI_DIAG_PKT;
3500
3501 /* Time stamp */
3502 __net_timestamp(skb);
3503
3504 skb_queue_tail(&hdev->rx_q, skb);
3505 queue_work(hdev->workqueue, &hdev->rx_work);
3506
3507 return 0;
3508}
3509EXPORT_SYMBOL(hci_recv_diag);
3510
3511void hci_set_hw_info(struct hci_dev *hdev, const char *fmt, ...)
3512{
3513 va_list vargs;
3514
3515 va_start(vargs, fmt);
3516 kfree_const(hdev->hw_info);
3517 hdev->hw_info = kvasprintf_const(GFP_KERNEL, fmt, vargs);
3518 va_end(vargs);
3519}
3520EXPORT_SYMBOL(hci_set_hw_info);
3521
3522void hci_set_fw_info(struct hci_dev *hdev, const char *fmt, ...)
3523{
3524 va_list vargs;
3525
3526 va_start(vargs, fmt);
3527 kfree_const(hdev->fw_info);
3528 hdev->fw_info = kvasprintf_const(GFP_KERNEL, fmt, vargs);
3529 va_end(vargs);
3530}
3531EXPORT_SYMBOL(hci_set_fw_info);
3532
3533/* ---- Interface to upper protocols ---- */
3534
3535int hci_register_cb(struct hci_cb *cb)
3536{
3537 BT_DBG("%p name %s", cb, cb->name);
3538
3539 mutex_lock(&hci_cb_list_lock);
3540 list_add_tail(&cb->list, &hci_cb_list);
3541 mutex_unlock(&hci_cb_list_lock);
3542
3543 return 0;
3544}
3545EXPORT_SYMBOL(hci_register_cb);
3546
3547int hci_unregister_cb(struct hci_cb *cb)
3548{
3549 BT_DBG("%p name %s", cb, cb->name);
3550
3551 mutex_lock(&hci_cb_list_lock);
3552 list_del(&cb->list);
3553 mutex_unlock(&hci_cb_list_lock);
3554
3555 return 0;
3556}
3557EXPORT_SYMBOL(hci_unregister_cb);
3558
3559static void hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
3560{
3561 int err;
3562
3563 BT_DBG("%s type %d len %d", hdev->name, hci_skb_pkt_type(skb),
3564 skb->len);
3565
3566 /* Time stamp */
3567 __net_timestamp(skb);
3568
3569 /* Send copy to monitor */
3570 hci_send_to_monitor(hdev, skb);
3571
3572 if (atomic_read(&hdev->promisc)) {
3573 /* Send copy to the sockets */
3574 hci_send_to_sock(hdev, skb);
3575 }
3576
3577 /* Get rid of skb owner, prior to sending to the driver. */
3578 skb_orphan(skb);
3579
3580 if (!test_bit(HCI_RUNNING, &hdev->flags)) {
3581 kfree_skb(skb);
3582 return;
3583 }
3584
3585 err = hdev->send(hdev, skb);
3586 if (err < 0) {
3587 bt_dev_err(hdev, "sending frame failed (%d)", err);
3588 kfree_skb(skb);
3589 }
3590}
3591
3592/* Send HCI command */
3593int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
3594 const void *param)
3595{
3596 struct sk_buff *skb;
3597
3598 BT_DBG("%s opcode 0x%4.4x plen %d", hdev->name, opcode, plen);
3599
3600 skb = hci_prepare_cmd(hdev, opcode, plen, param);
3601 if (!skb) {
3602 bt_dev_err(hdev, "no memory for command");
3603 return -ENOMEM;
3604 }
3605
3606 /* Stand-alone HCI commands must be flagged as
3607 * single-command requests.
3608 */
3609 bt_cb(skb)->hci.req_flags |= HCI_REQ_START;
3610
3611 skb_queue_tail(&hdev->cmd_q, skb);
3612 queue_work(hdev->workqueue, &hdev->cmd_work);
3613
3614 return 0;
3615}
3616
3617int __hci_cmd_send(struct hci_dev *hdev, u16 opcode, u32 plen,
3618 const void *param)
3619{
3620 struct sk_buff *skb;
3621
3622 if (hci_opcode_ogf(opcode) != 0x3f) {
3623 /* A controller receiving a command shall respond with either
3624 * a Command Status Event or a Command Complete Event.
3625 * Therefore, all standard HCI commands must be sent via the
3626 * standard API, using hci_send_cmd or hci_cmd_sync helpers.
3627 * Some vendors do not comply with this rule for vendor-specific
3628 * commands and do not return any event. We want to support
3629 * unresponded commands for such cases only.
3630 */
3631 bt_dev_err(hdev, "unresponded command not supported");
3632 return -EINVAL;
3633 }
3634
3635 skb = hci_prepare_cmd(hdev, opcode, plen, param);
3636 if (!skb) {
3637 bt_dev_err(hdev, "no memory for command (opcode 0x%4.4x)",
3638 opcode);
3639 return -ENOMEM;
3640 }
3641
3642 hci_send_frame(hdev, skb);
3643
3644 return 0;
3645}
3646EXPORT_SYMBOL(__hci_cmd_send);
3647
3648/* Get data from the previously sent command */
3649void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode)
3650{
3651 struct hci_command_hdr *hdr;
3652
3653 if (!hdev->sent_cmd)
3654 return NULL;
3655
3656 hdr = (void *) hdev->sent_cmd->data;
3657
3658 if (hdr->opcode != cpu_to_le16(opcode))
3659 return NULL;
3660
3661 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
3662
3663 return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
3664}
3665
3666/* Send HCI command and wait for command commplete event */
3667struct sk_buff *hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
3668 const void *param, u32 timeout)
3669{
3670 struct sk_buff *skb;
3671
3672 if (!test_bit(HCI_UP, &hdev->flags))
3673 return ERR_PTR(-ENETDOWN);
3674
3675 bt_dev_dbg(hdev, "opcode 0x%4.4x plen %d", opcode, plen);
3676
3677 hci_req_sync_lock(hdev);
3678 skb = __hci_cmd_sync(hdev, opcode, plen, param, timeout);
3679 hci_req_sync_unlock(hdev);
3680
3681 return skb;
3682}
3683EXPORT_SYMBOL(hci_cmd_sync);
3684
3685/* Send ACL data */
3686static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
3687{
3688 struct hci_acl_hdr *hdr;
3689 int len = skb->len;
3690
3691 skb_push(skb, HCI_ACL_HDR_SIZE);
3692 skb_reset_transport_header(skb);
3693 hdr = (struct hci_acl_hdr *)skb_transport_header(skb);
3694 hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags));
3695 hdr->dlen = cpu_to_le16(len);
3696}
3697
3698static void hci_queue_acl(struct hci_chan *chan, struct sk_buff_head *queue,
3699 struct sk_buff *skb, __u16 flags)
3700{
3701 struct hci_conn *conn = chan->conn;
3702 struct hci_dev *hdev = conn->hdev;
3703 struct sk_buff *list;
3704
3705 skb->len = skb_headlen(skb);
3706 skb->data_len = 0;
3707
3708 hci_skb_pkt_type(skb) = HCI_ACLDATA_PKT;
3709
3710 switch (hdev->dev_type) {
3711 case HCI_PRIMARY:
3712 hci_add_acl_hdr(skb, conn->handle, flags);
3713 break;
3714 case HCI_AMP:
3715 hci_add_acl_hdr(skb, chan->handle, flags);
3716 break;
3717 default:
3718 bt_dev_err(hdev, "unknown dev_type %d", hdev->dev_type);
3719 return;
3720 }
3721
3722 list = skb_shinfo(skb)->frag_list;
3723 if (!list) {
3724 /* Non fragmented */
3725 BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
3726
3727 skb_queue_tail(queue, skb);
3728 } else {
3729 /* Fragmented */
3730 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
3731
3732 skb_shinfo(skb)->frag_list = NULL;
3733
3734 /* Queue all fragments atomically. We need to use spin_lock_bh
3735 * here because of 6LoWPAN links, as there this function is
3736 * called from softirq and using normal spin lock could cause
3737 * deadlocks.
3738 */
3739 spin_lock_bh(&queue->lock);
3740
3741 __skb_queue_tail(queue, skb);
3742
3743 flags &= ~ACL_START;
3744 flags |= ACL_CONT;
3745 do {
3746 skb = list; list = list->next;
3747
3748 hci_skb_pkt_type(skb) = HCI_ACLDATA_PKT;
3749 hci_add_acl_hdr(skb, conn->handle, flags);
3750
3751 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
3752
3753 __skb_queue_tail(queue, skb);
3754 } while (list);
3755
3756 spin_unlock_bh(&queue->lock);
3757 }
3758}
3759
3760void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags)
3761{
3762 struct hci_dev *hdev = chan->conn->hdev;
3763
3764 BT_DBG("%s chan %p flags 0x%4.4x", hdev->name, chan, flags);
3765
3766 hci_queue_acl(chan, &chan->data_q, skb, flags);
3767
3768 queue_work(hdev->workqueue, &hdev->tx_work);
3769}
3770
3771/* Send SCO data */
3772void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb)
3773{
3774 struct hci_dev *hdev = conn->hdev;
3775 struct hci_sco_hdr hdr;
3776
3777 BT_DBG("%s len %d", hdev->name, skb->len);
3778
3779 hdr.handle = cpu_to_le16(conn->handle);
3780 hdr.dlen = skb->len;
3781
3782 skb_push(skb, HCI_SCO_HDR_SIZE);
3783 skb_reset_transport_header(skb);
3784 memcpy(skb_transport_header(skb), &hdr, HCI_SCO_HDR_SIZE);
3785
3786 hci_skb_pkt_type(skb) = HCI_SCODATA_PKT;
3787
3788 skb_queue_tail(&conn->data_q, skb);
3789 queue_work(hdev->workqueue, &hdev->tx_work);
3790}
3791
3792/* ---- HCI TX task (outgoing data) ---- */
3793
3794/* HCI Connection scheduler */
3795static struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type,
3796 int *quote)
3797{
3798 struct hci_conn_hash *h = &hdev->conn_hash;
3799 struct hci_conn *conn = NULL, *c;
3800 unsigned int num = 0, min = ~0;
3801
3802 /* We don't have to lock device here. Connections are always
3803 * added and removed with TX task disabled. */
3804
3805 rcu_read_lock();
3806
3807 list_for_each_entry_rcu(c, &h->list, list) {
3808 if (c->type != type || skb_queue_empty(&c->data_q))
3809 continue;
3810
3811 if (c->state != BT_CONNECTED && c->state != BT_CONFIG)
3812 continue;
3813
3814 num++;
3815
3816 if (c->sent < min) {
3817 min = c->sent;
3818 conn = c;
3819 }
3820
3821 if (hci_conn_num(hdev, type) == num)
3822 break;
3823 }
3824
3825 rcu_read_unlock();
3826
3827 if (conn) {
3828 int cnt, q;
3829
3830 switch (conn->type) {
3831 case ACL_LINK:
3832 cnt = hdev->acl_cnt;
3833 break;
3834 case SCO_LINK:
3835 case ESCO_LINK:
3836 cnt = hdev->sco_cnt;
3837 break;
3838 case LE_LINK:
3839 cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
3840 break;
3841 default:
3842 cnt = 0;
3843 bt_dev_err(hdev, "unknown link type %d", conn->type);
3844 }
3845
3846 q = cnt / num;
3847 *quote = q ? q : 1;
3848 } else
3849 *quote = 0;
3850
3851 BT_DBG("conn %p quote %d", conn, *quote);
3852 return conn;
3853}
3854
3855static void hci_link_tx_to(struct hci_dev *hdev, __u8 type)
3856{
3857 struct hci_conn_hash *h = &hdev->conn_hash;
3858 struct hci_conn *c;
3859
3860 bt_dev_err(hdev, "link tx timeout");
3861
3862 rcu_read_lock();
3863
3864 /* Kill stalled connections */
3865 list_for_each_entry_rcu(c, &h->list, list) {
3866 if (c->type == type && c->sent) {
3867 bt_dev_err(hdev, "killing stalled connection %pMR",
3868 &c->dst);
3869 hci_disconnect(c, HCI_ERROR_REMOTE_USER_TERM);
3870 }
3871 }
3872
3873 rcu_read_unlock();
3874}
3875
3876static struct hci_chan *hci_chan_sent(struct hci_dev *hdev, __u8 type,
3877 int *quote)
3878{
3879 struct hci_conn_hash *h = &hdev->conn_hash;
3880 struct hci_chan *chan = NULL;
3881 unsigned int num = 0, min = ~0, cur_prio = 0;
3882 struct hci_conn *conn;
3883 int cnt, q, conn_num = 0;
3884
3885 BT_DBG("%s", hdev->name);
3886
3887 rcu_read_lock();
3888
3889 list_for_each_entry_rcu(conn, &h->list, list) {
3890 struct hci_chan *tmp;
3891
3892 if (conn->type != type)
3893 continue;
3894
3895 if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
3896 continue;
3897
3898 conn_num++;
3899
3900 list_for_each_entry_rcu(tmp, &conn->chan_list, list) {
3901 struct sk_buff *skb;
3902
3903 if (skb_queue_empty(&tmp->data_q))
3904 continue;
3905
3906 skb = skb_peek(&tmp->data_q);
3907 if (skb->priority < cur_prio)
3908 continue;
3909
3910 if (skb->priority > cur_prio) {
3911 num = 0;
3912 min = ~0;
3913 cur_prio = skb->priority;
3914 }
3915
3916 num++;
3917
3918 if (conn->sent < min) {
3919 min = conn->sent;
3920 chan = tmp;
3921 }
3922 }
3923
3924 if (hci_conn_num(hdev, type) == conn_num)
3925 break;
3926 }
3927
3928 rcu_read_unlock();
3929
3930 if (!chan)
3931 return NULL;
3932
3933 switch (chan->conn->type) {
3934 case ACL_LINK:
3935 cnt = hdev->acl_cnt;
3936 break;
3937 case AMP_LINK:
3938 cnt = hdev->block_cnt;
3939 break;
3940 case SCO_LINK:
3941 case ESCO_LINK:
3942 cnt = hdev->sco_cnt;
3943 break;
3944 case LE_LINK:
3945 cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
3946 break;
3947 default:
3948 cnt = 0;
3949 bt_dev_err(hdev, "unknown link type %d", chan->conn->type);
3950 }
3951
3952 q = cnt / num;
3953 *quote = q ? q : 1;
3954 BT_DBG("chan %p quote %d", chan, *quote);
3955 return chan;
3956}
3957
3958static void hci_prio_recalculate(struct hci_dev *hdev, __u8 type)
3959{
3960 struct hci_conn_hash *h = &hdev->conn_hash;
3961 struct hci_conn *conn;
3962 int num = 0;
3963
3964 BT_DBG("%s", hdev->name);
3965
3966 rcu_read_lock();
3967
3968 list_for_each_entry_rcu(conn, &h->list, list) {
3969 struct hci_chan *chan;
3970
3971 if (conn->type != type)
3972 continue;
3973
3974 if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
3975 continue;
3976
3977 num++;
3978
3979 list_for_each_entry_rcu(chan, &conn->chan_list, list) {
3980 struct sk_buff *skb;
3981
3982 if (chan->sent) {
3983 chan->sent = 0;
3984 continue;
3985 }
3986
3987 if (skb_queue_empty(&chan->data_q))
3988 continue;
3989
3990 skb = skb_peek(&chan->data_q);
3991 if (skb->priority >= HCI_PRIO_MAX - 1)
3992 continue;
3993
3994 skb->priority = HCI_PRIO_MAX - 1;
3995
3996 BT_DBG("chan %p skb %p promoted to %d", chan, skb,
3997 skb->priority);
3998 }
3999
4000 if (hci_conn_num(hdev, type) == num)
4001 break;
4002 }
4003
4004 rcu_read_unlock();
4005
4006}
4007
4008static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb)
4009{
4010 /* Calculate count of blocks used by this packet */
4011 return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len);
4012}
4013
4014static void __check_timeout(struct hci_dev *hdev, unsigned int cnt)
4015{
4016 if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
4017 /* ACL tx timeout must be longer than maximum
4018 * link supervision timeout (40.9 seconds) */
4019 if (!cnt && time_after(jiffies, hdev->acl_last_tx +
4020 HCI_ACL_TX_TIMEOUT))
4021 hci_link_tx_to(hdev, ACL_LINK);
4022 }
4023}
4024
4025static void hci_sched_acl_pkt(struct hci_dev *hdev)
4026{
4027 unsigned int cnt = hdev->acl_cnt;
4028 struct hci_chan *chan;
4029 struct sk_buff *skb;
4030 int quote;
4031
4032 __check_timeout(hdev, cnt);
4033
4034 while (hdev->acl_cnt &&
4035 (chan = hci_chan_sent(hdev, ACL_LINK, "e))) {
4036 u32 priority = (skb_peek(&chan->data_q))->priority;
4037 while (quote-- && (skb = skb_peek(&chan->data_q))) {
4038 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
4039 skb->len, skb->priority);
4040
4041 /* Stop if priority has changed */
4042 if (skb->priority < priority)
4043 break;
4044
4045 skb = skb_dequeue(&chan->data_q);
4046
4047 hci_conn_enter_active_mode(chan->conn,
4048 bt_cb(skb)->force_active);
4049
4050 hci_send_frame(hdev, skb);
4051 hdev->acl_last_tx = jiffies;
4052
4053 hdev->acl_cnt--;
4054 chan->sent++;
4055 chan->conn->sent++;
4056 }
4057 }
4058
4059 if (cnt != hdev->acl_cnt)
4060 hci_prio_recalculate(hdev, ACL_LINK);
4061}
4062
4063static void hci_sched_acl_blk(struct hci_dev *hdev)
4064{
4065 unsigned int cnt = hdev->block_cnt;
4066 struct hci_chan *chan;
4067 struct sk_buff *skb;
4068 int quote;
4069 u8 type;
4070
4071 __check_timeout(hdev, cnt);
4072
4073 BT_DBG("%s", hdev->name);
4074
4075 if (hdev->dev_type == HCI_AMP)
4076 type = AMP_LINK;
4077 else
4078 type = ACL_LINK;
4079
4080 while (hdev->block_cnt > 0 &&
4081 (chan = hci_chan_sent(hdev, type, "e))) {
4082 u32 priority = (skb_peek(&chan->data_q))->priority;
4083 while (quote > 0 && (skb = skb_peek(&chan->data_q))) {
4084 int blocks;
4085
4086 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
4087 skb->len, skb->priority);
4088
4089 /* Stop if priority has changed */
4090 if (skb->priority < priority)
4091 break;
4092
4093 skb = skb_dequeue(&chan->data_q);
4094
4095 blocks = __get_blocks(hdev, skb);
4096 if (blocks > hdev->block_cnt)
4097 return;
4098
4099 hci_conn_enter_active_mode(chan->conn,
4100 bt_cb(skb)->force_active);
4101
4102 hci_send_frame(hdev, skb);
4103 hdev->acl_last_tx = jiffies;
4104
4105 hdev->block_cnt -= blocks;
4106 quote -= blocks;
4107
4108 chan->sent += blocks;
4109 chan->conn->sent += blocks;
4110 }
4111 }
4112
4113 if (cnt != hdev->block_cnt)
4114 hci_prio_recalculate(hdev, type);
4115}
4116
4117static void hci_sched_acl(struct hci_dev *hdev)
4118{
4119 BT_DBG("%s", hdev->name);
4120
4121 /* No ACL link over BR/EDR controller */
4122 if (!hci_conn_num(hdev, ACL_LINK) && hdev->dev_type == HCI_PRIMARY)
4123 return;
4124
4125 /* No AMP link over AMP controller */
4126 if (!hci_conn_num(hdev, AMP_LINK) && hdev->dev_type == HCI_AMP)
4127 return;
4128
4129 switch (hdev->flow_ctl_mode) {
4130 case HCI_FLOW_CTL_MODE_PACKET_BASED:
4131 hci_sched_acl_pkt(hdev);
4132 break;
4133
4134 case HCI_FLOW_CTL_MODE_BLOCK_BASED:
4135 hci_sched_acl_blk(hdev);
4136 break;
4137 }
4138}
4139
4140/* Schedule SCO */
4141static void hci_sched_sco(struct hci_dev *hdev)
4142{
4143 struct hci_conn *conn;
4144 struct sk_buff *skb;
4145 int quote;
4146
4147 BT_DBG("%s", hdev->name);
4148
4149 if (!hci_conn_num(hdev, SCO_LINK))
4150 return;
4151
4152 while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, "e))) {
4153 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
4154 BT_DBG("skb %p len %d", skb, skb->len);
4155 hci_send_frame(hdev, skb);
4156
4157 conn->sent++;
4158 if (conn->sent == ~0)
4159 conn->sent = 0;
4160 }
4161 }
4162}
4163
4164static void hci_sched_esco(struct hci_dev *hdev)
4165{
4166 struct hci_conn *conn;
4167 struct sk_buff *skb;
4168 int quote;
4169
4170 BT_DBG("%s", hdev->name);
4171
4172 if (!hci_conn_num(hdev, ESCO_LINK))
4173 return;
4174
4175 while (hdev->sco_cnt && (conn = hci_low_sent(hdev, ESCO_LINK,
4176 "e))) {
4177 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
4178 BT_DBG("skb %p len %d", skb, skb->len);
4179 hci_send_frame(hdev, skb);
4180
4181 conn->sent++;
4182 if (conn->sent == ~0)
4183 conn->sent = 0;
4184 }
4185 }
4186}
4187
4188static void hci_sched_le(struct hci_dev *hdev)
4189{
4190 struct hci_chan *chan;
4191 struct sk_buff *skb;
4192 int quote, cnt, tmp;
4193
4194 BT_DBG("%s", hdev->name);
4195
4196 if (!hci_conn_num(hdev, LE_LINK))
4197 return;
4198
4199 if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
4200 /* LE tx timeout must be longer than maximum
4201 * link supervision timeout (40.9 seconds) */
4202 if (!hdev->le_cnt && hdev->le_pkts &&
4203 time_after(jiffies, hdev->le_last_tx + HZ * 45))
4204 hci_link_tx_to(hdev, LE_LINK);
4205 }
4206
4207 cnt = hdev->le_pkts ? hdev->le_cnt : hdev->acl_cnt;
4208 tmp = cnt;
4209 while (cnt && (chan = hci_chan_sent(hdev, LE_LINK, "e))) {
4210 u32 priority = (skb_peek(&chan->data_q))->priority;
4211 while (quote-- && (skb = skb_peek(&chan->data_q))) {
4212 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
4213 skb->len, skb->priority);
4214
4215 /* Stop if priority has changed */
4216 if (skb->priority < priority)
4217 break;
4218
4219 skb = skb_dequeue(&chan->data_q);
4220
4221 hci_send_frame(hdev, skb);
4222 hdev->le_last_tx = jiffies;
4223
4224 cnt--;
4225 chan->sent++;
4226 chan->conn->sent++;
4227 }
4228 }
4229
4230 if (hdev->le_pkts)
4231 hdev->le_cnt = cnt;
4232 else
4233 hdev->acl_cnt = cnt;
4234
4235 if (cnt != tmp)
4236 hci_prio_recalculate(hdev, LE_LINK);
4237}
4238
4239static void hci_tx_work(struct work_struct *work)
4240{
4241 struct hci_dev *hdev = container_of(work, struct hci_dev, tx_work);
4242 struct sk_buff *skb;
4243
4244 BT_DBG("%s acl %d sco %d le %d", hdev->name, hdev->acl_cnt,
4245 hdev->sco_cnt, hdev->le_cnt);
4246
4247 if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
4248 /* Schedule queues and send stuff to HCI driver */
4249 hci_sched_acl(hdev);
4250 hci_sched_sco(hdev);
4251 hci_sched_esco(hdev);
4252 hci_sched_le(hdev);
4253 }
4254
4255 /* Send next queued raw (unknown type) packet */
4256 while ((skb = skb_dequeue(&hdev->raw_q)))
4257 hci_send_frame(hdev, skb);
4258}
4259
4260/* ----- HCI RX task (incoming data processing) ----- */
4261
4262/* ACL data packet */
4263static void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
4264{
4265 struct hci_acl_hdr *hdr = (void *) skb->data;
4266 struct hci_conn *conn;
4267 __u16 handle, flags;
4268
4269 skb_pull(skb, HCI_ACL_HDR_SIZE);
4270
4271 handle = __le16_to_cpu(hdr->handle);
4272 flags = hci_flags(handle);
4273 handle = hci_handle(handle);
4274
4275 BT_DBG("%s len %d handle 0x%4.4x flags 0x%4.4x", hdev->name, skb->len,
4276 handle, flags);
4277
4278 hdev->stat.acl_rx++;
4279
4280 hci_dev_lock(hdev);
4281 conn = hci_conn_hash_lookup_handle(hdev, handle);
4282 hci_dev_unlock(hdev);
4283
4284 if (conn) {
4285 hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF);
4286
4287 /* Send to upper protocol */
4288 l2cap_recv_acldata(conn, skb, flags);
4289 return;
4290 } else {
4291 bt_dev_err(hdev, "ACL packet for unknown connection handle %d",
4292 handle);
4293 }
4294
4295 kfree_skb(skb);
4296}
4297
4298/* SCO data packet */
4299static void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
4300{
4301 struct hci_sco_hdr *hdr = (void *) skb->data;
4302 struct hci_conn *conn;
4303 __u16 handle;
4304
4305 skb_pull(skb, HCI_SCO_HDR_SIZE);
4306
4307 handle = __le16_to_cpu(hdr->handle);
4308
4309 BT_DBG("%s len %d handle 0x%4.4x", hdev->name, skb->len, handle);
4310
4311 hdev->stat.sco_rx++;
4312
4313 hci_dev_lock(hdev);
4314 conn = hci_conn_hash_lookup_handle(hdev, handle);
4315 hci_dev_unlock(hdev);
4316
4317 if (conn) {
4318 /* Send to upper protocol */
4319 sco_recv_scodata(conn, skb);
4320 return;
4321 } else {
4322 bt_dev_err(hdev, "SCO packet for unknown connection handle %d",
4323 handle);
4324 }
4325
4326 kfree_skb(skb);
4327}
4328
4329static bool hci_req_is_complete(struct hci_dev *hdev)
4330{
4331 struct sk_buff *skb;
4332
4333 skb = skb_peek(&hdev->cmd_q);
4334 if (!skb)
4335 return true;
4336
4337 return (bt_cb(skb)->hci.req_flags & HCI_REQ_START);
4338}
4339
4340static void hci_resend_last(struct hci_dev *hdev)
4341{
4342 struct hci_command_hdr *sent;
4343 struct sk_buff *skb;
4344 u16 opcode;
4345
4346 if (!hdev->sent_cmd)
4347 return;
4348
4349 sent = (void *) hdev->sent_cmd->data;
4350 opcode = __le16_to_cpu(sent->opcode);
4351 if (opcode == HCI_OP_RESET)
4352 return;
4353
4354 skb = skb_clone(hdev->sent_cmd, GFP_KERNEL);
4355 if (!skb)
4356 return;
4357
4358 skb_queue_head(&hdev->cmd_q, skb);
4359 queue_work(hdev->workqueue, &hdev->cmd_work);
4360}
4361
4362void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status,
4363 hci_req_complete_t *req_complete,
4364 hci_req_complete_skb_t *req_complete_skb)
4365{
4366 struct sk_buff *skb;
4367 unsigned long flags;
4368
4369 BT_DBG("opcode 0x%04x status 0x%02x", opcode, status);
4370
4371 /* If the completed command doesn't match the last one that was
4372 * sent we need to do special handling of it.
4373 */
4374 if (!hci_sent_cmd_data(hdev, opcode)) {
4375 /* Some CSR based controllers generate a spontaneous
4376 * reset complete event during init and any pending
4377 * command will never be completed. In such a case we
4378 * need to resend whatever was the last sent
4379 * command.
4380 */
4381 if (test_bit(HCI_INIT, &hdev->flags) && opcode == HCI_OP_RESET)
4382 hci_resend_last(hdev);
4383
4384 return;
4385 }
4386
4387 /* If we reach this point this event matches the last command sent */
4388 hci_dev_clear_flag(hdev, HCI_CMD_PENDING);
4389
4390 /* If the command succeeded and there's still more commands in
4391 * this request the request is not yet complete.
4392 */
4393 if (!status && !hci_req_is_complete(hdev))
4394 return;
4395
4396 /* If this was the last command in a request the complete
4397 * callback would be found in hdev->sent_cmd instead of the
4398 * command queue (hdev->cmd_q).
4399 */
4400 if (bt_cb(hdev->sent_cmd)->hci.req_flags & HCI_REQ_SKB) {
4401 *req_complete_skb = bt_cb(hdev->sent_cmd)->hci.req_complete_skb;
4402 return;
4403 }
4404
4405 if (bt_cb(hdev->sent_cmd)->hci.req_complete) {
4406 *req_complete = bt_cb(hdev->sent_cmd)->hci.req_complete;
4407 return;
4408 }
4409
4410 /* Remove all pending commands belonging to this request */
4411 spin_lock_irqsave(&hdev->cmd_q.lock, flags);
4412 while ((skb = __skb_dequeue(&hdev->cmd_q))) {
4413 if (bt_cb(skb)->hci.req_flags & HCI_REQ_START) {
4414 __skb_queue_head(&hdev->cmd_q, skb);
4415 break;
4416 }
4417
4418 if (bt_cb(skb)->hci.req_flags & HCI_REQ_SKB)
4419 *req_complete_skb = bt_cb(skb)->hci.req_complete_skb;
4420 else
4421 *req_complete = bt_cb(skb)->hci.req_complete;
4422 kfree_skb(skb);
4423 }
4424 spin_unlock_irqrestore(&hdev->cmd_q.lock, flags);
4425}
4426
4427static void hci_rx_work(struct work_struct *work)
4428{
4429 struct hci_dev *hdev = container_of(work, struct hci_dev, rx_work);
4430 struct sk_buff *skb;
4431
4432 BT_DBG("%s", hdev->name);
4433
4434 while ((skb = skb_dequeue(&hdev->rx_q))) {
4435 /* Send copy to monitor */
4436 hci_send_to_monitor(hdev, skb);
4437
4438 if (atomic_read(&hdev->promisc)) {
4439 /* Send copy to the sockets */
4440 hci_send_to_sock(hdev, skb);
4441 }
4442
4443 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
4444 kfree_skb(skb);
4445 continue;
4446 }
4447
4448 if (test_bit(HCI_INIT, &hdev->flags)) {
4449 /* Don't process data packets in this states. */
4450 switch (hci_skb_pkt_type(skb)) {
4451 case HCI_ACLDATA_PKT:
4452 case HCI_SCODATA_PKT:
4453 kfree_skb(skb);
4454 continue;
4455 }
4456 }
4457
4458 /* Process frame */
4459 switch (hci_skb_pkt_type(skb)) {
4460 case HCI_EVENT_PKT:
4461 BT_DBG("%s Event packet", hdev->name);
4462 hci_event_packet(hdev, skb);
4463 break;
4464
4465 case HCI_ACLDATA_PKT:
4466 BT_DBG("%s ACL data packet", hdev->name);
4467 hci_acldata_packet(hdev, skb);
4468 break;
4469
4470 case HCI_SCODATA_PKT:
4471 BT_DBG("%s SCO data packet", hdev->name);
4472 hci_scodata_packet(hdev, skb);
4473 break;
4474
4475 default:
4476 kfree_skb(skb);
4477 break;
4478 }
4479 }
4480}
4481
4482static void hci_cmd_work(struct work_struct *work)
4483{
4484 struct hci_dev *hdev = container_of(work, struct hci_dev, cmd_work);
4485 struct sk_buff *skb;
4486
4487 BT_DBG("%s cmd_cnt %d cmd queued %d", hdev->name,
4488 atomic_read(&hdev->cmd_cnt), skb_queue_len(&hdev->cmd_q));
4489
4490 /* Send queued commands */
4491 if (atomic_read(&hdev->cmd_cnt)) {
4492 skb = skb_dequeue(&hdev->cmd_q);
4493 if (!skb)
4494 return;
4495
4496 kfree_skb(hdev->sent_cmd);
4497
4498 hdev->sent_cmd = skb_clone(skb, GFP_KERNEL);
4499 if (hdev->sent_cmd) {
4500 if (hci_req_status_pend(hdev))
4501 hci_dev_set_flag(hdev, HCI_CMD_PENDING);
4502 atomic_dec(&hdev->cmd_cnt);
4503 hci_send_frame(hdev, skb);
4504 if (test_bit(HCI_RESET, &hdev->flags))
4505 cancel_delayed_work(&hdev->cmd_timer);
4506 else
4507 schedule_delayed_work(&hdev->cmd_timer,
4508 HCI_CMD_TIMEOUT);
4509 } else {
4510 skb_queue_head(&hdev->cmd_q, skb);
4511 queue_work(hdev->workqueue, &hdev->cmd_work);
4512 }
4513 }
4514}
1/*
2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2011 ProFUSION Embedded Systems
5
6 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
7
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License version 2 as
10 published by the Free Software Foundation;
11
12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
15 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
16 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
17 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20
21 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
22 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
23 SOFTWARE IS DISCLAIMED.
24*/
25
26/* Bluetooth HCI core. */
27
28#include <linux/jiffies.h>
29#include <linux/module.h>
30#include <linux/kmod.h>
31
32#include <linux/types.h>
33#include <linux/errno.h>
34#include <linux/kernel.h>
35#include <linux/sched.h>
36#include <linux/slab.h>
37#include <linux/poll.h>
38#include <linux/fcntl.h>
39#include <linux/init.h>
40#include <linux/skbuff.h>
41#include <linux/workqueue.h>
42#include <linux/interrupt.h>
43#include <linux/rfkill.h>
44#include <linux/timer.h>
45#include <linux/crypto.h>
46#include <net/sock.h>
47
48#include <linux/uaccess.h>
49#include <asm/unaligned.h>
50
51#include <net/bluetooth/bluetooth.h>
52#include <net/bluetooth/hci_core.h>
53
54#define AUTO_OFF_TIMEOUT 2000
55
56static void hci_rx_work(struct work_struct *work);
57static void hci_cmd_work(struct work_struct *work);
58static void hci_tx_work(struct work_struct *work);
59
60/* HCI device list */
61LIST_HEAD(hci_dev_list);
62DEFINE_RWLOCK(hci_dev_list_lock);
63
64/* HCI callback list */
65LIST_HEAD(hci_cb_list);
66DEFINE_RWLOCK(hci_cb_list_lock);
67
68/* ---- HCI notifications ---- */
69
70static void hci_notify(struct hci_dev *hdev, int event)
71{
72 hci_sock_dev_event(hdev, event);
73}
74
75/* ---- HCI requests ---- */
76
77void hci_req_complete(struct hci_dev *hdev, __u16 cmd, int result)
78{
79 BT_DBG("%s command 0x%04x result 0x%2.2x", hdev->name, cmd, result);
80
81 /* If this is the init phase check if the completed command matches
82 * the last init command, and if not just return.
83 */
84 if (test_bit(HCI_INIT, &hdev->flags) && hdev->init_last_cmd != cmd) {
85 struct hci_command_hdr *sent = (void *) hdev->sent_cmd->data;
86 u16 opcode = __le16_to_cpu(sent->opcode);
87 struct sk_buff *skb;
88
89 /* Some CSR based controllers generate a spontaneous
90 * reset complete event during init and any pending
91 * command will never be completed. In such a case we
92 * need to resend whatever was the last sent
93 * command.
94 */
95
96 if (cmd != HCI_OP_RESET || opcode == HCI_OP_RESET)
97 return;
98
99 skb = skb_clone(hdev->sent_cmd, GFP_ATOMIC);
100 if (skb) {
101 skb_queue_head(&hdev->cmd_q, skb);
102 queue_work(hdev->workqueue, &hdev->cmd_work);
103 }
104
105 return;
106 }
107
108 if (hdev->req_status == HCI_REQ_PEND) {
109 hdev->req_result = result;
110 hdev->req_status = HCI_REQ_DONE;
111 wake_up_interruptible(&hdev->req_wait_q);
112 }
113}
114
115static void hci_req_cancel(struct hci_dev *hdev, int err)
116{
117 BT_DBG("%s err 0x%2.2x", hdev->name, err);
118
119 if (hdev->req_status == HCI_REQ_PEND) {
120 hdev->req_result = err;
121 hdev->req_status = HCI_REQ_CANCELED;
122 wake_up_interruptible(&hdev->req_wait_q);
123 }
124}
125
126/* Execute request and wait for completion. */
127static int __hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt),
128 unsigned long opt, __u32 timeout)
129{
130 DECLARE_WAITQUEUE(wait, current);
131 int err = 0;
132
133 BT_DBG("%s start", hdev->name);
134
135 hdev->req_status = HCI_REQ_PEND;
136
137 add_wait_queue(&hdev->req_wait_q, &wait);
138 set_current_state(TASK_INTERRUPTIBLE);
139
140 req(hdev, opt);
141 schedule_timeout(timeout);
142
143 remove_wait_queue(&hdev->req_wait_q, &wait);
144
145 if (signal_pending(current))
146 return -EINTR;
147
148 switch (hdev->req_status) {
149 case HCI_REQ_DONE:
150 err = -bt_to_errno(hdev->req_result);
151 break;
152
153 case HCI_REQ_CANCELED:
154 err = -hdev->req_result;
155 break;
156
157 default:
158 err = -ETIMEDOUT;
159 break;
160 }
161
162 hdev->req_status = hdev->req_result = 0;
163
164 BT_DBG("%s end: err %d", hdev->name, err);
165
166 return err;
167}
168
169static inline int hci_request(struct hci_dev *hdev, void (*req)(struct hci_dev *hdev, unsigned long opt),
170 unsigned long opt, __u32 timeout)
171{
172 int ret;
173
174 if (!test_bit(HCI_UP, &hdev->flags))
175 return -ENETDOWN;
176
177 /* Serialize all requests */
178 hci_req_lock(hdev);
179 ret = __hci_request(hdev, req, opt, timeout);
180 hci_req_unlock(hdev);
181
182 return ret;
183}
184
185static void hci_reset_req(struct hci_dev *hdev, unsigned long opt)
186{
187 BT_DBG("%s %ld", hdev->name, opt);
188
189 /* Reset device */
190 set_bit(HCI_RESET, &hdev->flags);
191 hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
192}
193
194static void bredr_init(struct hci_dev *hdev)
195{
196 struct hci_cp_delete_stored_link_key cp;
197 __le16 param;
198 __u8 flt_type;
199
200 hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_PACKET_BASED;
201
202 /* Mandatory initialization */
203
204 /* Reset */
205 if (!test_bit(HCI_QUIRK_NO_RESET, &hdev->quirks)) {
206 set_bit(HCI_RESET, &hdev->flags);
207 hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
208 }
209
210 /* Read Local Supported Features */
211 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_FEATURES, 0, NULL);
212
213 /* Read Local Version */
214 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
215
216 /* Read Buffer Size (ACL mtu, max pkt, etc.) */
217 hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
218
219 /* Read BD Address */
220 hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
221
222 /* Read Class of Device */
223 hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
224
225 /* Read Local Name */
226 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL);
227
228 /* Read Voice Setting */
229 hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL);
230
231 /* Optional initialization */
232
233 /* Clear Event Filters */
234 flt_type = HCI_FLT_CLEAR_ALL;
235 hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
236
237 /* Connection accept timeout ~20 secs */
238 param = cpu_to_le16(0x7d00);
239 hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, ¶m);
240
241 bacpy(&cp.bdaddr, BDADDR_ANY);
242 cp.delete_all = 1;
243 hci_send_cmd(hdev, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp);
244}
245
246static void amp_init(struct hci_dev *hdev)
247{
248 hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_BLOCK_BASED;
249
250 /* Reset */
251 hci_send_cmd(hdev, HCI_OP_RESET, 0, NULL);
252
253 /* Read Local Version */
254 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_VERSION, 0, NULL);
255
256 /* Read Local AMP Info */
257 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_AMP_INFO, 0, NULL);
258}
259
260static void hci_init_req(struct hci_dev *hdev, unsigned long opt)
261{
262 struct sk_buff *skb;
263
264 BT_DBG("%s %ld", hdev->name, opt);
265
266 /* Driver initialization */
267
268 /* Special commands */
269 while ((skb = skb_dequeue(&hdev->driver_init))) {
270 bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
271 skb->dev = (void *) hdev;
272
273 skb_queue_tail(&hdev->cmd_q, skb);
274 queue_work(hdev->workqueue, &hdev->cmd_work);
275 }
276 skb_queue_purge(&hdev->driver_init);
277
278 switch (hdev->dev_type) {
279 case HCI_BREDR:
280 bredr_init(hdev);
281 break;
282
283 case HCI_AMP:
284 amp_init(hdev);
285 break;
286
287 default:
288 BT_ERR("Unknown device type %d", hdev->dev_type);
289 break;
290 }
291
292}
293
294static void hci_le_init_req(struct hci_dev *hdev, unsigned long opt)
295{
296 BT_DBG("%s", hdev->name);
297
298 /* Read LE buffer size */
299 hci_send_cmd(hdev, HCI_OP_LE_READ_BUFFER_SIZE, 0, NULL);
300}
301
302static void hci_scan_req(struct hci_dev *hdev, unsigned long opt)
303{
304 __u8 scan = opt;
305
306 BT_DBG("%s %x", hdev->name, scan);
307
308 /* Inquiry and Page scans */
309 hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
310}
311
312static void hci_auth_req(struct hci_dev *hdev, unsigned long opt)
313{
314 __u8 auth = opt;
315
316 BT_DBG("%s %x", hdev->name, auth);
317
318 /* Authentication */
319 hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, 1, &auth);
320}
321
322static void hci_encrypt_req(struct hci_dev *hdev, unsigned long opt)
323{
324 __u8 encrypt = opt;
325
326 BT_DBG("%s %x", hdev->name, encrypt);
327
328 /* Encryption */
329 hci_send_cmd(hdev, HCI_OP_WRITE_ENCRYPT_MODE, 1, &encrypt);
330}
331
332static void hci_linkpol_req(struct hci_dev *hdev, unsigned long opt)
333{
334 __le16 policy = cpu_to_le16(opt);
335
336 BT_DBG("%s %x", hdev->name, policy);
337
338 /* Default link policy */
339 hci_send_cmd(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, 2, &policy);
340}
341
342/* Get HCI device by index.
343 * Device is held on return. */
344struct hci_dev *hci_dev_get(int index)
345{
346 struct hci_dev *hdev = NULL, *d;
347
348 BT_DBG("%d", index);
349
350 if (index < 0)
351 return NULL;
352
353 read_lock(&hci_dev_list_lock);
354 list_for_each_entry(d, &hci_dev_list, list) {
355 if (d->id == index) {
356 hdev = hci_dev_hold(d);
357 break;
358 }
359 }
360 read_unlock(&hci_dev_list_lock);
361 return hdev;
362}
363
364/* ---- Inquiry support ---- */
365
366bool hci_discovery_active(struct hci_dev *hdev)
367{
368 struct discovery_state *discov = &hdev->discovery;
369
370 switch (discov->state) {
371 case DISCOVERY_FINDING:
372 case DISCOVERY_RESOLVING:
373 return true;
374
375 default:
376 return false;
377 }
378}
379
380void hci_discovery_set_state(struct hci_dev *hdev, int state)
381{
382 BT_DBG("%s state %u -> %u", hdev->name, hdev->discovery.state, state);
383
384 if (hdev->discovery.state == state)
385 return;
386
387 switch (state) {
388 case DISCOVERY_STOPPED:
389 if (hdev->discovery.state != DISCOVERY_STARTING)
390 mgmt_discovering(hdev, 0);
391 break;
392 case DISCOVERY_STARTING:
393 break;
394 case DISCOVERY_FINDING:
395 mgmt_discovering(hdev, 1);
396 break;
397 case DISCOVERY_RESOLVING:
398 break;
399 case DISCOVERY_STOPPING:
400 break;
401 }
402
403 hdev->discovery.state = state;
404}
405
406static void inquiry_cache_flush(struct hci_dev *hdev)
407{
408 struct discovery_state *cache = &hdev->discovery;
409 struct inquiry_entry *p, *n;
410
411 list_for_each_entry_safe(p, n, &cache->all, all) {
412 list_del(&p->all);
413 kfree(p);
414 }
415
416 INIT_LIST_HEAD(&cache->unknown);
417 INIT_LIST_HEAD(&cache->resolve);
418}
419
420struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr)
421{
422 struct discovery_state *cache = &hdev->discovery;
423 struct inquiry_entry *e;
424
425 BT_DBG("cache %p, %s", cache, batostr(bdaddr));
426
427 list_for_each_entry(e, &cache->all, all) {
428 if (!bacmp(&e->data.bdaddr, bdaddr))
429 return e;
430 }
431
432 return NULL;
433}
434
435struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
436 bdaddr_t *bdaddr)
437{
438 struct discovery_state *cache = &hdev->discovery;
439 struct inquiry_entry *e;
440
441 BT_DBG("cache %p, %s", cache, batostr(bdaddr));
442
443 list_for_each_entry(e, &cache->unknown, list) {
444 if (!bacmp(&e->data.bdaddr, bdaddr))
445 return e;
446 }
447
448 return NULL;
449}
450
451struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
452 bdaddr_t *bdaddr,
453 int state)
454{
455 struct discovery_state *cache = &hdev->discovery;
456 struct inquiry_entry *e;
457
458 BT_DBG("cache %p bdaddr %s state %d", cache, batostr(bdaddr), state);
459
460 list_for_each_entry(e, &cache->resolve, list) {
461 if (!bacmp(bdaddr, BDADDR_ANY) && e->name_state == state)
462 return e;
463 if (!bacmp(&e->data.bdaddr, bdaddr))
464 return e;
465 }
466
467 return NULL;
468}
469
470void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
471 struct inquiry_entry *ie)
472{
473 struct discovery_state *cache = &hdev->discovery;
474 struct list_head *pos = &cache->resolve;
475 struct inquiry_entry *p;
476
477 list_del(&ie->list);
478
479 list_for_each_entry(p, &cache->resolve, list) {
480 if (p->name_state != NAME_PENDING &&
481 abs(p->data.rssi) >= abs(ie->data.rssi))
482 break;
483 pos = &p->list;
484 }
485
486 list_add(&ie->list, pos);
487}
488
489bool hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
490 bool name_known, bool *ssp)
491{
492 struct discovery_state *cache = &hdev->discovery;
493 struct inquiry_entry *ie;
494
495 BT_DBG("cache %p, %s", cache, batostr(&data->bdaddr));
496
497 if (ssp)
498 *ssp = data->ssp_mode;
499
500 ie = hci_inquiry_cache_lookup(hdev, &data->bdaddr);
501 if (ie) {
502 if (ie->data.ssp_mode && ssp)
503 *ssp = true;
504
505 if (ie->name_state == NAME_NEEDED &&
506 data->rssi != ie->data.rssi) {
507 ie->data.rssi = data->rssi;
508 hci_inquiry_cache_update_resolve(hdev, ie);
509 }
510
511 goto update;
512 }
513
514 /* Entry not in the cache. Add new one. */
515 ie = kzalloc(sizeof(struct inquiry_entry), GFP_ATOMIC);
516 if (!ie)
517 return false;
518
519 list_add(&ie->all, &cache->all);
520
521 if (name_known) {
522 ie->name_state = NAME_KNOWN;
523 } else {
524 ie->name_state = NAME_NOT_KNOWN;
525 list_add(&ie->list, &cache->unknown);
526 }
527
528update:
529 if (name_known && ie->name_state != NAME_KNOWN &&
530 ie->name_state != NAME_PENDING) {
531 ie->name_state = NAME_KNOWN;
532 list_del(&ie->list);
533 }
534
535 memcpy(&ie->data, data, sizeof(*data));
536 ie->timestamp = jiffies;
537 cache->timestamp = jiffies;
538
539 if (ie->name_state == NAME_NOT_KNOWN)
540 return false;
541
542 return true;
543}
544
545static int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf)
546{
547 struct discovery_state *cache = &hdev->discovery;
548 struct inquiry_info *info = (struct inquiry_info *) buf;
549 struct inquiry_entry *e;
550 int copied = 0;
551
552 list_for_each_entry(e, &cache->all, all) {
553 struct inquiry_data *data = &e->data;
554
555 if (copied >= num)
556 break;
557
558 bacpy(&info->bdaddr, &data->bdaddr);
559 info->pscan_rep_mode = data->pscan_rep_mode;
560 info->pscan_period_mode = data->pscan_period_mode;
561 info->pscan_mode = data->pscan_mode;
562 memcpy(info->dev_class, data->dev_class, 3);
563 info->clock_offset = data->clock_offset;
564
565 info++;
566 copied++;
567 }
568
569 BT_DBG("cache %p, copied %d", cache, copied);
570 return copied;
571}
572
573static void hci_inq_req(struct hci_dev *hdev, unsigned long opt)
574{
575 struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
576 struct hci_cp_inquiry cp;
577
578 BT_DBG("%s", hdev->name);
579
580 if (test_bit(HCI_INQUIRY, &hdev->flags))
581 return;
582
583 /* Start Inquiry */
584 memcpy(&cp.lap, &ir->lap, 3);
585 cp.length = ir->length;
586 cp.num_rsp = ir->num_rsp;
587 hci_send_cmd(hdev, HCI_OP_INQUIRY, sizeof(cp), &cp);
588}
589
590int hci_inquiry(void __user *arg)
591{
592 __u8 __user *ptr = arg;
593 struct hci_inquiry_req ir;
594 struct hci_dev *hdev;
595 int err = 0, do_inquiry = 0, max_rsp;
596 long timeo;
597 __u8 *buf;
598
599 if (copy_from_user(&ir, ptr, sizeof(ir)))
600 return -EFAULT;
601
602 hdev = hci_dev_get(ir.dev_id);
603 if (!hdev)
604 return -ENODEV;
605
606 hci_dev_lock(hdev);
607 if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
608 inquiry_cache_empty(hdev) ||
609 ir.flags & IREQ_CACHE_FLUSH) {
610 inquiry_cache_flush(hdev);
611 do_inquiry = 1;
612 }
613 hci_dev_unlock(hdev);
614
615 timeo = ir.length * msecs_to_jiffies(2000);
616
617 if (do_inquiry) {
618 err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo);
619 if (err < 0)
620 goto done;
621 }
622
623 /* for unlimited number of responses we will use buffer with 255 entries */
624 max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
625
626 /* cache_dump can't sleep. Therefore we allocate temp buffer and then
627 * copy it to the user space.
628 */
629 buf = kmalloc(sizeof(struct inquiry_info) * max_rsp, GFP_KERNEL);
630 if (!buf) {
631 err = -ENOMEM;
632 goto done;
633 }
634
635 hci_dev_lock(hdev);
636 ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
637 hci_dev_unlock(hdev);
638
639 BT_DBG("num_rsp %d", ir.num_rsp);
640
641 if (!copy_to_user(ptr, &ir, sizeof(ir))) {
642 ptr += sizeof(ir);
643 if (copy_to_user(ptr, buf, sizeof(struct inquiry_info) *
644 ir.num_rsp))
645 err = -EFAULT;
646 } else
647 err = -EFAULT;
648
649 kfree(buf);
650
651done:
652 hci_dev_put(hdev);
653 return err;
654}
655
656/* ---- HCI ioctl helpers ---- */
657
658int hci_dev_open(__u16 dev)
659{
660 struct hci_dev *hdev;
661 int ret = 0;
662
663 hdev = hci_dev_get(dev);
664 if (!hdev)
665 return -ENODEV;
666
667 BT_DBG("%s %p", hdev->name, hdev);
668
669 hci_req_lock(hdev);
670
671 if (test_bit(HCI_UNREGISTER, &hdev->dev_flags)) {
672 ret = -ENODEV;
673 goto done;
674 }
675
676 if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) {
677 ret = -ERFKILL;
678 goto done;
679 }
680
681 if (test_bit(HCI_UP, &hdev->flags)) {
682 ret = -EALREADY;
683 goto done;
684 }
685
686 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
687 set_bit(HCI_RAW, &hdev->flags);
688
689 /* Treat all non BR/EDR controllers as raw devices if
690 enable_hs is not set */
691 if (hdev->dev_type != HCI_BREDR && !enable_hs)
692 set_bit(HCI_RAW, &hdev->flags);
693
694 if (hdev->open(hdev)) {
695 ret = -EIO;
696 goto done;
697 }
698
699 if (!test_bit(HCI_RAW, &hdev->flags)) {
700 atomic_set(&hdev->cmd_cnt, 1);
701 set_bit(HCI_INIT, &hdev->flags);
702 hdev->init_last_cmd = 0;
703
704 ret = __hci_request(hdev, hci_init_req, 0,
705 msecs_to_jiffies(HCI_INIT_TIMEOUT));
706
707 if (lmp_host_le_capable(hdev))
708 ret = __hci_request(hdev, hci_le_init_req, 0,
709 msecs_to_jiffies(HCI_INIT_TIMEOUT));
710
711 clear_bit(HCI_INIT, &hdev->flags);
712 }
713
714 if (!ret) {
715 hci_dev_hold(hdev);
716 set_bit(HCI_UP, &hdev->flags);
717 hci_notify(hdev, HCI_DEV_UP);
718 if (!test_bit(HCI_SETUP, &hdev->dev_flags)) {
719 hci_dev_lock(hdev);
720 mgmt_powered(hdev, 1);
721 hci_dev_unlock(hdev);
722 }
723 } else {
724 /* Init failed, cleanup */
725 flush_work(&hdev->tx_work);
726 flush_work(&hdev->cmd_work);
727 flush_work(&hdev->rx_work);
728
729 skb_queue_purge(&hdev->cmd_q);
730 skb_queue_purge(&hdev->rx_q);
731
732 if (hdev->flush)
733 hdev->flush(hdev);
734
735 if (hdev->sent_cmd) {
736 kfree_skb(hdev->sent_cmd);
737 hdev->sent_cmd = NULL;
738 }
739
740 hdev->close(hdev);
741 hdev->flags = 0;
742 }
743
744done:
745 hci_req_unlock(hdev);
746 hci_dev_put(hdev);
747 return ret;
748}
749
750static int hci_dev_do_close(struct hci_dev *hdev)
751{
752 BT_DBG("%s %p", hdev->name, hdev);
753
754 cancel_work_sync(&hdev->le_scan);
755
756 cancel_delayed_work(&hdev->power_off);
757
758 hci_req_cancel(hdev, ENODEV);
759 hci_req_lock(hdev);
760
761 if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
762 del_timer_sync(&hdev->cmd_timer);
763 hci_req_unlock(hdev);
764 return 0;
765 }
766
767 /* Flush RX and TX works */
768 flush_work(&hdev->tx_work);
769 flush_work(&hdev->rx_work);
770
771 if (hdev->discov_timeout > 0) {
772 cancel_delayed_work(&hdev->discov_off);
773 hdev->discov_timeout = 0;
774 clear_bit(HCI_DISCOVERABLE, &hdev->dev_flags);
775 }
776
777 if (test_and_clear_bit(HCI_SERVICE_CACHE, &hdev->dev_flags))
778 cancel_delayed_work(&hdev->service_cache);
779
780 cancel_delayed_work_sync(&hdev->le_scan_disable);
781
782 hci_dev_lock(hdev);
783 inquiry_cache_flush(hdev);
784 hci_conn_hash_flush(hdev);
785 hci_dev_unlock(hdev);
786
787 hci_notify(hdev, HCI_DEV_DOWN);
788
789 if (hdev->flush)
790 hdev->flush(hdev);
791
792 /* Reset device */
793 skb_queue_purge(&hdev->cmd_q);
794 atomic_set(&hdev->cmd_cnt, 1);
795 if (!test_bit(HCI_RAW, &hdev->flags) &&
796 test_bit(HCI_QUIRK_NO_RESET, &hdev->quirks)) {
797 set_bit(HCI_INIT, &hdev->flags);
798 __hci_request(hdev, hci_reset_req, 0,
799 msecs_to_jiffies(250));
800 clear_bit(HCI_INIT, &hdev->flags);
801 }
802
803 /* flush cmd work */
804 flush_work(&hdev->cmd_work);
805
806 /* Drop queues */
807 skb_queue_purge(&hdev->rx_q);
808 skb_queue_purge(&hdev->cmd_q);
809 skb_queue_purge(&hdev->raw_q);
810
811 /* Drop last sent command */
812 if (hdev->sent_cmd) {
813 del_timer_sync(&hdev->cmd_timer);
814 kfree_skb(hdev->sent_cmd);
815 hdev->sent_cmd = NULL;
816 }
817
818 /* After this point our queues are empty
819 * and no tasks are scheduled. */
820 hdev->close(hdev);
821
822 if (!test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) {
823 hci_dev_lock(hdev);
824 mgmt_powered(hdev, 0);
825 hci_dev_unlock(hdev);
826 }
827
828 /* Clear flags */
829 hdev->flags = 0;
830
831 memset(hdev->eir, 0, sizeof(hdev->eir));
832 memset(hdev->dev_class, 0, sizeof(hdev->dev_class));
833
834 hci_req_unlock(hdev);
835
836 hci_dev_put(hdev);
837 return 0;
838}
839
840int hci_dev_close(__u16 dev)
841{
842 struct hci_dev *hdev;
843 int err;
844
845 hdev = hci_dev_get(dev);
846 if (!hdev)
847 return -ENODEV;
848
849 if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
850 cancel_delayed_work(&hdev->power_off);
851
852 err = hci_dev_do_close(hdev);
853
854 hci_dev_put(hdev);
855 return err;
856}
857
858int hci_dev_reset(__u16 dev)
859{
860 struct hci_dev *hdev;
861 int ret = 0;
862
863 hdev = hci_dev_get(dev);
864 if (!hdev)
865 return -ENODEV;
866
867 hci_req_lock(hdev);
868
869 if (!test_bit(HCI_UP, &hdev->flags))
870 goto done;
871
872 /* Drop queues */
873 skb_queue_purge(&hdev->rx_q);
874 skb_queue_purge(&hdev->cmd_q);
875
876 hci_dev_lock(hdev);
877 inquiry_cache_flush(hdev);
878 hci_conn_hash_flush(hdev);
879 hci_dev_unlock(hdev);
880
881 if (hdev->flush)
882 hdev->flush(hdev);
883
884 atomic_set(&hdev->cmd_cnt, 1);
885 hdev->acl_cnt = 0; hdev->sco_cnt = 0; hdev->le_cnt = 0;
886
887 if (!test_bit(HCI_RAW, &hdev->flags))
888 ret = __hci_request(hdev, hci_reset_req, 0,
889 msecs_to_jiffies(HCI_INIT_TIMEOUT));
890
891done:
892 hci_req_unlock(hdev);
893 hci_dev_put(hdev);
894 return ret;
895}
896
897int hci_dev_reset_stat(__u16 dev)
898{
899 struct hci_dev *hdev;
900 int ret = 0;
901
902 hdev = hci_dev_get(dev);
903 if (!hdev)
904 return -ENODEV;
905
906 memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
907
908 hci_dev_put(hdev);
909
910 return ret;
911}
912
913int hci_dev_cmd(unsigned int cmd, void __user *arg)
914{
915 struct hci_dev *hdev;
916 struct hci_dev_req dr;
917 int err = 0;
918
919 if (copy_from_user(&dr, arg, sizeof(dr)))
920 return -EFAULT;
921
922 hdev = hci_dev_get(dr.dev_id);
923 if (!hdev)
924 return -ENODEV;
925
926 switch (cmd) {
927 case HCISETAUTH:
928 err = hci_request(hdev, hci_auth_req, dr.dev_opt,
929 msecs_to_jiffies(HCI_INIT_TIMEOUT));
930 break;
931
932 case HCISETENCRYPT:
933 if (!lmp_encrypt_capable(hdev)) {
934 err = -EOPNOTSUPP;
935 break;
936 }
937
938 if (!test_bit(HCI_AUTH, &hdev->flags)) {
939 /* Auth must be enabled first */
940 err = hci_request(hdev, hci_auth_req, dr.dev_opt,
941 msecs_to_jiffies(HCI_INIT_TIMEOUT));
942 if (err)
943 break;
944 }
945
946 err = hci_request(hdev, hci_encrypt_req, dr.dev_opt,
947 msecs_to_jiffies(HCI_INIT_TIMEOUT));
948 break;
949
950 case HCISETSCAN:
951 err = hci_request(hdev, hci_scan_req, dr.dev_opt,
952 msecs_to_jiffies(HCI_INIT_TIMEOUT));
953 break;
954
955 case HCISETLINKPOL:
956 err = hci_request(hdev, hci_linkpol_req, dr.dev_opt,
957 msecs_to_jiffies(HCI_INIT_TIMEOUT));
958 break;
959
960 case HCISETLINKMODE:
961 hdev->link_mode = ((__u16) dr.dev_opt) &
962 (HCI_LM_MASTER | HCI_LM_ACCEPT);
963 break;
964
965 case HCISETPTYPE:
966 hdev->pkt_type = (__u16) dr.dev_opt;
967 break;
968
969 case HCISETACLMTU:
970 hdev->acl_mtu = *((__u16 *) &dr.dev_opt + 1);
971 hdev->acl_pkts = *((__u16 *) &dr.dev_opt + 0);
972 break;
973
974 case HCISETSCOMTU:
975 hdev->sco_mtu = *((__u16 *) &dr.dev_opt + 1);
976 hdev->sco_pkts = *((__u16 *) &dr.dev_opt + 0);
977 break;
978
979 default:
980 err = -EINVAL;
981 break;
982 }
983
984 hci_dev_put(hdev);
985 return err;
986}
987
988int hci_get_dev_list(void __user *arg)
989{
990 struct hci_dev *hdev;
991 struct hci_dev_list_req *dl;
992 struct hci_dev_req *dr;
993 int n = 0, size, err;
994 __u16 dev_num;
995
996 if (get_user(dev_num, (__u16 __user *) arg))
997 return -EFAULT;
998
999 if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
1000 return -EINVAL;
1001
1002 size = sizeof(*dl) + dev_num * sizeof(*dr);
1003
1004 dl = kzalloc(size, GFP_KERNEL);
1005 if (!dl)
1006 return -ENOMEM;
1007
1008 dr = dl->dev_req;
1009
1010 read_lock(&hci_dev_list_lock);
1011 list_for_each_entry(hdev, &hci_dev_list, list) {
1012 if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
1013 cancel_delayed_work(&hdev->power_off);
1014
1015 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
1016 set_bit(HCI_PAIRABLE, &hdev->dev_flags);
1017
1018 (dr + n)->dev_id = hdev->id;
1019 (dr + n)->dev_opt = hdev->flags;
1020
1021 if (++n >= dev_num)
1022 break;
1023 }
1024 read_unlock(&hci_dev_list_lock);
1025
1026 dl->dev_num = n;
1027 size = sizeof(*dl) + n * sizeof(*dr);
1028
1029 err = copy_to_user(arg, dl, size);
1030 kfree(dl);
1031
1032 return err ? -EFAULT : 0;
1033}
1034
1035int hci_get_dev_info(void __user *arg)
1036{
1037 struct hci_dev *hdev;
1038 struct hci_dev_info di;
1039 int err = 0;
1040
1041 if (copy_from_user(&di, arg, sizeof(di)))
1042 return -EFAULT;
1043
1044 hdev = hci_dev_get(di.dev_id);
1045 if (!hdev)
1046 return -ENODEV;
1047
1048 if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags))
1049 cancel_delayed_work_sync(&hdev->power_off);
1050
1051 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
1052 set_bit(HCI_PAIRABLE, &hdev->dev_flags);
1053
1054 strcpy(di.name, hdev->name);
1055 di.bdaddr = hdev->bdaddr;
1056 di.type = (hdev->bus & 0x0f) | (hdev->dev_type << 4);
1057 di.flags = hdev->flags;
1058 di.pkt_type = hdev->pkt_type;
1059 di.acl_mtu = hdev->acl_mtu;
1060 di.acl_pkts = hdev->acl_pkts;
1061 di.sco_mtu = hdev->sco_mtu;
1062 di.sco_pkts = hdev->sco_pkts;
1063 di.link_policy = hdev->link_policy;
1064 di.link_mode = hdev->link_mode;
1065
1066 memcpy(&di.stat, &hdev->stat, sizeof(di.stat));
1067 memcpy(&di.features, &hdev->features, sizeof(di.features));
1068
1069 if (copy_to_user(arg, &di, sizeof(di)))
1070 err = -EFAULT;
1071
1072 hci_dev_put(hdev);
1073
1074 return err;
1075}
1076
1077/* ---- Interface to HCI drivers ---- */
1078
1079static int hci_rfkill_set_block(void *data, bool blocked)
1080{
1081 struct hci_dev *hdev = data;
1082
1083 BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked);
1084
1085 if (!blocked)
1086 return 0;
1087
1088 hci_dev_do_close(hdev);
1089
1090 return 0;
1091}
1092
1093static const struct rfkill_ops hci_rfkill_ops = {
1094 .set_block = hci_rfkill_set_block,
1095};
1096
1097static void hci_power_on(struct work_struct *work)
1098{
1099 struct hci_dev *hdev = container_of(work, struct hci_dev, power_on);
1100
1101 BT_DBG("%s", hdev->name);
1102
1103 if (hci_dev_open(hdev->id) < 0)
1104 return;
1105
1106 if (test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
1107 schedule_delayed_work(&hdev->power_off,
1108 msecs_to_jiffies(AUTO_OFF_TIMEOUT));
1109
1110 if (test_and_clear_bit(HCI_SETUP, &hdev->dev_flags))
1111 mgmt_index_added(hdev);
1112}
1113
1114static void hci_power_off(struct work_struct *work)
1115{
1116 struct hci_dev *hdev = container_of(work, struct hci_dev,
1117 power_off.work);
1118
1119 BT_DBG("%s", hdev->name);
1120
1121 hci_dev_do_close(hdev);
1122}
1123
1124static void hci_discov_off(struct work_struct *work)
1125{
1126 struct hci_dev *hdev;
1127 u8 scan = SCAN_PAGE;
1128
1129 hdev = container_of(work, struct hci_dev, discov_off.work);
1130
1131 BT_DBG("%s", hdev->name);
1132
1133 hci_dev_lock(hdev);
1134
1135 hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, sizeof(scan), &scan);
1136
1137 hdev->discov_timeout = 0;
1138
1139 hci_dev_unlock(hdev);
1140}
1141
1142int hci_uuids_clear(struct hci_dev *hdev)
1143{
1144 struct list_head *p, *n;
1145
1146 list_for_each_safe(p, n, &hdev->uuids) {
1147 struct bt_uuid *uuid;
1148
1149 uuid = list_entry(p, struct bt_uuid, list);
1150
1151 list_del(p);
1152 kfree(uuid);
1153 }
1154
1155 return 0;
1156}
1157
1158int hci_link_keys_clear(struct hci_dev *hdev)
1159{
1160 struct list_head *p, *n;
1161
1162 list_for_each_safe(p, n, &hdev->link_keys) {
1163 struct link_key *key;
1164
1165 key = list_entry(p, struct link_key, list);
1166
1167 list_del(p);
1168 kfree(key);
1169 }
1170
1171 return 0;
1172}
1173
1174int hci_smp_ltks_clear(struct hci_dev *hdev)
1175{
1176 struct smp_ltk *k, *tmp;
1177
1178 list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
1179 list_del(&k->list);
1180 kfree(k);
1181 }
1182
1183 return 0;
1184}
1185
1186struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
1187{
1188 struct link_key *k;
1189
1190 list_for_each_entry(k, &hdev->link_keys, list)
1191 if (bacmp(bdaddr, &k->bdaddr) == 0)
1192 return k;
1193
1194 return NULL;
1195}
1196
1197static bool hci_persistent_key(struct hci_dev *hdev, struct hci_conn *conn,
1198 u8 key_type, u8 old_key_type)
1199{
1200 /* Legacy key */
1201 if (key_type < 0x03)
1202 return true;
1203
1204 /* Debug keys are insecure so don't store them persistently */
1205 if (key_type == HCI_LK_DEBUG_COMBINATION)
1206 return false;
1207
1208 /* Changed combination key and there's no previous one */
1209 if (key_type == HCI_LK_CHANGED_COMBINATION && old_key_type == 0xff)
1210 return false;
1211
1212 /* Security mode 3 case */
1213 if (!conn)
1214 return true;
1215
1216 /* Neither local nor remote side had no-bonding as requirement */
1217 if (conn->auth_type > 0x01 && conn->remote_auth > 0x01)
1218 return true;
1219
1220 /* Local side had dedicated bonding as requirement */
1221 if (conn->auth_type == 0x02 || conn->auth_type == 0x03)
1222 return true;
1223
1224 /* Remote side had dedicated bonding as requirement */
1225 if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03)
1226 return true;
1227
1228 /* If none of the above criteria match, then don't store the key
1229 * persistently */
1230 return false;
1231}
1232
1233struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, u8 rand[8])
1234{
1235 struct smp_ltk *k;
1236
1237 list_for_each_entry(k, &hdev->long_term_keys, list) {
1238 if (k->ediv != ediv ||
1239 memcmp(rand, k->rand, sizeof(k->rand)))
1240 continue;
1241
1242 return k;
1243 }
1244
1245 return NULL;
1246}
1247EXPORT_SYMBOL(hci_find_ltk);
1248
1249struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
1250 u8 addr_type)
1251{
1252 struct smp_ltk *k;
1253
1254 list_for_each_entry(k, &hdev->long_term_keys, list)
1255 if (addr_type == k->bdaddr_type &&
1256 bacmp(bdaddr, &k->bdaddr) == 0)
1257 return k;
1258
1259 return NULL;
1260}
1261EXPORT_SYMBOL(hci_find_ltk_by_addr);
1262
1263int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
1264 bdaddr_t *bdaddr, u8 *val, u8 type, u8 pin_len)
1265{
1266 struct link_key *key, *old_key;
1267 u8 old_key_type;
1268 bool persistent;
1269
1270 old_key = hci_find_link_key(hdev, bdaddr);
1271 if (old_key) {
1272 old_key_type = old_key->type;
1273 key = old_key;
1274 } else {
1275 old_key_type = conn ? conn->key_type : 0xff;
1276 key = kzalloc(sizeof(*key), GFP_ATOMIC);
1277 if (!key)
1278 return -ENOMEM;
1279 list_add(&key->list, &hdev->link_keys);
1280 }
1281
1282 BT_DBG("%s key for %s type %u", hdev->name, batostr(bdaddr), type);
1283
1284 /* Some buggy controller combinations generate a changed
1285 * combination key for legacy pairing even when there's no
1286 * previous key */
1287 if (type == HCI_LK_CHANGED_COMBINATION &&
1288 (!conn || conn->remote_auth == 0xff) &&
1289 old_key_type == 0xff) {
1290 type = HCI_LK_COMBINATION;
1291 if (conn)
1292 conn->key_type = type;
1293 }
1294
1295 bacpy(&key->bdaddr, bdaddr);
1296 memcpy(key->val, val, 16);
1297 key->pin_len = pin_len;
1298
1299 if (type == HCI_LK_CHANGED_COMBINATION)
1300 key->type = old_key_type;
1301 else
1302 key->type = type;
1303
1304 if (!new_key)
1305 return 0;
1306
1307 persistent = hci_persistent_key(hdev, conn, type, old_key_type);
1308
1309 mgmt_new_link_key(hdev, key, persistent);
1310
1311 if (conn)
1312 conn->flush_key = !persistent;
1313
1314 return 0;
1315}
1316
1317int hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type, u8 type,
1318 int new_key, u8 authenticated, u8 tk[16], u8 enc_size, __le16
1319 ediv, u8 rand[8])
1320{
1321 struct smp_ltk *key, *old_key;
1322
1323 if (!(type & HCI_SMP_STK) && !(type & HCI_SMP_LTK))
1324 return 0;
1325
1326 old_key = hci_find_ltk_by_addr(hdev, bdaddr, addr_type);
1327 if (old_key)
1328 key = old_key;
1329 else {
1330 key = kzalloc(sizeof(*key), GFP_ATOMIC);
1331 if (!key)
1332 return -ENOMEM;
1333 list_add(&key->list, &hdev->long_term_keys);
1334 }
1335
1336 bacpy(&key->bdaddr, bdaddr);
1337 key->bdaddr_type = addr_type;
1338 memcpy(key->val, tk, sizeof(key->val));
1339 key->authenticated = authenticated;
1340 key->ediv = ediv;
1341 key->enc_size = enc_size;
1342 key->type = type;
1343 memcpy(key->rand, rand, sizeof(key->rand));
1344
1345 if (!new_key)
1346 return 0;
1347
1348 if (type & HCI_SMP_LTK)
1349 mgmt_new_ltk(hdev, key, 1);
1350
1351 return 0;
1352}
1353
1354int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
1355{
1356 struct link_key *key;
1357
1358 key = hci_find_link_key(hdev, bdaddr);
1359 if (!key)
1360 return -ENOENT;
1361
1362 BT_DBG("%s removing %s", hdev->name, batostr(bdaddr));
1363
1364 list_del(&key->list);
1365 kfree(key);
1366
1367 return 0;
1368}
1369
1370int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr)
1371{
1372 struct smp_ltk *k, *tmp;
1373
1374 list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
1375 if (bacmp(bdaddr, &k->bdaddr))
1376 continue;
1377
1378 BT_DBG("%s removing %s", hdev->name, batostr(bdaddr));
1379
1380 list_del(&k->list);
1381 kfree(k);
1382 }
1383
1384 return 0;
1385}
1386
1387/* HCI command timer function */
1388static void hci_cmd_timer(unsigned long arg)
1389{
1390 struct hci_dev *hdev = (void *) arg;
1391
1392 BT_ERR("%s command tx timeout", hdev->name);
1393 atomic_set(&hdev->cmd_cnt, 1);
1394 queue_work(hdev->workqueue, &hdev->cmd_work);
1395}
1396
1397struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
1398 bdaddr_t *bdaddr)
1399{
1400 struct oob_data *data;
1401
1402 list_for_each_entry(data, &hdev->remote_oob_data, list)
1403 if (bacmp(bdaddr, &data->bdaddr) == 0)
1404 return data;
1405
1406 return NULL;
1407}
1408
1409int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr)
1410{
1411 struct oob_data *data;
1412
1413 data = hci_find_remote_oob_data(hdev, bdaddr);
1414 if (!data)
1415 return -ENOENT;
1416
1417 BT_DBG("%s removing %s", hdev->name, batostr(bdaddr));
1418
1419 list_del(&data->list);
1420 kfree(data);
1421
1422 return 0;
1423}
1424
1425int hci_remote_oob_data_clear(struct hci_dev *hdev)
1426{
1427 struct oob_data *data, *n;
1428
1429 list_for_each_entry_safe(data, n, &hdev->remote_oob_data, list) {
1430 list_del(&data->list);
1431 kfree(data);
1432 }
1433
1434 return 0;
1435}
1436
1437int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 *hash,
1438 u8 *randomizer)
1439{
1440 struct oob_data *data;
1441
1442 data = hci_find_remote_oob_data(hdev, bdaddr);
1443
1444 if (!data) {
1445 data = kmalloc(sizeof(*data), GFP_ATOMIC);
1446 if (!data)
1447 return -ENOMEM;
1448
1449 bacpy(&data->bdaddr, bdaddr);
1450 list_add(&data->list, &hdev->remote_oob_data);
1451 }
1452
1453 memcpy(data->hash, hash, sizeof(data->hash));
1454 memcpy(data->randomizer, randomizer, sizeof(data->randomizer));
1455
1456 BT_DBG("%s for %s", hdev->name, batostr(bdaddr));
1457
1458 return 0;
1459}
1460
1461struct bdaddr_list *hci_blacklist_lookup(struct hci_dev *hdev, bdaddr_t *bdaddr)
1462{
1463 struct bdaddr_list *b;
1464
1465 list_for_each_entry(b, &hdev->blacklist, list)
1466 if (bacmp(bdaddr, &b->bdaddr) == 0)
1467 return b;
1468
1469 return NULL;
1470}
1471
1472int hci_blacklist_clear(struct hci_dev *hdev)
1473{
1474 struct list_head *p, *n;
1475
1476 list_for_each_safe(p, n, &hdev->blacklist) {
1477 struct bdaddr_list *b;
1478
1479 b = list_entry(p, struct bdaddr_list, list);
1480
1481 list_del(p);
1482 kfree(b);
1483 }
1484
1485 return 0;
1486}
1487
1488int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
1489{
1490 struct bdaddr_list *entry;
1491
1492 if (bacmp(bdaddr, BDADDR_ANY) == 0)
1493 return -EBADF;
1494
1495 if (hci_blacklist_lookup(hdev, bdaddr))
1496 return -EEXIST;
1497
1498 entry = kzalloc(sizeof(struct bdaddr_list), GFP_KERNEL);
1499 if (!entry)
1500 return -ENOMEM;
1501
1502 bacpy(&entry->bdaddr, bdaddr);
1503
1504 list_add(&entry->list, &hdev->blacklist);
1505
1506 return mgmt_device_blocked(hdev, bdaddr, type);
1507}
1508
1509int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
1510{
1511 struct bdaddr_list *entry;
1512
1513 if (bacmp(bdaddr, BDADDR_ANY) == 0)
1514 return hci_blacklist_clear(hdev);
1515
1516 entry = hci_blacklist_lookup(hdev, bdaddr);
1517 if (!entry)
1518 return -ENOENT;
1519
1520 list_del(&entry->list);
1521 kfree(entry);
1522
1523 return mgmt_device_unblocked(hdev, bdaddr, type);
1524}
1525
1526static void le_scan_param_req(struct hci_dev *hdev, unsigned long opt)
1527{
1528 struct le_scan_params *param = (struct le_scan_params *) opt;
1529 struct hci_cp_le_set_scan_param cp;
1530
1531 memset(&cp, 0, sizeof(cp));
1532 cp.type = param->type;
1533 cp.interval = cpu_to_le16(param->interval);
1534 cp.window = cpu_to_le16(param->window);
1535
1536 hci_send_cmd(hdev, HCI_OP_LE_SET_SCAN_PARAM, sizeof(cp), &cp);
1537}
1538
1539static void le_scan_enable_req(struct hci_dev *hdev, unsigned long opt)
1540{
1541 struct hci_cp_le_set_scan_enable cp;
1542
1543 memset(&cp, 0, sizeof(cp));
1544 cp.enable = 1;
1545
1546 hci_send_cmd(hdev, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
1547}
1548
1549static int hci_do_le_scan(struct hci_dev *hdev, u8 type, u16 interval,
1550 u16 window, int timeout)
1551{
1552 long timeo = msecs_to_jiffies(3000);
1553 struct le_scan_params param;
1554 int err;
1555
1556 BT_DBG("%s", hdev->name);
1557
1558 if (test_bit(HCI_LE_SCAN, &hdev->dev_flags))
1559 return -EINPROGRESS;
1560
1561 param.type = type;
1562 param.interval = interval;
1563 param.window = window;
1564
1565 hci_req_lock(hdev);
1566
1567 err = __hci_request(hdev, le_scan_param_req, (unsigned long) ¶m,
1568 timeo);
1569 if (!err)
1570 err = __hci_request(hdev, le_scan_enable_req, 0, timeo);
1571
1572 hci_req_unlock(hdev);
1573
1574 if (err < 0)
1575 return err;
1576
1577 schedule_delayed_work(&hdev->le_scan_disable,
1578 msecs_to_jiffies(timeout));
1579
1580 return 0;
1581}
1582
1583int hci_cancel_le_scan(struct hci_dev *hdev)
1584{
1585 BT_DBG("%s", hdev->name);
1586
1587 if (!test_bit(HCI_LE_SCAN, &hdev->dev_flags))
1588 return -EALREADY;
1589
1590 if (cancel_delayed_work(&hdev->le_scan_disable)) {
1591 struct hci_cp_le_set_scan_enable cp;
1592
1593 /* Send HCI command to disable LE Scan */
1594 memset(&cp, 0, sizeof(cp));
1595 hci_send_cmd(hdev, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
1596 }
1597
1598 return 0;
1599}
1600
1601static void le_scan_disable_work(struct work_struct *work)
1602{
1603 struct hci_dev *hdev = container_of(work, struct hci_dev,
1604 le_scan_disable.work);
1605 struct hci_cp_le_set_scan_enable cp;
1606
1607 BT_DBG("%s", hdev->name);
1608
1609 memset(&cp, 0, sizeof(cp));
1610
1611 hci_send_cmd(hdev, HCI_OP_LE_SET_SCAN_ENABLE, sizeof(cp), &cp);
1612}
1613
1614static void le_scan_work(struct work_struct *work)
1615{
1616 struct hci_dev *hdev = container_of(work, struct hci_dev, le_scan);
1617 struct le_scan_params *param = &hdev->le_scan_params;
1618
1619 BT_DBG("%s", hdev->name);
1620
1621 hci_do_le_scan(hdev, param->type, param->interval, param->window,
1622 param->timeout);
1623}
1624
1625int hci_le_scan(struct hci_dev *hdev, u8 type, u16 interval, u16 window,
1626 int timeout)
1627{
1628 struct le_scan_params *param = &hdev->le_scan_params;
1629
1630 BT_DBG("%s", hdev->name);
1631
1632 if (work_busy(&hdev->le_scan))
1633 return -EINPROGRESS;
1634
1635 param->type = type;
1636 param->interval = interval;
1637 param->window = window;
1638 param->timeout = timeout;
1639
1640 queue_work(system_long_wq, &hdev->le_scan);
1641
1642 return 0;
1643}
1644
1645/* Alloc HCI device */
1646struct hci_dev *hci_alloc_dev(void)
1647{
1648 struct hci_dev *hdev;
1649
1650 hdev = kzalloc(sizeof(struct hci_dev), GFP_KERNEL);
1651 if (!hdev)
1652 return NULL;
1653
1654 hdev->pkt_type = (HCI_DM1 | HCI_DH1 | HCI_HV1);
1655 hdev->esco_type = (ESCO_HV1);
1656 hdev->link_mode = (HCI_LM_ACCEPT);
1657 hdev->io_capability = 0x03; /* No Input No Output */
1658
1659 hdev->sniff_max_interval = 800;
1660 hdev->sniff_min_interval = 80;
1661
1662 mutex_init(&hdev->lock);
1663 mutex_init(&hdev->req_lock);
1664
1665 INIT_LIST_HEAD(&hdev->mgmt_pending);
1666 INIT_LIST_HEAD(&hdev->blacklist);
1667 INIT_LIST_HEAD(&hdev->uuids);
1668 INIT_LIST_HEAD(&hdev->link_keys);
1669 INIT_LIST_HEAD(&hdev->long_term_keys);
1670 INIT_LIST_HEAD(&hdev->remote_oob_data);
1671
1672 INIT_WORK(&hdev->rx_work, hci_rx_work);
1673 INIT_WORK(&hdev->cmd_work, hci_cmd_work);
1674 INIT_WORK(&hdev->tx_work, hci_tx_work);
1675 INIT_WORK(&hdev->power_on, hci_power_on);
1676 INIT_WORK(&hdev->le_scan, le_scan_work);
1677
1678 INIT_DELAYED_WORK(&hdev->power_off, hci_power_off);
1679 INIT_DELAYED_WORK(&hdev->discov_off, hci_discov_off);
1680 INIT_DELAYED_WORK(&hdev->le_scan_disable, le_scan_disable_work);
1681
1682 skb_queue_head_init(&hdev->driver_init);
1683 skb_queue_head_init(&hdev->rx_q);
1684 skb_queue_head_init(&hdev->cmd_q);
1685 skb_queue_head_init(&hdev->raw_q);
1686
1687 init_waitqueue_head(&hdev->req_wait_q);
1688
1689 setup_timer(&hdev->cmd_timer, hci_cmd_timer, (unsigned long) hdev);
1690
1691 hci_init_sysfs(hdev);
1692 discovery_init(hdev);
1693 hci_conn_hash_init(hdev);
1694
1695 return hdev;
1696}
1697EXPORT_SYMBOL(hci_alloc_dev);
1698
1699/* Free HCI device */
1700void hci_free_dev(struct hci_dev *hdev)
1701{
1702 skb_queue_purge(&hdev->driver_init);
1703
1704 /* will free via device release */
1705 put_device(&hdev->dev);
1706}
1707EXPORT_SYMBOL(hci_free_dev);
1708
1709/* Register HCI device */
1710int hci_register_dev(struct hci_dev *hdev)
1711{
1712 struct list_head *head, *p;
1713 int id, error;
1714
1715 if (!hdev->open || !hdev->close)
1716 return -EINVAL;
1717
1718 write_lock(&hci_dev_list_lock);
1719
1720 /* Do not allow HCI_AMP devices to register at index 0,
1721 * so the index can be used as the AMP controller ID.
1722 */
1723 id = (hdev->dev_type == HCI_BREDR) ? 0 : 1;
1724 head = &hci_dev_list;
1725
1726 /* Find first available device id */
1727 list_for_each(p, &hci_dev_list) {
1728 int nid = list_entry(p, struct hci_dev, list)->id;
1729 if (nid > id)
1730 break;
1731 if (nid == id)
1732 id++;
1733 head = p;
1734 }
1735
1736 sprintf(hdev->name, "hci%d", id);
1737 hdev->id = id;
1738
1739 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
1740
1741 list_add(&hdev->list, head);
1742
1743 write_unlock(&hci_dev_list_lock);
1744
1745 hdev->workqueue = alloc_workqueue(hdev->name, WQ_HIGHPRI | WQ_UNBOUND |
1746 WQ_MEM_RECLAIM, 1);
1747 if (!hdev->workqueue) {
1748 error = -ENOMEM;
1749 goto err;
1750 }
1751
1752 error = hci_add_sysfs(hdev);
1753 if (error < 0)
1754 goto err_wqueue;
1755
1756 hdev->rfkill = rfkill_alloc(hdev->name, &hdev->dev,
1757 RFKILL_TYPE_BLUETOOTH, &hci_rfkill_ops, hdev);
1758 if (hdev->rfkill) {
1759 if (rfkill_register(hdev->rfkill) < 0) {
1760 rfkill_destroy(hdev->rfkill);
1761 hdev->rfkill = NULL;
1762 }
1763 }
1764
1765 set_bit(HCI_AUTO_OFF, &hdev->dev_flags);
1766 set_bit(HCI_SETUP, &hdev->dev_flags);
1767 schedule_work(&hdev->power_on);
1768
1769 hci_notify(hdev, HCI_DEV_REG);
1770 hci_dev_hold(hdev);
1771
1772 return id;
1773
1774err_wqueue:
1775 destroy_workqueue(hdev->workqueue);
1776err:
1777 write_lock(&hci_dev_list_lock);
1778 list_del(&hdev->list);
1779 write_unlock(&hci_dev_list_lock);
1780
1781 return error;
1782}
1783EXPORT_SYMBOL(hci_register_dev);
1784
1785/* Unregister HCI device */
1786void hci_unregister_dev(struct hci_dev *hdev)
1787{
1788 int i;
1789
1790 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
1791
1792 set_bit(HCI_UNREGISTER, &hdev->dev_flags);
1793
1794 write_lock(&hci_dev_list_lock);
1795 list_del(&hdev->list);
1796 write_unlock(&hci_dev_list_lock);
1797
1798 hci_dev_do_close(hdev);
1799
1800 for (i = 0; i < NUM_REASSEMBLY; i++)
1801 kfree_skb(hdev->reassembly[i]);
1802
1803 if (!test_bit(HCI_INIT, &hdev->flags) &&
1804 !test_bit(HCI_SETUP, &hdev->dev_flags)) {
1805 hci_dev_lock(hdev);
1806 mgmt_index_removed(hdev);
1807 hci_dev_unlock(hdev);
1808 }
1809
1810 /* mgmt_index_removed should take care of emptying the
1811 * pending list */
1812 BUG_ON(!list_empty(&hdev->mgmt_pending));
1813
1814 hci_notify(hdev, HCI_DEV_UNREG);
1815
1816 if (hdev->rfkill) {
1817 rfkill_unregister(hdev->rfkill);
1818 rfkill_destroy(hdev->rfkill);
1819 }
1820
1821 hci_del_sysfs(hdev);
1822
1823 destroy_workqueue(hdev->workqueue);
1824
1825 hci_dev_lock(hdev);
1826 hci_blacklist_clear(hdev);
1827 hci_uuids_clear(hdev);
1828 hci_link_keys_clear(hdev);
1829 hci_smp_ltks_clear(hdev);
1830 hci_remote_oob_data_clear(hdev);
1831 hci_dev_unlock(hdev);
1832
1833 hci_dev_put(hdev);
1834}
1835EXPORT_SYMBOL(hci_unregister_dev);
1836
1837/* Suspend HCI device */
1838int hci_suspend_dev(struct hci_dev *hdev)
1839{
1840 hci_notify(hdev, HCI_DEV_SUSPEND);
1841 return 0;
1842}
1843EXPORT_SYMBOL(hci_suspend_dev);
1844
1845/* Resume HCI device */
1846int hci_resume_dev(struct hci_dev *hdev)
1847{
1848 hci_notify(hdev, HCI_DEV_RESUME);
1849 return 0;
1850}
1851EXPORT_SYMBOL(hci_resume_dev);
1852
1853/* Receive frame from HCI drivers */
1854int hci_recv_frame(struct sk_buff *skb)
1855{
1856 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
1857 if (!hdev || (!test_bit(HCI_UP, &hdev->flags)
1858 && !test_bit(HCI_INIT, &hdev->flags))) {
1859 kfree_skb(skb);
1860 return -ENXIO;
1861 }
1862
1863 /* Incomming skb */
1864 bt_cb(skb)->incoming = 1;
1865
1866 /* Time stamp */
1867 __net_timestamp(skb);
1868
1869 skb_queue_tail(&hdev->rx_q, skb);
1870 queue_work(hdev->workqueue, &hdev->rx_work);
1871
1872 return 0;
1873}
1874EXPORT_SYMBOL(hci_recv_frame);
1875
1876static int hci_reassembly(struct hci_dev *hdev, int type, void *data,
1877 int count, __u8 index)
1878{
1879 int len = 0;
1880 int hlen = 0;
1881 int remain = count;
1882 struct sk_buff *skb;
1883 struct bt_skb_cb *scb;
1884
1885 if ((type < HCI_ACLDATA_PKT || type > HCI_EVENT_PKT) ||
1886 index >= NUM_REASSEMBLY)
1887 return -EILSEQ;
1888
1889 skb = hdev->reassembly[index];
1890
1891 if (!skb) {
1892 switch (type) {
1893 case HCI_ACLDATA_PKT:
1894 len = HCI_MAX_FRAME_SIZE;
1895 hlen = HCI_ACL_HDR_SIZE;
1896 break;
1897 case HCI_EVENT_PKT:
1898 len = HCI_MAX_EVENT_SIZE;
1899 hlen = HCI_EVENT_HDR_SIZE;
1900 break;
1901 case HCI_SCODATA_PKT:
1902 len = HCI_MAX_SCO_SIZE;
1903 hlen = HCI_SCO_HDR_SIZE;
1904 break;
1905 }
1906
1907 skb = bt_skb_alloc(len, GFP_ATOMIC);
1908 if (!skb)
1909 return -ENOMEM;
1910
1911 scb = (void *) skb->cb;
1912 scb->expect = hlen;
1913 scb->pkt_type = type;
1914
1915 skb->dev = (void *) hdev;
1916 hdev->reassembly[index] = skb;
1917 }
1918
1919 while (count) {
1920 scb = (void *) skb->cb;
1921 len = min_t(uint, scb->expect, count);
1922
1923 memcpy(skb_put(skb, len), data, len);
1924
1925 count -= len;
1926 data += len;
1927 scb->expect -= len;
1928 remain = count;
1929
1930 switch (type) {
1931 case HCI_EVENT_PKT:
1932 if (skb->len == HCI_EVENT_HDR_SIZE) {
1933 struct hci_event_hdr *h = hci_event_hdr(skb);
1934 scb->expect = h->plen;
1935
1936 if (skb_tailroom(skb) < scb->expect) {
1937 kfree_skb(skb);
1938 hdev->reassembly[index] = NULL;
1939 return -ENOMEM;
1940 }
1941 }
1942 break;
1943
1944 case HCI_ACLDATA_PKT:
1945 if (skb->len == HCI_ACL_HDR_SIZE) {
1946 struct hci_acl_hdr *h = hci_acl_hdr(skb);
1947 scb->expect = __le16_to_cpu(h->dlen);
1948
1949 if (skb_tailroom(skb) < scb->expect) {
1950 kfree_skb(skb);
1951 hdev->reassembly[index] = NULL;
1952 return -ENOMEM;
1953 }
1954 }
1955 break;
1956
1957 case HCI_SCODATA_PKT:
1958 if (skb->len == HCI_SCO_HDR_SIZE) {
1959 struct hci_sco_hdr *h = hci_sco_hdr(skb);
1960 scb->expect = h->dlen;
1961
1962 if (skb_tailroom(skb) < scb->expect) {
1963 kfree_skb(skb);
1964 hdev->reassembly[index] = NULL;
1965 return -ENOMEM;
1966 }
1967 }
1968 break;
1969 }
1970
1971 if (scb->expect == 0) {
1972 /* Complete frame */
1973
1974 bt_cb(skb)->pkt_type = type;
1975 hci_recv_frame(skb);
1976
1977 hdev->reassembly[index] = NULL;
1978 return remain;
1979 }
1980 }
1981
1982 return remain;
1983}
1984
1985int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count)
1986{
1987 int rem = 0;
1988
1989 if (type < HCI_ACLDATA_PKT || type > HCI_EVENT_PKT)
1990 return -EILSEQ;
1991
1992 while (count) {
1993 rem = hci_reassembly(hdev, type, data, count, type - 1);
1994 if (rem < 0)
1995 return rem;
1996
1997 data += (count - rem);
1998 count = rem;
1999 }
2000
2001 return rem;
2002}
2003EXPORT_SYMBOL(hci_recv_fragment);
2004
2005#define STREAM_REASSEMBLY 0
2006
2007int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int count)
2008{
2009 int type;
2010 int rem = 0;
2011
2012 while (count) {
2013 struct sk_buff *skb = hdev->reassembly[STREAM_REASSEMBLY];
2014
2015 if (!skb) {
2016 struct { char type; } *pkt;
2017
2018 /* Start of the frame */
2019 pkt = data;
2020 type = pkt->type;
2021
2022 data++;
2023 count--;
2024 } else
2025 type = bt_cb(skb)->pkt_type;
2026
2027 rem = hci_reassembly(hdev, type, data, count,
2028 STREAM_REASSEMBLY);
2029 if (rem < 0)
2030 return rem;
2031
2032 data += (count - rem);
2033 count = rem;
2034 }
2035
2036 return rem;
2037}
2038EXPORT_SYMBOL(hci_recv_stream_fragment);
2039
2040/* ---- Interface to upper protocols ---- */
2041
2042int hci_register_cb(struct hci_cb *cb)
2043{
2044 BT_DBG("%p name %s", cb, cb->name);
2045
2046 write_lock(&hci_cb_list_lock);
2047 list_add(&cb->list, &hci_cb_list);
2048 write_unlock(&hci_cb_list_lock);
2049
2050 return 0;
2051}
2052EXPORT_SYMBOL(hci_register_cb);
2053
2054int hci_unregister_cb(struct hci_cb *cb)
2055{
2056 BT_DBG("%p name %s", cb, cb->name);
2057
2058 write_lock(&hci_cb_list_lock);
2059 list_del(&cb->list);
2060 write_unlock(&hci_cb_list_lock);
2061
2062 return 0;
2063}
2064EXPORT_SYMBOL(hci_unregister_cb);
2065
2066static int hci_send_frame(struct sk_buff *skb)
2067{
2068 struct hci_dev *hdev = (struct hci_dev *) skb->dev;
2069
2070 if (!hdev) {
2071 kfree_skb(skb);
2072 return -ENODEV;
2073 }
2074
2075 BT_DBG("%s type %d len %d", hdev->name, bt_cb(skb)->pkt_type, skb->len);
2076
2077 /* Time stamp */
2078 __net_timestamp(skb);
2079
2080 /* Send copy to monitor */
2081 hci_send_to_monitor(hdev, skb);
2082
2083 if (atomic_read(&hdev->promisc)) {
2084 /* Send copy to the sockets */
2085 hci_send_to_sock(hdev, skb);
2086 }
2087
2088 /* Get rid of skb owner, prior to sending to the driver. */
2089 skb_orphan(skb);
2090
2091 return hdev->send(skb);
2092}
2093
2094/* Send HCI command */
2095int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, void *param)
2096{
2097 int len = HCI_COMMAND_HDR_SIZE + plen;
2098 struct hci_command_hdr *hdr;
2099 struct sk_buff *skb;
2100
2101 BT_DBG("%s opcode 0x%x plen %d", hdev->name, opcode, plen);
2102
2103 skb = bt_skb_alloc(len, GFP_ATOMIC);
2104 if (!skb) {
2105 BT_ERR("%s no memory for command", hdev->name);
2106 return -ENOMEM;
2107 }
2108
2109 hdr = (struct hci_command_hdr *) skb_put(skb, HCI_COMMAND_HDR_SIZE);
2110 hdr->opcode = cpu_to_le16(opcode);
2111 hdr->plen = plen;
2112
2113 if (plen)
2114 memcpy(skb_put(skb, plen), param, plen);
2115
2116 BT_DBG("skb len %d", skb->len);
2117
2118 bt_cb(skb)->pkt_type = HCI_COMMAND_PKT;
2119 skb->dev = (void *) hdev;
2120
2121 if (test_bit(HCI_INIT, &hdev->flags))
2122 hdev->init_last_cmd = opcode;
2123
2124 skb_queue_tail(&hdev->cmd_q, skb);
2125 queue_work(hdev->workqueue, &hdev->cmd_work);
2126
2127 return 0;
2128}
2129
2130/* Get data from the previously sent command */
2131void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode)
2132{
2133 struct hci_command_hdr *hdr;
2134
2135 if (!hdev->sent_cmd)
2136 return NULL;
2137
2138 hdr = (void *) hdev->sent_cmd->data;
2139
2140 if (hdr->opcode != cpu_to_le16(opcode))
2141 return NULL;
2142
2143 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
2144
2145 return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE;
2146}
2147
2148/* Send ACL data */
2149static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
2150{
2151 struct hci_acl_hdr *hdr;
2152 int len = skb->len;
2153
2154 skb_push(skb, HCI_ACL_HDR_SIZE);
2155 skb_reset_transport_header(skb);
2156 hdr = (struct hci_acl_hdr *)skb_transport_header(skb);
2157 hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags));
2158 hdr->dlen = cpu_to_le16(len);
2159}
2160
2161static void hci_queue_acl(struct hci_conn *conn, struct sk_buff_head *queue,
2162 struct sk_buff *skb, __u16 flags)
2163{
2164 struct hci_dev *hdev = conn->hdev;
2165 struct sk_buff *list;
2166
2167 skb->len = skb_headlen(skb);
2168 skb->data_len = 0;
2169
2170 bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT;
2171 hci_add_acl_hdr(skb, conn->handle, flags);
2172
2173 list = skb_shinfo(skb)->frag_list;
2174 if (!list) {
2175 /* Non fragmented */
2176 BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
2177
2178 skb_queue_tail(queue, skb);
2179 } else {
2180 /* Fragmented */
2181 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
2182
2183 skb_shinfo(skb)->frag_list = NULL;
2184
2185 /* Queue all fragments atomically */
2186 spin_lock(&queue->lock);
2187
2188 __skb_queue_tail(queue, skb);
2189
2190 flags &= ~ACL_START;
2191 flags |= ACL_CONT;
2192 do {
2193 skb = list; list = list->next;
2194
2195 skb->dev = (void *) hdev;
2196 bt_cb(skb)->pkt_type = HCI_ACLDATA_PKT;
2197 hci_add_acl_hdr(skb, conn->handle, flags);
2198
2199 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
2200
2201 __skb_queue_tail(queue, skb);
2202 } while (list);
2203
2204 spin_unlock(&queue->lock);
2205 }
2206}
2207
2208void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags)
2209{
2210 struct hci_conn *conn = chan->conn;
2211 struct hci_dev *hdev = conn->hdev;
2212
2213 BT_DBG("%s chan %p flags 0x%x", hdev->name, chan, flags);
2214
2215 skb->dev = (void *) hdev;
2216
2217 hci_queue_acl(conn, &chan->data_q, skb, flags);
2218
2219 queue_work(hdev->workqueue, &hdev->tx_work);
2220}
2221EXPORT_SYMBOL(hci_send_acl);
2222
2223/* Send SCO data */
2224void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb)
2225{
2226 struct hci_dev *hdev = conn->hdev;
2227 struct hci_sco_hdr hdr;
2228
2229 BT_DBG("%s len %d", hdev->name, skb->len);
2230
2231 hdr.handle = cpu_to_le16(conn->handle);
2232 hdr.dlen = skb->len;
2233
2234 skb_push(skb, HCI_SCO_HDR_SIZE);
2235 skb_reset_transport_header(skb);
2236 memcpy(skb_transport_header(skb), &hdr, HCI_SCO_HDR_SIZE);
2237
2238 skb->dev = (void *) hdev;
2239 bt_cb(skb)->pkt_type = HCI_SCODATA_PKT;
2240
2241 skb_queue_tail(&conn->data_q, skb);
2242 queue_work(hdev->workqueue, &hdev->tx_work);
2243}
2244EXPORT_SYMBOL(hci_send_sco);
2245
2246/* ---- HCI TX task (outgoing data) ---- */
2247
2248/* HCI Connection scheduler */
2249static inline struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, int *quote)
2250{
2251 struct hci_conn_hash *h = &hdev->conn_hash;
2252 struct hci_conn *conn = NULL, *c;
2253 unsigned int num = 0, min = ~0;
2254
2255 /* We don't have to lock device here. Connections are always
2256 * added and removed with TX task disabled. */
2257
2258 rcu_read_lock();
2259
2260 list_for_each_entry_rcu(c, &h->list, list) {
2261 if (c->type != type || skb_queue_empty(&c->data_q))
2262 continue;
2263
2264 if (c->state != BT_CONNECTED && c->state != BT_CONFIG)
2265 continue;
2266
2267 num++;
2268
2269 if (c->sent < min) {
2270 min = c->sent;
2271 conn = c;
2272 }
2273
2274 if (hci_conn_num(hdev, type) == num)
2275 break;
2276 }
2277
2278 rcu_read_unlock();
2279
2280 if (conn) {
2281 int cnt, q;
2282
2283 switch (conn->type) {
2284 case ACL_LINK:
2285 cnt = hdev->acl_cnt;
2286 break;
2287 case SCO_LINK:
2288 case ESCO_LINK:
2289 cnt = hdev->sco_cnt;
2290 break;
2291 case LE_LINK:
2292 cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
2293 break;
2294 default:
2295 cnt = 0;
2296 BT_ERR("Unknown link type");
2297 }
2298
2299 q = cnt / num;
2300 *quote = q ? q : 1;
2301 } else
2302 *quote = 0;
2303
2304 BT_DBG("conn %p quote %d", conn, *quote);
2305 return conn;
2306}
2307
2308static inline void hci_link_tx_to(struct hci_dev *hdev, __u8 type)
2309{
2310 struct hci_conn_hash *h = &hdev->conn_hash;
2311 struct hci_conn *c;
2312
2313 BT_ERR("%s link tx timeout", hdev->name);
2314
2315 rcu_read_lock();
2316
2317 /* Kill stalled connections */
2318 list_for_each_entry_rcu(c, &h->list, list) {
2319 if (c->type == type && c->sent) {
2320 BT_ERR("%s killing stalled connection %s",
2321 hdev->name, batostr(&c->dst));
2322 hci_acl_disconn(c, 0x13);
2323 }
2324 }
2325
2326 rcu_read_unlock();
2327}
2328
2329static inline struct hci_chan *hci_chan_sent(struct hci_dev *hdev, __u8 type,
2330 int *quote)
2331{
2332 struct hci_conn_hash *h = &hdev->conn_hash;
2333 struct hci_chan *chan = NULL;
2334 unsigned int num = 0, min = ~0, cur_prio = 0;
2335 struct hci_conn *conn;
2336 int cnt, q, conn_num = 0;
2337
2338 BT_DBG("%s", hdev->name);
2339
2340 rcu_read_lock();
2341
2342 list_for_each_entry_rcu(conn, &h->list, list) {
2343 struct hci_chan *tmp;
2344
2345 if (conn->type != type)
2346 continue;
2347
2348 if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
2349 continue;
2350
2351 conn_num++;
2352
2353 list_for_each_entry_rcu(tmp, &conn->chan_list, list) {
2354 struct sk_buff *skb;
2355
2356 if (skb_queue_empty(&tmp->data_q))
2357 continue;
2358
2359 skb = skb_peek(&tmp->data_q);
2360 if (skb->priority < cur_prio)
2361 continue;
2362
2363 if (skb->priority > cur_prio) {
2364 num = 0;
2365 min = ~0;
2366 cur_prio = skb->priority;
2367 }
2368
2369 num++;
2370
2371 if (conn->sent < min) {
2372 min = conn->sent;
2373 chan = tmp;
2374 }
2375 }
2376
2377 if (hci_conn_num(hdev, type) == conn_num)
2378 break;
2379 }
2380
2381 rcu_read_unlock();
2382
2383 if (!chan)
2384 return NULL;
2385
2386 switch (chan->conn->type) {
2387 case ACL_LINK:
2388 cnt = hdev->acl_cnt;
2389 break;
2390 case SCO_LINK:
2391 case ESCO_LINK:
2392 cnt = hdev->sco_cnt;
2393 break;
2394 case LE_LINK:
2395 cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
2396 break;
2397 default:
2398 cnt = 0;
2399 BT_ERR("Unknown link type");
2400 }
2401
2402 q = cnt / num;
2403 *quote = q ? q : 1;
2404 BT_DBG("chan %p quote %d", chan, *quote);
2405 return chan;
2406}
2407
2408static void hci_prio_recalculate(struct hci_dev *hdev, __u8 type)
2409{
2410 struct hci_conn_hash *h = &hdev->conn_hash;
2411 struct hci_conn *conn;
2412 int num = 0;
2413
2414 BT_DBG("%s", hdev->name);
2415
2416 rcu_read_lock();
2417
2418 list_for_each_entry_rcu(conn, &h->list, list) {
2419 struct hci_chan *chan;
2420
2421 if (conn->type != type)
2422 continue;
2423
2424 if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
2425 continue;
2426
2427 num++;
2428
2429 list_for_each_entry_rcu(chan, &conn->chan_list, list) {
2430 struct sk_buff *skb;
2431
2432 if (chan->sent) {
2433 chan->sent = 0;
2434 continue;
2435 }
2436
2437 if (skb_queue_empty(&chan->data_q))
2438 continue;
2439
2440 skb = skb_peek(&chan->data_q);
2441 if (skb->priority >= HCI_PRIO_MAX - 1)
2442 continue;
2443
2444 skb->priority = HCI_PRIO_MAX - 1;
2445
2446 BT_DBG("chan %p skb %p promoted to %d", chan, skb,
2447 skb->priority);
2448 }
2449
2450 if (hci_conn_num(hdev, type) == num)
2451 break;
2452 }
2453
2454 rcu_read_unlock();
2455
2456}
2457
2458static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb)
2459{
2460 /* Calculate count of blocks used by this packet */
2461 return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len);
2462}
2463
2464static inline void __check_timeout(struct hci_dev *hdev, unsigned int cnt)
2465{
2466 if (!test_bit(HCI_RAW, &hdev->flags)) {
2467 /* ACL tx timeout must be longer than maximum
2468 * link supervision timeout (40.9 seconds) */
2469 if (!cnt && time_after(jiffies, hdev->acl_last_tx +
2470 msecs_to_jiffies(HCI_ACL_TX_TIMEOUT)))
2471 hci_link_tx_to(hdev, ACL_LINK);
2472 }
2473}
2474
2475static inline void hci_sched_acl_pkt(struct hci_dev *hdev)
2476{
2477 unsigned int cnt = hdev->acl_cnt;
2478 struct hci_chan *chan;
2479 struct sk_buff *skb;
2480 int quote;
2481
2482 __check_timeout(hdev, cnt);
2483
2484 while (hdev->acl_cnt &&
2485 (chan = hci_chan_sent(hdev, ACL_LINK, "e))) {
2486 u32 priority = (skb_peek(&chan->data_q))->priority;
2487 while (quote-- && (skb = skb_peek(&chan->data_q))) {
2488 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
2489 skb->len, skb->priority);
2490
2491 /* Stop if priority has changed */
2492 if (skb->priority < priority)
2493 break;
2494
2495 skb = skb_dequeue(&chan->data_q);
2496
2497 hci_conn_enter_active_mode(chan->conn,
2498 bt_cb(skb)->force_active);
2499
2500 hci_send_frame(skb);
2501 hdev->acl_last_tx = jiffies;
2502
2503 hdev->acl_cnt--;
2504 chan->sent++;
2505 chan->conn->sent++;
2506 }
2507 }
2508
2509 if (cnt != hdev->acl_cnt)
2510 hci_prio_recalculate(hdev, ACL_LINK);
2511}
2512
2513static inline void hci_sched_acl_blk(struct hci_dev *hdev)
2514{
2515 unsigned int cnt = hdev->block_cnt;
2516 struct hci_chan *chan;
2517 struct sk_buff *skb;
2518 int quote;
2519
2520 __check_timeout(hdev, cnt);
2521
2522 while (hdev->block_cnt > 0 &&
2523 (chan = hci_chan_sent(hdev, ACL_LINK, "e))) {
2524 u32 priority = (skb_peek(&chan->data_q))->priority;
2525 while (quote > 0 && (skb = skb_peek(&chan->data_q))) {
2526 int blocks;
2527
2528 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
2529 skb->len, skb->priority);
2530
2531 /* Stop if priority has changed */
2532 if (skb->priority < priority)
2533 break;
2534
2535 skb = skb_dequeue(&chan->data_q);
2536
2537 blocks = __get_blocks(hdev, skb);
2538 if (blocks > hdev->block_cnt)
2539 return;
2540
2541 hci_conn_enter_active_mode(chan->conn,
2542 bt_cb(skb)->force_active);
2543
2544 hci_send_frame(skb);
2545 hdev->acl_last_tx = jiffies;
2546
2547 hdev->block_cnt -= blocks;
2548 quote -= blocks;
2549
2550 chan->sent += blocks;
2551 chan->conn->sent += blocks;
2552 }
2553 }
2554
2555 if (cnt != hdev->block_cnt)
2556 hci_prio_recalculate(hdev, ACL_LINK);
2557}
2558
2559static inline void hci_sched_acl(struct hci_dev *hdev)
2560{
2561 BT_DBG("%s", hdev->name);
2562
2563 if (!hci_conn_num(hdev, ACL_LINK))
2564 return;
2565
2566 switch (hdev->flow_ctl_mode) {
2567 case HCI_FLOW_CTL_MODE_PACKET_BASED:
2568 hci_sched_acl_pkt(hdev);
2569 break;
2570
2571 case HCI_FLOW_CTL_MODE_BLOCK_BASED:
2572 hci_sched_acl_blk(hdev);
2573 break;
2574 }
2575}
2576
2577/* Schedule SCO */
2578static inline void hci_sched_sco(struct hci_dev *hdev)
2579{
2580 struct hci_conn *conn;
2581 struct sk_buff *skb;
2582 int quote;
2583
2584 BT_DBG("%s", hdev->name);
2585
2586 if (!hci_conn_num(hdev, SCO_LINK))
2587 return;
2588
2589 while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, "e))) {
2590 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
2591 BT_DBG("skb %p len %d", skb, skb->len);
2592 hci_send_frame(skb);
2593
2594 conn->sent++;
2595 if (conn->sent == ~0)
2596 conn->sent = 0;
2597 }
2598 }
2599}
2600
2601static inline void hci_sched_esco(struct hci_dev *hdev)
2602{
2603 struct hci_conn *conn;
2604 struct sk_buff *skb;
2605 int quote;
2606
2607 BT_DBG("%s", hdev->name);
2608
2609 if (!hci_conn_num(hdev, ESCO_LINK))
2610 return;
2611
2612 while (hdev->sco_cnt && (conn = hci_low_sent(hdev, ESCO_LINK, "e))) {
2613 while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
2614 BT_DBG("skb %p len %d", skb, skb->len);
2615 hci_send_frame(skb);
2616
2617 conn->sent++;
2618 if (conn->sent == ~0)
2619 conn->sent = 0;
2620 }
2621 }
2622}
2623
2624static inline void hci_sched_le(struct hci_dev *hdev)
2625{
2626 struct hci_chan *chan;
2627 struct sk_buff *skb;
2628 int quote, cnt, tmp;
2629
2630 BT_DBG("%s", hdev->name);
2631
2632 if (!hci_conn_num(hdev, LE_LINK))
2633 return;
2634
2635 if (!test_bit(HCI_RAW, &hdev->flags)) {
2636 /* LE tx timeout must be longer than maximum
2637 * link supervision timeout (40.9 seconds) */
2638 if (!hdev->le_cnt && hdev->le_pkts &&
2639 time_after(jiffies, hdev->le_last_tx + HZ * 45))
2640 hci_link_tx_to(hdev, LE_LINK);
2641 }
2642
2643 cnt = hdev->le_pkts ? hdev->le_cnt : hdev->acl_cnt;
2644 tmp = cnt;
2645 while (cnt && (chan = hci_chan_sent(hdev, LE_LINK, "e))) {
2646 u32 priority = (skb_peek(&chan->data_q))->priority;
2647 while (quote-- && (skb = skb_peek(&chan->data_q))) {
2648 BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
2649 skb->len, skb->priority);
2650
2651 /* Stop if priority has changed */
2652 if (skb->priority < priority)
2653 break;
2654
2655 skb = skb_dequeue(&chan->data_q);
2656
2657 hci_send_frame(skb);
2658 hdev->le_last_tx = jiffies;
2659
2660 cnt--;
2661 chan->sent++;
2662 chan->conn->sent++;
2663 }
2664 }
2665
2666 if (hdev->le_pkts)
2667 hdev->le_cnt = cnt;
2668 else
2669 hdev->acl_cnt = cnt;
2670
2671 if (cnt != tmp)
2672 hci_prio_recalculate(hdev, LE_LINK);
2673}
2674
2675static void hci_tx_work(struct work_struct *work)
2676{
2677 struct hci_dev *hdev = container_of(work, struct hci_dev, tx_work);
2678 struct sk_buff *skb;
2679
2680 BT_DBG("%s acl %d sco %d le %d", hdev->name, hdev->acl_cnt,
2681 hdev->sco_cnt, hdev->le_cnt);
2682
2683 /* Schedule queues and send stuff to HCI driver */
2684
2685 hci_sched_acl(hdev);
2686
2687 hci_sched_sco(hdev);
2688
2689 hci_sched_esco(hdev);
2690
2691 hci_sched_le(hdev);
2692
2693 /* Send next queued raw (unknown type) packet */
2694 while ((skb = skb_dequeue(&hdev->raw_q)))
2695 hci_send_frame(skb);
2696}
2697
2698/* ----- HCI RX task (incoming data processing) ----- */
2699
2700/* ACL data packet */
2701static inline void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
2702{
2703 struct hci_acl_hdr *hdr = (void *) skb->data;
2704 struct hci_conn *conn;
2705 __u16 handle, flags;
2706
2707 skb_pull(skb, HCI_ACL_HDR_SIZE);
2708
2709 handle = __le16_to_cpu(hdr->handle);
2710 flags = hci_flags(handle);
2711 handle = hci_handle(handle);
2712
2713 BT_DBG("%s len %d handle 0x%x flags 0x%x", hdev->name, skb->len, handle, flags);
2714
2715 hdev->stat.acl_rx++;
2716
2717 hci_dev_lock(hdev);
2718 conn = hci_conn_hash_lookup_handle(hdev, handle);
2719 hci_dev_unlock(hdev);
2720
2721 if (conn) {
2722 hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF);
2723
2724 hci_dev_lock(hdev);
2725 if (test_bit(HCI_MGMT, &hdev->dev_flags) &&
2726 !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2727 mgmt_device_connected(hdev, &conn->dst, conn->type,
2728 conn->dst_type, 0, NULL, 0,
2729 conn->dev_class);
2730 hci_dev_unlock(hdev);
2731
2732 /* Send to upper protocol */
2733 l2cap_recv_acldata(conn, skb, flags);
2734 return;
2735 } else {
2736 BT_ERR("%s ACL packet for unknown connection handle %d",
2737 hdev->name, handle);
2738 }
2739
2740 kfree_skb(skb);
2741}
2742
2743/* SCO data packet */
2744static inline void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
2745{
2746 struct hci_sco_hdr *hdr = (void *) skb->data;
2747 struct hci_conn *conn;
2748 __u16 handle;
2749
2750 skb_pull(skb, HCI_SCO_HDR_SIZE);
2751
2752 handle = __le16_to_cpu(hdr->handle);
2753
2754 BT_DBG("%s len %d handle 0x%x", hdev->name, skb->len, handle);
2755
2756 hdev->stat.sco_rx++;
2757
2758 hci_dev_lock(hdev);
2759 conn = hci_conn_hash_lookup_handle(hdev, handle);
2760 hci_dev_unlock(hdev);
2761
2762 if (conn) {
2763 /* Send to upper protocol */
2764 sco_recv_scodata(conn, skb);
2765 return;
2766 } else {
2767 BT_ERR("%s SCO packet for unknown connection handle %d",
2768 hdev->name, handle);
2769 }
2770
2771 kfree_skb(skb);
2772}
2773
2774static void hci_rx_work(struct work_struct *work)
2775{
2776 struct hci_dev *hdev = container_of(work, struct hci_dev, rx_work);
2777 struct sk_buff *skb;
2778
2779 BT_DBG("%s", hdev->name);
2780
2781 while ((skb = skb_dequeue(&hdev->rx_q))) {
2782 /* Send copy to monitor */
2783 hci_send_to_monitor(hdev, skb);
2784
2785 if (atomic_read(&hdev->promisc)) {
2786 /* Send copy to the sockets */
2787 hci_send_to_sock(hdev, skb);
2788 }
2789
2790 if (test_bit(HCI_RAW, &hdev->flags)) {
2791 kfree_skb(skb);
2792 continue;
2793 }
2794
2795 if (test_bit(HCI_INIT, &hdev->flags)) {
2796 /* Don't process data packets in this states. */
2797 switch (bt_cb(skb)->pkt_type) {
2798 case HCI_ACLDATA_PKT:
2799 case HCI_SCODATA_PKT:
2800 kfree_skb(skb);
2801 continue;
2802 }
2803 }
2804
2805 /* Process frame */
2806 switch (bt_cb(skb)->pkt_type) {
2807 case HCI_EVENT_PKT:
2808 BT_DBG("%s Event packet", hdev->name);
2809 hci_event_packet(hdev, skb);
2810 break;
2811
2812 case HCI_ACLDATA_PKT:
2813 BT_DBG("%s ACL data packet", hdev->name);
2814 hci_acldata_packet(hdev, skb);
2815 break;
2816
2817 case HCI_SCODATA_PKT:
2818 BT_DBG("%s SCO data packet", hdev->name);
2819 hci_scodata_packet(hdev, skb);
2820 break;
2821
2822 default:
2823 kfree_skb(skb);
2824 break;
2825 }
2826 }
2827}
2828
2829static void hci_cmd_work(struct work_struct *work)
2830{
2831 struct hci_dev *hdev = container_of(work, struct hci_dev, cmd_work);
2832 struct sk_buff *skb;
2833
2834 BT_DBG("%s cmd %d", hdev->name, atomic_read(&hdev->cmd_cnt));
2835
2836 /* Send queued commands */
2837 if (atomic_read(&hdev->cmd_cnt)) {
2838 skb = skb_dequeue(&hdev->cmd_q);
2839 if (!skb)
2840 return;
2841
2842 kfree_skb(hdev->sent_cmd);
2843
2844 hdev->sent_cmd = skb_clone(skb, GFP_ATOMIC);
2845 if (hdev->sent_cmd) {
2846 atomic_dec(&hdev->cmd_cnt);
2847 hci_send_frame(skb);
2848 if (test_bit(HCI_RESET, &hdev->flags))
2849 del_timer(&hdev->cmd_timer);
2850 else
2851 mod_timer(&hdev->cmd_timer,
2852 jiffies + msecs_to_jiffies(HCI_CMD_TIMEOUT));
2853 } else {
2854 skb_queue_head(&hdev->cmd_q, skb);
2855 queue_work(hdev->workqueue, &hdev->cmd_work);
2856 }
2857 }
2858}
2859
2860int hci_do_inquiry(struct hci_dev *hdev, u8 length)
2861{
2862 /* General inquiry access code (GIAC) */
2863 u8 lap[3] = { 0x33, 0x8b, 0x9e };
2864 struct hci_cp_inquiry cp;
2865
2866 BT_DBG("%s", hdev->name);
2867
2868 if (test_bit(HCI_INQUIRY, &hdev->flags))
2869 return -EINPROGRESS;
2870
2871 inquiry_cache_flush(hdev);
2872
2873 memset(&cp, 0, sizeof(cp));
2874 memcpy(&cp.lap, lap, sizeof(cp.lap));
2875 cp.length = length;
2876
2877 return hci_send_cmd(hdev, HCI_OP_INQUIRY, sizeof(cp), &cp);
2878}
2879
2880int hci_cancel_inquiry(struct hci_dev *hdev)
2881{
2882 BT_DBG("%s", hdev->name);
2883
2884 if (!test_bit(HCI_INQUIRY, &hdev->flags))
2885 return -EALREADY;
2886
2887 return hci_send_cmd(hdev, HCI_OP_INQUIRY_CANCEL, 0, NULL);
2888}
2889
2890u8 bdaddr_to_le(u8 bdaddr_type)
2891{
2892 switch (bdaddr_type) {
2893 case BDADDR_LE_PUBLIC:
2894 return ADDR_LE_DEV_PUBLIC;
2895
2896 default:
2897 /* Fallback to LE Random address type */
2898 return ADDR_LE_DEV_RANDOM;
2899 }
2900}