|
@@ -465,6 +465,13 @@ static void __l2cap_chan_add(struct l2cap_conn *conn, struct l2cap_chan *chan)
|
|
|
chan->omtu = L2CAP_DEFAULT_MTU;
|
|
|
break;
|
|
|
|
|
|
+ case L2CAP_CHAN_CONN_FIX_A2MP:
|
|
|
+ chan->scid = L2CAP_CID_A2MP;
|
|
|
+ chan->dcid = L2CAP_CID_A2MP;
|
|
|
+ chan->omtu = L2CAP_A2MP_DEFAULT_MTU;
|
|
|
+ chan->imtu = L2CAP_A2MP_DEFAULT_MTU;
|
|
|
+ break;
|
|
|
+
|
|
|
default:
|
|
|
/* Raw socket can send/recv signalling messages only */
|
|
|
chan->scid = L2CAP_CID_SIGNALING;
|
|
@@ -1001,6 +1008,11 @@ static void l2cap_send_disconn_req(struct l2cap_conn *conn, struct l2cap_chan *c
|
|
|
__clear_ack_timer(chan);
|
|
|
}
|
|
|
|
|
|
+ if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) {
|
|
|
+ __l2cap_state_change(chan, BT_DISCONN);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
req.dcid = cpu_to_le16(chan->dcid);
|
|
|
req.scid = cpu_to_le16(chan->scid);
|
|
|
l2cap_send_cmd(conn, l2cap_get_ident(conn),
|
|
@@ -1195,6 +1207,11 @@ static void l2cap_conn_ready(struct l2cap_conn *conn)
|
|
|
|
|
|
l2cap_chan_lock(chan);
|
|
|
|
|
|
+ if (chan->chan_type == L2CAP_CHAN_CONN_FIX_A2MP) {
|
|
|
+ l2cap_chan_unlock(chan);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+
|
|
|
if (conn->hcon->type == LE_LINK) {
|
|
|
if (smp_conn_security(conn, chan->sec_level))
|
|
|
l2cap_chan_ready(chan);
|