From 3760744a66da605f3cd99acc35b85cf5cf22d8f9 Mon Sep 17 00:00:00 2001 From: Luiz Augusto von Dentz Date: Tue, 18 Feb 2020 16:32:22 -0800 Subject: [PATCH] avdtp: Enable MTU auto tunning This uses BT_PHY to check if kernel is able to do MTU auto tunning which is enabled by forcing the input MTU to 0. Signed-off-by: Anuj Jain Signed-off-by: Ayush Garg --- profiles/audio/avdtp.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c index 8fc54ba..bf002ba 100644 --- a/profiles/audio/avdtp.c +++ b/profiles/audio/avdtp.c @@ -430,6 +430,7 @@ struct avdtp { struct avdtp_stream *pending_open; + uint32_t phy; uint16_t imtu; uint16_t omtu; @@ -2763,6 +2764,9 @@ static void avdtp_connect_cb(GIOChannel *chan, GError *err, gpointer user_data) if (!session->io) session->io = g_io_channel_ref(chan); + /* Check if kernel supports reading packet types */ + bt_io_get(chan, NULL, BT_IO_OPT_PHY, &session->phy, BT_IO_OPT_INVALID); + bt_io_get(chan, &err, BT_IO_OPT_OMTU, &session->omtu, BT_IO_OPT_IMTU, &session->imtu, @@ -2894,7 +2898,8 @@ static GIOChannel *l2cap_connect(struct avdtp *session) BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM, BT_IO_OPT_IMTU, 895, BT_IO_OPT_INVALID); - } else { + } + else { io = bt_io_connect(avdtp_connect_cb, session, NULL, &err, BT_IO_OPT_SOURCE_BDADDR, src, @@ -2905,14 +2910,26 @@ static GIOChannel *l2cap_connect(struct avdtp *session) BT_IO_OPT_INVALID); } #else - io = bt_io_connect(avdtp_connect_cb, session, - NULL, &err, - BT_IO_OPT_SOURCE_BDADDR, src, - BT_IO_OPT_DEST_BDADDR, - device_get_address(session->device), - BT_IO_OPT_PSM, AVDTP_PSM, - BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM, - BT_IO_OPT_INVALID); + if (session->phy) + io = bt_io_connect(avdtp_connect_cb, session, + NULL, &err, + BT_IO_OPT_SOURCE_BDADDR, src, + BT_IO_OPT_DEST_BDADDR, + device_get_address(session->device), + BT_IO_OPT_PSM, AVDTP_PSM, + BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM, + /* Set Input MTU to 0 to auto-tune */ + BT_IO_OPT_IMTU, 0, + BT_IO_OPT_INVALID); + else + io = bt_io_connect(avdtp_connect_cb, session, + NULL, &err, + BT_IO_OPT_SOURCE_BDADDR, src, + BT_IO_OPT_DEST_BDADDR, + device_get_address(session->device), + BT_IO_OPT_PSM, AVDTP_PSM, + BT_IO_OPT_SEC_LEVEL, BT_IO_SEC_MEDIUM, + BT_IO_OPT_INVALID); #endif if (!io) { -- 2.7.4