Bluetooth: Fix IPSP connection callback event issue.
authorh.sandeep <h.sandeep@samsung.com>
Fri, 16 Sep 2016 09:15:24 +0000 (14:45 +0530)
committerHoegeun Kwon <hoegeun.kwon@samsung.com>
Thu, 3 Aug 2023 08:43:18 +0000 (17:43 +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 e15fcf7..109f808 100644 (file)
@@ -1365,8 +1365,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;
@@ -7658,8 +7673,23 @@ static void l2cap_data_channel(struct l2cap_conn *conn, u16 cid,
         * procedure 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;