Bluetooth: Fix IPSP connection callback event issue. 43/261643/1
authorh.sandeep <h.sandeep@samsung.com>
Fri, 16 Sep 2016 09:15:24 +0000 (14:45 +0530)
committerWootak Jung <wootak.jung@samsung.com>
Wed, 21 Jul 2021 05:07:35 +0000 (14:07 +0900)
This patch fixes the IPSP connection callback event issue
between kernel and bluez layer.

Change-Id: Ia4d625aa8a6dbc9da89a7d9f12308af9c90d0594
Signed-off-by: h.sandeep <h.sandeep@samsung.com>
Signed-off-by: Sudha Bheemanna <b.sudha@samsung.com>
Signed-off-by: Amit Purwar <amit.purwar@samsung.com>
net/bluetooth/l2cap_core.c

index b96818c..c7ce0d5 100644 (file)
@@ -1262,8 +1262,23 @@ static void l2cap_chan_ready(struct l2cap_chan *chan)
         * case of receiving data before the L2CAP info req/rsp
         * procedure is complete.
         */
+#ifndef TIZEN_BT
        if (chan->state == BT_CONNECTED)
                return;
+#else
+       if (chan->state == BT_CONNECTED) {
+               if (chan->psm == L2CAP_PSM_IPSP) {
+                       struct l2cap_conn *conn = chan->conn;
+
+                       if (conn->hcon->out)
+                               return;
+                       else if (conn->hcon->type != LE_LINK)
+                               return;
+               } else {
+                       return;
+               }
+       }
+#endif
 
        /* This clears all conf flags, including CONF_NOT_COMPLETE */
        chan->conf_state = 0;
@@ -6894,8 +6909,23 @@ static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
         * procdure is done simply assume that the channel is supported
         * and mark it as ready.
         */
+#ifndef TIZEN_BT
        if (chan->chan_type == L2CAP_CHAN_FIXED)
                l2cap_chan_ready(chan);
+#else
+       if (chan->chan_type == L2CAP_CHAN_FIXED) {
+               if (chan->psm == L2CAP_PSM_IPSP) {
+                       struct l2cap_conn *conn = chan->conn;
+
+                       if (conn->hcon->out)
+                               l2cap_chan_ready(chan);
+                       else if (conn->hcon->type != LE_LINK)
+                               l2cap_chan_ready(chan);
+               } else {
+                       l2cap_chan_ready(chan);
+               }
+       }
+#endif
 
        if (chan->state != BT_CONNECTED)
                goto drop;