2 BlueZ - Bluetooth protocol stack for Linux
4 Copyright (C) 2010 Nokia Corporation
5 Copyright (C) 2011-2012 Intel Corporation
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
25 /* Bluetooth HCI Management interface */
27 #include <linux/module.h>
28 #include <asm/unaligned.h>
30 #include <net/bluetooth/bluetooth.h>
31 #include <net/bluetooth/hci_core.h>
32 #include <net/bluetooth/mgmt.h>
36 #define MGMT_VERSION 1
37 #define MGMT_REVISION 5
39 static const u16 mgmt_commands
[] = {
40 MGMT_OP_READ_INDEX_LIST
,
43 MGMT_OP_SET_DISCOVERABLE
,
44 MGMT_OP_SET_CONNECTABLE
,
45 MGMT_OP_SET_FAST_CONNECTABLE
,
47 MGMT_OP_SET_LINK_SECURITY
,
51 MGMT_OP_SET_DEV_CLASS
,
52 MGMT_OP_SET_LOCAL_NAME
,
55 MGMT_OP_LOAD_LINK_KEYS
,
56 MGMT_OP_LOAD_LONG_TERM_KEYS
,
58 MGMT_OP_GET_CONNECTIONS
,
59 MGMT_OP_PIN_CODE_REPLY
,
60 MGMT_OP_PIN_CODE_NEG_REPLY
,
61 MGMT_OP_SET_IO_CAPABILITY
,
63 MGMT_OP_CANCEL_PAIR_DEVICE
,
64 MGMT_OP_UNPAIR_DEVICE
,
65 MGMT_OP_USER_CONFIRM_REPLY
,
66 MGMT_OP_USER_CONFIRM_NEG_REPLY
,
67 MGMT_OP_USER_PASSKEY_REPLY
,
68 MGMT_OP_USER_PASSKEY_NEG_REPLY
,
69 MGMT_OP_READ_LOCAL_OOB_DATA
,
70 MGMT_OP_ADD_REMOTE_OOB_DATA
,
71 MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
72 MGMT_OP_START_DISCOVERY
,
73 MGMT_OP_STOP_DISCOVERY
,
76 MGMT_OP_UNBLOCK_DEVICE
,
77 MGMT_OP_SET_DEVICE_ID
,
78 MGMT_OP_SET_ADVERTISING
,
80 MGMT_OP_SET_STATIC_ADDRESS
,
81 MGMT_OP_SET_SCAN_PARAMS
,
82 MGMT_OP_SET_SECURE_CONN
,
83 MGMT_OP_SET_DEBUG_KEYS
,
87 static const u16 mgmt_events
[] = {
88 MGMT_EV_CONTROLLER_ERROR
,
90 MGMT_EV_INDEX_REMOVED
,
92 MGMT_EV_CLASS_OF_DEV_CHANGED
,
93 MGMT_EV_LOCAL_NAME_CHANGED
,
95 MGMT_EV_NEW_LONG_TERM_KEY
,
96 MGMT_EV_DEVICE_CONNECTED
,
97 MGMT_EV_DEVICE_DISCONNECTED
,
98 MGMT_EV_CONNECT_FAILED
,
99 MGMT_EV_PIN_CODE_REQUEST
,
100 MGMT_EV_USER_CONFIRM_REQUEST
,
101 MGMT_EV_USER_PASSKEY_REQUEST
,
103 MGMT_EV_DEVICE_FOUND
,
105 MGMT_EV_DEVICE_BLOCKED
,
106 MGMT_EV_DEVICE_UNBLOCKED
,
107 MGMT_EV_DEVICE_UNPAIRED
,
108 MGMT_EV_PASSKEY_NOTIFY
,
111 #define CACHE_TIMEOUT msecs_to_jiffies(2 * 1000)
113 #define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
114 !test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
117 struct list_head list
;
125 /* HCI to MGMT error code conversion table */
126 static u8 mgmt_status_table
[] = {
128 MGMT_STATUS_UNKNOWN_COMMAND
, /* Unknown Command */
129 MGMT_STATUS_NOT_CONNECTED
, /* No Connection */
130 MGMT_STATUS_FAILED
, /* Hardware Failure */
131 MGMT_STATUS_CONNECT_FAILED
, /* Page Timeout */
132 MGMT_STATUS_AUTH_FAILED
, /* Authentication Failed */
133 MGMT_STATUS_AUTH_FAILED
, /* PIN or Key Missing */
134 MGMT_STATUS_NO_RESOURCES
, /* Memory Full */
135 MGMT_STATUS_TIMEOUT
, /* Connection Timeout */
136 MGMT_STATUS_NO_RESOURCES
, /* Max Number of Connections */
137 MGMT_STATUS_NO_RESOURCES
, /* Max Number of SCO Connections */
138 MGMT_STATUS_ALREADY_CONNECTED
, /* ACL Connection Exists */
139 MGMT_STATUS_BUSY
, /* Command Disallowed */
140 MGMT_STATUS_NO_RESOURCES
, /* Rejected Limited Resources */
141 MGMT_STATUS_REJECTED
, /* Rejected Security */
142 MGMT_STATUS_REJECTED
, /* Rejected Personal */
143 MGMT_STATUS_TIMEOUT
, /* Host Timeout */
144 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported Feature */
145 MGMT_STATUS_INVALID_PARAMS
, /* Invalid Parameters */
146 MGMT_STATUS_DISCONNECTED
, /* OE User Ended Connection */
147 MGMT_STATUS_NO_RESOURCES
, /* OE Low Resources */
148 MGMT_STATUS_DISCONNECTED
, /* OE Power Off */
149 MGMT_STATUS_DISCONNECTED
, /* Connection Terminated */
150 MGMT_STATUS_BUSY
, /* Repeated Attempts */
151 MGMT_STATUS_REJECTED
, /* Pairing Not Allowed */
152 MGMT_STATUS_FAILED
, /* Unknown LMP PDU */
153 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported Remote Feature */
154 MGMT_STATUS_REJECTED
, /* SCO Offset Rejected */
155 MGMT_STATUS_REJECTED
, /* SCO Interval Rejected */
156 MGMT_STATUS_REJECTED
, /* Air Mode Rejected */
157 MGMT_STATUS_INVALID_PARAMS
, /* Invalid LMP Parameters */
158 MGMT_STATUS_FAILED
, /* Unspecified Error */
159 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported LMP Parameter Value */
160 MGMT_STATUS_FAILED
, /* Role Change Not Allowed */
161 MGMT_STATUS_TIMEOUT
, /* LMP Response Timeout */
162 MGMT_STATUS_FAILED
, /* LMP Error Transaction Collision */
163 MGMT_STATUS_FAILED
, /* LMP PDU Not Allowed */
164 MGMT_STATUS_REJECTED
, /* Encryption Mode Not Accepted */
165 MGMT_STATUS_FAILED
, /* Unit Link Key Used */
166 MGMT_STATUS_NOT_SUPPORTED
, /* QoS Not Supported */
167 MGMT_STATUS_TIMEOUT
, /* Instant Passed */
168 MGMT_STATUS_NOT_SUPPORTED
, /* Pairing Not Supported */
169 MGMT_STATUS_FAILED
, /* Transaction Collision */
170 MGMT_STATUS_INVALID_PARAMS
, /* Unacceptable Parameter */
171 MGMT_STATUS_REJECTED
, /* QoS Rejected */
172 MGMT_STATUS_NOT_SUPPORTED
, /* Classification Not Supported */
173 MGMT_STATUS_REJECTED
, /* Insufficient Security */
174 MGMT_STATUS_INVALID_PARAMS
, /* Parameter Out Of Range */
175 MGMT_STATUS_BUSY
, /* Role Switch Pending */
176 MGMT_STATUS_FAILED
, /* Slot Violation */
177 MGMT_STATUS_FAILED
, /* Role Switch Failed */
178 MGMT_STATUS_INVALID_PARAMS
, /* EIR Too Large */
179 MGMT_STATUS_NOT_SUPPORTED
, /* Simple Pairing Not Supported */
180 MGMT_STATUS_BUSY
, /* Host Busy Pairing */
181 MGMT_STATUS_REJECTED
, /* Rejected, No Suitable Channel */
182 MGMT_STATUS_BUSY
, /* Controller Busy */
183 MGMT_STATUS_INVALID_PARAMS
, /* Unsuitable Connection Interval */
184 MGMT_STATUS_TIMEOUT
, /* Directed Advertising Timeout */
185 MGMT_STATUS_AUTH_FAILED
, /* Terminated Due to MIC Failure */
186 MGMT_STATUS_CONNECT_FAILED
, /* Connection Establishment Failed */
187 MGMT_STATUS_CONNECT_FAILED
, /* MAC Connection Failed */
190 static u8
mgmt_status(u8 hci_status
)
192 if (hci_status
< ARRAY_SIZE(mgmt_status_table
))
193 return mgmt_status_table
[hci_status
];
195 return MGMT_STATUS_FAILED
;
198 static int cmd_status(struct sock
*sk
, u16 index
, u16 cmd
, u8 status
)
201 struct mgmt_hdr
*hdr
;
202 struct mgmt_ev_cmd_status
*ev
;
205 BT_DBG("sock %p, index %u, cmd %u, status %u", sk
, index
, cmd
, status
);
207 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
), GFP_KERNEL
);
211 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
213 hdr
->opcode
= __constant_cpu_to_le16(MGMT_EV_CMD_STATUS
);
214 hdr
->index
= cpu_to_le16(index
);
215 hdr
->len
= cpu_to_le16(sizeof(*ev
));
217 ev
= (void *) skb_put(skb
, sizeof(*ev
));
219 ev
->opcode
= cpu_to_le16(cmd
);
221 err
= sock_queue_rcv_skb(sk
, skb
);
228 static int cmd_complete(struct sock
*sk
, u16 index
, u16 cmd
, u8 status
,
229 void *rp
, size_t rp_len
)
232 struct mgmt_hdr
*hdr
;
233 struct mgmt_ev_cmd_complete
*ev
;
236 BT_DBG("sock %p", sk
);
238 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
) + rp_len
, GFP_KERNEL
);
242 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
244 hdr
->opcode
= __constant_cpu_to_le16(MGMT_EV_CMD_COMPLETE
);
245 hdr
->index
= cpu_to_le16(index
);
246 hdr
->len
= cpu_to_le16(sizeof(*ev
) + rp_len
);
248 ev
= (void *) skb_put(skb
, sizeof(*ev
) + rp_len
);
249 ev
->opcode
= cpu_to_le16(cmd
);
253 memcpy(ev
->data
, rp
, rp_len
);
255 err
= sock_queue_rcv_skb(sk
, skb
);
262 static int read_version(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
265 struct mgmt_rp_read_version rp
;
267 BT_DBG("sock %p", sk
);
269 rp
.version
= MGMT_VERSION
;
270 rp
.revision
= __constant_cpu_to_le16(MGMT_REVISION
);
272 return cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_VERSION
, 0, &rp
,
276 static int read_commands(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
279 struct mgmt_rp_read_commands
*rp
;
280 const u16 num_commands
= ARRAY_SIZE(mgmt_commands
);
281 const u16 num_events
= ARRAY_SIZE(mgmt_events
);
286 BT_DBG("sock %p", sk
);
288 rp_size
= sizeof(*rp
) + ((num_commands
+ num_events
) * sizeof(u16
));
290 rp
= kmalloc(rp_size
, GFP_KERNEL
);
294 rp
->num_commands
= __constant_cpu_to_le16(num_commands
);
295 rp
->num_events
= __constant_cpu_to_le16(num_events
);
297 for (i
= 0, opcode
= rp
->opcodes
; i
< num_commands
; i
++, opcode
++)
298 put_unaligned_le16(mgmt_commands
[i
], opcode
);
300 for (i
= 0; i
< num_events
; i
++, opcode
++)
301 put_unaligned_le16(mgmt_events
[i
], opcode
);
303 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_COMMANDS
, 0, rp
,
310 static int read_index_list(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
313 struct mgmt_rp_read_index_list
*rp
;
319 BT_DBG("sock %p", sk
);
321 read_lock(&hci_dev_list_lock
);
324 list_for_each_entry(d
, &hci_dev_list
, list
) {
325 if (d
->dev_type
== HCI_BREDR
)
329 rp_len
= sizeof(*rp
) + (2 * count
);
330 rp
= kmalloc(rp_len
, GFP_ATOMIC
);
332 read_unlock(&hci_dev_list_lock
);
337 list_for_each_entry(d
, &hci_dev_list
, list
) {
338 if (test_bit(HCI_SETUP
, &d
->dev_flags
))
341 if (test_bit(HCI_USER_CHANNEL
, &d
->dev_flags
))
344 if (d
->dev_type
== HCI_BREDR
) {
345 rp
->index
[count
++] = cpu_to_le16(d
->id
);
346 BT_DBG("Added hci%u", d
->id
);
350 rp
->num_controllers
= cpu_to_le16(count
);
351 rp_len
= sizeof(*rp
) + (2 * count
);
353 read_unlock(&hci_dev_list_lock
);
355 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_INDEX_LIST
, 0, rp
,
363 static u32
get_supported_settings(struct hci_dev
*hdev
)
367 settings
|= MGMT_SETTING_POWERED
;
368 settings
|= MGMT_SETTING_PAIRABLE
;
369 settings
|= MGMT_SETTING_DEBUG_KEYS
;
371 if (lmp_bredr_capable(hdev
)) {
372 settings
|= MGMT_SETTING_CONNECTABLE
;
373 if (hdev
->hci_ver
>= BLUETOOTH_VER_1_2
)
374 settings
|= MGMT_SETTING_FAST_CONNECTABLE
;
375 settings
|= MGMT_SETTING_DISCOVERABLE
;
376 settings
|= MGMT_SETTING_BREDR
;
377 settings
|= MGMT_SETTING_LINK_SECURITY
;
379 if (lmp_ssp_capable(hdev
)) {
380 settings
|= MGMT_SETTING_SSP
;
381 settings
|= MGMT_SETTING_HS
;
384 if (lmp_sc_capable(hdev
) ||
385 test_bit(HCI_FORCE_SC
, &hdev
->dev_flags
))
386 settings
|= MGMT_SETTING_SECURE_CONN
;
389 if (lmp_le_capable(hdev
)) {
390 settings
|= MGMT_SETTING_LE
;
391 settings
|= MGMT_SETTING_ADVERTISING
;
397 static u32
get_current_settings(struct hci_dev
*hdev
)
401 if (hdev_is_powered(hdev
))
402 settings
|= MGMT_SETTING_POWERED
;
404 if (test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
405 settings
|= MGMT_SETTING_CONNECTABLE
;
407 if (test_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
))
408 settings
|= MGMT_SETTING_FAST_CONNECTABLE
;
410 if (test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
411 settings
|= MGMT_SETTING_DISCOVERABLE
;
413 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
414 settings
|= MGMT_SETTING_PAIRABLE
;
416 if (test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
417 settings
|= MGMT_SETTING_BREDR
;
419 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
420 settings
|= MGMT_SETTING_LE
;
422 if (test_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
))
423 settings
|= MGMT_SETTING_LINK_SECURITY
;
425 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
426 settings
|= MGMT_SETTING_SSP
;
428 if (test_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
))
429 settings
|= MGMT_SETTING_HS
;
431 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
432 settings
|= MGMT_SETTING_ADVERTISING
;
434 if (test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
))
435 settings
|= MGMT_SETTING_SECURE_CONN
;
437 if (test_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
))
438 settings
|= MGMT_SETTING_DEBUG_KEYS
;
443 #define PNP_INFO_SVCLASS_ID 0x1200
445 static u8
*create_uuid16_list(struct hci_dev
*hdev
, u8
*data
, ptrdiff_t len
)
447 u8
*ptr
= data
, *uuids_start
= NULL
;
448 struct bt_uuid
*uuid
;
453 list_for_each_entry(uuid
, &hdev
->uuids
, list
) {
456 if (uuid
->size
!= 16)
459 uuid16
= get_unaligned_le16(&uuid
->uuid
[12]);
463 if (uuid16
== PNP_INFO_SVCLASS_ID
)
469 uuids_start
[1] = EIR_UUID16_ALL
;
473 /* Stop if not enough space to put next UUID */
474 if ((ptr
- data
) + sizeof(u16
) > len
) {
475 uuids_start
[1] = EIR_UUID16_SOME
;
479 *ptr
++ = (uuid16
& 0x00ff);
480 *ptr
++ = (uuid16
& 0xff00) >> 8;
481 uuids_start
[0] += sizeof(uuid16
);
487 static u8
*create_uuid32_list(struct hci_dev
*hdev
, u8
*data
, ptrdiff_t len
)
489 u8
*ptr
= data
, *uuids_start
= NULL
;
490 struct bt_uuid
*uuid
;
495 list_for_each_entry(uuid
, &hdev
->uuids
, list
) {
496 if (uuid
->size
!= 32)
502 uuids_start
[1] = EIR_UUID32_ALL
;
506 /* Stop if not enough space to put next UUID */
507 if ((ptr
- data
) + sizeof(u32
) > len
) {
508 uuids_start
[1] = EIR_UUID32_SOME
;
512 memcpy(ptr
, &uuid
->uuid
[12], sizeof(u32
));
514 uuids_start
[0] += sizeof(u32
);
520 static u8
*create_uuid128_list(struct hci_dev
*hdev
, u8
*data
, ptrdiff_t len
)
522 u8
*ptr
= data
, *uuids_start
= NULL
;
523 struct bt_uuid
*uuid
;
528 list_for_each_entry(uuid
, &hdev
->uuids
, list
) {
529 if (uuid
->size
!= 128)
535 uuids_start
[1] = EIR_UUID128_ALL
;
539 /* Stop if not enough space to put next UUID */
540 if ((ptr
- data
) + 16 > len
) {
541 uuids_start
[1] = EIR_UUID128_SOME
;
545 memcpy(ptr
, uuid
->uuid
, 16);
547 uuids_start
[0] += 16;
553 static struct pending_cmd
*mgmt_pending_find(u16 opcode
, struct hci_dev
*hdev
)
555 struct pending_cmd
*cmd
;
557 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
558 if (cmd
->opcode
== opcode
)
565 static u8
create_scan_rsp_data(struct hci_dev
*hdev
, u8
*ptr
)
570 name_len
= strlen(hdev
->dev_name
);
572 size_t max_len
= HCI_MAX_AD_LENGTH
- ad_len
- 2;
574 if (name_len
> max_len
) {
576 ptr
[1] = EIR_NAME_SHORT
;
578 ptr
[1] = EIR_NAME_COMPLETE
;
580 ptr
[0] = name_len
+ 1;
582 memcpy(ptr
+ 2, hdev
->dev_name
, name_len
);
584 ad_len
+= (name_len
+ 2);
585 ptr
+= (name_len
+ 2);
591 static void update_scan_rsp_data(struct hci_request
*req
)
593 struct hci_dev
*hdev
= req
->hdev
;
594 struct hci_cp_le_set_scan_rsp_data cp
;
597 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
600 memset(&cp
, 0, sizeof(cp
));
602 len
= create_scan_rsp_data(hdev
, cp
.data
);
604 if (hdev
->scan_rsp_data_len
== len
&&
605 memcmp(cp
.data
, hdev
->scan_rsp_data
, len
) == 0)
608 memcpy(hdev
->scan_rsp_data
, cp
.data
, sizeof(cp
.data
));
609 hdev
->scan_rsp_data_len
= len
;
613 hci_req_add(req
, HCI_OP_LE_SET_SCAN_RSP_DATA
, sizeof(cp
), &cp
);
616 static u8
get_adv_discov_flags(struct hci_dev
*hdev
)
618 struct pending_cmd
*cmd
;
620 /* If there's a pending mgmt command the flags will not yet have
621 * their final values, so check for this first.
623 cmd
= mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
);
625 struct mgmt_mode
*cp
= cmd
->param
;
627 return LE_AD_GENERAL
;
628 else if (cp
->val
== 0x02)
629 return LE_AD_LIMITED
;
631 if (test_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
))
632 return LE_AD_LIMITED
;
633 else if (test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
634 return LE_AD_GENERAL
;
640 static u8
create_adv_data(struct hci_dev
*hdev
, u8
*ptr
)
642 u8 ad_len
= 0, flags
= 0;
644 flags
|= get_adv_discov_flags(hdev
);
646 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
647 flags
|= LE_AD_NO_BREDR
;
650 BT_DBG("adv flags 0x%02x", flags
);
660 if (hdev
->adv_tx_power
!= HCI_TX_POWER_INVALID
) {
662 ptr
[1] = EIR_TX_POWER
;
663 ptr
[2] = (u8
) hdev
->adv_tx_power
;
672 static void update_adv_data(struct hci_request
*req
)
674 struct hci_dev
*hdev
= req
->hdev
;
675 struct hci_cp_le_set_adv_data cp
;
678 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
681 memset(&cp
, 0, sizeof(cp
));
683 len
= create_adv_data(hdev
, cp
.data
);
685 if (hdev
->adv_data_len
== len
&&
686 memcmp(cp
.data
, hdev
->adv_data
, len
) == 0)
689 memcpy(hdev
->adv_data
, cp
.data
, sizeof(cp
.data
));
690 hdev
->adv_data_len
= len
;
694 hci_req_add(req
, HCI_OP_LE_SET_ADV_DATA
, sizeof(cp
), &cp
);
697 static void create_eir(struct hci_dev
*hdev
, u8
*data
)
702 name_len
= strlen(hdev
->dev_name
);
708 ptr
[1] = EIR_NAME_SHORT
;
710 ptr
[1] = EIR_NAME_COMPLETE
;
712 /* EIR Data length */
713 ptr
[0] = name_len
+ 1;
715 memcpy(ptr
+ 2, hdev
->dev_name
, name_len
);
717 ptr
+= (name_len
+ 2);
720 if (hdev
->inq_tx_power
!= HCI_TX_POWER_INVALID
) {
722 ptr
[1] = EIR_TX_POWER
;
723 ptr
[2] = (u8
) hdev
->inq_tx_power
;
728 if (hdev
->devid_source
> 0) {
730 ptr
[1] = EIR_DEVICE_ID
;
732 put_unaligned_le16(hdev
->devid_source
, ptr
+ 2);
733 put_unaligned_le16(hdev
->devid_vendor
, ptr
+ 4);
734 put_unaligned_le16(hdev
->devid_product
, ptr
+ 6);
735 put_unaligned_le16(hdev
->devid_version
, ptr
+ 8);
740 ptr
= create_uuid16_list(hdev
, ptr
, HCI_MAX_EIR_LENGTH
- (ptr
- data
));
741 ptr
= create_uuid32_list(hdev
, ptr
, HCI_MAX_EIR_LENGTH
- (ptr
- data
));
742 ptr
= create_uuid128_list(hdev
, ptr
, HCI_MAX_EIR_LENGTH
- (ptr
- data
));
745 static void update_eir(struct hci_request
*req
)
747 struct hci_dev
*hdev
= req
->hdev
;
748 struct hci_cp_write_eir cp
;
750 if (!hdev_is_powered(hdev
))
753 if (!lmp_ext_inq_capable(hdev
))
756 if (!test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
759 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
762 memset(&cp
, 0, sizeof(cp
));
764 create_eir(hdev
, cp
.data
);
766 if (memcmp(cp
.data
, hdev
->eir
, sizeof(cp
.data
)) == 0)
769 memcpy(hdev
->eir
, cp
.data
, sizeof(cp
.data
));
771 hci_req_add(req
, HCI_OP_WRITE_EIR
, sizeof(cp
), &cp
);
774 static u8
get_service_classes(struct hci_dev
*hdev
)
776 struct bt_uuid
*uuid
;
779 list_for_each_entry(uuid
, &hdev
->uuids
, list
)
780 val
|= uuid
->svc_hint
;
785 static void update_class(struct hci_request
*req
)
787 struct hci_dev
*hdev
= req
->hdev
;
790 BT_DBG("%s", hdev
->name
);
792 if (!hdev_is_powered(hdev
))
795 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
798 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
801 cod
[0] = hdev
->minor_class
;
802 cod
[1] = hdev
->major_class
;
803 cod
[2] = get_service_classes(hdev
);
805 if (test_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
))
808 if (memcmp(cod
, hdev
->dev_class
, 3) == 0)
811 hci_req_add(req
, HCI_OP_WRITE_CLASS_OF_DEV
, sizeof(cod
), cod
);
814 static void service_cache_off(struct work_struct
*work
)
816 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
,
818 struct hci_request req
;
820 if (!test_and_clear_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
823 hci_req_init(&req
, hdev
);
830 hci_dev_unlock(hdev
);
832 hci_req_run(&req
, NULL
);
835 static void mgmt_init_hdev(struct sock
*sk
, struct hci_dev
*hdev
)
837 if (test_and_set_bit(HCI_MGMT
, &hdev
->dev_flags
))
840 INIT_DELAYED_WORK(&hdev
->service_cache
, service_cache_off
);
842 /* Non-mgmt controlled devices get this bit set
843 * implicitly so that pairing works for them, however
844 * for mgmt we require user-space to explicitly enable
847 clear_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
850 static int read_controller_info(struct sock
*sk
, struct hci_dev
*hdev
,
851 void *data
, u16 data_len
)
853 struct mgmt_rp_read_info rp
;
855 BT_DBG("sock %p %s", sk
, hdev
->name
);
859 memset(&rp
, 0, sizeof(rp
));
861 bacpy(&rp
.bdaddr
, &hdev
->bdaddr
);
863 rp
.version
= hdev
->hci_ver
;
864 rp
.manufacturer
= cpu_to_le16(hdev
->manufacturer
);
866 rp
.supported_settings
= cpu_to_le32(get_supported_settings(hdev
));
867 rp
.current_settings
= cpu_to_le32(get_current_settings(hdev
));
869 memcpy(rp
.dev_class
, hdev
->dev_class
, 3);
871 memcpy(rp
.name
, hdev
->dev_name
, sizeof(hdev
->dev_name
));
872 memcpy(rp
.short_name
, hdev
->short_name
, sizeof(hdev
->short_name
));
874 hci_dev_unlock(hdev
);
876 return cmd_complete(sk
, hdev
->id
, MGMT_OP_READ_INFO
, 0, &rp
,
880 static void mgmt_pending_free(struct pending_cmd
*cmd
)
887 static struct pending_cmd
*mgmt_pending_add(struct sock
*sk
, u16 opcode
,
888 struct hci_dev
*hdev
, void *data
,
891 struct pending_cmd
*cmd
;
893 cmd
= kmalloc(sizeof(*cmd
), GFP_KERNEL
);
897 cmd
->opcode
= opcode
;
898 cmd
->index
= hdev
->id
;
900 cmd
->param
= kmalloc(len
, GFP_KERNEL
);
907 memcpy(cmd
->param
, data
, len
);
912 list_add(&cmd
->list
, &hdev
->mgmt_pending
);
917 static void mgmt_pending_foreach(u16 opcode
, struct hci_dev
*hdev
,
918 void (*cb
)(struct pending_cmd
*cmd
,
922 struct pending_cmd
*cmd
, *tmp
;
924 list_for_each_entry_safe(cmd
, tmp
, &hdev
->mgmt_pending
, list
) {
925 if (opcode
> 0 && cmd
->opcode
!= opcode
)
932 static void mgmt_pending_remove(struct pending_cmd
*cmd
)
934 list_del(&cmd
->list
);
935 mgmt_pending_free(cmd
);
938 static int send_settings_rsp(struct sock
*sk
, u16 opcode
, struct hci_dev
*hdev
)
940 __le32 settings
= cpu_to_le32(get_current_settings(hdev
));
942 return cmd_complete(sk
, hdev
->id
, opcode
, 0, &settings
,
946 static int set_powered(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
949 struct mgmt_mode
*cp
= data
;
950 struct pending_cmd
*cmd
;
953 BT_DBG("request for %s", hdev
->name
);
955 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
956 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_POWERED
,
957 MGMT_STATUS_INVALID_PARAMS
);
961 if (mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
)) {
962 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_POWERED
,
967 if (test_and_clear_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
)) {
968 cancel_delayed_work(&hdev
->power_off
);
971 mgmt_pending_add(sk
, MGMT_OP_SET_POWERED
, hdev
,
973 err
= mgmt_powered(hdev
, 1);
978 if (!!cp
->val
== hdev_is_powered(hdev
)) {
979 err
= send_settings_rsp(sk
, MGMT_OP_SET_POWERED
, hdev
);
983 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_POWERED
, hdev
, data
, len
);
990 queue_work(hdev
->req_workqueue
, &hdev
->power_on
);
992 queue_work(hdev
->req_workqueue
, &hdev
->power_off
.work
);
997 hci_dev_unlock(hdev
);
1001 static int mgmt_event(u16 event
, struct hci_dev
*hdev
, void *data
, u16 data_len
,
1002 struct sock
*skip_sk
)
1004 struct sk_buff
*skb
;
1005 struct mgmt_hdr
*hdr
;
1007 skb
= alloc_skb(sizeof(*hdr
) + data_len
, GFP_KERNEL
);
1011 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
1012 hdr
->opcode
= cpu_to_le16(event
);
1014 hdr
->index
= cpu_to_le16(hdev
->id
);
1016 hdr
->index
= __constant_cpu_to_le16(MGMT_INDEX_NONE
);
1017 hdr
->len
= cpu_to_le16(data_len
);
1020 memcpy(skb_put(skb
, data_len
), data
, data_len
);
1023 __net_timestamp(skb
);
1025 hci_send_to_control(skb
, skip_sk
);
1031 static int new_settings(struct hci_dev
*hdev
, struct sock
*skip
)
1035 ev
= cpu_to_le32(get_current_settings(hdev
));
1037 return mgmt_event(MGMT_EV_NEW_SETTINGS
, hdev
, &ev
, sizeof(ev
), skip
);
1042 struct hci_dev
*hdev
;
1046 static void settings_rsp(struct pending_cmd
*cmd
, void *data
)
1048 struct cmd_lookup
*match
= data
;
1050 send_settings_rsp(cmd
->sk
, cmd
->opcode
, match
->hdev
);
1052 list_del(&cmd
->list
);
1054 if (match
->sk
== NULL
) {
1055 match
->sk
= cmd
->sk
;
1056 sock_hold(match
->sk
);
1059 mgmt_pending_free(cmd
);
1062 static void cmd_status_rsp(struct pending_cmd
*cmd
, void *data
)
1066 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, *status
);
1067 mgmt_pending_remove(cmd
);
1070 static u8
mgmt_bredr_support(struct hci_dev
*hdev
)
1072 if (!lmp_bredr_capable(hdev
))
1073 return MGMT_STATUS_NOT_SUPPORTED
;
1074 else if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1075 return MGMT_STATUS_REJECTED
;
1077 return MGMT_STATUS_SUCCESS
;
1080 static u8
mgmt_le_support(struct hci_dev
*hdev
)
1082 if (!lmp_le_capable(hdev
))
1083 return MGMT_STATUS_NOT_SUPPORTED
;
1084 else if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
1085 return MGMT_STATUS_REJECTED
;
1087 return MGMT_STATUS_SUCCESS
;
1090 static void set_discoverable_complete(struct hci_dev
*hdev
, u8 status
)
1092 struct pending_cmd
*cmd
;
1093 struct mgmt_mode
*cp
;
1094 struct hci_request req
;
1097 BT_DBG("status 0x%02x", status
);
1101 cmd
= mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
);
1106 u8 mgmt_err
= mgmt_status(status
);
1107 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_err
);
1108 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1114 changed
= !test_and_set_bit(HCI_DISCOVERABLE
,
1117 if (hdev
->discov_timeout
> 0) {
1118 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
1119 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
1123 changed
= test_and_clear_bit(HCI_DISCOVERABLE
,
1127 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
1130 new_settings(hdev
, cmd
->sk
);
1132 /* When the discoverable mode gets changed, make sure
1133 * that class of device has the limited discoverable
1134 * bit correctly set.
1136 hci_req_init(&req
, hdev
);
1138 hci_req_run(&req
, NULL
);
1141 mgmt_pending_remove(cmd
);
1144 hci_dev_unlock(hdev
);
1147 static int set_discoverable(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1150 struct mgmt_cp_set_discoverable
*cp
= data
;
1151 struct pending_cmd
*cmd
;
1152 struct hci_request req
;
1157 BT_DBG("request for %s", hdev
->name
);
1159 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
) &&
1160 !test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1161 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1162 MGMT_STATUS_REJECTED
);
1164 if (cp
->val
!= 0x00 && cp
->val
!= 0x01 && cp
->val
!= 0x02)
1165 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1166 MGMT_STATUS_INVALID_PARAMS
);
1168 timeout
= __le16_to_cpu(cp
->timeout
);
1170 /* Disabling discoverable requires that no timeout is set,
1171 * and enabling limited discoverable requires a timeout.
1173 if ((cp
->val
== 0x00 && timeout
> 0) ||
1174 (cp
->val
== 0x02 && timeout
== 0))
1175 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1176 MGMT_STATUS_INVALID_PARAMS
);
1180 if (!hdev_is_powered(hdev
) && timeout
> 0) {
1181 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1182 MGMT_STATUS_NOT_POWERED
);
1186 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
) ||
1187 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
)) {
1188 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1193 if (!test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
)) {
1194 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1195 MGMT_STATUS_REJECTED
);
1199 if (!hdev_is_powered(hdev
)) {
1200 bool changed
= false;
1202 /* Setting limited discoverable when powered off is
1203 * not a valid operation since it requires a timeout
1204 * and so no need to check HCI_LIMITED_DISCOVERABLE.
1206 if (!!cp
->val
!= test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
)) {
1207 change_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
1211 err
= send_settings_rsp(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
1216 err
= new_settings(hdev
, sk
);
1221 /* If the current mode is the same, then just update the timeout
1222 * value with the new value. And if only the timeout gets updated,
1223 * then no need for any HCI transactions.
1225 if (!!cp
->val
== test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
) &&
1226 (cp
->val
== 0x02) == test_bit(HCI_LIMITED_DISCOVERABLE
,
1227 &hdev
->dev_flags
)) {
1228 cancel_delayed_work(&hdev
->discov_off
);
1229 hdev
->discov_timeout
= timeout
;
1231 if (cp
->val
&& hdev
->discov_timeout
> 0) {
1232 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
1233 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
1237 err
= send_settings_rsp(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
1241 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
, data
, len
);
1247 /* Cancel any potential discoverable timeout that might be
1248 * still active and store new timeout value. The arming of
1249 * the timeout happens in the complete handler.
1251 cancel_delayed_work(&hdev
->discov_off
);
1252 hdev
->discov_timeout
= timeout
;
1254 /* Limited discoverable mode */
1255 if (cp
->val
== 0x02)
1256 set_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1258 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1260 hci_req_init(&req
, hdev
);
1262 /* The procedure for LE-only controllers is much simpler - just
1263 * update the advertising data.
1265 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1271 struct hci_cp_write_current_iac_lap hci_cp
;
1273 if (cp
->val
== 0x02) {
1274 /* Limited discoverable mode */
1275 hci_cp
.num_iac
= min_t(u8
, hdev
->num_iac
, 2);
1276 hci_cp
.iac_lap
[0] = 0x00; /* LIAC */
1277 hci_cp
.iac_lap
[1] = 0x8b;
1278 hci_cp
.iac_lap
[2] = 0x9e;
1279 hci_cp
.iac_lap
[3] = 0x33; /* GIAC */
1280 hci_cp
.iac_lap
[4] = 0x8b;
1281 hci_cp
.iac_lap
[5] = 0x9e;
1283 /* General discoverable mode */
1285 hci_cp
.iac_lap
[0] = 0x33; /* GIAC */
1286 hci_cp
.iac_lap
[1] = 0x8b;
1287 hci_cp
.iac_lap
[2] = 0x9e;
1290 hci_req_add(&req
, HCI_OP_WRITE_CURRENT_IAC_LAP
,
1291 (hci_cp
.num_iac
* 3) + 1, &hci_cp
);
1293 scan
|= SCAN_INQUIRY
;
1295 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1298 hci_req_add(&req
, HCI_OP_WRITE_SCAN_ENABLE
, sizeof(scan
), &scan
);
1301 update_adv_data(&req
);
1303 err
= hci_req_run(&req
, set_discoverable_complete
);
1305 mgmt_pending_remove(cmd
);
1308 hci_dev_unlock(hdev
);
1312 static void write_fast_connectable(struct hci_request
*req
, bool enable
)
1314 struct hci_dev
*hdev
= req
->hdev
;
1315 struct hci_cp_write_page_scan_activity acp
;
1318 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1321 if (hdev
->hci_ver
< BLUETOOTH_VER_1_2
)
1325 type
= PAGE_SCAN_TYPE_INTERLACED
;
1327 /* 160 msec page scan interval */
1328 acp
.interval
= __constant_cpu_to_le16(0x0100);
1330 type
= PAGE_SCAN_TYPE_STANDARD
; /* default */
1332 /* default 1.28 sec page scan */
1333 acp
.interval
= __constant_cpu_to_le16(0x0800);
1336 acp
.window
= __constant_cpu_to_le16(0x0012);
1338 if (__cpu_to_le16(hdev
->page_scan_interval
) != acp
.interval
||
1339 __cpu_to_le16(hdev
->page_scan_window
) != acp
.window
)
1340 hci_req_add(req
, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
,
1343 if (hdev
->page_scan_type
!= type
)
1344 hci_req_add(req
, HCI_OP_WRITE_PAGE_SCAN_TYPE
, 1, &type
);
1347 static u8
get_adv_type(struct hci_dev
*hdev
)
1349 struct pending_cmd
*cmd
;
1352 /* If there's a pending mgmt command the flag will not yet have
1353 * it's final value, so check for this first.
1355 cmd
= mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
);
1357 struct mgmt_mode
*cp
= cmd
->param
;
1358 connectable
= !!cp
->val
;
1360 connectable
= test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1363 return connectable
? LE_ADV_IND
: LE_ADV_NONCONN_IND
;
1366 static void enable_advertising(struct hci_request
*req
)
1368 struct hci_dev
*hdev
= req
->hdev
;
1369 struct hci_cp_le_set_adv_param cp
;
1372 memset(&cp
, 0, sizeof(cp
));
1373 cp
.min_interval
= __constant_cpu_to_le16(0x0800);
1374 cp
.max_interval
= __constant_cpu_to_le16(0x0800);
1375 cp
.type
= get_adv_type(hdev
);
1376 cp
.own_address_type
= hdev
->own_addr_type
;
1377 cp
.channel_map
= 0x07;
1379 hci_req_add(req
, HCI_OP_LE_SET_ADV_PARAM
, sizeof(cp
), &cp
);
1381 hci_req_add(req
, HCI_OP_LE_SET_ADV_ENABLE
, sizeof(enable
), &enable
);
1384 static void disable_advertising(struct hci_request
*req
)
1388 hci_req_add(req
, HCI_OP_LE_SET_ADV_ENABLE
, sizeof(enable
), &enable
);
1391 static void set_connectable_complete(struct hci_dev
*hdev
, u8 status
)
1393 struct pending_cmd
*cmd
;
1394 struct mgmt_mode
*cp
;
1397 BT_DBG("status 0x%02x", status
);
1401 cmd
= mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
);
1406 u8 mgmt_err
= mgmt_status(status
);
1407 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_err
);
1413 changed
= !test_and_set_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1415 changed
= test_and_clear_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1417 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_CONNECTABLE
, hdev
);
1420 new_settings(hdev
, cmd
->sk
);
1423 mgmt_pending_remove(cmd
);
1426 hci_dev_unlock(hdev
);
1429 static int set_connectable_update_settings(struct hci_dev
*hdev
,
1430 struct sock
*sk
, u8 val
)
1432 bool changed
= false;
1435 if (!!val
!= test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
1439 set_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1441 clear_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1442 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
1445 err
= send_settings_rsp(sk
, MGMT_OP_SET_CONNECTABLE
, hdev
);
1450 return new_settings(hdev
, sk
);
1455 static int set_connectable(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1458 struct mgmt_mode
*cp
= data
;
1459 struct pending_cmd
*cmd
;
1460 struct hci_request req
;
1464 BT_DBG("request for %s", hdev
->name
);
1466 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
) &&
1467 !test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1468 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_CONNECTABLE
,
1469 MGMT_STATUS_REJECTED
);
1471 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1472 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_CONNECTABLE
,
1473 MGMT_STATUS_INVALID_PARAMS
);
1477 if (!hdev_is_powered(hdev
)) {
1478 err
= set_connectable_update_settings(hdev
, sk
, cp
->val
);
1482 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
) ||
1483 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
)) {
1484 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_CONNECTABLE
,
1489 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_CONNECTABLE
, hdev
, data
, len
);
1495 hci_req_init(&req
, hdev
);
1497 /* If BR/EDR is not enabled and we disable advertising as a
1498 * by-product of disabling connectable, we need to update the
1499 * advertising flags.
1501 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
1503 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1504 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
1506 update_adv_data(&req
);
1507 } else if (cp
->val
!= test_bit(HCI_PSCAN
, &hdev
->flags
)) {
1513 if (test_bit(HCI_ISCAN
, &hdev
->flags
) &&
1514 hdev
->discov_timeout
> 0)
1515 cancel_delayed_work(&hdev
->discov_off
);
1518 hci_req_add(&req
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
1521 /* If we're going from non-connectable to connectable or
1522 * vice-versa when fast connectable is enabled ensure that fast
1523 * connectable gets disabled. write_fast_connectable won't do
1524 * anything if the page scan parameters are already what they
1527 if (cp
->val
|| test_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
))
1528 write_fast_connectable(&req
, false);
1530 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
) &&
1531 hci_conn_num(hdev
, LE_LINK
) == 0) {
1532 disable_advertising(&req
);
1533 enable_advertising(&req
);
1536 err
= hci_req_run(&req
, set_connectable_complete
);
1538 mgmt_pending_remove(cmd
);
1539 if (err
== -ENODATA
)
1540 err
= set_connectable_update_settings(hdev
, sk
,
1546 hci_dev_unlock(hdev
);
1550 static int set_pairable(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1553 struct mgmt_mode
*cp
= data
;
1557 BT_DBG("request for %s", hdev
->name
);
1559 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1560 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_PAIRABLE
,
1561 MGMT_STATUS_INVALID_PARAMS
);
1566 changed
= !test_and_set_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
1568 changed
= test_and_clear_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
1570 err
= send_settings_rsp(sk
, MGMT_OP_SET_PAIRABLE
, hdev
);
1575 err
= new_settings(hdev
, sk
);
1578 hci_dev_unlock(hdev
);
1582 static int set_link_security(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1585 struct mgmt_mode
*cp
= data
;
1586 struct pending_cmd
*cmd
;
1590 BT_DBG("request for %s", hdev
->name
);
1592 status
= mgmt_bredr_support(hdev
);
1594 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LINK_SECURITY
,
1597 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1598 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LINK_SECURITY
,
1599 MGMT_STATUS_INVALID_PARAMS
);
1603 if (!hdev_is_powered(hdev
)) {
1604 bool changed
= false;
1606 if (!!cp
->val
!= test_bit(HCI_LINK_SECURITY
,
1607 &hdev
->dev_flags
)) {
1608 change_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
);
1612 err
= send_settings_rsp(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
);
1617 err
= new_settings(hdev
, sk
);
1622 if (mgmt_pending_find(MGMT_OP_SET_LINK_SECURITY
, hdev
)) {
1623 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LINK_SECURITY
,
1630 if (test_bit(HCI_AUTH
, &hdev
->flags
) == val
) {
1631 err
= send_settings_rsp(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
);
1635 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
, data
, len
);
1641 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, sizeof(val
), &val
);
1643 mgmt_pending_remove(cmd
);
1648 hci_dev_unlock(hdev
);
1652 static int set_ssp(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
1654 struct mgmt_mode
*cp
= data
;
1655 struct pending_cmd
*cmd
;
1659 BT_DBG("request for %s", hdev
->name
);
1661 status
= mgmt_bredr_support(hdev
);
1663 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
, status
);
1665 if (!lmp_ssp_capable(hdev
))
1666 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
,
1667 MGMT_STATUS_NOT_SUPPORTED
);
1669 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1670 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
,
1671 MGMT_STATUS_INVALID_PARAMS
);
1675 if (!hdev_is_powered(hdev
)) {
1679 changed
= !test_and_set_bit(HCI_SSP_ENABLED
,
1682 changed
= test_and_clear_bit(HCI_SSP_ENABLED
,
1685 changed
= test_and_clear_bit(HCI_HS_ENABLED
,
1688 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
1691 err
= send_settings_rsp(sk
, MGMT_OP_SET_SSP
, hdev
);
1696 err
= new_settings(hdev
, sk
);
1701 if (mgmt_pending_find(MGMT_OP_SET_SSP
, hdev
) ||
1702 mgmt_pending_find(MGMT_OP_SET_HS
, hdev
)) {
1703 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
,
1708 if (!!cp
->val
== test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
)) {
1709 err
= send_settings_rsp(sk
, MGMT_OP_SET_SSP
, hdev
);
1713 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_SSP
, hdev
, data
, len
);
1719 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SSP_MODE
, 1, &cp
->val
);
1721 mgmt_pending_remove(cmd
);
1726 hci_dev_unlock(hdev
);
1730 static int set_hs(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
1732 struct mgmt_mode
*cp
= data
;
1737 BT_DBG("request for %s", hdev
->name
);
1739 status
= mgmt_bredr_support(hdev
);
1741 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
, status
);
1743 if (!lmp_ssp_capable(hdev
))
1744 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
1745 MGMT_STATUS_NOT_SUPPORTED
);
1747 if (!test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
1748 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
1749 MGMT_STATUS_REJECTED
);
1751 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1752 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
1753 MGMT_STATUS_INVALID_PARAMS
);
1758 changed
= !test_and_set_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
1760 if (hdev_is_powered(hdev
)) {
1761 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
1762 MGMT_STATUS_REJECTED
);
1766 changed
= test_and_clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
1769 err
= send_settings_rsp(sk
, MGMT_OP_SET_HS
, hdev
);
1774 err
= new_settings(hdev
, sk
);
1777 hci_dev_unlock(hdev
);
1781 static void le_enable_complete(struct hci_dev
*hdev
, u8 status
)
1783 struct cmd_lookup match
= { NULL
, hdev
};
1786 u8 mgmt_err
= mgmt_status(status
);
1788 mgmt_pending_foreach(MGMT_OP_SET_LE
, hdev
, cmd_status_rsp
,
1793 mgmt_pending_foreach(MGMT_OP_SET_LE
, hdev
, settings_rsp
, &match
);
1795 new_settings(hdev
, match
.sk
);
1800 /* Make sure the controller has a good default for
1801 * advertising data. Restrict the update to when LE
1802 * has actually been enabled. During power on, the
1803 * update in powered_update_hci will take care of it.
1805 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
)) {
1806 struct hci_request req
;
1810 hci_req_init(&req
, hdev
);
1811 update_adv_data(&req
);
1812 update_scan_rsp_data(&req
);
1813 hci_req_run(&req
, NULL
);
1815 hci_dev_unlock(hdev
);
1819 static int set_le(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
1821 struct mgmt_mode
*cp
= data
;
1822 struct hci_cp_write_le_host_supported hci_cp
;
1823 struct pending_cmd
*cmd
;
1824 struct hci_request req
;
1828 BT_DBG("request for %s", hdev
->name
);
1830 if (!lmp_le_capable(hdev
))
1831 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
1832 MGMT_STATUS_NOT_SUPPORTED
);
1834 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1835 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
1836 MGMT_STATUS_INVALID_PARAMS
);
1838 /* LE-only devices do not allow toggling LE on/off */
1839 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1840 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
1841 MGMT_STATUS_REJECTED
);
1846 enabled
= lmp_host_le_capable(hdev
);
1848 if (!hdev_is_powered(hdev
) || val
== enabled
) {
1849 bool changed
= false;
1851 if (val
!= test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
)) {
1852 change_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
);
1856 if (!val
&& test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
)) {
1857 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
1861 err
= send_settings_rsp(sk
, MGMT_OP_SET_LE
, hdev
);
1866 err
= new_settings(hdev
, sk
);
1871 if (mgmt_pending_find(MGMT_OP_SET_LE
, hdev
) ||
1872 mgmt_pending_find(MGMT_OP_SET_ADVERTISING
, hdev
)) {
1873 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
1878 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LE
, hdev
, data
, len
);
1884 hci_req_init(&req
, hdev
);
1886 memset(&hci_cp
, 0, sizeof(hci_cp
));
1890 hci_cp
.simul
= lmp_le_br_capable(hdev
);
1892 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
1893 disable_advertising(&req
);
1896 hci_req_add(&req
, HCI_OP_WRITE_LE_HOST_SUPPORTED
, sizeof(hci_cp
),
1899 err
= hci_req_run(&req
, le_enable_complete
);
1901 mgmt_pending_remove(cmd
);
1904 hci_dev_unlock(hdev
);
1908 /* This is a helper function to test for pending mgmt commands that can
1909 * cause CoD or EIR HCI commands. We can only allow one such pending
1910 * mgmt command at a time since otherwise we cannot easily track what
1911 * the current values are, will be, and based on that calculate if a new
1912 * HCI command needs to be sent and if yes with what value.
1914 static bool pending_eir_or_class(struct hci_dev
*hdev
)
1916 struct pending_cmd
*cmd
;
1918 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
1919 switch (cmd
->opcode
) {
1920 case MGMT_OP_ADD_UUID
:
1921 case MGMT_OP_REMOVE_UUID
:
1922 case MGMT_OP_SET_DEV_CLASS
:
1923 case MGMT_OP_SET_POWERED
:
1931 static const u8 bluetooth_base_uuid
[] = {
1932 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
1933 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1936 static u8
get_uuid_size(const u8
*uuid
)
1940 if (memcmp(uuid
, bluetooth_base_uuid
, 12))
1943 val
= get_unaligned_le32(&uuid
[12]);
1950 static void mgmt_class_complete(struct hci_dev
*hdev
, u16 mgmt_op
, u8 status
)
1952 struct pending_cmd
*cmd
;
1956 cmd
= mgmt_pending_find(mgmt_op
, hdev
);
1960 cmd_complete(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_status(status
),
1961 hdev
->dev_class
, 3);
1963 mgmt_pending_remove(cmd
);
1966 hci_dev_unlock(hdev
);
1969 static void add_uuid_complete(struct hci_dev
*hdev
, u8 status
)
1971 BT_DBG("status 0x%02x", status
);
1973 mgmt_class_complete(hdev
, MGMT_OP_ADD_UUID
, status
);
1976 static int add_uuid(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
1978 struct mgmt_cp_add_uuid
*cp
= data
;
1979 struct pending_cmd
*cmd
;
1980 struct hci_request req
;
1981 struct bt_uuid
*uuid
;
1984 BT_DBG("request for %s", hdev
->name
);
1988 if (pending_eir_or_class(hdev
)) {
1989 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_ADD_UUID
,
1994 uuid
= kmalloc(sizeof(*uuid
), GFP_KERNEL
);
2000 memcpy(uuid
->uuid
, cp
->uuid
, 16);
2001 uuid
->svc_hint
= cp
->svc_hint
;
2002 uuid
->size
= get_uuid_size(cp
->uuid
);
2004 list_add_tail(&uuid
->list
, &hdev
->uuids
);
2006 hci_req_init(&req
, hdev
);
2011 err
= hci_req_run(&req
, add_uuid_complete
);
2013 if (err
!= -ENODATA
)
2016 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_UUID
, 0,
2017 hdev
->dev_class
, 3);
2021 cmd
= mgmt_pending_add(sk
, MGMT_OP_ADD_UUID
, hdev
, data
, len
);
2030 hci_dev_unlock(hdev
);
2034 static bool enable_service_cache(struct hci_dev
*hdev
)
2036 if (!hdev_is_powered(hdev
))
2039 if (!test_and_set_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
)) {
2040 queue_delayed_work(hdev
->workqueue
, &hdev
->service_cache
,
2048 static void remove_uuid_complete(struct hci_dev
*hdev
, u8 status
)
2050 BT_DBG("status 0x%02x", status
);
2052 mgmt_class_complete(hdev
, MGMT_OP_REMOVE_UUID
, status
);
2055 static int remove_uuid(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2058 struct mgmt_cp_remove_uuid
*cp
= data
;
2059 struct pending_cmd
*cmd
;
2060 struct bt_uuid
*match
, *tmp
;
2061 u8 bt_uuid_any
[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
2062 struct hci_request req
;
2065 BT_DBG("request for %s", hdev
->name
);
2069 if (pending_eir_or_class(hdev
)) {
2070 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
,
2075 if (memcmp(cp
->uuid
, bt_uuid_any
, 16) == 0) {
2076 err
= hci_uuids_clear(hdev
);
2078 if (enable_service_cache(hdev
)) {
2079 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
,
2080 0, hdev
->dev_class
, 3);
2089 list_for_each_entry_safe(match
, tmp
, &hdev
->uuids
, list
) {
2090 if (memcmp(match
->uuid
, cp
->uuid
, 16) != 0)
2093 list_del(&match
->list
);
2099 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
,
2100 MGMT_STATUS_INVALID_PARAMS
);
2105 hci_req_init(&req
, hdev
);
2110 err
= hci_req_run(&req
, remove_uuid_complete
);
2112 if (err
!= -ENODATA
)
2115 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
, 0,
2116 hdev
->dev_class
, 3);
2120 cmd
= mgmt_pending_add(sk
, MGMT_OP_REMOVE_UUID
, hdev
, data
, len
);
2129 hci_dev_unlock(hdev
);
2133 static void set_class_complete(struct hci_dev
*hdev
, u8 status
)
2135 BT_DBG("status 0x%02x", status
);
2137 mgmt_class_complete(hdev
, MGMT_OP_SET_DEV_CLASS
, status
);
2140 static int set_dev_class(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2143 struct mgmt_cp_set_dev_class
*cp
= data
;
2144 struct pending_cmd
*cmd
;
2145 struct hci_request req
;
2148 BT_DBG("request for %s", hdev
->name
);
2150 if (!lmp_bredr_capable(hdev
))
2151 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
,
2152 MGMT_STATUS_NOT_SUPPORTED
);
2156 if (pending_eir_or_class(hdev
)) {
2157 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
,
2162 if ((cp
->minor
& 0x03) != 0 || (cp
->major
& 0xe0) != 0) {
2163 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
,
2164 MGMT_STATUS_INVALID_PARAMS
);
2168 hdev
->major_class
= cp
->major
;
2169 hdev
->minor_class
= cp
->minor
;
2171 if (!hdev_is_powered(hdev
)) {
2172 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
, 0,
2173 hdev
->dev_class
, 3);
2177 hci_req_init(&req
, hdev
);
2179 if (test_and_clear_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
)) {
2180 hci_dev_unlock(hdev
);
2181 cancel_delayed_work_sync(&hdev
->service_cache
);
2188 err
= hci_req_run(&req
, set_class_complete
);
2190 if (err
!= -ENODATA
)
2193 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
, 0,
2194 hdev
->dev_class
, 3);
2198 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_DEV_CLASS
, hdev
, data
, len
);
2207 hci_dev_unlock(hdev
);
2211 static int load_link_keys(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2214 struct mgmt_cp_load_link_keys
*cp
= data
;
2215 u16 key_count
, expected_len
;
2219 BT_DBG("request for %s", hdev
->name
);
2221 if (!lmp_bredr_capable(hdev
))
2222 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2223 MGMT_STATUS_NOT_SUPPORTED
);
2225 key_count
= __le16_to_cpu(cp
->key_count
);
2227 expected_len
= sizeof(*cp
) + key_count
*
2228 sizeof(struct mgmt_link_key_info
);
2229 if (expected_len
!= len
) {
2230 BT_ERR("load_link_keys: expected %u bytes, got %u bytes",
2232 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2233 MGMT_STATUS_INVALID_PARAMS
);
2236 if (cp
->debug_keys
!= 0x00 && cp
->debug_keys
!= 0x01)
2237 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2238 MGMT_STATUS_INVALID_PARAMS
);
2240 BT_DBG("%s debug_keys %u key_count %u", hdev
->name
, cp
->debug_keys
,
2243 for (i
= 0; i
< key_count
; i
++) {
2244 struct mgmt_link_key_info
*key
= &cp
->keys
[i
];
2246 if (key
->addr
.type
!= BDADDR_BREDR
|| key
->type
> 0x08)
2247 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2248 MGMT_STATUS_INVALID_PARAMS
);
2253 hci_link_keys_clear(hdev
);
2256 changed
= !test_and_set_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
);
2258 changed
= test_and_clear_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
);
2261 new_settings(hdev
, NULL
);
2263 for (i
= 0; i
< key_count
; i
++) {
2264 struct mgmt_link_key_info
*key
= &cp
->keys
[i
];
2266 hci_add_link_key(hdev
, NULL
, 0, &key
->addr
.bdaddr
, key
->val
,
2267 key
->type
, key
->pin_len
);
2270 cmd_complete(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
, 0, NULL
, 0);
2272 hci_dev_unlock(hdev
);
2277 static int device_unpaired(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
2278 u8 addr_type
, struct sock
*skip_sk
)
2280 struct mgmt_ev_device_unpaired ev
;
2282 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
2283 ev
.addr
.type
= addr_type
;
2285 return mgmt_event(MGMT_EV_DEVICE_UNPAIRED
, hdev
, &ev
, sizeof(ev
),
2289 static int unpair_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2292 struct mgmt_cp_unpair_device
*cp
= data
;
2293 struct mgmt_rp_unpair_device rp
;
2294 struct hci_cp_disconnect dc
;
2295 struct pending_cmd
*cmd
;
2296 struct hci_conn
*conn
;
2299 memset(&rp
, 0, sizeof(rp
));
2300 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
2301 rp
.addr
.type
= cp
->addr
.type
;
2303 if (!bdaddr_type_is_valid(cp
->addr
.type
))
2304 return cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2305 MGMT_STATUS_INVALID_PARAMS
,
2308 if (cp
->disconnect
!= 0x00 && cp
->disconnect
!= 0x01)
2309 return cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2310 MGMT_STATUS_INVALID_PARAMS
,
2315 if (!hdev_is_powered(hdev
)) {
2316 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2317 MGMT_STATUS_NOT_POWERED
, &rp
, sizeof(rp
));
2321 if (cp
->addr
.type
== BDADDR_BREDR
) {
2322 err
= hci_remove_link_key(hdev
, &cp
->addr
.bdaddr
);
2326 if (cp
->addr
.type
== BDADDR_LE_PUBLIC
)
2327 addr_type
= ADDR_LE_DEV_PUBLIC
;
2329 addr_type
= ADDR_LE_DEV_RANDOM
;
2331 err
= hci_remove_ltk(hdev
, &cp
->addr
.bdaddr
, addr_type
);
2335 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2336 MGMT_STATUS_NOT_PAIRED
, &rp
, sizeof(rp
));
2340 if (cp
->disconnect
) {
2341 if (cp
->addr
.type
== BDADDR_BREDR
)
2342 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
,
2345 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
,
2352 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
, 0,
2354 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, sk
);
2358 cmd
= mgmt_pending_add(sk
, MGMT_OP_UNPAIR_DEVICE
, hdev
, cp
,
2365 dc
.handle
= cpu_to_le16(conn
->handle
);
2366 dc
.reason
= 0x13; /* Remote User Terminated Connection */
2367 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
2369 mgmt_pending_remove(cmd
);
2372 hci_dev_unlock(hdev
);
2376 static int disconnect(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2379 struct mgmt_cp_disconnect
*cp
= data
;
2380 struct mgmt_rp_disconnect rp
;
2381 struct hci_cp_disconnect dc
;
2382 struct pending_cmd
*cmd
;
2383 struct hci_conn
*conn
;
2388 memset(&rp
, 0, sizeof(rp
));
2389 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
2390 rp
.addr
.type
= cp
->addr
.type
;
2392 if (!bdaddr_type_is_valid(cp
->addr
.type
))
2393 return cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2394 MGMT_STATUS_INVALID_PARAMS
,
2399 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
2400 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2401 MGMT_STATUS_NOT_POWERED
, &rp
, sizeof(rp
));
2405 if (mgmt_pending_find(MGMT_OP_DISCONNECT
, hdev
)) {
2406 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2407 MGMT_STATUS_BUSY
, &rp
, sizeof(rp
));
2411 if (cp
->addr
.type
== BDADDR_BREDR
)
2412 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
,
2415 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &cp
->addr
.bdaddr
);
2417 if (!conn
|| conn
->state
== BT_OPEN
|| conn
->state
== BT_CLOSED
) {
2418 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2419 MGMT_STATUS_NOT_CONNECTED
, &rp
, sizeof(rp
));
2423 cmd
= mgmt_pending_add(sk
, MGMT_OP_DISCONNECT
, hdev
, data
, len
);
2429 dc
.handle
= cpu_to_le16(conn
->handle
);
2430 dc
.reason
= HCI_ERROR_REMOTE_USER_TERM
;
2432 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
2434 mgmt_pending_remove(cmd
);
2437 hci_dev_unlock(hdev
);
2441 static u8
link_to_bdaddr(u8 link_type
, u8 addr_type
)
2443 switch (link_type
) {
2445 switch (addr_type
) {
2446 case ADDR_LE_DEV_PUBLIC
:
2447 return BDADDR_LE_PUBLIC
;
2450 /* Fallback to LE Random address type */
2451 return BDADDR_LE_RANDOM
;
2455 /* Fallback to BR/EDR type */
2456 return BDADDR_BREDR
;
2460 static int get_connections(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2463 struct mgmt_rp_get_connections
*rp
;
2473 if (!hdev_is_powered(hdev
)) {
2474 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_GET_CONNECTIONS
,
2475 MGMT_STATUS_NOT_POWERED
);
2480 list_for_each_entry(c
, &hdev
->conn_hash
.list
, list
) {
2481 if (test_bit(HCI_CONN_MGMT_CONNECTED
, &c
->flags
))
2485 rp_len
= sizeof(*rp
) + (i
* sizeof(struct mgmt_addr_info
));
2486 rp
= kmalloc(rp_len
, GFP_KERNEL
);
2493 list_for_each_entry(c
, &hdev
->conn_hash
.list
, list
) {
2494 if (!test_bit(HCI_CONN_MGMT_CONNECTED
, &c
->flags
))
2496 bacpy(&rp
->addr
[i
].bdaddr
, &c
->dst
);
2497 rp
->addr
[i
].type
= link_to_bdaddr(c
->type
, c
->dst_type
);
2498 if (c
->type
== SCO_LINK
|| c
->type
== ESCO_LINK
)
2503 rp
->conn_count
= cpu_to_le16(i
);
2505 /* Recalculate length in case of filtered SCO connections, etc */
2506 rp_len
= sizeof(*rp
) + (i
* sizeof(struct mgmt_addr_info
));
2508 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_GET_CONNECTIONS
, 0, rp
,
2514 hci_dev_unlock(hdev
);
2518 static int send_pin_code_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
2519 struct mgmt_cp_pin_code_neg_reply
*cp
)
2521 struct pending_cmd
*cmd
;
2524 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_NEG_REPLY
, hdev
, cp
,
2529 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2530 sizeof(cp
->addr
.bdaddr
), &cp
->addr
.bdaddr
);
2532 mgmt_pending_remove(cmd
);
2537 static int pin_code_reply(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2540 struct hci_conn
*conn
;
2541 struct mgmt_cp_pin_code_reply
*cp
= data
;
2542 struct hci_cp_pin_code_reply reply
;
2543 struct pending_cmd
*cmd
;
2550 if (!hdev_is_powered(hdev
)) {
2551 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
2552 MGMT_STATUS_NOT_POWERED
);
2556 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->addr
.bdaddr
);
2558 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
2559 MGMT_STATUS_NOT_CONNECTED
);
2563 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
&& cp
->pin_len
!= 16) {
2564 struct mgmt_cp_pin_code_neg_reply ncp
;
2566 memcpy(&ncp
.addr
, &cp
->addr
, sizeof(ncp
.addr
));
2568 BT_ERR("PIN code is not 16 bytes long");
2570 err
= send_pin_code_neg_reply(sk
, hdev
, &ncp
);
2572 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
2573 MGMT_STATUS_INVALID_PARAMS
);
2578 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_REPLY
, hdev
, data
, len
);
2584 bacpy(&reply
.bdaddr
, &cp
->addr
.bdaddr
);
2585 reply
.pin_len
= cp
->pin_len
;
2586 memcpy(reply
.pin_code
, cp
->pin_code
, sizeof(reply
.pin_code
));
2588 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_REPLY
, sizeof(reply
), &reply
);
2590 mgmt_pending_remove(cmd
);
2593 hci_dev_unlock(hdev
);
2597 static int set_io_capability(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2600 struct mgmt_cp_set_io_capability
*cp
= data
;
2606 hdev
->io_capability
= cp
->io_capability
;
2608 BT_DBG("%s IO capability set to 0x%02x", hdev
->name
,
2609 hdev
->io_capability
);
2611 hci_dev_unlock(hdev
);
2613 return cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_IO_CAPABILITY
, 0, NULL
,
2617 static struct pending_cmd
*find_pairing(struct hci_conn
*conn
)
2619 struct hci_dev
*hdev
= conn
->hdev
;
2620 struct pending_cmd
*cmd
;
2622 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
2623 if (cmd
->opcode
!= MGMT_OP_PAIR_DEVICE
)
2626 if (cmd
->user_data
!= conn
)
2635 static void pairing_complete(struct pending_cmd
*cmd
, u8 status
)
2637 struct mgmt_rp_pair_device rp
;
2638 struct hci_conn
*conn
= cmd
->user_data
;
2640 bacpy(&rp
.addr
.bdaddr
, &conn
->dst
);
2641 rp
.addr
.type
= link_to_bdaddr(conn
->type
, conn
->dst_type
);
2643 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_PAIR_DEVICE
, status
,
2646 /* So we don't get further callbacks for this connection */
2647 conn
->connect_cfm_cb
= NULL
;
2648 conn
->security_cfm_cb
= NULL
;
2649 conn
->disconn_cfm_cb
= NULL
;
2651 hci_conn_drop(conn
);
2653 mgmt_pending_remove(cmd
);
2656 static void pairing_complete_cb(struct hci_conn
*conn
, u8 status
)
2658 struct pending_cmd
*cmd
;
2660 BT_DBG("status %u", status
);
2662 cmd
= find_pairing(conn
);
2664 BT_DBG("Unable to find a pending command");
2666 pairing_complete(cmd
, mgmt_status(status
));
2669 static void le_connect_complete_cb(struct hci_conn
*conn
, u8 status
)
2671 struct pending_cmd
*cmd
;
2673 BT_DBG("status %u", status
);
2678 cmd
= find_pairing(conn
);
2680 BT_DBG("Unable to find a pending command");
2682 pairing_complete(cmd
, mgmt_status(status
));
2685 static int pair_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2688 struct mgmt_cp_pair_device
*cp
= data
;
2689 struct mgmt_rp_pair_device rp
;
2690 struct pending_cmd
*cmd
;
2691 u8 sec_level
, auth_type
;
2692 struct hci_conn
*conn
;
2697 memset(&rp
, 0, sizeof(rp
));
2698 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
2699 rp
.addr
.type
= cp
->addr
.type
;
2701 if (!bdaddr_type_is_valid(cp
->addr
.type
))
2702 return cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
2703 MGMT_STATUS_INVALID_PARAMS
,
2708 if (!hdev_is_powered(hdev
)) {
2709 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
2710 MGMT_STATUS_NOT_POWERED
, &rp
, sizeof(rp
));
2714 sec_level
= BT_SECURITY_MEDIUM
;
2715 if (cp
->io_cap
== 0x03)
2716 auth_type
= HCI_AT_DEDICATED_BONDING
;
2718 auth_type
= HCI_AT_DEDICATED_BONDING_MITM
;
2720 if (cp
->addr
.type
== BDADDR_BREDR
)
2721 conn
= hci_connect(hdev
, ACL_LINK
, &cp
->addr
.bdaddr
,
2722 cp
->addr
.type
, sec_level
, auth_type
);
2724 conn
= hci_connect(hdev
, LE_LINK
, &cp
->addr
.bdaddr
,
2725 cp
->addr
.type
, sec_level
, auth_type
);
2730 if (PTR_ERR(conn
) == -EBUSY
)
2731 status
= MGMT_STATUS_BUSY
;
2733 status
= MGMT_STATUS_CONNECT_FAILED
;
2735 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
2741 if (conn
->connect_cfm_cb
) {
2742 hci_conn_drop(conn
);
2743 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
2744 MGMT_STATUS_BUSY
, &rp
, sizeof(rp
));
2748 cmd
= mgmt_pending_add(sk
, MGMT_OP_PAIR_DEVICE
, hdev
, data
, len
);
2751 hci_conn_drop(conn
);
2755 /* For LE, just connecting isn't a proof that the pairing finished */
2756 if (cp
->addr
.type
== BDADDR_BREDR
)
2757 conn
->connect_cfm_cb
= pairing_complete_cb
;
2759 conn
->connect_cfm_cb
= le_connect_complete_cb
;
2761 conn
->security_cfm_cb
= pairing_complete_cb
;
2762 conn
->disconn_cfm_cb
= pairing_complete_cb
;
2763 conn
->io_capability
= cp
->io_cap
;
2764 cmd
->user_data
= conn
;
2766 if (conn
->state
== BT_CONNECTED
&&
2767 hci_conn_security(conn
, sec_level
, auth_type
))
2768 pairing_complete(cmd
, 0);
2773 hci_dev_unlock(hdev
);
2777 static int cancel_pair_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2780 struct mgmt_addr_info
*addr
= data
;
2781 struct pending_cmd
*cmd
;
2782 struct hci_conn
*conn
;
2789 if (!hdev_is_powered(hdev
)) {
2790 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
,
2791 MGMT_STATUS_NOT_POWERED
);
2795 cmd
= mgmt_pending_find(MGMT_OP_PAIR_DEVICE
, hdev
);
2797 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
,
2798 MGMT_STATUS_INVALID_PARAMS
);
2802 conn
= cmd
->user_data
;
2804 if (bacmp(&addr
->bdaddr
, &conn
->dst
) != 0) {
2805 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
,
2806 MGMT_STATUS_INVALID_PARAMS
);
2810 pairing_complete(cmd
, MGMT_STATUS_CANCELLED
);
2812 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
, 0,
2813 addr
, sizeof(*addr
));
2815 hci_dev_unlock(hdev
);
2819 static int user_pairing_resp(struct sock
*sk
, struct hci_dev
*hdev
,
2820 struct mgmt_addr_info
*addr
, u16 mgmt_op
,
2821 u16 hci_op
, __le32 passkey
)
2823 struct pending_cmd
*cmd
;
2824 struct hci_conn
*conn
;
2829 if (!hdev_is_powered(hdev
)) {
2830 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
2831 MGMT_STATUS_NOT_POWERED
, addr
,
2836 if (addr
->type
== BDADDR_BREDR
)
2837 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &addr
->bdaddr
);
2839 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &addr
->bdaddr
);
2842 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
2843 MGMT_STATUS_NOT_CONNECTED
, addr
,
2848 if (addr
->type
== BDADDR_LE_PUBLIC
|| addr
->type
== BDADDR_LE_RANDOM
) {
2849 /* Continue with pairing via SMP */
2850 err
= smp_user_confirm_reply(conn
, mgmt_op
, passkey
);
2853 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
2854 MGMT_STATUS_SUCCESS
, addr
,
2857 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
2858 MGMT_STATUS_FAILED
, addr
,
2864 cmd
= mgmt_pending_add(sk
, mgmt_op
, hdev
, addr
, sizeof(*addr
));
2870 /* Continue with pairing via HCI */
2871 if (hci_op
== HCI_OP_USER_PASSKEY_REPLY
) {
2872 struct hci_cp_user_passkey_reply cp
;
2874 bacpy(&cp
.bdaddr
, &addr
->bdaddr
);
2875 cp
.passkey
= passkey
;
2876 err
= hci_send_cmd(hdev
, hci_op
, sizeof(cp
), &cp
);
2878 err
= hci_send_cmd(hdev
, hci_op
, sizeof(addr
->bdaddr
),
2882 mgmt_pending_remove(cmd
);
2885 hci_dev_unlock(hdev
);
2889 static int pin_code_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
2890 void *data
, u16 len
)
2892 struct mgmt_cp_pin_code_neg_reply
*cp
= data
;
2896 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
2897 MGMT_OP_PIN_CODE_NEG_REPLY
,
2898 HCI_OP_PIN_CODE_NEG_REPLY
, 0);
2901 static int user_confirm_reply(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2904 struct mgmt_cp_user_confirm_reply
*cp
= data
;
2908 if (len
!= sizeof(*cp
))
2909 return cmd_status(sk
, hdev
->id
, MGMT_OP_USER_CONFIRM_REPLY
,
2910 MGMT_STATUS_INVALID_PARAMS
);
2912 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
2913 MGMT_OP_USER_CONFIRM_REPLY
,
2914 HCI_OP_USER_CONFIRM_REPLY
, 0);
2917 static int user_confirm_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
2918 void *data
, u16 len
)
2920 struct mgmt_cp_user_confirm_neg_reply
*cp
= data
;
2924 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
2925 MGMT_OP_USER_CONFIRM_NEG_REPLY
,
2926 HCI_OP_USER_CONFIRM_NEG_REPLY
, 0);
2929 static int user_passkey_reply(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2932 struct mgmt_cp_user_passkey_reply
*cp
= data
;
2936 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
2937 MGMT_OP_USER_PASSKEY_REPLY
,
2938 HCI_OP_USER_PASSKEY_REPLY
, cp
->passkey
);
2941 static int user_passkey_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
2942 void *data
, u16 len
)
2944 struct mgmt_cp_user_passkey_neg_reply
*cp
= data
;
2948 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
2949 MGMT_OP_USER_PASSKEY_NEG_REPLY
,
2950 HCI_OP_USER_PASSKEY_NEG_REPLY
, 0);
2953 static void update_name(struct hci_request
*req
)
2955 struct hci_dev
*hdev
= req
->hdev
;
2956 struct hci_cp_write_local_name cp
;
2958 memcpy(cp
.name
, hdev
->dev_name
, sizeof(cp
.name
));
2960 hci_req_add(req
, HCI_OP_WRITE_LOCAL_NAME
, sizeof(cp
), &cp
);
2963 static void set_name_complete(struct hci_dev
*hdev
, u8 status
)
2965 struct mgmt_cp_set_local_name
*cp
;
2966 struct pending_cmd
*cmd
;
2968 BT_DBG("status 0x%02x", status
);
2972 cmd
= mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME
, hdev
);
2979 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
,
2980 mgmt_status(status
));
2982 cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
, 0,
2985 mgmt_pending_remove(cmd
);
2988 hci_dev_unlock(hdev
);
2991 static int set_local_name(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2994 struct mgmt_cp_set_local_name
*cp
= data
;
2995 struct pending_cmd
*cmd
;
2996 struct hci_request req
;
3003 /* If the old values are the same as the new ones just return a
3004 * direct command complete event.
3006 if (!memcmp(hdev
->dev_name
, cp
->name
, sizeof(hdev
->dev_name
)) &&
3007 !memcmp(hdev
->short_name
, cp
->short_name
,
3008 sizeof(hdev
->short_name
))) {
3009 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
, 0,
3014 memcpy(hdev
->short_name
, cp
->short_name
, sizeof(hdev
->short_name
));
3016 if (!hdev_is_powered(hdev
)) {
3017 memcpy(hdev
->dev_name
, cp
->name
, sizeof(hdev
->dev_name
));
3019 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
, 0,
3024 err
= mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED
, hdev
, data
, len
,
3030 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LOCAL_NAME
, hdev
, data
, len
);
3036 memcpy(hdev
->dev_name
, cp
->name
, sizeof(hdev
->dev_name
));
3038 hci_req_init(&req
, hdev
);
3040 if (lmp_bredr_capable(hdev
)) {
3045 /* The name is stored in the scan response data and so
3046 * no need to udpate the advertising data here.
3048 if (lmp_le_capable(hdev
))
3049 update_scan_rsp_data(&req
);
3051 err
= hci_req_run(&req
, set_name_complete
);
3053 mgmt_pending_remove(cmd
);
3056 hci_dev_unlock(hdev
);
3060 static int read_local_oob_data(struct sock
*sk
, struct hci_dev
*hdev
,
3061 void *data
, u16 data_len
)
3063 struct pending_cmd
*cmd
;
3066 BT_DBG("%s", hdev
->name
);
3070 if (!hdev_is_powered(hdev
)) {
3071 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
3072 MGMT_STATUS_NOT_POWERED
);
3076 if (!lmp_ssp_capable(hdev
)) {
3077 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
3078 MGMT_STATUS_NOT_SUPPORTED
);
3082 if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
)) {
3083 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
3088 cmd
= mgmt_pending_add(sk
, MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
, NULL
, 0);
3094 if (test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
))
3095 err
= hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_OOB_EXT_DATA
,
3098 err
= hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_OOB_DATA
, 0, NULL
);
3101 mgmt_pending_remove(cmd
);
3104 hci_dev_unlock(hdev
);
3108 static int add_remote_oob_data(struct sock
*sk
, struct hci_dev
*hdev
,
3109 void *data
, u16 len
)
3113 BT_DBG("%s ", hdev
->name
);
3117 if (len
== MGMT_ADD_REMOTE_OOB_DATA_SIZE
) {
3118 struct mgmt_cp_add_remote_oob_data
*cp
= data
;
3121 err
= hci_add_remote_oob_data(hdev
, &cp
->addr
.bdaddr
,
3122 cp
->hash
, cp
->randomizer
);
3124 status
= MGMT_STATUS_FAILED
;
3126 status
= MGMT_STATUS_SUCCESS
;
3128 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
3129 status
, &cp
->addr
, sizeof(cp
->addr
));
3130 } else if (len
== MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE
) {
3131 struct mgmt_cp_add_remote_oob_ext_data
*cp
= data
;
3134 err
= hci_add_remote_oob_ext_data(hdev
, &cp
->addr
.bdaddr
,
3140 status
= MGMT_STATUS_FAILED
;
3142 status
= MGMT_STATUS_SUCCESS
;
3144 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
3145 status
, &cp
->addr
, sizeof(cp
->addr
));
3147 BT_ERR("add_remote_oob_data: invalid length of %u bytes", len
);
3148 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
3149 MGMT_STATUS_INVALID_PARAMS
);
3152 hci_dev_unlock(hdev
);
3156 static int remove_remote_oob_data(struct sock
*sk
, struct hci_dev
*hdev
,
3157 void *data
, u16 len
)
3159 struct mgmt_cp_remove_remote_oob_data
*cp
= data
;
3163 BT_DBG("%s", hdev
->name
);
3167 err
= hci_remove_remote_oob_data(hdev
, &cp
->addr
.bdaddr
);
3169 status
= MGMT_STATUS_INVALID_PARAMS
;
3171 status
= MGMT_STATUS_SUCCESS
;
3173 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
3174 status
, &cp
->addr
, sizeof(cp
->addr
));
3176 hci_dev_unlock(hdev
);
3180 static int mgmt_start_discovery_failed(struct hci_dev
*hdev
, u8 status
)
3182 struct pending_cmd
*cmd
;
3186 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
3188 cmd
= mgmt_pending_find(MGMT_OP_START_DISCOVERY
, hdev
);
3192 type
= hdev
->discovery
.type
;
3194 err
= cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, mgmt_status(status
),
3195 &type
, sizeof(type
));
3196 mgmt_pending_remove(cmd
);
3201 static void start_discovery_complete(struct hci_dev
*hdev
, u8 status
)
3203 BT_DBG("status %d", status
);
3207 mgmt_start_discovery_failed(hdev
, status
);
3208 hci_dev_unlock(hdev
);
3213 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
3214 hci_dev_unlock(hdev
);
3216 switch (hdev
->discovery
.type
) {
3217 case DISCOV_TYPE_LE
:
3218 queue_delayed_work(hdev
->workqueue
, &hdev
->le_scan_disable
,
3222 case DISCOV_TYPE_INTERLEAVED
:
3223 queue_delayed_work(hdev
->workqueue
, &hdev
->le_scan_disable
,
3224 DISCOV_INTERLEAVED_TIMEOUT
);
3227 case DISCOV_TYPE_BREDR
:
3231 BT_ERR("Invalid discovery type %d", hdev
->discovery
.type
);
3235 static int start_discovery(struct sock
*sk
, struct hci_dev
*hdev
,
3236 void *data
, u16 len
)
3238 struct mgmt_cp_start_discovery
*cp
= data
;
3239 struct pending_cmd
*cmd
;
3240 struct hci_cp_le_set_scan_param param_cp
;
3241 struct hci_cp_le_set_scan_enable enable_cp
;
3242 struct hci_cp_inquiry inq_cp
;
3243 struct hci_request req
;
3244 /* General inquiry access code (GIAC) */
3245 u8 lap
[3] = { 0x33, 0x8b, 0x9e };
3249 BT_DBG("%s", hdev
->name
);
3253 if (!hdev_is_powered(hdev
)) {
3254 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3255 MGMT_STATUS_NOT_POWERED
);
3259 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
)) {
3260 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3265 if (hdev
->discovery
.state
!= DISCOVERY_STOPPED
) {
3266 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3271 cmd
= mgmt_pending_add(sk
, MGMT_OP_START_DISCOVERY
, hdev
, NULL
, 0);
3277 hdev
->discovery
.type
= cp
->type
;
3279 hci_req_init(&req
, hdev
);
3281 switch (hdev
->discovery
.type
) {
3282 case DISCOV_TYPE_BREDR
:
3283 status
= mgmt_bredr_support(hdev
);
3285 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3287 mgmt_pending_remove(cmd
);
3291 if (test_bit(HCI_INQUIRY
, &hdev
->flags
)) {
3292 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3294 mgmt_pending_remove(cmd
);
3298 hci_inquiry_cache_flush(hdev
);
3300 memset(&inq_cp
, 0, sizeof(inq_cp
));
3301 memcpy(&inq_cp
.lap
, lap
, sizeof(inq_cp
.lap
));
3302 inq_cp
.length
= DISCOV_BREDR_INQUIRY_LEN
;
3303 hci_req_add(&req
, HCI_OP_INQUIRY
, sizeof(inq_cp
), &inq_cp
);
3306 case DISCOV_TYPE_LE
:
3307 case DISCOV_TYPE_INTERLEAVED
:
3308 status
= mgmt_le_support(hdev
);
3310 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3312 mgmt_pending_remove(cmd
);
3316 if (hdev
->discovery
.type
== DISCOV_TYPE_INTERLEAVED
&&
3317 !test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
3318 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3319 MGMT_STATUS_NOT_SUPPORTED
);
3320 mgmt_pending_remove(cmd
);
3324 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
)) {
3325 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3326 MGMT_STATUS_REJECTED
);
3327 mgmt_pending_remove(cmd
);
3331 if (test_bit(HCI_LE_SCAN
, &hdev
->dev_flags
)) {
3332 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3334 mgmt_pending_remove(cmd
);
3338 memset(¶m_cp
, 0, sizeof(param_cp
));
3339 param_cp
.type
= LE_SCAN_ACTIVE
;
3340 param_cp
.interval
= cpu_to_le16(DISCOV_LE_SCAN_INT
);
3341 param_cp
.window
= cpu_to_le16(DISCOV_LE_SCAN_WIN
);
3342 param_cp
.own_address_type
= hdev
->own_addr_type
;
3343 hci_req_add(&req
, HCI_OP_LE_SET_SCAN_PARAM
, sizeof(param_cp
),
3346 memset(&enable_cp
, 0, sizeof(enable_cp
));
3347 enable_cp
.enable
= LE_SCAN_ENABLE
;
3348 enable_cp
.filter_dup
= LE_SCAN_FILTER_DUP_ENABLE
;
3349 hci_req_add(&req
, HCI_OP_LE_SET_SCAN_ENABLE
, sizeof(enable_cp
),
3354 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3355 MGMT_STATUS_INVALID_PARAMS
);
3356 mgmt_pending_remove(cmd
);
3360 err
= hci_req_run(&req
, start_discovery_complete
);
3362 mgmt_pending_remove(cmd
);
3364 hci_discovery_set_state(hdev
, DISCOVERY_STARTING
);
3367 hci_dev_unlock(hdev
);
3371 static int mgmt_stop_discovery_failed(struct hci_dev
*hdev
, u8 status
)
3373 struct pending_cmd
*cmd
;
3376 cmd
= mgmt_pending_find(MGMT_OP_STOP_DISCOVERY
, hdev
);
3380 err
= cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, mgmt_status(status
),
3381 &hdev
->discovery
.type
, sizeof(hdev
->discovery
.type
));
3382 mgmt_pending_remove(cmd
);
3387 static void stop_discovery_complete(struct hci_dev
*hdev
, u8 status
)
3389 BT_DBG("status %d", status
);
3394 mgmt_stop_discovery_failed(hdev
, status
);
3398 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
3401 hci_dev_unlock(hdev
);
3404 static int stop_discovery(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3407 struct mgmt_cp_stop_discovery
*mgmt_cp
= data
;
3408 struct pending_cmd
*cmd
;
3409 struct hci_cp_remote_name_req_cancel cp
;
3410 struct inquiry_entry
*e
;
3411 struct hci_request req
;
3412 struct hci_cp_le_set_scan_enable enable_cp
;
3415 BT_DBG("%s", hdev
->name
);
3419 if (!hci_discovery_active(hdev
)) {
3420 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_STOP_DISCOVERY
,
3421 MGMT_STATUS_REJECTED
, &mgmt_cp
->type
,
3422 sizeof(mgmt_cp
->type
));
3426 if (hdev
->discovery
.type
!= mgmt_cp
->type
) {
3427 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_STOP_DISCOVERY
,
3428 MGMT_STATUS_INVALID_PARAMS
, &mgmt_cp
->type
,
3429 sizeof(mgmt_cp
->type
));
3433 cmd
= mgmt_pending_add(sk
, MGMT_OP_STOP_DISCOVERY
, hdev
, NULL
, 0);
3439 hci_req_init(&req
, hdev
);
3441 switch (hdev
->discovery
.state
) {
3442 case DISCOVERY_FINDING
:
3443 if (test_bit(HCI_INQUIRY
, &hdev
->flags
)) {
3444 hci_req_add(&req
, HCI_OP_INQUIRY_CANCEL
, 0, NULL
);
3446 cancel_delayed_work(&hdev
->le_scan_disable
);
3448 memset(&enable_cp
, 0, sizeof(enable_cp
));
3449 enable_cp
.enable
= LE_SCAN_DISABLE
;
3450 hci_req_add(&req
, HCI_OP_LE_SET_SCAN_ENABLE
,
3451 sizeof(enable_cp
), &enable_cp
);
3456 case DISCOVERY_RESOLVING
:
3457 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
,
3460 mgmt_pending_remove(cmd
);
3461 err
= cmd_complete(sk
, hdev
->id
,
3462 MGMT_OP_STOP_DISCOVERY
, 0,
3464 sizeof(mgmt_cp
->type
));
3465 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
3469 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
3470 hci_req_add(&req
, HCI_OP_REMOTE_NAME_REQ_CANCEL
, sizeof(cp
),
3476 BT_DBG("unknown discovery state %u", hdev
->discovery
.state
);
3478 mgmt_pending_remove(cmd
);
3479 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_STOP_DISCOVERY
,
3480 MGMT_STATUS_FAILED
, &mgmt_cp
->type
,
3481 sizeof(mgmt_cp
->type
));
3485 err
= hci_req_run(&req
, stop_discovery_complete
);
3487 mgmt_pending_remove(cmd
);
3489 hci_discovery_set_state(hdev
, DISCOVERY_STOPPING
);
3492 hci_dev_unlock(hdev
);
3496 static int confirm_name(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3499 struct mgmt_cp_confirm_name
*cp
= data
;
3500 struct inquiry_entry
*e
;
3503 BT_DBG("%s", hdev
->name
);
3507 if (!hci_discovery_active(hdev
)) {
3508 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CONFIRM_NAME
,
3509 MGMT_STATUS_FAILED
);
3513 e
= hci_inquiry_cache_lookup_unknown(hdev
, &cp
->addr
.bdaddr
);
3515 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CONFIRM_NAME
,
3516 MGMT_STATUS_INVALID_PARAMS
);
3520 if (cp
->name_known
) {
3521 e
->name_state
= NAME_KNOWN
;
3524 e
->name_state
= NAME_NEEDED
;
3525 hci_inquiry_cache_update_resolve(hdev
, e
);
3528 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_CONFIRM_NAME
, 0, &cp
->addr
,
3532 hci_dev_unlock(hdev
);
3536 static int block_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3539 struct mgmt_cp_block_device
*cp
= data
;
3543 BT_DBG("%s", hdev
->name
);
3545 if (!bdaddr_type_is_valid(cp
->addr
.type
))
3546 return cmd_complete(sk
, hdev
->id
, MGMT_OP_BLOCK_DEVICE
,
3547 MGMT_STATUS_INVALID_PARAMS
,
3548 &cp
->addr
, sizeof(cp
->addr
));
3552 err
= hci_blacklist_add(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
);
3554 status
= MGMT_STATUS_FAILED
;
3556 status
= MGMT_STATUS_SUCCESS
;
3558 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_BLOCK_DEVICE
, status
,
3559 &cp
->addr
, sizeof(cp
->addr
));
3561 hci_dev_unlock(hdev
);
3566 static int unblock_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3569 struct mgmt_cp_unblock_device
*cp
= data
;
3573 BT_DBG("%s", hdev
->name
);
3575 if (!bdaddr_type_is_valid(cp
->addr
.type
))
3576 return cmd_complete(sk
, hdev
->id
, MGMT_OP_UNBLOCK_DEVICE
,
3577 MGMT_STATUS_INVALID_PARAMS
,
3578 &cp
->addr
, sizeof(cp
->addr
));
3582 err
= hci_blacklist_del(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
);
3584 status
= MGMT_STATUS_INVALID_PARAMS
;
3586 status
= MGMT_STATUS_SUCCESS
;
3588 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNBLOCK_DEVICE
, status
,
3589 &cp
->addr
, sizeof(cp
->addr
));
3591 hci_dev_unlock(hdev
);
3596 static int set_device_id(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3599 struct mgmt_cp_set_device_id
*cp
= data
;
3600 struct hci_request req
;
3604 BT_DBG("%s", hdev
->name
);
3606 source
= __le16_to_cpu(cp
->source
);
3608 if (source
> 0x0002)
3609 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEVICE_ID
,
3610 MGMT_STATUS_INVALID_PARAMS
);
3614 hdev
->devid_source
= source
;
3615 hdev
->devid_vendor
= __le16_to_cpu(cp
->vendor
);
3616 hdev
->devid_product
= __le16_to_cpu(cp
->product
);
3617 hdev
->devid_version
= __le16_to_cpu(cp
->version
);
3619 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_DEVICE_ID
, 0, NULL
, 0);
3621 hci_req_init(&req
, hdev
);
3623 hci_req_run(&req
, NULL
);
3625 hci_dev_unlock(hdev
);
3630 static void set_advertising_complete(struct hci_dev
*hdev
, u8 status
)
3632 struct cmd_lookup match
= { NULL
, hdev
};
3635 u8 mgmt_err
= mgmt_status(status
);
3637 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING
, hdev
,
3638 cmd_status_rsp
, &mgmt_err
);
3642 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING
, hdev
, settings_rsp
,
3645 new_settings(hdev
, match
.sk
);
3651 static int set_advertising(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3654 struct mgmt_mode
*cp
= data
;
3655 struct pending_cmd
*cmd
;
3656 struct hci_request req
;
3657 u8 val
, enabled
, status
;
3660 BT_DBG("request for %s", hdev
->name
);
3662 status
= mgmt_le_support(hdev
);
3664 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_ADVERTISING
,
3667 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
3668 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_ADVERTISING
,
3669 MGMT_STATUS_INVALID_PARAMS
);
3674 enabled
= test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
3676 /* The following conditions are ones which mean that we should
3677 * not do any HCI communication but directly send a mgmt
3678 * response to user space (after toggling the flag if
3681 if (!hdev_is_powered(hdev
) || val
== enabled
||
3682 hci_conn_num(hdev
, LE_LINK
) > 0) {
3683 bool changed
= false;
3685 if (val
!= test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
)) {
3686 change_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
3690 err
= send_settings_rsp(sk
, MGMT_OP_SET_ADVERTISING
, hdev
);
3695 err
= new_settings(hdev
, sk
);
3700 if (mgmt_pending_find(MGMT_OP_SET_ADVERTISING
, hdev
) ||
3701 mgmt_pending_find(MGMT_OP_SET_LE
, hdev
)) {
3702 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_ADVERTISING
,
3707 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_ADVERTISING
, hdev
, data
, len
);
3713 hci_req_init(&req
, hdev
);
3716 enable_advertising(&req
);
3718 disable_advertising(&req
);
3720 err
= hci_req_run(&req
, set_advertising_complete
);
3722 mgmt_pending_remove(cmd
);
3725 hci_dev_unlock(hdev
);
3729 static int set_static_address(struct sock
*sk
, struct hci_dev
*hdev
,
3730 void *data
, u16 len
)
3732 struct mgmt_cp_set_static_address
*cp
= data
;
3735 BT_DBG("%s", hdev
->name
);
3737 if (!lmp_le_capable(hdev
))
3738 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_STATIC_ADDRESS
,
3739 MGMT_STATUS_NOT_SUPPORTED
);
3741 if (hdev_is_powered(hdev
))
3742 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_STATIC_ADDRESS
,
3743 MGMT_STATUS_REJECTED
);
3745 if (bacmp(&cp
->bdaddr
, BDADDR_ANY
)) {
3746 if (!bacmp(&cp
->bdaddr
, BDADDR_NONE
))
3747 return cmd_status(sk
, hdev
->id
,
3748 MGMT_OP_SET_STATIC_ADDRESS
,
3749 MGMT_STATUS_INVALID_PARAMS
);
3751 /* Two most significant bits shall be set */
3752 if ((cp
->bdaddr
.b
[5] & 0xc0) != 0xc0)
3753 return cmd_status(sk
, hdev
->id
,
3754 MGMT_OP_SET_STATIC_ADDRESS
,
3755 MGMT_STATUS_INVALID_PARAMS
);
3760 bacpy(&hdev
->static_addr
, &cp
->bdaddr
);
3762 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_STATIC_ADDRESS
, 0, NULL
, 0);
3764 hci_dev_unlock(hdev
);
3769 static int set_scan_params(struct sock
*sk
, struct hci_dev
*hdev
,
3770 void *data
, u16 len
)
3772 struct mgmt_cp_set_scan_params
*cp
= data
;
3773 __u16 interval
, window
;
3776 BT_DBG("%s", hdev
->name
);
3778 if (!lmp_le_capable(hdev
))
3779 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
3780 MGMT_STATUS_NOT_SUPPORTED
);
3782 interval
= __le16_to_cpu(cp
->interval
);
3784 if (interval
< 0x0004 || interval
> 0x4000)
3785 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
3786 MGMT_STATUS_INVALID_PARAMS
);
3788 window
= __le16_to_cpu(cp
->window
);
3790 if (window
< 0x0004 || window
> 0x4000)
3791 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
3792 MGMT_STATUS_INVALID_PARAMS
);
3794 if (window
> interval
)
3795 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
3796 MGMT_STATUS_INVALID_PARAMS
);
3800 hdev
->le_scan_interval
= interval
;
3801 hdev
->le_scan_window
= window
;
3803 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
, 0, NULL
, 0);
3805 hci_dev_unlock(hdev
);
3810 static void fast_connectable_complete(struct hci_dev
*hdev
, u8 status
)
3812 struct pending_cmd
*cmd
;
3814 BT_DBG("status 0x%02x", status
);
3818 cmd
= mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE
, hdev
);
3823 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3824 mgmt_status(status
));
3826 struct mgmt_mode
*cp
= cmd
->param
;
3829 set_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
);
3831 clear_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
);
3833 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_FAST_CONNECTABLE
, hdev
);
3834 new_settings(hdev
, cmd
->sk
);
3837 mgmt_pending_remove(cmd
);
3840 hci_dev_unlock(hdev
);
3843 static int set_fast_connectable(struct sock
*sk
, struct hci_dev
*hdev
,
3844 void *data
, u16 len
)
3846 struct mgmt_mode
*cp
= data
;
3847 struct pending_cmd
*cmd
;
3848 struct hci_request req
;
3851 BT_DBG("%s", hdev
->name
);
3853 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
) ||
3854 hdev
->hci_ver
< BLUETOOTH_VER_1_2
)
3855 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3856 MGMT_STATUS_NOT_SUPPORTED
);
3858 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
3859 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3860 MGMT_STATUS_INVALID_PARAMS
);
3862 if (!hdev_is_powered(hdev
))
3863 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3864 MGMT_STATUS_NOT_POWERED
);
3866 if (!test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
3867 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3868 MGMT_STATUS_REJECTED
);
3872 if (mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE
, hdev
)) {
3873 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3878 if (!!cp
->val
== test_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
)) {
3879 err
= send_settings_rsp(sk
, MGMT_OP_SET_FAST_CONNECTABLE
,
3884 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_FAST_CONNECTABLE
, hdev
,
3891 hci_req_init(&req
, hdev
);
3893 write_fast_connectable(&req
, cp
->val
);
3895 err
= hci_req_run(&req
, fast_connectable_complete
);
3897 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3898 MGMT_STATUS_FAILED
);
3899 mgmt_pending_remove(cmd
);
3903 hci_dev_unlock(hdev
);
3908 static void set_bredr_scan(struct hci_request
*req
)
3910 struct hci_dev
*hdev
= req
->hdev
;
3913 /* Ensure that fast connectable is disabled. This function will
3914 * not do anything if the page scan parameters are already what
3917 write_fast_connectable(req
, false);
3919 if (test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
3921 if (test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
3922 scan
|= SCAN_INQUIRY
;
3925 hci_req_add(req
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
3928 static void set_bredr_complete(struct hci_dev
*hdev
, u8 status
)
3930 struct pending_cmd
*cmd
;
3932 BT_DBG("status 0x%02x", status
);
3936 cmd
= mgmt_pending_find(MGMT_OP_SET_BREDR
, hdev
);
3941 u8 mgmt_err
= mgmt_status(status
);
3943 /* We need to restore the flag if related HCI commands
3946 clear_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
);
3948 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_err
);
3950 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_BREDR
, hdev
);
3951 new_settings(hdev
, cmd
->sk
);
3954 mgmt_pending_remove(cmd
);
3957 hci_dev_unlock(hdev
);
3960 static int set_bredr(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
3962 struct mgmt_mode
*cp
= data
;
3963 struct pending_cmd
*cmd
;
3964 struct hci_request req
;
3967 BT_DBG("request for %s", hdev
->name
);
3969 if (!lmp_bredr_capable(hdev
) || !lmp_le_capable(hdev
))
3970 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
3971 MGMT_STATUS_NOT_SUPPORTED
);
3973 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
3974 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
3975 MGMT_STATUS_REJECTED
);
3977 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
3978 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
3979 MGMT_STATUS_INVALID_PARAMS
);
3983 if (cp
->val
== test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
3984 err
= send_settings_rsp(sk
, MGMT_OP_SET_BREDR
, hdev
);
3988 if (!hdev_is_powered(hdev
)) {
3990 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
3991 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
3992 clear_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
);
3993 clear_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
);
3994 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
3997 change_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
);
3999 err
= send_settings_rsp(sk
, MGMT_OP_SET_BREDR
, hdev
);
4003 err
= new_settings(hdev
, sk
);
4007 /* Reject disabling when powered on */
4009 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
4010 MGMT_STATUS_REJECTED
);
4014 if (mgmt_pending_find(MGMT_OP_SET_BREDR
, hdev
)) {
4015 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
4020 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_BREDR
, hdev
, data
, len
);
4026 /* We need to flip the bit already here so that update_adv_data
4027 * generates the correct flags.
4029 set_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
);
4031 hci_req_init(&req
, hdev
);
4033 if (test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
4034 set_bredr_scan(&req
);
4036 /* Since only the advertising data flags will change, there
4037 * is no need to update the scan response data.
4039 update_adv_data(&req
);
4041 err
= hci_req_run(&req
, set_bredr_complete
);
4043 mgmt_pending_remove(cmd
);
4046 hci_dev_unlock(hdev
);
4050 static int set_secure_conn(struct sock
*sk
, struct hci_dev
*hdev
,
4051 void *data
, u16 len
)
4053 struct mgmt_mode
*cp
= data
;
4054 struct pending_cmd
*cmd
;
4058 BT_DBG("request for %s", hdev
->name
);
4060 status
= mgmt_bredr_support(hdev
);
4062 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4065 if (!lmp_sc_capable(hdev
) &&
4066 !test_bit(HCI_FORCE_SC
, &hdev
->dev_flags
))
4067 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4068 MGMT_STATUS_NOT_SUPPORTED
);
4070 if (cp
->val
!= 0x00 && cp
->val
!= 0x01 && cp
->val
!= 0x02)
4071 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4072 MGMT_STATUS_INVALID_PARAMS
);
4076 if (!hdev_is_powered(hdev
)) {
4080 changed
= !test_and_set_bit(HCI_SC_ENABLED
,
4082 if (cp
->val
== 0x02)
4083 set_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
4085 clear_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
4087 changed
= test_and_clear_bit(HCI_SC_ENABLED
,
4089 clear_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
4092 err
= send_settings_rsp(sk
, MGMT_OP_SET_SECURE_CONN
, hdev
);
4097 err
= new_settings(hdev
, sk
);
4102 if (mgmt_pending_find(MGMT_OP_SET_SECURE_CONN
, hdev
)) {
4103 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4110 if (val
== test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
) &&
4111 (cp
->val
== 0x02) == test_bit(HCI_SC_ONLY
, &hdev
->dev_flags
)) {
4112 err
= send_settings_rsp(sk
, MGMT_OP_SET_SECURE_CONN
, hdev
);
4116 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_SECURE_CONN
, hdev
, data
, len
);
4122 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SC_SUPPORT
, 1, &val
);
4124 mgmt_pending_remove(cmd
);
4128 if (cp
->val
== 0x02)
4129 set_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
4131 clear_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
4134 hci_dev_unlock(hdev
);
4138 static int set_debug_keys(struct sock
*sk
, struct hci_dev
*hdev
,
4139 void *data
, u16 len
)
4141 struct mgmt_mode
*cp
= data
;
4145 BT_DBG("request for %s", hdev
->name
);
4147 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
4148 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEBUG_KEYS
,
4149 MGMT_STATUS_INVALID_PARAMS
);
4154 changed
= !test_and_set_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
);
4156 changed
= test_and_clear_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
);
4158 err
= send_settings_rsp(sk
, MGMT_OP_SET_DEBUG_KEYS
, hdev
);
4163 err
= new_settings(hdev
, sk
);
4166 hci_dev_unlock(hdev
);
4170 static bool irk_is_valid(struct mgmt_irk_info
*irk
)
4172 switch (irk
->addr
.type
) {
4173 case BDADDR_LE_PUBLIC
:
4176 case BDADDR_LE_RANDOM
:
4177 /* Two most significant bits shall be set */
4178 if ((irk
->addr
.bdaddr
.b
[5] & 0xc0) != 0xc0)
4186 static int load_irks(struct sock
*sk
, struct hci_dev
*hdev
, void *cp_data
,
4189 struct mgmt_cp_load_irks
*cp
= cp_data
;
4190 u16 irk_count
, expected_len
;
4193 BT_DBG("request for %s", hdev
->name
);
4195 if (!lmp_le_capable(hdev
))
4196 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_IRKS
,
4197 MGMT_STATUS_NOT_SUPPORTED
);
4199 irk_count
= __le16_to_cpu(cp
->irk_count
);
4201 expected_len
= sizeof(*cp
) + irk_count
* sizeof(struct mgmt_irk_info
);
4202 if (expected_len
!= len
) {
4203 BT_ERR("load_irks: expected %u bytes, got %u bytes",
4205 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_IRKS
,
4206 MGMT_STATUS_INVALID_PARAMS
);
4209 BT_DBG("%s irk_count %u", hdev
->name
, irk_count
);
4211 for (i
= 0; i
< irk_count
; i
++) {
4212 struct mgmt_irk_info
*key
= &cp
->irks
[i
];
4214 if (!irk_is_valid(key
))
4215 return cmd_status(sk
, hdev
->id
,
4217 MGMT_STATUS_INVALID_PARAMS
);
4222 hci_smp_irks_clear(hdev
);
4224 for (i
= 0; i
< irk_count
; i
++) {
4225 struct mgmt_irk_info
*irk
= &cp
->irks
[i
];
4228 if (irk
->addr
.type
== BDADDR_LE_PUBLIC
)
4229 addr_type
= ADDR_LE_DEV_PUBLIC
;
4231 addr_type
= ADDR_LE_DEV_RANDOM
;
4233 hci_add_irk(hdev
, &irk
->addr
.bdaddr
, addr_type
, irk
->val
,
4237 set_bit(HCI_RPA_RESOLVING
, &hdev
->dev_flags
);
4239 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_LOAD_IRKS
, 0, NULL
, 0);
4241 hci_dev_unlock(hdev
);
4246 static bool ltk_is_valid(struct mgmt_ltk_info
*key
)
4248 if (key
->master
!= 0x00 && key
->master
!= 0x01)
4251 switch (key
->addr
.type
) {
4252 case BDADDR_LE_PUBLIC
:
4255 case BDADDR_LE_RANDOM
:
4256 /* Two most significant bits shall be set */
4257 if ((key
->addr
.bdaddr
.b
[5] & 0xc0) != 0xc0)
4265 static int load_long_term_keys(struct sock
*sk
, struct hci_dev
*hdev
,
4266 void *cp_data
, u16 len
)
4268 struct mgmt_cp_load_long_term_keys
*cp
= cp_data
;
4269 u16 key_count
, expected_len
;
4272 BT_DBG("request for %s", hdev
->name
);
4274 if (!lmp_le_capable(hdev
))
4275 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
4276 MGMT_STATUS_NOT_SUPPORTED
);
4278 key_count
= __le16_to_cpu(cp
->key_count
);
4280 expected_len
= sizeof(*cp
) + key_count
*
4281 sizeof(struct mgmt_ltk_info
);
4282 if (expected_len
!= len
) {
4283 BT_ERR("load_keys: expected %u bytes, got %u bytes",
4285 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
4286 MGMT_STATUS_INVALID_PARAMS
);
4289 BT_DBG("%s key_count %u", hdev
->name
, key_count
);
4291 for (i
= 0; i
< key_count
; i
++) {
4292 struct mgmt_ltk_info
*key
= &cp
->keys
[i
];
4294 if (!ltk_is_valid(key
))
4295 return cmd_status(sk
, hdev
->id
,
4296 MGMT_OP_LOAD_LONG_TERM_KEYS
,
4297 MGMT_STATUS_INVALID_PARAMS
);
4302 hci_smp_ltks_clear(hdev
);
4304 for (i
= 0; i
< key_count
; i
++) {
4305 struct mgmt_ltk_info
*key
= &cp
->keys
[i
];
4308 if (key
->addr
.type
== BDADDR_LE_PUBLIC
)
4309 addr_type
= ADDR_LE_DEV_PUBLIC
;
4311 addr_type
= ADDR_LE_DEV_RANDOM
;
4316 type
= HCI_SMP_LTK_SLAVE
;
4318 hci_add_ltk(hdev
, &key
->addr
.bdaddr
, addr_type
,
4319 type
, 0, key
->type
, key
->val
,
4320 key
->enc_size
, key
->ediv
, key
->rand
);
4323 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_LOAD_LONG_TERM_KEYS
, 0,
4326 hci_dev_unlock(hdev
);
4331 static const struct mgmt_handler
{
4332 int (*func
) (struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
4336 } mgmt_handlers
[] = {
4337 { NULL
}, /* 0x0000 (no command) */
4338 { read_version
, false, MGMT_READ_VERSION_SIZE
},
4339 { read_commands
, false, MGMT_READ_COMMANDS_SIZE
},
4340 { read_index_list
, false, MGMT_READ_INDEX_LIST_SIZE
},
4341 { read_controller_info
, false, MGMT_READ_INFO_SIZE
},
4342 { set_powered
, false, MGMT_SETTING_SIZE
},
4343 { set_discoverable
, false, MGMT_SET_DISCOVERABLE_SIZE
},
4344 { set_connectable
, false, MGMT_SETTING_SIZE
},
4345 { set_fast_connectable
, false, MGMT_SETTING_SIZE
},
4346 { set_pairable
, false, MGMT_SETTING_SIZE
},
4347 { set_link_security
, false, MGMT_SETTING_SIZE
},
4348 { set_ssp
, false, MGMT_SETTING_SIZE
},
4349 { set_hs
, false, MGMT_SETTING_SIZE
},
4350 { set_le
, false, MGMT_SETTING_SIZE
},
4351 { set_dev_class
, false, MGMT_SET_DEV_CLASS_SIZE
},
4352 { set_local_name
, false, MGMT_SET_LOCAL_NAME_SIZE
},
4353 { add_uuid
, false, MGMT_ADD_UUID_SIZE
},
4354 { remove_uuid
, false, MGMT_REMOVE_UUID_SIZE
},
4355 { load_link_keys
, true, MGMT_LOAD_LINK_KEYS_SIZE
},
4356 { load_long_term_keys
, true, MGMT_LOAD_LONG_TERM_KEYS_SIZE
},
4357 { disconnect
, false, MGMT_DISCONNECT_SIZE
},
4358 { get_connections
, false, MGMT_GET_CONNECTIONS_SIZE
},
4359 { pin_code_reply
, false, MGMT_PIN_CODE_REPLY_SIZE
},
4360 { pin_code_neg_reply
, false, MGMT_PIN_CODE_NEG_REPLY_SIZE
},
4361 { set_io_capability
, false, MGMT_SET_IO_CAPABILITY_SIZE
},
4362 { pair_device
, false, MGMT_PAIR_DEVICE_SIZE
},
4363 { cancel_pair_device
, false, MGMT_CANCEL_PAIR_DEVICE_SIZE
},
4364 { unpair_device
, false, MGMT_UNPAIR_DEVICE_SIZE
},
4365 { user_confirm_reply
, false, MGMT_USER_CONFIRM_REPLY_SIZE
},
4366 { user_confirm_neg_reply
, false, MGMT_USER_CONFIRM_NEG_REPLY_SIZE
},
4367 { user_passkey_reply
, false, MGMT_USER_PASSKEY_REPLY_SIZE
},
4368 { user_passkey_neg_reply
, false, MGMT_USER_PASSKEY_NEG_REPLY_SIZE
},
4369 { read_local_oob_data
, false, MGMT_READ_LOCAL_OOB_DATA_SIZE
},
4370 { add_remote_oob_data
, true, MGMT_ADD_REMOTE_OOB_DATA_SIZE
},
4371 { remove_remote_oob_data
, false, MGMT_REMOVE_REMOTE_OOB_DATA_SIZE
},
4372 { start_discovery
, false, MGMT_START_DISCOVERY_SIZE
},
4373 { stop_discovery
, false, MGMT_STOP_DISCOVERY_SIZE
},
4374 { confirm_name
, false, MGMT_CONFIRM_NAME_SIZE
},
4375 { block_device
, false, MGMT_BLOCK_DEVICE_SIZE
},
4376 { unblock_device
, false, MGMT_UNBLOCK_DEVICE_SIZE
},
4377 { set_device_id
, false, MGMT_SET_DEVICE_ID_SIZE
},
4378 { set_advertising
, false, MGMT_SETTING_SIZE
},
4379 { set_bredr
, false, MGMT_SETTING_SIZE
},
4380 { set_static_address
, false, MGMT_SET_STATIC_ADDRESS_SIZE
},
4381 { set_scan_params
, false, MGMT_SET_SCAN_PARAMS_SIZE
},
4382 { set_secure_conn
, false, MGMT_SETTING_SIZE
},
4383 { set_debug_keys
, false, MGMT_SETTING_SIZE
},
4385 { load_irks
, true, MGMT_LOAD_IRKS_SIZE
},
4389 int mgmt_control(struct sock
*sk
, struct msghdr
*msg
, size_t msglen
)
4393 struct mgmt_hdr
*hdr
;
4394 u16 opcode
, index
, len
;
4395 struct hci_dev
*hdev
= NULL
;
4396 const struct mgmt_handler
*handler
;
4399 BT_DBG("got %zu bytes", msglen
);
4401 if (msglen
< sizeof(*hdr
))
4404 buf
= kmalloc(msglen
, GFP_KERNEL
);
4408 if (memcpy_fromiovec(buf
, msg
->msg_iov
, msglen
)) {
4414 opcode
= __le16_to_cpu(hdr
->opcode
);
4415 index
= __le16_to_cpu(hdr
->index
);
4416 len
= __le16_to_cpu(hdr
->len
);
4418 if (len
!= msglen
- sizeof(*hdr
)) {
4423 if (index
!= MGMT_INDEX_NONE
) {
4424 hdev
= hci_dev_get(index
);
4426 err
= cmd_status(sk
, index
, opcode
,
4427 MGMT_STATUS_INVALID_INDEX
);
4431 if (test_bit(HCI_SETUP
, &hdev
->dev_flags
) ||
4432 test_bit(HCI_USER_CHANNEL
, &hdev
->dev_flags
)) {
4433 err
= cmd_status(sk
, index
, opcode
,
4434 MGMT_STATUS_INVALID_INDEX
);
4439 if (opcode
>= ARRAY_SIZE(mgmt_handlers
) ||
4440 mgmt_handlers
[opcode
].func
== NULL
) {
4441 BT_DBG("Unknown op %u", opcode
);
4442 err
= cmd_status(sk
, index
, opcode
,
4443 MGMT_STATUS_UNKNOWN_COMMAND
);
4447 if ((hdev
&& opcode
< MGMT_OP_READ_INFO
) ||
4448 (!hdev
&& opcode
>= MGMT_OP_READ_INFO
)) {
4449 err
= cmd_status(sk
, index
, opcode
,
4450 MGMT_STATUS_INVALID_INDEX
);
4454 handler
= &mgmt_handlers
[opcode
];
4456 if ((handler
->var_len
&& len
< handler
->data_len
) ||
4457 (!handler
->var_len
&& len
!= handler
->data_len
)) {
4458 err
= cmd_status(sk
, index
, opcode
,
4459 MGMT_STATUS_INVALID_PARAMS
);
4464 mgmt_init_hdev(sk
, hdev
);
4466 cp
= buf
+ sizeof(*hdr
);
4468 err
= handler
->func(sk
, hdev
, cp
, len
);
4482 void mgmt_index_added(struct hci_dev
*hdev
)
4484 if (hdev
->dev_type
!= HCI_BREDR
)
4487 mgmt_event(MGMT_EV_INDEX_ADDED
, hdev
, NULL
, 0, NULL
);
4490 void mgmt_index_removed(struct hci_dev
*hdev
)
4492 u8 status
= MGMT_STATUS_INVALID_INDEX
;
4494 if (hdev
->dev_type
!= HCI_BREDR
)
4497 mgmt_pending_foreach(0, hdev
, cmd_status_rsp
, &status
);
4499 mgmt_event(MGMT_EV_INDEX_REMOVED
, hdev
, NULL
, 0, NULL
);
4502 static void powered_complete(struct hci_dev
*hdev
, u8 status
)
4504 struct cmd_lookup match
= { NULL
, hdev
};
4506 BT_DBG("status 0x%02x", status
);
4510 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, hdev
, settings_rsp
, &match
);
4512 new_settings(hdev
, match
.sk
);
4514 hci_dev_unlock(hdev
);
4520 static int powered_update_hci(struct hci_dev
*hdev
)
4522 struct hci_request req
;
4525 hci_req_init(&req
, hdev
);
4527 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
) &&
4528 !lmp_host_ssp_capable(hdev
)) {
4531 hci_req_add(&req
, HCI_OP_WRITE_SSP_MODE
, 1, &ssp
);
4534 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
) &&
4535 lmp_bredr_capable(hdev
)) {
4536 struct hci_cp_write_le_host_supported cp
;
4539 cp
.simul
= lmp_le_br_capable(hdev
);
4541 /* Check first if we already have the right
4542 * host state (host features set)
4544 if (cp
.le
!= lmp_host_le_capable(hdev
) ||
4545 cp
.simul
!= lmp_host_le_br_capable(hdev
))
4546 hci_req_add(&req
, HCI_OP_WRITE_LE_HOST_SUPPORTED
,
4550 if (lmp_le_capable(hdev
)) {
4551 /* Set random address to static address if configured */
4552 if (bacmp(&hdev
->static_addr
, BDADDR_ANY
))
4553 hci_req_add(&req
, HCI_OP_LE_SET_RANDOM_ADDR
, 6,
4554 &hdev
->static_addr
);
4556 /* Make sure the controller has a good default for
4557 * advertising data. This also applies to the case
4558 * where BR/EDR was toggled during the AUTO_OFF phase.
4560 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
)) {
4561 update_adv_data(&req
);
4562 update_scan_rsp_data(&req
);
4565 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
4566 enable_advertising(&req
);
4569 link_sec
= test_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
);
4570 if (link_sec
!= test_bit(HCI_AUTH
, &hdev
->flags
))
4571 hci_req_add(&req
, HCI_OP_WRITE_AUTH_ENABLE
,
4572 sizeof(link_sec
), &link_sec
);
4574 if (lmp_bredr_capable(hdev
)) {
4575 if (test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
4576 set_bredr_scan(&req
);
4582 return hci_req_run(&req
, powered_complete
);
4585 int mgmt_powered(struct hci_dev
*hdev
, u8 powered
)
4587 struct cmd_lookup match
= { NULL
, hdev
};
4588 u8 status_not_powered
= MGMT_STATUS_NOT_POWERED
;
4589 u8 zero_cod
[] = { 0, 0, 0 };
4592 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
4596 if (powered_update_hci(hdev
) == 0)
4599 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, hdev
, settings_rsp
,
4604 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, hdev
, settings_rsp
, &match
);
4605 mgmt_pending_foreach(0, hdev
, cmd_status_rsp
, &status_not_powered
);
4607 if (memcmp(hdev
->dev_class
, zero_cod
, sizeof(zero_cod
)) != 0)
4608 mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED
, hdev
,
4609 zero_cod
, sizeof(zero_cod
), NULL
);
4612 err
= new_settings(hdev
, match
.sk
);
4620 void mgmt_set_powered_failed(struct hci_dev
*hdev
, int err
)
4622 struct pending_cmd
*cmd
;
4625 cmd
= mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
);
4629 if (err
== -ERFKILL
)
4630 status
= MGMT_STATUS_RFKILLED
;
4632 status
= MGMT_STATUS_FAILED
;
4634 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_SET_POWERED
, status
);
4636 mgmt_pending_remove(cmd
);
4639 void mgmt_discoverable_timeout(struct hci_dev
*hdev
)
4641 struct hci_request req
;
4645 /* When discoverable timeout triggers, then just make sure
4646 * the limited discoverable flag is cleared. Even in the case
4647 * of a timeout triggered from general discoverable, it is
4648 * safe to unconditionally clear the flag.
4650 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
4651 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
4653 hci_req_init(&req
, hdev
);
4654 if (test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
4655 u8 scan
= SCAN_PAGE
;
4656 hci_req_add(&req
, HCI_OP_WRITE_SCAN_ENABLE
,
4657 sizeof(scan
), &scan
);
4660 update_adv_data(&req
);
4661 hci_req_run(&req
, NULL
);
4663 hdev
->discov_timeout
= 0;
4665 new_settings(hdev
, NULL
);
4667 hci_dev_unlock(hdev
);
4670 void mgmt_discoverable(struct hci_dev
*hdev
, u8 discoverable
)
4674 /* Nothing needed here if there's a pending command since that
4675 * commands request completion callback takes care of everything
4678 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
))
4682 changed
= !test_and_set_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
4684 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
4685 changed
= test_and_clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
4689 struct hci_request req
;
4691 /* In case this change in discoverable was triggered by
4692 * a disabling of connectable there could be a need to
4693 * update the advertising flags.
4695 hci_req_init(&req
, hdev
);
4696 update_adv_data(&req
);
4697 hci_req_run(&req
, NULL
);
4699 new_settings(hdev
, NULL
);
4703 void mgmt_connectable(struct hci_dev
*hdev
, u8 connectable
)
4707 /* Nothing needed here if there's a pending command since that
4708 * commands request completion callback takes care of everything
4711 if (mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
))
4715 changed
= !test_and_set_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
4717 changed
= test_and_clear_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
4720 new_settings(hdev
, NULL
);
4723 void mgmt_write_scan_failed(struct hci_dev
*hdev
, u8 scan
, u8 status
)
4725 u8 mgmt_err
= mgmt_status(status
);
4727 if (scan
& SCAN_PAGE
)
4728 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE
, hdev
,
4729 cmd_status_rsp
, &mgmt_err
);
4731 if (scan
& SCAN_INQUIRY
)
4732 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE
, hdev
,
4733 cmd_status_rsp
, &mgmt_err
);
4736 void mgmt_new_link_key(struct hci_dev
*hdev
, struct link_key
*key
,
4739 struct mgmt_ev_new_link_key ev
;
4741 memset(&ev
, 0, sizeof(ev
));
4743 ev
.store_hint
= persistent
;
4744 bacpy(&ev
.key
.addr
.bdaddr
, &key
->bdaddr
);
4745 ev
.key
.addr
.type
= BDADDR_BREDR
;
4746 ev
.key
.type
= key
->type
;
4747 memcpy(ev
.key
.val
, key
->val
, HCI_LINK_KEY_SIZE
);
4748 ev
.key
.pin_len
= key
->pin_len
;
4750 mgmt_event(MGMT_EV_NEW_LINK_KEY
, hdev
, &ev
, sizeof(ev
), NULL
);
4753 void mgmt_new_ltk(struct hci_dev
*hdev
, struct smp_ltk
*key
, u8 persistent
)
4755 struct mgmt_ev_new_long_term_key ev
;
4757 memset(&ev
, 0, sizeof(ev
));
4759 ev
.store_hint
= persistent
;
4760 bacpy(&ev
.key
.addr
.bdaddr
, &key
->bdaddr
);
4761 ev
.key
.addr
.type
= link_to_bdaddr(LE_LINK
, key
->bdaddr_type
);
4762 ev
.key
.type
= key
->authenticated
;
4763 ev
.key
.enc_size
= key
->enc_size
;
4764 ev
.key
.ediv
= key
->ediv
;
4766 if (key
->type
== HCI_SMP_LTK
)
4769 memcpy(ev
.key
.rand
, key
->rand
, sizeof(key
->rand
));
4770 memcpy(ev
.key
.val
, key
->val
, sizeof(key
->val
));
4772 mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY
, hdev
, &ev
, sizeof(ev
), NULL
);
4775 static inline u16
eir_append_data(u8
*eir
, u16 eir_len
, u8 type
, u8
*data
,
4778 eir
[eir_len
++] = sizeof(type
) + data_len
;
4779 eir
[eir_len
++] = type
;
4780 memcpy(&eir
[eir_len
], data
, data_len
);
4781 eir_len
+= data_len
;
4786 void mgmt_device_connected(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
4787 u8 addr_type
, u32 flags
, u8
*name
, u8 name_len
,
4791 struct mgmt_ev_device_connected
*ev
= (void *) buf
;
4794 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
4795 ev
->addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4797 ev
->flags
= __cpu_to_le32(flags
);
4800 eir_len
= eir_append_data(ev
->eir
, 0, EIR_NAME_COMPLETE
,
4803 if (dev_class
&& memcmp(dev_class
, "\0\0\0", 3) != 0)
4804 eir_len
= eir_append_data(ev
->eir
, eir_len
,
4805 EIR_CLASS_OF_DEV
, dev_class
, 3);
4807 ev
->eir_len
= cpu_to_le16(eir_len
);
4809 mgmt_event(MGMT_EV_DEVICE_CONNECTED
, hdev
, buf
,
4810 sizeof(*ev
) + eir_len
, NULL
);
4813 static void disconnect_rsp(struct pending_cmd
*cmd
, void *data
)
4815 struct mgmt_cp_disconnect
*cp
= cmd
->param
;
4816 struct sock
**sk
= data
;
4817 struct mgmt_rp_disconnect rp
;
4819 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
4820 rp
.addr
.type
= cp
->addr
.type
;
4822 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_DISCONNECT
, 0, &rp
,
4828 mgmt_pending_remove(cmd
);
4831 static void unpair_device_rsp(struct pending_cmd
*cmd
, void *data
)
4833 struct hci_dev
*hdev
= data
;
4834 struct mgmt_cp_unpair_device
*cp
= cmd
->param
;
4835 struct mgmt_rp_unpair_device rp
;
4837 memset(&rp
, 0, sizeof(rp
));
4838 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
4839 rp
.addr
.type
= cp
->addr
.type
;
4841 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, cmd
->sk
);
4843 cmd_complete(cmd
->sk
, cmd
->index
, cmd
->opcode
, 0, &rp
, sizeof(rp
));
4845 mgmt_pending_remove(cmd
);
4848 void mgmt_device_disconnected(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4849 u8 link_type
, u8 addr_type
, u8 reason
)
4851 struct mgmt_ev_device_disconnected ev
;
4852 struct sock
*sk
= NULL
;
4854 if (link_type
!= ACL_LINK
&& link_type
!= LE_LINK
)
4857 mgmt_pending_foreach(MGMT_OP_DISCONNECT
, hdev
, disconnect_rsp
, &sk
);
4859 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4860 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4863 mgmt_event(MGMT_EV_DEVICE_DISCONNECTED
, hdev
, &ev
, sizeof(ev
), sk
);
4868 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE
, hdev
, unpair_device_rsp
,
4872 void mgmt_disconnect_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4873 u8 link_type
, u8 addr_type
, u8 status
)
4875 u8 bdaddr_type
= link_to_bdaddr(link_type
, addr_type
);
4876 struct mgmt_cp_disconnect
*cp
;
4877 struct mgmt_rp_disconnect rp
;
4878 struct pending_cmd
*cmd
;
4880 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE
, hdev
, unpair_device_rsp
,
4883 cmd
= mgmt_pending_find(MGMT_OP_DISCONNECT
, hdev
);
4889 if (bacmp(bdaddr
, &cp
->addr
.bdaddr
))
4892 if (cp
->addr
.type
!= bdaddr_type
)
4895 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
4896 rp
.addr
.type
= bdaddr_type
;
4898 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_DISCONNECT
,
4899 mgmt_status(status
), &rp
, sizeof(rp
));
4901 mgmt_pending_remove(cmd
);
4904 void mgmt_connect_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
4905 u8 addr_type
, u8 status
)
4907 struct mgmt_ev_connect_failed ev
;
4909 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4910 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4911 ev
.status
= mgmt_status(status
);
4913 mgmt_event(MGMT_EV_CONNECT_FAILED
, hdev
, &ev
, sizeof(ev
), NULL
);
4916 void mgmt_pin_code_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 secure
)
4918 struct mgmt_ev_pin_code_request ev
;
4920 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4921 ev
.addr
.type
= BDADDR_BREDR
;
4924 mgmt_event(MGMT_EV_PIN_CODE_REQUEST
, hdev
, &ev
, sizeof(ev
), NULL
);
4927 void mgmt_pin_code_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4930 struct pending_cmd
*cmd
;
4931 struct mgmt_rp_pin_code_reply rp
;
4933 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY
, hdev
);
4937 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
4938 rp
.addr
.type
= BDADDR_BREDR
;
4940 cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
4941 mgmt_status(status
), &rp
, sizeof(rp
));
4943 mgmt_pending_remove(cmd
);
4946 void mgmt_pin_code_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4949 struct pending_cmd
*cmd
;
4950 struct mgmt_rp_pin_code_reply rp
;
4952 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY
, hdev
);
4956 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
4957 rp
.addr
.type
= BDADDR_BREDR
;
4959 cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_PIN_CODE_NEG_REPLY
,
4960 mgmt_status(status
), &rp
, sizeof(rp
));
4962 mgmt_pending_remove(cmd
);
4965 int mgmt_user_confirm_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4966 u8 link_type
, u8 addr_type
, __le32 value
,
4969 struct mgmt_ev_user_confirm_request ev
;
4971 BT_DBG("%s", hdev
->name
);
4973 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4974 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4975 ev
.confirm_hint
= confirm_hint
;
4978 return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST
, hdev
, &ev
, sizeof(ev
),
4982 int mgmt_user_passkey_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4983 u8 link_type
, u8 addr_type
)
4985 struct mgmt_ev_user_passkey_request ev
;
4987 BT_DBG("%s", hdev
->name
);
4989 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4990 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4992 return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST
, hdev
, &ev
, sizeof(ev
),
4996 static int user_pairing_resp_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4997 u8 link_type
, u8 addr_type
, u8 status
,
5000 struct pending_cmd
*cmd
;
5001 struct mgmt_rp_user_confirm_reply rp
;
5004 cmd
= mgmt_pending_find(opcode
, hdev
);
5008 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
5009 rp
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
5010 err
= cmd_complete(cmd
->sk
, hdev
->id
, opcode
, mgmt_status(status
),
5013 mgmt_pending_remove(cmd
);
5018 int mgmt_user_confirm_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
5019 u8 link_type
, u8 addr_type
, u8 status
)
5021 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
5022 status
, MGMT_OP_USER_CONFIRM_REPLY
);
5025 int mgmt_user_confirm_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
5026 u8 link_type
, u8 addr_type
, u8 status
)
5028 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
5030 MGMT_OP_USER_CONFIRM_NEG_REPLY
);
5033 int mgmt_user_passkey_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
5034 u8 link_type
, u8 addr_type
, u8 status
)
5036 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
5037 status
, MGMT_OP_USER_PASSKEY_REPLY
);
5040 int mgmt_user_passkey_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
5041 u8 link_type
, u8 addr_type
, u8 status
)
5043 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
5045 MGMT_OP_USER_PASSKEY_NEG_REPLY
);
5048 int mgmt_user_passkey_notify(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
5049 u8 link_type
, u8 addr_type
, u32 passkey
,
5052 struct mgmt_ev_passkey_notify ev
;
5054 BT_DBG("%s", hdev
->name
);
5056 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
5057 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
5058 ev
.passkey
= __cpu_to_le32(passkey
);
5059 ev
.entered
= entered
;
5061 return mgmt_event(MGMT_EV_PASSKEY_NOTIFY
, hdev
, &ev
, sizeof(ev
), NULL
);
5064 void mgmt_auth_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
5065 u8 addr_type
, u8 status
)
5067 struct mgmt_ev_auth_failed ev
;
5069 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
5070 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
5071 ev
.status
= mgmt_status(status
);
5073 mgmt_event(MGMT_EV_AUTH_FAILED
, hdev
, &ev
, sizeof(ev
), NULL
);
5076 void mgmt_auth_enable_complete(struct hci_dev
*hdev
, u8 status
)
5078 struct cmd_lookup match
= { NULL
, hdev
};
5082 u8 mgmt_err
= mgmt_status(status
);
5083 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY
, hdev
,
5084 cmd_status_rsp
, &mgmt_err
);
5088 if (test_bit(HCI_AUTH
, &hdev
->flags
))
5089 changed
= !test_and_set_bit(HCI_LINK_SECURITY
,
5092 changed
= test_and_clear_bit(HCI_LINK_SECURITY
,
5095 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY
, hdev
, settings_rsp
,
5099 new_settings(hdev
, match
.sk
);
5105 static void clear_eir(struct hci_request
*req
)
5107 struct hci_dev
*hdev
= req
->hdev
;
5108 struct hci_cp_write_eir cp
;
5110 if (!lmp_ext_inq_capable(hdev
))
5113 memset(hdev
->eir
, 0, sizeof(hdev
->eir
));
5115 memset(&cp
, 0, sizeof(cp
));
5117 hci_req_add(req
, HCI_OP_WRITE_EIR
, sizeof(cp
), &cp
);
5120 void mgmt_ssp_enable_complete(struct hci_dev
*hdev
, u8 enable
, u8 status
)
5122 struct cmd_lookup match
= { NULL
, hdev
};
5123 struct hci_request req
;
5124 bool changed
= false;
5127 u8 mgmt_err
= mgmt_status(status
);
5129 if (enable
&& test_and_clear_bit(HCI_SSP_ENABLED
,
5130 &hdev
->dev_flags
)) {
5131 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
5132 new_settings(hdev
, NULL
);
5135 mgmt_pending_foreach(MGMT_OP_SET_SSP
, hdev
, cmd_status_rsp
,
5141 changed
= !test_and_set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
5143 changed
= test_and_clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
5145 changed
= test_and_clear_bit(HCI_HS_ENABLED
,
5148 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
5151 mgmt_pending_foreach(MGMT_OP_SET_SSP
, hdev
, settings_rsp
, &match
);
5154 new_settings(hdev
, match
.sk
);
5159 hci_req_init(&req
, hdev
);
5161 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
5166 hci_req_run(&req
, NULL
);
5169 void mgmt_sc_enable_complete(struct hci_dev
*hdev
, u8 enable
, u8 status
)
5171 struct cmd_lookup match
= { NULL
, hdev
};
5172 bool changed
= false;
5175 u8 mgmt_err
= mgmt_status(status
);
5178 if (test_and_clear_bit(HCI_SC_ENABLED
,
5180 new_settings(hdev
, NULL
);
5181 clear_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
5184 mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN
, hdev
,
5185 cmd_status_rsp
, &mgmt_err
);
5190 changed
= !test_and_set_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
);
5192 changed
= test_and_clear_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
);
5193 clear_bit(HCI_SC_ONLY
, &hdev
->dev_flags
);
5196 mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN
, hdev
,
5197 settings_rsp
, &match
);
5200 new_settings(hdev
, match
.sk
);
5206 static void sk_lookup(struct pending_cmd
*cmd
, void *data
)
5208 struct cmd_lookup
*match
= data
;
5210 if (match
->sk
== NULL
) {
5211 match
->sk
= cmd
->sk
;
5212 sock_hold(match
->sk
);
5216 void mgmt_set_class_of_dev_complete(struct hci_dev
*hdev
, u8
*dev_class
,
5219 struct cmd_lookup match
= { NULL
, hdev
, mgmt_status(status
) };
5221 mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS
, hdev
, sk_lookup
, &match
);
5222 mgmt_pending_foreach(MGMT_OP_ADD_UUID
, hdev
, sk_lookup
, &match
);
5223 mgmt_pending_foreach(MGMT_OP_REMOVE_UUID
, hdev
, sk_lookup
, &match
);
5226 mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED
, hdev
, dev_class
, 3,
5233 void mgmt_set_local_name_complete(struct hci_dev
*hdev
, u8
*name
, u8 status
)
5235 struct mgmt_cp_set_local_name ev
;
5236 struct pending_cmd
*cmd
;
5241 memset(&ev
, 0, sizeof(ev
));
5242 memcpy(ev
.name
, name
, HCI_MAX_NAME_LENGTH
);
5243 memcpy(ev
.short_name
, hdev
->short_name
, HCI_MAX_SHORT_NAME_LENGTH
);
5245 cmd
= mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME
, hdev
);
5247 memcpy(hdev
->dev_name
, name
, sizeof(hdev
->dev_name
));
5249 /* If this is a HCI command related to powering on the
5250 * HCI dev don't send any mgmt signals.
5252 if (mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
))
5256 mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED
, hdev
, &ev
, sizeof(ev
),
5257 cmd
? cmd
->sk
: NULL
);
5260 void mgmt_read_local_oob_data_complete(struct hci_dev
*hdev
, u8
*hash192
,
5261 u8
*randomizer192
, u8
*hash256
,
5262 u8
*randomizer256
, u8 status
)
5264 struct pending_cmd
*cmd
;
5266 BT_DBG("%s status %u", hdev
->name
, status
);
5268 cmd
= mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
);
5273 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
5274 mgmt_status(status
));
5276 if (test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
) &&
5277 hash256
&& randomizer256
) {
5278 struct mgmt_rp_read_local_oob_ext_data rp
;
5280 memcpy(rp
.hash192
, hash192
, sizeof(rp
.hash192
));
5281 memcpy(rp
.randomizer192
, randomizer192
,
5282 sizeof(rp
.randomizer192
));
5284 memcpy(rp
.hash256
, hash256
, sizeof(rp
.hash256
));
5285 memcpy(rp
.randomizer256
, randomizer256
,
5286 sizeof(rp
.randomizer256
));
5288 cmd_complete(cmd
->sk
, hdev
->id
,
5289 MGMT_OP_READ_LOCAL_OOB_DATA
, 0,
5292 struct mgmt_rp_read_local_oob_data rp
;
5294 memcpy(rp
.hash
, hash192
, sizeof(rp
.hash
));
5295 memcpy(rp
.randomizer
, randomizer192
,
5296 sizeof(rp
.randomizer
));
5298 cmd_complete(cmd
->sk
, hdev
->id
,
5299 MGMT_OP_READ_LOCAL_OOB_DATA
, 0,
5304 mgmt_pending_remove(cmd
);
5307 void mgmt_device_found(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
5308 u8 addr_type
, u8
*dev_class
, s8 rssi
, u8 cfm_name
, u8
5309 ssp
, u8
*eir
, u16 eir_len
)
5312 struct mgmt_ev_device_found
*ev
= (void *) buf
;
5315 if (!hci_discovery_active(hdev
))
5318 /* Leave 5 bytes for a potential CoD field */
5319 if (sizeof(*ev
) + eir_len
+ 5 > sizeof(buf
))
5322 memset(buf
, 0, sizeof(buf
));
5324 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
5325 ev
->addr
.type
= link_to_bdaddr(link_type
, addr_type
);
5328 ev
->flags
|= __constant_cpu_to_le32(MGMT_DEV_FOUND_CONFIRM_NAME
);
5330 ev
->flags
|= __constant_cpu_to_le32(MGMT_DEV_FOUND_LEGACY_PAIRING
);
5333 memcpy(ev
->eir
, eir
, eir_len
);
5335 if (dev_class
&& !eir_has_data_type(ev
->eir
, eir_len
, EIR_CLASS_OF_DEV
))
5336 eir_len
= eir_append_data(ev
->eir
, eir_len
, EIR_CLASS_OF_DEV
,
5339 ev
->eir_len
= cpu_to_le16(eir_len
);
5340 ev_size
= sizeof(*ev
) + eir_len
;
5342 mgmt_event(MGMT_EV_DEVICE_FOUND
, hdev
, ev
, ev_size
, NULL
);
5345 void mgmt_remote_name(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
5346 u8 addr_type
, s8 rssi
, u8
*name
, u8 name_len
)
5348 struct mgmt_ev_device_found
*ev
;
5349 char buf
[sizeof(*ev
) + HCI_MAX_NAME_LENGTH
+ 2];
5352 ev
= (struct mgmt_ev_device_found
*) buf
;
5354 memset(buf
, 0, sizeof(buf
));
5356 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
5357 ev
->addr
.type
= link_to_bdaddr(link_type
, addr_type
);
5360 eir_len
= eir_append_data(ev
->eir
, 0, EIR_NAME_COMPLETE
, name
,
5363 ev
->eir_len
= cpu_to_le16(eir_len
);
5365 mgmt_event(MGMT_EV_DEVICE_FOUND
, hdev
, ev
, sizeof(*ev
) + eir_len
, NULL
);
5368 void mgmt_discovering(struct hci_dev
*hdev
, u8 discovering
)
5370 struct mgmt_ev_discovering ev
;
5371 struct pending_cmd
*cmd
;
5373 BT_DBG("%s discovering %u", hdev
->name
, discovering
);
5376 cmd
= mgmt_pending_find(MGMT_OP_START_DISCOVERY
, hdev
);
5378 cmd
= mgmt_pending_find(MGMT_OP_STOP_DISCOVERY
, hdev
);
5381 u8 type
= hdev
->discovery
.type
;
5383 cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, 0, &type
,
5385 mgmt_pending_remove(cmd
);
5388 memset(&ev
, 0, sizeof(ev
));
5389 ev
.type
= hdev
->discovery
.type
;
5390 ev
.discovering
= discovering
;
5392 mgmt_event(MGMT_EV_DISCOVERING
, hdev
, &ev
, sizeof(ev
), NULL
);
5395 int mgmt_device_blocked(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 type
)
5397 struct pending_cmd
*cmd
;
5398 struct mgmt_ev_device_blocked ev
;
5400 cmd
= mgmt_pending_find(MGMT_OP_BLOCK_DEVICE
, hdev
);
5402 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
5403 ev
.addr
.type
= type
;
5405 return mgmt_event(MGMT_EV_DEVICE_BLOCKED
, hdev
, &ev
, sizeof(ev
),
5406 cmd
? cmd
->sk
: NULL
);
5409 int mgmt_device_unblocked(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 type
)
5411 struct pending_cmd
*cmd
;
5412 struct mgmt_ev_device_unblocked ev
;
5414 cmd
= mgmt_pending_find(MGMT_OP_UNBLOCK_DEVICE
, hdev
);
5416 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
5417 ev
.addr
.type
= type
;
5419 return mgmt_event(MGMT_EV_DEVICE_UNBLOCKED
, hdev
, &ev
, sizeof(ev
),
5420 cmd
? cmd
->sk
: NULL
);
5423 static void adv_enable_complete(struct hci_dev
*hdev
, u8 status
)
5425 BT_DBG("%s status %u", hdev
->name
, status
);
5427 /* Clear the advertising mgmt setting if we failed to re-enable it */
5429 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
5430 new_settings(hdev
, NULL
);
5434 void mgmt_reenable_advertising(struct hci_dev
*hdev
)
5436 struct hci_request req
;
5438 if (hci_conn_num(hdev
, LE_LINK
) > 0)
5441 if (!test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
5444 hci_req_init(&req
, hdev
);
5445 enable_advertising(&req
);
5447 /* If this fails we have no option but to let user space know
5448 * that we've disabled advertising.
5450 if (hci_req_run(&req
, adv_enable_complete
) < 0) {
5451 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
5452 new_settings(hdev
, NULL
);