linux/net/bluetooth/l2cap_core.c
<<
>>
Prefs
   1/*
   2   BlueZ - Bluetooth protocol stack for Linux
   3   Copyright (C) 2000-2001 Qualcomm Incorporated
   4   Copyright (C) 2009-2010 Gustavo F. Padovan <gustavo@padovan.org>
   5   Copyright (C) 2010 Google Inc.
   6   Copyright (C) 2011 ProFUSION Embedded Systems
   7   Copyright (c) 2012 Code Aurora Forum.  All rights reserved.
   8
   9   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
  10
  11   This program is free software; you can redistribute it and/or modify
  12   it under the terms of the GNU General Public License version 2 as
  13   published by the Free Software Foundation;
  14
  15   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  16   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
  18   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
  19   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
  20   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  21   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  22   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  23
  24   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
  25   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
  26   SOFTWARE IS DISCLAIMED.
  27*/
  28
  29/* Bluetooth L2CAP core. */
  30
  31#include <linux/module.h>
  32
  33#include <linux/debugfs.h>
  34#include <linux/crc16.h>
  35
  36#include <net/bluetooth/bluetooth.h>
  37#include <net/bluetooth/hci_core.h>
  38#include <net/bluetooth/l2cap.h>
  39#include <net/bluetooth/smp.h>
  40#include <net/bluetooth/a2mp.h>
  41#include <net/bluetooth/amp.h>
  42
  43bool disable_ertm;
  44
  45static u32 l2cap_feat_mask = L2CAP_FEAT_FIXED_CHAN;
  46static u8 l2cap_fixed_chan[8] = { L2CAP_FC_L2CAP, };
  47
  48static LIST_HEAD(chan_list);
  49static DEFINE_RWLOCK(chan_list_lock);
  50
  51static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn,
  52                                       u8 code, u8 ident, u16 dlen, void *data);
  53static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
  54                           void *data);
  55static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data);
  56static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err);
  57
  58static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
  59                     struct sk_buff_head *skbs, u8 event);
  60
  61/* ---- L2CAP channels ---- */
  62
  63static struct l2cap_chan *__l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
  64                                                   u16 cid)
  65{
  66        struct l2cap_chan *c;
  67
  68        list_for_each_entry(c, &conn->chan_l, list) {
  69                if (c->dcid == cid)
  70                        return c;
  71        }
  72        return NULL;
  73}
  74
  75static struct l2cap_chan *__l2cap_get_chan_by_scid(struct l2cap_conn *conn,
  76                                                   u16 cid)
  77{
  78        struct l2cap_chan *c;
  79
  80        list_for_each_entry(c, &conn->chan_l, list) {
  81                if (c->scid == cid)
  82                        return c;
  83        }
  84        return NULL;
  85}
  86
  87/* Find channel with given SCID.
  88 * Returns locked channel. */
  89static struct l2cap_chan *l2cap_get_chan_by_scid(struct l2cap_conn *conn,
  90                                                 u16 cid)
  91{
  92        struct l2cap_chan *c;
  93
  94        mutex_lock(&conn->chan_lock);
  95        c = __l2cap_get_chan_by_scid(conn, cid);
  96        if (c)
  97                l2cap_chan_lock(c);
  98        mutex_unlock(&conn->chan_lock);
  99
 100        return c;
 101}
 102
 103/* Find channel with given DCID.
 104 * Returns locked channel.
 105 */
 106static struct l2cap_chan *l2cap_get_chan_by_dcid(struct l2cap_conn *conn,
 107                                                 u16 cid)
 108{
 109        struct l2cap_chan *c;
 110
 111        mutex_lock(&conn->chan_lock);
 112        c = __l2cap_get_chan_by_dcid(conn, cid);
 113        if (c)
 114                l2cap_chan_lock(c);
 115        mutex_unlock(&conn->chan_lock);
 116
 117        return c;
 118}
 119
 120static struct l2cap_chan *__l2cap_get_chan_by_ident(struct l2cap_conn *conn,
 121                                                    u8 ident)
 122{
 123        struct l2cap_chan *c;
 124
 125        list_for_each_entry(c, &conn->chan_l, list) {
 126                if (c->ident == ident)
 127                        return c;
 128        }
 129        return NULL;
 130}
 131
 132static struct l2cap_chan *l2cap_get_chan_by_ident(struct l2cap_conn *conn,
 133                                                  u8 ident)
 134{
 135        struct l2cap_chan *c;
 136
 137        mutex_lock(&conn->chan_lock);
 138        c = __l2cap_get_chan_by_ident(conn, ident);
 139        if (c)
 140                l2cap_chan_lock(c);
 141        mutex_unlock(&conn->chan_lock);
 142
 143        return c;
 144}
 145
 146static struct l2cap_chan *__l2cap_global_chan_by_addr(__le16 psm, bdaddr_t *src)
 147{
 148        struct l2cap_chan *c;
 149
 150        list_for_each_entry(c, &chan_list, global_l) {
 151                if (c->sport == psm && !bacmp(&bt_sk(c->sk)->src, src))
 152                        return c;
 153        }
 154        return NULL;
 155}
 156
 157int l2cap_add_psm(struct l2cap_chan *chan, bdaddr_t *src, __le16 psm)
 158{
 159        int err;
 160
 161        write_lock(&chan_list_lock);
 162
 163        if (psm && __l2cap_global_chan_by_addr(psm, src)) {
 164                err = -EADDRINUSE;
 165                goto done;
 166        }
 167
 168        if (psm) {
 169                chan->psm = psm;
 170                chan->sport = psm;
 171                err = 0;
 172        } else {
 173                u16 p;
 174
 175                err = -EINVAL;
 176                for (p = 0x1001; p < 0x1100; p += 2)
 177                        if (!__l2cap_global_chan_by_addr(cpu_to_le16(p), src)) {
 178                                chan->psm   = cpu_to_le16(p);
 179                                chan->sport = cpu_to_le16(p);
 180                                err = 0;
 181                                break;
 182                        }
 183        }
 184
 185done:
 186        write_unlock(&chan_list_lock);
 187        return err;
 188}
 189
 190int l2cap_add_scid(struct l2cap_chan *chan,  __u16 scid)
 191{
 192        write_lock(&chan_list_lock);
 193
 194        chan->scid = scid;
 195
 196        write_unlock(&chan_list_lock);
 197
 198        return 0;
 199}
 200
 201static u16 l2cap_alloc_cid(struct l2cap_conn *conn)
 202{
 203        u16 cid = L2CAP_CID_DYN_START;
 204
 205        for (; cid < L2CAP_CID_DYN_END; cid++) {
 206                if (!__l2cap_get_chan_by_scid(conn, cid))
 207                        return cid;
 208        }
 209
 210        return 0;
 211}
 212
 213static void __l2cap_state_change(struct l2cap_chan *chan, int state)
 214{
 215        BT_DBG("chan %p %s -> %s", chan, state_to_string(chan->state),
 216               state_to_string(state));
 217
 218        chan->state = state;
 219        chan->ops->state_change(chan, state);
 220}
 221
 222static void l2cap_state_change(struct l2cap_chan *chan, int state)
 223{
 224        struct sock *sk = chan->sk;
 225
 226        lock_sock(sk);
 227        __l2cap_state_change(chan, state);
 228        release_sock(sk);
 229}
 230
 231static inline void __l2cap_chan_set_err(struct l2cap_chan *chan, int err)
 232{
 233        struct sock *sk = chan->sk;
 234
 235        sk->sk_err = err;
 236}
 237
 238static inline void l2cap_chan_set_err(struct l2cap_chan *chan, int err)
 239{
 240        struct sock *sk = chan->sk;
 241
 242        lock_sock(sk);
 243        __l2cap_chan_set_err(chan, err);
 244        release_sock(sk);
 245}
 246
 247static void __set_retrans_timer(struct l2cap_chan *chan)
 248{
 249        if (!delayed_work_pending(&chan->monitor_timer) &&
 250            chan->retrans_timeout) {
 251                l2cap_set_timer(chan, &chan->retrans_timer,
 252                                msecs_to_jiffies(chan->retrans_timeout));
 253        }
 254}
 255
 256static void __set_monitor_timer(struct l2cap_chan *chan)
 257{
 258        __clear_retrans_timer(chan);
 259        if (chan->monitor_timeout) {
 260                l2cap_set_timer(chan, &chan->monitor_timer,
 261                                msecs_to_jiffies(chan->monitor_timeout));
 262        }
 263}
 264
 265static struct sk_buff *l2cap_ertm_seq_in_queue(struct sk_buff_head *head,
 266                                               u16 seq)
 267{
 268        struct sk_buff *skb;
 269
 270        skb_queue_walk(head, skb) {
 271                if (bt_cb(skb)->control.txseq == seq)
 272                        return skb;
 273        }
 274
 275        return NULL;
 276}
 277
 278/* ---- L2CAP sequence number lists ---- */
 279
 280/* For ERTM, ordered lists of sequence numbers must be tracked for
 281 * SREJ requests that are received and for frames that are to be
 282 * retransmitted. These seq_list functions implement a singly-linked
 283 * list in an array, where membership in the list can also be checked
 284 * in constant time. Items can also be added to the tail of the list
 285 * and removed from the head in constant time, without further memory
 286 * allocs or frees.
 287 */
 288
 289static int l2cap_seq_list_init(struct l2cap_seq_list *seq_list, u16 size)
 290{
 291        size_t alloc_size, i;
 292
 293        /* Allocated size is a power of 2 to map sequence numbers
 294         * (which may be up to 14 bits) in to a smaller array that is
 295         * sized for the negotiated ERTM transmit windows.
 296         */
 297        alloc_size = roundup_pow_of_two(size);
 298
 299        seq_list->list = kmalloc(sizeof(u16) * alloc_size, GFP_KERNEL);
 300        if (!seq_list->list)
 301                return -ENOMEM;
 302
 303        seq_list->mask = alloc_size - 1;
 304        seq_list->head = L2CAP_SEQ_LIST_CLEAR;
 305        seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
 306        for (i = 0; i < alloc_size; i++)
 307                seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
 308
 309        return 0;
 310}
 311
 312static inline void l2cap_seq_list_free(struct l2cap_seq_list *seq_list)
 313{
 314        kfree(seq_list->list);
 315}
 316
 317static inline bool l2cap_seq_list_contains(struct l2cap_seq_list *seq_list,
 318                                           u16 seq)
 319{
 320        /* Constant-time check for list membership */
 321        return seq_list->list[seq & seq_list->mask] != L2CAP_SEQ_LIST_CLEAR;
 322}
 323
 324static u16 l2cap_seq_list_remove(struct l2cap_seq_list *seq_list, u16 seq)
 325{
 326        u16 mask = seq_list->mask;
 327
 328        if (seq_list->head == L2CAP_SEQ_LIST_CLEAR) {
 329                /* In case someone tries to pop the head of an empty list */
 330                return L2CAP_SEQ_LIST_CLEAR;
 331        } else if (seq_list->head == seq) {
 332                /* Head can be removed in constant time */
 333                seq_list->head = seq_list->list[seq & mask];
 334                seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;
 335
 336                if (seq_list->head == L2CAP_SEQ_LIST_TAIL) {
 337                        seq_list->head = L2CAP_SEQ_LIST_CLEAR;
 338                        seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
 339                }
 340        } else {
 341                /* Walk the list to find the sequence number */
 342                u16 prev = seq_list->head;
 343                while (seq_list->list[prev & mask] != seq) {
 344                        prev = seq_list->list[prev & mask];
 345                        if (prev == L2CAP_SEQ_LIST_TAIL)
 346                                return L2CAP_SEQ_LIST_CLEAR;
 347                }
 348
 349                /* Unlink the number from the list and clear it */
 350                seq_list->list[prev & mask] = seq_list->list[seq & mask];
 351                seq_list->list[seq & mask] = L2CAP_SEQ_LIST_CLEAR;
 352                if (seq_list->tail == seq)
 353                        seq_list->tail = prev;
 354        }
 355        return seq;
 356}
 357
 358static inline u16 l2cap_seq_list_pop(struct l2cap_seq_list *seq_list)
 359{
 360        /* Remove the head in constant time */
 361        return l2cap_seq_list_remove(seq_list, seq_list->head);
 362}
 363
 364static void l2cap_seq_list_clear(struct l2cap_seq_list *seq_list)
 365{
 366        u16 i;
 367
 368        if (seq_list->head == L2CAP_SEQ_LIST_CLEAR)
 369                return;
 370
 371        for (i = 0; i <= seq_list->mask; i++)
 372                seq_list->list[i] = L2CAP_SEQ_LIST_CLEAR;
 373
 374        seq_list->head = L2CAP_SEQ_LIST_CLEAR;
 375        seq_list->tail = L2CAP_SEQ_LIST_CLEAR;
 376}
 377
 378static void l2cap_seq_list_append(struct l2cap_seq_list *seq_list, u16 seq)
 379{
 380        u16 mask = seq_list->mask;
 381
 382        /* All appends happen in constant time */
 383
 384        if (seq_list->list[seq & mask] != L2CAP_SEQ_LIST_CLEAR)
 385                return;
 386
 387        if (seq_list->tail == L2CAP_SEQ_LIST_CLEAR)
 388                seq_list->head = seq;
 389        else
 390                seq_list->list[seq_list->tail & mask] = seq;
 391
 392        seq_list->tail = seq;
 393        seq_list->list[seq & mask] = L2CAP_SEQ_LIST_TAIL;
 394}
 395
 396static void l2cap_chan_timeout(struct work_struct *work)
 397{
 398        struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
 399                                               chan_timer.work);
 400        struct l2cap_conn *conn = chan->conn;
 401        int reason;
 402
 403        BT_DBG("chan %p state %s", chan, state_to_string(chan->state));
 404
 405        mutex_lock(&conn->chan_lock);
 406        l2cap_chan_lock(chan);
 407
 408        if (chan->state == BT_CONNECTED || chan->state == BT_CONFIG)
 409                reason = ECONNREFUSED;
 410        else if (chan->state == BT_CONNECT &&
 411                 chan->sec_level != BT_SECURITY_SDP)
 412                reason = ECONNREFUSED;
 413        else
 414                reason = ETIMEDOUT;
 415
 416        l2cap_chan_close(chan, reason);
 417
 418        l2cap_chan_unlock(chan);
 419
 420        chan->ops->close(chan);
 421        mutex_unlock(&conn->chan_lock);
 422
 423        l2cap_chan_put(chan);
 424}
 425
 426struct l2cap_chan *l2cap_chan_create(void)
 427{
 428        struct l2cap_chan *chan;
 429
 430        chan = kzalloc(sizeof(*chan), GFP_ATOMIC);
 431        if (!chan)
 432                return NULL;
 433
 434        mutex_init(&chan->lock);
 435
 436        write_lock(&chan_list_lock);
 437        list_add(&chan->global_l, &chan_list);
 438        write_unlock(&chan_list_lock);
 439
 440        INIT_DELAYED_WORK(&chan->chan_timer, l2cap_chan_timeout);
 441
 442        chan->state = BT_OPEN;
 443
 444        kref_init(&chan->kref);
 445
 446        /* This flag is cleared in l2cap_chan_ready() */
 447        set_bit(CONF_NOT_COMPLETE, &chan->conf_state);
 448
 449        BT_DBG("chan %p", chan);
 450
 451        return chan;
 452}
 453
 454static void l2cap_chan_destroy(struct kref *kref)
 455{
 456        struct l2cap_chan *chan = container_of(kref, struct l2cap_chan, kref);
 457
 458        BT_DBG("chan %p", chan);
 459
 460        write_lock(&chan_list_lock);
 461        list_del(&chan->global_l);
 462        write_unlock(&chan_list_lock);
 463
 464        kfree(chan);
 465}
 466
 467void l2cap_chan_hold(struct l2cap_chan *c)
 468{
 469        BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->kref.refcount));
 470
 471        kref_get(&c->kref);
 472}
 473
 474void l2cap_chan_put(struct l2cap_chan *c)
 475{
 476        BT_DBG("chan %p orig refcnt %d", c, atomic_read(&c->kref.refcount));
 477
 478        kref_put(&c->kref, l2cap_chan_destroy);
 479}
 480
 481void l2cap_chan_set_defaults(struct l2cap_chan *chan)
 482{
 483        chan->fcs  = L2CAP_FCS_CRC16;
 484        chan->max_tx = L2CAP_DEFAULT_MAX_TX;
 485        chan->tx_win = L2CAP_DEFAULT_TX_WINDOW;
 486        chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
 487        chan->ack_win = L2CAP_DEFAULT_TX_WINDOW;
 488        chan->sec_level = BT_SECURITY_LOW;
 489
 490        set_bit(FLAG_FORCE_ACTIVE, &chan->flags);
 491}
 492
 493void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
 494{
 495        BT_DBG("conn %p, psm 0x%2.2x, dcid 0x%4.4x", conn,
 496               __le16_to_cpu(chan->psm), chan->dcid);
 497
 498        conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
 499
 500        chan->conn = conn;
 501
 502        switch (chan->chan_type) {
 503        case L2CAP_CHAN_CONN_ORIENTED:
 504                if (conn->hcon->type == LE_LINK) {
 505                        /* LE connection */
 506                        chan->omtu = L2CAP_DEFAULT_MTU;
 507                        chan->scid = L2CAP_CID_LE_DATA;
 508                        chan->dcid = L2CAP_CID_LE_DATA;
 509                } else {
 510                        /* Alloc CID for connection-oriented socket */
 511                        chan->scid = l2cap_alloc_cid(conn);
 512                        chan->omtu = L2CAP_DEFAULT_MTU;
 513                }
 514                break;
 515
 516        case L2CAP_CHAN_CONN_LESS:
 517                /* Connectionless socket */
 518                chan->scid = L2CAP_CID_CONN_LESS;
 519                chan->dcid = L2CAP_CID_CONN_LESS;
 520                chan->omtu = L2CAP_DEFAULT_MTU;
 521                break;
 522
 523        case L2CAP_CHAN_CONN_FIX_A2MP:
 524                chan->scid = L2CAP_CID_A2MP;
 525                chan->dcid = L2CAP_CID_A2MP;
 526                chan->omtu = L2CAP_A2MP_DEFAULT_MTU;
 527                chan->imtu = L2CAP_A2MP_DEFAULT_MTU;
 528                break;
 529
 530        default:
 531                /* Raw socket can send/recv signalling messages only */
 532                chan->scid = L2CAP_CID_SIGNALING;
 533                chan->dcid = L2CAP_CID_SIGNALING;
 534                chan->omtu = L2CAP_DEFAULT_MTU;
 535        }
 536
 537        chan->local_id          = L2CAP_BESTEFFORT_ID;
 538        chan->local_stype       = L2CAP_SERV_BESTEFFORT;
 539        chan->local_msdu        = L2CAP_DEFAULT_MAX_SDU_SIZE;
 540        chan->local_sdu_itime   = L2CAP_DEFAULT_SDU_ITIME;
 541        chan->local_acc_lat     = L2CAP_DEFAULT_ACC_LAT;
 542        chan->local_flush_to    = L2CAP_EFS_DEFAULT_FLUSH_TO;
 543
 544        l2cap_chan_hold(chan);
 545
 546        list_add(&chan->list, &conn->chan_l);
 547}
 548
 549void l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
 550{
 551        mutex_lock(&conn->chan_lock);
 552        __l2cap_chan_add(conn, chan);
 553        mutex_unlock(&conn->chan_lock);
 554}
 555
 556void l2cap_chan_del(struct l2cap_chan *chan, int err)
 557{
 558        struct l2cap_conn *conn = chan->conn;
 559
 560        __clear_chan_timer(chan);
 561
 562        BT_DBG("chan %p, conn %p, err %d", chan, conn, err);
 563
 564        if (conn) {
 565                struct amp_mgr *mgr = conn->hcon->amp_mgr;
 566                /* Delete from channel list */
 567                list_del(&chan->list);
 568
 569                l2cap_chan_put(chan);
 570
 571                chan->conn = NULL;
 572
 573                if (chan->chan_type != L2CAP_CHAN_CONN_FIX_A2MP)
 574                        hci_conn_drop(conn->hcon);
 575
 576                if (mgr && mgr->bredr_chan == chan)
 577                        mgr->bredr_chan = NULL;
 578        }
 579
 580        if (chan->hs_hchan) {
 581                struct hci_chan *hs_hchan = chan->hs_hchan;
 582
 583                BT_DBG("chan %p disconnect hs_hchan %p", chan, hs_hchan);
 584                amp_disconnect_logical_link(hs_hchan);
 585        }
 586
 587        chan->ops->teardown(chan, err);
 588
 589        if (test_bit(CONF_NOT_COMPLETE, &chan->conf_state))
 590                return;
 591
 592        switch(chan->mode) {
 593        case L2CAP_MODE_BASIC:
 594                break;
 595
 596        case L2CAP_MODE_ERTM:
 597                __clear_retrans_timer(chan);
 598                __clear_monitor_timer(chan);
 599                __clear_ack_timer(chan);
 600
 601                skb_queue_purge(&chan->srej_q);
 602
 603                l2cap_seq_list_free(&chan->srej_list);
 604                l2cap_seq_list_free(&chan->retrans_list);
 605
 606                /* fall through */
 607
 608        case L2CAP_MODE_STREAMING:
 609                skb_queue_purge(&chan->tx_q);
 610                break;
 611        }
 612
 613        return;
 614}
 615
 616void l2cap_chan_close(struct l2cap_chan *chan, int reason)
 617{
 618        struct l2cap_conn *conn = chan->conn;
 619        struct sock *sk = chan->sk;
 620
 621        BT_DBG("chan %p state %s sk %p", chan, state_to_string(chan->state),
 622               sk);
 623
 624        switch (chan->state) {
 625        case BT_LISTEN:
 626                chan->ops->teardown(chan, 0);
 627                break;
 628
 629        case BT_CONNECTED:
 630        case BT_CONFIG:
 631                if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
 632                    conn->hcon->type == ACL_LINK) {
 633                        __set_chan_timer(chan, sk->sk_sndtimeo);
 634                        l2cap_send_disconn_req(chan, reason);
 635                } else
 636                        l2cap_chan_del(chan, reason);
 637                break;
 638
 639        case BT_CONNECT2:
 640                if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED &&
 641                    conn->hcon->type == ACL_LINK) {
 642                        struct l2cap_conn_rsp rsp;
 643                        __u16 result;
 644
 645                        if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags))
 646                                result = L2CAP_CR_SEC_BLOCK;
 647                        else
 648                                result = L2CAP_CR_BAD_PSM;
 649                        l2cap_state_change(chan, BT_DISCONN);
 650
 651                        rsp.scid   = cpu_to_le16(chan->dcid);
 652                        rsp.dcid   = cpu_to_le16(chan->scid);
 653                        rsp.result = cpu_to_le16(result);
 654                        rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
 655                        l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
 656                                       sizeof(rsp), &rsp);
 657                }
 658
 659                l2cap_chan_del(chan, reason);
 660                break;
 661
 662        case BT_CONNECT:
 663        case BT_DISCONN:
 664                l2cap_chan_del(chan, reason);
 665                break;
 666
 667        default:
 668                chan->ops->teardown(chan, 0);
 669                break;
 670        }
 671}
 672
 673static inline u8 l2cap_get_auth_type(struct l2cap_chan *chan)
 674{
 675        if (chan->chan_type == L2CAP_CHAN_RAW) {
 676                switch (chan->sec_level) {
 677                case BT_SECURITY_HIGH:
 678                        return HCI_AT_DEDICATED_BONDING_MITM;
 679                case BT_SECURITY_MEDIUM:
 680                        return HCI_AT_DEDICATED_BONDING;
 681                default:
 682                        return HCI_AT_NO_BONDING;
 683                }
 684        } else if (chan->psm == __constant_cpu_to_le16(L2CAP_PSM_SDP)) {
 685                if (chan->sec_level == BT_SECURITY_LOW)
 686                        chan->sec_level = BT_SECURITY_SDP;
 687
 688                if (chan->sec_level == BT_SECURITY_HIGH)
 689                        return HCI_AT_NO_BONDING_MITM;
 690                else
 691                        return HCI_AT_NO_BONDING;
 692        } else {
 693                switch (chan->sec_level) {
 694                case BT_SECURITY_HIGH:
 695                        return HCI_AT_GENERAL_BONDING_MITM;
 696                case BT_SECURITY_MEDIUM:
 697                        return HCI_AT_GENERAL_BONDING;
 698                default:
 699                        return HCI_AT_NO_BONDING;
 700                }
 701        }
 702}
 703
 704/* Service level security */
 705int l2cap_chan_check_security(struct l2cap_chan *chan)
 706{
 707        struct l2cap_conn *conn = chan->conn;
 708        __u8 auth_type;
 709
 710        auth_type = l2cap_get_auth_type(chan);
 711
 712        return hci_conn_security(conn->hcon, chan->sec_level, auth_type);
 713}
 714
 715static u8 l2cap_get_ident(struct l2cap_conn *conn)
 716{
 717        u8 id;
 718
 719        /* Get next available identificator.
 720         *    1 - 128 are used by kernel.
 721         *  129 - 199 are reserved.
 722         *  200 - 254 are used by utilities like l2ping, etc.
 723         */
 724
 725        spin_lock(&conn->lock);
 726
 727        if (++conn->tx_ident > 128)
 728                conn->tx_ident = 1;
 729
 730        id = conn->tx_ident;
 731
 732        spin_unlock(&conn->lock);
 733
 734        return id;
 735}
 736
 737static void l2cap_send_cmd(struct l2cap_conn *conn, u8 ident, u8 code, u16 len,
 738                           void *data)
 739{
 740        struct sk_buff *skb = l2cap_build_cmd(conn, code, ident, len, data);
 741        u8 flags;
 742
 743        BT_DBG("code 0x%2.2x", code);
 744
 745        if (!skb)
 746                return;
 747
 748        if (lmp_no_flush_capable(conn->hcon->hdev))
 749                flags = ACL_START_NO_FLUSH;
 750        else
 751                flags = ACL_START;
 752
 753        bt_cb(skb)->force_active = BT_POWER_FORCE_ACTIVE_ON;
 754        skb->priority = HCI_PRIO_MAX;
 755
 756        hci_send_acl(conn->hchan, skb, flags);
 757}
 758
 759static bool __chan_is_moving(struct l2cap_chan *chan)
 760{
 761        return chan->move_state != L2CAP_MOVE_STABLE &&
 762               chan->move_state != L2CAP_MOVE_WAIT_PREPARE;
 763}
 764
 765static void l2cap_do_send(struct l2cap_chan *chan, struct sk_buff *skb)
 766{
 767        struct hci_conn *hcon = chan->conn->hcon;
 768        u16 flags;
 769
 770        BT_DBG("chan %p, skb %p len %d priority %u", chan, skb, skb->len,
 771               skb->priority);
 772
 773        if (chan->hs_hcon && !__chan_is_moving(chan)) {
 774                if (chan->hs_hchan)
 775                        hci_send_acl(chan->hs_hchan, skb, ACL_COMPLETE);
 776                else
 777                        kfree_skb(skb);
 778
 779                return;
 780        }
 781
 782        if (!test_bit(FLAG_FLUSHABLE, &chan->flags) &&
 783            lmp_no_flush_capable(hcon->hdev))
 784                flags = ACL_START_NO_FLUSH;
 785        else
 786                flags = ACL_START;
 787
 788        bt_cb(skb)->force_active = test_bit(FLAG_FORCE_ACTIVE, &chan->flags);
 789        hci_send_acl(chan->conn->hchan, skb, flags);
 790}
 791
 792static void __unpack_enhanced_control(u16 enh, struct l2cap_ctrl *control)
 793{
 794        control->reqseq = (enh & L2CAP_CTRL_REQSEQ) >> L2CAP_CTRL_REQSEQ_SHIFT;
 795        control->final = (enh & L2CAP_CTRL_FINAL) >> L2CAP_CTRL_FINAL_SHIFT;
 796
 797        if (enh & L2CAP_CTRL_FRAME_TYPE) {
 798                /* S-Frame */
 799                control->sframe = 1;
 800                control->poll = (enh & L2CAP_CTRL_POLL) >> L2CAP_CTRL_POLL_SHIFT;
 801                control->super = (enh & L2CAP_CTRL_SUPERVISE) >> L2CAP_CTRL_SUPER_SHIFT;
 802
 803                control->sar = 0;
 804                control->txseq = 0;
 805        } else {
 806                /* I-Frame */
 807                control->sframe = 0;
 808                control->sar = (enh & L2CAP_CTRL_SAR) >> L2CAP_CTRL_SAR_SHIFT;
 809                control->txseq = (enh & L2CAP_CTRL_TXSEQ) >> L2CAP_CTRL_TXSEQ_SHIFT;
 810
 811                control->poll = 0;
 812                control->super = 0;
 813        }
 814}
 815
 816static void __unpack_extended_control(u32 ext, struct l2cap_ctrl *control)
 817{
 818        control->reqseq = (ext & L2CAP_EXT_CTRL_REQSEQ) >> L2CAP_EXT_CTRL_REQSEQ_SHIFT;
 819        control->final = (ext & L2CAP_EXT_CTRL_FINAL) >> L2CAP_EXT_CTRL_FINAL_SHIFT;
 820
 821        if (ext & L2CAP_EXT_CTRL_FRAME_TYPE) {
 822                /* S-Frame */
 823                control->sframe = 1;
 824                control->poll = (ext & L2CAP_EXT_CTRL_POLL) >> L2CAP_EXT_CTRL_POLL_SHIFT;
 825                control->super = (ext & L2CAP_EXT_CTRL_SUPERVISE) >> L2CAP_EXT_CTRL_SUPER_SHIFT;
 826
 827                control->sar = 0;
 828                control->txseq = 0;
 829        } else {
 830                /* I-Frame */
 831                control->sframe = 0;
 832                control->sar = (ext & L2CAP_EXT_CTRL_SAR) >> L2CAP_EXT_CTRL_SAR_SHIFT;
 833                control->txseq = (ext & L2CAP_EXT_CTRL_TXSEQ) >> L2CAP_EXT_CTRL_TXSEQ_SHIFT;
 834
 835                control->poll = 0;
 836                control->super = 0;
 837        }
 838}
 839
 840static inline void __unpack_control(struct l2cap_chan *chan,
 841                                    struct sk_buff *skb)
 842{
 843        if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
 844                __unpack_extended_control(get_unaligned_le32(skb->data),
 845                                          &bt_cb(skb)->control);
 846                skb_pull(skb, L2CAP_EXT_CTRL_SIZE);
 847        } else {
 848                __unpack_enhanced_control(get_unaligned_le16(skb->data),
 849                                          &bt_cb(skb)->control);
 850                skb_pull(skb, L2CAP_ENH_CTRL_SIZE);
 851        }
 852}
 853
 854static u32 __pack_extended_control(struct l2cap_ctrl *control)
 855{
 856        u32 packed;
 857
 858        packed = control->reqseq << L2CAP_EXT_CTRL_REQSEQ_SHIFT;
 859        packed |= control->final << L2CAP_EXT_CTRL_FINAL_SHIFT;
 860
 861        if (control->sframe) {
 862                packed |= control->poll << L2CAP_EXT_CTRL_POLL_SHIFT;
 863                packed |= control->super << L2CAP_EXT_CTRL_SUPER_SHIFT;
 864                packed |= L2CAP_EXT_CTRL_FRAME_TYPE;
 865        } else {
 866                packed |= control->sar << L2CAP_EXT_CTRL_SAR_SHIFT;
 867                packed |= control->txseq << L2CAP_EXT_CTRL_TXSEQ_SHIFT;
 868        }
 869
 870        return packed;
 871}
 872
 873static u16 __pack_enhanced_control(struct l2cap_ctrl *control)
 874{
 875        u16 packed;
 876
 877        packed = control->reqseq << L2CAP_CTRL_REQSEQ_SHIFT;
 878        packed |= control->final << L2CAP_CTRL_FINAL_SHIFT;
 879
 880        if (control->sframe) {
 881                packed |= control->poll << L2CAP_CTRL_POLL_SHIFT;
 882                packed |= control->super << L2CAP_CTRL_SUPER_SHIFT;
 883                packed |= L2CAP_CTRL_FRAME_TYPE;
 884        } else {
 885                packed |= control->sar << L2CAP_CTRL_SAR_SHIFT;
 886                packed |= control->txseq << L2CAP_CTRL_TXSEQ_SHIFT;
 887        }
 888
 889        return packed;
 890}
 891
 892static inline void __pack_control(struct l2cap_chan *chan,
 893                                  struct l2cap_ctrl *control,
 894                                  struct sk_buff *skb)
 895{
 896        if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
 897                put_unaligned_le32(__pack_extended_control(control),
 898                                   skb->data + L2CAP_HDR_SIZE);
 899        } else {
 900                put_unaligned_le16(__pack_enhanced_control(control),
 901                                   skb->data + L2CAP_HDR_SIZE);
 902        }
 903}
 904
 905static inline unsigned int __ertm_hdr_size(struct l2cap_chan *chan)
 906{
 907        if (test_bit(FLAG_EXT_CTRL, &chan->flags))
 908                return L2CAP_EXT_HDR_SIZE;
 909        else
 910                return L2CAP_ENH_HDR_SIZE;
 911}
 912
 913static struct sk_buff *l2cap_create_sframe_pdu(struct l2cap_chan *chan,
 914                                               u32 control)
 915{
 916        struct sk_buff *skb;
 917        struct l2cap_hdr *lh;
 918        int hlen = __ertm_hdr_size(chan);
 919
 920        if (chan->fcs == L2CAP_FCS_CRC16)
 921                hlen += L2CAP_FCS_SIZE;
 922
 923        skb = bt_skb_alloc(hlen, GFP_KERNEL);
 924
 925        if (!skb)
 926                return ERR_PTR(-ENOMEM);
 927
 928        lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
 929        lh->len = cpu_to_le16(hlen - L2CAP_HDR_SIZE);
 930        lh->cid = cpu_to_le16(chan->dcid);
 931
 932        if (test_bit(FLAG_EXT_CTRL, &chan->flags))
 933                put_unaligned_le32(control, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
 934        else
 935                put_unaligned_le16(control, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
 936
 937        if (chan->fcs == L2CAP_FCS_CRC16) {
 938                u16 fcs = crc16(0, (u8 *)skb->data, skb->len);
 939                put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
 940        }
 941
 942        skb->priority = HCI_PRIO_MAX;
 943        return skb;
 944}
 945
 946static void l2cap_send_sframe(struct l2cap_chan *chan,
 947                              struct l2cap_ctrl *control)
 948{
 949        struct sk_buff *skb;
 950        u32 control_field;
 951
 952        BT_DBG("chan %p, control %p", chan, control);
 953
 954        if (!control->sframe)
 955                return;
 956
 957        if (__chan_is_moving(chan))
 958                return;
 959
 960        if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state) &&
 961            !control->poll)
 962                control->final = 1;
 963
 964        if (control->super == L2CAP_SUPER_RR)
 965                clear_bit(CONN_RNR_SENT, &chan->conn_state);
 966        else if (control->super == L2CAP_SUPER_RNR)
 967                set_bit(CONN_RNR_SENT, &chan->conn_state);
 968
 969        if (control->super != L2CAP_SUPER_SREJ) {
 970                chan->last_acked_seq = control->reqseq;
 971                __clear_ack_timer(chan);
 972        }
 973
 974        BT_DBG("reqseq %d, final %d, poll %d, super %d", control->reqseq,
 975               control->final, control->poll, control->super);
 976
 977        if (test_bit(FLAG_EXT_CTRL, &chan->flags))
 978                control_field = __pack_extended_control(control);
 979        else
 980                control_field = __pack_enhanced_control(control);
 981
 982        skb = l2cap_create_sframe_pdu(chan, control_field);
 983        if (!IS_ERR(skb))
 984                l2cap_do_send(chan, skb);
 985}
 986
 987static void l2cap_send_rr_or_rnr(struct l2cap_chan *chan, bool poll)
 988{
 989        struct l2cap_ctrl control;
 990
 991        BT_DBG("chan %p, poll %d", chan, poll);
 992
 993        memset(&control, 0, sizeof(control));
 994        control.sframe = 1;
 995        control.poll = poll;
 996
 997        if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
 998                control.super = L2CAP_SUPER_RNR;
 999        else
1000                control.super = L2CAP_SUPER_RR;
1001
1002        control.reqseq = chan->buffer_seq;
1003        l2cap_send_sframe(chan, &control);
1004}
1005
1006static inline int __l2cap_no_conn_pending(struct l2cap_chan *chan)
1007{
1008        return !test_bit(CONF_CONNECT_PEND, &chan->conf_state);
1009}
1010
1011static bool __amp_capable(struct l2cap_chan *chan)
1012{
1013        struct l2cap_conn *conn = chan->conn;
1014
1015        if (enable_hs &&
1016            hci_amp_capable() &&
1017            chan->chan_policy == BT_CHANNEL_POLICY_AMP_PREFERRED &&
1018            conn->fixed_chan_mask & L2CAP_FC_A2MP)
1019                return true;
1020        else
1021                return false;
1022}
1023
1024static bool l2cap_check_efs(struct l2cap_chan *chan)
1025{
1026        /* Check EFS parameters */
1027        return true;
1028}
1029
1030void l2cap_send_conn_req(struct l2cap_chan *chan)
1031{
1032        struct l2cap_conn *conn = chan->conn;
1033        struct l2cap_conn_req req;
1034
1035        req.scid = cpu_to_le16(chan->scid);
1036        req.psm  = chan->psm;
1037
1038        chan->ident = l2cap_get_ident(conn);
1039
1040        set_bit(CONF_CONNECT_PEND, &chan->conf_state);
1041
1042        l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_REQ, sizeof(req), &req);
1043}
1044
1045static void l2cap_send_create_chan_req(struct l2cap_chan *chan, u8 amp_id)
1046{
1047        struct l2cap_create_chan_req req;
1048        req.scid = cpu_to_le16(chan->scid);
1049        req.psm  = chan->psm;
1050        req.amp_id = amp_id;
1051
1052        chan->ident = l2cap_get_ident(chan->conn);
1053
1054        l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_REQ,
1055                       sizeof(req), &req);
1056}
1057
1058static void l2cap_move_setup(struct l2cap_chan *chan)
1059{
1060        struct sk_buff *skb;
1061
1062        BT_DBG("chan %p", chan);
1063
1064        if (chan->mode != L2CAP_MODE_ERTM)
1065                return;
1066
1067        __clear_retrans_timer(chan);
1068        __clear_monitor_timer(chan);
1069        __clear_ack_timer(chan);
1070
1071        chan->retry_count = 0;
1072        skb_queue_walk(&chan->tx_q, skb) {
1073                if (bt_cb(skb)->control.retries)
1074                        bt_cb(skb)->control.retries = 1;
1075                else
1076                        break;
1077        }
1078
1079        chan->expected_tx_seq = chan->buffer_seq;
1080
1081        clear_bit(CONN_REJ_ACT, &chan->conn_state);
1082        clear_bit(CONN_SREJ_ACT, &chan->conn_state);
1083        l2cap_seq_list_clear(&chan->retrans_list);
1084        l2cap_seq_list_clear(&chan->srej_list);
1085        skb_queue_purge(&chan->srej_q);
1086
1087        chan->tx_state = L2CAP_TX_STATE_XMIT;
1088        chan->rx_state = L2CAP_RX_STATE_MOVE;
1089
1090        set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
1091}
1092
1093static void l2cap_move_done(struct l2cap_chan *chan)
1094{
1095        u8 move_role = chan->move_role;
1096        BT_DBG("chan %p", chan);
1097
1098        chan->move_state = L2CAP_MOVE_STABLE;
1099        chan->move_role = L2CAP_MOVE_ROLE_NONE;
1100
1101        if (chan->mode != L2CAP_MODE_ERTM)
1102                return;
1103
1104        switch (move_role) {
1105        case L2CAP_MOVE_ROLE_INITIATOR:
1106                l2cap_tx(chan, NULL, NULL, L2CAP_EV_EXPLICIT_POLL);
1107                chan->rx_state = L2CAP_RX_STATE_WAIT_F;
1108                break;
1109        case L2CAP_MOVE_ROLE_RESPONDER:
1110                chan->rx_state = L2CAP_RX_STATE_WAIT_P;
1111                break;
1112        }
1113}
1114
1115static void l2cap_chan_ready(struct l2cap_chan *chan)
1116{
1117        /* This clears all conf flags, including CONF_NOT_COMPLETE */
1118        chan->conf_state = 0;
1119        __clear_chan_timer(chan);
1120
1121        chan->state = BT_CONNECTED;
1122
1123        chan->ops->ready(chan);
1124}
1125
1126static void l2cap_start_connection(struct l2cap_chan *chan)
1127{
1128        if (__amp_capable(chan)) {
1129                BT_DBG("chan %p AMP capable: discover AMPs", chan);
1130                a2mp_discover_amp(chan);
1131        } else {
1132                l2cap_send_conn_req(chan);
1133        }
1134}
1135
1136static void l2cap_do_start(struct l2cap_chan *chan)
1137{
1138        struct l2cap_conn *conn = chan->conn;
1139
1140        if (conn->hcon->type == LE_LINK) {
1141                l2cap_chan_ready(chan);
1142                return;
1143        }
1144
1145        if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) {
1146                if (!(conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE))
1147                        return;
1148
1149                if (l2cap_chan_check_security(chan) &&
1150                    __l2cap_no_conn_pending(chan)) {
1151                        l2cap_start_connection(chan);
1152                }
1153        } else {
1154                struct l2cap_info_req req;
1155                req.type = __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK);
1156
1157                conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
1158                conn->info_ident = l2cap_get_ident(conn);
1159
1160                schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
1161
1162                l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ,
1163                               sizeof(req), &req);
1164        }
1165}
1166
1167static inline int l2cap_mode_supported(__u8 mode, __u32 feat_mask)
1168{
1169        u32 local_feat_mask = l2cap_feat_mask;
1170        if (!disable_ertm)
1171                local_feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING;
1172
1173        switch (mode) {
1174        case L2CAP_MODE_ERTM:
1175                return L2CAP_FEAT_ERTM & feat_mask & local_feat_mask;
1176        case L2CAP_MODE_STREAMING:
1177                return L2CAP_FEAT_STREAMING & feat_mask & local_feat_mask;
1178        default:
1179                return 0x00;
1180        }
1181}
1182
1183static void l2cap_send_disconn_req(struct l2cap_chan *chan, int err)
1184{
1185        struct sock *sk = chan->sk;
1186        struct l2cap_conn *conn = chan->conn;
1187        struct l2cap_disconn_req req;
1188
1189        if (!conn)
1190                return;
1191
1192        if (chan->mode == L2CAP_MODE_ERTM && chan->state == BT_CONNECTED) {
1193                __clear_retrans_timer(chan);
1194                __clear_monitor_timer(chan);
1195                __clear_ack_timer(chan);
1196        }
1197
1198        if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) {
1199                l2cap_state_change(chan, BT_DISCONN);
1200                return;
1201        }
1202
1203        req.dcid = cpu_to_le16(chan->dcid);
1204        req.scid = cpu_to_le16(chan->scid);
1205        l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_DISCONN_REQ,
1206                       sizeof(req), &req);
1207
1208        lock_sock(sk);
1209        __l2cap_state_change(chan, BT_DISCONN);
1210        __l2cap_chan_set_err(chan, err);
1211        release_sock(sk);
1212}
1213
1214/* ---- L2CAP connections ---- */
1215static void l2cap_conn_start(struct l2cap_conn *conn)
1216{
1217        struct l2cap_chan *chan, *tmp;
1218
1219        BT_DBG("conn %p", conn);
1220
1221        mutex_lock(&conn->chan_lock);
1222
1223        list_for_each_entry_safe(chan, tmp, &conn->chan_l, list) {
1224                struct sock *sk = chan->sk;
1225
1226                l2cap_chan_lock(chan);
1227
1228                if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1229                        l2cap_chan_unlock(chan);
1230                        continue;
1231                }
1232
1233                if (chan->state == BT_CONNECT) {
1234                        if (!l2cap_chan_check_security(chan) ||
1235                            !__l2cap_no_conn_pending(chan)) {
1236                                l2cap_chan_unlock(chan);
1237                                continue;
1238                        }
1239
1240                        if (!l2cap_mode_supported(chan->mode, conn->feat_mask)
1241                            && test_bit(CONF_STATE2_DEVICE,
1242                                        &chan->conf_state)) {
1243                                l2cap_chan_close(chan, ECONNRESET);
1244                                l2cap_chan_unlock(chan);
1245                                continue;
1246                        }
1247
1248                        l2cap_start_connection(chan);
1249
1250                } else if (chan->state == BT_CONNECT2) {
1251                        struct l2cap_conn_rsp rsp;
1252                        char buf[128];
1253                        rsp.scid = cpu_to_le16(chan->dcid);
1254                        rsp.dcid = cpu_to_le16(chan->scid);
1255
1256                        if (l2cap_chan_check_security(chan)) {
1257                                lock_sock(sk);
1258                                if (test_bit(BT_SK_DEFER_SETUP,
1259                                             &bt_sk(sk)->flags)) {
1260                                        rsp.result = __constant_cpu_to_le16(L2CAP_CR_PEND);
1261                                        rsp.status = __constant_cpu_to_le16(L2CAP_CS_AUTHOR_PEND);
1262                                        chan->ops->defer(chan);
1263
1264                                } else {
1265                                        __l2cap_state_change(chan, BT_CONFIG);
1266                                        rsp.result = __constant_cpu_to_le16(L2CAP_CR_SUCCESS);
1267                                        rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
1268                                }
1269                                release_sock(sk);
1270                        } else {
1271                                rsp.result = __constant_cpu_to_le16(L2CAP_CR_PEND);
1272                                rsp.status = __constant_cpu_to_le16(L2CAP_CS_AUTHEN_PEND);
1273                        }
1274
1275                        l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
1276                                       sizeof(rsp), &rsp);
1277
1278                        if (test_bit(CONF_REQ_SENT, &chan->conf_state) ||
1279                            rsp.result != L2CAP_CR_SUCCESS) {
1280                                l2cap_chan_unlock(chan);
1281                                continue;
1282                        }
1283
1284                        set_bit(CONF_REQ_SENT, &chan->conf_state);
1285                        l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
1286                                       l2cap_build_conf_req(chan, buf), buf);
1287                        chan->num_conf_req++;
1288                }
1289
1290                l2cap_chan_unlock(chan);
1291        }
1292
1293        mutex_unlock(&conn->chan_lock);
1294}
1295
1296/* Find socket with cid and source/destination bdaddr.
1297 * Returns closest match, locked.
1298 */
1299static struct l2cap_chan *l2cap_global_chan_by_scid(int state, u16 cid,
1300                                                    bdaddr_t *src,
1301                                                    bdaddr_t *dst)
1302{
1303        struct l2cap_chan *c, *c1 = NULL;
1304
1305        read_lock(&chan_list_lock);
1306
1307        list_for_each_entry(c, &chan_list, global_l) {
1308                struct sock *sk = c->sk;
1309
1310                if (state && c->state != state)
1311                        continue;
1312
1313                if (c->scid == cid) {
1314                        int src_match, dst_match;
1315                        int src_any, dst_any;
1316
1317                        /* Exact match. */
1318                        src_match = !bacmp(&bt_sk(sk)->src, src);
1319                        dst_match = !bacmp(&bt_sk(sk)->dst, dst);
1320                        if (src_match && dst_match) {
1321                                read_unlock(&chan_list_lock);
1322                                return c;
1323                        }
1324
1325                        /* Closest match */
1326                        src_any = !bacmp(&bt_sk(sk)->src, BDADDR_ANY);
1327                        dst_any = !bacmp(&bt_sk(sk)->dst, BDADDR_ANY);
1328                        if ((src_match && dst_any) || (src_any && dst_match) ||
1329                            (src_any && dst_any))
1330                                c1 = c;
1331                }
1332        }
1333
1334        read_unlock(&chan_list_lock);
1335
1336        return c1;
1337}
1338
1339static void l2cap_le_conn_ready(struct l2cap_conn *conn)
1340{
1341        struct sock *parent, *sk;
1342        struct l2cap_chan *chan, *pchan;
1343
1344        BT_DBG("");
1345
1346        /* Check if we have socket listening on cid */
1347        pchan = l2cap_global_chan_by_scid(BT_LISTEN, L2CAP_CID_LE_DATA,
1348                                          conn->src, conn->dst);
1349        if (!pchan)
1350                return;
1351
1352        parent = pchan->sk;
1353
1354        lock_sock(parent);
1355
1356        chan = pchan->ops->new_connection(pchan);
1357        if (!chan)
1358                goto clean;
1359
1360        sk = chan->sk;
1361
1362        hci_conn_hold(conn->hcon);
1363        conn->hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
1364
1365        bacpy(&bt_sk(sk)->src, conn->src);
1366        bacpy(&bt_sk(sk)->dst, conn->dst);
1367
1368        l2cap_chan_add(conn, chan);
1369
1370        l2cap_chan_ready(chan);
1371
1372clean:
1373        release_sock(parent);
1374}
1375
1376static void l2cap_conn_ready(struct l2cap_conn *conn)
1377{
1378        struct l2cap_chan *chan;
1379        struct hci_conn *hcon = conn->hcon;
1380
1381        BT_DBG("conn %p", conn);
1382
1383        if (!hcon->out && hcon->type == LE_LINK)
1384                l2cap_le_conn_ready(conn);
1385
1386        if (hcon->out && hcon->type == LE_LINK)
1387                smp_conn_security(hcon, hcon->pending_sec_level);
1388
1389        mutex_lock(&conn->chan_lock);
1390
1391        list_for_each_entry(chan, &conn->chan_l, list) {
1392
1393                l2cap_chan_lock(chan);
1394
1395                if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) {
1396                        l2cap_chan_unlock(chan);
1397                        continue;
1398                }
1399
1400                if (hcon->type == LE_LINK) {
1401                        if (smp_conn_security(hcon, chan->sec_level))
1402                                l2cap_chan_ready(chan);
1403
1404                } else if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1405                        struct sock *sk = chan->sk;
1406                        __clear_chan_timer(chan);
1407                        lock_sock(sk);
1408                        __l2cap_state_change(chan, BT_CONNECTED);
1409                        sk->sk_state_change(sk);
1410                        release_sock(sk);
1411
1412                } else if (chan->state == BT_CONNECT)
1413                        l2cap_do_start(chan);
1414
1415                l2cap_chan_unlock(chan);
1416        }
1417
1418        mutex_unlock(&conn->chan_lock);
1419}
1420
1421/* Notify sockets that we cannot guaranty reliability anymore */
1422static void l2cap_conn_unreliable(struct l2cap_conn *conn, int err)
1423{
1424        struct l2cap_chan *chan;
1425
1426        BT_DBG("conn %p", conn);
1427
1428        mutex_lock(&conn->chan_lock);
1429
1430        list_for_each_entry(chan, &conn->chan_l, list) {
1431                if (test_bit(FLAG_FORCE_RELIABLE, &chan->flags))
1432                        l2cap_chan_set_err(chan, err);
1433        }
1434
1435        mutex_unlock(&conn->chan_lock);
1436}
1437
1438static void l2cap_info_timeout(struct work_struct *work)
1439{
1440        struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1441                                               info_timer.work);
1442
1443        conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
1444        conn->info_ident = 0;
1445
1446        l2cap_conn_start(conn);
1447}
1448
1449/*
1450 * l2cap_user
1451 * External modules can register l2cap_user objects on l2cap_conn. The ->probe
1452 * callback is called during registration. The ->remove callback is called
1453 * during unregistration.
1454 * An l2cap_user object can either be explicitly unregistered or when the
1455 * underlying l2cap_conn object is deleted. This guarantees that l2cap->hcon,
1456 * l2cap->hchan, .. are valid as long as the remove callback hasn't been called.
1457 * External modules must own a reference to the l2cap_conn object if they intend
1458 * to call l2cap_unregister_user(). The l2cap_conn object might get destroyed at
1459 * any time if they don't.
1460 */
1461
1462int l2cap_register_user(struct l2cap_conn *conn, struct l2cap_user *user)
1463{
1464        struct hci_dev *hdev = conn->hcon->hdev;
1465        int ret;
1466
1467        /* We need to check whether l2cap_conn is registered. If it is not, we
1468         * must not register the l2cap_user. l2cap_conn_del() is unregisters
1469         * l2cap_conn objects, but doesn't provide its own locking. Instead, it
1470         * relies on the parent hci_conn object to be locked. This itself relies
1471         * on the hci_dev object to be locked. So we must lock the hci device
1472         * here, too. */
1473
1474        hci_dev_lock(hdev);
1475
1476        if (user->list.next || user->list.prev) {
1477                ret = -EINVAL;
1478                goto out_unlock;
1479        }
1480
1481        /* conn->hchan is NULL after l2cap_conn_del() was called */
1482        if (!conn->hchan) {
1483                ret = -ENODEV;
1484                goto out_unlock;
1485        }
1486
1487        ret = user->probe(conn, user);
1488        if (ret)
1489                goto out_unlock;
1490
1491        list_add(&user->list, &conn->users);
1492        ret = 0;
1493
1494out_unlock:
1495        hci_dev_unlock(hdev);
1496        return ret;
1497}
1498EXPORT_SYMBOL(l2cap_register_user);
1499
1500void l2cap_unregister_user(struct l2cap_conn *conn, struct l2cap_user *user)
1501{
1502        struct hci_dev *hdev = conn->hcon->hdev;
1503
1504        hci_dev_lock(hdev);
1505
1506        if (!user->list.next || !user->list.prev)
1507                goto out_unlock;
1508
1509        list_del(&user->list);
1510        user->list.next = NULL;
1511        user->list.prev = NULL;
1512        user->remove(conn, user);
1513
1514out_unlock:
1515        hci_dev_unlock(hdev);
1516}
1517EXPORT_SYMBOL(l2cap_unregister_user);
1518
1519static void l2cap_unregister_all_users(struct l2cap_conn *conn)
1520{
1521        struct l2cap_user *user;
1522
1523        while (!list_empty(&conn->users)) {
1524                user = list_first_entry(&conn->users, struct l2cap_user, list);
1525                list_del(&user->list);
1526                user->list.next = NULL;
1527                user->list.prev = NULL;
1528                user->remove(conn, user);
1529        }
1530}
1531
1532static void l2cap_conn_del(struct hci_conn *hcon, int err)
1533{
1534        struct l2cap_conn *conn = hcon->l2cap_data;
1535        struct l2cap_chan *chan, *l;
1536
1537        if (!conn)
1538                return;
1539
1540        BT_DBG("hcon %p conn %p, err %d", hcon, conn, err);
1541
1542        kfree_skb(conn->rx_skb);
1543
1544        l2cap_unregister_all_users(conn);
1545
1546        mutex_lock(&conn->chan_lock);
1547
1548        /* Kill channels */
1549        list_for_each_entry_safe(chan, l, &conn->chan_l, list) {
1550                l2cap_chan_hold(chan);
1551                l2cap_chan_lock(chan);
1552
1553                l2cap_chan_del(chan, err);
1554
1555                l2cap_chan_unlock(chan);
1556
1557                chan->ops->close(chan);
1558                l2cap_chan_put(chan);
1559        }
1560
1561        mutex_unlock(&conn->chan_lock);
1562
1563        hci_chan_del(conn->hchan);
1564
1565        if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT)
1566                cancel_delayed_work_sync(&conn->info_timer);
1567
1568        if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &hcon->flags)) {
1569                cancel_delayed_work_sync(&conn->security_timer);
1570                smp_chan_destroy(conn);
1571        }
1572
1573        hcon->l2cap_data = NULL;
1574        conn->hchan = NULL;
1575        l2cap_conn_put(conn);
1576}
1577
1578static void security_timeout(struct work_struct *work)
1579{
1580        struct l2cap_conn *conn = container_of(work, struct l2cap_conn,
1581                                               security_timer.work);
1582
1583        BT_DBG("conn %p", conn);
1584
1585        if (test_and_clear_bit(HCI_CONN_LE_SMP_PEND, &conn->hcon->flags)) {
1586                smp_chan_destroy(conn);
1587                l2cap_conn_del(conn->hcon, ETIMEDOUT);
1588        }
1589}
1590
1591static struct l2cap_conn *l2cap_conn_add(struct hci_conn *hcon)
1592{
1593        struct l2cap_conn *conn = hcon->l2cap_data;
1594        struct hci_chan *hchan;
1595
1596        if (conn)
1597                return conn;
1598
1599        hchan = hci_chan_create(hcon);
1600        if (!hchan)
1601                return NULL;
1602
1603        conn = kzalloc(sizeof(struct l2cap_conn), GFP_KERNEL);
1604        if (!conn) {
1605                hci_chan_del(hchan);
1606                return NULL;
1607        }
1608
1609        kref_init(&conn->ref);
1610        hcon->l2cap_data = conn;
1611        conn->hcon = hcon;
1612        hci_conn_get(conn->hcon);
1613        conn->hchan = hchan;
1614
1615        BT_DBG("hcon %p conn %p hchan %p", hcon, conn, hchan);
1616
1617        switch (hcon->type) {
1618        case LE_LINK:
1619                if (hcon->hdev->le_mtu) {
1620                        conn->mtu = hcon->hdev->le_mtu;
1621                        break;
1622                }
1623                /* fall through */
1624        default:
1625                conn->mtu = hcon->hdev->acl_mtu;
1626                break;
1627        }
1628
1629        conn->src = &hcon->hdev->bdaddr;
1630        conn->dst = &hcon->dst;
1631
1632        conn->feat_mask = 0;
1633
1634        spin_lock_init(&conn->lock);
1635        mutex_init(&conn->chan_lock);
1636
1637        INIT_LIST_HEAD(&conn->chan_l);
1638        INIT_LIST_HEAD(&conn->users);
1639
1640        if (hcon->type == LE_LINK)
1641                INIT_DELAYED_WORK(&conn->security_timer, security_timeout);
1642        else
1643                INIT_DELAYED_WORK(&conn->info_timer, l2cap_info_timeout);
1644
1645        conn->disc_reason = HCI_ERROR_REMOTE_USER_TERM;
1646
1647        return conn;
1648}
1649
1650static void l2cap_conn_free(struct kref *ref)
1651{
1652        struct l2cap_conn *conn = container_of(ref, struct l2cap_conn, ref);
1653
1654        hci_conn_put(conn->hcon);
1655        kfree(conn);
1656}
1657
1658void l2cap_conn_get(struct l2cap_conn *conn)
1659{
1660        kref_get(&conn->ref);
1661}
1662EXPORT_SYMBOL(l2cap_conn_get);
1663
1664void l2cap_conn_put(struct l2cap_conn *conn)
1665{
1666        kref_put(&conn->ref, l2cap_conn_free);
1667}
1668EXPORT_SYMBOL(l2cap_conn_put);
1669
1670/* ---- Socket interface ---- */
1671
1672/* Find socket with psm and source / destination bdaddr.
1673 * Returns closest match.
1674 */
1675static struct l2cap_chan *l2cap_global_chan_by_psm(int state, __le16 psm,
1676                                                   bdaddr_t *src,
1677                                                   bdaddr_t *dst)
1678{
1679        struct l2cap_chan *c, *c1 = NULL;
1680
1681        read_lock(&chan_list_lock);
1682
1683        list_for_each_entry(c, &chan_list, global_l) {
1684                struct sock *sk = c->sk;
1685
1686                if (state && c->state != state)
1687                        continue;
1688
1689                if (c->psm == psm) {
1690                        int src_match, dst_match;
1691                        int src_any, dst_any;
1692
1693                        /* Exact match. */
1694                        src_match = !bacmp(&bt_sk(sk)->src, src);
1695                        dst_match = !bacmp(&bt_sk(sk)->dst, dst);
1696                        if (src_match && dst_match) {
1697                                read_unlock(&chan_list_lock);
1698                                return c;
1699                        }
1700
1701                        /* Closest match */
1702                        src_any = !bacmp(&bt_sk(sk)->src, BDADDR_ANY);
1703                        dst_any = !bacmp(&bt_sk(sk)->dst, BDADDR_ANY);
1704                        if ((src_match && dst_any) || (src_any && dst_match) ||
1705                            (src_any && dst_any))
1706                                c1 = c;
1707                }
1708        }
1709
1710        read_unlock(&chan_list_lock);
1711
1712        return c1;
1713}
1714
1715int l2cap_chan_connect(struct l2cap_chan *chan, __le16 psm, u16 cid,
1716                       bdaddr_t *dst, u8 dst_type)
1717{
1718        struct sock *sk = chan->sk;
1719        bdaddr_t *src = &bt_sk(sk)->src;
1720        struct l2cap_conn *conn;
1721        struct hci_conn *hcon;
1722        struct hci_dev *hdev;
1723        __u8 auth_type;
1724        int err;
1725
1726        BT_DBG("%pMR -> %pMR (type %u) psm 0x%2.2x", src, dst,
1727               dst_type, __le16_to_cpu(psm));
1728
1729        hdev = hci_get_route(dst, src);
1730        if (!hdev)
1731                return -EHOSTUNREACH;
1732
1733        hci_dev_lock(hdev);
1734
1735        l2cap_chan_lock(chan);
1736
1737        /* PSM must be odd and lsb of upper byte must be 0 */
1738        if ((__le16_to_cpu(psm) & 0x0101) != 0x0001 && !cid &&
1739            chan->chan_type != L2CAP_CHAN_RAW) {
1740                err = -EINVAL;
1741                goto done;
1742        }
1743
1744        if (chan->chan_type == L2CAP_CHAN_CONN_ORIENTED && !(psm || cid)) {
1745                err = -EINVAL;
1746                goto done;
1747        }
1748
1749        switch (chan->mode) {
1750        case L2CAP_MODE_BASIC:
1751                break;
1752        case L2CAP_MODE_ERTM:
1753        case L2CAP_MODE_STREAMING:
1754                if (!disable_ertm)
1755                        break;
1756                /* fall through */
1757        default:
1758                err = -ENOTSUPP;
1759                goto done;
1760        }
1761
1762        switch (chan->state) {
1763        case BT_CONNECT:
1764        case BT_CONNECT2:
1765        case BT_CONFIG:
1766                /* Already connecting */
1767                err = 0;
1768                goto done;
1769
1770        case BT_CONNECTED:
1771                /* Already connected */
1772                err = -EISCONN;
1773                goto done;
1774
1775        case BT_OPEN:
1776        case BT_BOUND:
1777                /* Can connect */
1778                break;
1779
1780        default:
1781                err = -EBADFD;
1782                goto done;
1783        }
1784
1785        /* Set destination address and psm */
1786        lock_sock(sk);
1787        bacpy(&bt_sk(sk)->dst, dst);
1788        release_sock(sk);
1789
1790        chan->psm = psm;
1791        chan->dcid = cid;
1792
1793        auth_type = l2cap_get_auth_type(chan);
1794
1795        if (chan->dcid == L2CAP_CID_LE_DATA)
1796                hcon = hci_connect(hdev, LE_LINK, dst, dst_type,
1797                                   chan->sec_level, auth_type);
1798        else
1799                hcon = hci_connect(hdev, ACL_LINK, dst, dst_type,
1800                                   chan->sec_level, auth_type);
1801
1802        if (IS_ERR(hcon)) {
1803                err = PTR_ERR(hcon);
1804                goto done;
1805        }
1806
1807        conn = l2cap_conn_add(hcon);
1808        if (!conn) {
1809                hci_conn_drop(hcon);
1810                err = -ENOMEM;
1811                goto done;
1812        }
1813
1814        if (hcon->type == LE_LINK) {
1815                err = 0;
1816
1817                if (!list_empty(&conn->chan_l)) {
1818                        err = -EBUSY;
1819                        hci_conn_drop(hcon);
1820                }
1821
1822                if (err)
1823                        goto done;
1824        }
1825
1826        /* Update source addr of the socket */
1827        bacpy(src, conn->src);
1828
1829        l2cap_chan_unlock(chan);
1830        l2cap_chan_add(conn, chan);
1831        l2cap_chan_lock(chan);
1832
1833        l2cap_state_change(chan, BT_CONNECT);
1834        __set_chan_timer(chan, sk->sk_sndtimeo);
1835
1836        if (hcon->state == BT_CONNECTED) {
1837                if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED) {
1838                        __clear_chan_timer(chan);
1839                        if (l2cap_chan_check_security(chan))
1840                                l2cap_state_change(chan, BT_CONNECTED);
1841                } else
1842                        l2cap_do_start(chan);
1843        }
1844
1845        err = 0;
1846
1847done:
1848        l2cap_chan_unlock(chan);
1849        hci_dev_unlock(hdev);
1850        hci_dev_put(hdev);
1851        return err;
1852}
1853
1854int __l2cap_wait_ack(struct sock *sk)
1855{
1856        struct l2cap_chan *chan = l2cap_pi(sk)->chan;
1857        DECLARE_WAITQUEUE(wait, current);
1858        int err = 0;
1859        int timeo = HZ/5;
1860
1861        add_wait_queue(sk_sleep(sk), &wait);
1862        set_current_state(TASK_INTERRUPTIBLE);
1863        while (chan->unacked_frames > 0 && chan->conn) {
1864                if (!timeo)
1865                        timeo = HZ/5;
1866
1867                if (signal_pending(current)) {
1868                        err = sock_intr_errno(timeo);
1869                        break;
1870                }
1871
1872                release_sock(sk);
1873                timeo = schedule_timeout(timeo);
1874                lock_sock(sk);
1875                set_current_state(TASK_INTERRUPTIBLE);
1876
1877                err = sock_error(sk);
1878                if (err)
1879                        break;
1880        }
1881        set_current_state(TASK_RUNNING);
1882        remove_wait_queue(sk_sleep(sk), &wait);
1883        return err;
1884}
1885
1886static void l2cap_monitor_timeout(struct work_struct *work)
1887{
1888        struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
1889                                               monitor_timer.work);
1890
1891        BT_DBG("chan %p", chan);
1892
1893        l2cap_chan_lock(chan);
1894
1895        if (!chan->conn) {
1896                l2cap_chan_unlock(chan);
1897                l2cap_chan_put(chan);
1898                return;
1899        }
1900
1901        l2cap_tx(chan, NULL, NULL, L2CAP_EV_MONITOR_TO);
1902
1903        l2cap_chan_unlock(chan);
1904        l2cap_chan_put(chan);
1905}
1906
1907static void l2cap_retrans_timeout(struct work_struct *work)
1908{
1909        struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
1910                                               retrans_timer.work);
1911
1912        BT_DBG("chan %p", chan);
1913
1914        l2cap_chan_lock(chan);
1915
1916        if (!chan->conn) {
1917                l2cap_chan_unlock(chan);
1918                l2cap_chan_put(chan);
1919                return;
1920        }
1921
1922        l2cap_tx(chan, NULL, NULL, L2CAP_EV_RETRANS_TO);
1923        l2cap_chan_unlock(chan);
1924        l2cap_chan_put(chan);
1925}
1926
1927static void l2cap_streaming_send(struct l2cap_chan *chan,
1928                                 struct sk_buff_head *skbs)
1929{
1930        struct sk_buff *skb;
1931        struct l2cap_ctrl *control;
1932
1933        BT_DBG("chan %p, skbs %p", chan, skbs);
1934
1935        if (__chan_is_moving(chan))
1936                return;
1937
1938        skb_queue_splice_tail_init(skbs, &chan->tx_q);
1939
1940        while (!skb_queue_empty(&chan->tx_q)) {
1941
1942                skb = skb_dequeue(&chan->tx_q);
1943
1944                bt_cb(skb)->control.retries = 1;
1945                control = &bt_cb(skb)->control;
1946
1947                control->reqseq = 0;
1948                control->txseq = chan->next_tx_seq;
1949
1950                __pack_control(chan, control, skb);
1951
1952                if (chan->fcs == L2CAP_FCS_CRC16) {
1953                        u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
1954                        put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
1955                }
1956
1957                l2cap_do_send(chan, skb);
1958
1959                BT_DBG("Sent txseq %u", control->txseq);
1960
1961                chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
1962                chan->frames_sent++;
1963        }
1964}
1965
1966static int l2cap_ertm_send(struct l2cap_chan *chan)
1967{
1968        struct sk_buff *skb, *tx_skb;
1969        struct l2cap_ctrl *control;
1970        int sent = 0;
1971
1972        BT_DBG("chan %p", chan);
1973
1974        if (chan->state != BT_CONNECTED)
1975                return -ENOTCONN;
1976
1977        if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
1978                return 0;
1979
1980        if (__chan_is_moving(chan))
1981                return 0;
1982
1983        while (chan->tx_send_head &&
1984               chan->unacked_frames < chan->remote_tx_win &&
1985               chan->tx_state == L2CAP_TX_STATE_XMIT) {
1986
1987                skb = chan->tx_send_head;
1988
1989                bt_cb(skb)->control.retries = 1;
1990                control = &bt_cb(skb)->control;
1991
1992                if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
1993                        control->final = 1;
1994
1995                control->reqseq = chan->buffer_seq;
1996                chan->last_acked_seq = chan->buffer_seq;
1997                control->txseq = chan->next_tx_seq;
1998
1999                __pack_control(chan, control, skb);
2000
2001                if (chan->fcs == L2CAP_FCS_CRC16) {
2002                        u16 fcs = crc16(0, (u8 *) skb->data, skb->len);
2003                        put_unaligned_le16(fcs, skb_put(skb, L2CAP_FCS_SIZE));
2004                }
2005
2006                /* Clone after data has been modified. Data is assumed to be
2007                   read-only (for locking purposes) on cloned sk_buffs.
2008                 */
2009                tx_skb = skb_clone(skb, GFP_KERNEL);
2010
2011                if (!tx_skb)
2012                        break;
2013
2014                __set_retrans_timer(chan);
2015
2016                chan->next_tx_seq = __next_seq(chan, chan->next_tx_seq);
2017                chan->unacked_frames++;
2018                chan->frames_sent++;
2019                sent++;
2020
2021                if (skb_queue_is_last(&chan->tx_q, skb))
2022                        chan->tx_send_head = NULL;
2023                else
2024                        chan->tx_send_head = skb_queue_next(&chan->tx_q, skb);
2025
2026                l2cap_do_send(chan, tx_skb);
2027                BT_DBG("Sent txseq %u", control->txseq);
2028        }
2029
2030        BT_DBG("Sent %d, %u unacked, %u in ERTM queue", sent,
2031               chan->unacked_frames, skb_queue_len(&chan->tx_q));
2032
2033        return sent;
2034}
2035
2036static void l2cap_ertm_resend(struct l2cap_chan *chan)
2037{
2038        struct l2cap_ctrl control;
2039        struct sk_buff *skb;
2040        struct sk_buff *tx_skb;
2041        u16 seq;
2042
2043        BT_DBG("chan %p", chan);
2044
2045        if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2046                return;
2047
2048        if (__chan_is_moving(chan))
2049                return;
2050
2051        while (chan->retrans_list.head != L2CAP_SEQ_LIST_CLEAR) {
2052                seq = l2cap_seq_list_pop(&chan->retrans_list);
2053
2054                skb = l2cap_ertm_seq_in_queue(&chan->tx_q, seq);
2055                if (!skb) {
2056                        BT_DBG("Error: Can't retransmit seq %d, frame missing",
2057                               seq);
2058                        continue;
2059                }
2060
2061                bt_cb(skb)->control.retries++;
2062                control = bt_cb(skb)->control;
2063
2064                if (chan->max_tx != 0 &&
2065                    bt_cb(skb)->control.retries > chan->max_tx) {
2066                        BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
2067                        l2cap_send_disconn_req(chan, ECONNRESET);
2068                        l2cap_seq_list_clear(&chan->retrans_list);
2069                        break;
2070                }
2071
2072                control.reqseq = chan->buffer_seq;
2073                if (test_and_clear_bit(CONN_SEND_FBIT, &chan->conn_state))
2074                        control.final = 1;
2075                else
2076                        control.final = 0;
2077
2078                if (skb_cloned(skb)) {
2079                        /* Cloned sk_buffs are read-only, so we need a
2080                         * writeable copy
2081                         */
2082                        tx_skb = skb_copy(skb, GFP_KERNEL);
2083                } else {
2084                        tx_skb = skb_clone(skb, GFP_KERNEL);
2085                }
2086
2087                if (!tx_skb) {
2088                        l2cap_seq_list_clear(&chan->retrans_list);
2089                        break;
2090                }
2091
2092                /* Update skb contents */
2093                if (test_bit(FLAG_EXT_CTRL, &chan->flags)) {
2094                        put_unaligned_le32(__pack_extended_control(&control),
2095                                           tx_skb->data + L2CAP_HDR_SIZE);
2096                } else {
2097                        put_unaligned_le16(__pack_enhanced_control(&control),
2098                                           tx_skb->data + L2CAP_HDR_SIZE);
2099                }
2100
2101                if (chan->fcs == L2CAP_FCS_CRC16) {
2102                        u16 fcs = crc16(0, (u8 *) tx_skb->data, tx_skb->len);
2103                        put_unaligned_le16(fcs, skb_put(tx_skb,
2104                                                        L2CAP_FCS_SIZE));
2105                }
2106
2107                l2cap_do_send(chan, tx_skb);
2108
2109                BT_DBG("Resent txseq %d", control.txseq);
2110
2111                chan->last_acked_seq = chan->buffer_seq;
2112        }
2113}
2114
2115static void l2cap_retransmit(struct l2cap_chan *chan,
2116                             struct l2cap_ctrl *control)
2117{
2118        BT_DBG("chan %p, control %p", chan, control);
2119
2120        l2cap_seq_list_append(&chan->retrans_list, control->reqseq);
2121        l2cap_ertm_resend(chan);
2122}
2123
2124static void l2cap_retransmit_all(struct l2cap_chan *chan,
2125                                 struct l2cap_ctrl *control)
2126{
2127        struct sk_buff *skb;
2128
2129        BT_DBG("chan %p, control %p", chan, control);
2130
2131        if (control->poll)
2132                set_bit(CONN_SEND_FBIT, &chan->conn_state);
2133
2134        l2cap_seq_list_clear(&chan->retrans_list);
2135
2136        if (test_bit(CONN_REMOTE_BUSY, &chan->conn_state))
2137                return;
2138
2139        if (chan->unacked_frames) {
2140                skb_queue_walk(&chan->tx_q, skb) {
2141                        if (bt_cb(skb)->control.txseq == control->reqseq ||
2142                            skb == chan->tx_send_head)
2143                                break;
2144                }
2145
2146                skb_queue_walk_from(&chan->tx_q, skb) {
2147                        if (skb == chan->tx_send_head)
2148                                break;
2149
2150                        l2cap_seq_list_append(&chan->retrans_list,
2151                                              bt_cb(skb)->control.txseq);
2152                }
2153
2154                l2cap_ertm_resend(chan);
2155        }
2156}
2157
2158static void l2cap_send_ack(struct l2cap_chan *chan)
2159{
2160        struct l2cap_ctrl control;
2161        u16 frames_to_ack = __seq_offset(chan, chan->buffer_seq,
2162                                         chan->last_acked_seq);
2163        int threshold;
2164
2165        BT_DBG("chan %p last_acked_seq %d buffer_seq %d",
2166               chan, chan->last_acked_seq, chan->buffer_seq);
2167
2168        memset(&control, 0, sizeof(control));
2169        control.sframe = 1;
2170
2171        if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
2172            chan->rx_state == L2CAP_RX_STATE_RECV) {
2173                __clear_ack_timer(chan);
2174                control.super = L2CAP_SUPER_RNR;
2175                control.reqseq = chan->buffer_seq;
2176                l2cap_send_sframe(chan, &control);
2177        } else {
2178                if (!test_bit(CONN_REMOTE_BUSY, &chan->conn_state)) {
2179                        l2cap_ertm_send(chan);
2180                        /* If any i-frames were sent, they included an ack */
2181                        if (chan->buffer_seq == chan->last_acked_seq)
2182                                frames_to_ack = 0;
2183                }
2184
2185                /* Ack now if the window is 3/4ths full.
2186                 * Calculate without mul or div
2187                 */
2188                threshold = chan->ack_win;
2189                threshold += threshold << 1;
2190                threshold >>= 2;
2191
2192                BT_DBG("frames_to_ack %u, threshold %d", frames_to_ack,
2193                       threshold);
2194
2195                if (frames_to_ack >= threshold) {
2196                        __clear_ack_timer(chan);
2197                        control.super = L2CAP_SUPER_RR;
2198                        control.reqseq = chan->buffer_seq;
2199                        l2cap_send_sframe(chan, &control);
2200                        frames_to_ack = 0;
2201                }
2202
2203                if (frames_to_ack)
2204                        __set_ack_timer(chan);
2205        }
2206}
2207
2208static inline int l2cap_skbuff_fromiovec(struct l2cap_chan *chan,
2209                                         struct msghdr *msg, int len,
2210                                         int count, struct sk_buff *skb)
2211{
2212        struct l2cap_conn *conn = chan->conn;
2213        struct sk_buff **frag;
2214        int sent = 0;
2215
2216        if (memcpy_fromiovec(skb_put(skb, count), msg->msg_iov, count))
2217                return -EFAULT;
2218
2219        sent += count;
2220        len  -= count;
2221
2222        /* Continuation fragments (no L2CAP header) */
2223        frag = &skb_shinfo(skb)->frag_list;
2224        while (len) {
2225                struct sk_buff *tmp;
2226
2227                count = min_t(unsigned int, conn->mtu, len);
2228
2229                tmp = chan->ops->alloc_skb(chan, count,
2230                                           msg->msg_flags & MSG_DONTWAIT);
2231                if (IS_ERR(tmp))
2232                        return PTR_ERR(tmp);
2233
2234                *frag = tmp;
2235
2236                if (memcpy_fromiovec(skb_put(*frag, count), msg->msg_iov, count))
2237                        return -EFAULT;
2238
2239                (*frag)->priority = skb->priority;
2240
2241                sent += count;
2242                len  -= count;
2243
2244                skb->len += (*frag)->len;
2245                skb->data_len += (*frag)->len;
2246
2247                frag = &(*frag)->next;
2248        }
2249
2250        return sent;
2251}
2252
2253static struct sk_buff *l2cap_create_connless_pdu(struct l2cap_chan *chan,
2254                                                 struct msghdr *msg, size_t len,
2255                                                 u32 priority)
2256{
2257        struct l2cap_conn *conn = chan->conn;
2258        struct sk_buff *skb;
2259        int err, count, hlen = L2CAP_HDR_SIZE + L2CAP_PSMLEN_SIZE;
2260        struct l2cap_hdr *lh;
2261
2262        BT_DBG("chan %p len %zu priority %u", chan, len, priority);
2263
2264        count = min_t(unsigned int, (conn->mtu - hlen), len);
2265
2266        skb = chan->ops->alloc_skb(chan, count + hlen,
2267                                   msg->msg_flags & MSG_DONTWAIT);
2268        if (IS_ERR(skb))
2269                return skb;
2270
2271        skb->priority = priority;
2272
2273        /* Create L2CAP header */
2274        lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
2275        lh->cid = cpu_to_le16(chan->dcid);
2276        lh->len = cpu_to_le16(len + L2CAP_PSMLEN_SIZE);
2277        put_unaligned(chan->psm, skb_put(skb, L2CAP_PSMLEN_SIZE));
2278
2279        err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2280        if (unlikely(err < 0)) {
2281                kfree_skb(skb);
2282                return ERR_PTR(err);
2283        }
2284        return skb;
2285}
2286
2287static struct sk_buff *l2cap_create_basic_pdu(struct l2cap_chan *chan,
2288                                              struct msghdr *msg, size_t len,
2289                                              u32 priority)
2290{
2291        struct l2cap_conn *conn = chan->conn;
2292        struct sk_buff *skb;
2293        int err, count;
2294        struct l2cap_hdr *lh;
2295
2296        BT_DBG("chan %p len %zu", chan, len);
2297
2298        count = min_t(unsigned int, (conn->mtu - L2CAP_HDR_SIZE), len);
2299
2300        skb = chan->ops->alloc_skb(chan, count + L2CAP_HDR_SIZE,
2301                                   msg->msg_flags & MSG_DONTWAIT);
2302        if (IS_ERR(skb))
2303                return skb;
2304
2305        skb->priority = priority;
2306
2307        /* Create L2CAP header */
2308        lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
2309        lh->cid = cpu_to_le16(chan->dcid);
2310        lh->len = cpu_to_le16(len);
2311
2312        err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2313        if (unlikely(err < 0)) {
2314                kfree_skb(skb);
2315                return ERR_PTR(err);
2316        }
2317        return skb;
2318}
2319
2320static struct sk_buff *l2cap_create_iframe_pdu(struct l2cap_chan *chan,
2321                                               struct msghdr *msg, size_t len,
2322                                               u16 sdulen)
2323{
2324        struct l2cap_conn *conn = chan->conn;
2325        struct sk_buff *skb;
2326        int err, count, hlen;
2327        struct l2cap_hdr *lh;
2328
2329        BT_DBG("chan %p len %zu", chan, len);
2330
2331        if (!conn)
2332                return ERR_PTR(-ENOTCONN);
2333
2334        hlen = __ertm_hdr_size(chan);
2335
2336        if (sdulen)
2337                hlen += L2CAP_SDULEN_SIZE;
2338
2339        if (chan->fcs == L2CAP_FCS_CRC16)
2340                hlen += L2CAP_FCS_SIZE;
2341
2342        count = min_t(unsigned int, (conn->mtu - hlen), len);
2343
2344        skb = chan->ops->alloc_skb(chan, count + hlen,
2345                                   msg->msg_flags & MSG_DONTWAIT);
2346        if (IS_ERR(skb))
2347                return skb;
2348
2349        /* Create L2CAP header */
2350        lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
2351        lh->cid = cpu_to_le16(chan->dcid);
2352        lh->len = cpu_to_le16(len + (hlen - L2CAP_HDR_SIZE));
2353
2354        /* Control header is populated later */
2355        if (test_bit(FLAG_EXT_CTRL, &chan->flags))
2356                put_unaligned_le32(0, skb_put(skb, L2CAP_EXT_CTRL_SIZE));
2357        else
2358                put_unaligned_le16(0, skb_put(skb, L2CAP_ENH_CTRL_SIZE));
2359
2360        if (sdulen)
2361                put_unaligned_le16(sdulen, skb_put(skb, L2CAP_SDULEN_SIZE));
2362
2363        err = l2cap_skbuff_fromiovec(chan, msg, len, count, skb);
2364        if (unlikely(err < 0)) {
2365                kfree_skb(skb);
2366                return ERR_PTR(err);
2367        }
2368
2369        bt_cb(skb)->control.fcs = chan->fcs;
2370        bt_cb(skb)->control.retries = 0;
2371        return skb;
2372}
2373
2374static int l2cap_segment_sdu(struct l2cap_chan *chan,
2375                             struct sk_buff_head *seg_queue,
2376                             struct msghdr *msg, size_t len)
2377{
2378        struct sk_buff *skb;
2379        u16 sdu_len;
2380        size_t pdu_len;
2381        u8 sar;
2382
2383        BT_DBG("chan %p, msg %p, len %zu", chan, msg, len);
2384
2385        /* It is critical that ERTM PDUs fit in a single HCI fragment,
2386         * so fragmented skbs are not used.  The HCI layer's handling
2387         * of fragmented skbs is not compatible with ERTM's queueing.
2388         */
2389
2390        /* PDU size is derived from the HCI MTU */
2391        pdu_len = chan->conn->mtu;
2392
2393        /* Constrain PDU size for BR/EDR connections */
2394        if (!chan->hs_hcon)
2395                pdu_len = min_t(size_t, pdu_len, L2CAP_BREDR_MAX_PAYLOAD);
2396
2397        /* Adjust for largest possible L2CAP overhead. */
2398        if (chan->fcs)
2399                pdu_len -= L2CAP_FCS_SIZE;
2400
2401        pdu_len -= __ertm_hdr_size(chan);
2402
2403        /* Remote device may have requested smaller PDUs */
2404        pdu_len = min_t(size_t, pdu_len, chan->remote_mps);
2405
2406        if (len <= pdu_len) {
2407                sar = L2CAP_SAR_UNSEGMENTED;
2408                sdu_len = 0;
2409                pdu_len = len;
2410        } else {
2411                sar = L2CAP_SAR_START;
2412                sdu_len = len;
2413                pdu_len -= L2CAP_SDULEN_SIZE;
2414        }
2415
2416        while (len > 0) {
2417                skb = l2cap_create_iframe_pdu(chan, msg, pdu_len, sdu_len);
2418
2419                if (IS_ERR(skb)) {
2420                        __skb_queue_purge(seg_queue);
2421                        return PTR_ERR(skb);
2422                }
2423
2424                bt_cb(skb)->control.sar = sar;
2425                __skb_queue_tail(seg_queue, skb);
2426
2427                len -= pdu_len;
2428                if (sdu_len) {
2429                        sdu_len = 0;
2430                        pdu_len += L2CAP_SDULEN_SIZE;
2431                }
2432
2433                if (len <= pdu_len) {
2434                        sar = L2CAP_SAR_END;
2435                        pdu_len = len;
2436                } else {
2437                        sar = L2CAP_SAR_CONTINUE;
2438                }
2439        }
2440
2441        return 0;
2442}
2443
2444int l2cap_chan_send(struct l2cap_chan *chan, struct msghdr *msg, size_t len,
2445                    u32 priority)
2446{
2447        struct sk_buff *skb;
2448        int err;
2449        struct sk_buff_head seg_queue;
2450
2451        /* Connectionless channel */
2452        if (chan->chan_type == L2CAP_CHAN_CONN_LESS) {
2453                skb = l2cap_create_connless_pdu(chan, msg, len, priority);
2454                if (IS_ERR(skb))
2455                        return PTR_ERR(skb);
2456
2457                l2cap_do_send(chan, skb);
2458                return len;
2459        }
2460
2461        switch (chan->mode) {
2462        case L2CAP_MODE_BASIC:
2463                /* Check outgoing MTU */
2464                if (len > chan->omtu)
2465                        return -EMSGSIZE;
2466
2467                /* Create a basic PDU */
2468                skb = l2cap_create_basic_pdu(chan, msg, len, priority);
2469                if (IS_ERR(skb))
2470                        return PTR_ERR(skb);
2471
2472                l2cap_do_send(chan, skb);
2473                err = len;
2474                break;
2475
2476        case L2CAP_MODE_ERTM:
2477        case L2CAP_MODE_STREAMING:
2478                /* Check outgoing MTU */
2479                if (len > chan->omtu) {
2480                        err = -EMSGSIZE;
2481                        break;
2482                }
2483
2484                __skb_queue_head_init(&seg_queue);
2485
2486                /* Do segmentation before calling in to the state machine,
2487                 * since it's possible to block while waiting for memory
2488                 * allocation.
2489                 */
2490                err = l2cap_segment_sdu(chan, &seg_queue, msg, len);
2491
2492                /* The channel could have been closed while segmenting,
2493                 * check that it is still connected.
2494                 */
2495                if (chan->state != BT_CONNECTED) {
2496                        __skb_queue_purge(&seg_queue);
2497                        err = -ENOTCONN;
2498                }
2499
2500                if (err)
2501                        break;
2502
2503                if (chan->mode == L2CAP_MODE_ERTM)
2504                        l2cap_tx(chan, NULL, &seg_queue, L2CAP_EV_DATA_REQUEST);
2505                else
2506                        l2cap_streaming_send(chan, &seg_queue);
2507
2508                err = len;
2509
2510                /* If the skbs were not queued for sending, they'll still be in
2511                 * seg_queue and need to be purged.
2512                 */
2513                __skb_queue_purge(&seg_queue);
2514                break;
2515
2516        default:
2517                BT_DBG("bad state %1.1x", chan->mode);
2518                err = -EBADFD;
2519        }
2520
2521        return err;
2522}
2523
2524static void l2cap_send_srej(struct l2cap_chan *chan, u16 txseq)
2525{
2526        struct l2cap_ctrl control;
2527        u16 seq;
2528
2529        BT_DBG("chan %p, txseq %u", chan, txseq);
2530
2531        memset(&control, 0, sizeof(control));
2532        control.sframe = 1;
2533        control.super = L2CAP_SUPER_SREJ;
2534
2535        for (seq = chan->expected_tx_seq; seq != txseq;
2536             seq = __next_seq(chan, seq)) {
2537                if (!l2cap_ertm_seq_in_queue(&chan->srej_q, seq)) {
2538                        control.reqseq = seq;
2539                        l2cap_send_sframe(chan, &control);
2540                        l2cap_seq_list_append(&chan->srej_list, seq);
2541                }
2542        }
2543
2544        chan->expected_tx_seq = __next_seq(chan, txseq);
2545}
2546
2547static void l2cap_send_srej_tail(struct l2cap_chan *chan)
2548{
2549        struct l2cap_ctrl control;
2550
2551        BT_DBG("chan %p", chan);
2552
2553        if (chan->srej_list.tail == L2CAP_SEQ_LIST_CLEAR)
2554                return;
2555
2556        memset(&control, 0, sizeof(control));
2557        control.sframe = 1;
2558        control.super = L2CAP_SUPER_SREJ;
2559        control.reqseq = chan->srej_list.tail;
2560        l2cap_send_sframe(chan, &control);
2561}
2562
2563static void l2cap_send_srej_list(struct l2cap_chan *chan, u16 txseq)
2564{
2565        struct l2cap_ctrl control;
2566        u16 initial_head;
2567        u16 seq;
2568
2569        BT_DBG("chan %p, txseq %u", chan, txseq);
2570
2571        memset(&control, 0, sizeof(control));
2572        control.sframe = 1;
2573        control.super = L2CAP_SUPER_SREJ;
2574
2575        /* Capture initial list head to allow only one pass through the list. */
2576        initial_head = chan->srej_list.head;
2577
2578        do {
2579                seq = l2cap_seq_list_pop(&chan->srej_list);
2580                if (seq == txseq || seq == L2CAP_SEQ_LIST_CLEAR)
2581                        break;
2582
2583                control.reqseq = seq;
2584                l2cap_send_sframe(chan, &control);
2585                l2cap_seq_list_append(&chan->srej_list, seq);
2586        } while (chan->srej_list.head != initial_head);
2587}
2588
2589static void l2cap_process_reqseq(struct l2cap_chan *chan, u16 reqseq)
2590{
2591        struct sk_buff *acked_skb;
2592        u16 ackseq;
2593
2594        BT_DBG("chan %p, reqseq %u", chan, reqseq);
2595
2596        if (chan->unacked_frames == 0 || reqseq == chan->expected_ack_seq)
2597                return;
2598
2599        BT_DBG("expected_ack_seq %u, unacked_frames %u",
2600               chan->expected_ack_seq, chan->unacked_frames);
2601
2602        for (ackseq = chan->expected_ack_seq; ackseq != reqseq;
2603             ackseq = __next_seq(chan, ackseq)) {
2604
2605                acked_skb = l2cap_ertm_seq_in_queue(&chan->tx_q, ackseq);
2606                if (acked_skb) {
2607                        skb_unlink(acked_skb, &chan->tx_q);
2608                        kfree_skb(acked_skb);
2609                        chan->unacked_frames--;
2610                }
2611        }
2612
2613        chan->expected_ack_seq = reqseq;
2614
2615        if (chan->unacked_frames == 0)
2616                __clear_retrans_timer(chan);
2617
2618        BT_DBG("unacked_frames %u", chan->unacked_frames);
2619}
2620
2621static void l2cap_abort_rx_srej_sent(struct l2cap_chan *chan)
2622{
2623        BT_DBG("chan %p", chan);
2624
2625        chan->expected_tx_seq = chan->buffer_seq;
2626        l2cap_seq_list_clear(&chan->srej_list);
2627        skb_queue_purge(&chan->srej_q);
2628        chan->rx_state = L2CAP_RX_STATE_RECV;
2629}
2630
2631static void l2cap_tx_state_xmit(struct l2cap_chan *chan,
2632                                struct l2cap_ctrl *control,
2633                                struct sk_buff_head *skbs, u8 event)
2634{
2635        BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2636               event);
2637
2638        switch (event) {
2639        case L2CAP_EV_DATA_REQUEST:
2640                if (chan->tx_send_head == NULL)
2641                        chan->tx_send_head = skb_peek(skbs);
2642
2643                skb_queue_splice_tail_init(skbs, &chan->tx_q);
2644                l2cap_ertm_send(chan);
2645                break;
2646        case L2CAP_EV_LOCAL_BUSY_DETECTED:
2647                BT_DBG("Enter LOCAL_BUSY");
2648                set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2649
2650                if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2651                        /* The SREJ_SENT state must be aborted if we are to
2652                         * enter the LOCAL_BUSY state.
2653                         */
2654                        l2cap_abort_rx_srej_sent(chan);
2655                }
2656
2657                l2cap_send_ack(chan);
2658
2659                break;
2660        case L2CAP_EV_LOCAL_BUSY_CLEAR:
2661                BT_DBG("Exit LOCAL_BUSY");
2662                clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2663
2664                if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
2665                        struct l2cap_ctrl local_control;
2666
2667                        memset(&local_control, 0, sizeof(local_control));
2668                        local_control.sframe = 1;
2669                        local_control.super = L2CAP_SUPER_RR;
2670                        local_control.poll = 1;
2671                        local_control.reqseq = chan->buffer_seq;
2672                        l2cap_send_sframe(chan, &local_control);
2673
2674                        chan->retry_count = 1;
2675                        __set_monitor_timer(chan);
2676                        chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2677                }
2678                break;
2679        case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
2680                l2cap_process_reqseq(chan, control->reqseq);
2681                break;
2682        case L2CAP_EV_EXPLICIT_POLL:
2683                l2cap_send_rr_or_rnr(chan, 1);
2684                chan->retry_count = 1;
2685                __set_monitor_timer(chan);
2686                __clear_ack_timer(chan);
2687                chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2688                break;
2689        case L2CAP_EV_RETRANS_TO:
2690                l2cap_send_rr_or_rnr(chan, 1);
2691                chan->retry_count = 1;
2692                __set_monitor_timer(chan);
2693                chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2694                break;
2695        case L2CAP_EV_RECV_FBIT:
2696                /* Nothing to process */
2697                break;
2698        default:
2699                break;
2700        }
2701}
2702
2703static void l2cap_tx_state_wait_f(struct l2cap_chan *chan,
2704                                  struct l2cap_ctrl *control,
2705                                  struct sk_buff_head *skbs, u8 event)
2706{
2707        BT_DBG("chan %p, control %p, skbs %p, event %d", chan, control, skbs,
2708               event);
2709
2710        switch (event) {
2711        case L2CAP_EV_DATA_REQUEST:
2712                if (chan->tx_send_head == NULL)
2713                        chan->tx_send_head = skb_peek(skbs);
2714                /* Queue data, but don't send. */
2715                skb_queue_splice_tail_init(skbs, &chan->tx_q);
2716                break;
2717        case L2CAP_EV_LOCAL_BUSY_DETECTED:
2718                BT_DBG("Enter LOCAL_BUSY");
2719                set_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2720
2721                if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
2722                        /* The SREJ_SENT state must be aborted if we are to
2723                         * enter the LOCAL_BUSY state.
2724                         */
2725                        l2cap_abort_rx_srej_sent(chan);
2726                }
2727
2728                l2cap_send_ack(chan);
2729
2730                break;
2731        case L2CAP_EV_LOCAL_BUSY_CLEAR:
2732                BT_DBG("Exit LOCAL_BUSY");
2733                clear_bit(CONN_LOCAL_BUSY, &chan->conn_state);
2734
2735                if (test_bit(CONN_RNR_SENT, &chan->conn_state)) {
2736                        struct l2cap_ctrl local_control;
2737                        memset(&local_control, 0, sizeof(local_control));
2738                        local_control.sframe = 1;
2739                        local_control.super = L2CAP_SUPER_RR;
2740                        local_control.poll = 1;
2741                        local_control.reqseq = chan->buffer_seq;
2742                        l2cap_send_sframe(chan, &local_control);
2743
2744                        chan->retry_count = 1;
2745                        __set_monitor_timer(chan);
2746                        chan->tx_state = L2CAP_TX_STATE_WAIT_F;
2747                }
2748                break;
2749        case L2CAP_EV_RECV_REQSEQ_AND_FBIT:
2750                l2cap_process_reqseq(chan, control->reqseq);
2751
2752                /* Fall through */
2753
2754        case L2CAP_EV_RECV_FBIT:
2755                if (control && control->final) {
2756                        __clear_monitor_timer(chan);
2757                        if (chan->unacked_frames > 0)
2758                                __set_retrans_timer(chan);
2759                        chan->retry_count = 0;
2760                        chan->tx_state = L2CAP_TX_STATE_XMIT;
2761                        BT_DBG("recv fbit tx_state 0x2.2%x", chan->tx_state);
2762                }
2763                break;
2764        case L2CAP_EV_EXPLICIT_POLL:
2765                /* Ignore */
2766                break;
2767        case L2CAP_EV_MONITOR_TO:
2768                if (chan->max_tx == 0 || chan->retry_count < chan->max_tx) {
2769                        l2cap_send_rr_or_rnr(chan, 1);
2770                        __set_monitor_timer(chan);
2771                        chan->retry_count++;
2772                } else {
2773                        l2cap_send_disconn_req(chan, ECONNABORTED);
2774                }
2775                break;
2776        default:
2777                break;
2778        }
2779}
2780
2781static void l2cap_tx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
2782                     struct sk_buff_head *skbs, u8 event)
2783{
2784        BT_DBG("chan %p, control %p, skbs %p, event %d, state %d",
2785               chan, control, skbs, event, chan->tx_state);
2786
2787        switch (chan->tx_state) {
2788        case L2CAP_TX_STATE_XMIT:
2789                l2cap_tx_state_xmit(chan, control, skbs, event);
2790                break;
2791        case L2CAP_TX_STATE_WAIT_F:
2792                l2cap_tx_state_wait_f(chan, control, skbs, event);
2793                break;
2794        default:
2795                /* Ignore event */
2796                break;
2797        }
2798}
2799
2800static void l2cap_pass_to_tx(struct l2cap_chan *chan,
2801                             struct l2cap_ctrl *control)
2802{
2803        BT_DBG("chan %p, control %p", chan, control);
2804        l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_REQSEQ_AND_FBIT);
2805}
2806
2807static void l2cap_pass_to_tx_fbit(struct l2cap_chan *chan,
2808                                  struct l2cap_ctrl *control)
2809{
2810        BT_DBG("chan %p, control %p", chan, control);
2811        l2cap_tx(chan, control, NULL, L2CAP_EV_RECV_FBIT);
2812}
2813
2814/* Copy frame to all raw sockets on that connection */
2815static void l2cap_raw_recv(struct l2cap_conn *conn, struct sk_buff *skb)
2816{
2817        struct sk_buff *nskb;
2818        struct l2cap_chan *chan;
2819
2820        BT_DBG("conn %p", conn);
2821
2822        mutex_lock(&conn->chan_lock);
2823
2824        list_for_each_entry(chan, &conn->chan_l, list) {
2825                struct sock *sk = chan->sk;
2826                if (chan->chan_type != L2CAP_CHAN_RAW)
2827                        continue;
2828
2829                /* Don't send frame to the socket it came from */
2830                if (skb->sk == sk)
2831                        continue;
2832                nskb = skb_clone(skb, GFP_KERNEL);
2833                if (!nskb)
2834                        continue;
2835
2836                if (chan->ops->recv(chan, nskb))
2837                        kfree_skb(nskb);
2838        }
2839
2840        mutex_unlock(&conn->chan_lock);
2841}
2842
2843/* ---- L2CAP signalling commands ---- */
2844static struct sk_buff *l2cap_build_cmd(struct l2cap_conn *conn, u8 code,
2845                                       u8 ident, u16 dlen, void *data)
2846{
2847        struct sk_buff *skb, **frag;
2848        struct l2cap_cmd_hdr *cmd;
2849        struct l2cap_hdr *lh;
2850        int len, count;
2851
2852        BT_DBG("conn %p, code 0x%2.2x, ident 0x%2.2x, len %u",
2853               conn, code, ident, dlen);
2854
2855        if (conn->mtu < L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE)
2856                return NULL;
2857
2858        len = L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE + dlen;
2859        count = min_t(unsigned int, conn->mtu, len);
2860
2861        skb = bt_skb_alloc(count, GFP_KERNEL);
2862        if (!skb)
2863                return NULL;
2864
2865        lh = (struct l2cap_hdr *) skb_put(skb, L2CAP_HDR_SIZE);
2866        lh->len = cpu_to_le16(L2CAP_CMD_HDR_SIZE + dlen);
2867
2868        if (conn->hcon->type == LE_LINK)
2869                lh->cid = __constant_cpu_to_le16(L2CAP_CID_LE_SIGNALING);
2870        else
2871                lh->cid = __constant_cpu_to_le16(L2CAP_CID_SIGNALING);
2872
2873        cmd = (struct l2cap_cmd_hdr *) skb_put(skb, L2CAP_CMD_HDR_SIZE);
2874        cmd->code  = code;
2875        cmd->ident = ident;
2876        cmd->len   = cpu_to_le16(dlen);
2877
2878        if (dlen) {
2879                count -= L2CAP_HDR_SIZE + L2CAP_CMD_HDR_SIZE;
2880                memcpy(skb_put(skb, count), data, count);
2881                data += count;
2882        }
2883
2884        len -= skb->len;
2885
2886        /* Continuation fragments (no L2CAP header) */
2887        frag = &skb_shinfo(skb)->frag_list;
2888        while (len) {
2889                count = min_t(unsigned int, conn->mtu, len);
2890
2891                *frag = bt_skb_alloc(count, GFP_KERNEL);
2892                if (!*frag)
2893                        goto fail;
2894
2895                memcpy(skb_put(*frag, count), data, count);
2896
2897                len  -= count;
2898                data += count;
2899
2900                frag = &(*frag)->next;
2901        }
2902
2903        return skb;
2904
2905fail:
2906        kfree_skb(skb);
2907        return NULL;
2908}
2909
2910static inline int l2cap_get_conf_opt(void **ptr, int *type, int *olen,
2911                                     unsigned long *val)
2912{
2913        struct l2cap_conf_opt *opt = *ptr;
2914        int len;
2915
2916        len = L2CAP_CONF_OPT_SIZE + opt->len;
2917        *ptr += len;
2918
2919        *type = opt->type;
2920        *olen = opt->len;
2921
2922        switch (opt->len) {
2923        case 1:
2924                *val = *((u8 *) opt->val);
2925                break;
2926
2927        case 2:
2928                *val = get_unaligned_le16(opt->val);
2929                break;
2930
2931        case 4:
2932                *val = get_unaligned_le32(opt->val);
2933                break;
2934
2935        default:
2936                *val = (unsigned long) opt->val;
2937                break;
2938        }
2939
2940        BT_DBG("type 0x%2.2x len %u val 0x%lx", *type, opt->len, *val);
2941        return len;
2942}
2943
2944static void l2cap_add_conf_opt(void **ptr, u8 type, u8 len, unsigned long val)
2945{
2946        struct l2cap_conf_opt *opt = *ptr;
2947
2948        BT_DBG("type 0x%2.2x len %u val 0x%lx", type, len, val);
2949
2950        opt->type = type;
2951        opt->len  = len;
2952
2953        switch (len) {
2954        case 1:
2955                *((u8 *) opt->val)  = val;
2956                break;
2957
2958        case 2:
2959                put_unaligned_le16(val, opt->val);
2960                break;
2961
2962        case 4:
2963                put_unaligned_le32(val, opt->val);
2964                break;
2965
2966        default:
2967                memcpy(opt->val, (void *) val, len);
2968                break;
2969        }
2970
2971        *ptr += L2CAP_CONF_OPT_SIZE + len;
2972}
2973
2974static void l2cap_add_opt_efs(void **ptr, struct l2cap_chan *chan)
2975{
2976        struct l2cap_conf_efs efs;
2977
2978        switch (chan->mode) {
2979        case L2CAP_MODE_ERTM:
2980                efs.id          = chan->local_id;
2981                efs.stype       = chan->local_stype;
2982                efs.msdu        = cpu_to_le16(chan->local_msdu);
2983                efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
2984                efs.acc_lat     = __constant_cpu_to_le32(L2CAP_DEFAULT_ACC_LAT);
2985                efs.flush_to    = __constant_cpu_to_le32(L2CAP_EFS_DEFAULT_FLUSH_TO);
2986                break;
2987
2988        case L2CAP_MODE_STREAMING:
2989                efs.id          = 1;
2990                efs.stype       = L2CAP_SERV_BESTEFFORT;
2991                efs.msdu        = cpu_to_le16(chan->local_msdu);
2992                efs.sdu_itime   = cpu_to_le32(chan->local_sdu_itime);
2993                efs.acc_lat     = 0;
2994                efs.flush_to    = 0;
2995                break;
2996
2997        default:
2998                return;
2999        }
3000
3001        l2cap_add_conf_opt(ptr, L2CAP_CONF_EFS, sizeof(efs),
3002                           (unsigned long) &efs);
3003}
3004
3005static void l2cap_ack_timeout(struct work_struct *work)
3006{
3007        struct l2cap_chan *chan = container_of(work, struct l2cap_chan,
3008                                               ack_timer.work);
3009        u16 frames_to_ack;
3010
3011        BT_DBG("chan %p", chan);
3012
3013        l2cap_chan_lock(chan);
3014
3015        frames_to_ack = __seq_offset(chan, chan->buffer_seq,
3016                                     chan->last_acked_seq);
3017
3018        if (frames_to_ack)
3019                l2cap_send_rr_or_rnr(chan, 0);
3020
3021        l2cap_chan_unlock(chan);
3022        l2cap_chan_put(chan);
3023}
3024
3025int l2cap_ertm_init(struct l2cap_chan *chan)
3026{
3027        int err;
3028
3029        chan->next_tx_seq = 0;
3030        chan->expected_tx_seq = 0;
3031        chan->expected_ack_seq = 0;
3032        chan->unacked_frames = 0;
3033        chan->buffer_seq = 0;
3034        chan->frames_sent = 0;
3035        chan->last_acked_seq = 0;
3036        chan->sdu = NULL;
3037        chan->sdu_last_frag = NULL;
3038        chan->sdu_len = 0;
3039
3040        skb_queue_head_init(&chan->tx_q);
3041
3042        chan->local_amp_id = 0;
3043        chan->move_id = 0;
3044        chan->move_state = L2CAP_MOVE_STABLE;
3045        chan->move_role = L2CAP_MOVE_ROLE_NONE;
3046
3047        if (chan->mode != L2CAP_MODE_ERTM)
3048                return 0;
3049
3050        chan->rx_state = L2CAP_RX_STATE_RECV;
3051        chan->tx_state = L2CAP_TX_STATE_XMIT;
3052
3053        INIT_DELAYED_WORK(&chan->retrans_timer, l2cap_retrans_timeout);
3054        INIT_DELAYED_WORK(&chan->monitor_timer, l2cap_monitor_timeout);
3055        INIT_DELAYED_WORK(&chan->ack_timer, l2cap_ack_timeout);
3056
3057        skb_queue_head_init(&chan->srej_q);
3058
3059        err = l2cap_seq_list_init(&chan->srej_list, chan->tx_win);
3060        if (err < 0)
3061                return err;
3062
3063        err = l2cap_seq_list_init(&chan->retrans_list, chan->remote_tx_win);
3064        if (err < 0)
3065                l2cap_seq_list_free(&chan->srej_list);
3066
3067        return err;
3068}
3069
3070static inline __u8 l2cap_select_mode(__u8 mode, __u16 remote_feat_mask)
3071{
3072        switch (mode) {
3073        case L2CAP_MODE_STREAMING:
3074        case L2CAP_MODE_ERTM:
3075                if (l2cap_mode_supported(mode, remote_feat_mask))
3076                        return mode;
3077                /* fall through */
3078        default:
3079                return L2CAP_MODE_BASIC;
3080        }
3081}
3082
3083static inline bool __l2cap_ews_supported(struct l2cap_chan *chan)
3084{
3085        return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_WINDOW;
3086}
3087
3088static inline bool __l2cap_efs_supported(struct l2cap_chan *chan)
3089{
3090        return enable_hs && chan->conn->feat_mask & L2CAP_FEAT_EXT_FLOW;
3091}
3092
3093static void __l2cap_set_ertm_timeouts(struct l2cap_chan *chan,
3094                                      struct l2cap_conf_rfc *rfc)
3095{
3096        if (chan->local_amp_id && chan->hs_hcon) {
3097                u64 ertm_to = chan->hs_hcon->hdev->amp_be_flush_to;
3098
3099                /* Class 1 devices have must have ERTM timeouts
3100                 * exceeding the Link Supervision Timeout.  The
3101                 * default Link Supervision Timeout for AMP
3102                 * controllers is 10 seconds.
3103                 *
3104                 * Class 1 devices use 0xffffffff for their
3105                 * best-effort flush timeout, so the clamping logic
3106                 * will result in a timeout that meets the above
3107                 * requirement.  ERTM timeouts are 16-bit values, so
3108                 * the maximum timeout is 65.535 seconds.
3109                 */
3110
3111                /* Convert timeout to milliseconds and round */
3112                ertm_to = DIV_ROUND_UP_ULL(ertm_to, 1000);
3113
3114                /* This is the recommended formula for class 2 devices
3115                 * that start ERTM timers when packets are sent to the
3116                 * controller.
3117                 */
3118                ertm_to = 3 * ertm_to + 500;
3119
3120                if (ertm_to > 0xffff)
3121                        ertm_to = 0xffff;
3122
3123                rfc->retrans_timeout = cpu_to_le16((u16) ertm_to);
3124                rfc->monitor_timeout = rfc->retrans_timeout;
3125        } else {
3126                rfc->retrans_timeout = __constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO);
3127                rfc->monitor_timeout = __constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO);
3128        }
3129}
3130
3131static inline void l2cap_txwin_setup(struct l2cap_chan *chan)
3132{
3133        if (chan->tx_win > L2CAP_DEFAULT_TX_WINDOW &&
3134            __l2cap_ews_supported(chan)) {
3135                /* use extended control field */
3136                set_bit(FLAG_EXT_CTRL, &chan->flags);
3137                chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
3138        } else {
3139                chan->tx_win = min_t(u16, chan->tx_win,
3140                                     L2CAP_DEFAULT_TX_WINDOW);
3141                chan->tx_win_max = L2CAP_DEFAULT_TX_WINDOW;
3142        }
3143        chan->ack_win = chan->tx_win;
3144}
3145
3146static int l2cap_build_conf_req(struct l2cap_chan *chan, void *data)
3147{
3148        struct l2cap_conf_req *req = data;
3149        struct l2cap_conf_rfc rfc = { .mode = chan->mode };
3150        void *ptr = req->data;
3151        u16 size;
3152
3153        BT_DBG("chan %p", chan);
3154
3155        if (chan->num_conf_req || chan->num_conf_rsp)
3156                goto done;
3157
3158        switch (chan->mode) {
3159        case L2CAP_MODE_STREAMING:
3160        case L2CAP_MODE_ERTM:
3161                if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state))
3162                        break;
3163
3164                if (__l2cap_efs_supported(chan))
3165                        set_bit(FLAG_EFS_ENABLE, &chan->flags);
3166
3167                /* fall through */
3168        default:
3169                chan->mode = l2cap_select_mode(rfc.mode, chan->conn->feat_mask);
3170                break;
3171        }
3172
3173done:
3174        if (chan->imtu != L2CAP_DEFAULT_MTU)
3175                l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
3176
3177        switch (chan->mode) {
3178        case L2CAP_MODE_BASIC:
3179                if (!(chan->conn->feat_mask & L2CAP_FEAT_ERTM) &&
3180                    !(chan->conn->feat_mask & L2CAP_FEAT_STREAMING))
3181                        break;
3182
3183                rfc.mode            = L2CAP_MODE_BASIC;
3184                rfc.txwin_size      = 0;
3185                rfc.max_transmit    = 0;
3186                rfc.retrans_timeout = 0;
3187                rfc.monitor_timeout = 0;
3188                rfc.max_pdu_size    = 0;
3189
3190                l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3191                                   (unsigned long) &rfc);
3192                break;
3193
3194        case L2CAP_MODE_ERTM:
3195                rfc.mode            = L2CAP_MODE_ERTM;
3196                rfc.max_transmit    = chan->max_tx;
3197
3198                __l2cap_set_ertm_timeouts(chan, &rfc);
3199
3200                size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
3201                             L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE -
3202                             L2CAP_FCS_SIZE);
3203                rfc.max_pdu_size = cpu_to_le16(size);
3204
3205                l2cap_txwin_setup(chan);
3206
3207                rfc.txwin_size = min_t(u16, chan->tx_win,
3208                                       L2CAP_DEFAULT_TX_WINDOW);
3209
3210                l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3211                                   (unsigned long) &rfc);
3212
3213                if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3214                        l2cap_add_opt_efs(&ptr, chan);
3215
3216                if (test_bit(FLAG_EXT_CTRL, &chan->flags))
3217                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3218                                           chan->tx_win);
3219
3220                if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3221                        if (chan->fcs == L2CAP_FCS_NONE ||
3222                            test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3223                                chan->fcs = L2CAP_FCS_NONE;
3224                                l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3225                                                   chan->fcs);
3226                        }
3227                break;
3228
3229        case L2CAP_MODE_STREAMING:
3230                l2cap_txwin_setup(chan);
3231                rfc.mode            = L2CAP_MODE_STREAMING;
3232                rfc.txwin_size      = 0;
3233                rfc.max_transmit    = 0;
3234                rfc.retrans_timeout = 0;
3235                rfc.monitor_timeout = 0;
3236
3237                size = min_t(u16, L2CAP_DEFAULT_MAX_PDU_SIZE, chan->conn->mtu -
3238                             L2CAP_EXT_HDR_SIZE - L2CAP_SDULEN_SIZE -
3239                             L2CAP_FCS_SIZE);
3240                rfc.max_pdu_size = cpu_to_le16(size);
3241
3242                l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3243                                   (unsigned long) &rfc);
3244
3245                if (test_bit(FLAG_EFS_ENABLE, &chan->flags))
3246                        l2cap_add_opt_efs(&ptr, chan);
3247
3248                if (chan->conn->feat_mask & L2CAP_FEAT_FCS)
3249                        if (chan->fcs == L2CAP_FCS_NONE ||
3250                            test_bit(CONF_RECV_NO_FCS, &chan->conf_state)) {
3251                                chan->fcs = L2CAP_FCS_NONE;
3252                                l2cap_add_conf_opt(&ptr, L2CAP_CONF_FCS, 1,
3253                                                   chan->fcs);
3254                        }
3255                break;
3256        }
3257
3258        req->dcid  = cpu_to_le16(chan->dcid);
3259        req->flags = __constant_cpu_to_le16(0);
3260
3261        return ptr - data;
3262}
3263
3264static int l2cap_parse_conf_req(struct l2cap_chan *chan, void *data)
3265{
3266        struct l2cap_conf_rsp *rsp = data;
3267        void *ptr = rsp->data;
3268        void *req = chan->conf_req;
3269        int len = chan->conf_len;
3270        int type, hint, olen;
3271        unsigned long val;
3272        struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3273        struct l2cap_conf_efs efs;
3274        u8 remote_efs = 0;
3275        u16 mtu = L2CAP_DEFAULT_MTU;
3276        u16 result = L2CAP_CONF_SUCCESS;
3277        u16 size;
3278
3279        BT_DBG("chan %p", chan);
3280
3281        while (len >= L2CAP_CONF_OPT_SIZE) {
3282                len -= l2cap_get_conf_opt(&req, &type, &olen, &val);
3283
3284                hint  = type & L2CAP_CONF_HINT;
3285                type &= L2CAP_CONF_MASK;
3286
3287                switch (type) {
3288                case L2CAP_CONF_MTU:
3289                        mtu = val;
3290                        break;
3291
3292                case L2CAP_CONF_FLUSH_TO:
3293                        chan->flush_to = val;
3294                        break;
3295
3296                case L2CAP_CONF_QOS:
3297                        break;
3298
3299                case L2CAP_CONF_RFC:
3300                        if (olen == sizeof(rfc))
3301                                memcpy(&rfc, (void *) val, olen);
3302                        break;
3303
3304                case L2CAP_CONF_FCS:
3305                        if (val == L2CAP_FCS_NONE)
3306                                set_bit(CONF_RECV_NO_FCS, &chan->conf_state);
3307                        break;
3308
3309                case L2CAP_CONF_EFS:
3310                        remote_efs = 1;
3311                        if (olen == sizeof(efs))
3312                                memcpy(&efs, (void *) val, olen);
3313                        break;
3314
3315                case L2CAP_CONF_EWS:
3316                        if (!enable_hs)
3317                                return -ECONNREFUSED;
3318
3319                        set_bit(FLAG_EXT_CTRL, &chan->flags);
3320                        set_bit(CONF_EWS_RECV, &chan->conf_state);
3321                        chan->tx_win_max = L2CAP_DEFAULT_EXT_WINDOW;
3322                        chan->remote_tx_win = val;
3323                        break;
3324
3325                default:
3326                        if (hint)
3327                                break;
3328
3329                        result = L2CAP_CONF_UNKNOWN;
3330                        *((u8 *) ptr++) = type;
3331                        break;
3332                }
3333        }
3334
3335        if (chan->num_conf_rsp || chan->num_conf_req > 1)
3336                goto done;
3337
3338        switch (chan->mode) {
3339        case L2CAP_MODE_STREAMING:
3340        case L2CAP_MODE_ERTM:
3341                if (!test_bit(CONF_STATE2_DEVICE, &chan->conf_state)) {
3342                        chan->mode = l2cap_select_mode(rfc.mode,
3343                                                       chan->conn->feat_mask);
3344                        break;
3345                }
3346
3347                if (remote_efs) {
3348                        if (__l2cap_efs_supported(chan))
3349                                set_bit(FLAG_EFS_ENABLE, &chan->flags);
3350                        else
3351                                return -ECONNREFUSED;
3352                }
3353
3354                if (chan->mode != rfc.mode)
3355                        return -ECONNREFUSED;
3356
3357                break;
3358        }
3359
3360done:
3361        if (chan->mode != rfc.mode) {
3362                result = L2CAP_CONF_UNACCEPT;
3363                rfc.mode = chan->mode;
3364
3365                if (chan->num_conf_rsp == 1)
3366                        return -ECONNREFUSED;
3367
3368                l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3369                                   (unsigned long) &rfc);
3370        }
3371
3372        if (result == L2CAP_CONF_SUCCESS) {
3373                /* Configure output options and let the other side know
3374                 * which ones we don't like. */
3375
3376                if (mtu < L2CAP_DEFAULT_MIN_MTU)
3377                        result = L2CAP_CONF_UNACCEPT;
3378                else {
3379                        chan->omtu = mtu;
3380                        set_bit(CONF_MTU_DONE, &chan->conf_state);
3381                }
3382                l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->omtu);
3383
3384                if (remote_efs) {
3385                        if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3386                            efs.stype != L2CAP_SERV_NOTRAFIC &&
3387                            efs.stype != chan->local_stype) {
3388
3389                                result = L2CAP_CONF_UNACCEPT;
3390
3391                                if (chan->num_conf_req >= 1)
3392                                        return -ECONNREFUSED;
3393
3394                                l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3395                                                   sizeof(efs),
3396                                                   (unsigned long) &efs);
3397                        } else {
3398                                /* Send PENDING Conf Rsp */
3399                                result = L2CAP_CONF_PENDING;
3400                                set_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3401                        }
3402                }
3403
3404                switch (rfc.mode) {
3405                case L2CAP_MODE_BASIC:
3406                        chan->fcs = L2CAP_FCS_NONE;
3407                        set_bit(CONF_MODE_DONE, &chan->conf_state);
3408                        break;
3409
3410                case L2CAP_MODE_ERTM:
3411                        if (!test_bit(CONF_EWS_RECV, &chan->conf_state))
3412                                chan->remote_tx_win = rfc.txwin_size;
3413                        else
3414                                rfc.txwin_size = L2CAP_DEFAULT_TX_WINDOW;
3415
3416                        chan->remote_max_tx = rfc.max_transmit;
3417
3418                        size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3419                                     chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3420                                     L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3421                        rfc.max_pdu_size = cpu_to_le16(size);
3422                        chan->remote_mps = size;
3423
3424                        __l2cap_set_ertm_timeouts(chan, &rfc);
3425
3426                        set_bit(CONF_MODE_DONE, &chan->conf_state);
3427
3428                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3429                                           sizeof(rfc), (unsigned long) &rfc);
3430
3431                        if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3432                                chan->remote_id = efs.id;
3433                                chan->remote_stype = efs.stype;
3434                                chan->remote_msdu = le16_to_cpu(efs.msdu);
3435                                chan->remote_flush_to =
3436                                        le32_to_cpu(efs.flush_to);
3437                                chan->remote_acc_lat =
3438                                        le32_to_cpu(efs.acc_lat);
3439                                chan->remote_sdu_itime =
3440                                        le32_to_cpu(efs.sdu_itime);
3441                                l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS,
3442                                                   sizeof(efs),
3443                                                   (unsigned long) &efs);
3444                        }
3445                        break;
3446
3447                case L2CAP_MODE_STREAMING:
3448                        size = min_t(u16, le16_to_cpu(rfc.max_pdu_size),
3449                                     chan->conn->mtu - L2CAP_EXT_HDR_SIZE -
3450                                     L2CAP_SDULEN_SIZE - L2CAP_FCS_SIZE);
3451                        rfc.max_pdu_size = cpu_to_le16(size);
3452                        chan->remote_mps = size;
3453
3454                        set_bit(CONF_MODE_DONE, &chan->conf_state);
3455
3456                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC, sizeof(rfc),
3457                                           (unsigned long) &rfc);
3458
3459                        break;
3460
3461                default:
3462                        result = L2CAP_CONF_UNACCEPT;
3463
3464                        memset(&rfc, 0, sizeof(rfc));
3465                        rfc.mode = chan->mode;
3466                }
3467
3468                if (result == L2CAP_CONF_SUCCESS)
3469                        set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3470        }
3471        rsp->scid   = cpu_to_le16(chan->dcid);
3472        rsp->result = cpu_to_le16(result);
3473        rsp->flags  = __constant_cpu_to_le16(0);
3474
3475        return ptr - data;
3476}
3477
3478static int l2cap_parse_conf_rsp(struct l2cap_chan *chan, void *rsp, int len,
3479                                void *data, u16 *result)
3480{
3481        struct l2cap_conf_req *req = data;
3482        void *ptr = req->data;
3483        int type, olen;
3484        unsigned long val;
3485        struct l2cap_conf_rfc rfc = { .mode = L2CAP_MODE_BASIC };
3486        struct l2cap_conf_efs efs;
3487
3488        BT_DBG("chan %p, rsp %p, len %d, req %p", chan, rsp, len, data);
3489
3490        while (len >= L2CAP_CONF_OPT_SIZE) {
3491                len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
3492
3493                switch (type) {
3494                case L2CAP_CONF_MTU:
3495                        if (val < L2CAP_DEFAULT_MIN_MTU) {
3496                                *result = L2CAP_CONF_UNACCEPT;
3497                                chan->imtu = L2CAP_DEFAULT_MIN_MTU;
3498                        } else
3499                                chan->imtu = val;
3500                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_MTU, 2, chan->imtu);
3501                        break;
3502
3503                case L2CAP_CONF_FLUSH_TO:
3504                        chan->flush_to = val;
3505                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_FLUSH_TO,
3506                                           2, chan->flush_to);
3507                        break;
3508
3509                case L2CAP_CONF_RFC:
3510                        if (olen == sizeof(rfc))
3511                                memcpy(&rfc, (void *)val, olen);
3512
3513                        if (test_bit(CONF_STATE2_DEVICE, &chan->conf_state) &&
3514                            rfc.mode != chan->mode)
3515                                return -ECONNREFUSED;
3516
3517                        chan->fcs = 0;
3518
3519                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_RFC,
3520                                           sizeof(rfc), (unsigned long) &rfc);
3521                        break;
3522
3523                case L2CAP_CONF_EWS:
3524                        chan->ack_win = min_t(u16, val, chan->ack_win);
3525                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_EWS, 2,
3526                                           chan->tx_win);
3527                        break;
3528
3529                case L2CAP_CONF_EFS:
3530                        if (olen == sizeof(efs))
3531                                memcpy(&efs, (void *)val, olen);
3532
3533                        if (chan->local_stype != L2CAP_SERV_NOTRAFIC &&
3534                            efs.stype != L2CAP_SERV_NOTRAFIC &&
3535                            efs.stype != chan->local_stype)
3536                                return -ECONNREFUSED;
3537
3538                        l2cap_add_conf_opt(&ptr, L2CAP_CONF_EFS, sizeof(efs),
3539                                           (unsigned long) &efs);
3540                        break;
3541
3542                case L2CAP_CONF_FCS:
3543                        if (*result == L2CAP_CONF_PENDING)
3544                                if (val == L2CAP_FCS_NONE)
3545                                        set_bit(CONF_RECV_NO_FCS,
3546                                                &chan->conf_state);
3547                        break;
3548                }
3549        }
3550
3551        if (chan->mode == L2CAP_MODE_BASIC && chan->mode != rfc.mode)
3552                return -ECONNREFUSED;
3553
3554        chan->mode = rfc.mode;
3555
3556        if (*result == L2CAP_CONF_SUCCESS || *result == L2CAP_CONF_PENDING) {
3557                switch (rfc.mode) {
3558                case L2CAP_MODE_ERTM:
3559                        chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
3560                        chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
3561                        chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3562                        if (!test_bit(FLAG_EXT_CTRL, &chan->flags))
3563                                chan->ack_win = min_t(u16, chan->ack_win,
3564                                                      rfc.txwin_size);
3565
3566                        if (test_bit(FLAG_EFS_ENABLE, &chan->flags)) {
3567                                chan->local_msdu = le16_to_cpu(efs.msdu);
3568                                chan->local_sdu_itime =
3569                                        le32_to_cpu(efs.sdu_itime);
3570                                chan->local_acc_lat = le32_to_cpu(efs.acc_lat);
3571                                chan->local_flush_to =
3572                                        le32_to_cpu(efs.flush_to);
3573                        }
3574                        break;
3575
3576                case L2CAP_MODE_STREAMING:
3577                        chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3578                }
3579        }
3580
3581        req->dcid   = cpu_to_le16(chan->dcid);
3582        req->flags  = __constant_cpu_to_le16(0);
3583
3584        return ptr - data;
3585}
3586
3587static int l2cap_build_conf_rsp(struct l2cap_chan *chan, void *data,
3588                                u16 result, u16 flags)
3589{
3590        struct l2cap_conf_rsp *rsp = data;
3591        void *ptr = rsp->data;
3592
3593        BT_DBG("chan %p", chan);
3594
3595        rsp->scid   = cpu_to_le16(chan->dcid);
3596        rsp->result = cpu_to_le16(result);
3597        rsp->flags  = cpu_to_le16(flags);
3598
3599        return ptr - data;
3600}
3601
3602void __l2cap_connect_rsp_defer(struct l2cap_chan *chan)
3603{
3604        struct l2cap_conn_rsp rsp;
3605        struct l2cap_conn *conn = chan->conn;
3606        u8 buf[128];
3607        u8 rsp_code;
3608
3609        rsp.scid   = cpu_to_le16(chan->dcid);
3610        rsp.dcid   = cpu_to_le16(chan->scid);
3611        rsp.result = __constant_cpu_to_le16(L2CAP_CR_SUCCESS);
3612        rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
3613
3614        if (chan->hs_hcon)
3615                rsp_code = L2CAP_CREATE_CHAN_RSP;
3616        else
3617                rsp_code = L2CAP_CONN_RSP;
3618
3619        BT_DBG("chan %p rsp_code %u", chan, rsp_code);
3620
3621        l2cap_send_cmd(conn, chan->ident, rsp_code, sizeof(rsp), &rsp);
3622
3623        if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
3624                return;
3625
3626        l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3627                       l2cap_build_conf_req(chan, buf), buf);
3628        chan->num_conf_req++;
3629}
3630
3631static void l2cap_conf_rfc_get(struct l2cap_chan *chan, void *rsp, int len)
3632{
3633        int type, olen;
3634        unsigned long val;
3635        /* Use sane default values in case a misbehaving remote device
3636         * did not send an RFC or extended window size option.
3637         */
3638        u16 txwin_ext = chan->ack_win;
3639        struct l2cap_conf_rfc rfc = {
3640                .mode = chan->mode,
3641                .retrans_timeout = __constant_cpu_to_le16(L2CAP_DEFAULT_RETRANS_TO),
3642                .monitor_timeout = __constant_cpu_to_le16(L2CAP_DEFAULT_MONITOR_TO),
3643                .max_pdu_size = cpu_to_le16(chan->imtu),
3644                .txwin_size = min_t(u16, chan->ack_win, L2CAP_DEFAULT_TX_WINDOW),
3645        };
3646
3647        BT_DBG("chan %p, rsp %p, len %d", chan, rsp, len);
3648
3649        if ((chan->mode != L2CAP_MODE_ERTM) && (chan->mode != L2CAP_MODE_STREAMING))
3650                return;
3651
3652        while (len >= L2CAP_CONF_OPT_SIZE) {
3653                len -= l2cap_get_conf_opt(&rsp, &type, &olen, &val);
3654
3655                switch (type) {
3656                case L2CAP_CONF_RFC:
3657                        if (olen == sizeof(rfc))
3658                                memcpy(&rfc, (void *)val, olen);
3659                        break;
3660                case L2CAP_CONF_EWS:
3661                        txwin_ext = val;
3662                        break;
3663                }
3664        }
3665
3666        switch (rfc.mode) {
3667        case L2CAP_MODE_ERTM:
3668                chan->retrans_timeout = le16_to_cpu(rfc.retrans_timeout);
3669                chan->monitor_timeout = le16_to_cpu(rfc.monitor_timeout);
3670                chan->mps = le16_to_cpu(rfc.max_pdu_size);
3671                if (test_bit(FLAG_EXT_CTRL, &chan->flags))
3672                        chan->ack_win = min_t(u16, chan->ack_win, txwin_ext);
3673                else
3674                        chan->ack_win = min_t(u16, chan->ack_win,
3675                                              rfc.txwin_size);
3676                break;
3677        case L2CAP_MODE_STREAMING:
3678                chan->mps    = le16_to_cpu(rfc.max_pdu_size);
3679        }
3680}
3681
3682static inline int l2cap_command_rej(struct l2cap_conn *conn,
3683                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
3684                                    u8 *data)
3685{
3686        struct l2cap_cmd_rej_unk *rej = (struct l2cap_cmd_rej_unk *) data;
3687
3688        if (cmd_len < sizeof(*rej))
3689                return -EPROTO;
3690
3691        if (rej->reason != L2CAP_REJ_NOT_UNDERSTOOD)
3692                return 0;
3693
3694        if ((conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_SENT) &&
3695            cmd->ident == conn->info_ident) {
3696                cancel_delayed_work(&conn->info_timer);
3697
3698                conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3699                conn->info_ident = 0;
3700
3701                l2cap_conn_start(conn);
3702        }
3703
3704        return 0;
3705}
3706
3707static struct l2cap_chan *l2cap_connect(struct l2cap_conn *conn,
3708                                        struct l2cap_cmd_hdr *cmd,
3709                                        u8 *data, u8 rsp_code, u8 amp_id)
3710{
3711        struct l2cap_conn_req *req = (struct l2cap_conn_req *) data;
3712        struct l2cap_conn_rsp rsp;
3713        struct l2cap_chan *chan = NULL, *pchan;
3714        struct sock *parent, *sk = NULL;
3715        int result, status = L2CAP_CS_NO_INFO;
3716
3717        u16 dcid = 0, scid = __le16_to_cpu(req->scid);
3718        __le16 psm = req->psm;
3719
3720        BT_DBG("psm 0x%2.2x scid 0x%4.4x", __le16_to_cpu(psm), scid);
3721
3722        /* Check if we have socket listening on psm */
3723        pchan = l2cap_global_chan_by_psm(BT_LISTEN, psm, conn->src, conn->dst);
3724        if (!pchan) {
3725                result = L2CAP_CR_BAD_PSM;
3726                goto sendresp;
3727        }
3728
3729        parent = pchan->sk;
3730
3731        mutex_lock(&conn->chan_lock);
3732        lock_sock(parent);
3733
3734        /* Check if the ACL is secure enough (if not SDP) */
3735        if (psm != __constant_cpu_to_le16(L2CAP_PSM_SDP) &&
3736            !hci_conn_check_link_mode(conn->hcon)) {
3737                conn->disc_reason = HCI_ERROR_AUTH_FAILURE;
3738                result = L2CAP_CR_SEC_BLOCK;
3739                goto response;
3740        }
3741
3742        result = L2CAP_CR_NO_MEM;
3743
3744        /* Check if we already have channel with that dcid */
3745        if (__l2cap_get_chan_by_dcid(conn, scid))
3746                goto response;
3747
3748        chan = pchan->ops->new_connection(pchan);
3749        if (!chan)
3750                goto response;
3751
3752        sk = chan->sk;
3753
3754        hci_conn_hold(conn->hcon);
3755
3756        bacpy(&bt_sk(sk)->src, conn->src);
3757        bacpy(&bt_sk(sk)->dst, conn->dst);
3758        chan->psm  = psm;
3759        chan->dcid = scid;
3760        chan->local_amp_id = amp_id;
3761
3762        __l2cap_chan_add(conn, chan);
3763
3764        dcid = chan->scid;
3765
3766        __set_chan_timer(chan, sk->sk_sndtimeo);
3767
3768        chan->ident = cmd->ident;
3769
3770        if (conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE) {
3771                if (l2cap_chan_check_security(chan)) {
3772                        if (test_bit(BT_SK_DEFER_SETUP, &bt_sk(sk)->flags)) {
3773                                __l2cap_state_change(chan, BT_CONNECT2);
3774                                result = L2CAP_CR_PEND;
3775                                status = L2CAP_CS_AUTHOR_PEND;
3776                                chan->ops->defer(chan);
3777                        } else {
3778                                /* Force pending result for AMP controllers.
3779                                 * The connection will succeed after the
3780                                 * physical link is up.
3781                                 */
3782                                if (amp_id) {
3783                                        __l2cap_state_change(chan, BT_CONNECT2);
3784                                        result = L2CAP_CR_PEND;
3785                                } else {
3786                                        __l2cap_state_change(chan, BT_CONFIG);
3787                                        result = L2CAP_CR_SUCCESS;
3788                                }
3789                                status = L2CAP_CS_NO_INFO;
3790                        }
3791                } else {
3792                        __l2cap_state_change(chan, BT_CONNECT2);
3793                        result = L2CAP_CR_PEND;
3794                        status = L2CAP_CS_AUTHEN_PEND;
3795                }
3796        } else {
3797                __l2cap_state_change(chan, BT_CONNECT2);
3798                result = L2CAP_CR_PEND;
3799                status = L2CAP_CS_NO_INFO;
3800        }
3801
3802response:
3803        release_sock(parent);
3804        mutex_unlock(&conn->chan_lock);
3805
3806sendresp:
3807        rsp.scid   = cpu_to_le16(scid);
3808        rsp.dcid   = cpu_to_le16(dcid);
3809        rsp.result = cpu_to_le16(result);
3810        rsp.status = cpu_to_le16(status);
3811        l2cap_send_cmd(conn, cmd->ident, rsp_code, sizeof(rsp), &rsp);
3812
3813        if (result == L2CAP_CR_PEND && status == L2CAP_CS_NO_INFO) {
3814                struct l2cap_info_req info;
3815                info.type = __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK);
3816
3817                conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_SENT;
3818                conn->info_ident = l2cap_get_ident(conn);
3819
3820                schedule_delayed_work(&conn->info_timer, L2CAP_INFO_TIMEOUT);
3821
3822                l2cap_send_cmd(conn, conn->info_ident, L2CAP_INFO_REQ,
3823                               sizeof(info), &info);
3824        }
3825
3826        if (chan && !test_bit(CONF_REQ_SENT, &chan->conf_state) &&
3827            result == L2CAP_CR_SUCCESS) {
3828                u8 buf[128];
3829                set_bit(CONF_REQ_SENT, &chan->conf_state);
3830                l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3831                               l2cap_build_conf_req(chan, buf), buf);
3832                chan->num_conf_req++;
3833        }
3834
3835        return chan;
3836}
3837
3838static int l2cap_connect_req(struct l2cap_conn *conn,
3839                             struct l2cap_cmd_hdr *cmd, u16 cmd_len, u8 *data)
3840{
3841        struct hci_dev *hdev = conn->hcon->hdev;
3842        struct hci_conn *hcon = conn->hcon;
3843
3844        if (cmd_len < sizeof(struct l2cap_conn_req))
3845                return -EPROTO;
3846
3847        hci_dev_lock(hdev);
3848        if (test_bit(HCI_MGMT, &hdev->dev_flags) &&
3849            !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &hcon->flags))
3850                mgmt_device_connected(hdev, &hcon->dst, hcon->type,
3851                                      hcon->dst_type, 0, NULL, 0,
3852                                      hcon->dev_class);
3853        hci_dev_unlock(hdev);
3854
3855        l2cap_connect(conn, cmd, data, L2CAP_CONN_RSP, 0);
3856        return 0;
3857}
3858
3859static int l2cap_connect_create_rsp(struct l2cap_conn *conn,
3860                                    struct l2cap_cmd_hdr *cmd, u16 cmd_len,
3861                                    u8 *data)
3862{
3863        struct l2cap_conn_rsp *rsp = (struct l2cap_conn_rsp *) data;
3864        u16 scid, dcid, result, status;
3865        struct l2cap_chan *chan;
3866        u8 req[128];
3867        int err;
3868
3869        if (cmd_len < sizeof(*rsp))
3870                return -EPROTO;
3871
3872        scid   = __le16_to_cpu(rsp->scid);
3873        dcid   = __le16_to_cpu(rsp->dcid);
3874        result = __le16_to_cpu(rsp->result);
3875        status = __le16_to_cpu(rsp->status);
3876
3877        BT_DBG("dcid 0x%4.4x scid 0x%4.4x result 0x%2.2x status 0x%2.2x",
3878               dcid, scid, result, status);
3879
3880        mutex_lock(&conn->chan_lock);
3881
3882        if (scid) {
3883                chan = __l2cap_get_chan_by_scid(conn, scid);
3884                if (!chan) {
3885                        err = -EFAULT;
3886                        goto unlock;
3887                }
3888        } else {
3889                chan = __l2cap_get_chan_by_ident(conn, cmd->ident);
3890                if (!chan) {
3891                        err = -EFAULT;
3892                        goto unlock;
3893                }
3894        }
3895
3896        err = 0;
3897
3898        l2cap_chan_lock(chan);
3899
3900        switch (result) {
3901        case L2CAP_CR_SUCCESS:
3902                l2cap_state_change(chan, BT_CONFIG);
3903                chan->ident = 0;
3904                chan->dcid = dcid;
3905                clear_bit(CONF_CONNECT_PEND, &chan->conf_state);
3906
3907                if (test_and_set_bit(CONF_REQ_SENT, &chan->conf_state))
3908                        break;
3909
3910                l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
3911                               l2cap_build_conf_req(chan, req), req);
3912                chan->num_conf_req++;
3913                break;
3914
3915        case L2CAP_CR_PEND:
3916                set_bit(CONF_CONNECT_PEND, &chan->conf_state);
3917                break;
3918
3919        default:
3920                l2cap_chan_del(chan, ECONNREFUSED);
3921                break;
3922        }
3923
3924        l2cap_chan_unlock(chan);
3925
3926unlock:
3927        mutex_unlock(&conn->chan_lock);
3928
3929        return err;
3930}
3931
3932static inline void set_default_fcs(struct l2cap_chan *chan)
3933{
3934        /* FCS is enabled only in ERTM or streaming mode, if one or both
3935         * sides request it.
3936         */
3937        if (chan->mode != L2CAP_MODE_ERTM && chan->mode != L2CAP_MODE_STREAMING)
3938                chan->fcs = L2CAP_FCS_NONE;
3939        else if (!test_bit(CONF_RECV_NO_FCS, &chan->conf_state))
3940                chan->fcs = L2CAP_FCS_CRC16;
3941}
3942
3943static void l2cap_send_efs_conf_rsp(struct l2cap_chan *chan, void *data,
3944                                    u8 ident, u16 flags)
3945{
3946        struct l2cap_conn *conn = chan->conn;
3947
3948        BT_DBG("conn %p chan %p ident %d flags 0x%4.4x", conn, chan, ident,
3949               flags);
3950
3951        clear_bit(CONF_LOC_CONF_PEND, &chan->conf_state);
3952        set_bit(CONF_OUTPUT_DONE, &chan->conf_state);
3953
3954        l2cap_send_cmd(conn, ident, L2CAP_CONF_RSP,
3955                       l2cap_build_conf_rsp(chan, data,
3956                                            L2CAP_CONF_SUCCESS, flags), data);
3957}
3958
3959static inline int l2cap_config_req(struct l2cap_conn *conn,
3960                                   struct l2cap_cmd_hdr *cmd, u16 cmd_len,
3961                                   u8 *data)
3962{
3963        struct l2cap_conf_req *req = (struct l2cap_conf_req *) data;
3964        u16 dcid, flags;
3965        u8 rsp[64];
3966        struct l2cap_chan *chan;
3967        int len, err = 0;
3968
3969        if (cmd_len < sizeof(*req))
3970                return -EPROTO;
3971
3972        dcid  = __le16_to_cpu(req->dcid);
3973        flags = __le16_to_cpu(req->flags);
3974
3975        BT_DBG("dcid 0x%4.4x flags 0x%2.2x", dcid, flags);
3976
3977        chan = l2cap_get_chan_by_scid(conn, dcid);
3978        if (!chan)
3979                return -ENOENT;
3980
3981        if (chan->state != BT_CONFIG && chan->state != BT_CONNECT2) {
3982                struct l2cap_cmd_rej_cid rej;
3983
3984                rej.reason = __constant_cpu_to_le16(L2CAP_REJ_INVALID_CID);
3985                rej.scid = cpu_to_le16(chan->scid);
3986                rej.dcid = cpu_to_le16(chan->dcid);
3987
3988                l2cap_send_cmd(conn, cmd->ident, L2CAP_COMMAND_REJ,
3989                               sizeof(rej), &rej);
3990                goto unlock;
3991        }
3992
3993        /* Reject if config buffer is too small. */
3994        len = cmd_len - sizeof(*req);
3995        if (chan->conf_len + len > sizeof(chan->conf_req)) {
3996                l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
3997                               l2cap_build_conf_rsp(chan, rsp,
3998                               L2CAP_CONF_REJECT, flags), rsp);
3999                goto unlock;
4000        }
4001
4002        /* Store config. */
4003        memcpy(chan->conf_req + chan->conf_len, req->data, len);
4004        chan->conf_len += len;
4005
4006        if (flags & L2CAP_CONF_FLAG_CONTINUATION) {
4007                /* Incomplete config. Send empty response. */
4008                l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP,
4009                               l2cap_build_conf_rsp(chan, rsp,
4010                               L2CAP_CONF_SUCCESS, flags), rsp);
4011                goto unlock;
4012        }
4013
4014        /* Complete config. */
4015        len = l2cap_parse_conf_req(chan, rsp);
4016        if (len < 0) {
4017                l2cap_send_disconn_req(chan, ECONNRESET);
4018                goto unlock;
4019        }
4020
4021        chan->ident = cmd->ident;
4022        l2cap_send_cmd(conn, cmd->ident, L2CAP_CONF_RSP, len, rsp);
4023        chan->num_conf_rsp++;
4024
4025        /* Reset config buffer. */
4026        chan->conf_len = 0;
4027
4028        if (!test_bit(CONF_OUTPUT_DONE, &chan->conf_state))
4029                goto unlock;
4030
4031        if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
4032                set_default_fcs(chan);
4033
4034                if (chan->mode == L2CAP_MODE_ERTM ||
4035                    chan->mode == L2CAP_MODE_STREAMING)
4036                        err = l2cap_ertm_init(chan);
4037
4038                if (err < 0)
4039                        l2cap_send_disconn_req(chan, -err);
4040                else
4041                        l2cap_chan_ready(chan);
4042
4043                goto unlock;
4044        }
4045
4046        if (!test_and_set_bit(CONF_REQ_SENT, &chan->conf_state)) {
4047                u8 buf[64];
4048                l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_CONF_REQ,
4049                               l2cap_build_conf_req(chan, buf), buf);
4050                chan->num_conf_req++;
4051        }
4052
4053        /* Got Conf Rsp PENDING from remote side and asume we sent
4054           Conf Rsp PENDING in the code above */
4055        if (test_bit(CONF_REM_CONF_PEND, &chan->conf_state) &&
4056            test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4057
4058                /* check compatibility */
4059
4060                /* Send rsp for BR/EDR channel */
4061                if (!chan->hs_hcon)
4062                        l2cap_send_efs_conf_rsp(chan, rsp, cmd->ident, flags);
4063                else
4064                        chan->ident = cmd->ident;
4065        }
4066
4067unlock:
4068        l2cap_chan_unlock(chan);
4069        return err;
4070}
4071
4072static inline int l2cap_config_rsp(struct l2cap_conn *conn,
4073                                   struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4074                                   u8 *data)
4075{
4076        struct l2cap_conf_rsp *rsp = (struct l2cap_conf_rsp *)data;
4077        u16 scid, flags, result;
4078        struct l2cap_chan *chan;
4079        int len = cmd_len - sizeof(*rsp);
4080        int err = 0;
4081
4082        if (cmd_len < sizeof(*rsp))
4083                return -EPROTO;
4084
4085        scid   = __le16_to_cpu(rsp->scid);
4086        flags  = __le16_to_cpu(rsp->flags);
4087        result = __le16_to_cpu(rsp->result);
4088
4089        BT_DBG("scid 0x%4.4x flags 0x%2.2x result 0x%2.2x len %d", scid, flags,
4090               result, len);
4091
4092        chan = l2cap_get_chan_by_scid(conn, scid);
4093        if (!chan)
4094                return 0;
4095
4096        switch (result) {
4097        case L2CAP_CONF_SUCCESS:
4098                l2cap_conf_rfc_get(chan, rsp->data, len);
4099                clear_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4100                break;
4101
4102        case L2CAP_CONF_PENDING:
4103                set_bit(CONF_REM_CONF_PEND, &chan->conf_state);
4104
4105                if (test_bit(CONF_LOC_CONF_PEND, &chan->conf_state)) {
4106                        char buf[64];
4107
4108                        len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4109                                                   buf, &result);
4110                        if (len < 0) {
4111                                l2cap_send_disconn_req(chan, ECONNRESET);
4112                                goto done;
4113                        }
4114
4115                        if (!chan->hs_hcon) {
4116                                l2cap_send_efs_conf_rsp(chan, buf, cmd->ident,
4117                                                        0);
4118                        } else {
4119                                if (l2cap_check_efs(chan)) {
4120                                        amp_create_logical_link(chan);
4121                                        chan->ident = cmd->ident;
4122                                }
4123                        }
4124                }
4125                goto done;
4126
4127        case L2CAP_CONF_UNACCEPT:
4128                if (chan->num_conf_rsp <= L2CAP_CONF_MAX_CONF_RSP) {
4129                        char req[64];
4130
4131                        if (len > sizeof(req) - sizeof(struct l2cap_conf_req)) {
4132                                l2cap_send_disconn_req(chan, ECONNRESET);
4133                                goto done;
4134                        }
4135
4136                        /* throw out any old stored conf requests */
4137                        result = L2CAP_CONF_SUCCESS;
4138                        len = l2cap_parse_conf_rsp(chan, rsp->data, len,
4139                                                   req, &result);
4140                        if (len < 0) {
4141                                l2cap_send_disconn_req(chan, ECONNRESET);
4142                                goto done;
4143                        }
4144
4145                        l2cap_send_cmd(conn, l2cap_get_ident(conn),
4146                                       L2CAP_CONF_REQ, len, req);
4147                        chan->num_conf_req++;
4148                        if (result != L2CAP_CONF_SUCCESS)
4149                                goto done;
4150                        break;
4151                }
4152
4153        default:
4154                l2cap_chan_set_err(chan, ECONNRESET);
4155
4156                __set_chan_timer(chan, L2CAP_DISC_REJ_TIMEOUT);
4157                l2cap_send_disconn_req(chan, ECONNRESET);
4158                goto done;
4159        }
4160
4161        if (flags & L2CAP_CONF_FLAG_CONTINUATION)
4162                goto done;
4163
4164        set_bit(CONF_INPUT_DONE, &chan->conf_state);
4165
4166        if (test_bit(CONF_OUTPUT_DONE, &chan->conf_state)) {
4167                set_default_fcs(chan);
4168
4169                if (chan->mode == L2CAP_MODE_ERTM ||
4170                    chan->mode == L2CAP_MODE_STREAMING)
4171                        err = l2cap_ertm_init(chan);
4172
4173                if (err < 0)
4174                        l2cap_send_disconn_req(chan, -err);
4175                else
4176                        l2cap_chan_ready(chan);
4177        }
4178
4179done:
4180        l2cap_chan_unlock(chan);
4181        return err;
4182}
4183
4184static inline int l2cap_disconnect_req(struct l2cap_conn *conn,
4185                                       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4186                                       u8 *data)
4187{
4188        struct l2cap_disconn_req *req = (struct l2cap_disconn_req *) data;
4189        struct l2cap_disconn_rsp rsp;
4190        u16 dcid, scid;
4191        struct l2cap_chan *chan;
4192        struct sock *sk;
4193
4194        if (cmd_len != sizeof(*req))
4195                return -EPROTO;
4196
4197        scid = __le16_to_cpu(req->scid);
4198        dcid = __le16_to_cpu(req->dcid);
4199
4200        BT_DBG("scid 0x%4.4x dcid 0x%4.4x", scid, dcid);
4201
4202        mutex_lock(&conn->chan_lock);
4203
4204        chan = __l2cap_get_chan_by_scid(conn, dcid);
4205        if (!chan) {
4206                mutex_unlock(&conn->chan_lock);
4207                return 0;
4208        }
4209
4210        l2cap_chan_lock(chan);
4211
4212        sk = chan->sk;
4213
4214        rsp.dcid = cpu_to_le16(chan->scid);
4215        rsp.scid = cpu_to_le16(chan->dcid);
4216        l2cap_send_cmd(conn, cmd->ident, L2CAP_DISCONN_RSP, sizeof(rsp), &rsp);
4217
4218        lock_sock(sk);
4219        sk->sk_shutdown = SHUTDOWN_MASK;
4220        release_sock(sk);
4221
4222        l2cap_chan_hold(chan);
4223        l2cap_chan_del(chan, ECONNRESET);
4224
4225        l2cap_chan_unlock(chan);
4226
4227        chan->ops->close(chan);
4228        l2cap_chan_put(chan);
4229
4230        mutex_unlock(&conn->chan_lock);
4231
4232        return 0;
4233}
4234
4235static inline int l2cap_disconnect_rsp(struct l2cap_conn *conn,
4236                                       struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4237                                       u8 *data)
4238{
4239        struct l2cap_disconn_rsp *rsp = (struct l2cap_disconn_rsp *) data;
4240        u16 dcid, scid;
4241        struct l2cap_chan *chan;
4242
4243        if (cmd_len != sizeof(*rsp))
4244                return -EPROTO;
4245
4246        scid = __le16_to_cpu(rsp->scid);
4247        dcid = __le16_to_cpu(rsp->dcid);
4248
4249        BT_DBG("dcid 0x%4.4x scid 0x%4.4x", dcid, scid);
4250
4251        mutex_lock(&conn->chan_lock);
4252
4253        chan = __l2cap_get_chan_by_scid(conn, scid);
4254        if (!chan) {
4255                mutex_unlock(&conn->chan_lock);
4256                return 0;
4257        }
4258
4259        l2cap_chan_lock(chan);
4260
4261        l2cap_chan_hold(chan);
4262        l2cap_chan_del(chan, 0);
4263
4264        l2cap_chan_unlock(chan);
4265
4266        chan->ops->close(chan);
4267        l2cap_chan_put(chan);
4268
4269        mutex_unlock(&conn->chan_lock);
4270
4271        return 0;
4272}
4273
4274static inline int l2cap_information_req(struct l2cap_conn *conn,
4275                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4276                                        u8 *data)
4277{
4278        struct l2cap_info_req *req = (struct l2cap_info_req *) data;
4279        u16 type;
4280
4281        if (cmd_len != sizeof(*req))
4282                return -EPROTO;
4283
4284        type = __le16_to_cpu(req->type);
4285
4286        BT_DBG("type 0x%4.4x", type);
4287
4288        if (type == L2CAP_IT_FEAT_MASK) {
4289                u8 buf[8];
4290                u32 feat_mask = l2cap_feat_mask;
4291                struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4292                rsp->type   = __constant_cpu_to_le16(L2CAP_IT_FEAT_MASK);
4293                rsp->result = __constant_cpu_to_le16(L2CAP_IR_SUCCESS);
4294                if (!disable_ertm)
4295                        feat_mask |= L2CAP_FEAT_ERTM | L2CAP_FEAT_STREAMING
4296                                | L2CAP_FEAT_FCS;
4297                if (enable_hs)
4298                        feat_mask |= L2CAP_FEAT_EXT_FLOW
4299                                | L2CAP_FEAT_EXT_WINDOW;
4300
4301                put_unaligned_le32(feat_mask, rsp->data);
4302                l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4303                               buf);
4304        } else if (type == L2CAP_IT_FIXED_CHAN) {
4305                u8 buf[12];
4306                struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) buf;
4307
4308                if (enable_hs)
4309                        l2cap_fixed_chan[0] |= L2CAP_FC_A2MP;
4310                else
4311                        l2cap_fixed_chan[0] &= ~L2CAP_FC_A2MP;
4312
4313                rsp->type   = __constant_cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4314                rsp->result = __constant_cpu_to_le16(L2CAP_IR_SUCCESS);
4315                memcpy(rsp->data, l2cap_fixed_chan, sizeof(l2cap_fixed_chan));
4316                l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(buf),
4317                               buf);
4318        } else {
4319                struct l2cap_info_rsp rsp;
4320                rsp.type   = cpu_to_le16(type);
4321                rsp.result = __constant_cpu_to_le16(L2CAP_IR_NOTSUPP);
4322                l2cap_send_cmd(conn, cmd->ident, L2CAP_INFO_RSP, sizeof(rsp),
4323                               &rsp);
4324        }
4325
4326        return 0;
4327}
4328
4329static inline int l2cap_information_rsp(struct l2cap_conn *conn,
4330                                        struct l2cap_cmd_hdr *cmd, u16 cmd_len,
4331                                        u8 *data)
4332{
4333        struct l2cap_info_rsp *rsp = (struct l2cap_info_rsp *) data;
4334        u16 type, result;
4335
4336        if (cmd_len < sizeof(*rsp))
4337                return -EPROTO;
4338
4339        type   = __le16_to_cpu(rsp->type);
4340        result = __le16_to_cpu(rsp->result);
4341
4342        BT_DBG("type 0x%4.4x result 0x%2.2x", type, result);
4343
4344        /* L2CAP Info req/rsp are unbound to channels, add extra checks */
4345        if (cmd->ident != conn->info_ident ||
4346            conn->info_state & L2CAP_INFO_FEAT_MASK_REQ_DONE)
4347                return 0;
4348
4349        cancel_delayed_work(&conn->info_timer);
4350
4351        if (result != L2CAP_IR_SUCCESS) {
4352                conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4353                conn->info_ident = 0;
4354
4355                l2cap_conn_start(conn);
4356
4357                return 0;
4358        }
4359
4360        switch (type) {
4361        case L2CAP_IT_FEAT_MASK:
4362                conn->feat_mask = get_unaligned_le32(rsp->data);
4363
4364                if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
4365                        struct l2cap_info_req req;
4366                        req.type = __constant_cpu_to_le16(L2CAP_IT_FIXED_CHAN);
4367
4368                        conn->info_ident = l2cap_get_ident(conn);
4369
4370                        l2cap_send_cmd(conn, conn->info_ident,
4371                                       L2CAP_INFO_REQ, sizeof(req), &req);
4372                } else {
4373                        conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4374                        conn->info_ident = 0;
4375
4376                        l2cap_conn_start(conn);
4377                }
4378                break;
4379
4380        case L2CAP_IT_FIXED_CHAN:
4381                conn->fixed_chan_mask = rsp->data[0];
4382                conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
4383                conn->info_ident = 0;
4384
4385                l2cap_conn_start(conn);
4386                break;
4387        }
4388
4389        return 0;
4390}
4391
4392static int l2cap_create_channel_req(struct l2cap_conn *conn,
4393                                    struct l2cap_cmd_hdr *cmd,
4394                                    u16 cmd_len, void *data)
4395{
4396        struct l2cap_create_chan_req *req = data;
4397        struct l2cap_create_chan_rsp rsp;
4398        struct l2cap_chan *chan;
4399        struct hci_dev *hdev;
4400        u16 psm, scid;
4401
4402        if (cmd_len != sizeof(*req))
4403                return -EPROTO;
4404
4405        if (!enable_hs)
4406                return -EINVAL;
4407
4408        psm = le16_to_cpu(req->psm);
4409        scid = le16_to_cpu(req->scid);
4410
4411        BT_DBG("psm 0x%2.2x, scid 0x%4.4x, amp_id %d", psm, scid, req->amp_id);
4412
4413        /* For controller id 0 make BR/EDR connection */
4414        if (req->amp_id == HCI_BREDR_ID) {
4415                l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4416                              req->amp_id);
4417                return 0;
4418        }
4419
4420        /* Validate AMP controller id */
4421        hdev = hci_dev_get(req->amp_id);
4422        if (!hdev)
4423                goto error;
4424
4425        if (hdev->dev_type != HCI_AMP || !test_bit(HCI_UP, &hdev->flags)) {
4426                hci_dev_put(hdev);
4427                goto error;
4428        }
4429
4430        chan = l2cap_connect(conn, cmd, data, L2CAP_CREATE_CHAN_RSP,
4431                             req->amp_id);
4432        if (chan) {
4433                struct amp_mgr *mgr = conn->hcon->amp_mgr;
4434                struct hci_conn *hs_hcon;
4435
4436                hs_hcon = hci_conn_hash_lookup_ba(hdev, AMP_LINK, conn->dst);
4437                if (!hs_hcon) {
4438                        hci_dev_put(hdev);
4439                        return -EFAULT;
4440                }
4441
4442                BT_DBG("mgr %p bredr_chan %p hs_hcon %p", mgr, chan, hs_hcon);
4443
4444                mgr->bredr_chan = chan;
4445                chan->hs_hcon = hs_hcon;
4446                chan->fcs = L2CAP_FCS_NONE;
4447                conn->mtu = hdev->block_mtu;
4448        }
4449
4450        hci_dev_put(hdev);
4451
4452        return 0;
4453
4454error:
4455        rsp.dcid = 0;
4456        rsp.scid = cpu_to_le16(scid);
4457        rsp.result = __constant_cpu_to_le16(L2CAP_CR_BAD_AMP);
4458        rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
4459
4460        l2cap_send_cmd(conn, cmd->ident, L2CAP_CREATE_CHAN_RSP,
4461                       sizeof(rsp), &rsp);
4462
4463        return -EFAULT;
4464}
4465
4466static void l2cap_send_move_chan_req(struct l2cap_chan *chan, u8 dest_amp_id)
4467{
4468        struct l2cap_move_chan_req req;
4469        u8 ident;
4470
4471        BT_DBG("chan %p, dest_amp_id %d", chan, dest_amp_id);
4472
4473        ident = l2cap_get_ident(chan->conn);
4474        chan->ident = ident;
4475
4476        req.icid = cpu_to_le16(chan->scid);
4477        req.dest_amp_id = dest_amp_id;
4478
4479        l2cap_send_cmd(chan->conn, ident, L2CAP_MOVE_CHAN_REQ, sizeof(req),
4480                       &req);
4481
4482        __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4483}
4484
4485static void l2cap_send_move_chan_rsp(struct l2cap_chan *chan, u16 result)
4486{
4487        struct l2cap_move_chan_rsp rsp;
4488
4489        BT_DBG("chan %p, result 0x%4.4x", chan, result);
4490
4491        rsp.icid = cpu_to_le16(chan->dcid);
4492        rsp.result = cpu_to_le16(result);
4493
4494        l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_RSP,
4495                       sizeof(rsp), &rsp);
4496}
4497
4498static void l2cap_send_move_chan_cfm(struct l2cap_chan *chan, u16 result)
4499{
4500        struct l2cap_move_chan_cfm cfm;
4501
4502        BT_DBG("chan %p, result 0x%4.4x", chan, result);
4503
4504        chan->ident = l2cap_get_ident(chan->conn);
4505
4506        cfm.icid = cpu_to_le16(chan->scid);
4507        cfm.result = cpu_to_le16(result);
4508
4509        l2cap_send_cmd(chan->conn, chan->ident, L2CAP_MOVE_CHAN_CFM,
4510                       sizeof(cfm), &cfm);
4511
4512        __set_chan_timer(chan, L2CAP_MOVE_TIMEOUT);
4513}
4514
4515static void l2cap_send_move_chan_cfm_icid(struct l2cap_conn *conn, u16 icid)
4516{
4517        struct l2cap_move_chan_cfm cfm;
4518
4519        BT_DBG("conn %p, icid 0x%4.4x", conn, icid);
4520
4521        cfm.icid = cpu_to_le16(icid);
4522        cfm.result = __constant_cpu_to_le16(L2CAP_MC_UNCONFIRMED);
4523
4524        l2cap_send_cmd(conn, l2cap_get_ident(conn), L2CAP_MOVE_CHAN_CFM,
4525                       sizeof(cfm), &cfm);
4526}
4527
4528static void l2cap_send_move_chan_cfm_rsp(struct l2cap_conn *conn, u8 ident,
4529                                         u16 icid)
4530{
4531        struct l2cap_move_chan_cfm_rsp rsp;
4532
4533        BT_DBG("icid 0x%4.4x", icid);
4534
4535        rsp.icid = cpu_to_le16(icid);
4536        l2cap_send_cmd(conn, ident, L2CAP_MOVE_CHAN_CFM_RSP, sizeof(rsp), &rsp);
4537}
4538
4539static void __release_logical_link(struct l2cap_chan *chan)
4540{
4541        chan->hs_hchan = NULL;
4542        chan->hs_hcon = NULL;
4543
4544        /* Placeholder - release the logical link */
4545}
4546
4547static void l2cap_logical_fail(struct l2cap_chan *chan)
4548{
4549        /* Logical link setup failed */
4550        if (chan->state != BT_CONNECTED) {
4551                /* Create channel failure, disconnect */
4552                l2cap_send_disconn_req(chan, ECONNRESET);
4553                return;
4554        }
4555
4556        switch (chan->move_role) {
4557        case L2CAP_MOVE_ROLE_RESPONDER:
4558                l2cap_move_done(chan);
4559                l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_SUPP);
4560                break;
4561        case L2CAP_MOVE_ROLE_INITIATOR:
4562                if (chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_COMP ||
4563                    chan->move_state == L2CAP_MOVE_WAIT_LOGICAL_CFM) {
4564                        /* Remote has only sent pending or
4565                         * success responses, clean up
4566                         */
4567                        l2cap_move_done(chan);
4568                }
4569
4570                /* Other amp move states imply that the move
4571                 * has already aborted
4572                 */
4573                l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
4574                break;
4575        }
4576}
4577
4578static void l2cap_logical_finish_create(struct l2cap_chan *chan,
4579                                        struct hci_chan *hchan)
4580{
4581        struct l2cap_conf_rsp rsp;
4582
4583        chan->hs_hchan = hchan;
4584        chan->hs_hcon->l2cap_data = chan->conn;
4585
4586        l2cap_send_efs_conf_rsp(chan, &rsp, chan->ident, 0);
4587
4588        if (test_bit(CONF_INPUT_DONE, &chan->conf_state)) {
4589                int err;
4590
4591                set_default_fcs(chan);
4592
4593                err = l2cap_ertm_init(chan);
4594                if (err < 0)
4595                        l2cap_send_disconn_req(chan, -err);
4596                else
4597                        l2cap_chan_ready(chan);
4598        }
4599}
4600
4601static void l2cap_logical_finish_move(struct l2cap_chan *chan,
4602                                      struct hci_chan *hchan)
4603{
4604        chan->hs_hcon = hchan->conn;
4605        chan->hs_hcon->l2cap_data = chan->conn;
4606
4607        BT_DBG("move_state %d", chan->move_state);
4608
4609        switch (chan->move_state) {
4610        case L2CAP_MOVE_WAIT_LOGICAL_COMP:
4611                /* Move confirm will be sent after a success
4612                 * response is received
4613                 */
4614                chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
4615                break;
4616        case L2CAP_MOVE_WAIT_LOGICAL_CFM:
4617                if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
4618                        chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
4619                } else if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
4620                        chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
4621                        l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
4622                } else if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
4623                        chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
4624                        l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
4625                }
4626                break;
4627        default:
4628                /* Move was not in expected state, free the channel */
4629                __release_logical_link(chan);
4630
4631                chan->move_state = L2CAP_MOVE_STABLE;
4632        }
4633}
4634
4635/* Call with chan locked */
4636void l2cap_logical_cfm(struct l2cap_chan *chan, struct hci_chan *hchan,
4637                       u8 status)
4638{
4639        BT_DBG("chan %p, hchan %p, status %d", chan, hchan, status);
4640
4641        if (status) {
4642                l2cap_logical_fail(chan);
4643                __release_logical_link(chan);
4644                return;
4645        }
4646
4647        if (chan->state != BT_CONNECTED) {
4648                /* Ignore logical link if channel is on BR/EDR */
4649                if (chan->local_amp_id)
4650                        l2cap_logical_finish_create(chan, hchan);
4651        } else {
4652                l2cap_logical_finish_move(chan, hchan);
4653        }
4654}
4655
4656void l2cap_move_start(struct l2cap_chan *chan)
4657{
4658        BT_DBG("chan %p", chan);
4659
4660        if (chan->local_amp_id == HCI_BREDR_ID) {
4661                if (chan->chan_policy != BT_CHANNEL_POLICY_AMP_PREFERRED)
4662                        return;
4663                chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
4664                chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
4665                /* Placeholder - start physical link setup */
4666        } else {
4667                chan->move_role = L2CAP_MOVE_ROLE_INITIATOR;
4668                chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
4669                chan->move_id = 0;
4670                l2cap_move_setup(chan);
4671                l2cap_send_move_chan_req(chan, 0);
4672        }
4673}
4674
4675static void l2cap_do_create(struct l2cap_chan *chan, int result,
4676                            u8 local_amp_id, u8 remote_amp_id)
4677{
4678        BT_DBG("chan %p state %s %u -> %u", chan, state_to_string(chan->state),
4679               local_amp_id, remote_amp_id);
4680
4681        chan->fcs = L2CAP_FCS_NONE;
4682
4683        /* Outgoing channel on AMP */
4684        if (chan->state == BT_CONNECT) {
4685                if (result == L2CAP_CR_SUCCESS) {
4686                        chan->local_amp_id = local_amp_id;
4687                        l2cap_send_create_chan_req(chan, remote_amp_id);
4688                } else {
4689                        /* Revert to BR/EDR connect */
4690                        l2cap_send_conn_req(chan);
4691                }
4692
4693                return;
4694        }
4695
4696        /* Incoming channel on AMP */
4697        if (__l2cap_no_conn_pending(chan)) {
4698                struct l2cap_conn_rsp rsp;
4699                char buf[128];
4700                rsp.scid = cpu_to_le16(chan->dcid);
4701                rsp.dcid = cpu_to_le16(chan->scid);
4702
4703                if (result == L2CAP_CR_SUCCESS) {
4704                        /* Send successful response */
4705                        rsp.result = __constant_cpu_to_le16(L2CAP_CR_SUCCESS);
4706                        rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
4707                } else {
4708                        /* Send negative response */
4709                        rsp.result = __constant_cpu_to_le16(L2CAP_CR_NO_MEM);
4710                        rsp.status = __constant_cpu_to_le16(L2CAP_CS_NO_INFO);
4711                }
4712
4713                l2cap_send_cmd(chan->conn, chan->ident, L2CAP_CREATE_CHAN_RSP,
4714                               sizeof(rsp), &rsp);
4715
4716                if (result == L2CAP_CR_SUCCESS) {
4717                        __l2cap_state_change(chan, BT_CONFIG);
4718                        set_bit(CONF_REQ_SENT, &chan->conf_state);
4719                        l2cap_send_cmd(chan->conn, l2cap_get_ident(chan->conn),
4720                                       L2CAP_CONF_REQ,
4721                                       l2cap_build_conf_req(chan, buf), buf);
4722                        chan->num_conf_req++;
4723                }
4724        }
4725}
4726
4727static void l2cap_do_move_initiate(struct l2cap_chan *chan, u8 local_amp_id,
4728                                   u8 remote_amp_id)
4729{
4730        l2cap_move_setup(chan);
4731        chan->move_id = local_amp_id;
4732        chan->move_state = L2CAP_MOVE_WAIT_RSP;
4733
4734        l2cap_send_move_chan_req(chan, remote_amp_id);
4735}
4736
4737static void l2cap_do_move_respond(struct l2cap_chan *chan, int result)
4738{
4739        struct hci_chan *hchan = NULL;
4740
4741        /* Placeholder - get hci_chan for logical link */
4742
4743        if (hchan) {
4744                if (hchan->state == BT_CONNECTED) {
4745                        /* Logical link is ready to go */
4746                        chan->hs_hcon = hchan->conn;
4747                        chan->hs_hcon->l2cap_data = chan->conn;
4748                        chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
4749                        l2cap_send_move_chan_rsp(chan, L2CAP_MR_SUCCESS);
4750
4751                        l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
4752                } else {
4753                        /* Wait for logical link to be ready */
4754                        chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
4755                }
4756        } else {
4757                /* Logical link not available */
4758                l2cap_send_move_chan_rsp(chan, L2CAP_MR_NOT_ALLOWED);
4759        }
4760}
4761
4762static void l2cap_do_move_cancel(struct l2cap_chan *chan, int result)
4763{
4764        if (chan->move_role == L2CAP_MOVE_ROLE_RESPONDER) {
4765                u8 rsp_result;
4766                if (result == -EINVAL)
4767                        rsp_result = L2CAP_MR_BAD_ID;
4768                else
4769                        rsp_result = L2CAP_MR_NOT_ALLOWED;
4770
4771                l2cap_send_move_chan_rsp(chan, rsp_result);
4772        }
4773
4774        chan->move_role = L2CAP_MOVE_ROLE_NONE;
4775        chan->move_state = L2CAP_MOVE_STABLE;
4776
4777        /* Restart data transmission */
4778        l2cap_ertm_send(chan);
4779}
4780
4781/* Invoke with locked chan */
4782void __l2cap_physical_cfm(struct l2cap_chan *chan, int result)
4783{
4784        u8 local_amp_id = chan->local_amp_id;
4785        u8 remote_amp_id = chan->remote_amp_id;
4786
4787        BT_DBG("chan %p, result %d, local_amp_id %d, remote_amp_id %d",
4788               chan, result, local_amp_id, remote_amp_id);
4789
4790        if (chan->state == BT_DISCONN || chan->state == BT_CLOSED) {
4791                l2cap_chan_unlock(chan);
4792                return;
4793        }
4794
4795        if (chan->state != BT_CONNECTED) {
4796                l2cap_do_create(chan, result, local_amp_id, remote_amp_id);
4797        } else if (result != L2CAP_MR_SUCCESS) {
4798                l2cap_do_move_cancel(chan, result);
4799        } else {
4800                switch (chan->move_role) {
4801                case L2CAP_MOVE_ROLE_INITIATOR:
4802                        l2cap_do_move_initiate(chan, local_amp_id,
4803                                               remote_amp_id);
4804                        break;
4805                case L2CAP_MOVE_ROLE_RESPONDER:
4806                        l2cap_do_move_respond(chan, result);
4807                        break;
4808                default:
4809                        l2cap_do_move_cancel(chan, result);
4810                        break;
4811                }
4812        }
4813}
4814
4815static inline int l2cap_move_channel_req(struct l2cap_conn *conn,
4816                                         struct l2cap_cmd_hdr *cmd,
4817                                         u16 cmd_len, void *data)
4818{
4819        struct l2cap_move_chan_req *req = data;
4820        struct l2cap_move_chan_rsp rsp;
4821        struct l2cap_chan *chan;
4822        u16 icid = 0;
4823        u16 result = L2CAP_MR_NOT_ALLOWED;
4824
4825        if (cmd_len != sizeof(*req))
4826                return -EPROTO;
4827
4828        icid = le16_to_cpu(req->icid);
4829
4830        BT_DBG("icid 0x%4.4x, dest_amp_id %d", icid, req->dest_amp_id);
4831
4832        if (!enable_hs)
4833                return -EINVAL;
4834
4835        chan = l2cap_get_chan_by_dcid(conn, icid);
4836        if (!chan) {
4837                rsp.icid = cpu_to_le16(icid);
4838                rsp.result = __constant_cpu_to_le16(L2CAP_MR_NOT_ALLOWED);
4839                l2cap_send_cmd(conn, cmd->ident, L2CAP_MOVE_CHAN_RSP,
4840                               sizeof(rsp), &rsp);
4841                return 0;
4842        }
4843
4844        chan->ident = cmd->ident;
4845
4846        if (chan->scid < L2CAP_CID_DYN_START ||
4847            chan->chan_policy == BT_CHANNEL_POLICY_BREDR_ONLY ||
4848            (chan->mode != L2CAP_MODE_ERTM &&
4849             chan->mode != L2CAP_MODE_STREAMING)) {
4850                result = L2CAP_MR_NOT_ALLOWED;
4851                goto send_move_response;
4852        }
4853
4854        if (chan->local_amp_id == req->dest_amp_id) {
4855                result = L2CAP_MR_SAME_ID;
4856                goto send_move_response;
4857        }
4858
4859        if (req->dest_amp_id) {
4860                struct hci_dev *hdev;
4861                hdev = hci_dev_get(req->dest_amp_id);
4862                if (!hdev || hdev->dev_type != HCI_AMP ||
4863                    !test_bit(HCI_UP, &hdev->flags)) {
4864                        if (hdev)
4865                                hci_dev_put(hdev);
4866
4867                        result = L2CAP_MR_BAD_ID;
4868                        goto send_move_response;
4869                }
4870                hci_dev_put(hdev);
4871        }
4872
4873        /* Detect a move collision.  Only send a collision response
4874         * if this side has "lost", otherwise proceed with the move.
4875         * The winner has the larger bd_addr.
4876         */
4877        if ((__chan_is_moving(chan) ||
4878             chan->move_role != L2CAP_MOVE_ROLE_NONE) &&
4879            bacmp(conn->src, conn->dst) > 0) {
4880                result = L2CAP_MR_COLLISION;
4881                goto send_move_response;
4882        }
4883
4884        chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
4885        l2cap_move_setup(chan);
4886        chan->move_id = req->dest_amp_id;
4887        icid = chan->dcid;
4888
4889        if (!req->dest_amp_id) {
4890                /* Moving to BR/EDR */
4891                if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
4892                        chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
4893                        result = L2CAP_MR_PEND;
4894                } else {
4895                        chan->move_state = L2CAP_MOVE_WAIT_CONFIRM;
4896                        result = L2CAP_MR_SUCCESS;
4897                }
4898        } else {
4899                chan->move_state = L2CAP_MOVE_WAIT_PREPARE;
4900                /* Placeholder - uncomment when amp functions are available */
4901                /*amp_accept_physical(chan, req->dest_amp_id);*/
4902                result = L2CAP_MR_PEND;
4903        }
4904
4905send_move_response:
4906        l2cap_send_move_chan_rsp(chan, result);
4907
4908        l2cap_chan_unlock(chan);
4909
4910        return 0;
4911}
4912
4913static void l2cap_move_continue(struct l2cap_conn *conn, u16 icid, u16 result)
4914{
4915        struct l2cap_chan *chan;
4916        struct hci_chan *hchan = NULL;
4917
4918        chan = l2cap_get_chan_by_scid(conn, icid);
4919        if (!chan) {
4920                l2cap_send_move_chan_cfm_icid(conn, icid);
4921                return;
4922        }
4923
4924        __clear_chan_timer(chan);
4925        if (result == L2CAP_MR_PEND)
4926                __set_chan_timer(chan, L2CAP_MOVE_ERTX_TIMEOUT);
4927
4928        switch (chan->move_state) {
4929        case L2CAP_MOVE_WAIT_LOGICAL_COMP:
4930                /* Move confirm will be sent when logical link
4931                 * is complete.
4932                 */
4933                chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
4934                break;
4935        case L2CAP_MOVE_WAIT_RSP_SUCCESS:
4936                if (result == L2CAP_MR_PEND) {
4937                        break;
4938                } else if (test_bit(CONN_LOCAL_BUSY,
4939                                    &chan->conn_state)) {
4940                        chan->move_state = L2CAP_MOVE_WAIT_LOCAL_BUSY;
4941                } else {
4942                        /* Logical link is up or moving to BR/EDR,
4943                         * proceed with move
4944                         */
4945                        chan->move_state = L2CAP_MOVE_WAIT_CONFIRM_RSP;
4946                        l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
4947                }
4948                break;
4949        case L2CAP_MOVE_WAIT_RSP:
4950                /* Moving to AMP */
4951                if (result == L2CAP_MR_SUCCESS) {
4952                        /* Remote is ready, send confirm immediately
4953                         * after logical link is ready
4954                         */
4955                        chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_CFM;
4956                } else {
4957                        /* Both logical link and move success
4958                         * are required to confirm
4959                         */
4960                        chan->move_state = L2CAP_MOVE_WAIT_LOGICAL_COMP;
4961                }
4962
4963                /* Placeholder - get hci_chan for logical link */
4964                if (!hchan) {
4965                        /* Logical link not available */
4966                        l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
4967                        break;
4968                }
4969
4970                /* If the logical link is not yet connected, do not
4971                 * send confirmation.
4972                 */
4973                if (hchan->state != BT_CONNECTED)
4974                        break;
4975
4976                /* Logical link is already ready to go */
4977
4978                chan->hs_hcon = hchan->conn;
4979                chan->hs_hcon->l2cap_data = chan->conn;
4980
4981                if (result == L2CAP_MR_SUCCESS) {
4982                        /* Can confirm now */
4983                        l2cap_send_move_chan_cfm(chan, L2CAP_MC_CONFIRMED);
4984                } else {
4985                        /* Now only need move success
4986                         * to confirm
4987                         */
4988                        chan->move_state = L2CAP_MOVE_WAIT_RSP_SUCCESS;
4989                }
4990
4991                l2cap_logical_cfm(chan, hchan, L2CAP_MR_SUCCESS);
4992                break;
4993        default:
4994                /* Any other amp move state means the move failed. */
4995                chan->move_id = chan->local_amp_id;
4996                l2cap_move_done(chan);
4997                l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
4998        }
4999
5000        l2cap_chan_unlock(chan);
5001}
5002
5003static void l2cap_move_fail(struct l2cap_conn *conn, u8 ident, u16 icid,
5004                            u16 result)
5005{
5006        struct l2cap_chan *chan;
5007
5008        chan = l2cap_get_chan_by_ident(conn, ident);
5009        if (!chan) {
5010                /* Could not locate channel, icid is best guess */
5011                l2cap_send_move_chan_cfm_icid(conn, icid);
5012                return;
5013        }
5014
5015        __clear_chan_timer(chan);
5016
5017        if (chan->move_role == L2CAP_MOVE_ROLE_INITIATOR) {
5018                if (result == L2CAP_MR_COLLISION) {
5019                        chan->move_role = L2CAP_MOVE_ROLE_RESPONDER;
5020                } else {
5021                        /* Cleanup - cancel move */
5022                        chan->move_id = chan->local_amp_id;
5023                        l2cap_move_done(chan);
5024                }
5025        }
5026
5027        l2cap_send_move_chan_cfm(chan, L2CAP_MC_UNCONFIRMED);
5028
5029        l2cap_chan_unlock(chan);
5030}
5031
5032static int l2cap_move_channel_rsp(struct l2cap_conn *conn,
5033                                  struct l2cap_cmd_hdr *cmd,
5034                                  u16 cmd_len, void *data)
5035{
5036        struct l2cap_move_chan_rsp *rsp = data;
5037        u16 icid, result;
5038
5039        if (cmd_len != sizeof(*rsp))
5040                return -EPROTO;
5041
5042        icid = le16_to_cpu(rsp->icid);
5043        result = le16_to_cpu(rsp->result);
5044
5045        BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5046
5047        if (result == L2CAP_MR_SUCCESS || result == L2CAP_MR_PEND)
5048                l2cap_move_continue(conn, icid, result);
5049        else
5050                l2cap_move_fail(conn, cmd->ident, icid, result);
5051
5052        return 0;
5053}
5054
5055static int l2cap_move_channel_confirm(struct l2cap_conn *conn,
5056                                      struct l2cap_cmd_hdr *cmd,
5057                                      u16 cmd_len, void *data)
5058{
5059        struct l2cap_move_chan_cfm *cfm = data;
5060        struct l2cap_chan *chan;
5061        u16 icid, result;
5062
5063        if (cmd_len != sizeof(*cfm))
5064                return -EPROTO;
5065
5066        icid = le16_to_cpu(cfm->icid);
5067        result = le16_to_cpu(cfm->result);
5068
5069        BT_DBG("icid 0x%4.4x, result 0x%4.4x", icid, result);
5070
5071        chan = l2cap_get_chan_by_dcid(conn, icid);
5072        if (!chan) {
5073                /* Spec requires a response even if the icid was not found */
5074                l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5075                return 0;
5076        }
5077
5078        if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM) {
5079                if (result == L2CAP_MC_CONFIRMED) {
5080                        chan->local_amp_id = chan->move_id;
5081                        if (!chan->local_amp_id)
5082                                __release_logical_link(chan);
5083                } else {
5084                        chan->move_id = chan->local_amp_id;
5085                }
5086
5087                l2cap_move_done(chan);
5088        }
5089
5090        l2cap_send_move_chan_cfm_rsp(conn, cmd->ident, icid);
5091
5092        l2cap_chan_unlock(chan);
5093
5094        return 0;
5095}
5096
5097static inline int l2cap_move_channel_confirm_rsp(struct l2cap_conn *conn,
5098                                                 struct l2cap_cmd_hdr *cmd,
5099                                                 u16 cmd_len, void *data)
5100{
5101        struct l2cap_move_chan_cfm_rsp *rsp = data;
5102        struct l2cap_chan *chan;
5103        u16 icid;
5104
5105        if (cmd_len != sizeof(*rsp))
5106                return -EPROTO;
5107
5108        icid = le16_to_cpu(rsp->icid);
5109
5110        BT_DBG("icid 0x%4.4x", icid);
5111
5112        chan = l2cap_get_chan_by_scid(conn, icid);
5113        if (!chan)
5114                return 0;
5115
5116        __clear_chan_timer(chan);
5117
5118        if (chan->move_state == L2CAP_MOVE_WAIT_CONFIRM_RSP) {
5119                chan->local_amp_id = chan->move_id;
5120
5121                if (!chan->local_amp_id && chan->hs_hchan)
5122                        __release_logical_link(chan);
5123
5124                l2cap_move_done(chan);
5125        }
5126
5127        l2cap_chan_unlock(chan);
5128
5129        return 0;
5130}
5131
5132static inline int l2cap_check_conn_param(u16 min, u16 max, u16 latency,
5133                                         u16 to_multiplier)
5134{
5135        u16 max_latency;
5136
5137        if (min > max || min < 6 || max > 3200)
5138                return -EINVAL;
5139
5140        if (to_multiplier < 10 || to_multiplier > 3200)
5141                return -EINVAL;
5142
5143        if (max >= to_multiplier * 8)
5144                return -EINVAL;
5145
5146        max_latency = (to_multiplier * 8 / max) - 1;
5147        if (latency > 499 || latency > max_latency)
5148                return -EINVAL;
5149
5150        return 0;
5151}
5152
5153static inline int l2cap_conn_param_update_req(struct l2cap_conn *conn,
5154                                              struct l2cap_cmd_hdr *cmd,
5155                                              u8 *data)
5156{
5157        struct hci_conn *hcon = conn->hcon;
5158        struct l2cap_conn_param_update_req *req;
5159        struct l2cap_conn_param_update_rsp rsp;
5160        u16 min, max, latency, to_multiplier, cmd_len;
5161        int err;
5162
5163        if (!(hcon->link_mode & HCI_LM_MASTER))
5164                return -EINVAL;
5165
5166        cmd_len = __le16_to_cpu(cmd->len);
5167        if (cmd_len != sizeof(struct l2cap_conn_param_update_req))
5168                return -EPROTO;
5169
5170        req = (struct l2cap_conn_param_update_req *) data;
5171        min             = __le16_to_cpu(req->min);
5172        max             = __le16_to_cpu(req->max);
5173        latency         = __le16_to_cpu(req->latency);
5174        to_multiplier   = __le16_to_cpu(req->to_multiplier);
5175
5176        BT_DBG("min 0x%4.4x max 0x%4.4x latency: 0x%4.4x Timeout: 0x%4.4x",
5177               min, max, latency, to_multiplier);
5178
5179        memset(&rsp, 0, sizeof(rsp));
5180
5181        err = l2cap_check_conn_param(min, max, latency, to_multiplier);
5182        if (err)
5183                rsp.result = __constant_cpu_to_le16(L2CAP_CONN_PARAM_REJECTED);
5184        else
5185                rsp.result = __constant_cpu_to_le16(L2CAP_CONN_PARAM_ACCEPTED);
5186
5187        l2cap_send_cmd(conn, cmd->ident, L2CAP_CONN_PARAM_UPDATE_RSP,
5188                       sizeof(rsp), &rsp);
5189
5190        if (!err)
5191                hci_le_conn_update(hcon, min, max, latency, to_multiplier);
5192
5193        return 0;
5194}
5195
5196static inline int l2cap_bredr_sig_cmd(struct l2cap_conn *conn,
5197                                      struct l2cap_cmd_hdr *cmd, u16 cmd_len,
5198                                      u8 *data)
5199{
5200        int err = 0;
5201
5202        switch (cmd->code) {
5203        case L2CAP_COMMAND_REJ:
5204                l2cap_command_rej(conn, cmd, cmd_len, data);
5205                break;
5206
5207        case L2CAP_CONN_REQ:
5208                err = l2cap_connect_req(conn, cmd, cmd_len, data);
5209                break;
5210
5211        case L2CAP_CONN_RSP:
5212        case L2CAP_CREATE_CHAN_RSP:
5213                err = l2cap_connect_create_rsp(conn, cmd, cmd_len, data);
5214                break;
5215
5216        case L2CAP_CONF_REQ:
5217                err = l2cap_config_req(conn, cmd, cmd_len, data);
5218                break;
5219
5220        case L2CAP_CONF_RSP:
5221                err = l2cap_config_rsp(conn, cmd, cmd_len, data);
5222                break;
5223
5224        case L2CAP_DISCONN_REQ:
5225                err = l2cap_disconnect_req(conn, cmd, cmd_len, data);
5226                break;
5227
5228        case L2CAP_DISCONN_RSP:
5229                err = l2cap_disconnect_rsp(conn, cmd, cmd_len, data);
5230                break;
5231
5232        case L2CAP_ECHO_REQ:
5233                l2cap_send_cmd(conn, cmd->ident, L2CAP_ECHO_RSP, cmd_len, data);
5234                break;
5235
5236        case L2CAP_ECHO_RSP:
5237                break;
5238
5239        case L2CAP_INFO_REQ:
5240                err = l2cap_information_req(conn, cmd, cmd_len, data);
5241                break;
5242
5243        case L2CAP_INFO_RSP:
5244                err = l2cap_information_rsp(conn, cmd, cmd_len, data);
5245                break;
5246
5247        case L2CAP_CREATE_CHAN_REQ:
5248                err = l2cap_create_channel_req(conn, cmd, cmd_len, data);
5249                break;
5250
5251        case L2CAP_MOVE_CHAN_REQ:
5252                err = l2cap_move_channel_req(conn, cmd, cmd_len, data);
5253                break;
5254
5255        case L2CAP_MOVE_CHAN_RSP:
5256                err = l2cap_move_channel_rsp(conn, cmd, cmd_len, data);
5257                break;
5258
5259        case L2CAP_MOVE_CHAN_CFM:
5260                err = l2cap_move_channel_confirm(conn, cmd, cmd_len, data);
5261                break;
5262
5263        case L2CAP_MOVE_CHAN_CFM_RSP:
5264                err = l2cap_move_channel_confirm_rsp(conn, cmd, cmd_len, data);
5265                break;
5266
5267        default:
5268                BT_ERR("Unknown BR/EDR signaling command 0x%2.2x", cmd->code);
5269                err = -EINVAL;
5270                break;
5271        }
5272
5273        return err;
5274}
5275
5276static inline int l2cap_le_sig_cmd(struct l2cap_conn *conn,
5277                                   struct l2cap_cmd_hdr *cmd, u8 *data)
5278{
5279        switch (cmd->code) {
5280        case L2CAP_COMMAND_REJ:
5281                return 0;
5282
5283        case L2CAP_CONN_PARAM_UPDATE_REQ:
5284                return l2cap_conn_param_update_req(conn, cmd, data);
5285
5286        case L2CAP_CONN_PARAM_UPDATE_RSP:
5287                return 0;
5288
5289        default:
5290                BT_ERR("Unknown LE signaling command 0x%2.2x", cmd->code);
5291                return -EINVAL;
5292        }
5293}
5294
5295static inline void l2cap_sig_channel(struct l2cap_conn *conn,
5296                                     struct sk_buff *skb)
5297{
5298        u8 *data = skb->data;
5299        int len = skb->len;
5300        struct l2cap_cmd_hdr cmd;
5301        int err;
5302
5303        l2cap_raw_recv(conn, skb);
5304
5305        while (len >= L2CAP_CMD_HDR_SIZE) {
5306                u16 cmd_len;
5307                memcpy(&cmd, data, L2CAP_CMD_HDR_SIZE);
5308                data += L2CAP_CMD_HDR_SIZE;
5309                len  -= L2CAP_CMD_HDR_SIZE;
5310
5311                cmd_len = le16_to_cpu(cmd.len);
5312
5313                BT_DBG("code 0x%2.2x len %d id 0x%2.2x", cmd.code, cmd_len,
5314                       cmd.ident);
5315
5316                if (cmd_len > len || !cmd.ident) {
5317                        BT_DBG("corrupted command");
5318                        break;
5319                }
5320
5321                if (conn->hcon->type == LE_LINK)
5322                        err = l2cap_le_sig_cmd(conn, &cmd, data);
5323                else
5324                        err = l2cap_bredr_sig_cmd(conn, &cmd, cmd_len, data);
5325
5326                if (err) {
5327                        struct l2cap_cmd_rej_unk rej;
5328
5329                        BT_ERR("Wrong link type (%d)", err);
5330
5331                        /* FIXME: Map err to a valid reason */
5332                        rej.reason = __constant_cpu_to_le16(L2CAP_REJ_NOT_UNDERSTOOD);
5333                        l2cap_send_cmd(conn, cmd.ident, L2CAP_COMMAND_REJ,
5334                                       sizeof(rej), &rej);
5335                }
5336
5337                data += cmd_len;
5338                len  -= cmd_len;
5339        }
5340
5341        kfree_skb(skb);
5342}
5343
5344static int l2cap_check_fcs(struct l2cap_chan *chan,  struct sk_buff *skb)
5345{
5346        u16 our_fcs, rcv_fcs;
5347        int hdr_size;
5348
5349        if (test_bit(FLAG_EXT_CTRL, &chan->flags))
5350                hdr_size = L2CAP_EXT_HDR_SIZE;
5351        else
5352                hdr_size = L2CAP_ENH_HDR_SIZE;
5353
5354        if (chan->fcs == L2CAP_FCS_CRC16) {
5355                skb_trim(skb, skb->len - L2CAP_FCS_SIZE);
5356                rcv_fcs = get_unaligned_le16(skb->data + skb->len);
5357                our_fcs = crc16(0, skb->data - hdr_size, skb->len + hdr_size);
5358
5359                if (our_fcs != rcv_fcs)
5360                        return -EBADMSG;
5361        }
5362        return 0;
5363}
5364
5365static void l2cap_send_i_or_rr_or_rnr(struct l2cap_chan *chan)
5366{
5367        struct l2cap_ctrl control;
5368
5369        BT_DBG("chan %p", chan);
5370
5371        memset(&control, 0, sizeof(control));
5372        control.sframe = 1;
5373        control.final = 1;
5374        control.reqseq = chan->buffer_seq;
5375        set_bit(CONN_SEND_FBIT, &chan->conn_state);
5376
5377        if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5378                control.super = L2CAP_SUPER_RNR;
5379                l2cap_send_sframe(chan, &control);
5380        }
5381
5382        if (test_and_clear_bit(CONN_REMOTE_BUSY, &chan->conn_state) &&
5383            chan->unacked_frames > 0)
5384                __set_retrans_timer(chan);
5385
5386        /* Send pending iframes */
5387        l2cap_ertm_send(chan);
5388
5389        if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state) &&
5390            test_bit(CONN_SEND_FBIT, &chan->conn_state)) {
5391                /* F-bit wasn't sent in an s-frame or i-frame yet, so
5392                 * send it now.
5393                 */
5394                control.super = L2CAP_SUPER_RR;
5395                l2cap_send_sframe(chan, &control);
5396        }
5397}
5398
5399static void append_skb_frag(struct sk_buff *skb, struct sk_buff *new_frag,
5400                            struct sk_buff **last_frag)
5401{
5402        /* skb->len reflects data in skb as well as all fragments
5403         * skb->data_len reflects only data in fragments
5404         */
5405        if (!skb_has_frag_list(skb))
5406                skb_shinfo(skb)->frag_list = new_frag;
5407
5408        new_frag->next = NULL;
5409
5410        (*last_frag)->next = new_frag;
5411        *last_frag = new_frag;
5412
5413        skb->len += new_frag->len;
5414        skb->data_len += new_frag->len;
5415        skb->truesize += new_frag->truesize;
5416}
5417
5418static int l2cap_reassemble_sdu(struct l2cap_chan *chan, struct sk_buff *skb,
5419                                struct l2cap_ctrl *control)
5420{
5421        int err = -EINVAL;
5422
5423        switch (control->sar) {
5424        case L2CAP_SAR_UNSEGMENTED:
5425                if (chan->sdu)
5426                        break;
5427
5428                err = chan->ops->recv(chan, skb);
5429                break;
5430
5431        case L2CAP_SAR_START:
5432                if (chan->sdu)
5433                        break;
5434
5435                chan->sdu_len = get_unaligned_le16(skb->data);
5436                skb_pull(skb, L2CAP_SDULEN_SIZE);
5437
5438                if (chan->sdu_len > chan->imtu) {
5439                        err = -EMSGSIZE;
5440                        break;
5441                }
5442
5443                if (skb->len >= chan->sdu_len)
5444                        break;
5445
5446                chan->sdu = skb;
5447                chan->sdu_last_frag = skb;
5448
5449                skb = NULL;
5450                err = 0;
5451                break;
5452
5453        case L2CAP_SAR_CONTINUE:
5454                if (!chan->sdu)
5455                        break;
5456
5457                append_skb_frag(chan->sdu, skb,
5458                                &chan->sdu_last_frag);
5459                skb = NULL;
5460
5461                if (chan->sdu->len >= chan->sdu_len)
5462                        break;
5463
5464                err = 0;
5465                break;
5466
5467        case L2CAP_SAR_END:
5468                if (!chan->sdu)
5469                        break;
5470
5471                append_skb_frag(chan->sdu, skb,
5472                                &chan->sdu_last_frag);
5473                skb = NULL;
5474
5475                if (chan->sdu->len != chan->sdu_len)
5476                        break;
5477
5478                err = chan->ops->recv(chan, chan->sdu);
5479
5480                if (!err) {
5481                        /* Reassembly complete */
5482                        chan->sdu = NULL;
5483                        chan->sdu_last_frag = NULL;
5484                        chan->sdu_len = 0;
5485                }
5486                break;
5487        }
5488
5489        if (err) {
5490                kfree_skb(skb);
5491                kfree_skb(chan->sdu);
5492                chan->sdu = NULL;
5493                chan->sdu_last_frag = NULL;
5494                chan->sdu_len = 0;
5495        }
5496
5497        return err;
5498}
5499
5500static int l2cap_resegment(struct l2cap_chan *chan)
5501{
5502        /* Placeholder */
5503        return 0;
5504}
5505
5506void l2cap_chan_busy(struct l2cap_chan *chan, int busy)
5507{
5508        u8 event;
5509
5510        if (chan->mode != L2CAP_MODE_ERTM)
5511                return;
5512
5513        event = busy ? L2CAP_EV_LOCAL_BUSY_DETECTED : L2CAP_EV_LOCAL_BUSY_CLEAR;
5514        l2cap_tx(chan, NULL, NULL, event);
5515}
5516
5517static int l2cap_rx_queued_iframes(struct l2cap_chan *chan)
5518{
5519        int err = 0;
5520        /* Pass sequential frames to l2cap_reassemble_sdu()
5521         * until a gap is encountered.
5522         */
5523
5524        BT_DBG("chan %p", chan);
5525
5526        while (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5527                struct sk_buff *skb;
5528                BT_DBG("Searching for skb with txseq %d (queue len %d)",
5529                       chan->buffer_seq, skb_queue_len(&chan->srej_q));
5530
5531                skb = l2cap_ertm_seq_in_queue(&chan->srej_q, chan->buffer_seq);
5532
5533                if (!skb)
5534                        break;
5535
5536                skb_unlink(skb, &chan->srej_q);
5537                chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
5538                err = l2cap_reassemble_sdu(chan, skb, &bt_cb(skb)->control);
5539                if (err)
5540                        break;
5541        }
5542
5543        if (skb_queue_empty(&chan->srej_q)) {
5544                chan->rx_state = L2CAP_RX_STATE_RECV;
5545                l2cap_send_ack(chan);
5546        }
5547
5548        return err;
5549}
5550
5551static void l2cap_handle_srej(struct l2cap_chan *chan,
5552                              struct l2cap_ctrl *control)
5553{
5554        struct sk_buff *skb;
5555
5556        BT_DBG("chan %p, control %p", chan, control);
5557
5558        if (control->reqseq == chan->next_tx_seq) {
5559                BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
5560                l2cap_send_disconn_req(chan, ECONNRESET);
5561                return;
5562        }
5563
5564        skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
5565
5566        if (skb == NULL) {
5567                BT_DBG("Seq %d not available for retransmission",
5568                       control->reqseq);
5569                return;
5570        }
5571
5572        if (chan->max_tx != 0 && bt_cb(skb)->control.retries >= chan->max_tx) {
5573                BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
5574                l2cap_send_disconn_req(chan, ECONNRESET);
5575                return;
5576        }
5577
5578        clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
5579
5580        if (control->poll) {
5581                l2cap_pass_to_tx(chan, control);
5582
5583                set_bit(CONN_SEND_FBIT, &chan->conn_state);
5584                l2cap_retransmit(chan, control);
5585                l2cap_ertm_send(chan);
5586
5587                if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
5588                        set_bit(CONN_SREJ_ACT, &chan->conn_state);
5589                        chan->srej_save_reqseq = control->reqseq;
5590                }
5591        } else {
5592                l2cap_pass_to_tx_fbit(chan, control);
5593
5594                if (control->final) {
5595                        if (chan->srej_save_reqseq != control->reqseq ||
5596                            !test_and_clear_bit(CONN_SREJ_ACT,
5597                                                &chan->conn_state))
5598                                l2cap_retransmit(chan, control);
5599                } else {
5600                        l2cap_retransmit(chan, control);
5601                        if (chan->tx_state == L2CAP_TX_STATE_WAIT_F) {
5602                                set_bit(CONN_SREJ_ACT, &chan->conn_state);
5603                                chan->srej_save_reqseq = control->reqseq;
5604                        }
5605                }
5606        }
5607}
5608
5609static void l2cap_handle_rej(struct l2cap_chan *chan,
5610                             struct l2cap_ctrl *control)
5611{
5612        struct sk_buff *skb;
5613
5614        BT_DBG("chan %p, control %p", chan, control);
5615
5616        if (control->reqseq == chan->next_tx_seq) {
5617                BT_DBG("Invalid reqseq %d, disconnecting", control->reqseq);
5618                l2cap_send_disconn_req(chan, ECONNRESET);
5619                return;
5620        }
5621
5622        skb = l2cap_ertm_seq_in_queue(&chan->tx_q, control->reqseq);
5623
5624        if (chan->max_tx && skb &&
5625            bt_cb(skb)->control.retries >= chan->max_tx) {
5626                BT_DBG("Retry limit exceeded (%d)", chan->max_tx);
5627                l2cap_send_disconn_req(chan, ECONNRESET);
5628                return;
5629        }
5630
5631        clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
5632
5633        l2cap_pass_to_tx(chan, control);
5634
5635        if (control->final) {
5636                if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state))
5637                        l2cap_retransmit_all(chan, control);
5638        } else {
5639                l2cap_retransmit_all(chan, control);
5640                l2cap_ertm_send(chan);
5641                if (chan->tx_state == L2CAP_TX_STATE_WAIT_F)
5642                        set_bit(CONN_REJ_ACT, &chan->conn_state);
5643        }
5644}
5645
5646static u8 l2cap_classify_txseq(struct l2cap_chan *chan, u16 txseq)
5647{
5648        BT_DBG("chan %p, txseq %d", chan, txseq);
5649
5650        BT_DBG("last_acked_seq %d, expected_tx_seq %d", chan->last_acked_seq,
5651               chan->expected_tx_seq);
5652
5653        if (chan->rx_state == L2CAP_RX_STATE_SREJ_SENT) {
5654                if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
5655                    chan->tx_win) {
5656                        /* See notes below regarding "double poll" and
5657                         * invalid packets.
5658                         */
5659                        if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
5660                                BT_DBG("Invalid/Ignore - after SREJ");
5661                                return L2CAP_TXSEQ_INVALID_IGNORE;
5662                        } else {
5663                                BT_DBG("Invalid - in window after SREJ sent");
5664                                return L2CAP_TXSEQ_INVALID;
5665                        }
5666                }
5667
5668                if (chan->srej_list.head == txseq) {
5669                        BT_DBG("Expected SREJ");
5670                        return L2CAP_TXSEQ_EXPECTED_SREJ;
5671                }
5672
5673                if (l2cap_ertm_seq_in_queue(&chan->srej_q, txseq)) {
5674                        BT_DBG("Duplicate SREJ - txseq already stored");
5675                        return L2CAP_TXSEQ_DUPLICATE_SREJ;
5676                }
5677
5678                if (l2cap_seq_list_contains(&chan->srej_list, txseq)) {
5679                        BT_DBG("Unexpected SREJ - not requested");
5680                        return L2CAP_TXSEQ_UNEXPECTED_SREJ;
5681                }
5682        }
5683
5684        if (chan->expected_tx_seq == txseq) {
5685                if (__seq_offset(chan, txseq, chan->last_acked_seq) >=
5686                    chan->tx_win) {
5687                        BT_DBG("Invalid - txseq outside tx window");
5688                        return L2CAP_TXSEQ_INVALID;
5689                } else {
5690                        BT_DBG("Expected");
5691                        return L2CAP_TXSEQ_EXPECTED;
5692                }
5693        }
5694
5695        if (__seq_offset(chan, txseq, chan->last_acked_seq) <
5696            __seq_offset(chan, chan->expected_tx_seq, chan->last_acked_seq)) {
5697                BT_DBG("Duplicate - expected_tx_seq later than txseq");
5698                return L2CAP_TXSEQ_DUPLICATE;
5699        }
5700
5701        if (__seq_offset(chan, txseq, chan->last_acked_seq) >= chan->tx_win) {
5702                /* A source of invalid packets is a "double poll" condition,
5703                 * where delays cause us to send multiple poll packets.  If
5704                 * the remote stack receives and processes both polls,
5705                 * sequence numbers can wrap around in such a way that a
5706                 * resent frame has a sequence number that looks like new data
5707                 * with a sequence gap.  This would trigger an erroneous SREJ
5708                 * request.
5709                 *
5710                 * Fortunately, this is impossible with a tx window that's
5711                 * less than half of the maximum sequence number, which allows
5712                 * invalid frames to be safely ignored.
5713                 *
5714                 * With tx window sizes greater than half of the tx window
5715                 * maximum, the frame is invalid and cannot be ignored.  This
5716                 * causes a disconnect.
5717                 */
5718
5719                if (chan->tx_win <= ((chan->tx_win_max + 1) >> 1)) {
5720                        BT_DBG("Invalid/Ignore - txseq outside tx window");
5721                        return L2CAP_TXSEQ_INVALID_IGNORE;
5722                } else {
5723                        BT_DBG("Invalid - txseq outside tx window");
5724                        return L2CAP_TXSEQ_INVALID;
5725                }
5726        } else {
5727                BT_DBG("Unexpected - txseq indicates missing frames");
5728                return L2CAP_TXSEQ_UNEXPECTED;
5729        }
5730}
5731
5732static int l2cap_rx_state_recv(struct l2cap_chan *chan,
5733                               struct l2cap_ctrl *control,
5734                               struct sk_buff *skb, u8 event)
5735{
5736        int err = 0;
5737        bool skb_in_use = 0;
5738
5739        BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
5740               event);
5741
5742        switch (event) {
5743        case L2CAP_EV_RECV_IFRAME:
5744                switch (l2cap_classify_txseq(chan, control->txseq)) {
5745                case L2CAP_TXSEQ_EXPECTED:
5746                        l2cap_pass_to_tx(chan, control);
5747
5748                        if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5749                                BT_DBG("Busy, discarding expected seq %d",
5750                                       control->txseq);
5751                                break;
5752                        }
5753
5754                        chan->expected_tx_seq = __next_seq(chan,
5755                                                           control->txseq);
5756
5757                        chan->buffer_seq = chan->expected_tx_seq;
5758                        skb_in_use = 1;
5759
5760                        err = l2cap_reassemble_sdu(chan, skb, control);
5761                        if (err)
5762                                break;
5763
5764                        if (control->final) {
5765                                if (!test_and_clear_bit(CONN_REJ_ACT,
5766                                                        &chan->conn_state)) {
5767                                        control->final = 0;
5768                                        l2cap_retransmit_all(chan, control);
5769                                        l2cap_ertm_send(chan);
5770                                }
5771                        }
5772
5773                        if (!test_bit(CONN_LOCAL_BUSY, &chan->conn_state))
5774                                l2cap_send_ack(chan);
5775                        break;
5776                case L2CAP_TXSEQ_UNEXPECTED:
5777                        l2cap_pass_to_tx(chan, control);
5778
5779                        /* Can't issue SREJ frames in the local busy state.
5780                         * Drop this frame, it will be seen as missing
5781                         * when local busy is exited.
5782                         */
5783                        if (test_bit(CONN_LOCAL_BUSY, &chan->conn_state)) {
5784                                BT_DBG("Busy, discarding unexpected seq %d",
5785                                       control->txseq);
5786                                break;
5787                        }
5788
5789                        /* There was a gap in the sequence, so an SREJ
5790                         * must be sent for each missing frame.  The
5791                         * current frame is stored for later use.
5792                         */
5793                        skb_queue_tail(&chan->srej_q, skb);
5794                        skb_in_use = 1;
5795                        BT_DBG("Queued %p (queue len %d)", skb,
5796                               skb_queue_len(&chan->srej_q));
5797
5798                        clear_bit(CONN_SREJ_ACT, &chan->conn_state);
5799                        l2cap_seq_list_clear(&chan->srej_list);
5800                        l2cap_send_srej(chan, control->txseq);
5801
5802                        chan->rx_state = L2CAP_RX_STATE_SREJ_SENT;
5803                        break;
5804                case L2CAP_TXSEQ_DUPLICATE:
5805                        l2cap_pass_to_tx(chan, control);
5806                        break;
5807                case L2CAP_TXSEQ_INVALID_IGNORE:
5808                        break;
5809                case L2CAP_TXSEQ_INVALID:
5810                default:
5811                        l2cap_send_disconn_req(chan, ECONNRESET);
5812                        break;
5813                }
5814                break;
5815        case L2CAP_EV_RECV_RR:
5816                l2cap_pass_to_tx(chan, control);
5817                if (control->final) {
5818                        clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
5819
5820                        if (!test_and_clear_bit(CONN_REJ_ACT, &chan->conn_state) &&
5821                            !__chan_is_moving(chan)) {
5822                                control->final = 0;
5823                                l2cap_retransmit_all(chan, control);
5824                        }
5825
5826                        l2cap_ertm_send(chan);
5827                } else if (control->poll) {
5828                        l2cap_send_i_or_rr_or_rnr(chan);
5829                } else {
5830                        if (test_and_clear_bit(CONN_REMOTE_BUSY,
5831                                               &chan->conn_state) &&
5832                            chan->unacked_frames)
5833                                __set_retrans_timer(chan);
5834
5835                        l2cap_ertm_send(chan);
5836                }
5837                break;
5838        case L2CAP_EV_RECV_RNR:
5839                set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
5840                l2cap_pass_to_tx(chan, control);
5841                if (control && control->poll) {
5842                        set_bit(CONN_SEND_FBIT, &chan->conn_state);
5843                        l2cap_send_rr_or_rnr(chan, 0);
5844                }
5845                __clear_retrans_timer(chan);
5846                l2cap_seq_list_clear(&chan->retrans_list);
5847                break;
5848        case L2CAP_EV_RECV_REJ:
5849                l2cap_handle_rej(chan, control);
5850                break;
5851        case L2CAP_EV_RECV_SREJ:
5852                l2cap_handle_srej(chan, control);
5853                break;
5854        default:
5855                break;
5856        }
5857
5858        if (skb && !skb_in_use) {
5859                BT_DBG("Freeing %p", skb);
5860                kfree_skb(skb);
5861        }
5862
5863        return err;
5864}
5865
5866static int l2cap_rx_state_srej_sent(struct l2cap_chan *chan,
5867                                    struct l2cap_ctrl *control,
5868                                    struct sk_buff *skb, u8 event)
5869{
5870        int err = 0;
5871        u16 txseq = control->txseq;
5872        bool skb_in_use = 0;
5873
5874        BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
5875               event);
5876
5877        switch (event) {
5878        case L2CAP_EV_RECV_IFRAME:
5879                switch (l2cap_classify_txseq(chan, txseq)) {
5880                case L2CAP_TXSEQ_EXPECTED:
5881                        /* Keep frame for reassembly later */
5882                        l2cap_pass_to_tx(chan, control);
5883                        skb_queue_tail(&chan->srej_q, skb);
5884                        skb_in_use = 1;
5885                        BT_DBG("Queued %p (queue len %d)", skb,
5886                               skb_queue_len(&chan->srej_q));
5887
5888                        chan->expected_tx_seq = __next_seq(chan, txseq);
5889                        break;
5890                case L2CAP_TXSEQ_EXPECTED_SREJ:
5891                        l2cap_seq_list_pop(&chan->srej_list);
5892
5893                        l2cap_pass_to_tx(chan, control);
5894                        skb_queue_tail(&chan->srej_q, skb);
5895                        skb_in_use = 1;
5896                        BT_DBG("Queued %p (queue len %d)", skb,
5897                               skb_queue_len(&chan->srej_q));
5898
5899                        err = l2cap_rx_queued_iframes(chan);
5900                        if (err)
5901                                break;
5902
5903                        break;
5904                case L2CAP_TXSEQ_UNEXPECTED:
5905                        /* Got a frame that can't be reassembled yet.
5906                         * Save it for later, and send SREJs to cover
5907                         * the missing frames.
5908                         */
5909                        skb_queue_tail(&chan->srej_q, skb);
5910                        skb_in_use = 1;
5911                        BT_DBG("Queued %p (queue len %d)", skb,
5912                               skb_queue_len(&chan->srej_q));
5913
5914                        l2cap_pass_to_tx(chan, control);
5915                        l2cap_send_srej(chan, control->txseq);
5916                        break;
5917                case L2CAP_TXSEQ_UNEXPECTED_SREJ:
5918                        /* This frame was requested with an SREJ, but
5919                         * some expected retransmitted frames are
5920                         * missing.  Request retransmission of missing
5921                         * SREJ'd frames.
5922                         */
5923                        skb_queue_tail(&chan->srej_q, skb);
5924                        skb_in_use = 1;
5925                        BT_DBG("Queued %p (queue len %d)", skb,
5926                               skb_queue_len(&chan->srej_q));
5927
5928                        l2cap_pass_to_tx(chan, control);
5929                        l2cap_send_srej_list(chan, control->txseq);
5930                        break;
5931                case L2CAP_TXSEQ_DUPLICATE_SREJ:
5932                        /* We've already queued this frame.  Drop this copy. */
5933                        l2cap_pass_to_tx(chan, control);
5934                        break;
5935                case L2CAP_TXSEQ_DUPLICATE:
5936                        /* Expecting a later sequence number, so this frame
5937                         * was already received.  Ignore it completely.
5938                         */
5939                        break;
5940                case L2CAP_TXSEQ_INVALID_IGNORE:
5941                        break;
5942                case L2CAP_TXSEQ_INVALID:
5943                default:
5944                        l2cap_send_disconn_req(chan, ECONNRESET);
5945                        break;
5946                }
5947                break;
5948        case L2CAP_EV_RECV_RR:
5949                l2cap_pass_to_tx(chan, control);
5950                if (control->final) {
5951                        clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
5952
5953                        if (!test_and_clear_bit(CONN_REJ_ACT,
5954                                                &chan->conn_state)) {
5955                                control->final = 0;
5956                                l2cap_retransmit_all(chan, control);
5957                        }
5958
5959                        l2cap_ertm_send(chan);
5960                } else if (control->poll) {
5961                        if (test_and_clear_bit(CONN_REMOTE_BUSY,
5962                                               &chan->conn_state) &&
5963                            chan->unacked_frames) {
5964                                __set_retrans_timer(chan);
5965                        }
5966
5967                        set_bit(CONN_SEND_FBIT, &chan->conn_state);
5968                        l2cap_send_srej_tail(chan);
5969                } else {
5970                        if (test_and_clear_bit(CONN_REMOTE_BUSY,
5971                                               &chan->conn_state) &&
5972                            chan->unacked_frames)
5973                                __set_retrans_timer(chan);
5974
5975                        l2cap_send_ack(chan);
5976                }
5977                break;
5978        case L2CAP_EV_RECV_RNR:
5979                set_bit(CONN_REMOTE_BUSY, &chan->conn_state);
5980                l2cap_pass_to_tx(chan, control);
5981                if (control->poll) {
5982                        l2cap_send_srej_tail(chan);
5983                } else {
5984                        struct l2cap_ctrl rr_control;
5985                        memset(&rr_control, 0, sizeof(rr_control));
5986                        rr_control.sframe = 1;
5987                        rr_control.super = L2CAP_SUPER_RR;
5988                        rr_control.reqseq = chan->buffer_seq;
5989                        l2cap_send_sframe(chan, &rr_control);
5990                }
5991
5992                break;
5993        case L2CAP_EV_RECV_REJ:
5994                l2cap_handle_rej(chan, control);
5995                break;
5996        case L2CAP_EV_RECV_SREJ:
5997                l2cap_handle_srej(chan, control);
5998                break;
5999        }
6000
6001        if (skb && !skb_in_use) {
6002                BT_DBG("Freeing %p", skb);
6003                kfree_skb(skb);
6004        }
6005
6006        return err;
6007}
6008
6009static int l2cap_finish_move(struct l2cap_chan *chan)
6010{
6011        BT_DBG("chan %p", chan);
6012
6013        chan->rx_state = L2CAP_RX_STATE_RECV;
6014
6015        if (chan->hs_hcon)
6016                chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
6017        else
6018                chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
6019
6020        return l2cap_resegment(chan);
6021}
6022
6023static int l2cap_rx_state_wait_p(struct l2cap_chan *chan,
6024                                 struct l2cap_ctrl *control,
6025                                 struct sk_buff *skb, u8 event)
6026{
6027        int err;
6028
6029        BT_DBG("chan %p, control %p, skb %p, event %d", chan, control, skb,
6030               event);
6031
6032        if (!control->poll)
6033                return -EPROTO;
6034
6035        l2cap_process_reqseq(chan, control->reqseq);
6036
6037        if (!skb_queue_empty(&chan->tx_q))
6038                chan->tx_send_head = skb_peek(&chan->tx_q);
6039        else
6040                chan->tx_send_head = NULL;
6041
6042        /* Rewind next_tx_seq to the point expected
6043         * by the receiver.
6044         */
6045        chan->next_tx_seq = control->reqseq;
6046        chan->unacked_frames = 0;
6047
6048        err = l2cap_finish_move(chan);
6049        if (err)
6050                return err;
6051
6052        set_bit(CONN_SEND_FBIT, &chan->conn_state);
6053        l2cap_send_i_or_rr_or_rnr(chan);
6054
6055        if (event == L2CAP_EV_RECV_IFRAME)
6056                return -EPROTO;
6057
6058        return l2cap_rx_state_recv(chan, control, NULL, event);
6059}
6060
6061static int l2cap_rx_state_wait_f(struct l2cap_chan *chan,
6062                                 struct l2cap_ctrl *control,
6063                                 struct sk_buff *skb, u8 event)
6064{
6065        int err;
6066
6067        if (!control->final)
6068                return -EPROTO;
6069
6070        clear_bit(CONN_REMOTE_BUSY, &chan->conn_state);
6071
6072        chan->rx_state = L2CAP_RX_STATE_RECV;
6073        l2cap_process_reqseq(chan, control->reqseq);
6074
6075        if (!skb_queue_empty(&chan->tx_q))
6076                chan->tx_send_head = skb_peek(&chan->tx_q);
6077        else
6078                chan->tx_send_head = NULL;
6079
6080        /* Rewind next_tx_seq to the point expected
6081         * by the receiver.
6082         */
6083        chan->next_tx_seq = control->reqseq;
6084        chan->unacked_frames = 0;
6085
6086        if (chan->hs_hcon)
6087                chan->conn->mtu = chan->hs_hcon->hdev->block_mtu;
6088        else
6089                chan->conn->mtu = chan->conn->hcon->hdev->acl_mtu;
6090
6091        err = l2cap_resegment(chan);
6092
6093        if (!err)
6094                err = l2cap_rx_state_recv(chan, control, skb, event);
6095
6096        return err;
6097}
6098
6099static bool __valid_reqseq(struct l2cap_chan *chan, u16 reqseq)
6100{
6101        /* Make sure reqseq is for a packet that has been sent but not acked */
6102        u16 unacked;
6103
6104        unacked = __seq_offset(chan, chan->next_tx_seq, chan->expected_ack_seq);
6105        return __seq_offset(chan, chan->next_tx_seq, reqseq) <= unacked;
6106}
6107
6108static int l2cap_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
6109                    struct sk_buff *skb, u8 event)
6110{
6111        int err = 0;
6112
6113        BT_DBG("chan %p, control %p, skb %p, event %d, state %d", chan,
6114               control, skb, event, chan->rx_state);
6115
6116        if (__valid_reqseq(chan, control->reqseq)) {
6117                switch (chan->rx_state) {
6118                case L2CAP_RX_STATE_RECV:
6119                        err = l2cap_rx_state_recv(chan, control, skb, event);
6120                        break;
6121                case L2CAP_RX_STATE_SREJ_SENT:
6122                        err = l2cap_rx_state_srej_sent(chan, control, skb,
6123                                                       event);
6124                        break;
6125                case L2CAP_RX_STATE_WAIT_P:
6126                        err = l2cap_rx_state_wait_p(chan, control, skb, event);
6127                        break;
6128                case L2CAP_RX_STATE_WAIT_F:
6129                        err = l2cap_rx_state_wait_f(chan, control, skb, event);
6130                        break;
6131                default:
6132                        /* shut it down */
6133                        break;
6134                }
6135        } else {
6136                BT_DBG("Invalid reqseq %d (next_tx_seq %d, expected_ack_seq %d",
6137                       control->reqseq, chan->next_tx_seq,
6138                       chan->expected_ack_seq);
6139                l2cap_send_disconn_req(chan, ECONNRESET);
6140        }
6141
6142        return err;
6143}
6144
6145static int l2cap_stream_rx(struct l2cap_chan *chan, struct l2cap_ctrl *control,
6146                           struct sk_buff *skb)
6147{
6148        int err = 0;
6149
6150        BT_DBG("chan %p, control %p, skb %p, state %d", chan, control, skb,
6151               chan->rx_state);
6152
6153        if (l2cap_classify_txseq(chan, control->txseq) ==
6154            L2CAP_TXSEQ_EXPECTED) {
6155                l2cap_pass_to_tx(chan, control);
6156
6157                BT_DBG("buffer_seq %d->%d", chan->buffer_seq,
6158                       __next_seq(chan, chan->buffer_seq));
6159
6160                chan->buffer_seq = __next_seq(chan, chan->buffer_seq);
6161
6162                l2cap_reassemble_sdu(chan, skb, control);
6163        } else {
6164                if (chan->sdu) {
6165                        kfree_skb(chan->sdu);
6166                        chan->sdu = NULL;
6167                }
6168                chan->sdu_last_frag = NULL;
6169                chan->sdu_len = 0;
6170
6171                if (skb) {
6172                        BT_DBG("Freeing %p", skb);
6173                        kfree_skb(skb);
6174                }
6175        }
6176
6177        chan->last_acked_seq = control->txseq;
6178        chan->expected_tx_seq = __next_seq(chan, control->txseq);
6179
6180        return err;
6181}
6182
6183static int l2cap_data_rcv(struct l2cap_chan *chan, struct sk_buff *skb)
6184{
6185        struct l2cap_ctrl *control = &bt_cb(skb)->control;
6186        u16 len;
6187        u8 event;
6188
6189        __unpack_control(chan, skb);
6190
6191        len = skb->len;
6192
6193        /*
6194         * We can just drop the corrupted I-frame here.
6195         * Receiver will miss it and start proper recovery
6196         * procedures and ask for retransmission.
6197         */
6198        if (l2cap_check_fcs(chan, skb))
6199                goto drop;
6200
6201        if (!control->sframe && control->sar == L2CAP_SAR_START)
6202                len -= L2CAP_SDULEN_SIZE;
6203
6204        if (chan->fcs == L2CAP_FCS_CRC16)
6205                len -= L2CAP_FCS_SIZE;
6206
6207        if (len > chan->mps) {
6208                l2cap_send_disconn_req(chan, ECONNRESET);
6209                goto drop;
6210        }
6211
6212        if (!control->sframe) {
6213                int err;
6214
6215                BT_DBG("iframe sar %d, reqseq %d, final %d, txseq %d",
6216                       control->sar, control->reqseq, control->final,
6217                       control->txseq);
6218
6219                /* Validate F-bit - F=0 always valid, F=1 only
6220                 * valid in TX WAIT_F
6221                 */
6222                if (control->final && chan->tx_state != L2CAP_TX_STATE_WAIT_F)
6223                        goto drop;
6224
6225                if (chan->mode != L2CAP_MODE_STREAMING) {
6226                        event = L2CAP_EV_RECV_IFRAME;
6227                        err = l2cap_rx(chan, control, skb, event);
6228                } else {
6229                        err = l2cap_stream_rx(chan, control, skb);
6230                }
6231
6232                if (err)
6233                        l2cap_send_disconn_req(chan, ECONNRESET);
6234        } else {
6235                const u8 rx_func_to_event[4] = {
6236                        L2CAP_EV_RECV_RR, L2CAP_EV_RECV_REJ,
6237                        L2CAP_EV_RECV_RNR, L2CAP_EV_RECV_SREJ
6238                };
6239
6240                /* Only I-frames are expected in streaming mode */
6241                if (chan->mode == L2CAP_MODE_STREAMING)
6242                        goto drop;
6243
6244                BT_DBG("sframe reqseq %d, final %d, poll %d, super %d",
6245                       control->reqseq, control->final, control->poll,
6246                       control->super);
6247
6248                if (len != 0) {
6249                        BT_ERR("Trailing bytes: %d in sframe", len);
6250                        l2cap_send_disconn_req(chan, ECONNRESET);
6251                        goto drop;
6252                }
6253
6254                /* Validate F and P bits */
6255                if (control->final && (control->poll ||
6256                                       chan->tx_state != L2CAP_TX_STATE_WAIT_F))
6257                        goto drop;
6258
6259                event = rx_func_to_event[control->super];
6260                if (l2cap_rx(chan, control, skb, event))
6261                        l2cap_send_disconn_req(chan, ECONNRESET);
6262        }
6263
6264        return 0;
6265
6266drop:
6267        kfree_skb(skb);
6268        return 0;
6269}
6270
6271static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
6272                               struct sk_buff *skb)
6273{
6274        struct l2cap_chan *chan;
6275
6276        chan = l2cap_get_chan_by_scid(conn, cid);
6277        if (!chan) {
6278                if (cid == L2CAP_CID_A2MP) {
6279                        chan = a2mp_channel_create(conn, skb);
6280                        if (!chan) {
6281                                kfree_skb(skb);
6282                                return;
6283                        }
6284
6285                        l2cap_chan_lock(chan);
6286                } else {
6287                        BT_DBG("unknown cid 0x%4.4x", cid);
6288                        /* Drop packet and return */
6289                        kfree_skb(skb);
6290                        return;
6291                }
6292        }
6293
6294        BT_DBG("chan %p, len %d", chan, skb->len);
6295
6296        if (chan->state != BT_CONNECTED)
6297                goto drop;
6298
6299        switch (chan->mode) {
6300        case L2CAP_MODE_BASIC:
6301                /* If socket recv buffers overflows we drop data here
6302                 * which is *bad* because L2CAP has to be reliable.
6303                 * But we don't have any other choice. L2CAP doesn't
6304                 * provide flow control mechanism. */
6305
6306                if (chan->imtu < skb->len)
6307                        goto drop;
6308
6309                if (!chan->ops->recv(chan, skb))
6310                        goto done;
6311                break;
6312
6313        case L2CAP_MODE_ERTM:
6314        case L2CAP_MODE_STREAMING:
6315                l2cap_data_rcv(chan, skb);
6316                goto done;
6317
6318        default:
6319                BT_DBG("chan %p: bad mode 0x%2.2x", chan, chan->mode);
6320                break;
6321        }
6322
6323drop:
6324        kfree_skb(skb);
6325
6326done:
6327        l2cap_chan_unlock(chan);
6328}
6329
6330static void l2cap_conless_channel(struct l2cap_conn *conn, __le16 psm,
6331                                  struct sk_buff *skb)
6332{
6333        struct l2cap_chan *chan;
6334
6335        chan = l2cap_global_chan_by_psm(0, psm, conn->src, conn->dst);
6336        if (!chan)
6337                goto drop;
6338
6339        BT_DBG("chan %p, len %d", chan, skb->len);
6340
6341        if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
6342                goto drop;
6343
6344        if (chan->imtu < skb->len)
6345                goto drop;
6346
6347        if (!chan->ops->recv(chan, skb))
6348                return;
6349
6350drop:
6351        kfree_skb(skb);
6352}
6353
6354static void l2cap_att_channel(struct l2cap_conn *conn,
6355                              struct sk_buff *skb)
6356{
6357        struct l2cap_chan *chan;
6358
6359        chan = l2cap_global_chan_by_scid(0, L2CAP_CID_LE_DATA,
6360                                         conn->src, conn->dst);
6361        if (!chan)
6362                goto drop;
6363
6364        BT_DBG("chan %p, len %d", chan, skb->len);
6365
6366        if (chan->state != BT_BOUND && chan->state != BT_CONNECTED)
6367                goto drop;
6368
6369        if (chan->imtu < skb->len)
6370                goto drop;
6371
6372        if (!chan->ops->recv(chan, skb))
6373                return;
6374
6375drop:
6376        kfree_skb(skb);
6377}
6378
6379static void l2cap_recv_frame(struct l2cap_conn *conn, struct sk_buff *skb)
6380{
6381        struct l2cap_hdr *lh = (void *) skb->data;
6382        u16 cid, len;
6383        __le16 psm;
6384
6385        skb_pull(skb, L2CAP_HDR_SIZE);
6386        cid = __le16_to_cpu(lh->cid);
6387        len = __le16_to_cpu(lh->len);
6388
6389        if (len != skb->len) {
6390                kfree_skb(skb);
6391                return;
6392        }
6393
6394        BT_DBG("len %d, cid 0x%4.4x", len, cid);
6395
6396        switch (cid) {
6397        case L2CAP_CID_LE_SIGNALING:
6398        case L2CAP_CID_SIGNALING:
6399                l2cap_sig_channel(conn, skb);
6400                break;
6401
6402        case L2CAP_CID_CONN_LESS:
6403                psm = get_unaligned((__le16 *) skb->data);
6404                skb_pull(skb, L2CAP_PSMLEN_SIZE);
6405                l2cap_conless_channel(conn, psm, skb);
6406                break;
6407
6408        case L2CAP_CID_LE_DATA:
6409                l2cap_att_channel(conn, skb);
6410                break;
6411
6412        case L2CAP_CID_SMP:
6413                if (smp_sig_channel(conn, skb))
6414                        l2cap_conn_del(conn->hcon, EACCES);
6415                break;
6416
6417        default:
6418                l2cap_data_channel(conn, cid, skb);
6419                break;
6420        }
6421}
6422
6423/* ---- L2CAP interface with lower layer (HCI) ---- */
6424
6425int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr)
6426{
6427        int exact = 0, lm1 = 0, lm2 = 0;
6428        struct l2cap_chan *c;
6429
6430        BT_DBG("hdev %s, bdaddr %pMR", hdev->name, bdaddr);
6431
6432        /* Find listening sockets and check their link_mode */
6433        read_lock(&chan_list_lock);
6434        list_for_each_entry(c, &chan_list, global_l) {
6435                struct sock *sk = c->sk;
6436
6437                if (c->state != BT_LISTEN)
6438                        continue;
6439
6440                if (!bacmp(&bt_sk(sk)->src, &hdev->bdaddr)) {
6441                        lm1 |= HCI_LM_ACCEPT;
6442                        if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
6443                                lm1 |= HCI_LM_MASTER;
6444                        exact++;
6445                } else if (!bacmp(&bt_sk(sk)->src, BDADDR_ANY)) {
6446                        lm2 |= HCI_LM_ACCEPT;
6447                        if (test_bit(FLAG_ROLE_SWITCH, &c->flags))
6448                                lm2 |= HCI_LM_MASTER;
6449                }
6450        }
6451        read_unlock(&chan_list_lock);
6452
6453        return exact ? lm1 : lm2;
6454}
6455
6456void l2cap_connect_cfm(struct hci_conn *hcon, u8 status)
6457{
6458        struct l2cap_conn *conn;
6459
6460        BT_DBG("hcon %p bdaddr %pMR status %d", hcon, &hcon->dst, status);
6461
6462        if (!status) {
6463                conn = l2cap_conn_add(hcon);
6464                if (conn)
6465                        l2cap_conn_ready(conn);
6466        } else {
6467                l2cap_conn_del(hcon, bt_to_errno(status));
6468        }
6469}
6470
6471int l2cap_disconn_ind(struct hci_conn *hcon)
6472{
6473        struct l2cap_conn *conn = hcon->l2cap_data;
6474
6475        BT_DBG("hcon %p", hcon);
6476
6477        if (!conn)
6478                return HCI_ERROR_REMOTE_USER_TERM;
6479        return conn->disc_reason;
6480}
6481
6482void l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason)
6483{
6484        BT_DBG("hcon %p reason %d", hcon, reason);
6485
6486        l2cap_conn_del(hcon, bt_to_errno(reason));
6487}
6488
6489static inline void l2cap_check_encryption(struct l2cap_chan *chan, u8 encrypt)
6490{
6491        if (chan->chan_type != L2CAP_CHAN_CONN_ORIENTED)
6492                return;
6493
6494        if (encrypt == 0x00) {
6495                if (chan->sec_level == BT_SECURITY_MEDIUM) {
6496                        __set_chan_timer(chan, L2CAP_ENC_TIMEOUT);
6497                } else if (chan->sec_level == BT_SECURITY_HIGH)
6498                        l2cap_chan_close(chan, ECONNREFUSED);
6499        } else {
6500                if (chan->sec_level == BT_SECURITY_MEDIUM)
6501                        __clear_chan_timer(chan);
6502        }
6503}
6504
6505int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt)
6506{
6507        struct l2cap_conn *conn = hcon->l2cap_data;
6508        struct l2cap_chan *chan;
6509
6510        if (!conn)
6511                return 0;
6512
6513        BT_DBG("conn %p status 0x%2.2x encrypt %u", conn, status, encrypt);
6514
6515        if (hcon->type == LE_LINK) {
6516                if (!status && encrypt)
6517                        smp_distribute_keys(conn, 0);
6518                cancel_delayed_work(&conn->security_timer);
6519        }
6520
6521        mutex_lock(&conn->chan_lock);
6522
6523        list_for_each_entry(chan, &conn->chan_l, list) {
6524                l2cap_chan_lock(chan);
6525
6526                BT_DBG("chan %p scid 0x%4.4x state %s", chan, chan->scid,
6527                       state_to_string(chan->state));
6528
6529                if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) {
6530                        l2cap_chan_unlock(chan);
6531                        continue;
6532                }
6533
6534                if (chan->scid == L2CAP_CID_LE_DATA) {
6535                        if (!status && encrypt) {
6536                                chan->sec_level = hcon->sec_level;
6537                                l2cap_chan_ready(chan);
6538                        }
6539
6540                        l2cap_chan_unlock(chan);
6541                        continue;
6542                }
6543
6544                if (!__l2cap_no_conn_pending(chan)) {
6545                        l2cap_chan_unlock(chan);
6546                        continue;
6547                }
6548
6549                if (!status && (chan->state == BT_CONNECTED ||
6550                                chan->state == BT_CONFIG)) {
6551                        struct sock *sk = chan->sk;
6552
6553                        clear_bit(BT_SK_SUSPEND, &bt_sk(sk)->flags);
6554                        sk->sk_state_change(sk);
6555
6556                        l2cap_check_encryption(chan, encrypt);
6557                        l2cap_chan_unlock(chan);
6558                        continue;
6559                }
6560
6561                if (chan->state == BT_CONNECT) {
6562                        if (!status) {
6563                                l2cap_start_connection(chan);
6564                        } else {
6565                                __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
6566                        }
6567                } else if (chan->state == BT_CONNECT2) {
6568                        struct sock *sk = chan->sk;
6569                        struct l2cap_conn_rsp rsp;
6570                        __u16 res, stat;
6571
6572                        lock_sock(sk);
6573
6574                        if (!status) {
6575                                if (test_bit(BT_SK_DEFER_SETUP,
6576                                             &bt_sk(sk)->flags)) {
6577                                        res = L2CAP_CR_PEND;
6578                                        stat = L2CAP_CS_AUTHOR_PEND;
6579                                        chan->ops->defer(chan);
6580                                } else {
6581                                        __l2cap_state_change(chan, BT_CONFIG);
6582                                        res = L2CAP_CR_SUCCESS;
6583                                        stat = L2CAP_CS_NO_INFO;
6584                                }
6585                        } else {
6586                                __l2cap_state_change(chan, BT_DISCONN);
6587                                __set_chan_timer(chan, L2CAP_DISC_TIMEOUT);
6588                                res = L2CAP_CR_SEC_BLOCK;
6589                                stat = L2CAP_CS_NO_INFO;
6590                        }
6591
6592                        release_sock(sk);
6593
6594                        rsp.scid   = cpu_to_le16(chan->dcid);
6595                        rsp.dcid   = cpu_to_le16(chan->scid);
6596                        rsp.result = cpu_to_le16(res);
6597                        rsp.status = cpu_to_le16(stat);
6598                        l2cap_send_cmd(conn, chan->ident, L2CAP_CONN_RSP,
6599                                       sizeof(rsp), &rsp);
6600
6601                        if (!test_bit(CONF_REQ_SENT, &chan->conf_state) &&
6602                            res == L2CAP_CR_SUCCESS) {
6603                                char buf[128];
6604                                set_bit(CONF_REQ_SENT, &chan->conf_state);
6605                                l2cap_send_cmd(conn, l2cap_get_ident(conn),
6606                                               L2CAP_CONF_REQ,
6607                                               l2cap_build_conf_req(chan, buf),
6608                                               buf);
6609                                chan->num_conf_req++;
6610                        }
6611                }
6612
6613                l2cap_chan_unlock(chan);
6614        }
6615
6616        mutex_unlock(&conn->chan_lock);
6617
6618        return 0;
6619}
6620
6621int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
6622{
6623        struct l2cap_conn *conn = hcon->l2cap_data;
6624        struct l2cap_hdr *hdr;
6625        int len;
6626
6627        /* For AMP controller do not create l2cap conn */
6628        if (!conn && hcon->hdev->dev_type != HCI_BREDR)
6629                goto drop;
6630
6631        if (!conn)
6632                conn = l2cap_conn_add(hcon);
6633
6634        if (!conn)
6635                goto drop;
6636
6637        BT_DBG("conn %p len %d flags 0x%x", conn, skb->len, flags);
6638
6639        switch (flags) {
6640        case ACL_START:
6641        case ACL_START_NO_FLUSH:
6642        case ACL_COMPLETE:
6643                if (conn->rx_len) {
6644                        BT_ERR("Unexpected start frame (len %d)", skb->len);
6645                        kfree_skb(conn->rx_skb);
6646                        conn->rx_skb = NULL;
6647                        conn->rx_len = 0;
6648                        l2cap_conn_unreliable(conn, ECOMM);
6649                }
6650
6651                /* Start fragment always begin with Basic L2CAP header */
6652                if (skb->len < L2CAP_HDR_SIZE) {
6653                        BT_ERR("Frame is too short (len %d)", skb->len);
6654                        l2cap_conn_unreliable(conn, ECOMM);
6655                        goto drop;
6656                }
6657
6658                hdr = (struct l2cap_hdr *) skb->data;
6659                len = __le16_to_cpu(hdr->len) + L2CAP_HDR_SIZE;
6660
6661                if (len == skb->len) {
6662                        /* Complete frame received */
6663                        l2cap_recv_frame(conn, skb);
6664                        return 0;
6665                }
6666
6667                BT_DBG("Start: total len %d, frag len %d", len, skb->len);
6668
6669                if (skb->len > len) {
6670                        BT_ERR("Frame is too long (len %d, expected len %d)",
6671                               skb->len, len);
6672                        l2cap_conn_unreliable(conn, ECOMM);
6673                        goto drop;
6674                }
6675
6676                /* Allocate skb for the complete frame (with header) */
6677                conn->rx_skb = bt_skb_alloc(len, GFP_KERNEL);
6678                if (!conn->rx_skb)
6679                        goto drop;
6680
6681                skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
6682                                          skb->len);
6683                conn->rx_len = len - skb->len;
6684                break;
6685
6686        case ACL_CONT:
6687                BT_DBG("Cont: frag len %d (expecting %d)", skb->len, conn->rx_len);
6688
6689                if (!conn->rx_len) {
6690                        BT_ERR("Unexpected continuation frame (len %d)", skb->len);
6691                        l2cap_conn_unreliable(conn, ECOMM);
6692                        goto drop;
6693                }
6694
6695                if (skb->len > conn->rx_len) {
6696                        BT_ERR("Fragment is too long (len %d, expected %d)",
6697                               skb->len, conn->rx_len);
6698                        kfree_skb(conn->rx_skb);
6699                        conn->rx_skb = NULL;
6700                        conn->rx_len = 0;
6701                        l2cap_conn_unreliable(conn, ECOMM);
6702                        goto drop;
6703                }
6704
6705                skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
6706                                          skb->len);
6707                conn->rx_len -= skb->len;
6708
6709                if (!conn->rx_len) {
6710                        /* Complete frame received */
6711                        l2cap_recv_frame(conn, conn->rx_skb);
6712                        conn->rx_skb = NULL;
6713                }
6714                break;
6715        }
6716
6717drop:
6718        kfree_skb(skb);
6719        return 0;
6720}
6721
6722static int l2cap_debugfs_show(struct seq_file *f, void *p)
6723{
6724        struct l2cap_chan *c;
6725
6726        read_lock(&chan_list_lock);
6727
6728        list_for_each_entry(c, &chan_list, global_l) {
6729                struct sock *sk = c->sk;
6730
6731                seq_printf(f, "%pMR %pMR %d %d 0x%4.4x 0x%4.4x %d %d %d %d\n",
6732                           &bt_sk(sk)->src, &bt_sk(sk)->dst,
6733                           c->state, __le16_to_cpu(c->psm),
6734                           c->scid, c->dcid, c->imtu, c->omtu,
6735                           c->sec_level, c->mode);
6736        }
6737
6738        read_unlock(&chan_list_lock);
6739
6740        return 0;
6741}
6742
6743static int l2cap_debugfs_open(struct inode *inode, struct file *file)
6744{
6745        return single_open(file, l2cap_debugfs_show, inode->i_private);
6746}
6747
6748static const struct file_operations l2cap_debugfs_fops = {
6749        .open           = l2cap_debugfs_open,
6750        .read           = seq_read,
6751        .llseek         = seq_lseek,
6752        .release        = single_release,
6753};
6754
6755static struct dentry *l2cap_debugfs;
6756
6757int __init l2cap_init(void)
6758{
6759        int err;
6760
6761        err = l2cap_init_sockets();
6762        if (err < 0)
6763                return err;
6764
6765        if (bt_debugfs) {
6766                l2cap_debugfs = debugfs_create_file("l2cap", 0444, bt_debugfs,
6767                                                    NULL, &l2cap_debugfs_fops);
6768                if (!l2cap_debugfs)
6769                        BT_ERR("Failed to create L2CAP debug file");
6770        }
6771
6772        return 0;
6773}
6774
6775void l2cap_exit(void)
6776{
6777        debugfs_remove(l2cap_debugfs);
6778        l2cap_cleanup_sockets();
6779}
6780
6781module_param(disable_ertm, bool, 0644);
6782MODULE_PARM_DESC(disable_ertm, "Disable enhanced retransmission mode");
6783