aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrei Emeltchenko <andrei.emeltchenko@intel.com>2012-02-29 03:41:41 -0500
committerJohan Hedberg <johan.hedberg@intel.com>2012-02-29 09:20:19 -0500
commit978c93b90fc4768e295b20492b5db76d5e026e5e (patch)
tree075eefb9e3e711fed4f31849ef1948f6647578e7
parent89bb46d02046b59c1de3d2e92680f3a1062750d0 (diff)
Bluetooth: Save remote L2CAP fixed channel mask
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>
-rw-r--r--include/net/bluetooth/l2cap.h1
-rw-r--r--net/bluetooth/l2cap_core.c9
2 files changed, 8 insertions, 2 deletions
diff --git a/include/net/bluetooth/l2cap.h b/include/net/bluetooth/l2cap.h
index d6d8ec8eb8cf..3732a4849f2e 100644
--- a/include/net/bluetooth/l2cap.h
+++ b/include/net/bluetooth/l2cap.h
@@ -522,6 +522,7 @@ struct l2cap_conn {
522 unsigned int mtu; 522 unsigned int mtu;
523 523
524 __u32 feat_mask; 524 __u32 feat_mask;
525 __u8 fixed_chan_mask;
525 526
526 __u8 info_state; 527 __u8 info_state;
527 __u8 info_ident; 528 __u8 info_ident;
diff --git a/net/bluetooth/l2cap_core.c b/net/bluetooth/l2cap_core.c
index df3be692f2cf..bc8d558b01f6 100644
--- a/net/bluetooth/l2cap_core.c
+++ b/net/bluetooth/l2cap_core.c
@@ -3209,7 +3209,8 @@ static inline int l2cap_information_rsp(struct l2cap_conn *conn, struct l2cap_cm
3209 return 0; 3209 return 0;
3210 } 3210 }
3211 3211
3212 if (type == L2CAP_IT_FEAT_MASK) { 3212 switch (type) {
3213 case L2CAP_IT_FEAT_MASK:
3213 conn->feat_mask = get_unaligned_le32(rsp->data); 3214 conn->feat_mask = get_unaligned_le32(rsp->data);
3214 3215
3215 if (conn->feat_mask & L2CAP_FEAT_FIXED_CHAN) { 3216 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
3226 3227
3227 l2cap_conn_start(conn); 3228 l2cap_conn_start(conn);
3228 } 3229 }
3229 } else if (type == L2CAP_IT_FIXED_CHAN) { 3230 break;
3231
3232 case L2CAP_IT_FIXED_CHAN:
3233 conn->fixed_chan_mask = rsp->data[0];
3230 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE; 3234 conn->info_state |= L2CAP_INFO_FEAT_MASK_REQ_DONE;
3231 conn->info_ident = 0; 3235 conn->info_ident = 0;
3232 3236
3233 l2cap_conn_start(conn); 3237 l2cap_conn_start(conn);
3238 break;
3234 } 3239 }
3235 3240
3236 return 0; 3241 return 0;