2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2010 Nokia Corporation
5 This program is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License version 2 as
7 published by the Free Software Foundation;
9 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
10 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
11 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
12 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
13 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
14 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
19 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
20 SOFTWARE IS DISCLAIMED.
23 /* Bluetooth HCI Management interface */
25 #include <linux/uaccess.h>
26 #include <asm/unaligned.h>
28 #include <net/bluetooth/bluetooth.h>
29 #include <net/bluetooth/hci_core.h>
30 #include <net/bluetooth/mgmt.h>
32 #define MGMT_VERSION 0
33 #define MGMT_REVISION 1
36 struct list_head list;
46 static int cmd_status(struct sock *sk, u16 index, u16 cmd, u8 status)
50 struct mgmt_ev_cmd_status *ev;
52 BT_DBG("sock %p, index %u, cmd %u, status %u", sk, index, cmd, status);
54 skb = alloc_skb(sizeof(*hdr) + sizeof(*ev), GFP_ATOMIC);
58 hdr = (void *) skb_put(skb, sizeof(*hdr));
60 hdr->opcode = cpu_to_le16(MGMT_EV_CMD_STATUS);
61 hdr->index = cpu_to_le16(index);
62 hdr->len = cpu_to_le16(sizeof(*ev));
64 ev = (void *) skb_put(skb, sizeof(*ev));
66 put_unaligned_le16(cmd, &ev->opcode);
68 if (sock_queue_rcv_skb(sk, skb) < 0)
74 static int cmd_complete(struct sock *sk, u16 index, u16 cmd, void *rp,
79 struct mgmt_ev_cmd_complete *ev;
81 BT_DBG("sock %p", sk);
83 skb = alloc_skb(sizeof(*hdr) + sizeof(*ev) + rp_len, GFP_ATOMIC);
87 hdr = (void *) skb_put(skb, sizeof(*hdr));
89 hdr->opcode = cpu_to_le16(MGMT_EV_CMD_COMPLETE);
90 hdr->index = cpu_to_le16(index);
91 hdr->len = cpu_to_le16(sizeof(*ev) + rp_len);
93 ev = (void *) skb_put(skb, sizeof(*ev) + rp_len);
94 put_unaligned_le16(cmd, &ev->opcode);
97 memcpy(ev->data, rp, rp_len);
99 if (sock_queue_rcv_skb(sk, skb) < 0)
105 static int read_version(struct sock *sk)
107 struct mgmt_rp_read_version rp;
109 BT_DBG("sock %p", sk);
111 rp.version = MGMT_VERSION;
112 put_unaligned_le16(MGMT_REVISION, &rp.revision);
114 return cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_VERSION, &rp,
118 static int read_index_list(struct sock *sk)
120 struct mgmt_rp_read_index_list *rp;
126 BT_DBG("sock %p", sk);
128 read_lock(&hci_dev_list_lock);
131 list_for_each(p, &hci_dev_list) {
135 rp_len = sizeof(*rp) + (2 * count);
136 rp = kmalloc(rp_len, GFP_ATOMIC);
138 read_unlock(&hci_dev_list_lock);
142 put_unaligned_le16(count, &rp->num_controllers);
145 list_for_each(p, &hci_dev_list) {
146 struct hci_dev *d = list_entry(p, struct hci_dev, list);
148 hci_del_off_timer(d);
150 set_bit(HCI_MGMT, &d->flags);
152 if (test_bit(HCI_SETUP, &d->flags))
155 put_unaligned_le16(d->id, &rp->index[i++]);
156 BT_DBG("Added hci%u", d->id);
159 read_unlock(&hci_dev_list_lock);
161 err = cmd_complete(sk, MGMT_INDEX_NONE, MGMT_OP_READ_INDEX_LIST, rp,
169 static int read_controller_info(struct sock *sk, u16 index)
171 struct mgmt_rp_read_info rp;
172 struct hci_dev *hdev;
174 BT_DBG("sock %p hci%u", sk, index);
176 hdev = hci_dev_get(index);
178 return cmd_status(sk, index, MGMT_OP_READ_INFO, ENODEV);
180 hci_del_off_timer(hdev);
182 hci_dev_lock_bh(hdev);
184 set_bit(HCI_MGMT, &hdev->flags);
186 memset(&rp, 0, sizeof(rp));
188 rp.type = hdev->dev_type;
190 rp.powered = test_bit(HCI_UP, &hdev->flags);
191 rp.connectable = test_bit(HCI_PSCAN, &hdev->flags);
192 rp.discoverable = test_bit(HCI_ISCAN, &hdev->flags);
193 rp.pairable = test_bit(HCI_PSCAN, &hdev->flags);
195 if (test_bit(HCI_AUTH, &hdev->flags))
197 else if (hdev->ssp_mode > 0)
202 bacpy(&rp.bdaddr, &hdev->bdaddr);
203 memcpy(rp.features, hdev->features, 8);
204 memcpy(rp.dev_class, hdev->dev_class, 3);
205 put_unaligned_le16(hdev->manufacturer, &rp.manufacturer);
206 rp.hci_ver = hdev->hci_ver;
207 put_unaligned_le16(hdev->hci_rev, &rp.hci_rev);
209 memcpy(rp.name, hdev->dev_name, sizeof(hdev->dev_name));
211 hci_dev_unlock_bh(hdev);
214 return cmd_complete(sk, index, MGMT_OP_READ_INFO, &rp, sizeof(rp));
217 static void mgmt_pending_free(struct pending_cmd *cmd)
224 static struct pending_cmd *mgmt_pending_add(struct sock *sk, u16 opcode,
225 u16 index, void *data, u16 len)
227 struct pending_cmd *cmd;
229 cmd = kmalloc(sizeof(*cmd), GFP_ATOMIC);
233 cmd->opcode = opcode;
236 cmd->param = kmalloc(len, GFP_ATOMIC);
243 memcpy(cmd->param, data, len);
248 list_add(&cmd->list, &cmd_list);
253 static void mgmt_pending_foreach(u16 opcode, int index,
254 void (*cb)(struct pending_cmd *cmd, void *data),
257 struct list_head *p, *n;
259 list_for_each_safe(p, n, &cmd_list) {
260 struct pending_cmd *cmd;
262 cmd = list_entry(p, struct pending_cmd, list);
264 if (cmd->opcode != opcode)
267 if (index >= 0 && cmd->index != index)
274 static struct pending_cmd *mgmt_pending_find(u16 opcode, int index)
278 list_for_each(p, &cmd_list) {
279 struct pending_cmd *cmd;
281 cmd = list_entry(p, struct pending_cmd, list);
283 if (cmd->opcode != opcode)
286 if (index >= 0 && cmd->index != index)
295 static void mgmt_pending_remove(struct pending_cmd *cmd)
297 list_del(&cmd->list);
298 mgmt_pending_free(cmd);
301 static int set_powered(struct sock *sk, u16 index, unsigned char *data, u16 len)
303 struct mgmt_mode *cp;
304 struct hci_dev *hdev;
305 struct pending_cmd *cmd;
310 BT_DBG("request for hci%u", index);
312 if (len != sizeof(*cp))
313 return cmd_status(sk, index, MGMT_OP_SET_POWERED, EINVAL);
315 hdev = hci_dev_get(index);
317 return cmd_status(sk, index, MGMT_OP_SET_POWERED, ENODEV);
319 hci_dev_lock_bh(hdev);
321 up = test_bit(HCI_UP, &hdev->flags);
322 if ((cp->val && up) || (!cp->val && !up)) {
323 err = cmd_status(sk, index, MGMT_OP_SET_POWERED, EALREADY);
327 if (mgmt_pending_find(MGMT_OP_SET_POWERED, index)) {
328 err = cmd_status(sk, index, MGMT_OP_SET_POWERED, EBUSY);
332 cmd = mgmt_pending_add(sk, MGMT_OP_SET_POWERED, index, data, len);
339 queue_work(hdev->workqueue, &hdev->power_on);
341 queue_work(hdev->workqueue, &hdev->power_off);
346 hci_dev_unlock_bh(hdev);
351 static int set_discoverable(struct sock *sk, u16 index, unsigned char *data,
354 struct mgmt_mode *cp;
355 struct hci_dev *hdev;
356 struct pending_cmd *cmd;
362 BT_DBG("request for hci%u", index);
364 if (len != sizeof(*cp))
365 return cmd_status(sk, index, MGMT_OP_SET_DISCOVERABLE, EINVAL);
367 hdev = hci_dev_get(index);
369 return cmd_status(sk, index, MGMT_OP_SET_DISCOVERABLE, ENODEV);
371 hci_dev_lock_bh(hdev);
373 if (!test_bit(HCI_UP, &hdev->flags)) {
374 err = cmd_status(sk, index, MGMT_OP_SET_DISCOVERABLE, ENETDOWN);
378 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, index) ||
379 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, index)) {
380 err = cmd_status(sk, index, MGMT_OP_SET_DISCOVERABLE, EBUSY);
384 if (cp->val == test_bit(HCI_ISCAN, &hdev->flags) &&
385 test_bit(HCI_PSCAN, &hdev->flags)) {
386 err = cmd_status(sk, index, MGMT_OP_SET_DISCOVERABLE, EALREADY);
390 cmd = mgmt_pending_add(sk, MGMT_OP_SET_DISCOVERABLE, index, data, len);
399 scan |= SCAN_INQUIRY;
401 err = hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
403 mgmt_pending_remove(cmd);
406 hci_dev_unlock_bh(hdev);
412 static int set_connectable(struct sock *sk, u16 index, unsigned char *data,
415 struct mgmt_mode *cp;
416 struct hci_dev *hdev;
417 struct pending_cmd *cmd;
423 BT_DBG("request for hci%u", index);
425 if (len != sizeof(*cp))
426 return cmd_status(sk, index, MGMT_OP_SET_CONNECTABLE, EINVAL);
428 hdev = hci_dev_get(index);
430 return cmd_status(sk, index, MGMT_OP_SET_CONNECTABLE, ENODEV);
432 hci_dev_lock_bh(hdev);
434 if (!test_bit(HCI_UP, &hdev->flags)) {
435 err = cmd_status(sk, index, MGMT_OP_SET_CONNECTABLE, ENETDOWN);
439 if (mgmt_pending_find(MGMT_OP_SET_DISCOVERABLE, index) ||
440 mgmt_pending_find(MGMT_OP_SET_CONNECTABLE, index)) {
441 err = cmd_status(sk, index, MGMT_OP_SET_CONNECTABLE, EBUSY);
445 if (cp->val == test_bit(HCI_PSCAN, &hdev->flags)) {
446 err = cmd_status(sk, index, MGMT_OP_SET_CONNECTABLE, EALREADY);
450 cmd = mgmt_pending_add(sk, MGMT_OP_SET_CONNECTABLE, index, data, len);
461 err = hci_send_cmd(hdev, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
463 mgmt_pending_remove(cmd);
466 hci_dev_unlock_bh(hdev);
472 static int mgmt_event(u16 event, u16 index, void *data, u16 data_len,
473 struct sock *skip_sk)
476 struct mgmt_hdr *hdr;
478 skb = alloc_skb(sizeof(*hdr) + data_len, GFP_ATOMIC);
482 bt_cb(skb)->channel = HCI_CHANNEL_CONTROL;
484 hdr = (void *) skb_put(skb, sizeof(*hdr));
485 hdr->opcode = cpu_to_le16(event);
486 hdr->index = cpu_to_le16(index);
487 hdr->len = cpu_to_le16(data_len);
490 memcpy(skb_put(skb, data_len), data, data_len);
492 hci_send_to_sock(NULL, skb, skip_sk);
498 static int send_mode_rsp(struct sock *sk, u16 opcode, u16 index, u8 val)
504 return cmd_complete(sk, index, opcode, &rp, sizeof(rp));
507 static int set_pairable(struct sock *sk, u16 index, unsigned char *data,
510 struct mgmt_mode *cp, ev;
511 struct hci_dev *hdev;
516 BT_DBG("request for hci%u", index);
518 if (len != sizeof(*cp))
519 return cmd_status(sk, index, MGMT_OP_SET_PAIRABLE, EINVAL);
521 hdev = hci_dev_get(index);
523 return cmd_status(sk, index, MGMT_OP_SET_PAIRABLE, ENODEV);
525 hci_dev_lock_bh(hdev);
528 set_bit(HCI_PAIRABLE, &hdev->flags);
530 clear_bit(HCI_PAIRABLE, &hdev->flags);
532 err = send_mode_rsp(sk, MGMT_OP_SET_PAIRABLE, index, cp->val);
538 err = mgmt_event(MGMT_EV_PAIRABLE, index, &ev, sizeof(ev), sk);
541 hci_dev_unlock_bh(hdev);
547 #define EIR_FLAGS 0x01 /* flags */
548 #define EIR_UUID16_SOME 0x02 /* 16-bit UUID, more available */
549 #define EIR_UUID16_ALL 0x03 /* 16-bit UUID, all listed */
550 #define EIR_UUID32_SOME 0x04 /* 32-bit UUID, more available */
551 #define EIR_UUID32_ALL 0x05 /* 32-bit UUID, all listed */
552 #define EIR_UUID128_SOME 0x06 /* 128-bit UUID, more available */
553 #define EIR_UUID128_ALL 0x07 /* 128-bit UUID, all listed */
554 #define EIR_NAME_SHORT 0x08 /* shortened local name */
555 #define EIR_NAME_COMPLETE 0x09 /* complete local name */
556 #define EIR_TX_POWER 0x0A /* transmit power level */
557 #define EIR_DEVICE_ID 0x10 /* device ID */
559 #define PNP_INFO_SVCLASS_ID 0x1200
561 static u8 bluetooth_base_uuid[] = {
562 0xFB, 0x34, 0x9B, 0x5F, 0x80, 0x00, 0x00, 0x80,
563 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
566 static u16 get_uuid16(u8 *uuid128)
571 for (i = 0; i < 12; i++) {
572 if (bluetooth_base_uuid[i] != uuid128[i])
576 memcpy(&val, &uuid128[12], 4);
578 val = le32_to_cpu(val);
585 static void create_eir(struct hci_dev *hdev, u8 *data)
589 u16 uuid16_list[HCI_MAX_EIR_LENGTH / sizeof(u16)];
590 int i, truncated = 0;
594 name_len = strlen(hdev->dev_name);
600 ptr[1] = EIR_NAME_SHORT;
602 ptr[1] = EIR_NAME_COMPLETE;
604 /* EIR Data length */
605 ptr[0] = name_len + 1;
607 memcpy(ptr + 2, hdev->dev_name, name_len);
609 eir_len += (name_len + 2);
610 ptr += (name_len + 2);
613 memset(uuid16_list, 0, sizeof(uuid16_list));
615 /* Group all UUID16 types */
616 list_for_each(p, &hdev->uuids) {
617 struct bt_uuid *uuid = list_entry(p, struct bt_uuid, list);
620 uuid16 = get_uuid16(uuid->uuid);
627 if (uuid16 == PNP_INFO_SVCLASS_ID)
630 /* Stop if not enough space to put next UUID */
631 if (eir_len + 2 + sizeof(u16) > HCI_MAX_EIR_LENGTH) {
636 /* Check for duplicates */
637 for (i = 0; uuid16_list[i] != 0; i++)
638 if (uuid16_list[i] == uuid16)
641 if (uuid16_list[i] == 0) {
642 uuid16_list[i] = uuid16;
643 eir_len += sizeof(u16);
647 if (uuid16_list[0] != 0) {
651 ptr[1] = truncated ? EIR_UUID16_SOME : EIR_UUID16_ALL;
656 for (i = 0; uuid16_list[i] != 0; i++) {
657 *ptr++ = (uuid16_list[i] & 0x00ff);
658 *ptr++ = (uuid16_list[i] & 0xff00) >> 8;
661 /* EIR Data length */
662 *length = (i * sizeof(u16)) + 1;
666 static int update_eir(struct hci_dev *hdev)
668 struct hci_cp_write_eir cp;
670 if (!(hdev->features[6] & LMP_EXT_INQ))
673 if (hdev->ssp_mode == 0)
676 if (test_bit(HCI_SERVICE_CACHE, &hdev->flags))
679 memset(&cp, 0, sizeof(cp));
681 create_eir(hdev, cp.data);
683 if (memcmp(cp.data, hdev->eir, sizeof(cp.data)) == 0)
686 memcpy(hdev->eir, cp.data, sizeof(cp.data));
688 return hci_send_cmd(hdev, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
691 static u8 get_service_classes(struct hci_dev *hdev)
696 list_for_each(p, &hdev->uuids) {
697 struct bt_uuid *uuid = list_entry(p, struct bt_uuid, list);
699 val |= uuid->svc_hint;
705 static int update_class(struct hci_dev *hdev)
709 BT_DBG("%s", hdev->name);
711 if (test_bit(HCI_SERVICE_CACHE, &hdev->flags))
714 cod[0] = hdev->minor_class;
715 cod[1] = hdev->major_class;
716 cod[2] = get_service_classes(hdev);
718 if (memcmp(cod, hdev->dev_class, 3) == 0)
721 return hci_send_cmd(hdev, HCI_OP_WRITE_CLASS_OF_DEV, sizeof(cod), cod);
724 static int add_uuid(struct sock *sk, u16 index, unsigned char *data, u16 len)
726 struct mgmt_cp_add_uuid *cp;
727 struct hci_dev *hdev;
728 struct bt_uuid *uuid;
733 BT_DBG("request for hci%u", index);
735 if (len != sizeof(*cp))
736 return cmd_status(sk, index, MGMT_OP_ADD_UUID, EINVAL);
738 hdev = hci_dev_get(index);
740 return cmd_status(sk, index, MGMT_OP_ADD_UUID, ENODEV);
742 hci_dev_lock_bh(hdev);
744 uuid = kmalloc(sizeof(*uuid), GFP_ATOMIC);
750 memcpy(uuid->uuid, cp->uuid, 16);
751 uuid->svc_hint = cp->svc_hint;
753 list_add(&uuid->list, &hdev->uuids);
755 err = update_class(hdev);
759 err = update_eir(hdev);
763 err = cmd_complete(sk, index, MGMT_OP_ADD_UUID, NULL, 0);
766 hci_dev_unlock_bh(hdev);
772 static int remove_uuid(struct sock *sk, u16 index, unsigned char *data, u16 len)
774 struct list_head *p, *n;
775 struct mgmt_cp_remove_uuid *cp;
776 struct hci_dev *hdev;
777 u8 bt_uuid_any[] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
782 BT_DBG("request for hci%u", index);
784 if (len != sizeof(*cp))
785 return cmd_status(sk, index, MGMT_OP_REMOVE_UUID, EINVAL);
787 hdev = hci_dev_get(index);
789 return cmd_status(sk, index, MGMT_OP_REMOVE_UUID, ENODEV);
791 hci_dev_lock_bh(hdev);
793 if (memcmp(cp->uuid, bt_uuid_any, 16) == 0) {
794 err = hci_uuids_clear(hdev);
800 list_for_each_safe(p, n, &hdev->uuids) {
801 struct bt_uuid *match = list_entry(p, struct bt_uuid, list);
803 if (memcmp(match->uuid, cp->uuid, 16) != 0)
806 list_del(&match->list);
811 err = cmd_status(sk, index, MGMT_OP_REMOVE_UUID, ENOENT);
815 err = update_class(hdev);
819 err = update_eir(hdev);
823 err = cmd_complete(sk, index, MGMT_OP_REMOVE_UUID, NULL, 0);
826 hci_dev_unlock_bh(hdev);
832 static int set_dev_class(struct sock *sk, u16 index, unsigned char *data,
835 struct hci_dev *hdev;
836 struct mgmt_cp_set_dev_class *cp;
841 BT_DBG("request for hci%u", index);
843 if (len != sizeof(*cp))
844 return cmd_status(sk, index, MGMT_OP_SET_DEV_CLASS, EINVAL);
846 hdev = hci_dev_get(index);
848 return cmd_status(sk, index, MGMT_OP_SET_DEV_CLASS, ENODEV);
850 hci_dev_lock_bh(hdev);
852 hdev->major_class = cp->major;
853 hdev->minor_class = cp->minor;
855 err = update_class(hdev);
858 err = cmd_complete(sk, index, MGMT_OP_SET_DEV_CLASS, NULL, 0);
860 hci_dev_unlock_bh(hdev);
866 static int set_service_cache(struct sock *sk, u16 index, unsigned char *data,
869 struct hci_dev *hdev;
870 struct mgmt_cp_set_service_cache *cp;
875 if (len != sizeof(*cp))
876 return cmd_status(sk, index, MGMT_OP_SET_SERVICE_CACHE, EINVAL);
878 hdev = hci_dev_get(index);
880 return cmd_status(sk, index, MGMT_OP_SET_SERVICE_CACHE, ENODEV);
882 hci_dev_lock_bh(hdev);
884 BT_DBG("hci%u enable %d", index, cp->enable);
887 set_bit(HCI_SERVICE_CACHE, &hdev->flags);
890 clear_bit(HCI_SERVICE_CACHE, &hdev->flags);
891 err = update_class(hdev);
893 err = update_eir(hdev);
897 err = cmd_complete(sk, index, MGMT_OP_SET_SERVICE_CACHE, NULL,
900 hci_dev_unlock_bh(hdev);
906 static int load_keys(struct sock *sk, u16 index, unsigned char *data, u16 len)
908 struct hci_dev *hdev;
909 struct mgmt_cp_load_keys *cp;
910 u16 key_count, expected_len;
915 if (len < sizeof(*cp))
918 key_count = get_unaligned_le16(&cp->key_count);
920 expected_len = sizeof(*cp) + key_count * sizeof(struct mgmt_key_info);
921 if (expected_len != len) {
922 BT_ERR("load_keys: expected %u bytes, got %u bytes",
927 hdev = hci_dev_get(index);
929 return cmd_status(sk, index, MGMT_OP_LOAD_KEYS, ENODEV);
931 BT_DBG("hci%u debug_keys %u key_count %u", index, cp->debug_keys,
934 hci_dev_lock_bh(hdev);
936 hci_link_keys_clear(hdev);
938 set_bit(HCI_LINK_KEYS, &hdev->flags);
941 set_bit(HCI_DEBUG_KEYS, &hdev->flags);
943 clear_bit(HCI_DEBUG_KEYS, &hdev->flags);
945 for (i = 0; i < key_count; i++) {
946 struct mgmt_key_info *key = &cp->keys[i];
948 hci_add_link_key(hdev, 0, &key->bdaddr, key->val, key->type,
952 hci_dev_unlock_bh(hdev);
958 static int remove_key(struct sock *sk, u16 index, unsigned char *data, u16 len)
960 struct hci_dev *hdev;
961 struct mgmt_cp_remove_key *cp;
962 struct hci_conn *conn;
967 if (len != sizeof(*cp))
968 return cmd_status(sk, index, MGMT_OP_REMOVE_KEY, EINVAL);
970 hdev = hci_dev_get(index);
972 return cmd_status(sk, index, MGMT_OP_REMOVE_KEY, ENODEV);
974 hci_dev_lock_bh(hdev);
976 err = hci_remove_link_key(hdev, &cp->bdaddr);
978 err = cmd_status(sk, index, MGMT_OP_REMOVE_KEY, -err);
984 if (!test_bit(HCI_UP, &hdev->flags) || !cp->disconnect)
987 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
989 struct hci_cp_disconnect dc;
991 put_unaligned_le16(conn->handle, &dc.handle);
992 dc.reason = 0x13; /* Remote User Terminated Connection */
993 err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, 0, NULL);
997 hci_dev_unlock_bh(hdev);
1003 static int disconnect(struct sock *sk, u16 index, unsigned char *data, u16 len)
1005 struct hci_dev *hdev;
1006 struct mgmt_cp_disconnect *cp;
1007 struct hci_cp_disconnect dc;
1008 struct pending_cmd *cmd;
1009 struct hci_conn *conn;
1016 if (len != sizeof(*cp))
1017 return cmd_status(sk, index, MGMT_OP_DISCONNECT, EINVAL);
1019 hdev = hci_dev_get(index);
1021 return cmd_status(sk, index, MGMT_OP_DISCONNECT, ENODEV);
1023 hci_dev_lock_bh(hdev);
1025 if (!test_bit(HCI_UP, &hdev->flags)) {
1026 err = cmd_status(sk, index, MGMT_OP_DISCONNECT, ENETDOWN);
1030 if (mgmt_pending_find(MGMT_OP_DISCONNECT, index)) {
1031 err = cmd_status(sk, index, MGMT_OP_DISCONNECT, EBUSY);
1035 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1037 err = cmd_status(sk, index, MGMT_OP_DISCONNECT, ENOTCONN);
1041 cmd = mgmt_pending_add(sk, MGMT_OP_DISCONNECT, index, data, len);
1047 put_unaligned_le16(conn->handle, &dc.handle);
1048 dc.reason = 0x13; /* Remote User Terminated Connection */
1050 err = hci_send_cmd(hdev, HCI_OP_DISCONNECT, sizeof(dc), &dc);
1052 mgmt_pending_remove(cmd);
1055 hci_dev_unlock_bh(hdev);
1061 static int get_connections(struct sock *sk, u16 index)
1063 struct mgmt_rp_get_connections *rp;
1064 struct hci_dev *hdev;
1065 struct list_head *p;
1072 hdev = hci_dev_get(index);
1074 return cmd_status(sk, index, MGMT_OP_GET_CONNECTIONS, ENODEV);
1076 hci_dev_lock_bh(hdev);
1079 list_for_each(p, &hdev->conn_hash.list) {
1083 rp_len = sizeof(*rp) + (count * sizeof(bdaddr_t));
1084 rp = kmalloc(rp_len, GFP_ATOMIC);
1090 put_unaligned_le16(count, &rp->conn_count);
1092 read_lock(&hci_dev_list_lock);
1095 list_for_each(p, &hdev->conn_hash.list) {
1096 struct hci_conn *c = list_entry(p, struct hci_conn, list);
1098 bacpy(&rp->conn[i++], &c->dst);
1101 read_unlock(&hci_dev_list_lock);
1103 err = cmd_complete(sk, index, MGMT_OP_GET_CONNECTIONS, rp, rp_len);
1107 hci_dev_unlock_bh(hdev);
1112 static int pin_code_reply(struct sock *sk, u16 index, unsigned char *data,
1115 struct hci_dev *hdev;
1116 struct mgmt_cp_pin_code_reply *cp;
1117 struct hci_cp_pin_code_reply reply;
1118 struct pending_cmd *cmd;
1125 if (len != sizeof(*cp))
1126 return cmd_status(sk, index, MGMT_OP_PIN_CODE_REPLY, EINVAL);
1128 hdev = hci_dev_get(index);
1130 return cmd_status(sk, index, MGMT_OP_PIN_CODE_REPLY, ENODEV);
1132 hci_dev_lock_bh(hdev);
1134 if (!test_bit(HCI_UP, &hdev->flags)) {
1135 err = cmd_status(sk, index, MGMT_OP_PIN_CODE_REPLY, ENETDOWN);
1139 cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_REPLY, index, data, len);
1145 bacpy(&reply.bdaddr, &cp->bdaddr);
1146 reply.pin_len = cp->pin_len;
1147 memcpy(reply.pin_code, cp->pin_code, 16);
1149 err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_REPLY, sizeof(reply), &reply);
1151 mgmt_pending_remove(cmd);
1154 hci_dev_unlock_bh(hdev);
1160 static int pin_code_neg_reply(struct sock *sk, u16 index, unsigned char *data,
1163 struct hci_dev *hdev;
1164 struct mgmt_cp_pin_code_neg_reply *cp;
1165 struct pending_cmd *cmd;
1172 if (len != sizeof(*cp))
1173 return cmd_status(sk, index, MGMT_OP_PIN_CODE_NEG_REPLY,
1176 hdev = hci_dev_get(index);
1178 return cmd_status(sk, index, MGMT_OP_PIN_CODE_NEG_REPLY,
1181 hci_dev_lock_bh(hdev);
1183 if (!test_bit(HCI_UP, &hdev->flags)) {
1184 err = cmd_status(sk, index, MGMT_OP_PIN_CODE_NEG_REPLY,
1189 cmd = mgmt_pending_add(sk, MGMT_OP_PIN_CODE_NEG_REPLY, index,
1196 err = hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY, sizeof(cp->bdaddr),
1199 mgmt_pending_remove(cmd);
1202 hci_dev_unlock_bh(hdev);
1208 static int set_io_capability(struct sock *sk, u16 index, unsigned char *data,
1211 struct hci_dev *hdev;
1212 struct mgmt_cp_set_io_capability *cp;
1218 if (len != sizeof(*cp))
1219 return cmd_status(sk, index, MGMT_OP_SET_IO_CAPABILITY, EINVAL);
1221 hdev = hci_dev_get(index);
1223 return cmd_status(sk, index, MGMT_OP_SET_IO_CAPABILITY, ENODEV);
1225 hci_dev_lock_bh(hdev);
1227 hdev->io_capability = cp->io_capability;
1229 BT_DBG("%s IO capability set to 0x%02x", hdev->name,
1230 hdev->io_capability);
1232 hci_dev_unlock_bh(hdev);
1235 return cmd_complete(sk, index, MGMT_OP_SET_IO_CAPABILITY, NULL, 0);
1238 static inline struct pending_cmd *find_pairing(struct hci_conn *conn)
1240 struct hci_dev *hdev = conn->hdev;
1241 struct list_head *p;
1243 list_for_each(p, &cmd_list) {
1244 struct pending_cmd *cmd;
1246 cmd = list_entry(p, struct pending_cmd, list);
1248 if (cmd->opcode != MGMT_OP_PAIR_DEVICE)
1251 if (cmd->index != hdev->id)
1254 if (cmd->user_data != conn)
1263 static void pairing_complete(struct pending_cmd *cmd, u8 status)
1265 struct mgmt_rp_pair_device rp;
1266 struct hci_conn *conn = cmd->user_data;
1268 bacpy(&rp.bdaddr, &conn->dst);
1271 cmd_complete(cmd->sk, cmd->index, MGMT_OP_PAIR_DEVICE, &rp, sizeof(rp));
1273 /* So we don't get further callbacks for this connection */
1274 conn->connect_cfm_cb = NULL;
1275 conn->security_cfm_cb = NULL;
1276 conn->disconn_cfm_cb = NULL;
1280 mgmt_pending_remove(cmd);
1283 static void pairing_complete_cb(struct hci_conn *conn, u8 status)
1285 struct pending_cmd *cmd;
1287 BT_DBG("status %u", status);
1289 cmd = find_pairing(conn);
1291 BT_DBG("Unable to find a pending command");
1295 pairing_complete(cmd, status);
1298 static int pair_device(struct sock *sk, u16 index, unsigned char *data, u16 len)
1300 struct hci_dev *hdev;
1301 struct mgmt_cp_pair_device *cp;
1302 struct pending_cmd *cmd;
1303 u8 sec_level, auth_type;
1304 struct hci_conn *conn;
1311 if (len != sizeof(*cp))
1312 return cmd_status(sk, index, MGMT_OP_PAIR_DEVICE, EINVAL);
1314 hdev = hci_dev_get(index);
1316 return cmd_status(sk, index, MGMT_OP_PAIR_DEVICE, ENODEV);
1318 hci_dev_lock_bh(hdev);
1320 if (cp->io_cap == 0x03) {
1321 sec_level = BT_SECURITY_MEDIUM;
1322 auth_type = HCI_AT_DEDICATED_BONDING;
1324 sec_level = BT_SECURITY_HIGH;
1325 auth_type = HCI_AT_DEDICATED_BONDING_MITM;
1328 conn = hci_connect(hdev, ACL_LINK, &cp->bdaddr, sec_level, auth_type);
1330 err = PTR_ERR(conn);
1334 if (conn->connect_cfm_cb) {
1336 err = cmd_status(sk, index, MGMT_OP_PAIR_DEVICE, EBUSY);
1340 cmd = mgmt_pending_add(sk, MGMT_OP_PAIR_DEVICE, index, data, len);
1347 conn->connect_cfm_cb = pairing_complete_cb;
1348 conn->security_cfm_cb = pairing_complete_cb;
1349 conn->disconn_cfm_cb = pairing_complete_cb;
1350 conn->io_capability = cp->io_cap;
1351 cmd->user_data = conn;
1353 if (conn->state == BT_CONNECTED &&
1354 hci_conn_security(conn, sec_level, auth_type))
1355 pairing_complete(cmd, 0);
1360 hci_dev_unlock_bh(hdev);
1366 static int user_confirm_reply(struct sock *sk, u16 index, unsigned char *data,
1367 u16 len, int success)
1369 struct mgmt_cp_user_confirm_reply *cp = (void *) data;
1370 u16 mgmt_op, hci_op;
1371 struct pending_cmd *cmd;
1372 struct hci_dev *hdev;
1378 mgmt_op = MGMT_OP_USER_CONFIRM_REPLY;
1379 hci_op = HCI_OP_USER_CONFIRM_REPLY;
1381 mgmt_op = MGMT_OP_USER_CONFIRM_NEG_REPLY;
1382 hci_op = HCI_OP_USER_CONFIRM_NEG_REPLY;
1385 if (len != sizeof(*cp))
1386 return cmd_status(sk, index, mgmt_op, EINVAL);
1388 hdev = hci_dev_get(index);
1390 return cmd_status(sk, index, mgmt_op, ENODEV);
1392 if (!test_bit(HCI_UP, &hdev->flags)) {
1393 err = cmd_status(sk, index, mgmt_op, ENETDOWN);
1397 cmd = mgmt_pending_add(sk, mgmt_op, index, data, len);
1403 err = hci_send_cmd(hdev, hci_op, sizeof(cp->bdaddr), &cp->bdaddr);
1405 mgmt_pending_remove(cmd);
1408 hci_dev_unlock_bh(hdev);
1414 static int set_local_name(struct sock *sk, u16 index, unsigned char *data,
1417 struct mgmt_cp_set_local_name *mgmt_cp = (void *) data;
1418 struct hci_cp_write_local_name hci_cp;
1419 struct hci_dev *hdev;
1420 struct pending_cmd *cmd;
1425 if (len != sizeof(*mgmt_cp))
1426 return cmd_status(sk, index, MGMT_OP_SET_LOCAL_NAME, EINVAL);
1428 hdev = hci_dev_get(index);
1430 return cmd_status(sk, index, MGMT_OP_SET_LOCAL_NAME, ENODEV);
1432 hci_dev_lock_bh(hdev);
1434 cmd = mgmt_pending_add(sk, MGMT_OP_SET_LOCAL_NAME, index, data, len);
1440 memcpy(hci_cp.name, mgmt_cp->name, sizeof(hci_cp.name));
1441 err = hci_send_cmd(hdev, HCI_OP_WRITE_LOCAL_NAME, sizeof(hci_cp),
1444 mgmt_pending_remove(cmd);
1447 hci_dev_unlock_bh(hdev);
1453 static int read_local_oob_data(struct sock *sk, u16 index)
1455 struct hci_dev *hdev;
1456 struct pending_cmd *cmd;
1459 BT_DBG("hci%u", index);
1461 hdev = hci_dev_get(index);
1463 return cmd_status(sk, index, MGMT_OP_READ_LOCAL_OOB_DATA,
1466 hci_dev_lock_bh(hdev);
1468 if (!test_bit(HCI_UP, &hdev->flags)) {
1469 err = cmd_status(sk, index, MGMT_OP_READ_LOCAL_OOB_DATA,
1474 if (!(hdev->features[6] & LMP_SIMPLE_PAIR)) {
1475 err = cmd_status(sk, index, MGMT_OP_READ_LOCAL_OOB_DATA,
1480 if (mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, index)) {
1481 err = cmd_status(sk, index, MGMT_OP_READ_LOCAL_OOB_DATA, EBUSY);
1485 cmd = mgmt_pending_add(sk, MGMT_OP_READ_LOCAL_OOB_DATA, index, NULL, 0);
1491 err = hci_send_cmd(hdev, HCI_OP_READ_LOCAL_OOB_DATA, 0, NULL);
1493 mgmt_pending_remove(cmd);
1496 hci_dev_unlock_bh(hdev);
1502 static int add_remote_oob_data(struct sock *sk, u16 index, unsigned char *data,
1505 struct hci_dev *hdev;
1506 struct mgmt_cp_add_remote_oob_data *cp = (void *) data;
1509 BT_DBG("hci%u ", index);
1511 if (len != sizeof(*cp))
1512 return cmd_status(sk, index, MGMT_OP_ADD_REMOTE_OOB_DATA,
1515 hdev = hci_dev_get(index);
1517 return cmd_status(sk, index, MGMT_OP_ADD_REMOTE_OOB_DATA,
1520 hci_dev_lock_bh(hdev);
1522 err = hci_add_remote_oob_data(hdev, &cp->bdaddr, cp->hash,
1525 err = cmd_status(sk, index, MGMT_OP_ADD_REMOTE_OOB_DATA, -err);
1527 err = cmd_complete(sk, index, MGMT_OP_ADD_REMOTE_OOB_DATA, NULL,
1530 hci_dev_unlock_bh(hdev);
1536 static int remove_remote_oob_data(struct sock *sk, u16 index,
1537 unsigned char *data, u16 len)
1539 struct hci_dev *hdev;
1540 struct mgmt_cp_remove_remote_oob_data *cp = (void *) data;
1543 BT_DBG("hci%u ", index);
1545 if (len != sizeof(*cp))
1546 return cmd_status(sk, index, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
1549 hdev = hci_dev_get(index);
1551 return cmd_status(sk, index, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
1554 hci_dev_lock_bh(hdev);
1556 err = hci_remove_remote_oob_data(hdev, &cp->bdaddr);
1558 err = cmd_status(sk, index, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
1561 err = cmd_complete(sk, index, MGMT_OP_REMOVE_REMOTE_OOB_DATA,
1564 hci_dev_unlock_bh(hdev);
1570 int mgmt_control(struct sock *sk, struct msghdr *msg, size_t msglen)
1573 struct mgmt_hdr *hdr;
1574 u16 opcode, index, len;
1577 BT_DBG("got %zu bytes", msglen);
1579 if (msglen < sizeof(*hdr))
1582 buf = kmalloc(msglen, GFP_ATOMIC);
1586 if (memcpy_fromiovec(buf, msg->msg_iov, msglen)) {
1591 hdr = (struct mgmt_hdr *) buf;
1592 opcode = get_unaligned_le16(&hdr->opcode);
1593 index = get_unaligned_le16(&hdr->index);
1594 len = get_unaligned_le16(&hdr->len);
1596 if (len != msglen - sizeof(*hdr)) {
1602 case MGMT_OP_READ_VERSION:
1603 err = read_version(sk);
1605 case MGMT_OP_READ_INDEX_LIST:
1606 err = read_index_list(sk);
1608 case MGMT_OP_READ_INFO:
1609 err = read_controller_info(sk, index);
1611 case MGMT_OP_SET_POWERED:
1612 err = set_powered(sk, index, buf + sizeof(*hdr), len);
1614 case MGMT_OP_SET_DISCOVERABLE:
1615 err = set_discoverable(sk, index, buf + sizeof(*hdr), len);
1617 case MGMT_OP_SET_CONNECTABLE:
1618 err = set_connectable(sk, index, buf + sizeof(*hdr), len);
1620 case MGMT_OP_SET_PAIRABLE:
1621 err = set_pairable(sk, index, buf + sizeof(*hdr), len);
1623 case MGMT_OP_ADD_UUID:
1624 err = add_uuid(sk, index, buf + sizeof(*hdr), len);
1626 case MGMT_OP_REMOVE_UUID:
1627 err = remove_uuid(sk, index, buf + sizeof(*hdr), len);
1629 case MGMT_OP_SET_DEV_CLASS:
1630 err = set_dev_class(sk, index, buf + sizeof(*hdr), len);
1632 case MGMT_OP_SET_SERVICE_CACHE:
1633 err = set_service_cache(sk, index, buf + sizeof(*hdr), len);
1635 case MGMT_OP_LOAD_KEYS:
1636 err = load_keys(sk, index, buf + sizeof(*hdr), len);
1638 case MGMT_OP_REMOVE_KEY:
1639 err = remove_key(sk, index, buf + sizeof(*hdr), len);
1641 case MGMT_OP_DISCONNECT:
1642 err = disconnect(sk, index, buf + sizeof(*hdr), len);
1644 case MGMT_OP_GET_CONNECTIONS:
1645 err = get_connections(sk, index);
1647 case MGMT_OP_PIN_CODE_REPLY:
1648 err = pin_code_reply(sk, index, buf + sizeof(*hdr), len);
1650 case MGMT_OP_PIN_CODE_NEG_REPLY:
1651 err = pin_code_neg_reply(sk, index, buf + sizeof(*hdr), len);
1653 case MGMT_OP_SET_IO_CAPABILITY:
1654 err = set_io_capability(sk, index, buf + sizeof(*hdr), len);
1656 case MGMT_OP_PAIR_DEVICE:
1657 err = pair_device(sk, index, buf + sizeof(*hdr), len);
1659 case MGMT_OP_USER_CONFIRM_REPLY:
1660 err = user_confirm_reply(sk, index, buf + sizeof(*hdr), len, 1);
1662 case MGMT_OP_USER_CONFIRM_NEG_REPLY:
1663 err = user_confirm_reply(sk, index, buf + sizeof(*hdr), len, 0);
1665 case MGMT_OP_SET_LOCAL_NAME:
1666 err = set_local_name(sk, index, buf + sizeof(*hdr), len);
1668 case MGMT_OP_READ_LOCAL_OOB_DATA:
1669 err = read_local_oob_data(sk, index);
1671 case MGMT_OP_ADD_REMOTE_OOB_DATA:
1672 err = add_remote_oob_data(sk, index, buf + sizeof(*hdr), len);
1674 case MGMT_OP_REMOVE_REMOTE_OOB_DATA:
1675 err = remove_remote_oob_data(sk, index, buf + sizeof(*hdr),
1680 BT_DBG("Unknown op %u", opcode);
1681 err = cmd_status(sk, index, opcode, 0x01);
1695 int mgmt_index_added(u16 index)
1697 return mgmt_event(MGMT_EV_INDEX_ADDED, index, NULL, 0, NULL);
1700 int mgmt_index_removed(u16 index)
1702 return mgmt_event(MGMT_EV_INDEX_REMOVED, index, NULL, 0, NULL);
1710 static void mode_rsp(struct pending_cmd *cmd, void *data)
1712 struct mgmt_mode *cp = cmd->param;
1713 struct cmd_lookup *match = data;
1715 if (cp->val != match->val)
1718 send_mode_rsp(cmd->sk, cmd->opcode, cmd->index, cp->val);
1720 list_del(&cmd->list);
1722 if (match->sk == NULL) {
1723 match->sk = cmd->sk;
1724 sock_hold(match->sk);
1727 mgmt_pending_free(cmd);
1730 int mgmt_powered(u16 index, u8 powered)
1732 struct mgmt_mode ev;
1733 struct cmd_lookup match = { powered, NULL };
1736 mgmt_pending_foreach(MGMT_OP_SET_POWERED, index, mode_rsp, &match);
1740 ret = mgmt_event(MGMT_EV_POWERED, index, &ev, sizeof(ev), match.sk);
1748 int mgmt_discoverable(u16 index, u8 discoverable)
1750 struct mgmt_mode ev;
1751 struct cmd_lookup match = { discoverable, NULL };
1754 mgmt_pending_foreach(MGMT_OP_SET_DISCOVERABLE, index, mode_rsp, &match);
1756 ev.val = discoverable;
1758 ret = mgmt_event(MGMT_EV_DISCOVERABLE, index, &ev, sizeof(ev),
1767 int mgmt_connectable(u16 index, u8 connectable)
1769 struct mgmt_mode ev;
1770 struct cmd_lookup match = { connectable, NULL };
1773 mgmt_pending_foreach(MGMT_OP_SET_CONNECTABLE, index, mode_rsp, &match);
1775 ev.val = connectable;
1777 ret = mgmt_event(MGMT_EV_CONNECTABLE, index, &ev, sizeof(ev), match.sk);
1785 int mgmt_new_key(u16 index, struct link_key *key, u8 old_key_type)
1787 struct mgmt_ev_new_key ev;
1789 memset(&ev, 0, sizeof(ev));
1791 bacpy(&ev.key.bdaddr, &key->bdaddr);
1792 ev.key.type = key->type;
1793 memcpy(ev.key.val, key->val, 16);
1794 ev.key.pin_len = key->pin_len;
1795 ev.old_key_type = old_key_type;
1797 return mgmt_event(MGMT_EV_NEW_KEY, index, &ev, sizeof(ev), NULL);
1800 int mgmt_connected(u16 index, bdaddr_t *bdaddr)
1802 struct mgmt_ev_connected ev;
1804 bacpy(&ev.bdaddr, bdaddr);
1806 return mgmt_event(MGMT_EV_CONNECTED, index, &ev, sizeof(ev), NULL);
1809 static void disconnect_rsp(struct pending_cmd *cmd, void *data)
1811 struct mgmt_cp_disconnect *cp = cmd->param;
1812 struct sock **sk = data;
1813 struct mgmt_rp_disconnect rp;
1815 bacpy(&rp.bdaddr, &cp->bdaddr);
1817 cmd_complete(cmd->sk, cmd->index, MGMT_OP_DISCONNECT, &rp, sizeof(rp));
1822 mgmt_pending_remove(cmd);
1825 int mgmt_disconnected(u16 index, bdaddr_t *bdaddr)
1827 struct mgmt_ev_disconnected ev;
1828 struct sock *sk = NULL;
1831 mgmt_pending_foreach(MGMT_OP_DISCONNECT, index, disconnect_rsp, &sk);
1833 bacpy(&ev.bdaddr, bdaddr);
1835 err = mgmt_event(MGMT_EV_DISCONNECTED, index, &ev, sizeof(ev), sk);
1843 int mgmt_disconnect_failed(u16 index)
1845 struct pending_cmd *cmd;
1848 cmd = mgmt_pending_find(MGMT_OP_DISCONNECT, index);
1852 err = cmd_status(cmd->sk, index, MGMT_OP_DISCONNECT, EIO);
1854 mgmt_pending_remove(cmd);
1859 int mgmt_connect_failed(u16 index, bdaddr_t *bdaddr, u8 status)
1861 struct mgmt_ev_connect_failed ev;
1863 bacpy(&ev.bdaddr, bdaddr);
1866 return mgmt_event(MGMT_EV_CONNECT_FAILED, index, &ev, sizeof(ev), NULL);
1869 int mgmt_pin_code_request(u16 index, bdaddr_t *bdaddr)
1871 struct mgmt_ev_pin_code_request ev;
1873 bacpy(&ev.bdaddr, bdaddr);
1875 return mgmt_event(MGMT_EV_PIN_CODE_REQUEST, index, &ev, sizeof(ev),
1879 int mgmt_pin_code_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status)
1881 struct pending_cmd *cmd;
1882 struct mgmt_rp_pin_code_reply rp;
1885 cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_REPLY, index);
1889 bacpy(&rp.bdaddr, bdaddr);
1892 err = cmd_complete(cmd->sk, index, MGMT_OP_PIN_CODE_REPLY, &rp,
1895 mgmt_pending_remove(cmd);
1900 int mgmt_pin_code_neg_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status)
1902 struct pending_cmd *cmd;
1903 struct mgmt_rp_pin_code_reply rp;
1906 cmd = mgmt_pending_find(MGMT_OP_PIN_CODE_NEG_REPLY, index);
1910 bacpy(&rp.bdaddr, bdaddr);
1913 err = cmd_complete(cmd->sk, index, MGMT_OP_PIN_CODE_NEG_REPLY, &rp,
1916 mgmt_pending_remove(cmd);
1921 int mgmt_user_confirm_request(u16 index, bdaddr_t *bdaddr, __le32 value)
1923 struct mgmt_ev_user_confirm_request ev;
1925 BT_DBG("hci%u", index);
1927 bacpy(&ev.bdaddr, bdaddr);
1928 put_unaligned_le32(value, &ev.value);
1930 return mgmt_event(MGMT_EV_USER_CONFIRM_REQUEST, index, &ev, sizeof(ev),
1934 static int confirm_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status,
1937 struct pending_cmd *cmd;
1938 struct mgmt_rp_user_confirm_reply rp;
1941 cmd = mgmt_pending_find(opcode, index);
1945 bacpy(&rp.bdaddr, bdaddr);
1947 err = cmd_complete(cmd->sk, index, opcode, &rp, sizeof(rp));
1949 mgmt_pending_remove(cmd);
1954 int mgmt_user_confirm_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status)
1956 return confirm_reply_complete(index, bdaddr, status,
1957 MGMT_OP_USER_CONFIRM_REPLY);
1960 int mgmt_user_confirm_neg_reply_complete(u16 index, bdaddr_t *bdaddr, u8 status)
1962 return confirm_reply_complete(index, bdaddr, status,
1963 MGMT_OP_USER_CONFIRM_NEG_REPLY);
1966 int mgmt_auth_failed(u16 index, bdaddr_t *bdaddr, u8 status)
1968 struct mgmt_ev_auth_failed ev;
1970 bacpy(&ev.bdaddr, bdaddr);
1973 return mgmt_event(MGMT_EV_AUTH_FAILED, index, &ev, sizeof(ev), NULL);
1976 int mgmt_set_local_name_complete(u16 index, u8 *name, u8 status)
1978 struct pending_cmd *cmd;
1979 struct hci_dev *hdev;
1980 struct mgmt_cp_set_local_name ev;
1983 memset(&ev, 0, sizeof(ev));
1984 memcpy(ev.name, name, HCI_MAX_NAME_LENGTH);
1986 cmd = mgmt_pending_find(MGMT_OP_SET_LOCAL_NAME, index);
1991 err = cmd_status(cmd->sk, index, MGMT_OP_SET_LOCAL_NAME, EIO);
1995 hdev = hci_dev_get(index);
1997 hci_dev_lock_bh(hdev);
1999 hci_dev_unlock_bh(hdev);
2003 err = cmd_complete(cmd->sk, index, MGMT_OP_SET_LOCAL_NAME, &ev,
2009 err = mgmt_event(MGMT_EV_LOCAL_NAME_CHANGED, index, &ev, sizeof(ev),
2010 cmd ? cmd->sk : NULL);
2014 mgmt_pending_remove(cmd);
2018 int mgmt_read_local_oob_data_reply_complete(u16 index, u8 *hash, u8 *randomizer,
2021 struct pending_cmd *cmd;
2024 BT_DBG("hci%u status %u", index, status);
2026 cmd = mgmt_pending_find(MGMT_OP_READ_LOCAL_OOB_DATA, index);
2031 err = cmd_status(cmd->sk, index, MGMT_OP_READ_LOCAL_OOB_DATA,
2034 struct mgmt_rp_read_local_oob_data rp;
2036 memcpy(rp.hash, hash, sizeof(rp.hash));
2037 memcpy(rp.randomizer, randomizer, sizeof(rp.randomizer));
2039 err = cmd_complete(cmd->sk, index, MGMT_OP_READ_LOCAL_OOB_DATA,
2043 mgmt_pending_remove(cmd);