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
,
85 static const u16 mgmt_events
[] = {
86 MGMT_EV_CONTROLLER_ERROR
,
88 MGMT_EV_INDEX_REMOVED
,
90 MGMT_EV_CLASS_OF_DEV_CHANGED
,
91 MGMT_EV_LOCAL_NAME_CHANGED
,
93 MGMT_EV_NEW_LONG_TERM_KEY
,
94 MGMT_EV_DEVICE_CONNECTED
,
95 MGMT_EV_DEVICE_DISCONNECTED
,
96 MGMT_EV_CONNECT_FAILED
,
97 MGMT_EV_PIN_CODE_REQUEST
,
98 MGMT_EV_USER_CONFIRM_REQUEST
,
99 MGMT_EV_USER_PASSKEY_REQUEST
,
101 MGMT_EV_DEVICE_FOUND
,
103 MGMT_EV_DEVICE_BLOCKED
,
104 MGMT_EV_DEVICE_UNBLOCKED
,
105 MGMT_EV_DEVICE_UNPAIRED
,
106 MGMT_EV_PASSKEY_NOTIFY
,
109 #define CACHE_TIMEOUT msecs_to_jiffies(2 * 1000)
111 #define hdev_is_powered(hdev) (test_bit(HCI_UP, &hdev->flags) && \
112 !test_bit(HCI_AUTO_OFF, &hdev->dev_flags))
115 struct list_head list
;
123 /* HCI to MGMT error code conversion table */
124 static u8 mgmt_status_table
[] = {
126 MGMT_STATUS_UNKNOWN_COMMAND
, /* Unknown Command */
127 MGMT_STATUS_NOT_CONNECTED
, /* No Connection */
128 MGMT_STATUS_FAILED
, /* Hardware Failure */
129 MGMT_STATUS_CONNECT_FAILED
, /* Page Timeout */
130 MGMT_STATUS_AUTH_FAILED
, /* Authentication Failed */
131 MGMT_STATUS_AUTH_FAILED
, /* PIN or Key Missing */
132 MGMT_STATUS_NO_RESOURCES
, /* Memory Full */
133 MGMT_STATUS_TIMEOUT
, /* Connection Timeout */
134 MGMT_STATUS_NO_RESOURCES
, /* Max Number of Connections */
135 MGMT_STATUS_NO_RESOURCES
, /* Max Number of SCO Connections */
136 MGMT_STATUS_ALREADY_CONNECTED
, /* ACL Connection Exists */
137 MGMT_STATUS_BUSY
, /* Command Disallowed */
138 MGMT_STATUS_NO_RESOURCES
, /* Rejected Limited Resources */
139 MGMT_STATUS_REJECTED
, /* Rejected Security */
140 MGMT_STATUS_REJECTED
, /* Rejected Personal */
141 MGMT_STATUS_TIMEOUT
, /* Host Timeout */
142 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported Feature */
143 MGMT_STATUS_INVALID_PARAMS
, /* Invalid Parameters */
144 MGMT_STATUS_DISCONNECTED
, /* OE User Ended Connection */
145 MGMT_STATUS_NO_RESOURCES
, /* OE Low Resources */
146 MGMT_STATUS_DISCONNECTED
, /* OE Power Off */
147 MGMT_STATUS_DISCONNECTED
, /* Connection Terminated */
148 MGMT_STATUS_BUSY
, /* Repeated Attempts */
149 MGMT_STATUS_REJECTED
, /* Pairing Not Allowed */
150 MGMT_STATUS_FAILED
, /* Unknown LMP PDU */
151 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported Remote Feature */
152 MGMT_STATUS_REJECTED
, /* SCO Offset Rejected */
153 MGMT_STATUS_REJECTED
, /* SCO Interval Rejected */
154 MGMT_STATUS_REJECTED
, /* Air Mode Rejected */
155 MGMT_STATUS_INVALID_PARAMS
, /* Invalid LMP Parameters */
156 MGMT_STATUS_FAILED
, /* Unspecified Error */
157 MGMT_STATUS_NOT_SUPPORTED
, /* Unsupported LMP Parameter Value */
158 MGMT_STATUS_FAILED
, /* Role Change Not Allowed */
159 MGMT_STATUS_TIMEOUT
, /* LMP Response Timeout */
160 MGMT_STATUS_FAILED
, /* LMP Error Transaction Collision */
161 MGMT_STATUS_FAILED
, /* LMP PDU Not Allowed */
162 MGMT_STATUS_REJECTED
, /* Encryption Mode Not Accepted */
163 MGMT_STATUS_FAILED
, /* Unit Link Key Used */
164 MGMT_STATUS_NOT_SUPPORTED
, /* QoS Not Supported */
165 MGMT_STATUS_TIMEOUT
, /* Instant Passed */
166 MGMT_STATUS_NOT_SUPPORTED
, /* Pairing Not Supported */
167 MGMT_STATUS_FAILED
, /* Transaction Collision */
168 MGMT_STATUS_INVALID_PARAMS
, /* Unacceptable Parameter */
169 MGMT_STATUS_REJECTED
, /* QoS Rejected */
170 MGMT_STATUS_NOT_SUPPORTED
, /* Classification Not Supported */
171 MGMT_STATUS_REJECTED
, /* Insufficient Security */
172 MGMT_STATUS_INVALID_PARAMS
, /* Parameter Out Of Range */
173 MGMT_STATUS_BUSY
, /* Role Switch Pending */
174 MGMT_STATUS_FAILED
, /* Slot Violation */
175 MGMT_STATUS_FAILED
, /* Role Switch Failed */
176 MGMT_STATUS_INVALID_PARAMS
, /* EIR Too Large */
177 MGMT_STATUS_NOT_SUPPORTED
, /* Simple Pairing Not Supported */
178 MGMT_STATUS_BUSY
, /* Host Busy Pairing */
179 MGMT_STATUS_REJECTED
, /* Rejected, No Suitable Channel */
180 MGMT_STATUS_BUSY
, /* Controller Busy */
181 MGMT_STATUS_INVALID_PARAMS
, /* Unsuitable Connection Interval */
182 MGMT_STATUS_TIMEOUT
, /* Directed Advertising Timeout */
183 MGMT_STATUS_AUTH_FAILED
, /* Terminated Due to MIC Failure */
184 MGMT_STATUS_CONNECT_FAILED
, /* Connection Establishment Failed */
185 MGMT_STATUS_CONNECT_FAILED
, /* MAC Connection Failed */
188 static u8
mgmt_status(u8 hci_status
)
190 if (hci_status
< ARRAY_SIZE(mgmt_status_table
))
191 return mgmt_status_table
[hci_status
];
193 return MGMT_STATUS_FAILED
;
196 static int cmd_status(struct sock
*sk
, u16 index
, u16 cmd
, u8 status
)
199 struct mgmt_hdr
*hdr
;
200 struct mgmt_ev_cmd_status
*ev
;
203 BT_DBG("sock %p, index %u, cmd %u, status %u", sk
, index
, cmd
, status
);
205 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
), GFP_KERNEL
);
209 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
211 hdr
->opcode
= __constant_cpu_to_le16(MGMT_EV_CMD_STATUS
);
212 hdr
->index
= cpu_to_le16(index
);
213 hdr
->len
= cpu_to_le16(sizeof(*ev
));
215 ev
= (void *) skb_put(skb
, sizeof(*ev
));
217 ev
->opcode
= cpu_to_le16(cmd
);
219 err
= sock_queue_rcv_skb(sk
, skb
);
226 static int cmd_complete(struct sock
*sk
, u16 index
, u16 cmd
, u8 status
,
227 void *rp
, size_t rp_len
)
230 struct mgmt_hdr
*hdr
;
231 struct mgmt_ev_cmd_complete
*ev
;
234 BT_DBG("sock %p", sk
);
236 skb
= alloc_skb(sizeof(*hdr
) + sizeof(*ev
) + rp_len
, GFP_KERNEL
);
240 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
242 hdr
->opcode
= __constant_cpu_to_le16(MGMT_EV_CMD_COMPLETE
);
243 hdr
->index
= cpu_to_le16(index
);
244 hdr
->len
= cpu_to_le16(sizeof(*ev
) + rp_len
);
246 ev
= (void *) skb_put(skb
, sizeof(*ev
) + rp_len
);
247 ev
->opcode
= cpu_to_le16(cmd
);
251 memcpy(ev
->data
, rp
, rp_len
);
253 err
= sock_queue_rcv_skb(sk
, skb
);
260 static int read_version(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
263 struct mgmt_rp_read_version rp
;
265 BT_DBG("sock %p", sk
);
267 rp
.version
= MGMT_VERSION
;
268 rp
.revision
= __constant_cpu_to_le16(MGMT_REVISION
);
270 return cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_VERSION
, 0, &rp
,
274 static int read_commands(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
277 struct mgmt_rp_read_commands
*rp
;
278 const u16 num_commands
= ARRAY_SIZE(mgmt_commands
);
279 const u16 num_events
= ARRAY_SIZE(mgmt_events
);
284 BT_DBG("sock %p", sk
);
286 rp_size
= sizeof(*rp
) + ((num_commands
+ num_events
) * sizeof(u16
));
288 rp
= kmalloc(rp_size
, GFP_KERNEL
);
292 rp
->num_commands
= __constant_cpu_to_le16(num_commands
);
293 rp
->num_events
= __constant_cpu_to_le16(num_events
);
295 for (i
= 0, opcode
= rp
->opcodes
; i
< num_commands
; i
++, opcode
++)
296 put_unaligned_le16(mgmt_commands
[i
], opcode
);
298 for (i
= 0; i
< num_events
; i
++, opcode
++)
299 put_unaligned_le16(mgmt_events
[i
], opcode
);
301 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_COMMANDS
, 0, rp
,
308 static int read_index_list(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
311 struct mgmt_rp_read_index_list
*rp
;
317 BT_DBG("sock %p", sk
);
319 read_lock(&hci_dev_list_lock
);
322 list_for_each_entry(d
, &hci_dev_list
, list
) {
323 if (d
->dev_type
== HCI_BREDR
)
327 rp_len
= sizeof(*rp
) + (2 * count
);
328 rp
= kmalloc(rp_len
, GFP_ATOMIC
);
330 read_unlock(&hci_dev_list_lock
);
335 list_for_each_entry(d
, &hci_dev_list
, list
) {
336 if (test_bit(HCI_SETUP
, &d
->dev_flags
))
339 if (test_bit(HCI_USER_CHANNEL
, &d
->dev_flags
))
342 if (d
->dev_type
== HCI_BREDR
) {
343 rp
->index
[count
++] = cpu_to_le16(d
->id
);
344 BT_DBG("Added hci%u", d
->id
);
348 rp
->num_controllers
= cpu_to_le16(count
);
349 rp_len
= sizeof(*rp
) + (2 * count
);
351 read_unlock(&hci_dev_list_lock
);
353 err
= cmd_complete(sk
, MGMT_INDEX_NONE
, MGMT_OP_READ_INDEX_LIST
, 0, rp
,
361 static u32
get_supported_settings(struct hci_dev
*hdev
)
365 settings
|= MGMT_SETTING_POWERED
;
366 settings
|= MGMT_SETTING_PAIRABLE
;
368 if (lmp_bredr_capable(hdev
)) {
369 settings
|= MGMT_SETTING_CONNECTABLE
;
370 if (hdev
->hci_ver
>= BLUETOOTH_VER_1_2
)
371 settings
|= MGMT_SETTING_FAST_CONNECTABLE
;
372 settings
|= MGMT_SETTING_DISCOVERABLE
;
373 settings
|= MGMT_SETTING_BREDR
;
374 settings
|= MGMT_SETTING_LINK_SECURITY
;
376 if (lmp_ssp_capable(hdev
)) {
377 settings
|= MGMT_SETTING_SSP
;
378 settings
|= MGMT_SETTING_HS
;
381 if (lmp_sc_capable(hdev
) ||
382 test_bit(HCI_FORCE_SC
, &hdev
->dev_flags
))
383 settings
|= MGMT_SETTING_SECURE_CONN
;
386 if (lmp_le_capable(hdev
)) {
387 settings
|= MGMT_SETTING_LE
;
388 settings
|= MGMT_SETTING_ADVERTISING
;
394 static u32
get_current_settings(struct hci_dev
*hdev
)
398 if (hdev_is_powered(hdev
))
399 settings
|= MGMT_SETTING_POWERED
;
401 if (test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
402 settings
|= MGMT_SETTING_CONNECTABLE
;
404 if (test_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
))
405 settings
|= MGMT_SETTING_FAST_CONNECTABLE
;
407 if (test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
408 settings
|= MGMT_SETTING_DISCOVERABLE
;
410 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
411 settings
|= MGMT_SETTING_PAIRABLE
;
413 if (test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
414 settings
|= MGMT_SETTING_BREDR
;
416 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
417 settings
|= MGMT_SETTING_LE
;
419 if (test_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
))
420 settings
|= MGMT_SETTING_LINK_SECURITY
;
422 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
423 settings
|= MGMT_SETTING_SSP
;
425 if (test_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
))
426 settings
|= MGMT_SETTING_HS
;
428 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
429 settings
|= MGMT_SETTING_ADVERTISING
;
431 if (test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
))
432 settings
|= MGMT_SETTING_SECURE_CONN
;
437 #define PNP_INFO_SVCLASS_ID 0x1200
439 static u8
*create_uuid16_list(struct hci_dev
*hdev
, u8
*data
, ptrdiff_t len
)
441 u8
*ptr
= data
, *uuids_start
= NULL
;
442 struct bt_uuid
*uuid
;
447 list_for_each_entry(uuid
, &hdev
->uuids
, list
) {
450 if (uuid
->size
!= 16)
453 uuid16
= get_unaligned_le16(&uuid
->uuid
[12]);
457 if (uuid16
== PNP_INFO_SVCLASS_ID
)
463 uuids_start
[1] = EIR_UUID16_ALL
;
467 /* Stop if not enough space to put next UUID */
468 if ((ptr
- data
) + sizeof(u16
) > len
) {
469 uuids_start
[1] = EIR_UUID16_SOME
;
473 *ptr
++ = (uuid16
& 0x00ff);
474 *ptr
++ = (uuid16
& 0xff00) >> 8;
475 uuids_start
[0] += sizeof(uuid16
);
481 static u8
*create_uuid32_list(struct hci_dev
*hdev
, u8
*data
, ptrdiff_t len
)
483 u8
*ptr
= data
, *uuids_start
= NULL
;
484 struct bt_uuid
*uuid
;
489 list_for_each_entry(uuid
, &hdev
->uuids
, list
) {
490 if (uuid
->size
!= 32)
496 uuids_start
[1] = EIR_UUID32_ALL
;
500 /* Stop if not enough space to put next UUID */
501 if ((ptr
- data
) + sizeof(u32
) > len
) {
502 uuids_start
[1] = EIR_UUID32_SOME
;
506 memcpy(ptr
, &uuid
->uuid
[12], sizeof(u32
));
508 uuids_start
[0] += sizeof(u32
);
514 static u8
*create_uuid128_list(struct hci_dev
*hdev
, u8
*data
, ptrdiff_t len
)
516 u8
*ptr
= data
, *uuids_start
= NULL
;
517 struct bt_uuid
*uuid
;
522 list_for_each_entry(uuid
, &hdev
->uuids
, list
) {
523 if (uuid
->size
!= 128)
529 uuids_start
[1] = EIR_UUID128_ALL
;
533 /* Stop if not enough space to put next UUID */
534 if ((ptr
- data
) + 16 > len
) {
535 uuids_start
[1] = EIR_UUID128_SOME
;
539 memcpy(ptr
, uuid
->uuid
, 16);
541 uuids_start
[0] += 16;
547 static struct pending_cmd
*mgmt_pending_find(u16 opcode
, struct hci_dev
*hdev
)
549 struct pending_cmd
*cmd
;
551 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
552 if (cmd
->opcode
== opcode
)
559 static u8
create_scan_rsp_data(struct hci_dev
*hdev
, u8
*ptr
)
564 name_len
= strlen(hdev
->dev_name
);
566 size_t max_len
= HCI_MAX_AD_LENGTH
- ad_len
- 2;
568 if (name_len
> max_len
) {
570 ptr
[1] = EIR_NAME_SHORT
;
572 ptr
[1] = EIR_NAME_COMPLETE
;
574 ptr
[0] = name_len
+ 1;
576 memcpy(ptr
+ 2, hdev
->dev_name
, name_len
);
578 ad_len
+= (name_len
+ 2);
579 ptr
+= (name_len
+ 2);
585 static void update_scan_rsp_data(struct hci_request
*req
)
587 struct hci_dev
*hdev
= req
->hdev
;
588 struct hci_cp_le_set_scan_rsp_data cp
;
591 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
594 memset(&cp
, 0, sizeof(cp
));
596 len
= create_scan_rsp_data(hdev
, cp
.data
);
598 if (hdev
->scan_rsp_data_len
== len
&&
599 memcmp(cp
.data
, hdev
->scan_rsp_data
, len
) == 0)
602 memcpy(hdev
->scan_rsp_data
, cp
.data
, sizeof(cp
.data
));
603 hdev
->scan_rsp_data_len
= len
;
607 hci_req_add(req
, HCI_OP_LE_SET_SCAN_RSP_DATA
, sizeof(cp
), &cp
);
610 static u8
get_adv_discov_flags(struct hci_dev
*hdev
)
612 struct pending_cmd
*cmd
;
614 /* If there's a pending mgmt command the flags will not yet have
615 * their final values, so check for this first.
617 cmd
= mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
);
619 struct mgmt_mode
*cp
= cmd
->param
;
621 return LE_AD_GENERAL
;
622 else if (cp
->val
== 0x02)
623 return LE_AD_LIMITED
;
625 if (test_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
))
626 return LE_AD_LIMITED
;
627 else if (test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
628 return LE_AD_GENERAL
;
634 static u8
create_adv_data(struct hci_dev
*hdev
, u8
*ptr
)
636 u8 ad_len
= 0, flags
= 0;
638 flags
|= get_adv_discov_flags(hdev
);
640 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
641 flags
|= LE_AD_NO_BREDR
;
644 BT_DBG("adv flags 0x%02x", flags
);
654 if (hdev
->adv_tx_power
!= HCI_TX_POWER_INVALID
) {
656 ptr
[1] = EIR_TX_POWER
;
657 ptr
[2] = (u8
) hdev
->adv_tx_power
;
666 static void update_adv_data(struct hci_request
*req
)
668 struct hci_dev
*hdev
= req
->hdev
;
669 struct hci_cp_le_set_adv_data cp
;
672 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
675 memset(&cp
, 0, sizeof(cp
));
677 len
= create_adv_data(hdev
, cp
.data
);
679 if (hdev
->adv_data_len
== len
&&
680 memcmp(cp
.data
, hdev
->adv_data
, len
) == 0)
683 memcpy(hdev
->adv_data
, cp
.data
, sizeof(cp
.data
));
684 hdev
->adv_data_len
= len
;
688 hci_req_add(req
, HCI_OP_LE_SET_ADV_DATA
, sizeof(cp
), &cp
);
691 static void create_eir(struct hci_dev
*hdev
, u8
*data
)
696 name_len
= strlen(hdev
->dev_name
);
702 ptr
[1] = EIR_NAME_SHORT
;
704 ptr
[1] = EIR_NAME_COMPLETE
;
706 /* EIR Data length */
707 ptr
[0] = name_len
+ 1;
709 memcpy(ptr
+ 2, hdev
->dev_name
, name_len
);
711 ptr
+= (name_len
+ 2);
714 if (hdev
->inq_tx_power
!= HCI_TX_POWER_INVALID
) {
716 ptr
[1] = EIR_TX_POWER
;
717 ptr
[2] = (u8
) hdev
->inq_tx_power
;
722 if (hdev
->devid_source
> 0) {
724 ptr
[1] = EIR_DEVICE_ID
;
726 put_unaligned_le16(hdev
->devid_source
, ptr
+ 2);
727 put_unaligned_le16(hdev
->devid_vendor
, ptr
+ 4);
728 put_unaligned_le16(hdev
->devid_product
, ptr
+ 6);
729 put_unaligned_le16(hdev
->devid_version
, ptr
+ 8);
734 ptr
= create_uuid16_list(hdev
, ptr
, HCI_MAX_EIR_LENGTH
- (ptr
- data
));
735 ptr
= create_uuid32_list(hdev
, ptr
, HCI_MAX_EIR_LENGTH
- (ptr
- data
));
736 ptr
= create_uuid128_list(hdev
, ptr
, HCI_MAX_EIR_LENGTH
- (ptr
- data
));
739 static void update_eir(struct hci_request
*req
)
741 struct hci_dev
*hdev
= req
->hdev
;
742 struct hci_cp_write_eir cp
;
744 if (!hdev_is_powered(hdev
))
747 if (!lmp_ext_inq_capable(hdev
))
750 if (!test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
753 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
756 memset(&cp
, 0, sizeof(cp
));
758 create_eir(hdev
, cp
.data
);
760 if (memcmp(cp
.data
, hdev
->eir
, sizeof(cp
.data
)) == 0)
763 memcpy(hdev
->eir
, cp
.data
, sizeof(cp
.data
));
765 hci_req_add(req
, HCI_OP_WRITE_EIR
, sizeof(cp
), &cp
);
768 static u8
get_service_classes(struct hci_dev
*hdev
)
770 struct bt_uuid
*uuid
;
773 list_for_each_entry(uuid
, &hdev
->uuids
, list
)
774 val
|= uuid
->svc_hint
;
779 static void update_class(struct hci_request
*req
)
781 struct hci_dev
*hdev
= req
->hdev
;
784 BT_DBG("%s", hdev
->name
);
786 if (!hdev_is_powered(hdev
))
789 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
792 if (test_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
795 cod
[0] = hdev
->minor_class
;
796 cod
[1] = hdev
->major_class
;
797 cod
[2] = get_service_classes(hdev
);
799 if (test_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
))
802 if (memcmp(cod
, hdev
->dev_class
, 3) == 0)
805 hci_req_add(req
, HCI_OP_WRITE_CLASS_OF_DEV
, sizeof(cod
), cod
);
808 static void service_cache_off(struct work_struct
*work
)
810 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
,
812 struct hci_request req
;
814 if (!test_and_clear_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
817 hci_req_init(&req
, hdev
);
824 hci_dev_unlock(hdev
);
826 hci_req_run(&req
, NULL
);
829 static void mgmt_init_hdev(struct sock
*sk
, struct hci_dev
*hdev
)
831 if (test_and_set_bit(HCI_MGMT
, &hdev
->dev_flags
))
834 INIT_DELAYED_WORK(&hdev
->service_cache
, service_cache_off
);
836 /* Non-mgmt controlled devices get this bit set
837 * implicitly so that pairing works for them, however
838 * for mgmt we require user-space to explicitly enable
841 clear_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
844 static int read_controller_info(struct sock
*sk
, struct hci_dev
*hdev
,
845 void *data
, u16 data_len
)
847 struct mgmt_rp_read_info rp
;
849 BT_DBG("sock %p %s", sk
, hdev
->name
);
853 memset(&rp
, 0, sizeof(rp
));
855 bacpy(&rp
.bdaddr
, &hdev
->bdaddr
);
857 rp
.version
= hdev
->hci_ver
;
858 rp
.manufacturer
= cpu_to_le16(hdev
->manufacturer
);
860 rp
.supported_settings
= cpu_to_le32(get_supported_settings(hdev
));
861 rp
.current_settings
= cpu_to_le32(get_current_settings(hdev
));
863 memcpy(rp
.dev_class
, hdev
->dev_class
, 3);
865 memcpy(rp
.name
, hdev
->dev_name
, sizeof(hdev
->dev_name
));
866 memcpy(rp
.short_name
, hdev
->short_name
, sizeof(hdev
->short_name
));
868 hci_dev_unlock(hdev
);
870 return cmd_complete(sk
, hdev
->id
, MGMT_OP_READ_INFO
, 0, &rp
,
874 static void mgmt_pending_free(struct pending_cmd
*cmd
)
881 static struct pending_cmd
*mgmt_pending_add(struct sock
*sk
, u16 opcode
,
882 struct hci_dev
*hdev
, void *data
,
885 struct pending_cmd
*cmd
;
887 cmd
= kmalloc(sizeof(*cmd
), GFP_KERNEL
);
891 cmd
->opcode
= opcode
;
892 cmd
->index
= hdev
->id
;
894 cmd
->param
= kmalloc(len
, GFP_KERNEL
);
901 memcpy(cmd
->param
, data
, len
);
906 list_add(&cmd
->list
, &hdev
->mgmt_pending
);
911 static void mgmt_pending_foreach(u16 opcode
, struct hci_dev
*hdev
,
912 void (*cb
)(struct pending_cmd
*cmd
,
916 struct pending_cmd
*cmd
, *tmp
;
918 list_for_each_entry_safe(cmd
, tmp
, &hdev
->mgmt_pending
, list
) {
919 if (opcode
> 0 && cmd
->opcode
!= opcode
)
926 static void mgmt_pending_remove(struct pending_cmd
*cmd
)
928 list_del(&cmd
->list
);
929 mgmt_pending_free(cmd
);
932 static int send_settings_rsp(struct sock
*sk
, u16 opcode
, struct hci_dev
*hdev
)
934 __le32 settings
= cpu_to_le32(get_current_settings(hdev
));
936 return cmd_complete(sk
, hdev
->id
, opcode
, 0, &settings
,
940 static int set_powered(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
943 struct mgmt_mode
*cp
= data
;
944 struct pending_cmd
*cmd
;
947 BT_DBG("request for %s", hdev
->name
);
949 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
950 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_POWERED
,
951 MGMT_STATUS_INVALID_PARAMS
);
955 if (mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
)) {
956 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_POWERED
,
961 if (test_and_clear_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
)) {
962 cancel_delayed_work(&hdev
->power_off
);
965 mgmt_pending_add(sk
, MGMT_OP_SET_POWERED
, hdev
,
967 err
= mgmt_powered(hdev
, 1);
972 if (!!cp
->val
== hdev_is_powered(hdev
)) {
973 err
= send_settings_rsp(sk
, MGMT_OP_SET_POWERED
, hdev
);
977 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_POWERED
, hdev
, data
, len
);
984 queue_work(hdev
->req_workqueue
, &hdev
->power_on
);
986 queue_work(hdev
->req_workqueue
, &hdev
->power_off
.work
);
991 hci_dev_unlock(hdev
);
995 static int mgmt_event(u16 event
, struct hci_dev
*hdev
, void *data
, u16 data_len
,
996 struct sock
*skip_sk
)
999 struct mgmt_hdr
*hdr
;
1001 skb
= alloc_skb(sizeof(*hdr
) + data_len
, GFP_KERNEL
);
1005 hdr
= (void *) skb_put(skb
, sizeof(*hdr
));
1006 hdr
->opcode
= cpu_to_le16(event
);
1008 hdr
->index
= cpu_to_le16(hdev
->id
);
1010 hdr
->index
= __constant_cpu_to_le16(MGMT_INDEX_NONE
);
1011 hdr
->len
= cpu_to_le16(data_len
);
1014 memcpy(skb_put(skb
, data_len
), data
, data_len
);
1017 __net_timestamp(skb
);
1019 hci_send_to_control(skb
, skip_sk
);
1025 static int new_settings(struct hci_dev
*hdev
, struct sock
*skip
)
1029 ev
= cpu_to_le32(get_current_settings(hdev
));
1031 return mgmt_event(MGMT_EV_NEW_SETTINGS
, hdev
, &ev
, sizeof(ev
), skip
);
1036 struct hci_dev
*hdev
;
1040 static void settings_rsp(struct pending_cmd
*cmd
, void *data
)
1042 struct cmd_lookup
*match
= data
;
1044 send_settings_rsp(cmd
->sk
, cmd
->opcode
, match
->hdev
);
1046 list_del(&cmd
->list
);
1048 if (match
->sk
== NULL
) {
1049 match
->sk
= cmd
->sk
;
1050 sock_hold(match
->sk
);
1053 mgmt_pending_free(cmd
);
1056 static void cmd_status_rsp(struct pending_cmd
*cmd
, void *data
)
1060 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, *status
);
1061 mgmt_pending_remove(cmd
);
1064 static u8
mgmt_bredr_support(struct hci_dev
*hdev
)
1066 if (!lmp_bredr_capable(hdev
))
1067 return MGMT_STATUS_NOT_SUPPORTED
;
1068 else if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1069 return MGMT_STATUS_REJECTED
;
1071 return MGMT_STATUS_SUCCESS
;
1074 static u8
mgmt_le_support(struct hci_dev
*hdev
)
1076 if (!lmp_le_capable(hdev
))
1077 return MGMT_STATUS_NOT_SUPPORTED
;
1078 else if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
1079 return MGMT_STATUS_REJECTED
;
1081 return MGMT_STATUS_SUCCESS
;
1084 static void set_discoverable_complete(struct hci_dev
*hdev
, u8 status
)
1086 struct pending_cmd
*cmd
;
1087 struct mgmt_mode
*cp
;
1088 struct hci_request req
;
1091 BT_DBG("status 0x%02x", status
);
1095 cmd
= mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
);
1100 u8 mgmt_err
= mgmt_status(status
);
1101 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_err
);
1102 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1108 changed
= !test_and_set_bit(HCI_DISCOVERABLE
,
1111 if (hdev
->discov_timeout
> 0) {
1112 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
1113 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
1117 changed
= test_and_clear_bit(HCI_DISCOVERABLE
,
1121 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
1124 new_settings(hdev
, cmd
->sk
);
1126 /* When the discoverable mode gets changed, make sure
1127 * that class of device has the limited discoverable
1128 * bit correctly set.
1130 hci_req_init(&req
, hdev
);
1132 hci_req_run(&req
, NULL
);
1135 mgmt_pending_remove(cmd
);
1138 hci_dev_unlock(hdev
);
1141 static int set_discoverable(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1144 struct mgmt_cp_set_discoverable
*cp
= data
;
1145 struct pending_cmd
*cmd
;
1146 struct hci_request req
;
1151 BT_DBG("request for %s", hdev
->name
);
1153 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
) &&
1154 !test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1155 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1156 MGMT_STATUS_REJECTED
);
1158 if (cp
->val
!= 0x00 && cp
->val
!= 0x01 && cp
->val
!= 0x02)
1159 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1160 MGMT_STATUS_INVALID_PARAMS
);
1162 timeout
= __le16_to_cpu(cp
->timeout
);
1164 /* Disabling discoverable requires that no timeout is set,
1165 * and enabling limited discoverable requires a timeout.
1167 if ((cp
->val
== 0x00 && timeout
> 0) ||
1168 (cp
->val
== 0x02 && timeout
== 0))
1169 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1170 MGMT_STATUS_INVALID_PARAMS
);
1174 if (!hdev_is_powered(hdev
) && timeout
> 0) {
1175 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1176 MGMT_STATUS_NOT_POWERED
);
1180 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
) ||
1181 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
)) {
1182 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1187 if (!test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
)) {
1188 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DISCOVERABLE
,
1189 MGMT_STATUS_REJECTED
);
1193 if (!hdev_is_powered(hdev
)) {
1194 bool changed
= false;
1196 /* Setting limited discoverable when powered off is
1197 * not a valid operation since it requires a timeout
1198 * and so no need to check HCI_LIMITED_DISCOVERABLE.
1200 if (!!cp
->val
!= test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
)) {
1201 change_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
1205 err
= send_settings_rsp(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
1210 err
= new_settings(hdev
, sk
);
1215 /* If the current mode is the same, then just update the timeout
1216 * value with the new value. And if only the timeout gets updated,
1217 * then no need for any HCI transactions.
1219 if (!!cp
->val
== test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
) &&
1220 (cp
->val
== 0x02) == test_bit(HCI_LIMITED_DISCOVERABLE
,
1221 &hdev
->dev_flags
)) {
1222 cancel_delayed_work(&hdev
->discov_off
);
1223 hdev
->discov_timeout
= timeout
;
1225 if (cp
->val
&& hdev
->discov_timeout
> 0) {
1226 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
1227 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
1231 err
= send_settings_rsp(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
);
1235 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_DISCOVERABLE
, hdev
, data
, len
);
1241 /* Cancel any potential discoverable timeout that might be
1242 * still active and store new timeout value. The arming of
1243 * the timeout happens in the complete handler.
1245 cancel_delayed_work(&hdev
->discov_off
);
1246 hdev
->discov_timeout
= timeout
;
1248 /* Limited discoverable mode */
1249 if (cp
->val
== 0x02)
1250 set_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1252 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1254 hci_req_init(&req
, hdev
);
1256 /* The procedure for LE-only controllers is much simpler - just
1257 * update the advertising data.
1259 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1265 struct hci_cp_write_current_iac_lap hci_cp
;
1267 if (cp
->val
== 0x02) {
1268 /* Limited discoverable mode */
1269 hci_cp
.num_iac
= min_t(u8
, hdev
->num_iac
, 2);
1270 hci_cp
.iac_lap
[0] = 0x00; /* LIAC */
1271 hci_cp
.iac_lap
[1] = 0x8b;
1272 hci_cp
.iac_lap
[2] = 0x9e;
1273 hci_cp
.iac_lap
[3] = 0x33; /* GIAC */
1274 hci_cp
.iac_lap
[4] = 0x8b;
1275 hci_cp
.iac_lap
[5] = 0x9e;
1277 /* General discoverable mode */
1279 hci_cp
.iac_lap
[0] = 0x33; /* GIAC */
1280 hci_cp
.iac_lap
[1] = 0x8b;
1281 hci_cp
.iac_lap
[2] = 0x9e;
1284 hci_req_add(&req
, HCI_OP_WRITE_CURRENT_IAC_LAP
,
1285 (hci_cp
.num_iac
* 3) + 1, &hci_cp
);
1287 scan
|= SCAN_INQUIRY
;
1289 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1292 hci_req_add(&req
, HCI_OP_WRITE_SCAN_ENABLE
, sizeof(scan
), &scan
);
1295 update_adv_data(&req
);
1297 err
= hci_req_run(&req
, set_discoverable_complete
);
1299 mgmt_pending_remove(cmd
);
1302 hci_dev_unlock(hdev
);
1306 static void write_fast_connectable(struct hci_request
*req
, bool enable
)
1308 struct hci_dev
*hdev
= req
->hdev
;
1309 struct hci_cp_write_page_scan_activity acp
;
1312 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1315 if (hdev
->hci_ver
< BLUETOOTH_VER_1_2
)
1319 type
= PAGE_SCAN_TYPE_INTERLACED
;
1321 /* 160 msec page scan interval */
1322 acp
.interval
= __constant_cpu_to_le16(0x0100);
1324 type
= PAGE_SCAN_TYPE_STANDARD
; /* default */
1326 /* default 1.28 sec page scan */
1327 acp
.interval
= __constant_cpu_to_le16(0x0800);
1330 acp
.window
= __constant_cpu_to_le16(0x0012);
1332 if (__cpu_to_le16(hdev
->page_scan_interval
) != acp
.interval
||
1333 __cpu_to_le16(hdev
->page_scan_window
) != acp
.window
)
1334 hci_req_add(req
, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
,
1337 if (hdev
->page_scan_type
!= type
)
1338 hci_req_add(req
, HCI_OP_WRITE_PAGE_SCAN_TYPE
, 1, &type
);
1341 static u8
get_adv_type(struct hci_dev
*hdev
)
1343 struct pending_cmd
*cmd
;
1346 /* If there's a pending mgmt command the flag will not yet have
1347 * it's final value, so check for this first.
1349 cmd
= mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
);
1351 struct mgmt_mode
*cp
= cmd
->param
;
1352 connectable
= !!cp
->val
;
1354 connectable
= test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1357 return connectable
? LE_ADV_IND
: LE_ADV_NONCONN_IND
;
1360 static void enable_advertising(struct hci_request
*req
)
1362 struct hci_dev
*hdev
= req
->hdev
;
1363 struct hci_cp_le_set_adv_param cp
;
1366 memset(&cp
, 0, sizeof(cp
));
1367 cp
.min_interval
= __constant_cpu_to_le16(0x0800);
1368 cp
.max_interval
= __constant_cpu_to_le16(0x0800);
1369 cp
.type
= get_adv_type(hdev
);
1370 cp
.own_address_type
= hdev
->own_addr_type
;
1371 cp
.channel_map
= 0x07;
1373 hci_req_add(req
, HCI_OP_LE_SET_ADV_PARAM
, sizeof(cp
), &cp
);
1375 hci_req_add(req
, HCI_OP_LE_SET_ADV_ENABLE
, sizeof(enable
), &enable
);
1378 static void disable_advertising(struct hci_request
*req
)
1382 hci_req_add(req
, HCI_OP_LE_SET_ADV_ENABLE
, sizeof(enable
), &enable
);
1385 static void set_connectable_complete(struct hci_dev
*hdev
, u8 status
)
1387 struct pending_cmd
*cmd
;
1388 struct mgmt_mode
*cp
;
1391 BT_DBG("status 0x%02x", status
);
1395 cmd
= mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
);
1400 u8 mgmt_err
= mgmt_status(status
);
1401 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_err
);
1407 changed
= !test_and_set_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1409 changed
= test_and_clear_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1411 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_CONNECTABLE
, hdev
);
1414 new_settings(hdev
, cmd
->sk
);
1417 mgmt_pending_remove(cmd
);
1420 hci_dev_unlock(hdev
);
1423 static int set_connectable_update_settings(struct hci_dev
*hdev
,
1424 struct sock
*sk
, u8 val
)
1426 bool changed
= false;
1429 if (!!val
!= test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
1433 set_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1435 clear_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
1436 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
1439 err
= send_settings_rsp(sk
, MGMT_OP_SET_CONNECTABLE
, hdev
);
1444 return new_settings(hdev
, sk
);
1449 static int set_connectable(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1452 struct mgmt_mode
*cp
= data
;
1453 struct pending_cmd
*cmd
;
1454 struct hci_request req
;
1458 BT_DBG("request for %s", hdev
->name
);
1460 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
) &&
1461 !test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1462 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_CONNECTABLE
,
1463 MGMT_STATUS_REJECTED
);
1465 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1466 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_CONNECTABLE
,
1467 MGMT_STATUS_INVALID_PARAMS
);
1471 if (!hdev_is_powered(hdev
)) {
1472 err
= set_connectable_update_settings(hdev
, sk
, cp
->val
);
1476 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
) ||
1477 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
)) {
1478 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_CONNECTABLE
,
1483 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_CONNECTABLE
, hdev
, data
, len
);
1489 hci_req_init(&req
, hdev
);
1491 /* If BR/EDR is not enabled and we disable advertising as a
1492 * by-product of disabling connectable, we need to update the
1493 * advertising flags.
1495 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
1497 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
1498 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
1500 update_adv_data(&req
);
1501 } else if (cp
->val
!= test_bit(HCI_PSCAN
, &hdev
->flags
)) {
1507 if (test_bit(HCI_ISCAN
, &hdev
->flags
) &&
1508 hdev
->discov_timeout
> 0)
1509 cancel_delayed_work(&hdev
->discov_off
);
1512 hci_req_add(&req
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
1515 /* If we're going from non-connectable to connectable or
1516 * vice-versa when fast connectable is enabled ensure that fast
1517 * connectable gets disabled. write_fast_connectable won't do
1518 * anything if the page scan parameters are already what they
1521 if (cp
->val
|| test_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
))
1522 write_fast_connectable(&req
, false);
1524 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
) &&
1525 hci_conn_num(hdev
, LE_LINK
) == 0) {
1526 disable_advertising(&req
);
1527 enable_advertising(&req
);
1530 err
= hci_req_run(&req
, set_connectable_complete
);
1532 mgmt_pending_remove(cmd
);
1533 if (err
== -ENODATA
)
1534 err
= set_connectable_update_settings(hdev
, sk
,
1540 hci_dev_unlock(hdev
);
1544 static int set_pairable(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1547 struct mgmt_mode
*cp
= data
;
1551 BT_DBG("request for %s", hdev
->name
);
1553 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1554 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_PAIRABLE
,
1555 MGMT_STATUS_INVALID_PARAMS
);
1560 changed
= !test_and_set_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
1562 changed
= test_and_clear_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
1564 err
= send_settings_rsp(sk
, MGMT_OP_SET_PAIRABLE
, hdev
);
1569 err
= new_settings(hdev
, sk
);
1572 hci_dev_unlock(hdev
);
1576 static int set_link_security(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
1579 struct mgmt_mode
*cp
= data
;
1580 struct pending_cmd
*cmd
;
1584 BT_DBG("request for %s", hdev
->name
);
1586 status
= mgmt_bredr_support(hdev
);
1588 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LINK_SECURITY
,
1591 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1592 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LINK_SECURITY
,
1593 MGMT_STATUS_INVALID_PARAMS
);
1597 if (!hdev_is_powered(hdev
)) {
1598 bool changed
= false;
1600 if (!!cp
->val
!= test_bit(HCI_LINK_SECURITY
,
1601 &hdev
->dev_flags
)) {
1602 change_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
);
1606 err
= send_settings_rsp(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
);
1611 err
= new_settings(hdev
, sk
);
1616 if (mgmt_pending_find(MGMT_OP_SET_LINK_SECURITY
, hdev
)) {
1617 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LINK_SECURITY
,
1624 if (test_bit(HCI_AUTH
, &hdev
->flags
) == val
) {
1625 err
= send_settings_rsp(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
);
1629 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LINK_SECURITY
, hdev
, data
, len
);
1635 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, sizeof(val
), &val
);
1637 mgmt_pending_remove(cmd
);
1642 hci_dev_unlock(hdev
);
1646 static int set_ssp(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
1648 struct mgmt_mode
*cp
= data
;
1649 struct pending_cmd
*cmd
;
1653 BT_DBG("request for %s", hdev
->name
);
1655 status
= mgmt_bredr_support(hdev
);
1657 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
, status
);
1659 if (!lmp_ssp_capable(hdev
))
1660 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
,
1661 MGMT_STATUS_NOT_SUPPORTED
);
1663 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1664 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
,
1665 MGMT_STATUS_INVALID_PARAMS
);
1669 if (!hdev_is_powered(hdev
)) {
1673 changed
= !test_and_set_bit(HCI_SSP_ENABLED
,
1676 changed
= test_and_clear_bit(HCI_SSP_ENABLED
,
1679 changed
= test_and_clear_bit(HCI_HS_ENABLED
,
1682 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
1685 err
= send_settings_rsp(sk
, MGMT_OP_SET_SSP
, hdev
);
1690 err
= new_settings(hdev
, sk
);
1695 if (mgmt_pending_find(MGMT_OP_SET_SSP
, hdev
) ||
1696 mgmt_pending_find(MGMT_OP_SET_HS
, hdev
)) {
1697 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SSP
,
1702 if (!!cp
->val
== test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
)) {
1703 err
= send_settings_rsp(sk
, MGMT_OP_SET_SSP
, hdev
);
1707 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_SSP
, hdev
, data
, len
);
1713 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SSP_MODE
, 1, &cp
->val
);
1715 mgmt_pending_remove(cmd
);
1720 hci_dev_unlock(hdev
);
1724 static int set_hs(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
1726 struct mgmt_mode
*cp
= data
;
1731 BT_DBG("request for %s", hdev
->name
);
1733 status
= mgmt_bredr_support(hdev
);
1735 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
, status
);
1737 if (!lmp_ssp_capable(hdev
))
1738 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
1739 MGMT_STATUS_NOT_SUPPORTED
);
1741 if (!test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
1742 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
1743 MGMT_STATUS_REJECTED
);
1745 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1746 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
1747 MGMT_STATUS_INVALID_PARAMS
);
1752 changed
= !test_and_set_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
1754 if (hdev_is_powered(hdev
)) {
1755 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_HS
,
1756 MGMT_STATUS_REJECTED
);
1760 changed
= test_and_clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
1763 err
= send_settings_rsp(sk
, MGMT_OP_SET_HS
, hdev
);
1768 err
= new_settings(hdev
, sk
);
1771 hci_dev_unlock(hdev
);
1775 static void le_enable_complete(struct hci_dev
*hdev
, u8 status
)
1777 struct cmd_lookup match
= { NULL
, hdev
};
1780 u8 mgmt_err
= mgmt_status(status
);
1782 mgmt_pending_foreach(MGMT_OP_SET_LE
, hdev
, cmd_status_rsp
,
1787 mgmt_pending_foreach(MGMT_OP_SET_LE
, hdev
, settings_rsp
, &match
);
1789 new_settings(hdev
, match
.sk
);
1794 /* Make sure the controller has a good default for
1795 * advertising data. Restrict the update to when LE
1796 * has actually been enabled. During power on, the
1797 * update in powered_update_hci will take care of it.
1799 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
)) {
1800 struct hci_request req
;
1804 hci_req_init(&req
, hdev
);
1805 update_adv_data(&req
);
1806 update_scan_rsp_data(&req
);
1807 hci_req_run(&req
, NULL
);
1809 hci_dev_unlock(hdev
);
1813 static int set_le(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
1815 struct mgmt_mode
*cp
= data
;
1816 struct hci_cp_write_le_host_supported hci_cp
;
1817 struct pending_cmd
*cmd
;
1818 struct hci_request req
;
1822 BT_DBG("request for %s", hdev
->name
);
1824 if (!lmp_le_capable(hdev
))
1825 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
1826 MGMT_STATUS_NOT_SUPPORTED
);
1828 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
1829 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
1830 MGMT_STATUS_INVALID_PARAMS
);
1832 /* LE-only devices do not allow toggling LE on/off */
1833 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
1834 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
1835 MGMT_STATUS_REJECTED
);
1840 enabled
= lmp_host_le_capable(hdev
);
1842 if (!hdev_is_powered(hdev
) || val
== enabled
) {
1843 bool changed
= false;
1845 if (val
!= test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
)) {
1846 change_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
);
1850 if (!val
&& test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
)) {
1851 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
1855 err
= send_settings_rsp(sk
, MGMT_OP_SET_LE
, hdev
);
1860 err
= new_settings(hdev
, sk
);
1865 if (mgmt_pending_find(MGMT_OP_SET_LE
, hdev
) ||
1866 mgmt_pending_find(MGMT_OP_SET_ADVERTISING
, hdev
)) {
1867 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_LE
,
1872 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LE
, hdev
, data
, len
);
1878 hci_req_init(&req
, hdev
);
1880 memset(&hci_cp
, 0, sizeof(hci_cp
));
1884 hci_cp
.simul
= lmp_le_br_capable(hdev
);
1886 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
1887 disable_advertising(&req
);
1890 hci_req_add(&req
, HCI_OP_WRITE_LE_HOST_SUPPORTED
, sizeof(hci_cp
),
1893 err
= hci_req_run(&req
, le_enable_complete
);
1895 mgmt_pending_remove(cmd
);
1898 hci_dev_unlock(hdev
);
1902 /* This is a helper function to test for pending mgmt commands that can
1903 * cause CoD or EIR HCI commands. We can only allow one such pending
1904 * mgmt command at a time since otherwise we cannot easily track what
1905 * the current values are, will be, and based on that calculate if a new
1906 * HCI command needs to be sent and if yes with what value.
1908 static bool pending_eir_or_class(struct hci_dev
*hdev
)
1910 struct pending_cmd
*cmd
;
1912 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
1913 switch (cmd
->opcode
) {
1914 case MGMT_OP_ADD_UUID
:
1915 case MGMT_OP_REMOVE_UUID
:
1916 case MGMT_OP_SET_DEV_CLASS
:
1917 case MGMT_OP_SET_POWERED
:
1925 static const u8 bluetooth_base_uuid
[] = {
1926 0xfb, 0x34, 0x9b, 0x5f, 0x80, 0x00, 0x00, 0x80,
1927 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1930 static u8
get_uuid_size(const u8
*uuid
)
1934 if (memcmp(uuid
, bluetooth_base_uuid
, 12))
1937 val
= get_unaligned_le32(&uuid
[12]);
1944 static void mgmt_class_complete(struct hci_dev
*hdev
, u16 mgmt_op
, u8 status
)
1946 struct pending_cmd
*cmd
;
1950 cmd
= mgmt_pending_find(mgmt_op
, hdev
);
1954 cmd_complete(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_status(status
),
1955 hdev
->dev_class
, 3);
1957 mgmt_pending_remove(cmd
);
1960 hci_dev_unlock(hdev
);
1963 static void add_uuid_complete(struct hci_dev
*hdev
, u8 status
)
1965 BT_DBG("status 0x%02x", status
);
1967 mgmt_class_complete(hdev
, MGMT_OP_ADD_UUID
, status
);
1970 static int add_uuid(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
1972 struct mgmt_cp_add_uuid
*cp
= data
;
1973 struct pending_cmd
*cmd
;
1974 struct hci_request req
;
1975 struct bt_uuid
*uuid
;
1978 BT_DBG("request for %s", hdev
->name
);
1982 if (pending_eir_or_class(hdev
)) {
1983 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_ADD_UUID
,
1988 uuid
= kmalloc(sizeof(*uuid
), GFP_KERNEL
);
1994 memcpy(uuid
->uuid
, cp
->uuid
, 16);
1995 uuid
->svc_hint
= cp
->svc_hint
;
1996 uuid
->size
= get_uuid_size(cp
->uuid
);
1998 list_add_tail(&uuid
->list
, &hdev
->uuids
);
2000 hci_req_init(&req
, hdev
);
2005 err
= hci_req_run(&req
, add_uuid_complete
);
2007 if (err
!= -ENODATA
)
2010 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_UUID
, 0,
2011 hdev
->dev_class
, 3);
2015 cmd
= mgmt_pending_add(sk
, MGMT_OP_ADD_UUID
, hdev
, data
, len
);
2024 hci_dev_unlock(hdev
);
2028 static bool enable_service_cache(struct hci_dev
*hdev
)
2030 if (!hdev_is_powered(hdev
))
2033 if (!test_and_set_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
)) {
2034 queue_delayed_work(hdev
->workqueue
, &hdev
->service_cache
,
2042 static void remove_uuid_complete(struct hci_dev
*hdev
, u8 status
)
2044 BT_DBG("status 0x%02x", status
);
2046 mgmt_class_complete(hdev
, MGMT_OP_REMOVE_UUID
, status
);
2049 static int remove_uuid(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2052 struct mgmt_cp_remove_uuid
*cp
= data
;
2053 struct pending_cmd
*cmd
;
2054 struct bt_uuid
*match
, *tmp
;
2055 u8 bt_uuid_any
[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
2056 struct hci_request req
;
2059 BT_DBG("request for %s", hdev
->name
);
2063 if (pending_eir_or_class(hdev
)) {
2064 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
,
2069 if (memcmp(cp
->uuid
, bt_uuid_any
, 16) == 0) {
2070 err
= hci_uuids_clear(hdev
);
2072 if (enable_service_cache(hdev
)) {
2073 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
,
2074 0, hdev
->dev_class
, 3);
2083 list_for_each_entry_safe(match
, tmp
, &hdev
->uuids
, list
) {
2084 if (memcmp(match
->uuid
, cp
->uuid
, 16) != 0)
2087 list_del(&match
->list
);
2093 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
,
2094 MGMT_STATUS_INVALID_PARAMS
);
2099 hci_req_init(&req
, hdev
);
2104 err
= hci_req_run(&req
, remove_uuid_complete
);
2106 if (err
!= -ENODATA
)
2109 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_UUID
, 0,
2110 hdev
->dev_class
, 3);
2114 cmd
= mgmt_pending_add(sk
, MGMT_OP_REMOVE_UUID
, hdev
, data
, len
);
2123 hci_dev_unlock(hdev
);
2127 static void set_class_complete(struct hci_dev
*hdev
, u8 status
)
2129 BT_DBG("status 0x%02x", status
);
2131 mgmt_class_complete(hdev
, MGMT_OP_SET_DEV_CLASS
, status
);
2134 static int set_dev_class(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2137 struct mgmt_cp_set_dev_class
*cp
= data
;
2138 struct pending_cmd
*cmd
;
2139 struct hci_request req
;
2142 BT_DBG("request for %s", hdev
->name
);
2144 if (!lmp_bredr_capable(hdev
))
2145 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
,
2146 MGMT_STATUS_NOT_SUPPORTED
);
2150 if (pending_eir_or_class(hdev
)) {
2151 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
,
2156 if ((cp
->minor
& 0x03) != 0 || (cp
->major
& 0xe0) != 0) {
2157 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
,
2158 MGMT_STATUS_INVALID_PARAMS
);
2162 hdev
->major_class
= cp
->major
;
2163 hdev
->minor_class
= cp
->minor
;
2165 if (!hdev_is_powered(hdev
)) {
2166 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
, 0,
2167 hdev
->dev_class
, 3);
2171 hci_req_init(&req
, hdev
);
2173 if (test_and_clear_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
)) {
2174 hci_dev_unlock(hdev
);
2175 cancel_delayed_work_sync(&hdev
->service_cache
);
2182 err
= hci_req_run(&req
, set_class_complete
);
2184 if (err
!= -ENODATA
)
2187 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_DEV_CLASS
, 0,
2188 hdev
->dev_class
, 3);
2192 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_DEV_CLASS
, hdev
, data
, len
);
2201 hci_dev_unlock(hdev
);
2205 static int load_link_keys(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2208 struct mgmt_cp_load_link_keys
*cp
= data
;
2209 u16 key_count
, expected_len
;
2212 BT_DBG("request for %s", hdev
->name
);
2214 if (!lmp_bredr_capable(hdev
))
2215 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2216 MGMT_STATUS_NOT_SUPPORTED
);
2218 key_count
= __le16_to_cpu(cp
->key_count
);
2220 expected_len
= sizeof(*cp
) + key_count
*
2221 sizeof(struct mgmt_link_key_info
);
2222 if (expected_len
!= len
) {
2223 BT_ERR("load_link_keys: expected %u bytes, got %u bytes",
2225 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2226 MGMT_STATUS_INVALID_PARAMS
);
2229 if (cp
->debug_keys
!= 0x00 && cp
->debug_keys
!= 0x01)
2230 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2231 MGMT_STATUS_INVALID_PARAMS
);
2233 BT_DBG("%s debug_keys %u key_count %u", hdev
->name
, cp
->debug_keys
,
2236 for (i
= 0; i
< key_count
; i
++) {
2237 struct mgmt_link_key_info
*key
= &cp
->keys
[i
];
2239 if (key
->addr
.type
!= BDADDR_BREDR
|| key
->type
> 0x08)
2240 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
,
2241 MGMT_STATUS_INVALID_PARAMS
);
2246 hci_link_keys_clear(hdev
);
2249 set_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
);
2251 clear_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
);
2253 for (i
= 0; i
< key_count
; i
++) {
2254 struct mgmt_link_key_info
*key
= &cp
->keys
[i
];
2256 hci_add_link_key(hdev
, NULL
, 0, &key
->addr
.bdaddr
, key
->val
,
2257 key
->type
, key
->pin_len
);
2260 cmd_complete(sk
, hdev
->id
, MGMT_OP_LOAD_LINK_KEYS
, 0, NULL
, 0);
2262 hci_dev_unlock(hdev
);
2267 static int device_unpaired(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
2268 u8 addr_type
, struct sock
*skip_sk
)
2270 struct mgmt_ev_device_unpaired ev
;
2272 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
2273 ev
.addr
.type
= addr_type
;
2275 return mgmt_event(MGMT_EV_DEVICE_UNPAIRED
, hdev
, &ev
, sizeof(ev
),
2279 static int unpair_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2282 struct mgmt_cp_unpair_device
*cp
= data
;
2283 struct mgmt_rp_unpair_device rp
;
2284 struct hci_cp_disconnect dc
;
2285 struct pending_cmd
*cmd
;
2286 struct hci_conn
*conn
;
2289 memset(&rp
, 0, sizeof(rp
));
2290 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
2291 rp
.addr
.type
= cp
->addr
.type
;
2293 if (!bdaddr_type_is_valid(cp
->addr
.type
))
2294 return cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2295 MGMT_STATUS_INVALID_PARAMS
,
2298 if (cp
->disconnect
!= 0x00 && cp
->disconnect
!= 0x01)
2299 return cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2300 MGMT_STATUS_INVALID_PARAMS
,
2305 if (!hdev_is_powered(hdev
)) {
2306 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2307 MGMT_STATUS_NOT_POWERED
, &rp
, sizeof(rp
));
2311 if (cp
->addr
.type
== BDADDR_BREDR
)
2312 err
= hci_remove_link_key(hdev
, &cp
->addr
.bdaddr
);
2314 err
= hci_remove_ltk(hdev
, &cp
->addr
.bdaddr
);
2317 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
,
2318 MGMT_STATUS_NOT_PAIRED
, &rp
, sizeof(rp
));
2322 if (cp
->disconnect
) {
2323 if (cp
->addr
.type
== BDADDR_BREDR
)
2324 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
,
2327 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
,
2334 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNPAIR_DEVICE
, 0,
2336 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, sk
);
2340 cmd
= mgmt_pending_add(sk
, MGMT_OP_UNPAIR_DEVICE
, hdev
, cp
,
2347 dc
.handle
= cpu_to_le16(conn
->handle
);
2348 dc
.reason
= 0x13; /* Remote User Terminated Connection */
2349 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
2351 mgmt_pending_remove(cmd
);
2354 hci_dev_unlock(hdev
);
2358 static int disconnect(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2361 struct mgmt_cp_disconnect
*cp
= data
;
2362 struct mgmt_rp_disconnect rp
;
2363 struct hci_cp_disconnect dc
;
2364 struct pending_cmd
*cmd
;
2365 struct hci_conn
*conn
;
2370 memset(&rp
, 0, sizeof(rp
));
2371 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
2372 rp
.addr
.type
= cp
->addr
.type
;
2374 if (!bdaddr_type_is_valid(cp
->addr
.type
))
2375 return cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2376 MGMT_STATUS_INVALID_PARAMS
,
2381 if (!test_bit(HCI_UP
, &hdev
->flags
)) {
2382 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2383 MGMT_STATUS_NOT_POWERED
, &rp
, sizeof(rp
));
2387 if (mgmt_pending_find(MGMT_OP_DISCONNECT
, hdev
)) {
2388 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2389 MGMT_STATUS_BUSY
, &rp
, sizeof(rp
));
2393 if (cp
->addr
.type
== BDADDR_BREDR
)
2394 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
,
2397 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &cp
->addr
.bdaddr
);
2399 if (!conn
|| conn
->state
== BT_OPEN
|| conn
->state
== BT_CLOSED
) {
2400 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_DISCONNECT
,
2401 MGMT_STATUS_NOT_CONNECTED
, &rp
, sizeof(rp
));
2405 cmd
= mgmt_pending_add(sk
, MGMT_OP_DISCONNECT
, hdev
, data
, len
);
2411 dc
.handle
= cpu_to_le16(conn
->handle
);
2412 dc
.reason
= HCI_ERROR_REMOTE_USER_TERM
;
2414 err
= hci_send_cmd(hdev
, HCI_OP_DISCONNECT
, sizeof(dc
), &dc
);
2416 mgmt_pending_remove(cmd
);
2419 hci_dev_unlock(hdev
);
2423 static u8
link_to_bdaddr(u8 link_type
, u8 addr_type
)
2425 switch (link_type
) {
2427 switch (addr_type
) {
2428 case ADDR_LE_DEV_PUBLIC
:
2429 return BDADDR_LE_PUBLIC
;
2432 /* Fallback to LE Random address type */
2433 return BDADDR_LE_RANDOM
;
2437 /* Fallback to BR/EDR type */
2438 return BDADDR_BREDR
;
2442 static int get_connections(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2445 struct mgmt_rp_get_connections
*rp
;
2455 if (!hdev_is_powered(hdev
)) {
2456 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_GET_CONNECTIONS
,
2457 MGMT_STATUS_NOT_POWERED
);
2462 list_for_each_entry(c
, &hdev
->conn_hash
.list
, list
) {
2463 if (test_bit(HCI_CONN_MGMT_CONNECTED
, &c
->flags
))
2467 rp_len
= sizeof(*rp
) + (i
* sizeof(struct mgmt_addr_info
));
2468 rp
= kmalloc(rp_len
, GFP_KERNEL
);
2475 list_for_each_entry(c
, &hdev
->conn_hash
.list
, list
) {
2476 if (!test_bit(HCI_CONN_MGMT_CONNECTED
, &c
->flags
))
2478 bacpy(&rp
->addr
[i
].bdaddr
, &c
->dst
);
2479 rp
->addr
[i
].type
= link_to_bdaddr(c
->type
, c
->dst_type
);
2480 if (c
->type
== SCO_LINK
|| c
->type
== ESCO_LINK
)
2485 rp
->conn_count
= cpu_to_le16(i
);
2487 /* Recalculate length in case of filtered SCO connections, etc */
2488 rp_len
= sizeof(*rp
) + (i
* sizeof(struct mgmt_addr_info
));
2490 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_GET_CONNECTIONS
, 0, rp
,
2496 hci_dev_unlock(hdev
);
2500 static int send_pin_code_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
2501 struct mgmt_cp_pin_code_neg_reply
*cp
)
2503 struct pending_cmd
*cmd
;
2506 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_NEG_REPLY
, hdev
, cp
,
2511 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2512 sizeof(cp
->addr
.bdaddr
), &cp
->addr
.bdaddr
);
2514 mgmt_pending_remove(cmd
);
2519 static int pin_code_reply(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2522 struct hci_conn
*conn
;
2523 struct mgmt_cp_pin_code_reply
*cp
= data
;
2524 struct hci_cp_pin_code_reply reply
;
2525 struct pending_cmd
*cmd
;
2532 if (!hdev_is_powered(hdev
)) {
2533 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
2534 MGMT_STATUS_NOT_POWERED
);
2538 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->addr
.bdaddr
);
2540 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
2541 MGMT_STATUS_NOT_CONNECTED
);
2545 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
&& cp
->pin_len
!= 16) {
2546 struct mgmt_cp_pin_code_neg_reply ncp
;
2548 memcpy(&ncp
.addr
, &cp
->addr
, sizeof(ncp
.addr
));
2550 BT_ERR("PIN code is not 16 bytes long");
2552 err
= send_pin_code_neg_reply(sk
, hdev
, &ncp
);
2554 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
2555 MGMT_STATUS_INVALID_PARAMS
);
2560 cmd
= mgmt_pending_add(sk
, MGMT_OP_PIN_CODE_REPLY
, hdev
, data
, len
);
2566 bacpy(&reply
.bdaddr
, &cp
->addr
.bdaddr
);
2567 reply
.pin_len
= cp
->pin_len
;
2568 memcpy(reply
.pin_code
, cp
->pin_code
, sizeof(reply
.pin_code
));
2570 err
= hci_send_cmd(hdev
, HCI_OP_PIN_CODE_REPLY
, sizeof(reply
), &reply
);
2572 mgmt_pending_remove(cmd
);
2575 hci_dev_unlock(hdev
);
2579 static int set_io_capability(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2582 struct mgmt_cp_set_io_capability
*cp
= data
;
2588 hdev
->io_capability
= cp
->io_capability
;
2590 BT_DBG("%s IO capability set to 0x%02x", hdev
->name
,
2591 hdev
->io_capability
);
2593 hci_dev_unlock(hdev
);
2595 return cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_IO_CAPABILITY
, 0, NULL
,
2599 static struct pending_cmd
*find_pairing(struct hci_conn
*conn
)
2601 struct hci_dev
*hdev
= conn
->hdev
;
2602 struct pending_cmd
*cmd
;
2604 list_for_each_entry(cmd
, &hdev
->mgmt_pending
, list
) {
2605 if (cmd
->opcode
!= MGMT_OP_PAIR_DEVICE
)
2608 if (cmd
->user_data
!= conn
)
2617 static void pairing_complete(struct pending_cmd
*cmd
, u8 status
)
2619 struct mgmt_rp_pair_device rp
;
2620 struct hci_conn
*conn
= cmd
->user_data
;
2622 bacpy(&rp
.addr
.bdaddr
, &conn
->dst
);
2623 rp
.addr
.type
= link_to_bdaddr(conn
->type
, conn
->dst_type
);
2625 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_PAIR_DEVICE
, status
,
2628 /* So we don't get further callbacks for this connection */
2629 conn
->connect_cfm_cb
= NULL
;
2630 conn
->security_cfm_cb
= NULL
;
2631 conn
->disconn_cfm_cb
= NULL
;
2633 hci_conn_drop(conn
);
2635 mgmt_pending_remove(cmd
);
2638 static void pairing_complete_cb(struct hci_conn
*conn
, u8 status
)
2640 struct pending_cmd
*cmd
;
2642 BT_DBG("status %u", status
);
2644 cmd
= find_pairing(conn
);
2646 BT_DBG("Unable to find a pending command");
2648 pairing_complete(cmd
, mgmt_status(status
));
2651 static void le_connect_complete_cb(struct hci_conn
*conn
, u8 status
)
2653 struct pending_cmd
*cmd
;
2655 BT_DBG("status %u", status
);
2660 cmd
= find_pairing(conn
);
2662 BT_DBG("Unable to find a pending command");
2664 pairing_complete(cmd
, mgmt_status(status
));
2667 static int pair_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2670 struct mgmt_cp_pair_device
*cp
= data
;
2671 struct mgmt_rp_pair_device rp
;
2672 struct pending_cmd
*cmd
;
2673 u8 sec_level
, auth_type
;
2674 struct hci_conn
*conn
;
2679 memset(&rp
, 0, sizeof(rp
));
2680 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
2681 rp
.addr
.type
= cp
->addr
.type
;
2683 if (!bdaddr_type_is_valid(cp
->addr
.type
))
2684 return cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
2685 MGMT_STATUS_INVALID_PARAMS
,
2690 if (!hdev_is_powered(hdev
)) {
2691 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
2692 MGMT_STATUS_NOT_POWERED
, &rp
, sizeof(rp
));
2696 sec_level
= BT_SECURITY_MEDIUM
;
2697 if (cp
->io_cap
== 0x03)
2698 auth_type
= HCI_AT_DEDICATED_BONDING
;
2700 auth_type
= HCI_AT_DEDICATED_BONDING_MITM
;
2702 if (cp
->addr
.type
== BDADDR_BREDR
)
2703 conn
= hci_connect(hdev
, ACL_LINK
, &cp
->addr
.bdaddr
,
2704 cp
->addr
.type
, sec_level
, auth_type
);
2706 conn
= hci_connect(hdev
, LE_LINK
, &cp
->addr
.bdaddr
,
2707 cp
->addr
.type
, sec_level
, auth_type
);
2712 if (PTR_ERR(conn
) == -EBUSY
)
2713 status
= MGMT_STATUS_BUSY
;
2715 status
= MGMT_STATUS_CONNECT_FAILED
;
2717 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
2723 if (conn
->connect_cfm_cb
) {
2724 hci_conn_drop(conn
);
2725 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_PAIR_DEVICE
,
2726 MGMT_STATUS_BUSY
, &rp
, sizeof(rp
));
2730 cmd
= mgmt_pending_add(sk
, MGMT_OP_PAIR_DEVICE
, hdev
, data
, len
);
2733 hci_conn_drop(conn
);
2737 /* For LE, just connecting isn't a proof that the pairing finished */
2738 if (cp
->addr
.type
== BDADDR_BREDR
)
2739 conn
->connect_cfm_cb
= pairing_complete_cb
;
2741 conn
->connect_cfm_cb
= le_connect_complete_cb
;
2743 conn
->security_cfm_cb
= pairing_complete_cb
;
2744 conn
->disconn_cfm_cb
= pairing_complete_cb
;
2745 conn
->io_capability
= cp
->io_cap
;
2746 cmd
->user_data
= conn
;
2748 if (conn
->state
== BT_CONNECTED
&&
2749 hci_conn_security(conn
, sec_level
, auth_type
))
2750 pairing_complete(cmd
, 0);
2755 hci_dev_unlock(hdev
);
2759 static int cancel_pair_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2762 struct mgmt_addr_info
*addr
= data
;
2763 struct pending_cmd
*cmd
;
2764 struct hci_conn
*conn
;
2771 if (!hdev_is_powered(hdev
)) {
2772 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
,
2773 MGMT_STATUS_NOT_POWERED
);
2777 cmd
= mgmt_pending_find(MGMT_OP_PAIR_DEVICE
, hdev
);
2779 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
,
2780 MGMT_STATUS_INVALID_PARAMS
);
2784 conn
= cmd
->user_data
;
2786 if (bacmp(&addr
->bdaddr
, &conn
->dst
) != 0) {
2787 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
,
2788 MGMT_STATUS_INVALID_PARAMS
);
2792 pairing_complete(cmd
, MGMT_STATUS_CANCELLED
);
2794 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_CANCEL_PAIR_DEVICE
, 0,
2795 addr
, sizeof(*addr
));
2797 hci_dev_unlock(hdev
);
2801 static int user_pairing_resp(struct sock
*sk
, struct hci_dev
*hdev
,
2802 struct mgmt_addr_info
*addr
, u16 mgmt_op
,
2803 u16 hci_op
, __le32 passkey
)
2805 struct pending_cmd
*cmd
;
2806 struct hci_conn
*conn
;
2811 if (!hdev_is_powered(hdev
)) {
2812 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
2813 MGMT_STATUS_NOT_POWERED
, addr
,
2818 if (addr
->type
== BDADDR_BREDR
)
2819 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &addr
->bdaddr
);
2821 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &addr
->bdaddr
);
2824 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
2825 MGMT_STATUS_NOT_CONNECTED
, addr
,
2830 if (addr
->type
== BDADDR_LE_PUBLIC
|| addr
->type
== BDADDR_LE_RANDOM
) {
2831 /* Continue with pairing via SMP */
2832 err
= smp_user_confirm_reply(conn
, mgmt_op
, passkey
);
2835 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
2836 MGMT_STATUS_SUCCESS
, addr
,
2839 err
= cmd_complete(sk
, hdev
->id
, mgmt_op
,
2840 MGMT_STATUS_FAILED
, addr
,
2846 cmd
= mgmt_pending_add(sk
, mgmt_op
, hdev
, addr
, sizeof(*addr
));
2852 /* Continue with pairing via HCI */
2853 if (hci_op
== HCI_OP_USER_PASSKEY_REPLY
) {
2854 struct hci_cp_user_passkey_reply cp
;
2856 bacpy(&cp
.bdaddr
, &addr
->bdaddr
);
2857 cp
.passkey
= passkey
;
2858 err
= hci_send_cmd(hdev
, hci_op
, sizeof(cp
), &cp
);
2860 err
= hci_send_cmd(hdev
, hci_op
, sizeof(addr
->bdaddr
),
2864 mgmt_pending_remove(cmd
);
2867 hci_dev_unlock(hdev
);
2871 static int pin_code_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
2872 void *data
, u16 len
)
2874 struct mgmt_cp_pin_code_neg_reply
*cp
= data
;
2878 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
2879 MGMT_OP_PIN_CODE_NEG_REPLY
,
2880 HCI_OP_PIN_CODE_NEG_REPLY
, 0);
2883 static int user_confirm_reply(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2886 struct mgmt_cp_user_confirm_reply
*cp
= data
;
2890 if (len
!= sizeof(*cp
))
2891 return cmd_status(sk
, hdev
->id
, MGMT_OP_USER_CONFIRM_REPLY
,
2892 MGMT_STATUS_INVALID_PARAMS
);
2894 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
2895 MGMT_OP_USER_CONFIRM_REPLY
,
2896 HCI_OP_USER_CONFIRM_REPLY
, 0);
2899 static int user_confirm_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
2900 void *data
, u16 len
)
2902 struct mgmt_cp_user_confirm_neg_reply
*cp
= data
;
2906 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
2907 MGMT_OP_USER_CONFIRM_NEG_REPLY
,
2908 HCI_OP_USER_CONFIRM_NEG_REPLY
, 0);
2911 static int user_passkey_reply(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2914 struct mgmt_cp_user_passkey_reply
*cp
= data
;
2918 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
2919 MGMT_OP_USER_PASSKEY_REPLY
,
2920 HCI_OP_USER_PASSKEY_REPLY
, cp
->passkey
);
2923 static int user_passkey_neg_reply(struct sock
*sk
, struct hci_dev
*hdev
,
2924 void *data
, u16 len
)
2926 struct mgmt_cp_user_passkey_neg_reply
*cp
= data
;
2930 return user_pairing_resp(sk
, hdev
, &cp
->addr
,
2931 MGMT_OP_USER_PASSKEY_NEG_REPLY
,
2932 HCI_OP_USER_PASSKEY_NEG_REPLY
, 0);
2935 static void update_name(struct hci_request
*req
)
2937 struct hci_dev
*hdev
= req
->hdev
;
2938 struct hci_cp_write_local_name cp
;
2940 memcpy(cp
.name
, hdev
->dev_name
, sizeof(cp
.name
));
2942 hci_req_add(req
, HCI_OP_WRITE_LOCAL_NAME
, sizeof(cp
), &cp
);
2945 static void set_name_complete(struct hci_dev
*hdev
, u8 status
)
2947 struct mgmt_cp_set_local_name
*cp
;
2948 struct pending_cmd
*cmd
;
2950 BT_DBG("status 0x%02x", status
);
2954 cmd
= mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME
, hdev
);
2961 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
,
2962 mgmt_status(status
));
2964 cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
, 0,
2967 mgmt_pending_remove(cmd
);
2970 hci_dev_unlock(hdev
);
2973 static int set_local_name(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
2976 struct mgmt_cp_set_local_name
*cp
= data
;
2977 struct pending_cmd
*cmd
;
2978 struct hci_request req
;
2985 /* If the old values are the same as the new ones just return a
2986 * direct command complete event.
2988 if (!memcmp(hdev
->dev_name
, cp
->name
, sizeof(hdev
->dev_name
)) &&
2989 !memcmp(hdev
->short_name
, cp
->short_name
,
2990 sizeof(hdev
->short_name
))) {
2991 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
, 0,
2996 memcpy(hdev
->short_name
, cp
->short_name
, sizeof(hdev
->short_name
));
2998 if (!hdev_is_powered(hdev
)) {
2999 memcpy(hdev
->dev_name
, cp
->name
, sizeof(hdev
->dev_name
));
3001 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_LOCAL_NAME
, 0,
3006 err
= mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED
, hdev
, data
, len
,
3012 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_LOCAL_NAME
, hdev
, data
, len
);
3018 memcpy(hdev
->dev_name
, cp
->name
, sizeof(hdev
->dev_name
));
3020 hci_req_init(&req
, hdev
);
3022 if (lmp_bredr_capable(hdev
)) {
3027 /* The name is stored in the scan response data and so
3028 * no need to udpate the advertising data here.
3030 if (lmp_le_capable(hdev
))
3031 update_scan_rsp_data(&req
);
3033 err
= hci_req_run(&req
, set_name_complete
);
3035 mgmt_pending_remove(cmd
);
3038 hci_dev_unlock(hdev
);
3042 static int read_local_oob_data(struct sock
*sk
, struct hci_dev
*hdev
,
3043 void *data
, u16 data_len
)
3045 struct pending_cmd
*cmd
;
3048 BT_DBG("%s", hdev
->name
);
3052 if (!hdev_is_powered(hdev
)) {
3053 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
3054 MGMT_STATUS_NOT_POWERED
);
3058 if (!lmp_ssp_capable(hdev
)) {
3059 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
3060 MGMT_STATUS_NOT_SUPPORTED
);
3064 if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
)) {
3065 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
3070 cmd
= mgmt_pending_add(sk
, MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
, NULL
, 0);
3076 if (test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
))
3077 err
= hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_OOB_EXT_DATA
,
3080 err
= hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_OOB_DATA
, 0, NULL
);
3083 mgmt_pending_remove(cmd
);
3086 hci_dev_unlock(hdev
);
3090 static int add_remote_oob_data(struct sock
*sk
, struct hci_dev
*hdev
,
3091 void *data
, u16 len
)
3095 BT_DBG("%s ", hdev
->name
);
3099 if (len
== MGMT_ADD_REMOTE_OOB_DATA_SIZE
) {
3100 struct mgmt_cp_add_remote_oob_data
*cp
= data
;
3103 err
= hci_add_remote_oob_data(hdev
, &cp
->addr
.bdaddr
,
3104 cp
->hash
, cp
->randomizer
);
3106 status
= MGMT_STATUS_FAILED
;
3108 status
= MGMT_STATUS_SUCCESS
;
3110 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
3111 status
, &cp
->addr
, sizeof(cp
->addr
));
3112 } else if (len
== MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE
) {
3113 struct mgmt_cp_add_remote_oob_ext_data
*cp
= data
;
3116 err
= hci_add_remote_oob_ext_data(hdev
, &cp
->addr
.bdaddr
,
3122 status
= MGMT_STATUS_FAILED
;
3124 status
= MGMT_STATUS_SUCCESS
;
3126 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
3127 status
, &cp
->addr
, sizeof(cp
->addr
));
3129 BT_ERR("add_remote_oob_data: invalid length of %u bytes", len
);
3130 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_ADD_REMOTE_OOB_DATA
,
3131 MGMT_STATUS_INVALID_PARAMS
);
3134 hci_dev_unlock(hdev
);
3138 static int remove_remote_oob_data(struct sock
*sk
, struct hci_dev
*hdev
,
3139 void *data
, u16 len
)
3141 struct mgmt_cp_remove_remote_oob_data
*cp
= data
;
3145 BT_DBG("%s", hdev
->name
);
3149 err
= hci_remove_remote_oob_data(hdev
, &cp
->addr
.bdaddr
);
3151 status
= MGMT_STATUS_INVALID_PARAMS
;
3153 status
= MGMT_STATUS_SUCCESS
;
3155 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_REMOVE_REMOTE_OOB_DATA
,
3156 status
, &cp
->addr
, sizeof(cp
->addr
));
3158 hci_dev_unlock(hdev
);
3162 static int mgmt_start_discovery_failed(struct hci_dev
*hdev
, u8 status
)
3164 struct pending_cmd
*cmd
;
3168 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
3170 cmd
= mgmt_pending_find(MGMT_OP_START_DISCOVERY
, hdev
);
3174 type
= hdev
->discovery
.type
;
3176 err
= cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, mgmt_status(status
),
3177 &type
, sizeof(type
));
3178 mgmt_pending_remove(cmd
);
3183 static void start_discovery_complete(struct hci_dev
*hdev
, u8 status
)
3185 BT_DBG("status %d", status
);
3189 mgmt_start_discovery_failed(hdev
, status
);
3190 hci_dev_unlock(hdev
);
3195 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
3196 hci_dev_unlock(hdev
);
3198 switch (hdev
->discovery
.type
) {
3199 case DISCOV_TYPE_LE
:
3200 queue_delayed_work(hdev
->workqueue
, &hdev
->le_scan_disable
,
3204 case DISCOV_TYPE_INTERLEAVED
:
3205 queue_delayed_work(hdev
->workqueue
, &hdev
->le_scan_disable
,
3206 DISCOV_INTERLEAVED_TIMEOUT
);
3209 case DISCOV_TYPE_BREDR
:
3213 BT_ERR("Invalid discovery type %d", hdev
->discovery
.type
);
3217 static int start_discovery(struct sock
*sk
, struct hci_dev
*hdev
,
3218 void *data
, u16 len
)
3220 struct mgmt_cp_start_discovery
*cp
= data
;
3221 struct pending_cmd
*cmd
;
3222 struct hci_cp_le_set_scan_param param_cp
;
3223 struct hci_cp_le_set_scan_enable enable_cp
;
3224 struct hci_cp_inquiry inq_cp
;
3225 struct hci_request req
;
3226 /* General inquiry access code (GIAC) */
3227 u8 lap
[3] = { 0x33, 0x8b, 0x9e };
3231 BT_DBG("%s", hdev
->name
);
3235 if (!hdev_is_powered(hdev
)) {
3236 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3237 MGMT_STATUS_NOT_POWERED
);
3241 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
)) {
3242 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3247 if (hdev
->discovery
.state
!= DISCOVERY_STOPPED
) {
3248 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3253 cmd
= mgmt_pending_add(sk
, MGMT_OP_START_DISCOVERY
, hdev
, NULL
, 0);
3259 hdev
->discovery
.type
= cp
->type
;
3261 hci_req_init(&req
, hdev
);
3263 switch (hdev
->discovery
.type
) {
3264 case DISCOV_TYPE_BREDR
:
3265 status
= mgmt_bredr_support(hdev
);
3267 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3269 mgmt_pending_remove(cmd
);
3273 if (test_bit(HCI_INQUIRY
, &hdev
->flags
)) {
3274 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3276 mgmt_pending_remove(cmd
);
3280 hci_inquiry_cache_flush(hdev
);
3282 memset(&inq_cp
, 0, sizeof(inq_cp
));
3283 memcpy(&inq_cp
.lap
, lap
, sizeof(inq_cp
.lap
));
3284 inq_cp
.length
= DISCOV_BREDR_INQUIRY_LEN
;
3285 hci_req_add(&req
, HCI_OP_INQUIRY
, sizeof(inq_cp
), &inq_cp
);
3288 case DISCOV_TYPE_LE
:
3289 case DISCOV_TYPE_INTERLEAVED
:
3290 status
= mgmt_le_support(hdev
);
3292 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3294 mgmt_pending_remove(cmd
);
3298 if (hdev
->discovery
.type
== DISCOV_TYPE_INTERLEAVED
&&
3299 !test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
3300 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3301 MGMT_STATUS_NOT_SUPPORTED
);
3302 mgmt_pending_remove(cmd
);
3306 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
)) {
3307 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3308 MGMT_STATUS_REJECTED
);
3309 mgmt_pending_remove(cmd
);
3313 if (test_bit(HCI_LE_SCAN
, &hdev
->dev_flags
)) {
3314 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3316 mgmt_pending_remove(cmd
);
3320 memset(¶m_cp
, 0, sizeof(param_cp
));
3321 param_cp
.type
= LE_SCAN_ACTIVE
;
3322 param_cp
.interval
= cpu_to_le16(DISCOV_LE_SCAN_INT
);
3323 param_cp
.window
= cpu_to_le16(DISCOV_LE_SCAN_WIN
);
3324 param_cp
.own_address_type
= hdev
->own_addr_type
;
3325 hci_req_add(&req
, HCI_OP_LE_SET_SCAN_PARAM
, sizeof(param_cp
),
3328 memset(&enable_cp
, 0, sizeof(enable_cp
));
3329 enable_cp
.enable
= LE_SCAN_ENABLE
;
3330 enable_cp
.filter_dup
= LE_SCAN_FILTER_DUP_ENABLE
;
3331 hci_req_add(&req
, HCI_OP_LE_SET_SCAN_ENABLE
, sizeof(enable_cp
),
3336 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_START_DISCOVERY
,
3337 MGMT_STATUS_INVALID_PARAMS
);
3338 mgmt_pending_remove(cmd
);
3342 err
= hci_req_run(&req
, start_discovery_complete
);
3344 mgmt_pending_remove(cmd
);
3346 hci_discovery_set_state(hdev
, DISCOVERY_STARTING
);
3349 hci_dev_unlock(hdev
);
3353 static int mgmt_stop_discovery_failed(struct hci_dev
*hdev
, u8 status
)
3355 struct pending_cmd
*cmd
;
3358 cmd
= mgmt_pending_find(MGMT_OP_STOP_DISCOVERY
, hdev
);
3362 err
= cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, mgmt_status(status
),
3363 &hdev
->discovery
.type
, sizeof(hdev
->discovery
.type
));
3364 mgmt_pending_remove(cmd
);
3369 static void stop_discovery_complete(struct hci_dev
*hdev
, u8 status
)
3371 BT_DBG("status %d", status
);
3376 mgmt_stop_discovery_failed(hdev
, status
);
3380 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
3383 hci_dev_unlock(hdev
);
3386 static int stop_discovery(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3389 struct mgmt_cp_stop_discovery
*mgmt_cp
= data
;
3390 struct pending_cmd
*cmd
;
3391 struct hci_cp_remote_name_req_cancel cp
;
3392 struct inquiry_entry
*e
;
3393 struct hci_request req
;
3394 struct hci_cp_le_set_scan_enable enable_cp
;
3397 BT_DBG("%s", hdev
->name
);
3401 if (!hci_discovery_active(hdev
)) {
3402 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_STOP_DISCOVERY
,
3403 MGMT_STATUS_REJECTED
, &mgmt_cp
->type
,
3404 sizeof(mgmt_cp
->type
));
3408 if (hdev
->discovery
.type
!= mgmt_cp
->type
) {
3409 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_STOP_DISCOVERY
,
3410 MGMT_STATUS_INVALID_PARAMS
, &mgmt_cp
->type
,
3411 sizeof(mgmt_cp
->type
));
3415 cmd
= mgmt_pending_add(sk
, MGMT_OP_STOP_DISCOVERY
, hdev
, NULL
, 0);
3421 hci_req_init(&req
, hdev
);
3423 switch (hdev
->discovery
.state
) {
3424 case DISCOVERY_FINDING
:
3425 if (test_bit(HCI_INQUIRY
, &hdev
->flags
)) {
3426 hci_req_add(&req
, HCI_OP_INQUIRY_CANCEL
, 0, NULL
);
3428 cancel_delayed_work(&hdev
->le_scan_disable
);
3430 memset(&enable_cp
, 0, sizeof(enable_cp
));
3431 enable_cp
.enable
= LE_SCAN_DISABLE
;
3432 hci_req_add(&req
, HCI_OP_LE_SET_SCAN_ENABLE
,
3433 sizeof(enable_cp
), &enable_cp
);
3438 case DISCOVERY_RESOLVING
:
3439 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
,
3442 mgmt_pending_remove(cmd
);
3443 err
= cmd_complete(sk
, hdev
->id
,
3444 MGMT_OP_STOP_DISCOVERY
, 0,
3446 sizeof(mgmt_cp
->type
));
3447 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
3451 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
3452 hci_req_add(&req
, HCI_OP_REMOTE_NAME_REQ_CANCEL
, sizeof(cp
),
3458 BT_DBG("unknown discovery state %u", hdev
->discovery
.state
);
3460 mgmt_pending_remove(cmd
);
3461 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_STOP_DISCOVERY
,
3462 MGMT_STATUS_FAILED
, &mgmt_cp
->type
,
3463 sizeof(mgmt_cp
->type
));
3467 err
= hci_req_run(&req
, stop_discovery_complete
);
3469 mgmt_pending_remove(cmd
);
3471 hci_discovery_set_state(hdev
, DISCOVERY_STOPPING
);
3474 hci_dev_unlock(hdev
);
3478 static int confirm_name(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3481 struct mgmt_cp_confirm_name
*cp
= data
;
3482 struct inquiry_entry
*e
;
3485 BT_DBG("%s", hdev
->name
);
3489 if (!hci_discovery_active(hdev
)) {
3490 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CONFIRM_NAME
,
3491 MGMT_STATUS_FAILED
);
3495 e
= hci_inquiry_cache_lookup_unknown(hdev
, &cp
->addr
.bdaddr
);
3497 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_CONFIRM_NAME
,
3498 MGMT_STATUS_INVALID_PARAMS
);
3502 if (cp
->name_known
) {
3503 e
->name_state
= NAME_KNOWN
;
3506 e
->name_state
= NAME_NEEDED
;
3507 hci_inquiry_cache_update_resolve(hdev
, e
);
3510 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_CONFIRM_NAME
, 0, &cp
->addr
,
3514 hci_dev_unlock(hdev
);
3518 static int block_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3521 struct mgmt_cp_block_device
*cp
= data
;
3525 BT_DBG("%s", hdev
->name
);
3527 if (!bdaddr_type_is_valid(cp
->addr
.type
))
3528 return cmd_complete(sk
, hdev
->id
, MGMT_OP_BLOCK_DEVICE
,
3529 MGMT_STATUS_INVALID_PARAMS
,
3530 &cp
->addr
, sizeof(cp
->addr
));
3534 err
= hci_blacklist_add(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
);
3536 status
= MGMT_STATUS_FAILED
;
3538 status
= MGMT_STATUS_SUCCESS
;
3540 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_BLOCK_DEVICE
, status
,
3541 &cp
->addr
, sizeof(cp
->addr
));
3543 hci_dev_unlock(hdev
);
3548 static int unblock_device(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3551 struct mgmt_cp_unblock_device
*cp
= data
;
3555 BT_DBG("%s", hdev
->name
);
3557 if (!bdaddr_type_is_valid(cp
->addr
.type
))
3558 return cmd_complete(sk
, hdev
->id
, MGMT_OP_UNBLOCK_DEVICE
,
3559 MGMT_STATUS_INVALID_PARAMS
,
3560 &cp
->addr
, sizeof(cp
->addr
));
3564 err
= hci_blacklist_del(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
);
3566 status
= MGMT_STATUS_INVALID_PARAMS
;
3568 status
= MGMT_STATUS_SUCCESS
;
3570 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_UNBLOCK_DEVICE
, status
,
3571 &cp
->addr
, sizeof(cp
->addr
));
3573 hci_dev_unlock(hdev
);
3578 static int set_device_id(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3581 struct mgmt_cp_set_device_id
*cp
= data
;
3582 struct hci_request req
;
3586 BT_DBG("%s", hdev
->name
);
3588 source
= __le16_to_cpu(cp
->source
);
3590 if (source
> 0x0002)
3591 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_DEVICE_ID
,
3592 MGMT_STATUS_INVALID_PARAMS
);
3596 hdev
->devid_source
= source
;
3597 hdev
->devid_vendor
= __le16_to_cpu(cp
->vendor
);
3598 hdev
->devid_product
= __le16_to_cpu(cp
->product
);
3599 hdev
->devid_version
= __le16_to_cpu(cp
->version
);
3601 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_DEVICE_ID
, 0, NULL
, 0);
3603 hci_req_init(&req
, hdev
);
3605 hci_req_run(&req
, NULL
);
3607 hci_dev_unlock(hdev
);
3612 static void set_advertising_complete(struct hci_dev
*hdev
, u8 status
)
3614 struct cmd_lookup match
= { NULL
, hdev
};
3617 u8 mgmt_err
= mgmt_status(status
);
3619 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING
, hdev
,
3620 cmd_status_rsp
, &mgmt_err
);
3624 mgmt_pending_foreach(MGMT_OP_SET_ADVERTISING
, hdev
, settings_rsp
,
3627 new_settings(hdev
, match
.sk
);
3633 static int set_advertising(struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
3636 struct mgmt_mode
*cp
= data
;
3637 struct pending_cmd
*cmd
;
3638 struct hci_request req
;
3639 u8 val
, enabled
, status
;
3642 BT_DBG("request for %s", hdev
->name
);
3644 status
= mgmt_le_support(hdev
);
3646 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_ADVERTISING
,
3649 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
3650 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_ADVERTISING
,
3651 MGMT_STATUS_INVALID_PARAMS
);
3656 enabled
= test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
3658 /* The following conditions are ones which mean that we should
3659 * not do any HCI communication but directly send a mgmt
3660 * response to user space (after toggling the flag if
3663 if (!hdev_is_powered(hdev
) || val
== enabled
||
3664 hci_conn_num(hdev
, LE_LINK
) > 0) {
3665 bool changed
= false;
3667 if (val
!= test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
)) {
3668 change_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
3672 err
= send_settings_rsp(sk
, MGMT_OP_SET_ADVERTISING
, hdev
);
3677 err
= new_settings(hdev
, sk
);
3682 if (mgmt_pending_find(MGMT_OP_SET_ADVERTISING
, hdev
) ||
3683 mgmt_pending_find(MGMT_OP_SET_LE
, hdev
)) {
3684 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_ADVERTISING
,
3689 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_ADVERTISING
, hdev
, data
, len
);
3695 hci_req_init(&req
, hdev
);
3698 enable_advertising(&req
);
3700 disable_advertising(&req
);
3702 err
= hci_req_run(&req
, set_advertising_complete
);
3704 mgmt_pending_remove(cmd
);
3707 hci_dev_unlock(hdev
);
3711 static int set_static_address(struct sock
*sk
, struct hci_dev
*hdev
,
3712 void *data
, u16 len
)
3714 struct mgmt_cp_set_static_address
*cp
= data
;
3717 BT_DBG("%s", hdev
->name
);
3719 if (!lmp_le_capable(hdev
))
3720 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_STATIC_ADDRESS
,
3721 MGMT_STATUS_NOT_SUPPORTED
);
3723 if (hdev_is_powered(hdev
))
3724 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_STATIC_ADDRESS
,
3725 MGMT_STATUS_REJECTED
);
3727 if (bacmp(&cp
->bdaddr
, BDADDR_ANY
)) {
3728 if (!bacmp(&cp
->bdaddr
, BDADDR_NONE
))
3729 return cmd_status(sk
, hdev
->id
,
3730 MGMT_OP_SET_STATIC_ADDRESS
,
3731 MGMT_STATUS_INVALID_PARAMS
);
3733 /* Two most significant bits shall be set */
3734 if ((cp
->bdaddr
.b
[5] & 0xc0) != 0xc0)
3735 return cmd_status(sk
, hdev
->id
,
3736 MGMT_OP_SET_STATIC_ADDRESS
,
3737 MGMT_STATUS_INVALID_PARAMS
);
3742 bacpy(&hdev
->static_addr
, &cp
->bdaddr
);
3744 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_STATIC_ADDRESS
, 0, NULL
, 0);
3746 hci_dev_unlock(hdev
);
3751 static int set_scan_params(struct sock
*sk
, struct hci_dev
*hdev
,
3752 void *data
, u16 len
)
3754 struct mgmt_cp_set_scan_params
*cp
= data
;
3755 __u16 interval
, window
;
3758 BT_DBG("%s", hdev
->name
);
3760 if (!lmp_le_capable(hdev
))
3761 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
3762 MGMT_STATUS_NOT_SUPPORTED
);
3764 interval
= __le16_to_cpu(cp
->interval
);
3766 if (interval
< 0x0004 || interval
> 0x4000)
3767 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
3768 MGMT_STATUS_INVALID_PARAMS
);
3770 window
= __le16_to_cpu(cp
->window
);
3772 if (window
< 0x0004 || window
> 0x4000)
3773 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
3774 MGMT_STATUS_INVALID_PARAMS
);
3776 if (window
> interval
)
3777 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
,
3778 MGMT_STATUS_INVALID_PARAMS
);
3782 hdev
->le_scan_interval
= interval
;
3783 hdev
->le_scan_window
= window
;
3785 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_SET_SCAN_PARAMS
, 0, NULL
, 0);
3787 hci_dev_unlock(hdev
);
3792 static void fast_connectable_complete(struct hci_dev
*hdev
, u8 status
)
3794 struct pending_cmd
*cmd
;
3796 BT_DBG("status 0x%02x", status
);
3800 cmd
= mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE
, hdev
);
3805 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3806 mgmt_status(status
));
3808 struct mgmt_mode
*cp
= cmd
->param
;
3811 set_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
);
3813 clear_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
);
3815 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_FAST_CONNECTABLE
, hdev
);
3816 new_settings(hdev
, cmd
->sk
);
3819 mgmt_pending_remove(cmd
);
3822 hci_dev_unlock(hdev
);
3825 static int set_fast_connectable(struct sock
*sk
, struct hci_dev
*hdev
,
3826 void *data
, u16 len
)
3828 struct mgmt_mode
*cp
= data
;
3829 struct pending_cmd
*cmd
;
3830 struct hci_request req
;
3833 BT_DBG("%s", hdev
->name
);
3835 if (!test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
) ||
3836 hdev
->hci_ver
< BLUETOOTH_VER_1_2
)
3837 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3838 MGMT_STATUS_NOT_SUPPORTED
);
3840 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
3841 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3842 MGMT_STATUS_INVALID_PARAMS
);
3844 if (!hdev_is_powered(hdev
))
3845 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3846 MGMT_STATUS_NOT_POWERED
);
3848 if (!test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
3849 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3850 MGMT_STATUS_REJECTED
);
3854 if (mgmt_pending_find(MGMT_OP_SET_FAST_CONNECTABLE
, hdev
)) {
3855 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3860 if (!!cp
->val
== test_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
)) {
3861 err
= send_settings_rsp(sk
, MGMT_OP_SET_FAST_CONNECTABLE
,
3866 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_FAST_CONNECTABLE
, hdev
,
3873 hci_req_init(&req
, hdev
);
3875 write_fast_connectable(&req
, cp
->val
);
3877 err
= hci_req_run(&req
, fast_connectable_complete
);
3879 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_FAST_CONNECTABLE
,
3880 MGMT_STATUS_FAILED
);
3881 mgmt_pending_remove(cmd
);
3885 hci_dev_unlock(hdev
);
3890 static void set_bredr_scan(struct hci_request
*req
)
3892 struct hci_dev
*hdev
= req
->hdev
;
3895 /* Ensure that fast connectable is disabled. This function will
3896 * not do anything if the page scan parameters are already what
3899 write_fast_connectable(req
, false);
3901 if (test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
3903 if (test_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
))
3904 scan
|= SCAN_INQUIRY
;
3907 hci_req_add(req
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
3910 static void set_bredr_complete(struct hci_dev
*hdev
, u8 status
)
3912 struct pending_cmd
*cmd
;
3914 BT_DBG("status 0x%02x", status
);
3918 cmd
= mgmt_pending_find(MGMT_OP_SET_BREDR
, hdev
);
3923 u8 mgmt_err
= mgmt_status(status
);
3925 /* We need to restore the flag if related HCI commands
3928 clear_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
);
3930 cmd_status(cmd
->sk
, cmd
->index
, cmd
->opcode
, mgmt_err
);
3932 send_settings_rsp(cmd
->sk
, MGMT_OP_SET_BREDR
, hdev
);
3933 new_settings(hdev
, cmd
->sk
);
3936 mgmt_pending_remove(cmd
);
3939 hci_dev_unlock(hdev
);
3942 static int set_bredr(struct sock
*sk
, struct hci_dev
*hdev
, void *data
, u16 len
)
3944 struct mgmt_mode
*cp
= data
;
3945 struct pending_cmd
*cmd
;
3946 struct hci_request req
;
3949 BT_DBG("request for %s", hdev
->name
);
3951 if (!lmp_bredr_capable(hdev
) || !lmp_le_capable(hdev
))
3952 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
3953 MGMT_STATUS_NOT_SUPPORTED
);
3955 if (!test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
))
3956 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
3957 MGMT_STATUS_REJECTED
);
3959 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
3960 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
3961 MGMT_STATUS_INVALID_PARAMS
);
3965 if (cp
->val
== test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
3966 err
= send_settings_rsp(sk
, MGMT_OP_SET_BREDR
, hdev
);
3970 if (!hdev_is_powered(hdev
)) {
3972 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
3973 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
3974 clear_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
);
3975 clear_bit(HCI_FAST_CONNECTABLE
, &hdev
->dev_flags
);
3976 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
3979 change_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
);
3981 err
= send_settings_rsp(sk
, MGMT_OP_SET_BREDR
, hdev
);
3985 err
= new_settings(hdev
, sk
);
3989 /* Reject disabling when powered on */
3991 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
3992 MGMT_STATUS_REJECTED
);
3996 if (mgmt_pending_find(MGMT_OP_SET_BREDR
, hdev
)) {
3997 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_BREDR
,
4002 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_BREDR
, hdev
, data
, len
);
4008 /* We need to flip the bit already here so that update_adv_data
4009 * generates the correct flags.
4011 set_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
);
4013 hci_req_init(&req
, hdev
);
4015 if (test_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
))
4016 set_bredr_scan(&req
);
4018 /* Since only the advertising data flags will change, there
4019 * is no need to update the scan response data.
4021 update_adv_data(&req
);
4023 err
= hci_req_run(&req
, set_bredr_complete
);
4025 mgmt_pending_remove(cmd
);
4028 hci_dev_unlock(hdev
);
4032 static int set_secure_conn(struct sock
*sk
, struct hci_dev
*hdev
,
4033 void *data
, u16 len
)
4035 struct mgmt_mode
*cp
= data
;
4036 struct pending_cmd
*cmd
;
4040 BT_DBG("request for %s", hdev
->name
);
4042 status
= mgmt_bredr_support(hdev
);
4044 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4047 if (!lmp_sc_capable(hdev
) &&
4048 !test_bit(HCI_FORCE_SC
, &hdev
->dev_flags
))
4049 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4050 MGMT_STATUS_NOT_SUPPORTED
);
4052 if (cp
->val
!= 0x00 && cp
->val
!= 0x01)
4053 return cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4054 MGMT_STATUS_INVALID_PARAMS
);
4058 if (!hdev_is_powered(hdev
)) {
4062 changed
= !test_and_set_bit(HCI_SC_ENABLED
,
4065 changed
= test_and_clear_bit(HCI_SC_ENABLED
,
4068 err
= send_settings_rsp(sk
, MGMT_OP_SET_SECURE_CONN
, hdev
);
4073 err
= new_settings(hdev
, sk
);
4078 if (mgmt_pending_find(MGMT_OP_SET_SECURE_CONN
, hdev
)) {
4079 err
= cmd_status(sk
, hdev
->id
, MGMT_OP_SET_SECURE_CONN
,
4084 if (!!cp
->val
== test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
)) {
4085 err
= send_settings_rsp(sk
, MGMT_OP_SET_SECURE_CONN
, hdev
);
4089 cmd
= mgmt_pending_add(sk
, MGMT_OP_SET_SECURE_CONN
, hdev
, data
, len
);
4095 err
= hci_send_cmd(hdev
, HCI_OP_WRITE_SC_SUPPORT
, 1, &cp
->val
);
4097 mgmt_pending_remove(cmd
);
4102 hci_dev_unlock(hdev
);
4106 static bool ltk_is_valid(struct mgmt_ltk_info
*key
)
4108 if (key
->authenticated
!= 0x00 && key
->authenticated
!= 0x01)
4110 if (key
->master
!= 0x00 && key
->master
!= 0x01)
4112 if (!bdaddr_type_is_le(key
->addr
.type
))
4117 static int load_long_term_keys(struct sock
*sk
, struct hci_dev
*hdev
,
4118 void *cp_data
, u16 len
)
4120 struct mgmt_cp_load_long_term_keys
*cp
= cp_data
;
4121 u16 key_count
, expected_len
;
4124 BT_DBG("request for %s", hdev
->name
);
4126 if (!lmp_le_capable(hdev
))
4127 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
4128 MGMT_STATUS_NOT_SUPPORTED
);
4130 key_count
= __le16_to_cpu(cp
->key_count
);
4132 expected_len
= sizeof(*cp
) + key_count
*
4133 sizeof(struct mgmt_ltk_info
);
4134 if (expected_len
!= len
) {
4135 BT_ERR("load_keys: expected %u bytes, got %u bytes",
4137 return cmd_status(sk
, hdev
->id
, MGMT_OP_LOAD_LONG_TERM_KEYS
,
4138 MGMT_STATUS_INVALID_PARAMS
);
4141 BT_DBG("%s key_count %u", hdev
->name
, key_count
);
4143 for (i
= 0; i
< key_count
; i
++) {
4144 struct mgmt_ltk_info
*key
= &cp
->keys
[i
];
4146 if (!ltk_is_valid(key
))
4147 return cmd_status(sk
, hdev
->id
,
4148 MGMT_OP_LOAD_LONG_TERM_KEYS
,
4149 MGMT_STATUS_INVALID_PARAMS
);
4154 hci_smp_ltks_clear(hdev
);
4156 for (i
= 0; i
< key_count
; i
++) {
4157 struct mgmt_ltk_info
*key
= &cp
->keys
[i
];
4160 if (key
->addr
.type
== BDADDR_LE_PUBLIC
)
4161 addr_type
= ADDR_LE_DEV_PUBLIC
;
4163 addr_type
= ADDR_LE_DEV_RANDOM
;
4168 type
= HCI_SMP_LTK_SLAVE
;
4170 hci_add_ltk(hdev
, &key
->addr
.bdaddr
, addr_type
,
4171 type
, 0, key
->authenticated
, key
->val
,
4172 key
->enc_size
, key
->ediv
, key
->rand
);
4175 err
= cmd_complete(sk
, hdev
->id
, MGMT_OP_LOAD_LONG_TERM_KEYS
, 0,
4178 hci_dev_unlock(hdev
);
4183 static const struct mgmt_handler
{
4184 int (*func
) (struct sock
*sk
, struct hci_dev
*hdev
, void *data
,
4188 } mgmt_handlers
[] = {
4189 { NULL
}, /* 0x0000 (no command) */
4190 { read_version
, false, MGMT_READ_VERSION_SIZE
},
4191 { read_commands
, false, MGMT_READ_COMMANDS_SIZE
},
4192 { read_index_list
, false, MGMT_READ_INDEX_LIST_SIZE
},
4193 { read_controller_info
, false, MGMT_READ_INFO_SIZE
},
4194 { set_powered
, false, MGMT_SETTING_SIZE
},
4195 { set_discoverable
, false, MGMT_SET_DISCOVERABLE_SIZE
},
4196 { set_connectable
, false, MGMT_SETTING_SIZE
},
4197 { set_fast_connectable
, false, MGMT_SETTING_SIZE
},
4198 { set_pairable
, false, MGMT_SETTING_SIZE
},
4199 { set_link_security
, false, MGMT_SETTING_SIZE
},
4200 { set_ssp
, false, MGMT_SETTING_SIZE
},
4201 { set_hs
, false, MGMT_SETTING_SIZE
},
4202 { set_le
, false, MGMT_SETTING_SIZE
},
4203 { set_dev_class
, false, MGMT_SET_DEV_CLASS_SIZE
},
4204 { set_local_name
, false, MGMT_SET_LOCAL_NAME_SIZE
},
4205 { add_uuid
, false, MGMT_ADD_UUID_SIZE
},
4206 { remove_uuid
, false, MGMT_REMOVE_UUID_SIZE
},
4207 { load_link_keys
, true, MGMT_LOAD_LINK_KEYS_SIZE
},
4208 { load_long_term_keys
, true, MGMT_LOAD_LONG_TERM_KEYS_SIZE
},
4209 { disconnect
, false, MGMT_DISCONNECT_SIZE
},
4210 { get_connections
, false, MGMT_GET_CONNECTIONS_SIZE
},
4211 { pin_code_reply
, false, MGMT_PIN_CODE_REPLY_SIZE
},
4212 { pin_code_neg_reply
, false, MGMT_PIN_CODE_NEG_REPLY_SIZE
},
4213 { set_io_capability
, false, MGMT_SET_IO_CAPABILITY_SIZE
},
4214 { pair_device
, false, MGMT_PAIR_DEVICE_SIZE
},
4215 { cancel_pair_device
, false, MGMT_CANCEL_PAIR_DEVICE_SIZE
},
4216 { unpair_device
, false, MGMT_UNPAIR_DEVICE_SIZE
},
4217 { user_confirm_reply
, false, MGMT_USER_CONFIRM_REPLY_SIZE
},
4218 { user_confirm_neg_reply
, false, MGMT_USER_CONFIRM_NEG_REPLY_SIZE
},
4219 { user_passkey_reply
, false, MGMT_USER_PASSKEY_REPLY_SIZE
},
4220 { user_passkey_neg_reply
, false, MGMT_USER_PASSKEY_NEG_REPLY_SIZE
},
4221 { read_local_oob_data
, false, MGMT_READ_LOCAL_OOB_DATA_SIZE
},
4222 { add_remote_oob_data
, true, MGMT_ADD_REMOTE_OOB_DATA_SIZE
},
4223 { remove_remote_oob_data
, false, MGMT_REMOVE_REMOTE_OOB_DATA_SIZE
},
4224 { start_discovery
, false, MGMT_START_DISCOVERY_SIZE
},
4225 { stop_discovery
, false, MGMT_STOP_DISCOVERY_SIZE
},
4226 { confirm_name
, false, MGMT_CONFIRM_NAME_SIZE
},
4227 { block_device
, false, MGMT_BLOCK_DEVICE_SIZE
},
4228 { unblock_device
, false, MGMT_UNBLOCK_DEVICE_SIZE
},
4229 { set_device_id
, false, MGMT_SET_DEVICE_ID_SIZE
},
4230 { set_advertising
, false, MGMT_SETTING_SIZE
},
4231 { set_bredr
, false, MGMT_SETTING_SIZE
},
4232 { set_static_address
, false, MGMT_SET_STATIC_ADDRESS_SIZE
},
4233 { set_scan_params
, false, MGMT_SET_SCAN_PARAMS_SIZE
},
4234 { set_secure_conn
, false, MGMT_SETTING_SIZE
},
4238 int mgmt_control(struct sock
*sk
, struct msghdr
*msg
, size_t msglen
)
4242 struct mgmt_hdr
*hdr
;
4243 u16 opcode
, index
, len
;
4244 struct hci_dev
*hdev
= NULL
;
4245 const struct mgmt_handler
*handler
;
4248 BT_DBG("got %zu bytes", msglen
);
4250 if (msglen
< sizeof(*hdr
))
4253 buf
= kmalloc(msglen
, GFP_KERNEL
);
4257 if (memcpy_fromiovec(buf
, msg
->msg_iov
, msglen
)) {
4263 opcode
= __le16_to_cpu(hdr
->opcode
);
4264 index
= __le16_to_cpu(hdr
->index
);
4265 len
= __le16_to_cpu(hdr
->len
);
4267 if (len
!= msglen
- sizeof(*hdr
)) {
4272 if (index
!= MGMT_INDEX_NONE
) {
4273 hdev
= hci_dev_get(index
);
4275 err
= cmd_status(sk
, index
, opcode
,
4276 MGMT_STATUS_INVALID_INDEX
);
4280 if (test_bit(HCI_SETUP
, &hdev
->dev_flags
) ||
4281 test_bit(HCI_USER_CHANNEL
, &hdev
->dev_flags
)) {
4282 err
= cmd_status(sk
, index
, opcode
,
4283 MGMT_STATUS_INVALID_INDEX
);
4288 if (opcode
>= ARRAY_SIZE(mgmt_handlers
) ||
4289 mgmt_handlers
[opcode
].func
== NULL
) {
4290 BT_DBG("Unknown op %u", opcode
);
4291 err
= cmd_status(sk
, index
, opcode
,
4292 MGMT_STATUS_UNKNOWN_COMMAND
);
4296 if ((hdev
&& opcode
< MGMT_OP_READ_INFO
) ||
4297 (!hdev
&& opcode
>= MGMT_OP_READ_INFO
)) {
4298 err
= cmd_status(sk
, index
, opcode
,
4299 MGMT_STATUS_INVALID_INDEX
);
4303 handler
= &mgmt_handlers
[opcode
];
4305 if ((handler
->var_len
&& len
< handler
->data_len
) ||
4306 (!handler
->var_len
&& len
!= handler
->data_len
)) {
4307 err
= cmd_status(sk
, index
, opcode
,
4308 MGMT_STATUS_INVALID_PARAMS
);
4313 mgmt_init_hdev(sk
, hdev
);
4315 cp
= buf
+ sizeof(*hdr
);
4317 err
= handler
->func(sk
, hdev
, cp
, len
);
4331 void mgmt_index_added(struct hci_dev
*hdev
)
4333 if (hdev
->dev_type
!= HCI_BREDR
)
4336 mgmt_event(MGMT_EV_INDEX_ADDED
, hdev
, NULL
, 0, NULL
);
4339 void mgmt_index_removed(struct hci_dev
*hdev
)
4341 u8 status
= MGMT_STATUS_INVALID_INDEX
;
4343 if (hdev
->dev_type
!= HCI_BREDR
)
4346 mgmt_pending_foreach(0, hdev
, cmd_status_rsp
, &status
);
4348 mgmt_event(MGMT_EV_INDEX_REMOVED
, hdev
, NULL
, 0, NULL
);
4351 static void powered_complete(struct hci_dev
*hdev
, u8 status
)
4353 struct cmd_lookup match
= { NULL
, hdev
};
4355 BT_DBG("status 0x%02x", status
);
4359 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, hdev
, settings_rsp
, &match
);
4361 new_settings(hdev
, match
.sk
);
4363 hci_dev_unlock(hdev
);
4369 static int powered_update_hci(struct hci_dev
*hdev
)
4371 struct hci_request req
;
4374 hci_req_init(&req
, hdev
);
4376 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
) &&
4377 !lmp_host_ssp_capable(hdev
)) {
4380 hci_req_add(&req
, HCI_OP_WRITE_SSP_MODE
, 1, &ssp
);
4383 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
) &&
4384 lmp_bredr_capable(hdev
)) {
4385 struct hci_cp_write_le_host_supported cp
;
4388 cp
.simul
= lmp_le_br_capable(hdev
);
4390 /* Check first if we already have the right
4391 * host state (host features set)
4393 if (cp
.le
!= lmp_host_le_capable(hdev
) ||
4394 cp
.simul
!= lmp_host_le_br_capable(hdev
))
4395 hci_req_add(&req
, HCI_OP_WRITE_LE_HOST_SUPPORTED
,
4399 if (lmp_le_capable(hdev
)) {
4400 /* Set random address to static address if configured */
4401 if (bacmp(&hdev
->static_addr
, BDADDR_ANY
))
4402 hci_req_add(&req
, HCI_OP_LE_SET_RANDOM_ADDR
, 6,
4403 &hdev
->static_addr
);
4405 /* Make sure the controller has a good default for
4406 * advertising data. This also applies to the case
4407 * where BR/EDR was toggled during the AUTO_OFF phase.
4409 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
)) {
4410 update_adv_data(&req
);
4411 update_scan_rsp_data(&req
);
4414 if (test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
4415 enable_advertising(&req
);
4418 link_sec
= test_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
);
4419 if (link_sec
!= test_bit(HCI_AUTH
, &hdev
->flags
))
4420 hci_req_add(&req
, HCI_OP_WRITE_AUTH_ENABLE
,
4421 sizeof(link_sec
), &link_sec
);
4423 if (lmp_bredr_capable(hdev
)) {
4424 if (test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
))
4425 set_bredr_scan(&req
);
4431 return hci_req_run(&req
, powered_complete
);
4434 int mgmt_powered(struct hci_dev
*hdev
, u8 powered
)
4436 struct cmd_lookup match
= { NULL
, hdev
};
4437 u8 status_not_powered
= MGMT_STATUS_NOT_POWERED
;
4438 u8 zero_cod
[] = { 0, 0, 0 };
4441 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
4445 if (powered_update_hci(hdev
) == 0)
4448 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, hdev
, settings_rsp
,
4453 mgmt_pending_foreach(MGMT_OP_SET_POWERED
, hdev
, settings_rsp
, &match
);
4454 mgmt_pending_foreach(0, hdev
, cmd_status_rsp
, &status_not_powered
);
4456 if (memcmp(hdev
->dev_class
, zero_cod
, sizeof(zero_cod
)) != 0)
4457 mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED
, hdev
,
4458 zero_cod
, sizeof(zero_cod
), NULL
);
4461 err
= new_settings(hdev
, match
.sk
);
4469 void mgmt_set_powered_failed(struct hci_dev
*hdev
, int err
)
4471 struct pending_cmd
*cmd
;
4474 cmd
= mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
);
4478 if (err
== -ERFKILL
)
4479 status
= MGMT_STATUS_RFKILLED
;
4481 status
= MGMT_STATUS_FAILED
;
4483 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_SET_POWERED
, status
);
4485 mgmt_pending_remove(cmd
);
4488 void mgmt_discoverable_timeout(struct hci_dev
*hdev
)
4490 struct hci_request req
;
4494 /* When discoverable timeout triggers, then just make sure
4495 * the limited discoverable flag is cleared. Even in the case
4496 * of a timeout triggered from general discoverable, it is
4497 * safe to unconditionally clear the flag.
4499 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
4500 clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
4502 hci_req_init(&req
, hdev
);
4503 if (test_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
)) {
4504 u8 scan
= SCAN_PAGE
;
4505 hci_req_add(&req
, HCI_OP_WRITE_SCAN_ENABLE
,
4506 sizeof(scan
), &scan
);
4509 update_adv_data(&req
);
4510 hci_req_run(&req
, NULL
);
4512 hdev
->discov_timeout
= 0;
4514 new_settings(hdev
, NULL
);
4516 hci_dev_unlock(hdev
);
4519 void mgmt_discoverable(struct hci_dev
*hdev
, u8 discoverable
)
4523 /* Nothing needed here if there's a pending command since that
4524 * commands request completion callback takes care of everything
4527 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE
, hdev
))
4531 changed
= !test_and_set_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
4533 clear_bit(HCI_LIMITED_DISCOVERABLE
, &hdev
->dev_flags
);
4534 changed
= test_and_clear_bit(HCI_DISCOVERABLE
, &hdev
->dev_flags
);
4538 struct hci_request req
;
4540 /* In case this change in discoverable was triggered by
4541 * a disabling of connectable there could be a need to
4542 * update the advertising flags.
4544 hci_req_init(&req
, hdev
);
4545 update_adv_data(&req
);
4546 hci_req_run(&req
, NULL
);
4548 new_settings(hdev
, NULL
);
4552 void mgmt_connectable(struct hci_dev
*hdev
, u8 connectable
)
4556 /* Nothing needed here if there's a pending command since that
4557 * commands request completion callback takes care of everything
4560 if (mgmt_pending_find(MGMT_OP_SET_CONNECTABLE
, hdev
))
4564 changed
= !test_and_set_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
4566 changed
= test_and_clear_bit(HCI_CONNECTABLE
, &hdev
->dev_flags
);
4569 new_settings(hdev
, NULL
);
4572 void mgmt_write_scan_failed(struct hci_dev
*hdev
, u8 scan
, u8 status
)
4574 u8 mgmt_err
= mgmt_status(status
);
4576 if (scan
& SCAN_PAGE
)
4577 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE
, hdev
,
4578 cmd_status_rsp
, &mgmt_err
);
4580 if (scan
& SCAN_INQUIRY
)
4581 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE
, hdev
,
4582 cmd_status_rsp
, &mgmt_err
);
4585 void mgmt_new_link_key(struct hci_dev
*hdev
, struct link_key
*key
,
4588 struct mgmt_ev_new_link_key ev
;
4590 memset(&ev
, 0, sizeof(ev
));
4592 ev
.store_hint
= persistent
;
4593 bacpy(&ev
.key
.addr
.bdaddr
, &key
->bdaddr
);
4594 ev
.key
.addr
.type
= BDADDR_BREDR
;
4595 ev
.key
.type
= key
->type
;
4596 memcpy(ev
.key
.val
, key
->val
, HCI_LINK_KEY_SIZE
);
4597 ev
.key
.pin_len
= key
->pin_len
;
4599 mgmt_event(MGMT_EV_NEW_LINK_KEY
, hdev
, &ev
, sizeof(ev
), NULL
);
4602 void mgmt_new_ltk(struct hci_dev
*hdev
, struct smp_ltk
*key
, u8 persistent
)
4604 struct mgmt_ev_new_long_term_key ev
;
4606 memset(&ev
, 0, sizeof(ev
));
4608 ev
.store_hint
= persistent
;
4609 bacpy(&ev
.key
.addr
.bdaddr
, &key
->bdaddr
);
4610 ev
.key
.addr
.type
= link_to_bdaddr(LE_LINK
, key
->bdaddr_type
);
4611 ev
.key
.authenticated
= key
->authenticated
;
4612 ev
.key
.enc_size
= key
->enc_size
;
4613 ev
.key
.ediv
= key
->ediv
;
4615 if (key
->type
== HCI_SMP_LTK
)
4618 memcpy(ev
.key
.rand
, key
->rand
, sizeof(key
->rand
));
4619 memcpy(ev
.key
.val
, key
->val
, sizeof(key
->val
));
4621 mgmt_event(MGMT_EV_NEW_LONG_TERM_KEY
, hdev
, &ev
, sizeof(ev
), NULL
);
4624 static inline u16
eir_append_data(u8
*eir
, u16 eir_len
, u8 type
, u8
*data
,
4627 eir
[eir_len
++] = sizeof(type
) + data_len
;
4628 eir
[eir_len
++] = type
;
4629 memcpy(&eir
[eir_len
], data
, data_len
);
4630 eir_len
+= data_len
;
4635 void mgmt_device_connected(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
4636 u8 addr_type
, u32 flags
, u8
*name
, u8 name_len
,
4640 struct mgmt_ev_device_connected
*ev
= (void *) buf
;
4643 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
4644 ev
->addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4646 ev
->flags
= __cpu_to_le32(flags
);
4649 eir_len
= eir_append_data(ev
->eir
, 0, EIR_NAME_COMPLETE
,
4652 if (dev_class
&& memcmp(dev_class
, "\0\0\0", 3) != 0)
4653 eir_len
= eir_append_data(ev
->eir
, eir_len
,
4654 EIR_CLASS_OF_DEV
, dev_class
, 3);
4656 ev
->eir_len
= cpu_to_le16(eir_len
);
4658 mgmt_event(MGMT_EV_DEVICE_CONNECTED
, hdev
, buf
,
4659 sizeof(*ev
) + eir_len
, NULL
);
4662 static void disconnect_rsp(struct pending_cmd
*cmd
, void *data
)
4664 struct mgmt_cp_disconnect
*cp
= cmd
->param
;
4665 struct sock
**sk
= data
;
4666 struct mgmt_rp_disconnect rp
;
4668 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
4669 rp
.addr
.type
= cp
->addr
.type
;
4671 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_DISCONNECT
, 0, &rp
,
4677 mgmt_pending_remove(cmd
);
4680 static void unpair_device_rsp(struct pending_cmd
*cmd
, void *data
)
4682 struct hci_dev
*hdev
= data
;
4683 struct mgmt_cp_unpair_device
*cp
= cmd
->param
;
4684 struct mgmt_rp_unpair_device rp
;
4686 memset(&rp
, 0, sizeof(rp
));
4687 bacpy(&rp
.addr
.bdaddr
, &cp
->addr
.bdaddr
);
4688 rp
.addr
.type
= cp
->addr
.type
;
4690 device_unpaired(hdev
, &cp
->addr
.bdaddr
, cp
->addr
.type
, cmd
->sk
);
4692 cmd_complete(cmd
->sk
, cmd
->index
, cmd
->opcode
, 0, &rp
, sizeof(rp
));
4694 mgmt_pending_remove(cmd
);
4697 void mgmt_device_disconnected(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4698 u8 link_type
, u8 addr_type
, u8 reason
)
4700 struct mgmt_ev_device_disconnected ev
;
4701 struct sock
*sk
= NULL
;
4703 if (link_type
!= ACL_LINK
&& link_type
!= LE_LINK
)
4706 mgmt_pending_foreach(MGMT_OP_DISCONNECT
, hdev
, disconnect_rsp
, &sk
);
4708 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4709 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4712 mgmt_event(MGMT_EV_DEVICE_DISCONNECTED
, hdev
, &ev
, sizeof(ev
), sk
);
4717 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE
, hdev
, unpair_device_rsp
,
4721 void mgmt_disconnect_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4722 u8 link_type
, u8 addr_type
, u8 status
)
4724 u8 bdaddr_type
= link_to_bdaddr(link_type
, addr_type
);
4725 struct mgmt_cp_disconnect
*cp
;
4726 struct mgmt_rp_disconnect rp
;
4727 struct pending_cmd
*cmd
;
4729 mgmt_pending_foreach(MGMT_OP_UNPAIR_DEVICE
, hdev
, unpair_device_rsp
,
4732 cmd
= mgmt_pending_find(MGMT_OP_DISCONNECT
, hdev
);
4738 if (bacmp(bdaddr
, &cp
->addr
.bdaddr
))
4741 if (cp
->addr
.type
!= bdaddr_type
)
4744 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
4745 rp
.addr
.type
= bdaddr_type
;
4747 cmd_complete(cmd
->sk
, cmd
->index
, MGMT_OP_DISCONNECT
,
4748 mgmt_status(status
), &rp
, sizeof(rp
));
4750 mgmt_pending_remove(cmd
);
4753 void mgmt_connect_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
4754 u8 addr_type
, u8 status
)
4756 struct mgmt_ev_connect_failed ev
;
4758 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4759 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4760 ev
.status
= mgmt_status(status
);
4762 mgmt_event(MGMT_EV_CONNECT_FAILED
, hdev
, &ev
, sizeof(ev
), NULL
);
4765 void mgmt_pin_code_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 secure
)
4767 struct mgmt_ev_pin_code_request ev
;
4769 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4770 ev
.addr
.type
= BDADDR_BREDR
;
4773 mgmt_event(MGMT_EV_PIN_CODE_REQUEST
, hdev
, &ev
, sizeof(ev
), NULL
);
4776 void mgmt_pin_code_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4779 struct pending_cmd
*cmd
;
4780 struct mgmt_rp_pin_code_reply rp
;
4782 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY
, hdev
);
4786 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
4787 rp
.addr
.type
= BDADDR_BREDR
;
4789 cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_PIN_CODE_REPLY
,
4790 mgmt_status(status
), &rp
, sizeof(rp
));
4792 mgmt_pending_remove(cmd
);
4795 void mgmt_pin_code_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4798 struct pending_cmd
*cmd
;
4799 struct mgmt_rp_pin_code_reply rp
;
4801 cmd
= mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY
, hdev
);
4805 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
4806 rp
.addr
.type
= BDADDR_BREDR
;
4808 cmd_complete(cmd
->sk
, hdev
->id
, MGMT_OP_PIN_CODE_NEG_REPLY
,
4809 mgmt_status(status
), &rp
, sizeof(rp
));
4811 mgmt_pending_remove(cmd
);
4814 int mgmt_user_confirm_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4815 u8 link_type
, u8 addr_type
, __le32 value
,
4818 struct mgmt_ev_user_confirm_request ev
;
4820 BT_DBG("%s", hdev
->name
);
4822 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4823 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4824 ev
.confirm_hint
= confirm_hint
;
4827 return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST
, hdev
, &ev
, sizeof(ev
),
4831 int mgmt_user_passkey_request(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4832 u8 link_type
, u8 addr_type
)
4834 struct mgmt_ev_user_passkey_request ev
;
4836 BT_DBG("%s", hdev
->name
);
4838 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4839 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4841 return mgmt_event(MGMT_EV_USER_PASSKEY_REQUEST
, hdev
, &ev
, sizeof(ev
),
4845 static int user_pairing_resp_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4846 u8 link_type
, u8 addr_type
, u8 status
,
4849 struct pending_cmd
*cmd
;
4850 struct mgmt_rp_user_confirm_reply rp
;
4853 cmd
= mgmt_pending_find(opcode
, hdev
);
4857 bacpy(&rp
.addr
.bdaddr
, bdaddr
);
4858 rp
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4859 err
= cmd_complete(cmd
->sk
, hdev
->id
, opcode
, mgmt_status(status
),
4862 mgmt_pending_remove(cmd
);
4867 int mgmt_user_confirm_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4868 u8 link_type
, u8 addr_type
, u8 status
)
4870 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
4871 status
, MGMT_OP_USER_CONFIRM_REPLY
);
4874 int mgmt_user_confirm_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4875 u8 link_type
, u8 addr_type
, u8 status
)
4877 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
4879 MGMT_OP_USER_CONFIRM_NEG_REPLY
);
4882 int mgmt_user_passkey_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4883 u8 link_type
, u8 addr_type
, u8 status
)
4885 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
4886 status
, MGMT_OP_USER_PASSKEY_REPLY
);
4889 int mgmt_user_passkey_neg_reply_complete(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4890 u8 link_type
, u8 addr_type
, u8 status
)
4892 return user_pairing_resp_complete(hdev
, bdaddr
, link_type
, addr_type
,
4894 MGMT_OP_USER_PASSKEY_NEG_REPLY
);
4897 int mgmt_user_passkey_notify(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
4898 u8 link_type
, u8 addr_type
, u32 passkey
,
4901 struct mgmt_ev_passkey_notify ev
;
4903 BT_DBG("%s", hdev
->name
);
4905 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4906 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4907 ev
.passkey
= __cpu_to_le32(passkey
);
4908 ev
.entered
= entered
;
4910 return mgmt_event(MGMT_EV_PASSKEY_NOTIFY
, hdev
, &ev
, sizeof(ev
), NULL
);
4913 void mgmt_auth_failed(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
4914 u8 addr_type
, u8 status
)
4916 struct mgmt_ev_auth_failed ev
;
4918 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
4919 ev
.addr
.type
= link_to_bdaddr(link_type
, addr_type
);
4920 ev
.status
= mgmt_status(status
);
4922 mgmt_event(MGMT_EV_AUTH_FAILED
, hdev
, &ev
, sizeof(ev
), NULL
);
4925 void mgmt_auth_enable_complete(struct hci_dev
*hdev
, u8 status
)
4927 struct cmd_lookup match
= { NULL
, hdev
};
4931 u8 mgmt_err
= mgmt_status(status
);
4932 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY
, hdev
,
4933 cmd_status_rsp
, &mgmt_err
);
4937 if (test_bit(HCI_AUTH
, &hdev
->flags
))
4938 changed
= !test_and_set_bit(HCI_LINK_SECURITY
,
4941 changed
= test_and_clear_bit(HCI_LINK_SECURITY
,
4944 mgmt_pending_foreach(MGMT_OP_SET_LINK_SECURITY
, hdev
, settings_rsp
,
4948 new_settings(hdev
, match
.sk
);
4954 static void clear_eir(struct hci_request
*req
)
4956 struct hci_dev
*hdev
= req
->hdev
;
4957 struct hci_cp_write_eir cp
;
4959 if (!lmp_ext_inq_capable(hdev
))
4962 memset(hdev
->eir
, 0, sizeof(hdev
->eir
));
4964 memset(&cp
, 0, sizeof(cp
));
4966 hci_req_add(req
, HCI_OP_WRITE_EIR
, sizeof(cp
), &cp
);
4969 void mgmt_ssp_enable_complete(struct hci_dev
*hdev
, u8 enable
, u8 status
)
4971 struct cmd_lookup match
= { NULL
, hdev
};
4972 struct hci_request req
;
4973 bool changed
= false;
4976 u8 mgmt_err
= mgmt_status(status
);
4978 if (enable
&& test_and_clear_bit(HCI_SSP_ENABLED
,
4979 &hdev
->dev_flags
)) {
4980 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
4981 new_settings(hdev
, NULL
);
4984 mgmt_pending_foreach(MGMT_OP_SET_SSP
, hdev
, cmd_status_rsp
,
4990 changed
= !test_and_set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
4992 changed
= test_and_clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
4994 changed
= test_and_clear_bit(HCI_HS_ENABLED
,
4997 clear_bit(HCI_HS_ENABLED
, &hdev
->dev_flags
);
5000 mgmt_pending_foreach(MGMT_OP_SET_SSP
, hdev
, settings_rsp
, &match
);
5003 new_settings(hdev
, match
.sk
);
5008 hci_req_init(&req
, hdev
);
5010 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
))
5015 hci_req_run(&req
, NULL
);
5018 void mgmt_sc_enable_complete(struct hci_dev
*hdev
, u8 enable
, u8 status
)
5020 struct cmd_lookup match
= { NULL
, hdev
};
5021 bool changed
= false;
5024 u8 mgmt_err
= mgmt_status(status
);
5026 if (enable
&& test_and_clear_bit(HCI_SC_ENABLED
,
5028 new_settings(hdev
, NULL
);
5030 mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN
, hdev
,
5031 cmd_status_rsp
, &mgmt_err
);
5036 changed
= !test_and_set_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
);
5038 changed
= test_and_clear_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
);
5040 mgmt_pending_foreach(MGMT_OP_SET_SECURE_CONN
, hdev
,
5041 settings_rsp
, &match
);
5044 new_settings(hdev
, match
.sk
);
5050 static void sk_lookup(struct pending_cmd
*cmd
, void *data
)
5052 struct cmd_lookup
*match
= data
;
5054 if (match
->sk
== NULL
) {
5055 match
->sk
= cmd
->sk
;
5056 sock_hold(match
->sk
);
5060 void mgmt_set_class_of_dev_complete(struct hci_dev
*hdev
, u8
*dev_class
,
5063 struct cmd_lookup match
= { NULL
, hdev
, mgmt_status(status
) };
5065 mgmt_pending_foreach(MGMT_OP_SET_DEV_CLASS
, hdev
, sk_lookup
, &match
);
5066 mgmt_pending_foreach(MGMT_OP_ADD_UUID
, hdev
, sk_lookup
, &match
);
5067 mgmt_pending_foreach(MGMT_OP_REMOVE_UUID
, hdev
, sk_lookup
, &match
);
5070 mgmt_event(MGMT_EV_CLASS_OF_DEV_CHANGED
, hdev
, dev_class
, 3,
5077 void mgmt_set_local_name_complete(struct hci_dev
*hdev
, u8
*name
, u8 status
)
5079 struct mgmt_cp_set_local_name ev
;
5080 struct pending_cmd
*cmd
;
5085 memset(&ev
, 0, sizeof(ev
));
5086 memcpy(ev
.name
, name
, HCI_MAX_NAME_LENGTH
);
5087 memcpy(ev
.short_name
, hdev
->short_name
, HCI_MAX_SHORT_NAME_LENGTH
);
5089 cmd
= mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME
, hdev
);
5091 memcpy(hdev
->dev_name
, name
, sizeof(hdev
->dev_name
));
5093 /* If this is a HCI command related to powering on the
5094 * HCI dev don't send any mgmt signals.
5096 if (mgmt_pending_find(MGMT_OP_SET_POWERED
, hdev
))
5100 mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED
, hdev
, &ev
, sizeof(ev
),
5101 cmd
? cmd
->sk
: NULL
);
5104 void mgmt_read_local_oob_data_complete(struct hci_dev
*hdev
, u8
*hash192
,
5105 u8
*randomizer192
, u8
*hash256
,
5106 u8
*randomizer256
, u8 status
)
5108 struct pending_cmd
*cmd
;
5110 BT_DBG("%s status %u", hdev
->name
, status
);
5112 cmd
= mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA
, hdev
);
5117 cmd_status(cmd
->sk
, hdev
->id
, MGMT_OP_READ_LOCAL_OOB_DATA
,
5118 mgmt_status(status
));
5120 if (test_bit(HCI_SC_ENABLED
, &hdev
->dev_flags
) &&
5121 hash256
&& randomizer256
) {
5122 struct mgmt_rp_read_local_oob_ext_data rp
;
5124 memcpy(rp
.hash192
, hash192
, sizeof(rp
.hash192
));
5125 memcpy(rp
.randomizer192
, randomizer192
,
5126 sizeof(rp
.randomizer192
));
5128 memcpy(rp
.hash256
, hash256
, sizeof(rp
.hash256
));
5129 memcpy(rp
.randomizer256
, randomizer256
,
5130 sizeof(rp
.randomizer256
));
5132 cmd_complete(cmd
->sk
, hdev
->id
,
5133 MGMT_OP_READ_LOCAL_OOB_DATA
, 0,
5136 struct mgmt_rp_read_local_oob_data rp
;
5138 memcpy(rp
.hash
, hash192
, sizeof(rp
.hash
));
5139 memcpy(rp
.randomizer
, randomizer192
,
5140 sizeof(rp
.randomizer
));
5142 cmd_complete(cmd
->sk
, hdev
->id
,
5143 MGMT_OP_READ_LOCAL_OOB_DATA
, 0,
5148 mgmt_pending_remove(cmd
);
5151 void mgmt_device_found(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
5152 u8 addr_type
, u8
*dev_class
, s8 rssi
, u8 cfm_name
, u8
5153 ssp
, u8
*eir
, u16 eir_len
)
5156 struct mgmt_ev_device_found
*ev
= (void *) buf
;
5159 if (!hci_discovery_active(hdev
))
5162 /* Leave 5 bytes for a potential CoD field */
5163 if (sizeof(*ev
) + eir_len
+ 5 > sizeof(buf
))
5166 memset(buf
, 0, sizeof(buf
));
5168 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
5169 ev
->addr
.type
= link_to_bdaddr(link_type
, addr_type
);
5172 ev
->flags
|= __constant_cpu_to_le32(MGMT_DEV_FOUND_CONFIRM_NAME
);
5174 ev
->flags
|= __constant_cpu_to_le32(MGMT_DEV_FOUND_LEGACY_PAIRING
);
5177 memcpy(ev
->eir
, eir
, eir_len
);
5179 if (dev_class
&& !eir_has_data_type(ev
->eir
, eir_len
, EIR_CLASS_OF_DEV
))
5180 eir_len
= eir_append_data(ev
->eir
, eir_len
, EIR_CLASS_OF_DEV
,
5183 ev
->eir_len
= cpu_to_le16(eir_len
);
5184 ev_size
= sizeof(*ev
) + eir_len
;
5186 mgmt_event(MGMT_EV_DEVICE_FOUND
, hdev
, ev
, ev_size
, NULL
);
5189 void mgmt_remote_name(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 link_type
,
5190 u8 addr_type
, s8 rssi
, u8
*name
, u8 name_len
)
5192 struct mgmt_ev_device_found
*ev
;
5193 char buf
[sizeof(*ev
) + HCI_MAX_NAME_LENGTH
+ 2];
5196 ev
= (struct mgmt_ev_device_found
*) buf
;
5198 memset(buf
, 0, sizeof(buf
));
5200 bacpy(&ev
->addr
.bdaddr
, bdaddr
);
5201 ev
->addr
.type
= link_to_bdaddr(link_type
, addr_type
);
5204 eir_len
= eir_append_data(ev
->eir
, 0, EIR_NAME_COMPLETE
, name
,
5207 ev
->eir_len
= cpu_to_le16(eir_len
);
5209 mgmt_event(MGMT_EV_DEVICE_FOUND
, hdev
, ev
, sizeof(*ev
) + eir_len
, NULL
);
5212 void mgmt_discovering(struct hci_dev
*hdev
, u8 discovering
)
5214 struct mgmt_ev_discovering ev
;
5215 struct pending_cmd
*cmd
;
5217 BT_DBG("%s discovering %u", hdev
->name
, discovering
);
5220 cmd
= mgmt_pending_find(MGMT_OP_START_DISCOVERY
, hdev
);
5222 cmd
= mgmt_pending_find(MGMT_OP_STOP_DISCOVERY
, hdev
);
5225 u8 type
= hdev
->discovery
.type
;
5227 cmd_complete(cmd
->sk
, hdev
->id
, cmd
->opcode
, 0, &type
,
5229 mgmt_pending_remove(cmd
);
5232 memset(&ev
, 0, sizeof(ev
));
5233 ev
.type
= hdev
->discovery
.type
;
5234 ev
.discovering
= discovering
;
5236 mgmt_event(MGMT_EV_DISCOVERING
, hdev
, &ev
, sizeof(ev
), NULL
);
5239 int mgmt_device_blocked(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 type
)
5241 struct pending_cmd
*cmd
;
5242 struct mgmt_ev_device_blocked ev
;
5244 cmd
= mgmt_pending_find(MGMT_OP_BLOCK_DEVICE
, hdev
);
5246 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
5247 ev
.addr
.type
= type
;
5249 return mgmt_event(MGMT_EV_DEVICE_BLOCKED
, hdev
, &ev
, sizeof(ev
),
5250 cmd
? cmd
->sk
: NULL
);
5253 int mgmt_device_unblocked(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 type
)
5255 struct pending_cmd
*cmd
;
5256 struct mgmt_ev_device_unblocked ev
;
5258 cmd
= mgmt_pending_find(MGMT_OP_UNBLOCK_DEVICE
, hdev
);
5260 bacpy(&ev
.addr
.bdaddr
, bdaddr
);
5261 ev
.addr
.type
= type
;
5263 return mgmt_event(MGMT_EV_DEVICE_UNBLOCKED
, hdev
, &ev
, sizeof(ev
),
5264 cmd
? cmd
->sk
: NULL
);
5267 static void adv_enable_complete(struct hci_dev
*hdev
, u8 status
)
5269 BT_DBG("%s status %u", hdev
->name
, status
);
5271 /* Clear the advertising mgmt setting if we failed to re-enable it */
5273 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
5274 new_settings(hdev
, NULL
);
5278 void mgmt_reenable_advertising(struct hci_dev
*hdev
)
5280 struct hci_request req
;
5282 if (hci_conn_num(hdev
, LE_LINK
) > 0)
5285 if (!test_bit(HCI_ADVERTISING
, &hdev
->dev_flags
))
5288 hci_req_init(&req
, hdev
);
5289 enable_advertising(&req
);
5291 /* If this fails we have no option but to let user space know
5292 * that we've disabled advertising.
5294 if (hci_req_run(&req
, adv_enable_complete
) < 0) {
5295 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
5296 new_settings(hdev
, NULL
);