linux/net/bluetooth/hci_event.c
<<
>>
Prefs
   1/*
   2   BlueZ - Bluetooth protocol stack for Linux
   3   Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
   4
   5   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
   6
   7   This program is free software; you can redistribute it and/or modify
   8   it under the terms of the GNU General Public License version 2 as
   9   published by the Free Software Foundation;
  10
  11   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  12   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  13   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
  14   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
  15   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
  16   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  17   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  18   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  19
  20   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
  21   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
  22   SOFTWARE IS DISCLAIMED.
  23*/
  24
  25/* Bluetooth HCI event handling. */
  26
  27#include <asm/unaligned.h>
  28
  29#include <net/bluetooth/bluetooth.h>
  30#include <net/bluetooth/hci_core.h>
  31#include <net/bluetooth/mgmt.h>
  32
  33#include "hci_request.h"
  34#include "hci_debugfs.h"
  35#include "a2mp.h"
  36#include "amp.h"
  37#include "smp.h"
  38
  39#define ZERO_KEY "\x00\x00\x00\x00\x00\x00\x00\x00" \
  40                 "\x00\x00\x00\x00\x00\x00\x00\x00"
  41
  42/* Handle HCI Event packets */
  43
  44static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
  45{
  46        __u8 status = *((__u8 *) skb->data);
  47
  48        BT_DBG("%s status 0x%2.2x", hdev->name, status);
  49
  50        if (status)
  51                return;
  52
  53        clear_bit(HCI_INQUIRY, &hdev->flags);
  54        smp_mb__after_atomic(); /* wake_up_bit advises about this barrier */
  55        wake_up_bit(&hdev->flags, HCI_INQUIRY);
  56
  57        hci_dev_lock(hdev);
  58        /* Set discovery state to stopped if we're not doing LE active
  59         * scanning.
  60         */
  61        if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
  62            hdev->le_scan_type != LE_SCAN_ACTIVE)
  63                hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
  64        hci_dev_unlock(hdev);
  65
  66        hci_conn_check_pending(hdev);
  67}
  68
  69static void hci_cc_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
  70{
  71        __u8 status = *((__u8 *) skb->data);
  72
  73        BT_DBG("%s status 0x%2.2x", hdev->name, status);
  74
  75        if (status)
  76                return;
  77
  78        hci_dev_set_flag(hdev, HCI_PERIODIC_INQ);
  79}
  80
  81static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
  82{
  83        __u8 status = *((__u8 *) skb->data);
  84
  85        BT_DBG("%s status 0x%2.2x", hdev->name, status);
  86
  87        if (status)
  88                return;
  89
  90        hci_dev_clear_flag(hdev, HCI_PERIODIC_INQ);
  91
  92        hci_conn_check_pending(hdev);
  93}
  94
  95static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev,
  96                                          struct sk_buff *skb)
  97{
  98        BT_DBG("%s", hdev->name);
  99}
 100
 101static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
 102{
 103        struct hci_rp_role_discovery *rp = (void *) skb->data;
 104        struct hci_conn *conn;
 105
 106        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 107
 108        if (rp->status)
 109                return;
 110
 111        hci_dev_lock(hdev);
 112
 113        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
 114        if (conn)
 115                conn->role = rp->role;
 116
 117        hci_dev_unlock(hdev);
 118}
 119
 120static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
 121{
 122        struct hci_rp_read_link_policy *rp = (void *) skb->data;
 123        struct hci_conn *conn;
 124
 125        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 126
 127        if (rp->status)
 128                return;
 129
 130        hci_dev_lock(hdev);
 131
 132        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
 133        if (conn)
 134                conn->link_policy = __le16_to_cpu(rp->policy);
 135
 136        hci_dev_unlock(hdev);
 137}
 138
 139static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
 140{
 141        struct hci_rp_write_link_policy *rp = (void *) skb->data;
 142        struct hci_conn *conn;
 143        void *sent;
 144
 145        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 146
 147        if (rp->status)
 148                return;
 149
 150        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
 151        if (!sent)
 152                return;
 153
 154        hci_dev_lock(hdev);
 155
 156        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
 157        if (conn)
 158                conn->link_policy = get_unaligned_le16(sent + 2);
 159
 160        hci_dev_unlock(hdev);
 161}
 162
 163static void hci_cc_read_def_link_policy(struct hci_dev *hdev,
 164                                        struct sk_buff *skb)
 165{
 166        struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
 167
 168        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 169
 170        if (rp->status)
 171                return;
 172
 173        hdev->link_policy = __le16_to_cpu(rp->policy);
 174}
 175
 176static void hci_cc_write_def_link_policy(struct hci_dev *hdev,
 177                                         struct sk_buff *skb)
 178{
 179        __u8 status = *((__u8 *) skb->data);
 180        void *sent;
 181
 182        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 183
 184        if (status)
 185                return;
 186
 187        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
 188        if (!sent)
 189                return;
 190
 191        hdev->link_policy = get_unaligned_le16(sent);
 192}
 193
 194static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
 195{
 196        __u8 status = *((__u8 *) skb->data);
 197
 198        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 199
 200        clear_bit(HCI_RESET, &hdev->flags);
 201
 202        if (status)
 203                return;
 204
 205        /* Reset all non-persistent flags */
 206        hci_dev_clear_volatile_flags(hdev);
 207
 208        hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
 209
 210        hdev->inq_tx_power = HCI_TX_POWER_INVALID;
 211        hdev->adv_tx_power = HCI_TX_POWER_INVALID;
 212
 213        memset(hdev->adv_data, 0, sizeof(hdev->adv_data));
 214        hdev->adv_data_len = 0;
 215
 216        memset(hdev->scan_rsp_data, 0, sizeof(hdev->scan_rsp_data));
 217        hdev->scan_rsp_data_len = 0;
 218
 219        hdev->le_scan_type = LE_SCAN_PASSIVE;
 220
 221        hdev->ssp_debug_mode = 0;
 222
 223        hci_bdaddr_list_clear(&hdev->le_white_list);
 224}
 225
 226static void hci_cc_read_stored_link_key(struct hci_dev *hdev,
 227                                        struct sk_buff *skb)
 228{
 229        struct hci_rp_read_stored_link_key *rp = (void *)skb->data;
 230        struct hci_cp_read_stored_link_key *sent;
 231
 232        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 233
 234        sent = hci_sent_cmd_data(hdev, HCI_OP_READ_STORED_LINK_KEY);
 235        if (!sent)
 236                return;
 237
 238        if (!rp->status && sent->read_all == 0x01) {
 239                hdev->stored_max_keys = rp->max_keys;
 240                hdev->stored_num_keys = rp->num_keys;
 241        }
 242}
 243
 244static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
 245                                          struct sk_buff *skb)
 246{
 247        struct hci_rp_delete_stored_link_key *rp = (void *)skb->data;
 248
 249        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 250
 251        if (rp->status)
 252                return;
 253
 254        if (rp->num_keys <= hdev->stored_num_keys)
 255                hdev->stored_num_keys -= rp->num_keys;
 256        else
 257                hdev->stored_num_keys = 0;
 258}
 259
 260static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
 261{
 262        __u8 status = *((__u8 *) skb->data);
 263        void *sent;
 264
 265        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 266
 267        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
 268        if (!sent)
 269                return;
 270
 271        hci_dev_lock(hdev);
 272
 273        if (hci_dev_test_flag(hdev, HCI_MGMT))
 274                mgmt_set_local_name_complete(hdev, sent, status);
 275        else if (!status)
 276                memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
 277
 278        hci_dev_unlock(hdev);
 279}
 280
 281static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
 282{
 283        struct hci_rp_read_local_name *rp = (void *) skb->data;
 284
 285        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 286
 287        if (rp->status)
 288                return;
 289
 290        if (hci_dev_test_flag(hdev, HCI_SETUP) ||
 291            hci_dev_test_flag(hdev, HCI_CONFIG))
 292                memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
 293}
 294
 295static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
 296{
 297        __u8 status = *((__u8 *) skb->data);
 298        void *sent;
 299
 300        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 301
 302        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
 303        if (!sent)
 304                return;
 305
 306        hci_dev_lock(hdev);
 307
 308        if (!status) {
 309                __u8 param = *((__u8 *) sent);
 310
 311                if (param == AUTH_ENABLED)
 312                        set_bit(HCI_AUTH, &hdev->flags);
 313                else
 314                        clear_bit(HCI_AUTH, &hdev->flags);
 315        }
 316
 317        if (hci_dev_test_flag(hdev, HCI_MGMT))
 318                mgmt_auth_enable_complete(hdev, status);
 319
 320        hci_dev_unlock(hdev);
 321}
 322
 323static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
 324{
 325        __u8 status = *((__u8 *) skb->data);
 326        __u8 param;
 327        void *sent;
 328
 329        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 330
 331        if (status)
 332                return;
 333
 334        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
 335        if (!sent)
 336                return;
 337
 338        param = *((__u8 *) sent);
 339
 340        if (param)
 341                set_bit(HCI_ENCRYPT, &hdev->flags);
 342        else
 343                clear_bit(HCI_ENCRYPT, &hdev->flags);
 344}
 345
 346static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
 347{
 348        __u8 status = *((__u8 *) skb->data);
 349        __u8 param;
 350        void *sent;
 351
 352        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 353
 354        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
 355        if (!sent)
 356                return;
 357
 358        param = *((__u8 *) sent);
 359
 360        hci_dev_lock(hdev);
 361
 362        if (status) {
 363                hdev->discov_timeout = 0;
 364                goto done;
 365        }
 366
 367        if (param & SCAN_INQUIRY)
 368                set_bit(HCI_ISCAN, &hdev->flags);
 369        else
 370                clear_bit(HCI_ISCAN, &hdev->flags);
 371
 372        if (param & SCAN_PAGE)
 373                set_bit(HCI_PSCAN, &hdev->flags);
 374        else
 375                clear_bit(HCI_PSCAN, &hdev->flags);
 376
 377done:
 378        hci_dev_unlock(hdev);
 379}
 380
 381static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
 382{
 383        struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
 384
 385        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 386
 387        if (rp->status)
 388                return;
 389
 390        memcpy(hdev->dev_class, rp->dev_class, 3);
 391
 392        BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
 393               hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
 394}
 395
 396static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
 397{
 398        __u8 status = *((__u8 *) skb->data);
 399        void *sent;
 400
 401        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 402
 403        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
 404        if (!sent)
 405                return;
 406
 407        hci_dev_lock(hdev);
 408
 409        if (status == 0)
 410                memcpy(hdev->dev_class, sent, 3);
 411
 412        if (hci_dev_test_flag(hdev, HCI_MGMT))
 413                mgmt_set_class_of_dev_complete(hdev, sent, status);
 414
 415        hci_dev_unlock(hdev);
 416}
 417
 418static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
 419{
 420        struct hci_rp_read_voice_setting *rp = (void *) skb->data;
 421        __u16 setting;
 422
 423        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 424
 425        if (rp->status)
 426                return;
 427
 428        setting = __le16_to_cpu(rp->voice_setting);
 429
 430        if (hdev->voice_setting == setting)
 431                return;
 432
 433        hdev->voice_setting = setting;
 434
 435        BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
 436
 437        if (hdev->notify)
 438                hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
 439}
 440
 441static void hci_cc_write_voice_setting(struct hci_dev *hdev,
 442                                       struct sk_buff *skb)
 443{
 444        __u8 status = *((__u8 *) skb->data);
 445        __u16 setting;
 446        void *sent;
 447
 448        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 449
 450        if (status)
 451                return;
 452
 453        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
 454        if (!sent)
 455                return;
 456
 457        setting = get_unaligned_le16(sent);
 458
 459        if (hdev->voice_setting == setting)
 460                return;
 461
 462        hdev->voice_setting = setting;
 463
 464        BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
 465
 466        if (hdev->notify)
 467                hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
 468}
 469
 470static void hci_cc_read_num_supported_iac(struct hci_dev *hdev,
 471                                          struct sk_buff *skb)
 472{
 473        struct hci_rp_read_num_supported_iac *rp = (void *) skb->data;
 474
 475        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 476
 477        if (rp->status)
 478                return;
 479
 480        hdev->num_iac = rp->num_iac;
 481
 482        BT_DBG("%s num iac %d", hdev->name, hdev->num_iac);
 483}
 484
 485static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
 486{
 487        __u8 status = *((__u8 *) skb->data);
 488        struct hci_cp_write_ssp_mode *sent;
 489
 490        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 491
 492        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
 493        if (!sent)
 494                return;
 495
 496        hci_dev_lock(hdev);
 497
 498        if (!status) {
 499                if (sent->mode)
 500                        hdev->features[1][0] |= LMP_HOST_SSP;
 501                else
 502                        hdev->features[1][0] &= ~LMP_HOST_SSP;
 503        }
 504
 505        if (hci_dev_test_flag(hdev, HCI_MGMT))
 506                mgmt_ssp_enable_complete(hdev, sent->mode, status);
 507        else if (!status) {
 508                if (sent->mode)
 509                        hci_dev_set_flag(hdev, HCI_SSP_ENABLED);
 510                else
 511                        hci_dev_clear_flag(hdev, HCI_SSP_ENABLED);
 512        }
 513
 514        hci_dev_unlock(hdev);
 515}
 516
 517static void hci_cc_write_sc_support(struct hci_dev *hdev, struct sk_buff *skb)
 518{
 519        u8 status = *((u8 *) skb->data);
 520        struct hci_cp_write_sc_support *sent;
 521
 522        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 523
 524        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SC_SUPPORT);
 525        if (!sent)
 526                return;
 527
 528        hci_dev_lock(hdev);
 529
 530        if (!status) {
 531                if (sent->support)
 532                        hdev->features[1][0] |= LMP_HOST_SC;
 533                else
 534                        hdev->features[1][0] &= ~LMP_HOST_SC;
 535        }
 536
 537        if (!hci_dev_test_flag(hdev, HCI_MGMT) && !status) {
 538                if (sent->support)
 539                        hci_dev_set_flag(hdev, HCI_SC_ENABLED);
 540                else
 541                        hci_dev_clear_flag(hdev, HCI_SC_ENABLED);
 542        }
 543
 544        hci_dev_unlock(hdev);
 545}
 546
 547static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
 548{
 549        struct hci_rp_read_local_version *rp = (void *) skb->data;
 550
 551        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 552
 553        if (rp->status)
 554                return;
 555
 556        if (hci_dev_test_flag(hdev, HCI_SETUP) ||
 557            hci_dev_test_flag(hdev, HCI_CONFIG)) {
 558                hdev->hci_ver = rp->hci_ver;
 559                hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
 560                hdev->lmp_ver = rp->lmp_ver;
 561                hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
 562                hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
 563        }
 564}
 565
 566static void hci_cc_read_local_commands(struct hci_dev *hdev,
 567                                       struct sk_buff *skb)
 568{
 569        struct hci_rp_read_local_commands *rp = (void *) skb->data;
 570
 571        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 572
 573        if (rp->status)
 574                return;
 575
 576        if (hci_dev_test_flag(hdev, HCI_SETUP) ||
 577            hci_dev_test_flag(hdev, HCI_CONFIG))
 578                memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
 579}
 580
 581static void hci_cc_read_local_features(struct hci_dev *hdev,
 582                                       struct sk_buff *skb)
 583{
 584        struct hci_rp_read_local_features *rp = (void *) skb->data;
 585
 586        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 587
 588        if (rp->status)
 589                return;
 590
 591        memcpy(hdev->features, rp->features, 8);
 592
 593        /* Adjust default settings according to features
 594         * supported by device. */
 595
 596        if (hdev->features[0][0] & LMP_3SLOT)
 597                hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
 598
 599        if (hdev->features[0][0] & LMP_5SLOT)
 600                hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
 601
 602        if (hdev->features[0][1] & LMP_HV2) {
 603                hdev->pkt_type  |= (HCI_HV2);
 604                hdev->esco_type |= (ESCO_HV2);
 605        }
 606
 607        if (hdev->features[0][1] & LMP_HV3) {
 608                hdev->pkt_type  |= (HCI_HV3);
 609                hdev->esco_type |= (ESCO_HV3);
 610        }
 611
 612        if (lmp_esco_capable(hdev))
 613                hdev->esco_type |= (ESCO_EV3);
 614
 615        if (hdev->features[0][4] & LMP_EV4)
 616                hdev->esco_type |= (ESCO_EV4);
 617
 618        if (hdev->features[0][4] & LMP_EV5)
 619                hdev->esco_type |= (ESCO_EV5);
 620
 621        if (hdev->features[0][5] & LMP_EDR_ESCO_2M)
 622                hdev->esco_type |= (ESCO_2EV3);
 623
 624        if (hdev->features[0][5] & LMP_EDR_ESCO_3M)
 625                hdev->esco_type |= (ESCO_3EV3);
 626
 627        if (hdev->features[0][5] & LMP_EDR_3S_ESCO)
 628                hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
 629}
 630
 631static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
 632                                           struct sk_buff *skb)
 633{
 634        struct hci_rp_read_local_ext_features *rp = (void *) skb->data;
 635
 636        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 637
 638        if (rp->status)
 639                return;
 640
 641        if (hdev->max_page < rp->max_page)
 642                hdev->max_page = rp->max_page;
 643
 644        if (rp->page < HCI_MAX_PAGES)
 645                memcpy(hdev->features[rp->page], rp->features, 8);
 646}
 647
 648static void hci_cc_read_flow_control_mode(struct hci_dev *hdev,
 649                                          struct sk_buff *skb)
 650{
 651        struct hci_rp_read_flow_control_mode *rp = (void *) skb->data;
 652
 653        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 654
 655        if (rp->status)
 656                return;
 657
 658        hdev->flow_ctl_mode = rp->mode;
 659}
 660
 661static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
 662{
 663        struct hci_rp_read_buffer_size *rp = (void *) skb->data;
 664
 665        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 666
 667        if (rp->status)
 668                return;
 669
 670        hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
 671        hdev->sco_mtu  = rp->sco_mtu;
 672        hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
 673        hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
 674
 675        if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
 676                hdev->sco_mtu  = 64;
 677                hdev->sco_pkts = 8;
 678        }
 679
 680        hdev->acl_cnt = hdev->acl_pkts;
 681        hdev->sco_cnt = hdev->sco_pkts;
 682
 683        BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name, hdev->acl_mtu,
 684               hdev->acl_pkts, hdev->sco_mtu, hdev->sco_pkts);
 685}
 686
 687static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
 688{
 689        struct hci_rp_read_bd_addr *rp = (void *) skb->data;
 690
 691        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 692
 693        if (rp->status)
 694                return;
 695
 696        if (test_bit(HCI_INIT, &hdev->flags))
 697                bacpy(&hdev->bdaddr, &rp->bdaddr);
 698
 699        if (hci_dev_test_flag(hdev, HCI_SETUP))
 700                bacpy(&hdev->setup_addr, &rp->bdaddr);
 701}
 702
 703static void hci_cc_read_page_scan_activity(struct hci_dev *hdev,
 704                                           struct sk_buff *skb)
 705{
 706        struct hci_rp_read_page_scan_activity *rp = (void *) skb->data;
 707
 708        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 709
 710        if (rp->status)
 711                return;
 712
 713        if (test_bit(HCI_INIT, &hdev->flags)) {
 714                hdev->page_scan_interval = __le16_to_cpu(rp->interval);
 715                hdev->page_scan_window = __le16_to_cpu(rp->window);
 716        }
 717}
 718
 719static void hci_cc_write_page_scan_activity(struct hci_dev *hdev,
 720                                            struct sk_buff *skb)
 721{
 722        u8 status = *((u8 *) skb->data);
 723        struct hci_cp_write_page_scan_activity *sent;
 724
 725        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 726
 727        if (status)
 728                return;
 729
 730        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY);
 731        if (!sent)
 732                return;
 733
 734        hdev->page_scan_interval = __le16_to_cpu(sent->interval);
 735        hdev->page_scan_window = __le16_to_cpu(sent->window);
 736}
 737
 738static void hci_cc_read_page_scan_type(struct hci_dev *hdev,
 739                                           struct sk_buff *skb)
 740{
 741        struct hci_rp_read_page_scan_type *rp = (void *) skb->data;
 742
 743        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 744
 745        if (rp->status)
 746                return;
 747
 748        if (test_bit(HCI_INIT, &hdev->flags))
 749                hdev->page_scan_type = rp->type;
 750}
 751
 752static void hci_cc_write_page_scan_type(struct hci_dev *hdev,
 753                                        struct sk_buff *skb)
 754{
 755        u8 status = *((u8 *) skb->data);
 756        u8 *type;
 757
 758        BT_DBG("%s status 0x%2.2x", hdev->name, status);
 759
 760        if (status)
 761                return;
 762
 763        type = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_TYPE);
 764        if (type)
 765                hdev->page_scan_type = *type;
 766}
 767
 768static void hci_cc_read_data_block_size(struct hci_dev *hdev,
 769                                        struct sk_buff *skb)
 770{
 771        struct hci_rp_read_data_block_size *rp = (void *) skb->data;
 772
 773        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 774
 775        if (rp->status)
 776                return;
 777
 778        hdev->block_mtu = __le16_to_cpu(rp->max_acl_len);
 779        hdev->block_len = __le16_to_cpu(rp->block_len);
 780        hdev->num_blocks = __le16_to_cpu(rp->num_blocks);
 781
 782        hdev->block_cnt = hdev->num_blocks;
 783
 784        BT_DBG("%s blk mtu %d cnt %d len %d", hdev->name, hdev->block_mtu,
 785               hdev->block_cnt, hdev->block_len);
 786}
 787
 788static void hci_cc_read_clock(struct hci_dev *hdev, struct sk_buff *skb)
 789{
 790        struct hci_rp_read_clock *rp = (void *) skb->data;
 791        struct hci_cp_read_clock *cp;
 792        struct hci_conn *conn;
 793
 794        BT_DBG("%s", hdev->name);
 795
 796        if (skb->len < sizeof(*rp))
 797                return;
 798
 799        if (rp->status)
 800                return;
 801
 802        hci_dev_lock(hdev);
 803
 804        cp = hci_sent_cmd_data(hdev, HCI_OP_READ_CLOCK);
 805        if (!cp)
 806                goto unlock;
 807
 808        if (cp->which == 0x00) {
 809                hdev->clock = le32_to_cpu(rp->clock);
 810                goto unlock;
 811        }
 812
 813        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
 814        if (conn) {
 815                conn->clock = le32_to_cpu(rp->clock);
 816                conn->clock_accuracy = le16_to_cpu(rp->accuracy);
 817        }
 818
 819unlock:
 820        hci_dev_unlock(hdev);
 821}
 822
 823static void hci_cc_read_local_amp_info(struct hci_dev *hdev,
 824                                       struct sk_buff *skb)
 825{
 826        struct hci_rp_read_local_amp_info *rp = (void *) skb->data;
 827
 828        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 829
 830        if (rp->status)
 831                return;
 832
 833        hdev->amp_status = rp->amp_status;
 834        hdev->amp_total_bw = __le32_to_cpu(rp->total_bw);
 835        hdev->amp_max_bw = __le32_to_cpu(rp->max_bw);
 836        hdev->amp_min_latency = __le32_to_cpu(rp->min_latency);
 837        hdev->amp_max_pdu = __le32_to_cpu(rp->max_pdu);
 838        hdev->amp_type = rp->amp_type;
 839        hdev->amp_pal_cap = __le16_to_cpu(rp->pal_cap);
 840        hdev->amp_assoc_size = __le16_to_cpu(rp->max_assoc_size);
 841        hdev->amp_be_flush_to = __le32_to_cpu(rp->be_flush_to);
 842        hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to);
 843}
 844
 845static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
 846                                         struct sk_buff *skb)
 847{
 848        struct hci_rp_read_inq_rsp_tx_power *rp = (void *) skb->data;
 849
 850        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 851
 852        if (rp->status)
 853                return;
 854
 855        hdev->inq_tx_power = rp->tx_power;
 856}
 857
 858static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
 859{
 860        struct hci_rp_pin_code_reply *rp = (void *) skb->data;
 861        struct hci_cp_pin_code_reply *cp;
 862        struct hci_conn *conn;
 863
 864        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 865
 866        hci_dev_lock(hdev);
 867
 868        if (hci_dev_test_flag(hdev, HCI_MGMT))
 869                mgmt_pin_code_reply_complete(hdev, &rp->bdaddr, rp->status);
 870
 871        if (rp->status)
 872                goto unlock;
 873
 874        cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
 875        if (!cp)
 876                goto unlock;
 877
 878        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
 879        if (conn)
 880                conn->pin_length = cp->pin_len;
 881
 882unlock:
 883        hci_dev_unlock(hdev);
 884}
 885
 886static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
 887{
 888        struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
 889
 890        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 891
 892        hci_dev_lock(hdev);
 893
 894        if (hci_dev_test_flag(hdev, HCI_MGMT))
 895                mgmt_pin_code_neg_reply_complete(hdev, &rp->bdaddr,
 896                                                 rp->status);
 897
 898        hci_dev_unlock(hdev);
 899}
 900
 901static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
 902                                       struct sk_buff *skb)
 903{
 904        struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
 905
 906        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 907
 908        if (rp->status)
 909                return;
 910
 911        hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
 912        hdev->le_pkts = rp->le_max_pkt;
 913
 914        hdev->le_cnt = hdev->le_pkts;
 915
 916        BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
 917}
 918
 919static void hci_cc_le_read_local_features(struct hci_dev *hdev,
 920                                          struct sk_buff *skb)
 921{
 922        struct hci_rp_le_read_local_features *rp = (void *) skb->data;
 923
 924        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 925
 926        if (rp->status)
 927                return;
 928
 929        memcpy(hdev->le_features, rp->features, 8);
 930}
 931
 932static void hci_cc_le_read_adv_tx_power(struct hci_dev *hdev,
 933                                        struct sk_buff *skb)
 934{
 935        struct hci_rp_le_read_adv_tx_power *rp = (void *) skb->data;
 936
 937        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 938
 939        if (rp->status)
 940                return;
 941
 942        hdev->adv_tx_power = rp->tx_power;
 943}
 944
 945static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
 946{
 947        struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
 948
 949        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 950
 951        hci_dev_lock(hdev);
 952
 953        if (hci_dev_test_flag(hdev, HCI_MGMT))
 954                mgmt_user_confirm_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 0,
 955                                                 rp->status);
 956
 957        hci_dev_unlock(hdev);
 958}
 959
 960static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
 961                                          struct sk_buff *skb)
 962{
 963        struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
 964
 965        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 966
 967        hci_dev_lock(hdev);
 968
 969        if (hci_dev_test_flag(hdev, HCI_MGMT))
 970                mgmt_user_confirm_neg_reply_complete(hdev, &rp->bdaddr,
 971                                                     ACL_LINK, 0, rp->status);
 972
 973        hci_dev_unlock(hdev);
 974}
 975
 976static void hci_cc_user_passkey_reply(struct hci_dev *hdev, struct sk_buff *skb)
 977{
 978        struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
 979
 980        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 981
 982        hci_dev_lock(hdev);
 983
 984        if (hci_dev_test_flag(hdev, HCI_MGMT))
 985                mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr, ACL_LINK,
 986                                                 0, rp->status);
 987
 988        hci_dev_unlock(hdev);
 989}
 990
 991static void hci_cc_user_passkey_neg_reply(struct hci_dev *hdev,
 992                                          struct sk_buff *skb)
 993{
 994        struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
 995
 996        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
 997
 998        hci_dev_lock(hdev);
 999
1000        if (hci_dev_test_flag(hdev, HCI_MGMT))
1001                mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr,
1002                                                     ACL_LINK, 0, rp->status);
1003
1004        hci_dev_unlock(hdev);
1005}
1006
1007static void hci_cc_read_local_oob_data(struct hci_dev *hdev,
1008                                       struct sk_buff *skb)
1009{
1010        struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
1011
1012        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1013}
1014
1015static void hci_cc_read_local_oob_ext_data(struct hci_dev *hdev,
1016                                           struct sk_buff *skb)
1017{
1018        struct hci_rp_read_local_oob_ext_data *rp = (void *) skb->data;
1019
1020        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1021}
1022
1023static void hci_cc_le_set_random_addr(struct hci_dev *hdev, struct sk_buff *skb)
1024{
1025        __u8 status = *((__u8 *) skb->data);
1026        bdaddr_t *sent;
1027
1028        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1029
1030        if (status)
1031                return;
1032
1033        sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_RANDOM_ADDR);
1034        if (!sent)
1035                return;
1036
1037        hci_dev_lock(hdev);
1038
1039        bacpy(&hdev->random_addr, sent);
1040
1041        hci_dev_unlock(hdev);
1042}
1043
1044static void hci_cc_le_set_adv_enable(struct hci_dev *hdev, struct sk_buff *skb)
1045{
1046        __u8 *sent, status = *((__u8 *) skb->data);
1047
1048        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1049
1050        if (status)
1051                return;
1052
1053        sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_ENABLE);
1054        if (!sent)
1055                return;
1056
1057        hci_dev_lock(hdev);
1058
1059        /* If we're doing connection initiation as peripheral. Set a
1060         * timeout in case something goes wrong.
1061         */
1062        if (*sent) {
1063                struct hci_conn *conn;
1064
1065                hci_dev_set_flag(hdev, HCI_LE_ADV);
1066
1067                conn = hci_lookup_le_connect(hdev);
1068                if (conn)
1069                        queue_delayed_work(hdev->workqueue,
1070                                           &conn->le_conn_timeout,
1071                                           conn->conn_timeout);
1072        } else {
1073                hci_dev_clear_flag(hdev, HCI_LE_ADV);
1074        }
1075
1076        hci_dev_unlock(hdev);
1077}
1078
1079static void hci_cc_le_set_scan_param(struct hci_dev *hdev, struct sk_buff *skb)
1080{
1081        struct hci_cp_le_set_scan_param *cp;
1082        __u8 status = *((__u8 *) skb->data);
1083
1084        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1085
1086        if (status)
1087                return;
1088
1089        cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_PARAM);
1090        if (!cp)
1091                return;
1092
1093        hci_dev_lock(hdev);
1094
1095        hdev->le_scan_type = cp->type;
1096
1097        hci_dev_unlock(hdev);
1098}
1099
1100static bool has_pending_adv_report(struct hci_dev *hdev)
1101{
1102        struct discovery_state *d = &hdev->discovery;
1103
1104        return bacmp(&d->last_adv_addr, BDADDR_ANY);
1105}
1106
1107static void clear_pending_adv_report(struct hci_dev *hdev)
1108{
1109        struct discovery_state *d = &hdev->discovery;
1110
1111        bacpy(&d->last_adv_addr, BDADDR_ANY);
1112        d->last_adv_data_len = 0;
1113}
1114
1115static void store_pending_adv_report(struct hci_dev *hdev, bdaddr_t *bdaddr,
1116                                     u8 bdaddr_type, s8 rssi, u32 flags,
1117                                     u8 *data, u8 len)
1118{
1119        struct discovery_state *d = &hdev->discovery;
1120
1121        bacpy(&d->last_adv_addr, bdaddr);
1122        d->last_adv_addr_type = bdaddr_type;
1123        d->last_adv_rssi = rssi;
1124        d->last_adv_flags = flags;
1125        memcpy(d->last_adv_data, data, len);
1126        d->last_adv_data_len = len;
1127}
1128
1129static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
1130                                      struct sk_buff *skb)
1131{
1132        struct hci_cp_le_set_scan_enable *cp;
1133        __u8 status = *((__u8 *) skb->data);
1134
1135        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1136
1137        if (status)
1138                return;
1139
1140        cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
1141        if (!cp)
1142                return;
1143
1144        hci_dev_lock(hdev);
1145
1146        switch (cp->enable) {
1147        case LE_SCAN_ENABLE:
1148                hci_dev_set_flag(hdev, HCI_LE_SCAN);
1149                if (hdev->le_scan_type == LE_SCAN_ACTIVE)
1150                        clear_pending_adv_report(hdev);
1151                break;
1152
1153        case LE_SCAN_DISABLE:
1154                /* We do this here instead of when setting DISCOVERY_STOPPED
1155                 * since the latter would potentially require waiting for
1156                 * inquiry to stop too.
1157                 */
1158                if (has_pending_adv_report(hdev)) {
1159                        struct discovery_state *d = &hdev->discovery;
1160
1161                        mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
1162                                          d->last_adv_addr_type, NULL,
1163                                          d->last_adv_rssi, d->last_adv_flags,
1164                                          d->last_adv_data,
1165                                          d->last_adv_data_len, NULL, 0);
1166                }
1167
1168                /* Cancel this timer so that we don't try to disable scanning
1169                 * when it's already disabled.
1170                 */
1171                cancel_delayed_work(&hdev->le_scan_disable);
1172
1173                hci_dev_clear_flag(hdev, HCI_LE_SCAN);
1174
1175                /* The HCI_LE_SCAN_INTERRUPTED flag indicates that we
1176                 * interrupted scanning due to a connect request. Mark
1177                 * therefore discovery as stopped. If this was not
1178                 * because of a connect request advertising might have
1179                 * been disabled because of active scanning, so
1180                 * re-enable it again if necessary.
1181                 */
1182                if (hci_dev_test_and_clear_flag(hdev, HCI_LE_SCAN_INTERRUPTED))
1183                        hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1184                else if (!hci_dev_test_flag(hdev, HCI_LE_ADV) &&
1185                         hdev->discovery.state == DISCOVERY_FINDING)
1186                        hci_req_reenable_advertising(hdev);
1187
1188                break;
1189
1190        default:
1191                BT_ERR("Used reserved LE_Scan_Enable param %d", cp->enable);
1192                break;
1193        }
1194
1195        hci_dev_unlock(hdev);
1196}
1197
1198static void hci_cc_le_read_white_list_size(struct hci_dev *hdev,
1199                                           struct sk_buff *skb)
1200{
1201        struct hci_rp_le_read_white_list_size *rp = (void *) skb->data;
1202
1203        BT_DBG("%s status 0x%2.2x size %u", hdev->name, rp->status, rp->size);
1204
1205        if (rp->status)
1206                return;
1207
1208        hdev->le_white_list_size = rp->size;
1209}
1210
1211static void hci_cc_le_clear_white_list(struct hci_dev *hdev,
1212                                       struct sk_buff *skb)
1213{
1214        __u8 status = *((__u8 *) skb->data);
1215
1216        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1217
1218        if (status)
1219                return;
1220
1221        hci_bdaddr_list_clear(&hdev->le_white_list);
1222}
1223
1224static void hci_cc_le_add_to_white_list(struct hci_dev *hdev,
1225                                        struct sk_buff *skb)
1226{
1227        struct hci_cp_le_add_to_white_list *sent;
1228        __u8 status = *((__u8 *) skb->data);
1229
1230        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1231
1232        if (status)
1233                return;
1234
1235        sent = hci_sent_cmd_data(hdev, HCI_OP_LE_ADD_TO_WHITE_LIST);
1236        if (!sent)
1237                return;
1238
1239        hci_bdaddr_list_add(&hdev->le_white_list, &sent->bdaddr,
1240                           sent->bdaddr_type);
1241}
1242
1243static void hci_cc_le_del_from_white_list(struct hci_dev *hdev,
1244                                          struct sk_buff *skb)
1245{
1246        struct hci_cp_le_del_from_white_list *sent;
1247        __u8 status = *((__u8 *) skb->data);
1248
1249        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1250
1251        if (status)
1252                return;
1253
1254        sent = hci_sent_cmd_data(hdev, HCI_OP_LE_DEL_FROM_WHITE_LIST);
1255        if (!sent)
1256                return;
1257
1258        hci_bdaddr_list_del(&hdev->le_white_list, &sent->bdaddr,
1259                            sent->bdaddr_type);
1260}
1261
1262static void hci_cc_le_read_supported_states(struct hci_dev *hdev,
1263                                            struct sk_buff *skb)
1264{
1265        struct hci_rp_le_read_supported_states *rp = (void *) skb->data;
1266
1267        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1268
1269        if (rp->status)
1270                return;
1271
1272        memcpy(hdev->le_states, rp->le_states, 8);
1273}
1274
1275static void hci_cc_le_read_def_data_len(struct hci_dev *hdev,
1276                                        struct sk_buff *skb)
1277{
1278        struct hci_rp_le_read_def_data_len *rp = (void *) skb->data;
1279
1280        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1281
1282        if (rp->status)
1283                return;
1284
1285        hdev->le_def_tx_len = le16_to_cpu(rp->tx_len);
1286        hdev->le_def_tx_time = le16_to_cpu(rp->tx_time);
1287}
1288
1289static void hci_cc_le_write_def_data_len(struct hci_dev *hdev,
1290                                         struct sk_buff *skb)
1291{
1292        struct hci_cp_le_write_def_data_len *sent;
1293        __u8 status = *((__u8 *) skb->data);
1294
1295        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1296
1297        if (status)
1298                return;
1299
1300        sent = hci_sent_cmd_data(hdev, HCI_OP_LE_WRITE_DEF_DATA_LEN);
1301        if (!sent)
1302                return;
1303
1304        hdev->le_def_tx_len = le16_to_cpu(sent->tx_len);
1305        hdev->le_def_tx_time = le16_to_cpu(sent->tx_time);
1306}
1307
1308static void hci_cc_le_read_max_data_len(struct hci_dev *hdev,
1309                                        struct sk_buff *skb)
1310{
1311        struct hci_rp_le_read_max_data_len *rp = (void *) skb->data;
1312
1313        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1314
1315        if (rp->status)
1316                return;
1317
1318        hdev->le_max_tx_len = le16_to_cpu(rp->tx_len);
1319        hdev->le_max_tx_time = le16_to_cpu(rp->tx_time);
1320        hdev->le_max_rx_len = le16_to_cpu(rp->rx_len);
1321        hdev->le_max_rx_time = le16_to_cpu(rp->rx_time);
1322}
1323
1324static void hci_cc_write_le_host_supported(struct hci_dev *hdev,
1325                                           struct sk_buff *skb)
1326{
1327        struct hci_cp_write_le_host_supported *sent;
1328        __u8 status = *((__u8 *) skb->data);
1329
1330        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1331
1332        if (status)
1333                return;
1334
1335        sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED);
1336        if (!sent)
1337                return;
1338
1339        hci_dev_lock(hdev);
1340
1341        if (sent->le) {
1342                hdev->features[1][0] |= LMP_HOST_LE;
1343                hci_dev_set_flag(hdev, HCI_LE_ENABLED);
1344        } else {
1345                hdev->features[1][0] &= ~LMP_HOST_LE;
1346                hci_dev_clear_flag(hdev, HCI_LE_ENABLED);
1347                hci_dev_clear_flag(hdev, HCI_ADVERTISING);
1348        }
1349
1350        if (sent->simul)
1351                hdev->features[1][0] |= LMP_HOST_LE_BREDR;
1352        else
1353                hdev->features[1][0] &= ~LMP_HOST_LE_BREDR;
1354
1355        hci_dev_unlock(hdev);
1356}
1357
1358static void hci_cc_set_adv_param(struct hci_dev *hdev, struct sk_buff *skb)
1359{
1360        struct hci_cp_le_set_adv_param *cp;
1361        u8 status = *((u8 *) skb->data);
1362
1363        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1364
1365        if (status)
1366                return;
1367
1368        cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_PARAM);
1369        if (!cp)
1370                return;
1371
1372        hci_dev_lock(hdev);
1373        hdev->adv_addr_type = cp->own_address_type;
1374        hci_dev_unlock(hdev);
1375}
1376
1377static void hci_cc_read_rssi(struct hci_dev *hdev, struct sk_buff *skb)
1378{
1379        struct hci_rp_read_rssi *rp = (void *) skb->data;
1380        struct hci_conn *conn;
1381
1382        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1383
1384        if (rp->status)
1385                return;
1386
1387        hci_dev_lock(hdev);
1388
1389        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
1390        if (conn)
1391                conn->rssi = rp->rssi;
1392
1393        hci_dev_unlock(hdev);
1394}
1395
1396static void hci_cc_read_tx_power(struct hci_dev *hdev, struct sk_buff *skb)
1397{
1398        struct hci_cp_read_tx_power *sent;
1399        struct hci_rp_read_tx_power *rp = (void *) skb->data;
1400        struct hci_conn *conn;
1401
1402        BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1403
1404        if (rp->status)
1405                return;
1406
1407        sent = hci_sent_cmd_data(hdev, HCI_OP_READ_TX_POWER);
1408        if (!sent)
1409                return;
1410
1411        hci_dev_lock(hdev);
1412
1413        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
1414        if (!conn)
1415                goto unlock;
1416
1417        switch (sent->type) {
1418        case 0x00:
1419                conn->tx_power = rp->tx_power;
1420                break;
1421        case 0x01:
1422                conn->max_tx_power = rp->tx_power;
1423                break;
1424        }
1425
1426unlock:
1427        hci_dev_unlock(hdev);
1428}
1429
1430static void hci_cc_write_ssp_debug_mode(struct hci_dev *hdev, struct sk_buff *skb)
1431{
1432        u8 status = *((u8 *) skb->data);
1433        u8 *mode;
1434
1435        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1436
1437        if (status)
1438                return;
1439
1440        mode = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE);
1441        if (mode)
1442                hdev->ssp_debug_mode = *mode;
1443}
1444
1445static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
1446{
1447        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1448
1449        if (status) {
1450                hci_conn_check_pending(hdev);
1451                return;
1452        }
1453
1454        set_bit(HCI_INQUIRY, &hdev->flags);
1455}
1456
1457static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
1458{
1459        struct hci_cp_create_conn *cp;
1460        struct hci_conn *conn;
1461
1462        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1463
1464        cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
1465        if (!cp)
1466                return;
1467
1468        hci_dev_lock(hdev);
1469
1470        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1471
1472        BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn);
1473
1474        if (status) {
1475                if (conn && conn->state == BT_CONNECT) {
1476                        if (status != 0x0c || conn->attempt > 2) {
1477                                conn->state = BT_CLOSED;
1478                                hci_connect_cfm(conn, status);
1479                                hci_conn_del(conn);
1480                        } else
1481                                conn->state = BT_CONNECT2;
1482                }
1483        } else {
1484                if (!conn) {
1485                        conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr,
1486                                            HCI_ROLE_MASTER);
1487                        if (!conn)
1488                                BT_ERR("No memory for new connection");
1489                }
1490        }
1491
1492        hci_dev_unlock(hdev);
1493}
1494
1495static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
1496{
1497        struct hci_cp_add_sco *cp;
1498        struct hci_conn *acl, *sco;
1499        __u16 handle;
1500
1501        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1502
1503        if (!status)
1504                return;
1505
1506        cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
1507        if (!cp)
1508                return;
1509
1510        handle = __le16_to_cpu(cp->handle);
1511
1512        BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1513
1514        hci_dev_lock(hdev);
1515
1516        acl = hci_conn_hash_lookup_handle(hdev, handle);
1517        if (acl) {
1518                sco = acl->link;
1519                if (sco) {
1520                        sco->state = BT_CLOSED;
1521
1522                        hci_connect_cfm(sco, status);
1523                        hci_conn_del(sco);
1524                }
1525        }
1526
1527        hci_dev_unlock(hdev);
1528}
1529
1530static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
1531{
1532        struct hci_cp_auth_requested *cp;
1533        struct hci_conn *conn;
1534
1535        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1536
1537        if (!status)
1538                return;
1539
1540        cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
1541        if (!cp)
1542                return;
1543
1544        hci_dev_lock(hdev);
1545
1546        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1547        if (conn) {
1548                if (conn->state == BT_CONFIG) {
1549                        hci_connect_cfm(conn, status);
1550                        hci_conn_drop(conn);
1551                }
1552        }
1553
1554        hci_dev_unlock(hdev);
1555}
1556
1557static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
1558{
1559        struct hci_cp_set_conn_encrypt *cp;
1560        struct hci_conn *conn;
1561
1562        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1563
1564        if (!status)
1565                return;
1566
1567        cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
1568        if (!cp)
1569                return;
1570
1571        hci_dev_lock(hdev);
1572
1573        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1574        if (conn) {
1575                if (conn->state == BT_CONFIG) {
1576                        hci_connect_cfm(conn, status);
1577                        hci_conn_drop(conn);
1578                }
1579        }
1580
1581        hci_dev_unlock(hdev);
1582}
1583
1584static int hci_outgoing_auth_needed(struct hci_dev *hdev,
1585                                    struct hci_conn *conn)
1586{
1587        if (conn->state != BT_CONFIG || !conn->out)
1588                return 0;
1589
1590        if (conn->pending_sec_level == BT_SECURITY_SDP)
1591                return 0;
1592
1593        /* Only request authentication for SSP connections or non-SSP
1594         * devices with sec_level MEDIUM or HIGH or if MITM protection
1595         * is requested.
1596         */
1597        if (!hci_conn_ssp_enabled(conn) && !(conn->auth_type & 0x01) &&
1598            conn->pending_sec_level != BT_SECURITY_FIPS &&
1599            conn->pending_sec_level != BT_SECURITY_HIGH &&
1600            conn->pending_sec_level != BT_SECURITY_MEDIUM)
1601                return 0;
1602
1603        return 1;
1604}
1605
1606static int hci_resolve_name(struct hci_dev *hdev,
1607                                   struct inquiry_entry *e)
1608{
1609        struct hci_cp_remote_name_req cp;
1610
1611        memset(&cp, 0, sizeof(cp));
1612
1613        bacpy(&cp.bdaddr, &e->data.bdaddr);
1614        cp.pscan_rep_mode = e->data.pscan_rep_mode;
1615        cp.pscan_mode = e->data.pscan_mode;
1616        cp.clock_offset = e->data.clock_offset;
1617
1618        return hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1619}
1620
1621static bool hci_resolve_next_name(struct hci_dev *hdev)
1622{
1623        struct discovery_state *discov = &hdev->discovery;
1624        struct inquiry_entry *e;
1625
1626        if (list_empty(&discov->resolve))
1627                return false;
1628
1629        e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1630        if (!e)
1631                return false;
1632
1633        if (hci_resolve_name(hdev, e) == 0) {
1634                e->name_state = NAME_PENDING;
1635                return true;
1636        }
1637
1638        return false;
1639}
1640
1641static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
1642                                   bdaddr_t *bdaddr, u8 *name, u8 name_len)
1643{
1644        struct discovery_state *discov = &hdev->discovery;
1645        struct inquiry_entry *e;
1646
1647        /* Update the mgmt connected state if necessary. Be careful with
1648         * conn objects that exist but are not (yet) connected however.
1649         * Only those in BT_CONFIG or BT_CONNECTED states can be
1650         * considered connected.
1651         */
1652        if (conn &&
1653            (conn->state == BT_CONFIG || conn->state == BT_CONNECTED) &&
1654            !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
1655                mgmt_device_connected(hdev, conn, 0, name, name_len);
1656
1657        if (discov->state == DISCOVERY_STOPPED)
1658                return;
1659
1660        if (discov->state == DISCOVERY_STOPPING)
1661                goto discov_complete;
1662
1663        if (discov->state != DISCOVERY_RESOLVING)
1664                return;
1665
1666        e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
1667        /* If the device was not found in a list of found devices names of which
1668         * are pending. there is no need to continue resolving a next name as it
1669         * will be done upon receiving another Remote Name Request Complete
1670         * Event */
1671        if (!e)
1672                return;
1673
1674        list_del(&e->list);
1675        if (name) {
1676                e->name_state = NAME_KNOWN;
1677                mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
1678                                 e->data.rssi, name, name_len);
1679        } else {
1680                e->name_state = NAME_NOT_KNOWN;
1681        }
1682
1683        if (hci_resolve_next_name(hdev))
1684                return;
1685
1686discov_complete:
1687        hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1688}
1689
1690static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
1691{
1692        struct hci_cp_remote_name_req *cp;
1693        struct hci_conn *conn;
1694
1695        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1696
1697        /* If successful wait for the name req complete event before
1698         * checking for the need to do authentication */
1699        if (!status)
1700                return;
1701
1702        cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
1703        if (!cp)
1704                return;
1705
1706        hci_dev_lock(hdev);
1707
1708        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1709
1710        if (hci_dev_test_flag(hdev, HCI_MGMT))
1711                hci_check_pending_name(hdev, conn, &cp->bdaddr, NULL, 0);
1712
1713        if (!conn)
1714                goto unlock;
1715
1716        if (!hci_outgoing_auth_needed(hdev, conn))
1717                goto unlock;
1718
1719        if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1720                struct hci_cp_auth_requested auth_cp;
1721
1722                set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
1723
1724                auth_cp.handle = __cpu_to_le16(conn->handle);
1725                hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED,
1726                             sizeof(auth_cp), &auth_cp);
1727        }
1728
1729unlock:
1730        hci_dev_unlock(hdev);
1731}
1732
1733static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
1734{
1735        struct hci_cp_read_remote_features *cp;
1736        struct hci_conn *conn;
1737
1738        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1739
1740        if (!status)
1741                return;
1742
1743        cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
1744        if (!cp)
1745                return;
1746
1747        hci_dev_lock(hdev);
1748
1749        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1750        if (conn) {
1751                if (conn->state == BT_CONFIG) {
1752                        hci_connect_cfm(conn, status);
1753                        hci_conn_drop(conn);
1754                }
1755        }
1756
1757        hci_dev_unlock(hdev);
1758}
1759
1760static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
1761{
1762        struct hci_cp_read_remote_ext_features *cp;
1763        struct hci_conn *conn;
1764
1765        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1766
1767        if (!status)
1768                return;
1769
1770        cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
1771        if (!cp)
1772                return;
1773
1774        hci_dev_lock(hdev);
1775
1776        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1777        if (conn) {
1778                if (conn->state == BT_CONFIG) {
1779                        hci_connect_cfm(conn, status);
1780                        hci_conn_drop(conn);
1781                }
1782        }
1783
1784        hci_dev_unlock(hdev);
1785}
1786
1787static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
1788{
1789        struct hci_cp_setup_sync_conn *cp;
1790        struct hci_conn *acl, *sco;
1791        __u16 handle;
1792
1793        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1794
1795        if (!status)
1796                return;
1797
1798        cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
1799        if (!cp)
1800                return;
1801
1802        handle = __le16_to_cpu(cp->handle);
1803
1804        BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1805
1806        hci_dev_lock(hdev);
1807
1808        acl = hci_conn_hash_lookup_handle(hdev, handle);
1809        if (acl) {
1810                sco = acl->link;
1811                if (sco) {
1812                        sco->state = BT_CLOSED;
1813
1814                        hci_connect_cfm(sco, status);
1815                        hci_conn_del(sco);
1816                }
1817        }
1818
1819        hci_dev_unlock(hdev);
1820}
1821
1822static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
1823{
1824        struct hci_cp_sniff_mode *cp;
1825        struct hci_conn *conn;
1826
1827        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1828
1829        if (!status)
1830                return;
1831
1832        cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
1833        if (!cp)
1834                return;
1835
1836        hci_dev_lock(hdev);
1837
1838        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1839        if (conn) {
1840                clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1841
1842                if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1843                        hci_sco_setup(conn, status);
1844        }
1845
1846        hci_dev_unlock(hdev);
1847}
1848
1849static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
1850{
1851        struct hci_cp_exit_sniff_mode *cp;
1852        struct hci_conn *conn;
1853
1854        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1855
1856        if (!status)
1857                return;
1858
1859        cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
1860        if (!cp)
1861                return;
1862
1863        hci_dev_lock(hdev);
1864
1865        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1866        if (conn) {
1867                clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1868
1869                if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1870                        hci_sco_setup(conn, status);
1871        }
1872
1873        hci_dev_unlock(hdev);
1874}
1875
1876static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
1877{
1878        struct hci_cp_disconnect *cp;
1879        struct hci_conn *conn;
1880
1881        if (!status)
1882                return;
1883
1884        cp = hci_sent_cmd_data(hdev, HCI_OP_DISCONNECT);
1885        if (!cp)
1886                return;
1887
1888        hci_dev_lock(hdev);
1889
1890        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1891        if (conn)
1892                mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
1893                                       conn->dst_type, status);
1894
1895        hci_dev_unlock(hdev);
1896}
1897
1898static void hci_cs_le_create_conn(struct hci_dev *hdev, u8 status)
1899{
1900        struct hci_cp_le_create_conn *cp;
1901        struct hci_conn *conn;
1902
1903        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1904
1905        /* All connection failure handling is taken care of by the
1906         * hci_le_conn_failed function which is triggered by the HCI
1907         * request completion callbacks used for connecting.
1908         */
1909        if (status)
1910                return;
1911
1912        cp = hci_sent_cmd_data(hdev, HCI_OP_LE_CREATE_CONN);
1913        if (!cp)
1914                return;
1915
1916        hci_dev_lock(hdev);
1917
1918        conn = hci_conn_hash_lookup_le(hdev, &cp->peer_addr,
1919                                       cp->peer_addr_type);
1920        if (!conn)
1921                goto unlock;
1922
1923        /* Store the initiator and responder address information which
1924         * is needed for SMP. These values will not change during the
1925         * lifetime of the connection.
1926         */
1927        conn->init_addr_type = cp->own_address_type;
1928        if (cp->own_address_type == ADDR_LE_DEV_RANDOM)
1929                bacpy(&conn->init_addr, &hdev->random_addr);
1930        else
1931                bacpy(&conn->init_addr, &hdev->bdaddr);
1932
1933        conn->resp_addr_type = cp->peer_addr_type;
1934        bacpy(&conn->resp_addr, &cp->peer_addr);
1935
1936        /* We don't want the connection attempt to stick around
1937         * indefinitely since LE doesn't have a page timeout concept
1938         * like BR/EDR. Set a timer for any connection that doesn't use
1939         * the white list for connecting.
1940         */
1941        if (cp->filter_policy == HCI_LE_USE_PEER_ADDR)
1942                queue_delayed_work(conn->hdev->workqueue,
1943                                   &conn->le_conn_timeout,
1944                                   conn->conn_timeout);
1945
1946unlock:
1947        hci_dev_unlock(hdev);
1948}
1949
1950static void hci_cs_le_read_remote_features(struct hci_dev *hdev, u8 status)
1951{
1952        struct hci_cp_le_read_remote_features *cp;
1953        struct hci_conn *conn;
1954
1955        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1956
1957        if (!status)
1958                return;
1959
1960        cp = hci_sent_cmd_data(hdev, HCI_OP_LE_READ_REMOTE_FEATURES);
1961        if (!cp)
1962                return;
1963
1964        hci_dev_lock(hdev);
1965
1966        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1967        if (conn) {
1968                if (conn->state == BT_CONFIG) {
1969                        hci_connect_cfm(conn, status);
1970                        hci_conn_drop(conn);
1971                }
1972        }
1973
1974        hci_dev_unlock(hdev);
1975}
1976
1977static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
1978{
1979        struct hci_cp_le_start_enc *cp;
1980        struct hci_conn *conn;
1981
1982        BT_DBG("%s status 0x%2.2x", hdev->name, status);
1983
1984        if (!status)
1985                return;
1986
1987        hci_dev_lock(hdev);
1988
1989        cp = hci_sent_cmd_data(hdev, HCI_OP_LE_START_ENC);
1990        if (!cp)
1991                goto unlock;
1992
1993        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1994        if (!conn)
1995                goto unlock;
1996
1997        if (conn->state != BT_CONNECTED)
1998                goto unlock;
1999
2000        hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
2001        hci_conn_drop(conn);
2002
2003unlock:
2004        hci_dev_unlock(hdev);
2005}
2006
2007static void hci_cs_switch_role(struct hci_dev *hdev, u8 status)
2008{
2009        struct hci_cp_switch_role *cp;
2010        struct hci_conn *conn;
2011
2012        BT_DBG("%s status 0x%2.2x", hdev->name, status);
2013
2014        if (!status)
2015                return;
2016
2017        cp = hci_sent_cmd_data(hdev, HCI_OP_SWITCH_ROLE);
2018        if (!cp)
2019                return;
2020
2021        hci_dev_lock(hdev);
2022
2023        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
2024        if (conn)
2025                clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
2026
2027        hci_dev_unlock(hdev);
2028}
2029
2030static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2031{
2032        __u8 status = *((__u8 *) skb->data);
2033        struct discovery_state *discov = &hdev->discovery;
2034        struct inquiry_entry *e;
2035
2036        BT_DBG("%s status 0x%2.2x", hdev->name, status);
2037
2038        hci_conn_check_pending(hdev);
2039
2040        if (!test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
2041                return;
2042
2043        smp_mb__after_atomic(); /* wake_up_bit advises about this barrier */
2044        wake_up_bit(&hdev->flags, HCI_INQUIRY);
2045
2046        if (!hci_dev_test_flag(hdev, HCI_MGMT))
2047                return;
2048
2049        hci_dev_lock(hdev);
2050
2051        if (discov->state != DISCOVERY_FINDING)
2052                goto unlock;
2053
2054        if (list_empty(&discov->resolve)) {
2055                /* When BR/EDR inquiry is active and no LE scanning is in
2056                 * progress, then change discovery state to indicate completion.
2057                 *
2058                 * When running LE scanning and BR/EDR inquiry simultaneously
2059                 * and the LE scan already finished, then change the discovery
2060                 * state to indicate completion.
2061                 */
2062                if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
2063                    !test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks))
2064                        hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2065                goto unlock;
2066        }
2067
2068        e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
2069        if (e && hci_resolve_name(hdev, e) == 0) {
2070                e->name_state = NAME_PENDING;
2071                hci_discovery_set_state(hdev, DISCOVERY_RESOLVING);
2072        } else {
2073                /* When BR/EDR inquiry is active and no LE scanning is in
2074                 * progress, then change discovery state to indicate completion.
2075                 *
2076                 * When running LE scanning and BR/EDR inquiry simultaneously
2077                 * and the LE scan already finished, then change the discovery
2078                 * state to indicate completion.
2079                 */
2080                if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
2081                    !test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks))
2082                        hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2083        }
2084
2085unlock:
2086        hci_dev_unlock(hdev);
2087}
2088
2089static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
2090{
2091        struct inquiry_data data;
2092        struct inquiry_info *info = (void *) (skb->data + 1);
2093        int num_rsp = *((__u8 *) skb->data);
2094
2095        BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2096
2097        if (!num_rsp)
2098                return;
2099
2100        if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
2101                return;
2102
2103        hci_dev_lock(hdev);
2104
2105        for (; num_rsp; num_rsp--, info++) {
2106                u32 flags;
2107
2108                bacpy(&data.bdaddr, &info->bdaddr);
2109                data.pscan_rep_mode     = info->pscan_rep_mode;
2110                data.pscan_period_mode  = info->pscan_period_mode;
2111                data.pscan_mode         = info->pscan_mode;
2112                memcpy(data.dev_class, info->dev_class, 3);
2113                data.clock_offset       = info->clock_offset;
2114                data.rssi               = HCI_RSSI_INVALID;
2115                data.ssp_mode           = 0x00;
2116
2117                flags = hci_inquiry_cache_update(hdev, &data, false);
2118
2119                mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2120                                  info->dev_class, HCI_RSSI_INVALID,
2121                                  flags, NULL, 0, NULL, 0);
2122        }
2123
2124        hci_dev_unlock(hdev);
2125}
2126
2127static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2128{
2129        struct hci_ev_conn_complete *ev = (void *) skb->data;
2130        struct hci_conn *conn;
2131
2132        BT_DBG("%s", hdev->name);
2133
2134        hci_dev_lock(hdev);
2135
2136        conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2137        if (!conn) {
2138                if (ev->link_type != SCO_LINK)
2139                        goto unlock;
2140
2141                conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
2142                if (!conn)
2143                        goto unlock;
2144
2145                conn->type = SCO_LINK;
2146        }
2147
2148        if (!ev->status) {
2149                conn->handle = __le16_to_cpu(ev->handle);
2150
2151                if (conn->type == ACL_LINK) {
2152                        conn->state = BT_CONFIG;
2153                        hci_conn_hold(conn);
2154
2155                        if (!conn->out && !hci_conn_ssp_enabled(conn) &&
2156                            !hci_find_link_key(hdev, &ev->bdaddr))
2157                                conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2158                        else
2159                                conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2160                } else
2161                        conn->state = BT_CONNECTED;
2162
2163                hci_debugfs_create_conn(conn);
2164                hci_conn_add_sysfs(conn);
2165
2166                if (test_bit(HCI_AUTH, &hdev->flags))
2167                        set_bit(HCI_CONN_AUTH, &conn->flags);
2168
2169                if (test_bit(HCI_ENCRYPT, &hdev->flags))
2170                        set_bit(HCI_CONN_ENCRYPT, &conn->flags);
2171
2172                /* Get remote features */
2173                if (conn->type == ACL_LINK) {
2174                        struct hci_cp_read_remote_features cp;
2175                        cp.handle = ev->handle;
2176                        hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
2177                                     sizeof(cp), &cp);
2178
2179                        hci_req_update_scan(hdev);
2180                }
2181
2182                /* Set packet type for incoming connection */
2183                if (!conn->out && hdev->hci_ver < BLUETOOTH_VER_2_0) {
2184                        struct hci_cp_change_conn_ptype cp;
2185                        cp.handle = ev->handle;
2186                        cp.pkt_type = cpu_to_le16(conn->pkt_type);
2187                        hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp),
2188                                     &cp);
2189                }
2190        } else {
2191                conn->state = BT_CLOSED;
2192                if (conn->type == ACL_LINK)
2193                        mgmt_connect_failed(hdev, &conn->dst, conn->type,
2194                                            conn->dst_type, ev->status);
2195        }
2196
2197        if (conn->type == ACL_LINK)
2198                hci_sco_setup(conn, ev->status);
2199
2200        if (ev->status) {
2201                hci_connect_cfm(conn, ev->status);
2202                hci_conn_del(conn);
2203        } else if (ev->link_type != ACL_LINK)
2204                hci_connect_cfm(conn, ev->status);
2205
2206unlock:
2207        hci_dev_unlock(hdev);
2208
2209        hci_conn_check_pending(hdev);
2210}
2211
2212static void hci_reject_conn(struct hci_dev *hdev, bdaddr_t *bdaddr)
2213{
2214        struct hci_cp_reject_conn_req cp;
2215
2216        bacpy(&cp.bdaddr, bdaddr);
2217        cp.reason = HCI_ERROR_REJ_BAD_ADDR;
2218        hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
2219}
2220
2221static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2222{
2223        struct hci_ev_conn_request *ev = (void *) skb->data;
2224        int mask = hdev->link_mode;
2225        struct inquiry_entry *ie;
2226        struct hci_conn *conn;
2227        __u8 flags = 0;
2228
2229        BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
2230               ev->link_type);
2231
2232        mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
2233                                      &flags);
2234
2235        if (!(mask & HCI_LM_ACCEPT)) {
2236                hci_reject_conn(hdev, &ev->bdaddr);
2237                return;
2238        }
2239
2240        if (hci_bdaddr_list_lookup(&hdev->blacklist, &ev->bdaddr,
2241                                   BDADDR_BREDR)) {
2242                hci_reject_conn(hdev, &ev->bdaddr);
2243                return;
2244        }
2245
2246        /* Require HCI_CONNECTABLE or a whitelist entry to accept the
2247         * connection. These features are only touched through mgmt so
2248         * only do the checks if HCI_MGMT is set.
2249         */
2250        if (hci_dev_test_flag(hdev, HCI_MGMT) &&
2251            !hci_dev_test_flag(hdev, HCI_CONNECTABLE) &&
2252            !hci_bdaddr_list_lookup(&hdev->whitelist, &ev->bdaddr,
2253                                    BDADDR_BREDR)) {
2254                    hci_reject_conn(hdev, &ev->bdaddr);
2255                    return;
2256        }
2257
2258        /* Connection accepted */
2259
2260        hci_dev_lock(hdev);
2261
2262        ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2263        if (ie)
2264                memcpy(ie->data.dev_class, ev->dev_class, 3);
2265
2266        conn = hci_conn_hash_lookup_ba(hdev, ev->link_type,
2267                        &ev->bdaddr);
2268        if (!conn) {
2269                conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr,
2270                                    HCI_ROLE_SLAVE);
2271                if (!conn) {
2272                        BT_ERR("No memory for new connection");
2273                        hci_dev_unlock(hdev);
2274                        return;
2275                }
2276        }
2277
2278        memcpy(conn->dev_class, ev->dev_class, 3);
2279
2280        hci_dev_unlock(hdev);
2281
2282        if (ev->link_type == ACL_LINK ||
2283            (!(flags & HCI_PROTO_DEFER) && !lmp_esco_capable(hdev))) {
2284                struct hci_cp_accept_conn_req cp;
2285                conn->state = BT_CONNECT;
2286
2287                bacpy(&cp.bdaddr, &ev->bdaddr);
2288
2289                if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2290                        cp.role = 0x00; /* Become master */
2291                else
2292                        cp.role = 0x01; /* Remain slave */
2293
2294                hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
2295        } else if (!(flags & HCI_PROTO_DEFER)) {
2296                struct hci_cp_accept_sync_conn_req cp;
2297                conn->state = BT_CONNECT;
2298
2299                bacpy(&cp.bdaddr, &ev->bdaddr);
2300                cp.pkt_type = cpu_to_le16(conn->pkt_type);
2301
2302                cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
2303                cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
2304                cp.max_latency    = cpu_to_le16(0xffff);
2305                cp.content_format = cpu_to_le16(hdev->voice_setting);
2306                cp.retrans_effort = 0xff;
2307
2308                hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ, sizeof(cp),
2309                             &cp);
2310        } else {
2311                conn->state = BT_CONNECT2;
2312                hci_connect_cfm(conn, 0);
2313        }
2314}
2315
2316static u8 hci_to_mgmt_reason(u8 err)
2317{
2318        switch (err) {
2319        case HCI_ERROR_CONNECTION_TIMEOUT:
2320                return MGMT_DEV_DISCONN_TIMEOUT;
2321        case HCI_ERROR_REMOTE_USER_TERM:
2322        case HCI_ERROR_REMOTE_LOW_RESOURCES:
2323        case HCI_ERROR_REMOTE_POWER_OFF:
2324                return MGMT_DEV_DISCONN_REMOTE;
2325        case HCI_ERROR_LOCAL_HOST_TERM:
2326                return MGMT_DEV_DISCONN_LOCAL_HOST;
2327        default:
2328                return MGMT_DEV_DISCONN_UNKNOWN;
2329        }
2330}
2331
2332static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2333{
2334        struct hci_ev_disconn_complete *ev = (void *) skb->data;
2335        u8 reason;
2336        struct hci_conn_params *params;
2337        struct hci_conn *conn;
2338        bool mgmt_connected;
2339        u8 type;
2340
2341        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2342
2343        hci_dev_lock(hdev);
2344
2345        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2346        if (!conn)
2347                goto unlock;
2348
2349        if (ev->status) {
2350                mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
2351                                       conn->dst_type, ev->status);
2352                goto unlock;
2353        }
2354
2355        conn->state = BT_CLOSED;
2356
2357        mgmt_connected = test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags);
2358
2359        if (test_bit(HCI_CONN_AUTH_FAILURE, &conn->flags))
2360                reason = MGMT_DEV_DISCONN_AUTH_FAILURE;
2361        else
2362                reason = hci_to_mgmt_reason(ev->reason);
2363
2364        mgmt_device_disconnected(hdev, &conn->dst, conn->type, conn->dst_type,
2365                                reason, mgmt_connected);
2366
2367        if (conn->type == ACL_LINK) {
2368                if (test_bit(HCI_CONN_FLUSH_KEY, &conn->flags))
2369                        hci_remove_link_key(hdev, &conn->dst);
2370
2371                hci_req_update_scan(hdev);
2372        }
2373
2374        params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
2375        if (params) {
2376                switch (params->auto_connect) {
2377                case HCI_AUTO_CONN_LINK_LOSS:
2378                        if (ev->reason != HCI_ERROR_CONNECTION_TIMEOUT)
2379                                break;
2380                        /* Fall through */
2381
2382                case HCI_AUTO_CONN_DIRECT:
2383                case HCI_AUTO_CONN_ALWAYS:
2384                        list_del_init(&params->action);
2385                        list_add(&params->action, &hdev->pend_le_conns);
2386                        hci_update_background_scan(hdev);
2387                        break;
2388
2389                default:
2390                        break;
2391                }
2392        }
2393
2394        type = conn->type;
2395
2396        hci_disconn_cfm(conn, ev->reason);
2397        hci_conn_del(conn);
2398
2399        /* Re-enable advertising if necessary, since it might
2400         * have been disabled by the connection. From the
2401         * HCI_LE_Set_Advertise_Enable command description in
2402         * the core specification (v4.0):
2403         * "The Controller shall continue advertising until the Host
2404         * issues an LE_Set_Advertise_Enable command with
2405         * Advertising_Enable set to 0x00 (Advertising is disabled)
2406         * or until a connection is created or until the Advertising
2407         * is timed out due to Directed Advertising."
2408         */
2409        if (type == LE_LINK)
2410                hci_req_reenable_advertising(hdev);
2411
2412unlock:
2413        hci_dev_unlock(hdev);
2414}
2415
2416static void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2417{
2418        struct hci_ev_auth_complete *ev = (void *) skb->data;
2419        struct hci_conn *conn;
2420
2421        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2422
2423        hci_dev_lock(hdev);
2424
2425        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2426        if (!conn)
2427                goto unlock;
2428
2429        if (!ev->status) {
2430                clear_bit(HCI_CONN_AUTH_FAILURE, &conn->flags);
2431
2432                if (!hci_conn_ssp_enabled(conn) &&
2433                    test_bit(HCI_CONN_REAUTH_PEND, &conn->flags)) {
2434                        BT_INFO("re-auth of legacy device is not possible.");
2435                } else {
2436                        set_bit(HCI_CONN_AUTH, &conn->flags);
2437                        conn->sec_level = conn->pending_sec_level;
2438                }
2439        } else {
2440                if (ev->status == HCI_ERROR_PIN_OR_KEY_MISSING)
2441                        set_bit(HCI_CONN_AUTH_FAILURE, &conn->flags);
2442
2443                mgmt_auth_failed(conn, ev->status);
2444        }
2445
2446        clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2447        clear_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
2448
2449        if (conn->state == BT_CONFIG) {
2450                if (!ev->status && hci_conn_ssp_enabled(conn)) {
2451                        struct hci_cp_set_conn_encrypt cp;
2452                        cp.handle  = ev->handle;
2453                        cp.encrypt = 0x01;
2454                        hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2455                                     &cp);
2456                } else {
2457                        conn->state = BT_CONNECTED;
2458                        hci_connect_cfm(conn, ev->status);
2459                        hci_conn_drop(conn);
2460                }
2461        } else {
2462                hci_auth_cfm(conn, ev->status);
2463
2464                hci_conn_hold(conn);
2465                conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2466                hci_conn_drop(conn);
2467        }
2468
2469        if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
2470                if (!ev->status) {
2471                        struct hci_cp_set_conn_encrypt cp;
2472                        cp.handle  = ev->handle;
2473                        cp.encrypt = 0x01;
2474                        hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2475                                     &cp);
2476                } else {
2477                        clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2478                        hci_encrypt_cfm(conn, ev->status, 0x00);
2479                }
2480        }
2481
2482unlock:
2483        hci_dev_unlock(hdev);
2484}
2485
2486static void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
2487{
2488        struct hci_ev_remote_name *ev = (void *) skb->data;
2489        struct hci_conn *conn;
2490
2491        BT_DBG("%s", hdev->name);
2492
2493        hci_conn_check_pending(hdev);
2494
2495        hci_dev_lock(hdev);
2496
2497        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2498
2499        if (!hci_dev_test_flag(hdev, HCI_MGMT))
2500                goto check_auth;
2501
2502        if (ev->status == 0)
2503                hci_check_pending_name(hdev, conn, &ev->bdaddr, ev->name,
2504                                       strnlen(ev->name, HCI_MAX_NAME_LENGTH));
2505        else
2506                hci_check_pending_name(hdev, conn, &ev->bdaddr, NULL, 0);
2507
2508check_auth:
2509        if (!conn)
2510                goto unlock;
2511
2512        if (!hci_outgoing_auth_needed(hdev, conn))
2513                goto unlock;
2514
2515        if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
2516                struct hci_cp_auth_requested cp;
2517
2518                set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
2519
2520                cp.handle = __cpu_to_le16(conn->handle);
2521                hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
2522        }
2523
2524unlock:
2525        hci_dev_unlock(hdev);
2526}
2527
2528static void read_enc_key_size_complete(struct hci_dev *hdev, u8 status,
2529                                       u16 opcode, struct sk_buff *skb)
2530{
2531        const struct hci_rp_read_enc_key_size *rp;
2532        struct hci_conn *conn;
2533        u16 handle;
2534
2535        BT_DBG("%s status 0x%02x", hdev->name, status);
2536
2537        if (!skb || skb->len < sizeof(*rp)) {
2538                BT_ERR("%s invalid HCI Read Encryption Key Size response",
2539                       hdev->name);
2540                return;
2541        }
2542
2543        rp = (void *)skb->data;
2544        handle = le16_to_cpu(rp->handle);
2545
2546        hci_dev_lock(hdev);
2547
2548        conn = hci_conn_hash_lookup_handle(hdev, handle);
2549        if (!conn)
2550                goto unlock;
2551
2552        /* If we fail to read the encryption key size, assume maximum
2553         * (which is the same we do also when this HCI command isn't
2554         * supported.
2555         */
2556        if (rp->status) {
2557                BT_ERR("%s failed to read key size for handle %u", hdev->name,
2558                       handle);
2559                conn->enc_key_size = HCI_LINK_KEY_SIZE;
2560        } else {
2561                conn->enc_key_size = rp->key_size;
2562        }
2563
2564        if (conn->state == BT_CONFIG) {
2565                conn->state = BT_CONNECTED;
2566                hci_connect_cfm(conn, 0);
2567                hci_conn_drop(conn);
2568        } else {
2569                u8 encrypt;
2570
2571                if (!test_bit(HCI_CONN_ENCRYPT, &conn->flags))
2572                        encrypt = 0x00;
2573                else if (test_bit(HCI_CONN_AES_CCM, &conn->flags))
2574                        encrypt = 0x02;
2575                else
2576                        encrypt = 0x01;
2577
2578                hci_encrypt_cfm(conn, 0, encrypt);
2579        }
2580
2581unlock:
2582        hci_dev_unlock(hdev);
2583}
2584
2585static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2586{
2587        struct hci_ev_encrypt_change *ev = (void *) skb->data;
2588        struct hci_conn *conn;
2589
2590        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2591
2592        hci_dev_lock(hdev);
2593
2594        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2595        if (!conn)
2596                goto unlock;
2597
2598        if (!ev->status) {
2599                if (ev->encrypt) {
2600                        /* Encryption implies authentication */
2601                        set_bit(HCI_CONN_AUTH, &conn->flags);
2602                        set_bit(HCI_CONN_ENCRYPT, &conn->flags);
2603                        conn->sec_level = conn->pending_sec_level;
2604
2605                        /* P-256 authentication key implies FIPS */
2606                        if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256)
2607                                set_bit(HCI_CONN_FIPS, &conn->flags);
2608
2609                        if ((conn->type == ACL_LINK && ev->encrypt == 0x02) ||
2610                            conn->type == LE_LINK)
2611                                set_bit(HCI_CONN_AES_CCM, &conn->flags);
2612                } else {
2613                        clear_bit(HCI_CONN_ENCRYPT, &conn->flags);
2614                        clear_bit(HCI_CONN_AES_CCM, &conn->flags);
2615                }
2616        }
2617
2618        /* We should disregard the current RPA and generate a new one
2619         * whenever the encryption procedure fails.
2620         */
2621        if (ev->status && conn->type == LE_LINK)
2622                hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
2623
2624        clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2625
2626        if (ev->status && conn->state == BT_CONNECTED) {
2627                if (ev->status == HCI_ERROR_PIN_OR_KEY_MISSING)
2628                        set_bit(HCI_CONN_AUTH_FAILURE, &conn->flags);
2629
2630                hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
2631                hci_conn_drop(conn);
2632                goto unlock;
2633        }
2634
2635        /* In Secure Connections Only mode, do not allow any connections
2636         * that are not encrypted with AES-CCM using a P-256 authenticated
2637         * combination key.
2638         */
2639        if (hci_dev_test_flag(hdev, HCI_SC_ONLY) &&
2640            (!test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
2641             conn->key_type != HCI_LK_AUTH_COMBINATION_P256)) {
2642                hci_connect_cfm(conn, HCI_ERROR_AUTH_FAILURE);
2643                hci_conn_drop(conn);
2644                goto unlock;
2645        }
2646
2647        /* Try reading the encryption key size for encrypted ACL links */
2648        if (!ev->status && ev->encrypt && conn->type == ACL_LINK) {
2649                struct hci_cp_read_enc_key_size cp;
2650                struct hci_request req;
2651
2652                /* Only send HCI_Read_Encryption_Key_Size if the
2653                 * controller really supports it. If it doesn't, assume
2654                 * the default size (16).
2655                 */
2656                if (!(hdev->commands[20] & 0x10)) {
2657                        conn->enc_key_size = HCI_LINK_KEY_SIZE;
2658                        goto notify;
2659                }
2660
2661                hci_req_init(&req, hdev);
2662
2663                cp.handle = cpu_to_le16(conn->handle);
2664                hci_req_add(&req, HCI_OP_READ_ENC_KEY_SIZE, sizeof(cp), &cp);
2665
2666                if (hci_req_run_skb(&req, read_enc_key_size_complete)) {
2667                        BT_ERR("Sending HCI Read Encryption Key Size failed");
2668                        conn->enc_key_size = HCI_LINK_KEY_SIZE;
2669                        goto notify;
2670                }
2671
2672                goto unlock;
2673        }
2674
2675notify:
2676        if (conn->state == BT_CONFIG) {
2677                if (!ev->status)
2678                        conn->state = BT_CONNECTED;
2679
2680                hci_connect_cfm(conn, ev->status);
2681                hci_conn_drop(conn);
2682        } else
2683                hci_encrypt_cfm(conn, ev->status, ev->encrypt);
2684
2685unlock:
2686        hci_dev_unlock(hdev);
2687}
2688
2689static void hci_change_link_key_complete_evt(struct hci_dev *hdev,
2690                                             struct sk_buff *skb)
2691{
2692        struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
2693        struct hci_conn *conn;
2694
2695        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2696
2697        hci_dev_lock(hdev);
2698
2699        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2700        if (conn) {
2701                if (!ev->status)
2702                        set_bit(HCI_CONN_SECURE, &conn->flags);
2703
2704                clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2705
2706                hci_key_change_cfm(conn, ev->status);
2707        }
2708
2709        hci_dev_unlock(hdev);
2710}
2711
2712static void hci_remote_features_evt(struct hci_dev *hdev,
2713                                    struct sk_buff *skb)
2714{
2715        struct hci_ev_remote_features *ev = (void *) skb->data;
2716        struct hci_conn *conn;
2717
2718        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2719
2720        hci_dev_lock(hdev);
2721
2722        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2723        if (!conn)
2724                goto unlock;
2725
2726        if (!ev->status)
2727                memcpy(conn->features[0], ev->features, 8);
2728
2729        if (conn->state != BT_CONFIG)
2730                goto unlock;
2731
2732        if (!ev->status && lmp_ext_feat_capable(hdev) &&
2733            lmp_ext_feat_capable(conn)) {
2734                struct hci_cp_read_remote_ext_features cp;
2735                cp.handle = ev->handle;
2736                cp.page = 0x01;
2737                hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
2738                             sizeof(cp), &cp);
2739                goto unlock;
2740        }
2741
2742        if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
2743                struct hci_cp_remote_name_req cp;
2744                memset(&cp, 0, sizeof(cp));
2745                bacpy(&cp.bdaddr, &conn->dst);
2746                cp.pscan_rep_mode = 0x02;
2747                hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2748        } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2749                mgmt_device_connected(hdev, conn, 0, NULL, 0);
2750
2751        if (!hci_outgoing_auth_needed(hdev, conn)) {
2752                conn->state = BT_CONNECTED;
2753                hci_connect_cfm(conn, ev->status);
2754                hci_conn_drop(conn);
2755        }
2756
2757unlock:
2758        hci_dev_unlock(hdev);
2759}
2760
2761static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb,
2762                                 u16 *opcode, u8 *status,
2763                                 hci_req_complete_t *req_complete,
2764                                 hci_req_complete_skb_t *req_complete_skb)
2765{
2766        struct hci_ev_cmd_complete *ev = (void *) skb->data;
2767
2768        *opcode = __le16_to_cpu(ev->opcode);
2769        *status = skb->data[sizeof(*ev)];
2770
2771        skb_pull(skb, sizeof(*ev));
2772
2773        switch (*opcode) {
2774        case HCI_OP_INQUIRY_CANCEL:
2775                hci_cc_inquiry_cancel(hdev, skb);
2776                break;
2777
2778        case HCI_OP_PERIODIC_INQ:
2779                hci_cc_periodic_inq(hdev, skb);
2780                break;
2781
2782        case HCI_OP_EXIT_PERIODIC_INQ:
2783                hci_cc_exit_periodic_inq(hdev, skb);
2784                break;
2785
2786        case HCI_OP_REMOTE_NAME_REQ_CANCEL:
2787                hci_cc_remote_name_req_cancel(hdev, skb);
2788                break;
2789
2790        case HCI_OP_ROLE_DISCOVERY:
2791                hci_cc_role_discovery(hdev, skb);
2792                break;
2793
2794        case HCI_OP_READ_LINK_POLICY:
2795                hci_cc_read_link_policy(hdev, skb);
2796                break;
2797
2798        case HCI_OP_WRITE_LINK_POLICY:
2799                hci_cc_write_link_policy(hdev, skb);
2800                break;
2801
2802        case HCI_OP_READ_DEF_LINK_POLICY:
2803                hci_cc_read_def_link_policy(hdev, skb);
2804                break;
2805
2806        case HCI_OP_WRITE_DEF_LINK_POLICY:
2807                hci_cc_write_def_link_policy(hdev, skb);
2808                break;
2809
2810        case HCI_OP_RESET:
2811                hci_cc_reset(hdev, skb);
2812                break;
2813
2814        case HCI_OP_READ_STORED_LINK_KEY:
2815                hci_cc_read_stored_link_key(hdev, skb);
2816                break;
2817
2818        case HCI_OP_DELETE_STORED_LINK_KEY:
2819                hci_cc_delete_stored_link_key(hdev, skb);
2820                break;
2821
2822        case HCI_OP_WRITE_LOCAL_NAME:
2823                hci_cc_write_local_name(hdev, skb);
2824                break;
2825
2826        case HCI_OP_READ_LOCAL_NAME:
2827                hci_cc_read_local_name(hdev, skb);
2828                break;
2829
2830        case HCI_OP_WRITE_AUTH_ENABLE:
2831                hci_cc_write_auth_enable(hdev, skb);
2832                break;
2833
2834        case HCI_OP_WRITE_ENCRYPT_MODE:
2835                hci_cc_write_encrypt_mode(hdev, skb);
2836                break;
2837
2838        case HCI_OP_WRITE_SCAN_ENABLE:
2839                hci_cc_write_scan_enable(hdev, skb);
2840                break;
2841
2842        case HCI_OP_READ_CLASS_OF_DEV:
2843                hci_cc_read_class_of_dev(hdev, skb);
2844                break;
2845
2846        case HCI_OP_WRITE_CLASS_OF_DEV:
2847                hci_cc_write_class_of_dev(hdev, skb);
2848                break;
2849
2850        case HCI_OP_READ_VOICE_SETTING:
2851                hci_cc_read_voice_setting(hdev, skb);
2852                break;
2853
2854        case HCI_OP_WRITE_VOICE_SETTING:
2855                hci_cc_write_voice_setting(hdev, skb);
2856                break;
2857
2858        case HCI_OP_READ_NUM_SUPPORTED_IAC:
2859                hci_cc_read_num_supported_iac(hdev, skb);
2860                break;
2861
2862        case HCI_OP_WRITE_SSP_MODE:
2863                hci_cc_write_ssp_mode(hdev, skb);
2864                break;
2865
2866        case HCI_OP_WRITE_SC_SUPPORT:
2867                hci_cc_write_sc_support(hdev, skb);
2868                break;
2869
2870        case HCI_OP_READ_LOCAL_VERSION:
2871                hci_cc_read_local_version(hdev, skb);
2872                break;
2873
2874        case HCI_OP_READ_LOCAL_COMMANDS:
2875                hci_cc_read_local_commands(hdev, skb);
2876                break;
2877
2878        case HCI_OP_READ_LOCAL_FEATURES:
2879                hci_cc_read_local_features(hdev, skb);
2880                break;
2881
2882        case HCI_OP_READ_LOCAL_EXT_FEATURES:
2883                hci_cc_read_local_ext_features(hdev, skb);
2884                break;
2885
2886        case HCI_OP_READ_BUFFER_SIZE:
2887                hci_cc_read_buffer_size(hdev, skb);
2888                break;
2889
2890        case HCI_OP_READ_BD_ADDR:
2891                hci_cc_read_bd_addr(hdev, skb);
2892                break;
2893
2894        case HCI_OP_READ_PAGE_SCAN_ACTIVITY:
2895                hci_cc_read_page_scan_activity(hdev, skb);
2896                break;
2897
2898        case HCI_OP_WRITE_PAGE_SCAN_ACTIVITY:
2899                hci_cc_write_page_scan_activity(hdev, skb);
2900                break;
2901
2902        case HCI_OP_READ_PAGE_SCAN_TYPE:
2903                hci_cc_read_page_scan_type(hdev, skb);
2904                break;
2905
2906        case HCI_OP_WRITE_PAGE_SCAN_TYPE:
2907                hci_cc_write_page_scan_type(hdev, skb);
2908                break;
2909
2910        case HCI_OP_READ_DATA_BLOCK_SIZE:
2911                hci_cc_read_data_block_size(hdev, skb);
2912                break;
2913
2914        case HCI_OP_READ_FLOW_CONTROL_MODE:
2915                hci_cc_read_flow_control_mode(hdev, skb);
2916                break;
2917
2918        case HCI_OP_READ_LOCAL_AMP_INFO:
2919                hci_cc_read_local_amp_info(hdev, skb);
2920                break;
2921
2922        case HCI_OP_READ_CLOCK:
2923                hci_cc_read_clock(hdev, skb);
2924                break;
2925
2926        case HCI_OP_READ_INQ_RSP_TX_POWER:
2927                hci_cc_read_inq_rsp_tx_power(hdev, skb);
2928                break;
2929
2930        case HCI_OP_PIN_CODE_REPLY:
2931                hci_cc_pin_code_reply(hdev, skb);
2932                break;
2933
2934        case HCI_OP_PIN_CODE_NEG_REPLY:
2935                hci_cc_pin_code_neg_reply(hdev, skb);
2936                break;
2937
2938        case HCI_OP_READ_LOCAL_OOB_DATA:
2939                hci_cc_read_local_oob_data(hdev, skb);
2940                break;
2941
2942        case HCI_OP_READ_LOCAL_OOB_EXT_DATA:
2943                hci_cc_read_local_oob_ext_data(hdev, skb);
2944                break;
2945
2946        case HCI_OP_LE_READ_BUFFER_SIZE:
2947                hci_cc_le_read_buffer_size(hdev, skb);
2948                break;
2949
2950        case HCI_OP_LE_READ_LOCAL_FEATURES:
2951                hci_cc_le_read_local_features(hdev, skb);
2952                break;
2953
2954        case HCI_OP_LE_READ_ADV_TX_POWER:
2955                hci_cc_le_read_adv_tx_power(hdev, skb);
2956                break;
2957
2958        case HCI_OP_USER_CONFIRM_REPLY:
2959                hci_cc_user_confirm_reply(hdev, skb);
2960                break;
2961
2962        case HCI_OP_USER_CONFIRM_NEG_REPLY:
2963                hci_cc_user_confirm_neg_reply(hdev, skb);
2964                break;
2965
2966        case HCI_OP_USER_PASSKEY_REPLY:
2967                hci_cc_user_passkey_reply(hdev, skb);
2968                break;
2969
2970        case HCI_OP_USER_PASSKEY_NEG_REPLY:
2971                hci_cc_user_passkey_neg_reply(hdev, skb);
2972                break;
2973
2974        case HCI_OP_LE_SET_RANDOM_ADDR:
2975                hci_cc_le_set_random_addr(hdev, skb);
2976                break;
2977
2978        case HCI_OP_LE_SET_ADV_ENABLE:
2979                hci_cc_le_set_adv_enable(hdev, skb);
2980                break;
2981
2982        case HCI_OP_LE_SET_SCAN_PARAM:
2983                hci_cc_le_set_scan_param(hdev, skb);
2984                break;
2985
2986        case HCI_OP_LE_SET_SCAN_ENABLE:
2987                hci_cc_le_set_scan_enable(hdev, skb);
2988                break;
2989
2990        case HCI_OP_LE_READ_WHITE_LIST_SIZE:
2991                hci_cc_le_read_white_list_size(hdev, skb);
2992                break;
2993
2994        case HCI_OP_LE_CLEAR_WHITE_LIST:
2995                hci_cc_le_clear_white_list(hdev, skb);
2996                break;
2997
2998        case HCI_OP_LE_ADD_TO_WHITE_LIST:
2999                hci_cc_le_add_to_white_list(hdev, skb);
3000                break;
3001
3002        case HCI_OP_LE_DEL_FROM_WHITE_LIST:
3003                hci_cc_le_del_from_white_list(hdev, skb);
3004                break;
3005
3006        case HCI_OP_LE_READ_SUPPORTED_STATES:
3007                hci_cc_le_read_supported_states(hdev, skb);
3008                break;
3009
3010        case HCI_OP_LE_READ_DEF_DATA_LEN:
3011                hci_cc_le_read_def_data_len(hdev, skb);
3012                break;
3013
3014        case HCI_OP_LE_WRITE_DEF_DATA_LEN:
3015                hci_cc_le_write_def_data_len(hdev, skb);
3016                break;
3017
3018        case HCI_OP_LE_READ_MAX_DATA_LEN:
3019                hci_cc_le_read_max_data_len(hdev, skb);
3020                break;
3021
3022        case HCI_OP_WRITE_LE_HOST_SUPPORTED:
3023                hci_cc_write_le_host_supported(hdev, skb);
3024                break;
3025
3026        case HCI_OP_LE_SET_ADV_PARAM:
3027                hci_cc_set_adv_param(hdev, skb);
3028                break;
3029
3030        case HCI_OP_READ_RSSI:
3031                hci_cc_read_rssi(hdev, skb);
3032                break;
3033
3034        case HCI_OP_READ_TX_POWER:
3035                hci_cc_read_tx_power(hdev, skb);
3036                break;
3037
3038        case HCI_OP_WRITE_SSP_DEBUG_MODE:
3039                hci_cc_write_ssp_debug_mode(hdev, skb);
3040                break;
3041
3042        default:
3043                BT_DBG("%s opcode 0x%4.4x", hdev->name, *opcode);
3044                break;
3045        }
3046
3047        if (*opcode != HCI_OP_NOP)
3048                cancel_delayed_work(&hdev->cmd_timer);
3049
3050        if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags))
3051                atomic_set(&hdev->cmd_cnt, 1);
3052
3053        hci_req_cmd_complete(hdev, *opcode, *status, req_complete,
3054                             req_complete_skb);
3055
3056        if (atomic_read(&hdev->cmd_cnt) && !skb_queue_empty(&hdev->cmd_q))
3057                queue_work(hdev->workqueue, &hdev->cmd_work);
3058}
3059
3060static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb,
3061                               u16 *opcode, u8 *status,
3062                               hci_req_complete_t *req_complete,
3063                               hci_req_complete_skb_t *req_complete_skb)
3064{
3065        struct hci_ev_cmd_status *ev = (void *) skb->data;
3066
3067        skb_pull(skb, sizeof(*ev));
3068
3069        *opcode = __le16_to_cpu(ev->opcode);
3070        *status = ev->status;
3071
3072        switch (*opcode) {
3073        case HCI_OP_INQUIRY:
3074                hci_cs_inquiry(hdev, ev->status);
3075                break;
3076
3077        case HCI_OP_CREATE_CONN:
3078                hci_cs_create_conn(hdev, ev->status);
3079                break;
3080
3081        case HCI_OP_DISCONNECT:
3082                hci_cs_disconnect(hdev, ev->status);
3083                break;
3084
3085        case HCI_OP_ADD_SCO:
3086                hci_cs_add_sco(hdev, ev->status);
3087                break;
3088
3089        case HCI_OP_AUTH_REQUESTED:
3090                hci_cs_auth_requested(hdev, ev->status);
3091                break;
3092
3093        case HCI_OP_SET_CONN_ENCRYPT:
3094                hci_cs_set_conn_encrypt(hdev, ev->status);
3095                break;
3096
3097        case HCI_OP_REMOTE_NAME_REQ:
3098                hci_cs_remote_name_req(hdev, ev->status);
3099                break;
3100
3101        case HCI_OP_READ_REMOTE_FEATURES:
3102                hci_cs_read_remote_features(hdev, ev->status);
3103                break;
3104
3105        case HCI_OP_READ_REMOTE_EXT_FEATURES:
3106                hci_cs_read_remote_ext_features(hdev, ev->status);
3107                break;
3108
3109        case HCI_OP_SETUP_SYNC_CONN:
3110                hci_cs_setup_sync_conn(hdev, ev->status);
3111                break;
3112
3113        case HCI_OP_SNIFF_MODE:
3114                hci_cs_sniff_mode(hdev, ev->status);
3115                break;
3116
3117        case HCI_OP_EXIT_SNIFF_MODE:
3118                hci_cs_exit_sniff_mode(hdev, ev->status);
3119                break;
3120
3121        case HCI_OP_SWITCH_ROLE:
3122                hci_cs_switch_role(hdev, ev->status);
3123                break;
3124
3125        case HCI_OP_LE_CREATE_CONN:
3126                hci_cs_le_create_conn(hdev, ev->status);
3127                break;
3128
3129        case HCI_OP_LE_READ_REMOTE_FEATURES:
3130                hci_cs_le_read_remote_features(hdev, ev->status);
3131                break;
3132
3133        case HCI_OP_LE_START_ENC:
3134                hci_cs_le_start_enc(hdev, ev->status);
3135                break;
3136
3137        default:
3138                BT_DBG("%s opcode 0x%4.4x", hdev->name, *opcode);
3139                break;
3140        }
3141
3142        if (*opcode != HCI_OP_NOP)
3143                cancel_delayed_work(&hdev->cmd_timer);
3144
3145        if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags))
3146                atomic_set(&hdev->cmd_cnt, 1);
3147
3148        /* Indicate request completion if the command failed. Also, if
3149         * we're not waiting for a special event and we get a success
3150         * command status we should try to flag the request as completed
3151         * (since for this kind of commands there will not be a command
3152         * complete event).
3153         */
3154        if (ev->status ||
3155            (hdev->sent_cmd && !bt_cb(hdev->sent_cmd)->hci.req_event))
3156                hci_req_cmd_complete(hdev, *opcode, ev->status, req_complete,
3157                                     req_complete_skb);
3158
3159        if (atomic_read(&hdev->cmd_cnt) && !skb_queue_empty(&hdev->cmd_q))
3160                queue_work(hdev->workqueue, &hdev->cmd_work);
3161}
3162
3163static void hci_hardware_error_evt(struct hci_dev *hdev, struct sk_buff *skb)
3164{
3165        struct hci_ev_hardware_error *ev = (void *) skb->data;
3166
3167        hdev->hw_error_code = ev->code;
3168
3169        queue_work(hdev->req_workqueue, &hdev->error_reset);
3170}
3171
3172static void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3173{
3174        struct hci_ev_role_change *ev = (void *) skb->data;
3175        struct hci_conn *conn;
3176
3177        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3178
3179        hci_dev_lock(hdev);
3180
3181        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3182        if (conn) {
3183                if (!ev->status)
3184                        conn->role = ev->role;
3185
3186                clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
3187
3188                hci_role_switch_cfm(conn, ev->status, ev->role);
3189        }
3190
3191        hci_dev_unlock(hdev);
3192}
3193
3194static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
3195{
3196        struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
3197        int i;
3198
3199        if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
3200                BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
3201                return;
3202        }
3203
3204        if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
3205            ev->num_hndl * sizeof(struct hci_comp_pkts_info)) {
3206                BT_DBG("%s bad parameters", hdev->name);
3207                return;
3208        }
3209
3210        BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
3211
3212        for (i = 0; i < ev->num_hndl; i++) {
3213                struct hci_comp_pkts_info *info = &ev->handles[i];
3214                struct hci_conn *conn;
3215                __u16  handle, count;
3216
3217                handle = __le16_to_cpu(info->handle);
3218                count  = __le16_to_cpu(info->count);
3219
3220                conn = hci_conn_hash_lookup_handle(hdev, handle);
3221                if (!conn)
3222                        continue;
3223
3224                conn->sent -= count;
3225
3226                switch (conn->type) {
3227                case ACL_LINK:
3228                        hdev->acl_cnt += count;
3229                        if (hdev->acl_cnt > hdev->acl_pkts)
3230                                hdev->acl_cnt = hdev->acl_pkts;
3231                        break;
3232
3233                case LE_LINK:
3234                        if (hdev->le_pkts) {
3235                                hdev->le_cnt += count;
3236                                if (hdev->le_cnt > hdev->le_pkts)
3237                                        hdev->le_cnt = hdev->le_pkts;
3238                        } else {
3239                                hdev->acl_cnt += count;
3240                                if (hdev->acl_cnt > hdev->acl_pkts)
3241                                        hdev->acl_cnt = hdev->acl_pkts;
3242                        }
3243                        break;
3244
3245                case SCO_LINK:
3246                        hdev->sco_cnt += count;
3247                        if (hdev->sco_cnt > hdev->sco_pkts)
3248                                hdev->sco_cnt = hdev->sco_pkts;
3249                        break;
3250
3251                default:
3252                        BT_ERR("Unknown type %d conn %p", conn->type, conn);
3253                        break;
3254                }
3255        }
3256
3257        queue_work(hdev->workqueue, &hdev->tx_work);
3258}
3259
3260static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
3261                                                 __u16 handle)
3262{
3263        struct hci_chan *chan;
3264
3265        switch (hdev->dev_type) {
3266        case HCI_PRIMARY:
3267                return hci_conn_hash_lookup_handle(hdev, handle);
3268        case HCI_AMP:
3269                chan = hci_chan_lookup_handle(hdev, handle);
3270                if (chan)
3271                        return chan->conn;
3272                break;
3273        default:
3274                BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type);
3275                break;
3276        }
3277
3278        return NULL;
3279}
3280
3281static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb)
3282{
3283        struct hci_ev_num_comp_blocks *ev = (void *) skb->data;
3284        int i;
3285
3286        if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
3287                BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
3288                return;
3289        }
3290
3291        if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
3292            ev->num_hndl * sizeof(struct hci_comp_blocks_info)) {
3293                BT_DBG("%s bad parameters", hdev->name);
3294                return;
3295        }
3296
3297        BT_DBG("%s num_blocks %d num_hndl %d", hdev->name, ev->num_blocks,
3298               ev->num_hndl);
3299
3300        for (i = 0; i < ev->num_hndl; i++) {
3301                struct hci_comp_blocks_info *info = &ev->handles[i];
3302                struct hci_conn *conn = NULL;
3303                __u16  handle, block_count;
3304
3305                handle = __le16_to_cpu(info->handle);
3306                block_count = __le16_to_cpu(info->blocks);
3307
3308                conn = __hci_conn_lookup_handle(hdev, handle);
3309                if (!conn)
3310                        continue;
3311
3312                conn->sent -= block_count;
3313
3314                switch (conn->type) {
3315                case ACL_LINK:
3316                case AMP_LINK:
3317                        hdev->block_cnt += block_count;
3318                        if (hdev->block_cnt > hdev->num_blocks)
3319                                hdev->block_cnt = hdev->num_blocks;
3320                        break;
3321
3322                default:
3323                        BT_ERR("Unknown type %d conn %p", conn->type, conn);
3324                        break;
3325                }
3326        }
3327
3328        queue_work(hdev->workqueue, &hdev->tx_work);
3329}
3330
3331static void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3332{
3333        struct hci_ev_mode_change *ev = (void *) skb->data;
3334        struct hci_conn *conn;
3335
3336        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3337
3338        hci_dev_lock(hdev);
3339
3340        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3341        if (conn) {
3342                conn->mode = ev->mode;
3343
3344                if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND,
3345                                        &conn->flags)) {
3346                        if (conn->mode == HCI_CM_ACTIVE)
3347                                set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3348                        else
3349                                clear_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3350                }
3351
3352                if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
3353                        hci_sco_setup(conn, ev->status);
3354        }
3355
3356        hci_dev_unlock(hdev);
3357}
3358
3359static void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3360{
3361        struct hci_ev_pin_code_req *ev = (void *) skb->data;
3362        struct hci_conn *conn;
3363
3364        BT_DBG("%s", hdev->name);
3365
3366        hci_dev_lock(hdev);
3367
3368        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3369        if (!conn)
3370                goto unlock;
3371
3372        if (conn->state == BT_CONNECTED) {
3373                hci_conn_hold(conn);
3374                conn->disc_timeout = HCI_PAIRING_TIMEOUT;
3375                hci_conn_drop(conn);
3376        }
3377
3378        if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
3379            !test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags)) {
3380                hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
3381                             sizeof(ev->bdaddr), &ev->bdaddr);
3382        } else if (hci_dev_test_flag(hdev, HCI_MGMT)) {
3383                u8 secure;
3384
3385                if (conn->pending_sec_level == BT_SECURITY_HIGH)
3386                        secure = 1;
3387                else
3388                        secure = 0;
3389
3390                mgmt_pin_code_request(hdev, &ev->bdaddr, secure);
3391        }
3392
3393unlock:
3394        hci_dev_unlock(hdev);
3395}
3396
3397static void conn_set_key(struct hci_conn *conn, u8 key_type, u8 pin_len)
3398{
3399        if (key_type == HCI_LK_CHANGED_COMBINATION)
3400                return;
3401
3402        conn->pin_length = pin_len;
3403        conn->key_type = key_type;
3404
3405        switch (key_type) {
3406        case HCI_LK_LOCAL_UNIT:
3407        case HCI_LK_REMOTE_UNIT:
3408        case HCI_LK_DEBUG_COMBINATION:
3409                return;
3410        case HCI_LK_COMBINATION:
3411                if (pin_len == 16)
3412                        conn->pending_sec_level = BT_SECURITY_HIGH;
3413                else
3414                        conn->pending_sec_level = BT_SECURITY_MEDIUM;
3415                break;
3416        case HCI_LK_UNAUTH_COMBINATION_P192:
3417        case HCI_LK_UNAUTH_COMBINATION_P256:
3418                conn->pending_sec_level = BT_SECURITY_MEDIUM;
3419                break;
3420        case HCI_LK_AUTH_COMBINATION_P192:
3421                conn->pending_sec_level = BT_SECURITY_HIGH;
3422                break;
3423        case HCI_LK_AUTH_COMBINATION_P256:
3424                conn->pending_sec_level = BT_SECURITY_FIPS;
3425                break;
3426        }
3427}
3428
3429static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3430{
3431        struct hci_ev_link_key_req *ev = (void *) skb->data;
3432        struct hci_cp_link_key_reply cp;
3433        struct hci_conn *conn;
3434        struct link_key *key;
3435
3436        BT_DBG("%s", hdev->name);
3437
3438        if (!hci_dev_test_flag(hdev, HCI_MGMT))
3439                return;
3440
3441        hci_dev_lock(hdev);
3442
3443        key = hci_find_link_key(hdev, &ev->bdaddr);
3444        if (!key) {
3445                BT_DBG("%s link key not found for %pMR", hdev->name,
3446                       &ev->bdaddr);
3447                goto not_found;
3448        }
3449
3450        BT_DBG("%s found key type %u for %pMR", hdev->name, key->type,
3451               &ev->bdaddr);
3452
3453        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3454        if (conn) {
3455                clear_bit(HCI_CONN_NEW_LINK_KEY, &conn->flags);
3456
3457                if ((key->type == HCI_LK_UNAUTH_COMBINATION_P192 ||
3458                     key->type == HCI_LK_UNAUTH_COMBINATION_P256) &&
3459                    conn->auth_type != 0xff && (conn->auth_type & 0x01)) {
3460                        BT_DBG("%s ignoring unauthenticated key", hdev->name);
3461                        goto not_found;
3462                }
3463
3464                if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
3465                    (conn->pending_sec_level == BT_SECURITY_HIGH ||
3466                     conn->pending_sec_level == BT_SECURITY_FIPS)) {
3467                        BT_DBG("%s ignoring key unauthenticated for high security",
3468                               hdev->name);
3469                        goto not_found;
3470                }
3471
3472                conn_set_key(conn, key->type, key->pin_len);
3473        }
3474
3475        bacpy(&cp.bdaddr, &ev->bdaddr);
3476        memcpy(cp.link_key, key->val, HCI_LINK_KEY_SIZE);
3477
3478        hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
3479
3480        hci_dev_unlock(hdev);
3481
3482        return;
3483
3484not_found:
3485        hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
3486        hci_dev_unlock(hdev);
3487}
3488
3489static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3490{
3491        struct hci_ev_link_key_notify *ev = (void *) skb->data;
3492        struct hci_conn *conn;
3493        struct link_key *key;
3494        bool persistent;
3495        u8 pin_len = 0;
3496
3497        BT_DBG("%s", hdev->name);
3498
3499        hci_dev_lock(hdev);
3500
3501        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3502        if (!conn)
3503                goto unlock;
3504
3505        hci_conn_hold(conn);
3506        conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3507        hci_conn_drop(conn);
3508
3509        set_bit(HCI_CONN_NEW_LINK_KEY, &conn->flags);
3510        conn_set_key(conn, ev->key_type, conn->pin_length);
3511
3512        if (!hci_dev_test_flag(hdev, HCI_MGMT))
3513                goto unlock;
3514
3515        key = hci_add_link_key(hdev, conn, &ev->bdaddr, ev->link_key,
3516                                ev->key_type, pin_len, &persistent);
3517        if (!key)
3518                goto unlock;
3519
3520        /* Update connection information since adding the key will have
3521         * fixed up the type in the case of changed combination keys.
3522         */
3523        if (ev->key_type == HCI_LK_CHANGED_COMBINATION)
3524                conn_set_key(conn, key->type, key->pin_len);
3525
3526        mgmt_new_link_key(hdev, key, persistent);
3527
3528        /* Keep debug keys around only if the HCI_KEEP_DEBUG_KEYS flag
3529         * is set. If it's not set simply remove the key from the kernel
3530         * list (we've still notified user space about it but with
3531         * store_hint being 0).
3532         */
3533        if (key->type == HCI_LK_DEBUG_COMBINATION &&
3534            !hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS)) {
3535                list_del_rcu(&key->list);
3536                kfree_rcu(key, rcu);
3537                goto unlock;
3538        }
3539
3540        if (persistent)
3541                clear_bit(HCI_CONN_FLUSH_KEY, &conn->flags);
3542        else
3543                set_bit(HCI_CONN_FLUSH_KEY, &conn->flags);
3544
3545unlock:
3546        hci_dev_unlock(hdev);
3547}
3548
3549static void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
3550{
3551        struct hci_ev_clock_offset *ev = (void *) skb->data;
3552        struct hci_conn *conn;
3553
3554        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3555
3556        hci_dev_lock(hdev);
3557
3558        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3559        if (conn && !ev->status) {
3560                struct inquiry_entry *ie;
3561
3562                ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3563                if (ie) {
3564                        ie->data.clock_offset = ev->clock_offset;
3565                        ie->timestamp = jiffies;
3566                }
3567        }
3568
3569        hci_dev_unlock(hdev);
3570}
3571
3572static void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3573{
3574        struct hci_ev_pkt_type_change *ev = (void *) skb->data;
3575        struct hci_conn *conn;
3576
3577        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3578
3579        hci_dev_lock(hdev);
3580
3581        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3582        if (conn && !ev->status)
3583                conn->pkt_type = __le16_to_cpu(ev->pkt_type);
3584
3585        hci_dev_unlock(hdev);
3586}
3587
3588static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
3589{
3590        struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
3591        struct inquiry_entry *ie;
3592
3593        BT_DBG("%s", hdev->name);
3594
3595        hci_dev_lock(hdev);
3596
3597        ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3598        if (ie) {
3599                ie->data.pscan_rep_mode = ev->pscan_rep_mode;
3600                ie->timestamp = jiffies;
3601        }
3602
3603        hci_dev_unlock(hdev);
3604}
3605
3606static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
3607                                             struct sk_buff *skb)
3608{
3609        struct inquiry_data data;
3610        int num_rsp = *((__u8 *) skb->data);
3611
3612        BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3613
3614        if (!num_rsp)
3615                return;
3616
3617        if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
3618                return;
3619
3620        hci_dev_lock(hdev);
3621
3622        if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
3623                struct inquiry_info_with_rssi_and_pscan_mode *info;
3624                info = (void *) (skb->data + 1);
3625
3626                for (; num_rsp; num_rsp--, info++) {
3627                        u32 flags;
3628
3629                        bacpy(&data.bdaddr, &info->bdaddr);
3630                        data.pscan_rep_mode     = info->pscan_rep_mode;
3631                        data.pscan_period_mode  = info->pscan_period_mode;
3632                        data.pscan_mode         = info->pscan_mode;
3633                        memcpy(data.dev_class, info->dev_class, 3);
3634                        data.clock_offset       = info->clock_offset;
3635                        data.rssi               = info->rssi;
3636                        data.ssp_mode           = 0x00;
3637
3638                        flags = hci_inquiry_cache_update(hdev, &data, false);
3639
3640                        mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3641                                          info->dev_class, info->rssi,
3642                                          flags, NULL, 0, NULL, 0);
3643                }
3644        } else {
3645                struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
3646
3647                for (; num_rsp; num_rsp--, info++) {
3648                        u32 flags;
3649
3650                        bacpy(&data.bdaddr, &info->bdaddr);
3651                        data.pscan_rep_mode     = info->pscan_rep_mode;
3652                        data.pscan_period_mode  = info->pscan_period_mode;
3653                        data.pscan_mode         = 0x00;
3654                        memcpy(data.dev_class, info->dev_class, 3);
3655                        data.clock_offset       = info->clock_offset;
3656                        data.rssi               = info->rssi;
3657                        data.ssp_mode           = 0x00;
3658
3659                        flags = hci_inquiry_cache_update(hdev, &data, false);
3660
3661                        mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3662                                          info->dev_class, info->rssi,
3663                                          flags, NULL, 0, NULL, 0);
3664                }
3665        }
3666
3667        hci_dev_unlock(hdev);
3668}
3669
3670static void hci_remote_ext_features_evt(struct hci_dev *hdev,
3671                                        struct sk_buff *skb)
3672{
3673        struct hci_ev_remote_ext_features *ev = (void *) skb->data;
3674        struct hci_conn *conn;
3675
3676        BT_DBG("%s", hdev->name);
3677
3678        hci_dev_lock(hdev);
3679
3680        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3681        if (!conn)
3682                goto unlock;
3683
3684        if (ev->page < HCI_MAX_PAGES)
3685                memcpy(conn->features[ev->page], ev->features, 8);
3686
3687        if (!ev->status && ev->page == 0x01) {
3688                struct inquiry_entry *ie;
3689
3690                ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3691                if (ie)
3692                        ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3693
3694                if (ev->features[0] & LMP_HOST_SSP) {
3695                        set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3696                } else {
3697                        /* It is mandatory by the Bluetooth specification that
3698                         * Extended Inquiry Results are only used when Secure
3699                         * Simple Pairing is enabled, but some devices violate
3700                         * this.
3701                         *
3702                         * To make these devices work, the internal SSP
3703                         * enabled flag needs to be cleared if the remote host
3704                         * features do not indicate SSP support */
3705                        clear_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3706                }
3707
3708                if (ev->features[0] & LMP_HOST_SC)
3709                        set_bit(HCI_CONN_SC_ENABLED, &conn->flags);
3710        }
3711
3712        if (conn->state != BT_CONFIG)
3713                goto unlock;
3714
3715        if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
3716                struct hci_cp_remote_name_req cp;
3717                memset(&cp, 0, sizeof(cp));
3718                bacpy(&cp.bdaddr, &conn->dst);
3719                cp.pscan_rep_mode = 0x02;
3720                hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
3721        } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3722                mgmt_device_connected(hdev, conn, 0, NULL, 0);
3723
3724        if (!hci_outgoing_auth_needed(hdev, conn)) {
3725                conn->state = BT_CONNECTED;
3726                hci_connect_cfm(conn, ev->status);
3727                hci_conn_drop(conn);
3728        }
3729
3730unlock:
3731        hci_dev_unlock(hdev);
3732}
3733
3734static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
3735                                       struct sk_buff *skb)
3736{
3737        struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
3738        struct hci_conn *conn;
3739
3740        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3741
3742        hci_dev_lock(hdev);
3743
3744        conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
3745        if (!conn) {
3746                if (ev->link_type == ESCO_LINK)
3747                        goto unlock;
3748
3749                /* When the link type in the event indicates SCO connection
3750                 * and lookup of the connection object fails, then check
3751                 * if an eSCO connection object exists.
3752                 *
3753                 * The core limits the synchronous connections to either
3754                 * SCO or eSCO. The eSCO connection is preferred and tried
3755                 * to be setup first and until successfully established,
3756                 * the link type will be hinted as eSCO.
3757                 */
3758                conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
3759                if (!conn)
3760                        goto unlock;
3761        }
3762
3763        switch (ev->status) {
3764        case 0x00:
3765                conn->handle = __le16_to_cpu(ev->handle);
3766                conn->state  = BT_CONNECTED;
3767                conn->type   = ev->link_type;
3768
3769                hci_debugfs_create_conn(conn);
3770                hci_conn_add_sysfs(conn);
3771                break;
3772
3773        case 0x10:      /* Connection Accept Timeout */
3774        case 0x0d:      /* Connection Rejected due to Limited Resources */
3775        case 0x11:      /* Unsupported Feature or Parameter Value */
3776        case 0x1c:      /* SCO interval rejected */
3777        case 0x1a:      /* Unsupported Remote Feature */
3778        case 0x1f:      /* Unspecified error */
3779        case 0x20:      /* Unsupported LMP Parameter value */
3780                if (conn->out) {
3781                        conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
3782                                        (hdev->esco_type & EDR_ESCO_MASK);
3783                        if (hci_setup_sync(conn, conn->link->handle))
3784                                goto unlock;
3785                }
3786                /* fall through */
3787
3788        default:
3789                conn->state = BT_CLOSED;
3790                break;
3791        }
3792
3793        hci_connect_cfm(conn, ev->status);
3794        if (ev->status)
3795                hci_conn_del(conn);
3796
3797unlock:
3798        hci_dev_unlock(hdev);
3799}
3800
3801static inline size_t eir_get_length(u8 *eir, size_t eir_len)
3802{
3803        size_t parsed = 0;
3804
3805        while (parsed < eir_len) {
3806                u8 field_len = eir[0];
3807
3808                if (field_len == 0)
3809                        return parsed;
3810
3811                parsed += field_len + 1;
3812                eir += field_len + 1;
3813        }
3814
3815        return eir_len;
3816}
3817
3818static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
3819                                            struct sk_buff *skb)
3820{
3821        struct inquiry_data data;
3822        struct extended_inquiry_info *info = (void *) (skb->data + 1);
3823        int num_rsp = *((__u8 *) skb->data);
3824        size_t eir_len;
3825
3826        BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3827
3828        if (!num_rsp)
3829                return;
3830
3831        if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
3832                return;
3833
3834        hci_dev_lock(hdev);
3835
3836        for (; num_rsp; num_rsp--, info++) {
3837                u32 flags;
3838                bool name_known;
3839
3840                bacpy(&data.bdaddr, &info->bdaddr);
3841                data.pscan_rep_mode     = info->pscan_rep_mode;
3842                data.pscan_period_mode  = info->pscan_period_mode;
3843                data.pscan_mode         = 0x00;
3844                memcpy(data.dev_class, info->dev_class, 3);
3845                data.clock_offset       = info->clock_offset;
3846                data.rssi               = info->rssi;
3847                data.ssp_mode           = 0x01;
3848
3849                if (hci_dev_test_flag(hdev, HCI_MGMT))
3850                        name_known = eir_get_data(info->data,
3851                                                  sizeof(info->data),
3852                                                  EIR_NAME_COMPLETE, NULL);
3853                else
3854                        name_known = true;
3855
3856                flags = hci_inquiry_cache_update(hdev, &data, name_known);
3857
3858                eir_len = eir_get_length(info->data, sizeof(info->data));
3859
3860                mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3861                                  info->dev_class, info->rssi,
3862                                  flags, info->data, eir_len, NULL, 0);
3863        }
3864
3865        hci_dev_unlock(hdev);
3866}
3867
3868static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
3869                                         struct sk_buff *skb)
3870{
3871        struct hci_ev_key_refresh_complete *ev = (void *) skb->data;
3872        struct hci_conn *conn;
3873
3874        BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev->name, ev->status,
3875               __le16_to_cpu(ev->handle));
3876
3877        hci_dev_lock(hdev);
3878
3879        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3880        if (!conn)
3881                goto unlock;
3882
3883        /* For BR/EDR the necessary steps are taken through the
3884         * auth_complete event.
3885         */
3886        if (conn->type != LE_LINK)
3887                goto unlock;
3888
3889        if (!ev->status)
3890                conn->sec_level = conn->pending_sec_level;
3891
3892        clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
3893
3894        if (ev->status && conn->state == BT_CONNECTED) {
3895                hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
3896                hci_conn_drop(conn);
3897                goto unlock;
3898        }
3899
3900        if (conn->state == BT_CONFIG) {
3901                if (!ev->status)
3902                        conn->state = BT_CONNECTED;
3903
3904                hci_connect_cfm(conn, ev->status);
3905                hci_conn_drop(conn);
3906        } else {
3907                hci_auth_cfm(conn, ev->status);
3908
3909                hci_conn_hold(conn);
3910                conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3911                hci_conn_drop(conn);
3912        }
3913
3914unlock:
3915        hci_dev_unlock(hdev);
3916}
3917
3918static u8 hci_get_auth_req(struct hci_conn *conn)
3919{
3920        /* If remote requests no-bonding follow that lead */
3921        if (conn->remote_auth == HCI_AT_NO_BONDING ||
3922            conn->remote_auth == HCI_AT_NO_BONDING_MITM)
3923                return conn->remote_auth | (conn->auth_type & 0x01);
3924
3925        /* If both remote and local have enough IO capabilities, require
3926         * MITM protection
3927         */
3928        if (conn->remote_cap != HCI_IO_NO_INPUT_OUTPUT &&
3929            conn->io_capability != HCI_IO_NO_INPUT_OUTPUT)
3930                return conn->remote_auth | 0x01;
3931
3932        /* No MITM protection possible so ignore remote requirement */
3933        return (conn->remote_auth & ~0x01) | (conn->auth_type & 0x01);
3934}
3935
3936static u8 bredr_oob_data_present(struct hci_conn *conn)
3937{
3938        struct hci_dev *hdev = conn->hdev;
3939        struct oob_data *data;
3940
3941        data = hci_find_remote_oob_data(hdev, &conn->dst, BDADDR_BREDR);
3942        if (!data)
3943                return 0x00;
3944
3945        if (bredr_sc_enabled(hdev)) {
3946                /* When Secure Connections is enabled, then just
3947                 * return the present value stored with the OOB
3948                 * data. The stored value contains the right present
3949                 * information. However it can only be trusted when
3950                 * not in Secure Connection Only mode.
3951                 */
3952                if (!hci_dev_test_flag(hdev, HCI_SC_ONLY))
3953                        return data->present;
3954
3955                /* When Secure Connections Only mode is enabled, then
3956                 * the P-256 values are required. If they are not
3957                 * available, then do not declare that OOB data is
3958                 * present.
3959                 */
3960                if (!memcmp(data->rand256, ZERO_KEY, 16) ||
3961                    !memcmp(data->hash256, ZERO_KEY, 16))
3962                        return 0x00;
3963
3964                return 0x02;
3965        }
3966
3967        /* When Secure Connections is not enabled or actually
3968         * not supported by the hardware, then check that if
3969         * P-192 data values are present.
3970         */
3971        if (!memcmp(data->rand192, ZERO_KEY, 16) ||
3972            !memcmp(data->hash192, ZERO_KEY, 16))
3973                return 0x00;
3974
3975        return 0x01;
3976}
3977
3978static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3979{
3980        struct hci_ev_io_capa_request *ev = (void *) skb->data;
3981        struct hci_conn *conn;
3982
3983        BT_DBG("%s", hdev->name);
3984
3985        hci_dev_lock(hdev);
3986
3987        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3988        if (!conn)
3989                goto unlock;
3990
3991        hci_conn_hold(conn);
3992
3993        if (!hci_dev_test_flag(hdev, HCI_MGMT))
3994                goto unlock;
3995
3996        /* Allow pairing if we're pairable, the initiators of the
3997         * pairing or if the remote is not requesting bonding.
3998         */
3999        if (hci_dev_test_flag(hdev, HCI_BONDABLE) ||
4000            test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags) ||
4001            (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
4002                struct hci_cp_io_capability_reply cp;
4003
4004                bacpy(&cp.bdaddr, &ev->bdaddr);
4005                /* Change the IO capability from KeyboardDisplay
4006                 * to DisplayYesNo as it is not supported by BT spec. */
4007                cp.capability = (conn->io_capability == 0x04) ?
4008                                HCI_IO_DISPLAY_YESNO : conn->io_capability;
4009
4010                /* If we are initiators, there is no remote information yet */
4011                if (conn->remote_auth == 0xff) {
4012                        /* Request MITM protection if our IO caps allow it
4013                         * except for the no-bonding case.
4014                         */
4015                        if (conn->io_capability != HCI_IO_NO_INPUT_OUTPUT &&
4016                            conn->auth_type != HCI_AT_NO_BONDING)
4017                                conn->auth_type |= 0x01;
4018                } else {
4019                        conn->auth_type = hci_get_auth_req(conn);
4020                }
4021
4022                /* If we're not bondable, force one of the non-bondable
4023                 * authentication requirement values.
4024                 */
4025                if (!hci_dev_test_flag(hdev, HCI_BONDABLE))
4026                        conn->auth_type &= HCI_AT_NO_BONDING_MITM;
4027
4028                cp.authentication = conn->auth_type;
4029                cp.oob_data = bredr_oob_data_present(conn);
4030
4031                hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
4032                             sizeof(cp), &cp);
4033        } else {
4034                struct hci_cp_io_capability_neg_reply cp;
4035
4036                bacpy(&cp.bdaddr, &ev->bdaddr);
4037                cp.reason = HCI_ERROR_PAIRING_NOT_ALLOWED;
4038
4039                hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
4040                             sizeof(cp), &cp);
4041        }
4042
4043unlock:
4044        hci_dev_unlock(hdev);
4045}
4046
4047static void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
4048{
4049        struct hci_ev_io_capa_reply *ev = (void *) skb->data;
4050        struct hci_conn *conn;
4051
4052        BT_DBG("%s", hdev->name);
4053
4054        hci_dev_lock(hdev);
4055
4056        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4057        if (!conn)
4058                goto unlock;
4059
4060        conn->remote_cap = ev->capability;
4061        conn->remote_auth = ev->authentication;
4062
4063unlock:
4064        hci_dev_unlock(hdev);
4065}
4066
4067static void hci_user_confirm_request_evt(struct hci_dev *hdev,
4068                                         struct sk_buff *skb)
4069{
4070        struct hci_ev_user_confirm_req *ev = (void *) skb->data;
4071        int loc_mitm, rem_mitm, confirm_hint = 0;
4072        struct hci_conn *conn;
4073
4074        BT_DBG("%s", hdev->name);
4075
4076        hci_dev_lock(hdev);
4077
4078        if (!hci_dev_test_flag(hdev, HCI_MGMT))
4079                goto unlock;
4080
4081        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4082        if (!conn)
4083                goto unlock;
4084
4085        loc_mitm = (conn->auth_type & 0x01);
4086        rem_mitm = (conn->remote_auth & 0x01);
4087
4088        /* If we require MITM but the remote device can't provide that
4089         * (it has NoInputNoOutput) then reject the confirmation
4090         * request. We check the security level here since it doesn't
4091         * necessarily match conn->auth_type.
4092         */
4093        if (conn->pending_sec_level > BT_SECURITY_MEDIUM &&
4094            conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) {
4095                BT_DBG("Rejecting request: remote device can't provide MITM");
4096                hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
4097                             sizeof(ev->bdaddr), &ev->bdaddr);
4098                goto unlock;
4099        }
4100
4101        /* If no side requires MITM protection; auto-accept */
4102        if ((!loc_mitm || conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) &&
4103            (!rem_mitm || conn->io_capability == HCI_IO_NO_INPUT_OUTPUT)) {
4104
4105                /* If we're not the initiators request authorization to
4106                 * proceed from user space (mgmt_user_confirm with
4107                 * confirm_hint set to 1). The exception is if neither
4108                 * side had MITM or if the local IO capability is
4109                 * NoInputNoOutput, in which case we do auto-accept
4110                 */
4111                if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) &&
4112                    conn->io_capability != HCI_IO_NO_INPUT_OUTPUT &&
4113                    (loc_mitm || rem_mitm)) {
4114                        BT_DBG("Confirming auto-accept as acceptor");
4115                        confirm_hint = 1;
4116                        goto confirm;
4117                }
4118
4119                BT_DBG("Auto-accept of user confirmation with %ums delay",
4120                       hdev->auto_accept_delay);
4121
4122                if (hdev->auto_accept_delay > 0) {
4123                        int delay = msecs_to_jiffies(hdev->auto_accept_delay);
4124                        queue_delayed_work(conn->hdev->workqueue,
4125                                           &conn->auto_accept_work, delay);
4126                        goto unlock;
4127                }
4128
4129                hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
4130                             sizeof(ev->bdaddr), &ev->bdaddr);
4131                goto unlock;
4132        }
4133
4134confirm:
4135        mgmt_user_confirm_request(hdev, &ev->bdaddr, ACL_LINK, 0,
4136                                  le32_to_cpu(ev->passkey), confirm_hint);
4137
4138unlock:
4139        hci_dev_unlock(hdev);
4140}
4141
4142static void hci_user_passkey_request_evt(struct hci_dev *hdev,
4143                                         struct sk_buff *skb)
4144{
4145        struct hci_ev_user_passkey_req *ev = (void *) skb->data;
4146
4147        BT_DBG("%s", hdev->name);
4148
4149        if (hci_dev_test_flag(hdev, HCI_MGMT))
4150                mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0);
4151}
4152
4153static void hci_user_passkey_notify_evt(struct hci_dev *hdev,
4154                                        struct sk_buff *skb)
4155{
4156        struct hci_ev_user_passkey_notify *ev = (void *) skb->data;
4157        struct hci_conn *conn;
4158
4159        BT_DBG("%s", hdev->name);
4160
4161        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4162        if (!conn)
4163                return;
4164
4165        conn->passkey_notify = __le32_to_cpu(ev->passkey);
4166        conn->passkey_entered = 0;
4167
4168        if (hci_dev_test_flag(hdev, HCI_MGMT))
4169                mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
4170                                         conn->dst_type, conn->passkey_notify,
4171                                         conn->passkey_entered);
4172}
4173
4174static void hci_keypress_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
4175{
4176        struct hci_ev_keypress_notify *ev = (void *) skb->data;
4177        struct hci_conn *conn;
4178
4179        BT_DBG("%s", hdev->name);
4180
4181        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4182        if (!conn)
4183                return;
4184
4185        switch (ev->type) {
4186        case HCI_KEYPRESS_STARTED:
4187                conn->passkey_entered = 0;
4188                return;
4189
4190        case HCI_KEYPRESS_ENTERED:
4191                conn->passkey_entered++;
4192                break;
4193
4194        case HCI_KEYPRESS_ERASED:
4195                conn->passkey_entered--;
4196                break;
4197
4198        case HCI_KEYPRESS_CLEARED:
4199                conn->passkey_entered = 0;
4200                break;
4201
4202        case HCI_KEYPRESS_COMPLETED:
4203                return;
4204        }
4205
4206        if (hci_dev_test_flag(hdev, HCI_MGMT))
4207                mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
4208                                         conn->dst_type, conn->passkey_notify,
4209                                         conn->passkey_entered);
4210}
4211
4212static void hci_simple_pair_complete_evt(struct hci_dev *hdev,
4213                                         struct sk_buff *skb)
4214{
4215        struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
4216        struct hci_conn *conn;
4217
4218        BT_DBG("%s", hdev->name);
4219
4220        hci_dev_lock(hdev);
4221
4222        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4223        if (!conn)
4224                goto unlock;
4225
4226        /* Reset the authentication requirement to unknown */
4227        conn->remote_auth = 0xff;
4228
4229        /* To avoid duplicate auth_failed events to user space we check
4230         * the HCI_CONN_AUTH_PEND flag which will be set if we
4231         * initiated the authentication. A traditional auth_complete
4232         * event gets always produced as initiator and is also mapped to
4233         * the mgmt_auth_failed event */
4234        if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) && ev->status)
4235                mgmt_auth_failed(conn, ev->status);
4236
4237        hci_conn_drop(conn);
4238
4239unlock:
4240        hci_dev_unlock(hdev);
4241}
4242
4243static void hci_remote_host_features_evt(struct hci_dev *hdev,
4244                                         struct sk_buff *skb)
4245{
4246        struct hci_ev_remote_host_features *ev = (void *) skb->data;
4247        struct inquiry_entry *ie;
4248        struct hci_conn *conn;
4249
4250        BT_DBG("%s", hdev->name);
4251
4252        hci_dev_lock(hdev);
4253
4254        conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4255        if (conn)
4256                memcpy(conn->features[1], ev->features, 8);
4257
4258        ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
4259        if (ie)
4260                ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
4261
4262        hci_dev_unlock(hdev);
4263}
4264
4265static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
4266                                            struct sk_buff *skb)
4267{
4268        struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
4269        struct oob_data *data;
4270
4271        BT_DBG("%s", hdev->name);
4272
4273        hci_dev_lock(hdev);
4274
4275        if (!hci_dev_test_flag(hdev, HCI_MGMT))
4276                goto unlock;
4277
4278        data = hci_find_remote_oob_data(hdev, &ev->bdaddr, BDADDR_BREDR);
4279        if (!data) {
4280                struct hci_cp_remote_oob_data_neg_reply cp;
4281
4282                bacpy(&cp.bdaddr, &ev->bdaddr);
4283                hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY,
4284                             sizeof(cp), &cp);
4285                goto unlock;
4286        }
4287
4288        if (bredr_sc_enabled(hdev)) {
4289                struct hci_cp_remote_oob_ext_data_reply cp;
4290
4291                bacpy(&cp.bdaddr, &ev->bdaddr);
4292                if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
4293                        memset(cp.hash192, 0, sizeof(cp.hash192));
4294                        memset(cp.rand192, 0, sizeof(cp.rand192));
4295                } else {
4296                        memcpy(cp.hash192, data->hash192, sizeof(cp.hash192));
4297                        memcpy(cp.rand192, data->rand192, sizeof(cp.rand192));
4298                }
4299                memcpy(cp.hash256, data->hash256, sizeof(cp.hash256));
4300                memcpy(cp.rand256, data->rand256, sizeof(cp.rand256));
4301
4302                hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_EXT_DATA_REPLY,
4303                             sizeof(cp), &cp);
4304        } else {
4305                struct hci_cp_remote_oob_data_reply cp;
4306
4307                bacpy(&cp.bdaddr, &ev->bdaddr);
4308                memcpy(cp.hash, data->hash192, sizeof(cp.hash));
4309                memcpy(cp.rand, data->rand192, sizeof(cp.rand));
4310
4311                hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY,
4312                             sizeof(cp), &cp);
4313        }
4314
4315unlock:
4316        hci_dev_unlock(hdev);
4317}
4318
4319#if IS_ENABLED(CONFIG_BT_HS)
4320static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
4321{
4322        struct hci_ev_channel_selected *ev = (void *)skb->data;
4323        struct hci_conn *hcon;
4324
4325        BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
4326
4327        skb_pull(skb, sizeof(*ev));
4328
4329        hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4330        if (!hcon)
4331                return;
4332
4333        amp_read_loc_assoc_final_data(hdev, hcon);
4334}
4335
4336static void hci_phy_link_complete_evt(struct hci_dev *hdev,
4337                                      struct sk_buff *skb)
4338{
4339        struct hci_ev_phy_link_complete *ev = (void *) skb->data;
4340        struct hci_conn *hcon, *bredr_hcon;
4341
4342        BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev->name, ev->phy_handle,
4343               ev->status);
4344
4345        hci_dev_lock(hdev);
4346
4347        hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4348        if (!hcon) {
4349                hci_dev_unlock(hdev);
4350                return;
4351        }
4352
4353        if (ev->status) {
4354                hci_conn_del(hcon);
4355                hci_dev_unlock(hdev);
4356                return;
4357        }
4358
4359        bredr_hcon = hcon->amp_mgr->l2cap_conn->hcon;
4360
4361        hcon->state = BT_CONNECTED;
4362        bacpy(&hcon->dst, &bredr_hcon->dst);
4363
4364        hci_conn_hold(hcon);
4365        hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
4366        hci_conn_drop(hcon);
4367
4368        hci_debugfs_create_conn(hcon);
4369        hci_conn_add_sysfs(hcon);
4370
4371        amp_physical_cfm(bredr_hcon, hcon);
4372
4373        hci_dev_unlock(hdev);
4374}
4375
4376static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
4377{
4378        struct hci_ev_logical_link_complete *ev = (void *) skb->data;
4379        struct hci_conn *hcon;
4380        struct hci_chan *hchan;
4381        struct amp_mgr *mgr;
4382
4383        BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
4384               hdev->name, le16_to_cpu(ev->handle), ev->phy_handle,
4385               ev->status);
4386
4387        hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4388        if (!hcon)
4389                return;
4390
4391        /* Create AMP hchan */
4392        hchan = hci_chan_create(hcon);
4393        if (!hchan)
4394                return;
4395
4396        hchan->handle = le16_to_cpu(ev->handle);
4397
4398        BT_DBG("hcon %p mgr %p hchan %p", hcon, hcon->amp_mgr, hchan);
4399
4400        mgr = hcon->amp_mgr;
4401        if (mgr && mgr->bredr_chan) {
4402                struct l2cap_chan *bredr_chan = mgr->bredr_chan;
4403
4404                l2cap_chan_lock(bredr_chan);
4405
4406                bredr_chan->conn->mtu = hdev->block_mtu;
4407                l2cap_logical_cfm(bredr_chan, hchan, 0);
4408                hci_conn_hold(hcon);
4409
4410                l2cap_chan_unlock(bredr_chan);
4411        }
4412}
4413
4414static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
4415                                             struct sk_buff *skb)
4416{
4417        struct hci_ev_disconn_logical_link_complete *ev = (void *) skb->data;
4418        struct hci_chan *hchan;
4419
4420        BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
4421               le16_to_cpu(ev->handle), ev->status);
4422
4423        if (ev->status)
4424                return;
4425
4426        hci_dev_lock(hdev);
4427
4428        hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
4429        if (!hchan)
4430                goto unlock;
4431
4432        amp_destroy_logical_link(hchan, ev->reason);
4433
4434unlock:
4435        hci_dev_unlock(hdev);
4436}
4437
4438static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
4439                                             struct sk_buff *skb)
4440{
4441        struct hci_ev_disconn_phy_link_complete *ev = (void *) skb->data;
4442        struct hci_conn *hcon;
4443
4444        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4445
4446        if (ev->status)
4447                return;
4448
4449        hci_dev_lock(hdev);
4450
4451        hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4452        if (hcon) {
4453                hcon->state = BT_CLOSED;
4454                hci_conn_del(hcon);
4455        }
4456
4457        hci_dev_unlock(hdev);
4458}
4459#endif
4460
4461static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
4462{
4463        struct hci_ev_le_conn_complete *ev = (void *) skb->data;
4464        struct hci_conn_params *params;
4465        struct hci_conn *conn;
4466        struct smp_irk *irk;
4467        u8 addr_type;
4468
4469        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4470
4471        hci_dev_lock(hdev);
4472
4473        /* All controllers implicitly stop advertising in the event of a
4474         * connection, so ensure that the state bit is cleared.
4475         */
4476        hci_dev_clear_flag(hdev, HCI_LE_ADV);
4477
4478        conn = hci_lookup_le_connect(hdev);
4479        if (!conn) {
4480                conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr, ev->role);
4481                if (!conn) {
4482                        BT_ERR("No memory for new connection");
4483                        goto unlock;
4484                }
4485
4486                conn->dst_type = ev->bdaddr_type;
4487
4488                /* If we didn't have a hci_conn object previously
4489                 * but we're in master role this must be something
4490                 * initiated using a white list. Since white list based
4491                 * connections are not "first class citizens" we don't
4492                 * have full tracking of them. Therefore, we go ahead
4493                 * with a "best effort" approach of determining the
4494                 * initiator address based on the HCI_PRIVACY flag.
4495                 */
4496                if (conn->out) {
4497                        conn->resp_addr_type = ev->bdaddr_type;
4498                        bacpy(&conn->resp_addr, &ev->bdaddr);
4499                        if (hci_dev_test_flag(hdev, HCI_PRIVACY)) {
4500                                conn->init_addr_type = ADDR_LE_DEV_RANDOM;
4501                                bacpy(&conn->init_addr, &hdev->rpa);
4502                        } else {
4503                                hci_copy_identity_address(hdev,
4504                                                          &conn->init_addr,
4505                                                          &conn->init_addr_type);
4506                        }
4507                }
4508        } else {
4509                cancel_delayed_work(&conn->le_conn_timeout);
4510        }
4511
4512        if (!conn->out) {
4513                /* Set the responder (our side) address type based on
4514                 * the advertising address type.
4515                 */
4516                conn->resp_addr_type = hdev->adv_addr_type;
4517                if (hdev->adv_addr_type == ADDR_LE_DEV_RANDOM)
4518                        bacpy(&conn->resp_addr, &hdev->random_addr);
4519                else
4520                        bacpy(&conn->resp_addr, &hdev->bdaddr);
4521
4522                conn->init_addr_type = ev->bdaddr_type;
4523                bacpy(&conn->init_addr, &ev->bdaddr);
4524
4525                /* For incoming connections, set the default minimum
4526                 * and maximum connection interval. They will be used
4527                 * to check if the parameters are in range and if not
4528                 * trigger the connection update procedure.
4529                 */
4530                conn->le_conn_min_interval = hdev->le_conn_min_interval;
4531                conn->le_conn_max_interval = hdev->le_conn_max_interval;
4532        }
4533
4534        /* Lookup the identity address from the stored connection
4535         * address and address type.
4536         *
4537         * When establishing connections to an identity address, the
4538         * connection procedure will store the resolvable random
4539         * address first. Now if it can be converted back into the
4540         * identity address, start using the identity address from
4541         * now on.
4542         */
4543        irk = hci_get_irk(hdev, &conn->dst, conn->dst_type);
4544        if (irk) {
4545                bacpy(&conn->dst, &irk->bdaddr);
4546                conn->dst_type = irk->addr_type;
4547        }
4548
4549        if (ev->status) {
4550                hci_le_conn_failed(conn, ev->status);
4551                goto unlock;
4552        }
4553
4554        if (conn->dst_type == ADDR_LE_DEV_PUBLIC)
4555                addr_type = BDADDR_LE_PUBLIC;
4556        else
4557                addr_type = BDADDR_LE_RANDOM;
4558
4559        /* Drop the connection if the device is blocked */
4560        if (hci_bdaddr_list_lookup(&hdev->blacklist, &conn->dst, addr_type)) {
4561                hci_conn_drop(conn);
4562                goto unlock;
4563        }
4564
4565        if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
4566                mgmt_device_connected(hdev, conn, 0, NULL, 0);
4567
4568        conn->sec_level = BT_SECURITY_LOW;
4569        conn->handle = __le16_to_cpu(ev->handle);
4570        conn->state = BT_CONFIG;
4571
4572        conn->le_conn_interval = le16_to_cpu(ev->interval);
4573        conn->le_conn_latency = le16_to_cpu(ev->latency);
4574        conn->le_supv_timeout = le16_to_cpu(ev->supervision_timeout);
4575
4576        hci_debugfs_create_conn(conn);
4577        hci_conn_add_sysfs(conn);
4578
4579        if (!ev->status) {
4580                /* The remote features procedure is defined for master
4581                 * role only. So only in case of an initiated connection
4582                 * request the remote features.
4583                 *
4584                 * If the local controller supports slave-initiated features
4585                 * exchange, then requesting the remote features in slave
4586                 * role is possible. Otherwise just transition into the
4587                 * connected state without requesting the remote features.
4588                 */
4589                if (conn->out ||
4590                    (hdev->le_features[0] & HCI_LE_SLAVE_FEATURES)) {
4591                        struct hci_cp_le_read_remote_features cp;
4592
4593                        cp.handle = __cpu_to_le16(conn->handle);
4594
4595                        hci_send_cmd(hdev, HCI_OP_LE_READ_REMOTE_FEATURES,
4596                                     sizeof(cp), &cp);
4597
4598                        hci_conn_hold(conn);
4599                } else {
4600                        conn->state = BT_CONNECTED;
4601                        hci_connect_cfm(conn, ev->status);
4602                }
4603        } else {
4604                hci_connect_cfm(conn, ev->status);
4605        }
4606
4607        params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst,
4608                                           conn->dst_type);
4609        if (params) {
4610                list_del_init(&params->action);
4611                if (params->conn) {
4612                        hci_conn_drop(params->conn);
4613                        hci_conn_put(params->conn);
4614                        params->conn = NULL;
4615                }
4616        }
4617
4618unlock:
4619        hci_update_background_scan(hdev);
4620        hci_dev_unlock(hdev);
4621}
4622
4623static void hci_le_conn_update_complete_evt(struct hci_dev *hdev,
4624                                            struct sk_buff *skb)
4625{
4626        struct hci_ev_le_conn_update_complete *ev = (void *) skb->data;
4627        struct hci_conn *conn;
4628
4629        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4630
4631        if (ev->status)
4632                return;
4633
4634        hci_dev_lock(hdev);
4635
4636        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4637        if (conn) {
4638                conn->le_conn_interval = le16_to_cpu(ev->interval);
4639                conn->le_conn_latency = le16_to_cpu(ev->latency);
4640                conn->le_supv_timeout = le16_to_cpu(ev->supervision_timeout);
4641        }
4642
4643        hci_dev_unlock(hdev);
4644}
4645
4646/* This function requires the caller holds hdev->lock */
4647static struct hci_conn *check_pending_le_conn(struct hci_dev *hdev,
4648                                              bdaddr_t *addr,
4649                                              u8 addr_type, u8 adv_type)
4650{
4651        struct hci_conn *conn;
4652        struct hci_conn_params *params;
4653
4654        /* If the event is not connectable don't proceed further */
4655        if (adv_type != LE_ADV_IND && adv_type != LE_ADV_DIRECT_IND)
4656                return NULL;
4657
4658        /* Ignore if the device is blocked */
4659        if (hci_bdaddr_list_lookup(&hdev->blacklist, addr, addr_type))
4660                return NULL;
4661
4662        /* Most controller will fail if we try to create new connections
4663         * while we have an existing one in slave role.
4664         */
4665        if (hdev->conn_hash.le_num_slave > 0)
4666                return NULL;
4667
4668        /* If we're not connectable only connect devices that we have in
4669         * our pend_le_conns list.
4670         */
4671        params = hci_pend_le_action_lookup(&hdev->pend_le_conns, addr,
4672                                           addr_type);
4673        if (!params)
4674                return NULL;
4675
4676        if (!params->explicit_connect) {
4677                switch (params->auto_connect) {
4678                case HCI_AUTO_CONN_DIRECT:
4679                        /* Only devices advertising with ADV_DIRECT_IND are
4680                         * triggering a connection attempt. This is allowing
4681                         * incoming connections from slave devices.
4682                         */
4683                        if (adv_type != LE_ADV_DIRECT_IND)
4684                                return NULL;
4685                        break;
4686                case HCI_AUTO_CONN_ALWAYS:
4687                        /* Devices advertising with ADV_IND or ADV_DIRECT_IND
4688                         * are triggering a connection attempt. This means
4689                         * that incoming connectioms from slave device are
4690                         * accepted and also outgoing connections to slave
4691                         * devices are established when found.
4692                         */
4693                        break;
4694                default:
4695                        return NULL;
4696                }
4697        }
4698
4699        conn = hci_connect_le(hdev, addr, addr_type, BT_SECURITY_LOW,
4700                              HCI_LE_AUTOCONN_TIMEOUT, HCI_ROLE_MASTER);
4701        if (!IS_ERR(conn)) {
4702                /* If HCI_AUTO_CONN_EXPLICIT is set, conn is already owned
4703                 * by higher layer that tried to connect, if no then
4704                 * store the pointer since we don't really have any
4705                 * other owner of the object besides the params that
4706                 * triggered it. This way we can abort the connection if
4707                 * the parameters get removed and keep the reference
4708                 * count consistent once the connection is established.
4709                 */
4710
4711                if (!params->explicit_connect)
4712                        params->conn = hci_conn_get(conn);
4713
4714                return conn;
4715        }
4716
4717        switch (PTR_ERR(conn)) {
4718        case -EBUSY:
4719                /* If hci_connect() returns -EBUSY it means there is already
4720                 * an LE connection attempt going on. Since controllers don't
4721                 * support more than one connection attempt at the time, we
4722                 * don't consider this an error case.
4723                 */
4724                break;
4725        default:
4726                BT_DBG("Failed to connect: err %ld", PTR_ERR(conn));
4727                return NULL;
4728        }
4729
4730        return NULL;
4731}
4732
4733static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
4734                               u8 bdaddr_type, bdaddr_t *direct_addr,
4735                               u8 direct_addr_type, s8 rssi, u8 *data, u8 len)
4736{
4737        struct discovery_state *d = &hdev->discovery;
4738        struct smp_irk *irk;
4739        struct hci_conn *conn;
4740        bool match;
4741        u32 flags;
4742        u8 *ptr, real_len;
4743
4744        switch (type) {
4745        case LE_ADV_IND:
4746        case LE_ADV_DIRECT_IND:
4747        case LE_ADV_SCAN_IND:
4748        case LE_ADV_NONCONN_IND:
4749        case LE_ADV_SCAN_RSP:
4750                break;
4751        default:
4752                BT_ERR_RATELIMITED("Unknown advetising packet type: 0x%02x",
4753                                   type);
4754                return;
4755        }
4756
4757        /* Find the end of the data in case the report contains padded zero
4758         * bytes at the end causing an invalid length value.
4759         *
4760         * When data is NULL, len is 0 so there is no need for extra ptr
4761         * check as 'ptr < data + 0' is already false in such case.
4762         */
4763        for (ptr = data; ptr < data + len && *ptr; ptr += *ptr + 1) {
4764                if (ptr + 1 + *ptr > data + len)
4765                        break;
4766        }
4767
4768        real_len = ptr - data;
4769
4770        /* Adjust for actual length */
4771        if (len != real_len) {
4772                BT_ERR_RATELIMITED("%s advertising data length corrected",
4773                                   hdev->name);
4774                len = real_len;
4775        }
4776
4777        /* If the direct address is present, then this report is from
4778         * a LE Direct Advertising Report event. In that case it is
4779         * important to see if the address is matching the local
4780         * controller address.
4781         */
4782        if (direct_addr) {
4783                /* Only resolvable random addresses are valid for these
4784                 * kind of reports and others can be ignored.
4785                 */
4786                if (!hci_bdaddr_is_rpa(direct_addr, direct_addr_type))
4787                        return;
4788
4789                /* If the controller is not using resolvable random
4790                 * addresses, then this report can be ignored.
4791                 */
4792                if (!hci_dev_test_flag(hdev, HCI_PRIVACY))
4793                        return;
4794
4795                /* If the local IRK of the controller does not match
4796                 * with the resolvable random address provided, then
4797                 * this report can be ignored.
4798                 */
4799                if (!smp_irk_matches(hdev, hdev->irk, direct_addr))
4800                        return;
4801        }
4802
4803        /* Check if we need to convert to identity address */
4804        irk = hci_get_irk(hdev, bdaddr, bdaddr_type);
4805        if (irk) {
4806                bdaddr = &irk->bdaddr;
4807                bdaddr_type = irk->addr_type;
4808        }
4809
4810        /* Check if we have been requested to connect to this device */
4811        conn = check_pending_le_conn(hdev, bdaddr, bdaddr_type, type);
4812        if (conn && type == LE_ADV_IND) {
4813                /* Store report for later inclusion by
4814                 * mgmt_device_connected
4815                 */
4816                memcpy(conn->le_adv_data, data, len);
4817                conn->le_adv_data_len = len;
4818        }
4819
4820        /* Passive scanning shouldn't trigger any device found events,
4821         * except for devices marked as CONN_REPORT for which we do send
4822         * device found events.
4823         */
4824        if (hdev->le_scan_type == LE_SCAN_PASSIVE) {
4825                if (type == LE_ADV_DIRECT_IND)
4826                        return;
4827
4828                if (!hci_pend_le_action_lookup(&hdev->pend_le_reports,
4829                                               bdaddr, bdaddr_type))
4830                        return;
4831
4832                if (type == LE_ADV_NONCONN_IND || type == LE_ADV_SCAN_IND)
4833                        flags = MGMT_DEV_FOUND_NOT_CONNECTABLE;
4834                else
4835                        flags = 0;
4836                mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4837                                  rssi, flags, data, len, NULL, 0);
4838                return;
4839        }
4840
4841        /* When receiving non-connectable or scannable undirected
4842         * advertising reports, this means that the remote device is
4843         * not connectable and then clearly indicate this in the
4844         * device found event.
4845         *
4846         * When receiving a scan response, then there is no way to
4847         * know if the remote device is connectable or not. However
4848         * since scan responses are merged with a previously seen
4849         * advertising report, the flags field from that report
4850         * will be used.
4851         *
4852         * In the really unlikely case that a controller get confused
4853         * and just sends a scan response event, then it is marked as
4854         * not connectable as well.
4855         */
4856        if (type == LE_ADV_NONCONN_IND || type == LE_ADV_SCAN_IND ||
4857            type == LE_ADV_SCAN_RSP)
4858                flags = MGMT_DEV_FOUND_NOT_CONNECTABLE;
4859        else
4860                flags = 0;
4861
4862        /* If there's nothing pending either store the data from this
4863         * event or send an immediate device found event if the data
4864         * should not be stored for later.
4865         */
4866        if (!has_pending_adv_report(hdev)) {
4867                /* If the report will trigger a SCAN_REQ store it for
4868                 * later merging.
4869                 */
4870                if (type == LE_ADV_IND || type == LE_ADV_SCAN_IND) {
4871                        store_pending_adv_report(hdev, bdaddr, bdaddr_type,
4872                                                 rssi, flags, data, len);
4873                        return;
4874                }
4875
4876                mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4877                                  rssi, flags, data, len, NULL, 0);
4878                return;
4879        }
4880
4881        /* Check if the pending report is for the same device as the new one */
4882        match = (!bacmp(bdaddr, &d->last_adv_addr) &&
4883                 bdaddr_type == d->last_adv_addr_type);
4884
4885        /* If the pending data doesn't match this report or this isn't a
4886         * scan response (e.g. we got a duplicate ADV_IND) then force
4887         * sending of the pending data.
4888         */
4889        if (type != LE_ADV_SCAN_RSP || !match) {
4890                /* Send out whatever is in the cache, but skip duplicates */
4891                if (!match)
4892                        mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
4893                                          d->last_adv_addr_type, NULL,
4894                                          d->last_adv_rssi, d->last_adv_flags,
4895                                          d->last_adv_data,
4896                                          d->last_adv_data_len, NULL, 0);
4897
4898                /* If the new report will trigger a SCAN_REQ store it for
4899                 * later merging.
4900                 */
4901                if (type == LE_ADV_IND || type == LE_ADV_SCAN_IND) {
4902                        store_pending_adv_report(hdev, bdaddr, bdaddr_type,
4903                                                 rssi, flags, data, len);
4904                        return;
4905                }
4906
4907                /* The advertising reports cannot be merged, so clear
4908                 * the pending report and send out a device found event.
4909                 */
4910                clear_pending_adv_report(hdev);
4911                mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4912                                  rssi, flags, data, len, NULL, 0);
4913                return;
4914        }
4915
4916        /* If we get here we've got a pending ADV_IND or ADV_SCAN_IND and
4917         * the new event is a SCAN_RSP. We can therefore proceed with
4918         * sending a merged device found event.
4919         */
4920        mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
4921                          d->last_adv_addr_type, NULL, rssi, d->last_adv_flags,
4922                          d->last_adv_data, d->last_adv_data_len, data, len);
4923        clear_pending_adv_report(hdev);
4924}
4925
4926static void hci_le_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
4927{
4928        u8 num_reports = skb->data[0];
4929        void *ptr = &skb->data[1];
4930
4931        hci_dev_lock(hdev);
4932
4933        while (num_reports--) {
4934                struct hci_ev_le_advertising_info *ev = ptr;
4935                s8 rssi;
4936
4937                rssi = ev->data[ev->length];
4938                process_adv_report(hdev, ev->evt_type, &ev->bdaddr,
4939                                   ev->bdaddr_type, NULL, 0, rssi,
4940                                   ev->data, ev->length);
4941
4942                ptr += sizeof(*ev) + ev->length + 1;
4943        }
4944
4945        hci_dev_unlock(hdev);
4946}
4947
4948static void hci_le_remote_feat_complete_evt(struct hci_dev *hdev,
4949                                            struct sk_buff *skb)
4950{
4951        struct hci_ev_le_remote_feat_complete *ev = (void *)skb->data;
4952        struct hci_conn *conn;
4953
4954        BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4955
4956        hci_dev_lock(hdev);
4957
4958        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4959        if (conn) {
4960                if (!ev->status)
4961                        memcpy(conn->features[0], ev->features, 8);
4962
4963                if (conn->state == BT_CONFIG) {
4964                        __u8 status;
4965
4966                        /* If the local controller supports slave-initiated
4967                         * features exchange, but the remote controller does
4968                         * not, then it is possible that the error code 0x1a
4969                         * for unsupported remote feature gets returned.
4970                         *
4971                         * In this specific case, allow the connection to
4972                         * transition into connected state and mark it as
4973                         * successful.
4974                         */
4975                        if ((hdev->le_features[0] & HCI_LE_SLAVE_FEATURES) &&
4976                            !conn->out && ev->status == 0x1a)
4977                                status = 0x00;
4978                        else
4979                                status = ev->status;
4980
4981                        conn->state = BT_CONNECTED;
4982                        hci_connect_cfm(conn, status);
4983                        hci_conn_drop(conn);
4984                }
4985        }
4986
4987        hci_dev_unlock(hdev);
4988}
4989
4990static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
4991{
4992        struct hci_ev_le_ltk_req *ev = (void *) skb->data;
4993        struct hci_cp_le_ltk_reply cp;
4994        struct hci_cp_le_ltk_neg_reply neg;
4995        struct hci_conn *conn;
4996        struct smp_ltk *ltk;
4997
4998        BT_DBG("%s handle 0x%4.4x", hdev->name, __le16_to_cpu(ev->handle));
4999
5000        hci_dev_lock(hdev);
5001
5002        conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
5003        if (conn == NULL)
5004                goto not_found;
5005
5006        ltk = hci_find_ltk(hdev, &conn->dst, conn->dst_type, conn->role);
5007        if (!ltk)
5008                goto not_found;
5009
5010        if (smp_ltk_is_sc(ltk)) {
5011                /* With SC both EDiv and Rand are set to zero */
5012                if (ev->ediv || ev->rand)
5013                        goto not_found;
5014        } else {
5015                /* For non-SC keys check that EDiv and Rand match */
5016                if (ev->ediv != ltk->ediv || ev->rand != ltk->rand)
5017                        goto not_found;
5018        }
5019
5020        memcpy(cp.ltk, ltk->val, ltk->enc_size);
5021        memset(cp.ltk + ltk->enc_size, 0, sizeof(cp.ltk) - ltk->enc_size);
5022        cp.handle = cpu_to_le16(conn->handle);
5023
5024        conn->pending_sec_level = smp_ltk_sec_level(ltk);
5025
5026        conn->enc_key_size = ltk->enc_size;
5027
5028        hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
5029
5030        /* Ref. Bluetooth Core SPEC pages 1975 and 2004. STK is a
5031         * temporary key used to encrypt a connection following
5032         * pairing. It is used during the Encrypted Session Setup to
5033         * distribute the keys. Later, security can be re-established
5034         * using a distributed LTK.
5035         */
5036        if (ltk->type == SMP_STK) {
5037                set_bit(HCI_CONN_STK_ENCRYPT, &conn->flags);
5038                list_del_rcu(&ltk->list);
5039                kfree_rcu(ltk, rcu);
5040        } else {
5041                clear_bit(HCI_CONN_STK_ENCRYPT, &conn->flags);
5042        }
5043
5044        hci_dev_unlock(hdev);
5045
5046        return;
5047
5048not_found:
5049        neg.handle = ev->handle;
5050        hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
5051        hci_dev_unlock(hdev);
5052}
5053
5054static void send_conn_param_neg_reply(struct hci_dev *hdev, u16 handle,
5055                                      u8 reason)
5056{
5057        struct hci_cp_le_conn_param_req_neg_reply cp;
5058
5059        cp.handle = cpu_to_le16(handle);
5060        cp.reason = reason;
5061
5062        hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY, sizeof(cp),
5063                     &cp);
5064}
5065
5066static void hci_le_remote_conn_param_req_evt(struct hci_dev *hdev,
5067                                             struct sk_buff *skb)
5068{
5069        struct hci_ev_le_remote_conn_param_req *ev = (void *) skb->data;
5070        struct hci_cp_le_conn_param_req_reply cp;
5071        struct hci_conn *hcon;
5072        u16 handle, min, max, latency, timeout;
5073
5074        handle = le16_to_cpu(ev->handle);
5075        min = le16_to_cpu(ev->interval_min);
5076        max = le16_to_cpu(ev->interval_max);
5077        latency = le16_to_cpu(ev->latency);
5078        timeout = le16_to_cpu(ev->timeout);
5079
5080        hcon = hci_conn_hash_lookup_handle(hdev, handle);
5081        if (!hcon || hcon->state != BT_CONNECTED)
5082                return send_conn_param_neg_reply(hdev, handle,
5083                                                 HCI_ERROR_UNKNOWN_CONN_ID);
5084
5085        if (hci_check_conn_params(min, max, latency, timeout))
5086                return send_conn_param_neg_reply(hdev, handle,
5087                                                 HCI_ERROR_INVALID_LL_PARAMS);
5088
5089        if (hcon->role == HCI_ROLE_MASTER) {
5090                struct hci_conn_params *params;
5091                u8 store_hint;
5092
5093                hci_dev_lock(hdev);
5094
5095                params = hci_conn_params_lookup(hdev, &hcon->dst,
5096                                                hcon->dst_type);
5097                if (params) {
5098                        params->conn_min_interval = min;
5099                        params->conn_max_interval = max;
5100                        params->conn_latency = latency;
5101                        params->supervision_timeout = timeout;
5102                        store_hint = 0x01;
5103                } else{
5104                        store_hint = 0x00;
5105                }
5106
5107                hci_dev_unlock(hdev);
5108
5109                mgmt_new_conn_param(hdev, &hcon->dst, hcon->dst_type,
5110                                    store_hint, min, max, latency, timeout);
5111        }
5112
5113        cp.handle = ev->handle;
5114        cp.interval_min = ev->interval_min;
5115        cp.interval_max = ev->interval_max;
5116        cp.latency = ev->latency;
5117        cp.timeout = ev->timeout;
5118        cp.min_ce_len = 0;
5119        cp.max_ce_len = 0;
5120
5121        hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_REPLY, sizeof(cp), &cp);
5122}
5123
5124static void hci_le_direct_adv_report_evt(struct hci_dev *hdev,
5125                                         struct sk_buff *skb)
5126{
5127        u8 num_reports = skb->data[0];
5128        void *ptr = &skb->data[1];
5129
5130        hci_dev_lock(hdev);
5131
5132        while (num_reports--) {
5133                struct hci_ev_le_direct_adv_info *ev = ptr;
5134
5135                process_adv_report(hdev, ev->evt_type, &ev->bdaddr,
5136                                   ev->bdaddr_type, &ev->direct_addr,
5137                                   ev->direct_addr_type, ev->rssi, NULL, 0);
5138
5139                ptr += sizeof(*ev);
5140        }
5141
5142        hci_dev_unlock(hdev);
5143}
5144
5145static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
5146{
5147        struct hci_ev_le_meta *le_ev = (void *) skb->data;
5148
5149        skb_pull(skb, sizeof(*le_ev));
5150
5151        switch (le_ev->subevent) {
5152        case HCI_EV_LE_CONN_COMPLETE:
5153                hci_le_conn_complete_evt(hdev, skb);
5154                break;
5155
5156        case HCI_EV_LE_CONN_UPDATE_COMPLETE:
5157                hci_le_conn_update_complete_evt(hdev, skb);
5158                break;
5159
5160        case HCI_EV_LE_ADVERTISING_REPORT:
5161                hci_le_adv_report_evt(hdev, skb);
5162                break;
5163
5164        case HCI_EV_LE_REMOTE_FEAT_COMPLETE:
5165                hci_le_remote_feat_complete_evt(hdev, skb);
5166                break;
5167
5168        case HCI_EV_LE_LTK_REQ:
5169                hci_le_ltk_request_evt(hdev, skb);
5170                break;
5171
5172        case HCI_EV_LE_REMOTE_CONN_PARAM_REQ:
5173                hci_le_remote_conn_param_req_evt(hdev, skb);
5174                break;
5175
5176        case HCI_EV_LE_DIRECT_ADV_REPORT:
5177                hci_le_direct_adv_report_evt(hdev, skb);
5178                break;
5179
5180        default:
5181                break;
5182        }
5183}
5184
5185static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode,
5186                                 u8 event, struct sk_buff *skb)
5187{
5188        struct hci_ev_cmd_complete *ev;
5189        struct hci_event_hdr *hdr;
5190
5191        if (!skb)
5192                return false;
5193
5194        if (skb->len < sizeof(*hdr)) {
5195                BT_ERR("Too short HCI event");
5196                return false;
5197        }
5198
5199        hdr = (void *) skb->data;
5200        skb_pull(skb, HCI_EVENT_HDR_SIZE);
5201
5202        if (event) {
5203                if (hdr->evt != event)
5204                        return false;
5205                return true;
5206        }
5207
5208        if (hdr->evt != HCI_EV_CMD_COMPLETE) {
5209                BT_DBG("Last event is not cmd complete (0x%2.2x)", hdr->evt);
5210                return false;
5211        }
5212
5213        if (skb->len < sizeof(*ev)) {
5214                BT_ERR("Too short cmd_complete event");
5215                return false;
5216        }
5217
5218        ev = (void *) skb->data;
5219        skb_pull(skb, sizeof(*ev));
5220
5221        if (opcode != __le16_to_cpu(ev->opcode)) {
5222                BT_DBG("opcode doesn't match (0x%2.2x != 0x%2.2x)", opcode,
5223                       __le16_to_cpu(ev->opcode));
5224                return false;
5225        }
5226
5227        return true;
5228}
5229
5230void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
5231{
5232        struct hci_event_hdr *hdr = (void *) skb->data;
5233        hci_req_complete_t req_complete = NULL;
5234        hci_req_complete_skb_t req_complete_skb = NULL;
5235        struct sk_buff *orig_skb = NULL;
5236        u8 status = 0, event = hdr->evt, req_evt = 0;
5237        u16 opcode = HCI_OP_NOP;
5238
5239        if (hdev->sent_cmd && bt_cb(hdev->sent_cmd)->hci.req_event == event) {
5240                struct hci_command_hdr *cmd_hdr = (void *) hdev->sent_cmd->data;
5241                opcode = __le16_to_cpu(cmd_hdr->opcode);
5242                hci_req_cmd_complete(hdev, opcode, status, &req_complete,
5243                                     &req_complete_skb);
5244                req_evt = event;
5245        }
5246
5247        /* If it looks like we might end up having to call
5248         * req_complete_skb, store a pristine copy of the skb since the
5249         * various handlers may modify the original one through
5250         * skb_pull() calls, etc.
5251         */
5252        if (req_complete_skb || event == HCI_EV_CMD_STATUS ||
5253            event == HCI_EV_CMD_COMPLETE)
5254                orig_skb = skb_clone(skb, GFP_KERNEL);
5255
5256        skb_pull(skb, HCI_EVENT_HDR_SIZE);
5257
5258        switch (event) {
5259        case HCI_EV_INQUIRY_COMPLETE:
5260                hci_inquiry_complete_evt(hdev, skb);
5261                break;
5262
5263        case HCI_EV_INQUIRY_RESULT:
5264                hci_inquiry_result_evt(hdev, skb);
5265                break;
5266
5267        case HCI_EV_CONN_COMPLETE:
5268                hci_conn_complete_evt(hdev, skb);
5269                break;
5270
5271        case HCI_EV_CONN_REQUEST:
5272                hci_conn_request_evt(hdev, skb);
5273                break;
5274
5275        case HCI_EV_DISCONN_COMPLETE:
5276                hci_disconn_complete_evt(hdev, skb);
5277                break;
5278
5279        case HCI_EV_AUTH_COMPLETE:
5280                hci_auth_complete_evt(hdev, skb);
5281                break;
5282
5283        case HCI_EV_REMOTE_NAME:
5284                hci_remote_name_evt(hdev, skb);
5285                break;
5286
5287        case HCI_EV_ENCRYPT_CHANGE:
5288                hci_encrypt_change_evt(hdev, skb);
5289                break;
5290
5291        case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
5292                hci_change_link_key_complete_evt(hdev, skb);
5293                break;
5294
5295        case HCI_EV_REMOTE_FEATURES:
5296                hci_remote_features_evt(hdev, skb);
5297                break;
5298
5299        case HCI_EV_CMD_COMPLETE:
5300                hci_cmd_complete_evt(hdev, skb, &opcode, &status,
5301                                     &req_complete, &req_complete_skb);
5302                break;
5303
5304        case HCI_EV_CMD_STATUS:
5305                hci_cmd_status_evt(hdev, skb, &opcode, &status, &req_complete,
5306                                   &req_complete_skb);
5307                break;
5308
5309        case HCI_EV_HARDWARE_ERROR:
5310                hci_hardware_error_evt(hdev, skb);
5311                break;
5312
5313        case HCI_EV_ROLE_CHANGE:
5314                hci_role_change_evt(hdev, skb);
5315                break;
5316
5317        case HCI_EV_NUM_COMP_PKTS:
5318                hci_num_comp_pkts_evt(hdev, skb);
5319                break;
5320
5321        case HCI_EV_MODE_CHANGE:
5322                hci_mode_change_evt(hdev, skb);
5323                break;
5324
5325        case HCI_EV_PIN_CODE_REQ:
5326                hci_pin_code_request_evt(hdev, skb);
5327                break;
5328
5329        case HCI_EV_LINK_KEY_REQ:
5330                hci_link_key_request_evt(hdev, skb);
5331                break;
5332
5333        case HCI_EV_LINK_KEY_NOTIFY:
5334                hci_link_key_notify_evt(hdev, skb);
5335                break;
5336
5337        case HCI_EV_CLOCK_OFFSET:
5338                hci_clock_offset_evt(hdev, skb);
5339                break;
5340
5341        case HCI_EV_PKT_TYPE_CHANGE:
5342                hci_pkt_type_change_evt(hdev, skb);
5343                break;
5344
5345        case HCI_EV_PSCAN_REP_MODE:
5346                hci_pscan_rep_mode_evt(hdev, skb);
5347                break;
5348
5349        case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
5350                hci_inquiry_result_with_rssi_evt(hdev, skb);
5351                break;
5352
5353        case HCI_EV_REMOTE_EXT_FEATURES:
5354                hci_remote_ext_features_evt(hdev, skb);
5355                break;
5356
5357        case HCI_EV_SYNC_CONN_COMPLETE:
5358                hci_sync_conn_complete_evt(hdev, skb);
5359                break;
5360
5361        case HCI_EV_EXTENDED_INQUIRY_RESULT:
5362                hci_extended_inquiry_result_evt(hdev, skb);
5363                break;
5364
5365        case HCI_EV_KEY_REFRESH_COMPLETE:
5366                hci_key_refresh_complete_evt(hdev, skb);
5367                break;
5368
5369        case HCI_EV_IO_CAPA_REQUEST:
5370                hci_io_capa_request_evt(hdev, skb);
5371                break;
5372
5373        case HCI_EV_IO_CAPA_REPLY:
5374                hci_io_capa_reply_evt(hdev, skb);
5375                break;
5376
5377        case HCI_EV_USER_CONFIRM_REQUEST:
5378                hci_user_confirm_request_evt(hdev, skb);
5379                break;
5380
5381        case HCI_EV_USER_PASSKEY_REQUEST:
5382                hci_user_passkey_request_evt(hdev, skb);
5383                break;
5384
5385        case HCI_EV_USER_PASSKEY_NOTIFY:
5386                hci_user_passkey_notify_evt(hdev, skb);
5387                break;
5388
5389        case HCI_EV_KEYPRESS_NOTIFY:
5390                hci_keypress_notify_evt(hdev, skb);
5391                break;
5392
5393        case HCI_EV_SIMPLE_PAIR_COMPLETE:
5394                hci_simple_pair_complete_evt(hdev, skb);
5395                break;
5396
5397        case HCI_EV_REMOTE_HOST_FEATURES:
5398                hci_remote_host_features_evt(hdev, skb);
5399                break;
5400
5401        case HCI_EV_LE_META:
5402                hci_le_meta_evt(hdev, skb);
5403                break;
5404
5405        case HCI_EV_REMOTE_OOB_DATA_REQUEST:
5406                hci_remote_oob_data_request_evt(hdev, skb);
5407                break;
5408
5409#if IS_ENABLED(CONFIG_BT_HS)
5410        case HCI_EV_CHANNEL_SELECTED:
5411                hci_chan_selected_evt(hdev, skb);
5412                break;
5413
5414        case HCI_EV_PHY_LINK_COMPLETE:
5415                hci_phy_link_complete_evt(hdev, skb);
5416                break;
5417
5418        case HCI_EV_LOGICAL_LINK_COMPLETE:
5419                hci_loglink_complete_evt(hdev, skb);
5420                break;
5421
5422        case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE:
5423                hci_disconn_loglink_complete_evt(hdev, skb);
5424                break;
5425
5426        case HCI_EV_DISCONN_PHY_LINK_COMPLETE:
5427                hci_disconn_phylink_complete_evt(hdev, skb);
5428                break;
5429#endif
5430
5431        case HCI_EV_NUM_COMP_BLOCKS:
5432                hci_num_comp_blocks_evt(hdev, skb);
5433                break;
5434
5435        default:
5436                BT_DBG("%s event 0x%2.2x", hdev->name, event);
5437                break;
5438        }
5439
5440        if (req_complete) {
5441                req_complete(hdev, status, opcode);
5442        } else if (req_complete_skb) {
5443                if (!hci_get_cmd_complete(hdev, opcode, req_evt, orig_skb)) {
5444                        kfree_skb(orig_skb);
5445                        orig_skb = NULL;
5446                }
5447                req_complete_skb(hdev, status, opcode, orig_skb);
5448        }
5449
5450        kfree_skb(orig_skb);
5451        kfree_skb(skb);
5452        hdev->stat.evt_rx++;
5453}
5454