Bluetooth: Save remote L2CAP fixed channel mask
authorAndrei Emeltchenko <andrei.emeltchenko@intel.com>
Wed, 29 Feb 2012 08:41:41 +0000 (10:41 +0200)
committerJohan Hedberg <johan.hedberg@intel.com>
Wed, 29 Feb 2012 14:20:19 +0000 (16:20 +0200)
Fixed channel mask needs to be stored to decide whether to
use A2MP for example. So far save only one relevant byte which
keeps all information we need.

Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>

include/net/bluetooth/l2cap.h
net/bluetooth/l2cap_core.c

index d6d8ec8..3732a48 100644 (file)
@@ -522,6 +522,7 @@ struct l2cap_conn {
        unsigned int    mtu;
 
        __u32           feat_mask;
+       __u8            fixed_chan_mask;
 
        __u8            info_state;
        __u8            info_ident;
index df3be69..bc8d558 100644 (file)
@@ -3209,7 +3209,8 @@ static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cm
                return 0;
        }
 
-       if (type == L2CAP_IT_FEAT_MASK) {
+       switch (type) {
+       case L2CAP_IT_FEAT_MASK:
                conn->feat_mask = get_unaligned_le32(rsp->data);
 
                if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) {
@@ -3226,11 +3227,15 @@ static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cm
 
                        l2cap_conn_start(conn);
                }
-       } else if (type == L2CAP_IT_FIXED_CHAN) {
+               break;
+
+       case L2CAP_IT_FIXED_CHAN:
+               conn->fixed_chan_mask = rsp->data[0];
                conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
                conn->info_ident = 0;
 
                l2cap_conn_start(conn);
+               break;
        }
 
        return 0;