From patchwork Fri Oct 25 12:21:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iulia Tanasescu X-Patchwork-Id: 838489 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2066.outbound.protection.outlook.com [40.107.249.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B5C0C1F9431 for ; Fri, 25 Oct 2024 12:22:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.249.66 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858943; cv=fail; b=JyB+54YrbSsxbt8yIi8AJF96V48u3riQEjHFh/gMhmbydIrGIm/xjDWMA66gnLfGld3rAzfM+gkkPyjlW3XrfbaRRrKAEgyC/iwk8QWkm1E6oitcWsEQcf7V7MN36cqNZDQXNLlU6a0eRb6nXYvg3ytKhbMO0F0WFessm4qq+c8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858943; c=relaxed/simple; bh=/BaD/pzck8gvP6AUj7B8YKk0UwFhtsbFoSc9f1xKwYU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=d+t619r3tSU3F148nUJyZBf4H7t+0hDcmi8fETHSgr8LtbbD8W88ORCgoeFPNXpiJZQXJl6/1w9Mv2+gKIJ82N0CI72yBeOZhigv3NzoNNrWm1ChHo2fT3y1a953EWTdbAeZBqqNikFBtQIvGXdX2WZrS/7JPpq3wgY7itEX/Mc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=JfGKFCI9; arc=fail smtp.client-ip=40.107.249.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="JfGKFCI9" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QuTqdGpH/dslXqQYDMNF+OKpWCunB7BcjXrchDUVHI5jZDXYgogFExNhLI/E46/A4V+zV8G2b9SybcewwPWOz1iCLvhF8kc0iv/cTBVw/tRheZXJsTf9OBtGZUzeN1gCf64LkqLg6BM8awOzz9xZ2zqypKbZqnuwmS1nwFoDc3OrTIjBo4CK5s3cd4hR4zseQrGQ10nYs9Gp3PxkyWREwsV23U8s5IMVo1vV3rlUsmBV6/H/385tkA50GiTuEDZcY4KrFzwb/Lh0aHDb7N0tTGuEqFOJRG2q/xom5v7cmoqpr0mL9SQn7IWBvaFSERnqzeBz6DZn41y2iKusH0I70g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=z4k9xz6Rwc5YMyixdAo9GXLJS0IsnuU69i6YAToid7U=; b=BZ5/0s1E3vB3uTn4y2WqgTwSoweshte1u6Ozkf27bFfb2LcbHf6KUjWaLRo7JXOOcAndBeyvanpp1GjM8LA97DdVYGQSs/9Gqmaj3rV6DzihS7UbiCwf1AMb1rIUrzSOJE6qFmifrdnixBi/9XN13BlPN15o5nl5mBrN2osHJvWFlN3sf00S8wnHmMzNBLdYxm2bkhwbV/Z2sgZ2RE3+Trrjzy2hU7vpJ4iRYu/pG7LxP+3xekyJNSgwBZHPonkTkGZaj698C1AY0ah7uaZne41BsyLAtTgVbjohxsxcN+4IhkvqIl0B+fVT8lChhSjo2zVmVuvbB6Sgwu2w+hZbBw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=z4k9xz6Rwc5YMyixdAo9GXLJS0IsnuU69i6YAToid7U=; b=JfGKFCI9f4rfxPXXwUmp75KUC5uxQwSGh2i8lUfHB/G4MyxlFGFXOaNa0unzxncGFf80ZPV4nIOJpy/D5ZVMFbFpG/1Wr9i/Iqi0oV75W7Kqnj2GSnJuNZzZchBSP8IpCejREfepdkpvLzoio6y93wVQA3So8McDb+S2cG7eIQj7g7LOEvfj1AmIEvQ6FdC3muvAAkm0aWW3/kSYxirA23VpUovWUvOR7Wpz7VFWs8bCuM86zZ0liExGYYjbOEuqrxQP6s49yJH/NWUoNN/8iaVZ0sKISC7lYPMy8iLs7SEdkLyMMvZAOACPJZmp2pOAg6aTixybE/BLMIVBt/m8Dg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) by VI2PR04MB11052.eurprd04.prod.outlook.com (2603:10a6:800:272::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.17; Fri, 25 Oct 2024 12:22:16 +0000 Received: from AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654]) by AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654%4]) with mapi id 15.20.8093.014; Fri, 25 Oct 2024 12:22:15 +0000 From: Iulia Tanasescu To: linux-bluetooth@vger.kernel.org Cc: claudia.rosu@nxp.com, mihai-octavian.urzica@nxp.com, andrei.istodorescu@nxp.com, luiz.dentz@gmail.com, Iulia Tanasescu Subject: [PATCH BlueZ v2 02/14] shared/bap: Add support for handling broadcast links Date: Fri, 25 Oct 2024 15:21:34 +0300 Message-ID: <20241025122146.17925-3-iulia.tanasescu@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241025122146.17925-1-iulia.tanasescu@nxp.com> References: <20241025122146.17925-1-iulia.tanasescu@nxp.com> X-ClientProxiedBy: AM8P251CA0006.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::11) To AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB8898:EE_|VI2PR04MB11052:EE_ X-MS-Office365-Filtering-Correlation-Id: 61c82312-1ecc-4f9b-4174-08dcf4efa978 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|1800799024|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: 5EtKuPKfgM7vwbrzuNvQKhzH5FRdF5WWePTgFdwSzCPWrjifCBDQEEo9XJ9FEy8oJyd5NX72u/3B8EiWjesvIUEFd5M6FuINbmvu5gchwediDIiNr2ZauxTLEl+BPjWrcNb0F2rITs6cP8RRchkeKT0Zzr3fRasNrRGpq4MRu8nJgSHHVTbcHunB2vxjdZSb9XG2FhgglCcpJYK5lgOnT5SpFaO2k6S9gDNzrsLSXX13hDbkmCpfDtHD1n0V//E4I1yisFK8qIahggbs+eaEWCtdxkOIDy3QlQMq+m+4blFMsWfLXxRJVfz9cLAYK0kD03k6Pu2n6YoEleBVmovjv0f52lHGBpGsC135fuYrZbWb8b7h9jxFB0/Y3BEydkVrA3wDhiujly+p7JBBW6zpwRrpKHhfhJv9ztvheme08AC9c6o+Lf+qajGxxxrWh7DVQxDym3EWSM+rBRFnpEzo0FXNRAmZocwhCtGOB8j+BvhWWvT7oru6JAsEWfVZahKjmYapkszVugl8UERlxfhrIn6+54fz9WKToyiEJ+gxGfFyRZb9ZBkegkoyOgphrbEynJXkjNRfeVoil5xDGOfu9eCMncacXhvCh+skJQdqMDfKRAGPpXQGYGMvRrM1B8DJ2QdS+/2aKsHE/AVt77/G6r1C4BFBre6ipdJaNOTyvdF7AzrBBpLw7KCtyBM+FGZDO4J2cZkw6VDXiqL/bUgB30qWMWeKSf+mFnaGSPeXhQkT3qKgigN30Qyadw+e82Bqhus9Dy+CaWI0jNR0L0Y1D2LJ/J6AzvxeNY3TiMq/bdHGOtMHkV05G3o0gaKU3QyMSTpe/SjrIVfkinsNDaf/QLCKZPV+2/eEUmyhAqWAoqQe1Vv1t+tO6HCvCpvTR1udNCtmwuznqYAajemt6mUgLrXxvb45Gr8TBydeg71hBWv9ftr+FD7Pv4cwGu9rxNXcMej372/yT5nQ8W72Wld2v6wSX9PJkGo+ikv93GHxcWy9896jY0vvVYG0F4/iBXUdhEiEib/xwsI4GvYaLY3BMjnuYGcWZzyKPGuI2ox2Mq1Bj/G6+0VkfFrOaQ401brD/bnYt6thBLJmxf3pOfo5MAyTJVqlp5zUUHWe6uLFSTdRz17mxN72IOpyLcy7cgdXhptDoGrSG+gO9dLTO5Y/qmo0p2XUoFrR5bM5jJBNUtsXGLYv4xwzUdzo6BIhIsOHUmcOodBLImeyplUb65Sh139PsTWYsyeoQepNYtlmTTDxTTDsHcCz5rVoql9Z/puBigqgX84E4W6OPkNowNyLst5v+oc+v1iv6X7Jl3hzYpElVb4omqVsk3Ru2+SPB3taEQJWPtVM1ada1GNGRWJhax5RdLwz1z3bEL1/xySTxGk= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR04MB8898.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(1800799024)(376014)(366016)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ILibBdYmCiYH02MSblflATGfy0TyDslZfV4D6BWm/p9fTMDN10py7MkBjZE+ByJDrqwMEJqRhD5+18SRqiGzDL0TwH3jds18gK6qRVyw17H7emRIDrRSyJPvdyrjTWPGzuRupSU50wbeEWTSyGl9YMunEGxz4v/outk25GxwK7D12kuAEVRuEqp9kgwdo1apR3QmzPGls4BZBTYPaaMsaFEOxMx9AHsn4XBgvII0RNJOxBnr840ZpNTAwO1prXjpwVs3wLdsIAqHKAcZvbOZk+Uit4RyJoRZr/PDvAGwGGspJjr4DNt+JEnn/QgToqUfWi0e2eN8J3coMQWjPmvaaNT7zSa0BQhU2OI2jUalChB1u1rY9LMasRm00cIC7RQ2DSWyxKcTXz92FB1SCadYDbrxcM1tnZwy/TKehwJ00SAG6Ve6SPMj2iJCfACg8vmsucjBqhgDv8Np4uLu8+Ci9wzSrgHODGLjMutlwNlIaTPx2RCaE2f2GvMqQ6bTkYLeChVbd8cdoHH8ki3UIyxrsMCf8E0YxbzNTCB0rVkjK2LIiVJGqJI7KROA1IenfMoFuTe1WCW7rYmRe0Him02vfadYxqq4PS/VuYnZac6VFj8xku/f6y5q53LjRuwssPzQMN4fqmHV13DaCNS9x8Ydm+nKV2V+zHyZWLP94p4Lk2is49o8ZzKBFSwqg3199uGtA196EjFsloC/q1A04PXLwu571OvuI39qRX7LCS5mrkFgV6aN5KkGDf5ZK5bfH+bFeqZdjM3IUxTrRK1wWTW8W16Hh0BUqxzEqoXIUyssSeAfocDA8CmkRdaEp6613tIBoAjeR049lOxYx2+C19HhpEq3TT4MJSbDfa2XuOitlKogra/PEY6oKkA1tZqzPwCIUpIBEPzlL1gJtG4rXiDpVXCByF3eM5zJzt2eBJl1Gbah9yuRWY2VqqO8E35YAYtilZKSLdHcEhvAVMDN1tKizNCJAqAOx3V5Et4R8axEEoOGlD4lefUM6XprPpVtlxaMU5Dmo9DvLHk/rcFJkbDdv5WGRDrRiqP9c/ekBhfC6S6s633qprHPOW3aLX4X5NPBRWMlZOILjkp7JvcTMnoZX/JS5L59fM53C13Of9/IxPO/sPlXtUzkd+8m6KiIt/Rb/65/cAFW6ZmVFD8fw00uRnJoCY+SXaWIFNKuMiiWlCxk7p7dNDciZvridKejRSQvbOT9gcEmkV5tZasQ5TZlxdJHalJ/rW1Es+/ndNDNb+niKBeOaxmLHmGUvmoO+8PqejLUzPTbEAVu5sl4+w277pX88C+gA0HsPGc6Slhx8Skr/M+z3gRIHGpvaNbm51E8Y51UY467xCNCk9Cf2AJZUn5wysn3LQbNHV+7w0yac88XbWuDyO3Ij6qEn5ufSEHyKmKTQolqEA0UHG6QWjjiucaLYfd4bz3b+fT+kVa8rqVP7rp4NxKjXKLcSJwz+7BuOnisf+DwcblSz0/PdySdiQh/OI4RG7wYZV+Fct2mLejQux08LoeHLwCvjGjbCPJs/UCAZ/tCOK63QtIpr2FGCw4/nG/gjSG0/YFd+4dt/gwapkG72naF86CfYUQWr9JwpZjQ1zBw71xVSHyVSewYuA== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 61c82312-1ecc-4f9b-4174-08dcf4efa978 X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8898.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2024 12:22:15.9093 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: X6zWFF4ycdBw/6jBQQDOswyQKs0H/wNaLTSgfvzwsrsSwWzEQstAMLaj5YRzxAojk8WtiBJMa2lSvdLd3Jduvw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11052 This commit implements io handling functions as stream ops, since broadcast links need to be handled differently than unicast: Unicast links share the same IO, while broadcast links stand for separate BISes with independent IOs. Unicast links have different directions, while broadcast links share the same one. This also adds a function for unlinking broadcast streams. --- src/shared/bap.c | 336 ++++++++++++++++++++++++++++++++++++++++------- src/shared/bap.h | 2 + 2 files changed, 291 insertions(+), 47 deletions(-) diff --git a/src/shared/bap.c b/src/shared/bap.c index 0b234275c..a696471bd 100644 --- a/src/shared/bap.c +++ b/src/shared/bap.c @@ -252,6 +252,13 @@ struct bt_bap_stream_ops { unsigned int (*release)(struct bt_bap_stream *stream, bt_bap_stream_func_t func, void *user_data); void (*detach)(struct bt_bap_stream *stream); + bool (*set_io)(struct bt_bap_stream *stream, int fd); + struct bt_bap_stream_io* (*get_io)(struct bt_bap_stream *stream); + uint8_t (*io_dir)(struct bt_bap_stream *stream); + int (*io_link)(struct bt_bap_stream *stream, + struct bt_bap_stream *link); + int (*io_unlink)(struct bt_bap_stream *stream, + struct bt_bap_stream *link); }; struct bt_bap_stream { @@ -324,6 +331,13 @@ static struct queue *bap_db; static struct queue *bap_cbs; static struct queue *sessions; +static void bap_stream_set_io(void *data, void *user_data); +static void stream_find_io(void *data, void *user_data); +static void bap_stream_get_dir(void *data, void *user_data); +static struct bt_bap_stream_io *stream_io_ref(struct bt_bap_stream_io *io); +static int bap_bcast_io_unlink(struct bt_bap_stream *stream, + struct bt_bap_stream *link); + static bool bap_db_match(const void *data, const void *match_data) { const struct bt_bap_db *bdb = data; @@ -2262,9 +2276,194 @@ static unsigned int bap_bcast_release(struct bt_bap_stream *stream, return 1; } +static bool bap_ucast_set_io(struct bt_bap_stream *stream, int fd) +{ + if (!stream || (fd >= 0 && stream->io && !stream->io->connecting)) + return false; + + bap_stream_set_io(stream, INT_TO_PTR(fd)); + + queue_foreach(stream->links, bap_stream_set_io, INT_TO_PTR(fd)); + + return true; +} + +static bool bap_bcast_set_io(struct bt_bap_stream *stream, int fd) +{ + if (!stream || (fd >= 0 && stream->io && !stream->io->connecting)) + return false; + + bap_stream_set_io(stream, INT_TO_PTR(fd)); + + return true; +} + +static struct bt_bap_stream_io *bap_ucast_get_io(struct bt_bap_stream *stream) +{ + struct bt_bap_stream_io *io = NULL; + + if (!stream) + return NULL; + + if (stream->io) + return stream->io; + + queue_foreach(stream->links, stream_find_io, &io); + + return io; +} + +static struct bt_bap_stream_io *bap_bcast_get_io(struct bt_bap_stream *stream) +{ + if (!stream) + return NULL; + + return stream->io; +} + +static uint8_t bap_ucast_io_dir(struct bt_bap_stream *stream) +{ + uint8_t dir; + + if (!stream) + return 0x00; + + dir = stream->ep->dir; + + queue_foreach(stream->links, bap_stream_get_dir, &dir); + + return dir; +} + +static uint8_t bap_bcast_io_dir(struct bt_bap_stream *stream) +{ + uint8_t dir; + uint8_t pac_type = bt_bap_pac_get_type(stream->lpac); + + if (!stream) + return 0x00; + + if (pac_type == BT_BAP_BCAST_SINK) + dir = BT_BAP_BCAST_SOURCE; + else + dir = BT_BAP_BCAST_SINK; + + return dir; +} + +static int bap_ucast_io_link(struct bt_bap_stream *stream, + struct bt_bap_stream *link) +{ + struct bt_bap *bap; + + if (!stream || !link || stream == link) + return -EINVAL; + + bap = stream->bap; + + if (queue_find(stream->links, NULL, link) || + queue_find(link->links, NULL, stream)) + return -EALREADY; + + if (stream->client != link->client || + stream->qos.ucast.cig_id != link->qos.ucast.cig_id || + stream->qos.ucast.cis_id != link->qos.ucast.cis_id || + stream->ep->dir == link->ep->dir) + return -EINVAL; + + if (!stream->links) + stream->links = queue_new(); + + if (!link->links) + link->links = queue_new(); + + queue_push_tail(stream->links, link); + queue_push_tail(link->links, stream); + + /* Link IOs if already set on stream/link */ + if (stream->io && !link->io) + link->io = stream_io_ref(stream->io); + else if (link->io && !stream->io) + stream->io = stream_io_ref(link->io); + + DBG(bap, "stream %p link %p", stream, link); + + return 0; +} + +static void stream_link(void *data, void *user_data) +{ + struct bt_bap_stream *stream = (void *)data; + struct bt_bap_stream *link = (void *)user_data; + + bt_bap_stream_io_link(stream, link); +} + +static int bap_bcast_io_link(struct bt_bap_stream *stream, + struct bt_bap_stream *link) +{ + struct bt_bap *bap; + + if (!stream || !link || stream == link) + return -EINVAL; + + bap = stream->bap; + + if (queue_find(stream->links, NULL, link) || + queue_find(link->links, NULL, stream)) + return -EALREADY; + + if (!stream->links) + stream->links = queue_new(); + + if (!link->links) + link->links = queue_new(); + + queue_push_tail(stream->links, link); + queue_push_tail(link->links, stream); + + DBG(bap, "stream %p link %p", stream, link); + + queue_foreach(stream->links, stream_link, link); + + return 0; +} + +static void stream_unlink(void *data, void *user_data) +{ + struct bt_bap_stream *stream = (void *)data; + struct bt_bap_stream *link = (void *)user_data; + + bap_bcast_io_unlink(stream, link); +} + +static int bap_bcast_io_unlink(struct bt_bap_stream *stream, + struct bt_bap_stream *link) +{ + struct bt_bap *bap; + + if (!stream || !link || stream == link) + return -EINVAL; + + bap = stream->bap; + + if (!queue_find(stream->links, NULL, link) || + !queue_find(link->links, NULL, stream)) + return -EALREADY; + + queue_remove(stream->links, link); + queue_remove(link->links, stream); + + DBG(bap, "stream %p unlink %p", stream, link); + + queue_foreach(stream->links, stream_unlink, link); + + return 0; +} + #define STREAM_OPS(_type, _set_state, _get_state, _config, _qos, _enable, \ _start, _disable, _stop, _metadata, _get_dir, _get_loc, _release, \ - _detach) \ + _detach, _set_io, _get_io, _io_dir, _io_link, _io_unlink) \ { \ .type = _type, \ .set_state = _set_state, \ @@ -2280,6 +2479,11 @@ static unsigned int bap_bcast_release(struct bt_bap_stream *stream, .get_loc = _get_loc, \ .release = _release, \ .detach = _detach, \ + .set_io = _set_io, \ + .get_io = _get_io, \ + .io_dir = _io_dir, \ + .io_link = _io_link, \ + .io_unlink = _io_unlink, \ } static const struct bt_bap_stream_ops stream_ops[] = { @@ -2289,28 +2493,40 @@ static const struct bt_bap_stream_ops stream_ops[] = { bap_ucast_start, bap_ucast_disable, bap_ucast_stop, bap_ucast_metadata, bap_ucast_get_dir, bap_ucast_get_location, - bap_ucast_release, bap_ucast_detach), + bap_ucast_release, bap_ucast_detach, + bap_ucast_set_io, bap_ucast_get_io, + bap_ucast_io_dir, bap_ucast_io_link, + NULL), STREAM_OPS(BT_BAP_SOURCE, bap_ucast_set_state, bap_ucast_get_state, bap_ucast_config, bap_ucast_qos, bap_ucast_enable, bap_ucast_start, bap_ucast_disable, bap_ucast_stop, bap_ucast_metadata, bap_ucast_get_dir, bap_ucast_get_location, - bap_ucast_release, bap_ucast_detach), + bap_ucast_release, bap_ucast_detach, + bap_ucast_set_io, bap_ucast_get_io, + bap_ucast_io_dir, bap_ucast_io_link, + NULL), STREAM_OPS(BT_BAP_BCAST_SINK, bap_bcast_set_state, bap_bcast_get_state, bap_bcast_config, bap_bcast_qos, bap_bcast_sink_enable, bap_bcast_start, bap_bcast_disable, NULL, bap_bcast_metadata, bap_bcast_sink_get_dir, bap_bcast_get_location, - bap_bcast_release, bap_bcast_sink_detach), + bap_bcast_release, bap_bcast_sink_detach, + bap_bcast_set_io, bap_bcast_get_io, + bap_bcast_io_dir, bap_bcast_io_link, + bap_bcast_io_unlink), STREAM_OPS(BT_BAP_BCAST_SOURCE, bap_bcast_set_state, bap_bcast_get_state, bap_bcast_config, bap_bcast_qos, bap_bcast_src_enable, bap_bcast_start, bap_bcast_disable, NULL, bap_bcast_metadata, bap_bcast_src_get_dir, bap_bcast_get_location, - bap_bcast_release, bap_bcast_src_detach), + bap_bcast_release, bap_bcast_src_detach, + bap_bcast_set_io, bap_bcast_get_io, + bap_bcast_io_dir, bap_bcast_io_link, + bap_bcast_io_unlink), }; static const struct bt_bap_stream_ops * @@ -2396,15 +2612,23 @@ static void stream_find_io(void *data, void *user_data) static struct bt_bap_stream_io *stream_get_io(struct bt_bap_stream *stream) { - struct bt_bap_stream_io *io = NULL; + struct bt_bap_stream_io *io; + struct bt_bap *bap; - if (!stream) + if (!bap_stream_valid(stream)) return NULL; - if (stream->io) - return stream->io; + if (!stream->ops || !stream->ops->get_io) + return NULL; - queue_foreach(stream->links, stream_find_io, &io); + if (!bt_bap_ref_safe(stream->bap)) + return NULL; + + bap = stream->bap; + + io = stream->ops->get_io(stream); + + bt_bap_unref(bap); return io; } @@ -5888,14 +6112,25 @@ static bool stream_io_disconnected(struct io *io, void *user_data) bool bt_bap_stream_set_io(struct bt_bap_stream *stream, int fd) { - if (!stream || (fd >= 0 && stream->io && !stream->io->connecting)) + bool ret; + struct bt_bap *bap; + + if (!bap_stream_valid(stream)) return false; - bap_stream_set_io(stream, INT_TO_PTR(fd)); + if (!stream->ops || !stream->ops->set_io) + return false; - queue_foreach(stream->links, bap_stream_set_io, INT_TO_PTR(fd)); + if (!bt_bap_ref_safe(stream->bap)) + return false; - return true; + bap = stream->bap; + + ret = stream->ops->set_io(stream, fd); + + bt_bap_unref(bap); + + return ret; } static bool match_req_id(const void *data, const void *match_data) @@ -5941,41 +6176,49 @@ int bt_bap_stream_cancel(struct bt_bap_stream *stream, unsigned int id) int bt_bap_stream_io_link(struct bt_bap_stream *stream, struct bt_bap_stream *link) { + int ret; struct bt_bap *bap; - if (!stream || !link || stream == link) + if (!bap_stream_valid(stream)) + return -EINVAL; + + if (!stream->ops || !stream->ops->io_link) + return -EINVAL; + + if (!bt_bap_ref_safe(stream->bap)) return -EINVAL; bap = stream->bap; - if (queue_find(stream->links, NULL, link) || - queue_find(link->links, NULL, stream)) - return -EALREADY; + ret = stream->ops->io_link(stream, link); - if (stream->client != link->client || - stream->qos.ucast.cig_id != link->qos.ucast.cig_id || - stream->qos.ucast.cis_id != link->qos.ucast.cis_id || - stream->ep->dir == link->ep->dir) + bt_bap_unref(bap); + + return ret; +} + +int bt_bap_stream_io_unlink(struct bt_bap_stream *stream, + struct bt_bap_stream *link) +{ + int ret; + struct bt_bap *bap; + + if (!bap_stream_valid(stream)) return -EINVAL; - if (!stream->links) - stream->links = queue_new(); + if (!stream->ops || !stream->ops->io_unlink) + return -EINVAL; - if (!link->links) - link->links = queue_new(); + if (!bt_bap_ref_safe(stream->bap)) + return -EINVAL; - queue_push_tail(stream->links, link); - queue_push_tail(link->links, stream); + bap = stream->bap; - /* Link IOs if already set on stream/link */ - if (stream->io && !link->io) - link->io = stream_io_ref(stream->io); - else if (link->io && !stream->io) - stream->io = stream_io_ref(link->io); + ret = stream->ops->io_unlink(stream, link); - DBG(bap, "stream %p link %p", stream, link); + bt_bap_unref(bap); - return 0; + return ret; } struct queue *bt_bap_stream_io_get_links(struct bt_bap_stream *stream) @@ -6052,23 +6295,22 @@ static void bap_stream_get_dir(void *data, void *user_data) uint8_t bt_bap_stream_io_dir(struct bt_bap_stream *stream) { uint8_t dir; + struct bt_bap *bap; - if (!stream) - return 0x00; + if (!bap_stream_valid(stream)) + return 0; - if (stream->ep) - dir = stream->ep->dir; - else { - uint8_t pac_type = bt_bap_pac_get_type(stream->lpac); + if (!stream->ops || !stream->ops->set_io) + return 0; - if (pac_type == BT_BAP_BCAST_SINK) - dir = BT_BAP_BCAST_SOURCE; - else - dir = BT_BAP_BCAST_SINK; + if (!bt_bap_ref_safe(stream->bap)) + return 00; - } + bap = stream->bap; - queue_foreach(stream->links, bap_stream_get_dir, &dir); + dir = stream->ops->io_dir(stream); + + bt_bap_unref(bap); return dir; } diff --git a/src/shared/bap.h b/src/shared/bap.h index cd5ea2eba..126348e81 100644 --- a/src/shared/bap.h +++ b/src/shared/bap.h @@ -231,6 +231,8 @@ int bt_bap_stream_cancel(struct bt_bap_stream *stream, unsigned int id); int bt_bap_stream_io_link(struct bt_bap_stream *stream, struct bt_bap_stream *link); +int bt_bap_stream_io_unlink(struct bt_bap_stream *stream, + struct bt_bap_stream *link); struct queue *bt_bap_stream_io_get_links(struct bt_bap_stream *stream); bool bt_bap_stream_io_get_qos(struct bt_bap_stream *stream, struct bt_bap_qos **in, From patchwork Fri Oct 25 12:21:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iulia Tanasescu X-Patchwork-Id: 838488 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2066.outbound.protection.outlook.com [40.107.249.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 50A151F9431 for ; Fri, 25 Oct 2024 12:22:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.249.66 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858949; cv=fail; b=o/Mxy90XzpoY3Bw3xp+hL5pKX2lowYEeUxezuIRaKGj8jq6oumoIe+tyatrrHeon8AvuJBGIes9qezICNVi/oBlBJOeusI4u3AxEeY+xtkeH+Jt/BOjlA8YuPpyUqojytx2V3/qENjTtwLB8dqvT4Txkib3GlnO8qmpe57mfQDQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858949; c=relaxed/simple; bh=8xRDB9ovg70a4f1MdIK0e6b5DL3X/61zNLqvC9bhEvI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=iOXSNKQJmEI248VXKdHl5wW7Y08cFnxZ+Gxoa8Xuj5o2/WGkxzQgpq9DT/UaRZT65rjj2GB3Xlsd5PBw2fnIBFT3h9nvcmcJ6G0p3tftt77dl9DdXCg1Wj+h0neNoKH/q7+k1THFwFBD/tuRJvLs6nkgjXBDD1D88wXrptXGCao= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=Fsi23soj; arc=fail smtp.client-ip=40.107.249.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="Fsi23soj" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SwYWEvBgBAvdqqk9/djDwk1+FULMLZzBN2wK5tnEIun/dmSl3rrFhC6O/g30OXVg8ldmyBSqX1TitjJ0cFjq+L+uubFaQaLfxpoqsaFfogrT2MQLmieSxQcn4kuCKOQqVAacPiMQOaBr10NgCjtjySwjiBjzFGOqgCmNYsGCI45Lfzq6v/oYLfyanynj3E0XnRcZ8tIKbfyBx21pxb8xBQtv9SchgVJ2uqEgsQMa5RC1Y+UXtmKwVUB75sjIXNa42Kh5cMXFnlzve0Aay+wxM/77DUPq3n1dN/JpMIqO96TAXsM0fjm/jj+988grWfBG5UCXLX6P0GSHkmGR+snKDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9YQM9ltIZsX/V+zLsBt/H6LU2t6pK3ly5daKehwnspE=; b=uI5IfwOqNLyPFLJz6jpp5O0N4YioYMVbrpopvVmV7TTGYTVMQSSDkCw0Q6K18gnvARIIEHYf44KpghJDrx0pTgrxIBZ4r8DmokTBIMiPPPR20K2yZ0uPHIR/j7qyBzomxL2B4KBpW74PnaymADKFmpjECdJDQkE8/nXlZhGaAVt54fO950+FUmLvWH3QJfOTLiArUhijF+ld4ir0dEdSU+ZBLPe56PfRq1DfEX1W09dpE7TGgnNjCgFtB7aidfvlItcnkcuLLBV5a/DFvAgY18U0PCVnQMUrxCzDHhUbQP6v+RArP1dl3HPe5I2zVK4oAIp5itOV0ed4bkFv3T94GA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9YQM9ltIZsX/V+zLsBt/H6LU2t6pK3ly5daKehwnspE=; b=Fsi23sojn1TY+8dDivPvqhT5mFQtof7e5jdgOMxifKdUVU2eynoV2dWqdW2i4b7VO1wHeAVCNod34sdtO5Uge4+kPdz+87UTEWSq7hVuRyoXL0zIpJ/IlUrEfcfLaqM/uzJwaFWh0tX6VZhGTkppiL83i4Kh7JLUM2MPacIqM/VGLp0722EvZFovjIvFFD0TgOnA2sZcW1juMU4i951Sv/SvCJlrtIDY1jcKXU1kls83CtrrYGrL9hPAj8+/k0SbojbCp7wjB2W3SEb3u1XBtySGgIDpHa34p132axghWgiEpK0pJnf01D3ShEuxCt9w+4MhiGIJnenuGzxg3+OYLw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) by VI2PR04MB11052.eurprd04.prod.outlook.com (2603:10a6:800:272::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.17; Fri, 25 Oct 2024 12:22:21 +0000 Received: from AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654]) by AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654%4]) with mapi id 15.20.8093.014; Fri, 25 Oct 2024 12:22:21 +0000 From: Iulia Tanasescu To: linux-bluetooth@vger.kernel.org Cc: claudia.rosu@nxp.com, mihai-octavian.urzica@nxp.com, andrei.istodorescu@nxp.com, luiz.dentz@gmail.com, Iulia Tanasescu Subject: [PATCH BlueZ v2 04/14] shared/bap: Use enabling state for bcast sink streams Date: Fri, 25 Oct 2024 15:21:36 +0300 Message-ID: <20241025122146.17925-5-iulia.tanasescu@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241025122146.17925-1-iulia.tanasescu@nxp.com> References: <20241025122146.17925-1-iulia.tanasescu@nxp.com> X-ClientProxiedBy: AM8P251CA0006.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::11) To AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB8898:EE_|VI2PR04MB11052:EE_ X-MS-Office365-Filtering-Correlation-Id: 7721b78e-28e3-4e05-6fd3-08dcf4efad16 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|1800799024|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: O34gCAFlgw2EpXIVzDrari/ZWnJCigJWGYrUGoAyyGW8Nhehe1vhbJ+3CWeo7B253NrOHOhSN1a/M6huvTLVa9yVQQcfiDU4/xk9GqKayzviCYWrt0xpz/I2eyZ9d+SCuOF6fBxNOEAlbF6OKfKPK2bLo3kiHVJWI8QMrpzdeZWh1KmqbXUL57Wugo6Ohaiy1efVEH141OjDQg/I5CEKcbk9lQDEXnzW2XnBPBa7c1dEw+8ADlxICEAjswj/qn5ax5BQ/6xB5mTKFWDEprFLtG8KLCnvdKAILWgoJYtt/J51Sp+jheYKYdnYMvW8kSTydgj3f7fC5jmHz1hxyNT0rmoqo3Jd7YjJz6m94GRxtKiOVCxKB4RV3MV5XpwwJEabvcRraR3X/weoQBzx0fQ0XNYY+A6Z/ePhgDlqyvbo9DgNDABY84Tmb6ovvJoQtYftDVA82amrMP8H+pM4lO9qz1mw7Xp9St+fUEDE8cAsoQIDt+JUcShl6GW2o6z/6SUj/HdivpjKu9hqQK5+PNENJiG/uTuNLvrSsL3xa/y3Tex8TP7UCRHVOGBthGc5ogrFhnIqdwwXboXH/EnuPefjZ7iyCs/QQP32UNMvdHqnUClNQE3XoMsiAprp4mVnwaW33f0zq6joDXN92/tFPZsVc1Df/Ld4oOLvc/77uOmUxuObHrybWXbkzNjT+N2JE9MF5zMnjv6+IOOYiztkcCiDzkurRoPANMtLGeWia6n0TU/CRU5aNlsQcr+coJ3kwb5LhgLqgc5/LdD3aUq7ASsGDzjGqb4GAEvHyxGd4PJeHFK49Z8I5bPyFiviTHXK8vRDScGRt74wrwe2o4VSL6Rsh6uSZuhWZwoBhHMKGaUdDLtonkE8/UCD97vRAHCgBQyLlN1RivjA2IwrRScM44/awWNhn92rx1v9cfaD6UYW0fJoJsTZHbycJc7sYQ/cwqnFUyAceJWttvmKDPJA6SjWHHoYJgxi1DeqJocnkcctzvmSnfFxmt9jqnXj3sRKmDhoIK9EXSZEUS23Uvf7X5q2jtGZcKlyxus+IwRO/mHtLJ51ZHSoHYZH4DOYsnbP9OOtgerm2COIz1DST8YJWkyC7VEA2uZHQYSc/sVXYi1B2XS+bye8yXQwjsWsWMmcTNa2TABLEYDXZGb5yIxa7LA2qR1PCEV3iKcYwctpNjpqsXFM0AvflpfRlr/SJUnF3/xBs7vRrhAX11fjl+hzkwU57ZpM3ZDNvCVVT/uW+xON8thMk/i9oHUseFfjOgwkzOM0CASeRPjH+IoGCp/0KO+/O+qkbJQSS/9Gvv9a9GsL8zZ7oibamT82j9Fvk9cu5mGBDFVf+S/iQnfI+rxtQ2OcKNTNMMcDPMwL4+LO+mTV+tw= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR04MB8898.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(1800799024)(376014)(366016)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: QlbbUuE9QutrH+N7qn0dLgP6aAqYDCuK2tqYCumR9G4DGnvYp61oAwrrqZDqDRkjvOYgVB0wheGgd3HFT0Q3ci2+WFjmx1OyvvGpBDhWXdKNFYnpG9aRzV/HkW5WB7hHI1bmiBkvw8AmfSDe+HxRnW38bzCld9nz6BqGSJLB1DPtgIusThPKEHMhettYL9vJlpqVusBTJ4Kd5vXTbJWzxw61MVpv0Xq6cHc9O3csqHnfMDo7UEgGTv6LlkQETV4pIWZmOq7Z6tUHSPsDtf+IVhqJWPgNY38siFz5k2mAqQHL4tWjLCx5jzilX5RJike6J7GH+4u66JiFkrx4pUfhgPsS1s+XNn9cDZHrtKV9Bgvdj/tZfqLMxDRQn2rvranryqNaT9mnSpJDN/db4yBFOJptYxyStmoklC4w550A2+4oHoNVHAul2dsIO4UiP+vf2HXvXBeIfkE3EQMaswQA7MEAe8L8aGjMPoLsE/oS9nmYZafOdLllk/v2vsxM4876536+KnZLS3EhMqBg4lFBkb9HE0ZDxTQe7eJ/zgTF4P/uEutKK8bETiINlMC9VsbLIrwMWepvCm2kqDWGbWmFL5GjdptBEphIRg94xvxK7tAGhRiLT5HkPk9uru8dU8wLt1OzskUSrwfx2yLBfCUpYco+ICAgYi6tDvaElkF9KIRnGBDEB8MWl1LZk83j4CdpgjF5XBHCCWOAm4u4hKIq4e88j71Syb57vbgJmgvArdCi1dZnZVgl3dDgiehrwYKwTKHd5XISk5ytsxNg+tw0buqZlQvRAiG+KdEpXFoM7GhkbguXjjQfcO6Scng+loYfvKaydKbT6JOf4tPQxfVMQ1O+rm6niWn4JR2dIMAOswHb7aZCfhTy5QXURRbT5XBpcZQBH4PUN/j6jNQvKDYse5mfr7HA/bY/i53lAKVYMocvDH6vcTu6uN9saqRBi/e730bCj/4/NVFNcFplyXJ/W8SopAqdJ1TF+Wsu7ZNTe1A/3GTcnn8R1c8k5RNKHO0lacrCTGS2xysH1Q+t6wR8ZWGFVkMC0lcNnIUwcmANErsZjXq13Zs8Uqizff1mBdeGVrmf2UQNwfmqe/kt0slpCwHR+HVWu/zKhQYoeTwos32tHrYwvvcnsVEF33C0FwAYwvt0xnaXQPmjmAXMVaQdN9AurtQ1FV4HE0b7DU0GtWdy+2jRSxk/2u2G/pYN8FH2x2xC2oKAX5C4gQtwBCre4E7w4Ui+dtC4CVN6WEzG/BQmBb8EMjECMEfxX2SrTZ98oJ8ZsMP6LA7BeQW0/GmBxJQef7dJIRWm5yVEusCFB9DjzP7mU3QY2vlrJhPQ8D3drO5Qugn8Afesb4xU0gLN9zsUqnoeSODCGp5kkuuw2eMrsHTzMwyAMkjjpM6J3TTkDkFtGgvwm8hAluNFbrXarqPg23F/TdUWQJuiCf6PiyFt87CtBuMU6zQxnDquspCiL2iw1St9kQYKd4mShE15SF66vazpEsfB0rqO2Z2SWMvN4Mix0KueAWWjHen2xfMlMF+hJz2+HjuWnQl3hpjlMAX8mEAMO9Mn4g5UxGr9p2NVI0DY8mitYNwVDyLsMR14sZRih2WE2SxMBsQuQi1JoQ== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7721b78e-28e3-4e05-6fd3-08dcf4efad16 X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8898.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2024 12:22:21.9203 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UlDX7hE8NNX69Qh6uGr+SbjF1MQtkyr9x1X/gpGqts/tNvOQ9qDOY/Wx5QnwKGqRe6m/V8SRvlGOy4m5aZgkCA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11052 This updates the stream state transition from CONFIG to ENABLING, on enable for Broadcast Sink streams. This is done to differentiate between streams discovered in the BASE after short-lived PA sync and streams that have been selected and enabled by the user. --- profiles/audio/bap.c | 13 +++++++++---- src/shared/bap.c | 2 +- unit/test-bap.c | 7 ++++--- 3 files changed, 14 insertions(+), 8 deletions(-) diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c index c45717ef2..81e1fb03e 100644 --- a/profiles/audio/bap.c +++ b/profiles/audio/bap.c @@ -1020,7 +1020,6 @@ static void iso_bcast_confirm_cb(GIOChannel *io, GError *err, void *user_data) free(req); if (bt_bap_stream_set_io(setup->stream, fd)) { - bt_bap_stream_start(setup->stream, NULL, NULL); g_io_channel_set_close_on_unref(io, FALSE); return; } @@ -2676,13 +2675,19 @@ static void bap_state_bcast_sink(struct bt_bap_stream *stream, case BT_BAP_STREAM_STATE_CONFIG: if (!setup) break; - if (old_state == - BT_BAP_STREAM_STATE_CONFIG) - setup_create_io(data, setup, stream, defer); if (old_state == BT_BAP_STREAM_STATE_STREAMING) setup_io_close(setup, NULL); break; + case BT_BAP_STREAM_STATE_ENABLING: + /* For a Broadcast Sink, the ENABLING state suggests that + * the upper layer process requires the stream to start + * receiving audio. This state is used to differentiate + * between all configured streams and the ones that have + * been enabled by the upper layer. Create stream io. + */ + setup_create_io(data, setup, stream, defer); + break; } } diff --git a/src/shared/bap.c b/src/shared/bap.c index 17fedb397..b314b4b99 100644 --- a/src/shared/bap.c +++ b/src/shared/bap.c @@ -2210,7 +2210,7 @@ static unsigned int bap_bcast_sink_enable(struct bt_bap_stream *stream, bt_bap_stream_func_t func, void *user_data) { - stream_set_state(stream, BT_BAP_STREAM_STATE_CONFIG); + stream_set_state(stream, BT_BAP_STREAM_STATE_ENABLING); return 1; } diff --git a/unit/test-bap.c b/unit/test-bap.c index 9cfc8c403..0c190d7fe 100644 --- a/unit/test-bap.c +++ b/unit/test-bap.c @@ -6419,14 +6419,15 @@ static void bsnk_state_str(struct bt_bap_stream *stream, uint8_t old_state, /* Enable stream */ bt_bap_stream_enable(stream, true, NULL, NULL, NULL); - } else if (old_state == BT_BAP_STREAM_STATE_CONFIG) { - /* Start stream */ - bt_bap_stream_start(stream, NULL, NULL); } else { /* Other state transitions are invalid */ tester_test_failed(); } + break; + case BT_BAP_STREAM_STATE_ENABLING: + /* Start stream */ + bt_bap_stream_start(stream, NULL, NULL); break; case BT_BAP_STREAM_STATE_STREAMING: queue_foreach(data->streams, stream_count_streaming, &num); From patchwork Fri Oct 25 12:21:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iulia Tanasescu X-Patchwork-Id: 838487 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2066.outbound.protection.outlook.com [40.107.249.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D1DC1F9431 for ; Fri, 25 Oct 2024 12:22:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.249.66 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858955; cv=fail; b=a07Xj3IIEsTJ6UZS9gOktNp2KzMwS4wMgG8w/jG4PO+7/QdDK6Jt9jBxgb6V9of7WXRijStUhQEfgrea3qEsBmhT36Dk9iOI2L0VLnT5J/Bk24zkGDLcIJAoXKYoq/uM8mPlEcgEW16HaFFOu1wxxeeqBOFR8rG6XNorTf1acFc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858955; c=relaxed/simple; bh=k0Grb85DTW9s6DmTJ4E2hrhFh7HxL63dPPfQupsqcbg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=j4zHf6sasA7ft9ac9EPIbSgPlFhpBE9ldlHdviPPXwDtFGgwlm8Hp3ZP2yM2LDzd9+kaj3NmfpZ9/14bDrzQN9wgMmGjnAb5MHonaHcWKXd1itllj8Z/VfbQOiXGs7X/GIQUOQHodudyQothyWEy6PJYVgwWcHWyc0Cuul0HNp4= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=LeEg+OHW; arc=fail smtp.client-ip=40.107.249.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="LeEg+OHW" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wvMKlt2zxkbVUkCToayaO1PK+o3lrAOPMh3v+bQZQvDkqY7zFtBdBJfPvXkaQ3JTzNkLvlJd8Y4WmfTWD0kNudz4j93vdewdUea9WsySi74ApqIZ7DBv4oxYTkhO8Gx60ikxkz6GEUUxTpmv3wvSZXy2W/u8zQoVs4mGIi6AeTd2Lw1Z3+85at6DuX4B5EFEOSOXenUVAcxgZ30ho74gLOZuj9YlIt/CeU9ECmauiLhEHpWbDreaZvxArnVUmSkwDDgcp6GmKKTAWlO8kHn9Wohf4ioh2SsLgp61bMSY4i5POF9tQHE6nmZmmCFTmMyG+vFbMvR9fxLAGfTk2HIbeA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=QeE1jA4drqJpvzCxsPahhw1a3hwWv+XOKINVATxOngk=; b=nFJeo+71BEGce2m6Rou82MzJ+BIlB60Q1XyfghYAsYltsMwf88DFQG3KjiKbsfFy7Uw3QuHYNBNsy7ITs3YVt7tZ8j3iQNcz1XAXlJXlIYBlw4J+sMvJ7Wrv2rFx0tC9aNGSk+StCZSGFZHUtiP6QXPhL7ND8LzyQ1CZb/Hijt2w2qZczf9DqFSOlr2bBoOD8zS9plDbyIdZg9CMdKfbBiJvOUms6wBeYCQ7Z2bLtWYDXPDAF4np5/KsIAKnQSAMyqEngDjjFD61cFy076iz0367pFz+n4StK2ThJEcxf9XeuUJuH3L7E1/PNg9IytLwkdnjZ6P5UdBr/ny9pk0QAA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QeE1jA4drqJpvzCxsPahhw1a3hwWv+XOKINVATxOngk=; b=LeEg+OHWlCj47SmcB1c2lueOkQyLrq1H5H9ZfM7eRbm0Jp4cMvrESxeVkinYeN3ypnyN+pUbKGBym9kwEX3moOU9EHKmRqZi1g5Sv275klqVOAxsNZTrlYakF5rQrLkKwu7axfEPR5R9H2e1S0pc4CAQnpFj7gbFvK/pb9CwQdHxyQ05HhcP+/8/Hk349JTytDZHKO+E+kAGY5ZupTQw4pLf2oW5jqpnRsYzQS1RWBNuPpYV2fLBvpoS1MCibnU7dsYHLdJQpmlLAJviL/DJydzk6PuwWiA/Ija0RXwTXtS+cg5kAemfP2NY819vI4HilvBDnmhRWqwrwU4k0BjzkQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) by VI2PR04MB11052.eurprd04.prod.outlook.com (2603:10a6:800:272::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.17; Fri, 25 Oct 2024 12:22:25 +0000 Received: from AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654]) by AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654%4]) with mapi id 15.20.8093.014; Fri, 25 Oct 2024 12:22:25 +0000 From: Iulia Tanasescu To: linux-bluetooth@vger.kernel.org Cc: claudia.rosu@nxp.com, mihai-octavian.urzica@nxp.com, andrei.istodorescu@nxp.com, luiz.dentz@gmail.com, Iulia Tanasescu Subject: [PATCH BlueZ v2 06/14] shared/bap: Handle multiple bcast sink streams Date: Fri, 25 Oct 2024 15:21:38 +0300 Message-ID: <20241025122146.17925-7-iulia.tanasescu@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241025122146.17925-1-iulia.tanasescu@nxp.com> References: <20241025122146.17925-1-iulia.tanasescu@nxp.com> X-ClientProxiedBy: AM8P251CA0006.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::11) To AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB8898:EE_|VI2PR04MB11052:EE_ X-MS-Office365-Filtering-Correlation-Id: c534aeb7-eb15-4624-dd30-08dcf4efaf1c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|1800799024|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: fLrPemtrJGZsluj8ODR2Y2Qsig8QHoJ0PVf+gOdmxOobyK1mP+1r/FXXeIF+o/K3sUBuitOY7wsAAGHoGVgeFeufSovA6vlQ2BsMqI9KZIBvinD++5a9DujGAS6f4NEUZmThF3DS8doFAduZDTOoYhMsv6JfaIl/RT4VRts0Qj0E8919Iq5D96I04FKWfLGoITX/1O/fX9H3vaQcZ89zHOxlubtMH1pKaXcVZ9Wk6rtNrKAG5SJBcVdJdRFrkhyHF2WRc5c38dIKk1xHM0+aHAw63YQmjsTaGCalTWBI4po0pdLpIc+Qw+PldBGnqrJ5EFH7PpbTF2oPcQE0N89RgLDOK4OK4+1xYjlo1mPS4KtOpsSWTQhtaukygv9gF6V9zTDxtcl0IIcdr9XsTQetIvjgpNI6kef0guIcBjtHSPO+zE2E6h4QdKzTJx1q0oc/vjhjkFizeMi7BNR/InxFKVD/i1MVxkqssAztHT0wRqoNRnAqp/GdcV4GHCOU+7FGQJZweRiMH9QOVAKWszDKTZEz86jTXDuwOun/gKLjxl69HG4UvmnNnoDELilapZI461dhpi9P1pPHUL17nHY82fF4lpp0W1CyKyI8z52smRg5zpsWjrJGOCEjxagCYk76W3Fcaj3gTo/7uTqYmSjhqr+6XinVQ76vzW829eeOdmWZQwJ2p8k16lKTrBEWauDzw/IUKKTS06cQUBZ6/OAHCC4pehg6OE7PCIwec1zqKJZZ+yXRScMDT2neq0ARpFBfLGrEhs6fLJWeIa3BDZXCXrqEncVzuqRKN6ogI01aUNUHYvyKKaen6csE//opU2vFvJFe9KFRLTStd2JL8ELTGaUgv26HNilXMzoGexL+mA7yEWY//wgfYl0OU3sU3OVNtMMzYgzIPf0WESNYcmBQ8EljCalEABFSJdLIaVUYT92VTbFjoD4lNGvlcFf9fY0BXc00j4HekGPVZ/QEqRPpwRrwfakCQnV1VhmBknzrJ0v/yX/ISRiOTzwZnBmOukhS3OrPBHJ+ij6DWeiBw09oBpdMbttYAm7GnvnTktQ6sNkGBbyLfTADQxUOovneQSb29VrAhmEVllNghNhlo7Wf8horURl2dQISei+Z4E7ecRHc/z+8N1kGV+s9csg2NOdqoFJPUjtfEWwJc7A9hDMrr+Ft+Bd5ytAA2OX0S2PvJahfg2CO8vpIFhbuAO1z7u7Zz1eSzugBlijMiHphNftChfEKwXbQ2RssLReHWe7AytPm03Xo8ErUsa9OJ47pq5cumTLpS9RbRrurfr/naSbYpclIg+6YYWbvxiFw8qDeNrAF4M6jRWNT0AolocFXoIZenM5DZAYr/jTb/6dCvw1WbdQQexhPdteBQOjkgZ1cI2g= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR04MB8898.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(1800799024)(376014)(366016)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: gcZMP26XjBBYH8I+DzUazkHkPhMV29B7f9CuT8QV/PvHcMVNJNwsUgS/L1x5j21E8UEnjHXuWweCpJ5jIT5xMxvTIcfgZzw5Z/ldYXLJEa/ynolYxcJDsLmDDH4PsYDN9eIRj7NLndXJZ4AUDnumy0e3ORxDtJtBUR/mYK+XGvzQh3ykBQzNubj7AXkpnjhIDAgWf2odbHTAD3nEznu2rOb92HOEBYZZgpQA/JAogguDBWwhJLsNBaxyvsU/7Uz6JnLpUHwZam4DRSjFbU8RYtVg6SSEhMAD1ky4VAyc32AkGj7GM++Tn8wS0YUan/be/T3DU5P9mZUYnt+ox9itn9D5ed+bYQkN1u4vo3emACpD7BSBdqm9pBefSIhmU/ngww56+OnGiNrykmM1pluoS6SvqMEhS0ELQZFJqkoc1qpG3h4bDPh4tPRU6/mPLeR8S6W+ZvZQmTvALXIyhlJqrDTG1oMfuDjQBcrCBQ59bPqS+U2nH+w3CPuYdJnQqS1UrvDzxTu0lobb9KTWbfiwXjAy+zf5USf2CSjxUEQsB2JDFVcaUIaIRTEnONkI+oaqJ4ae2cknr4JoVYf3yjSi3O8IX/fgaAJjDrN1vJeKqkfBSVc8xvkDpVOmEqPOi8blUbZe1zQ0Szq3MNU8ST8JIisKCaD9cSY0DQzAjGdm4ItpN0th+sH3l6qNKZKnPNVuYx3SYe/03ykEX/4X4zY4NYluH7arii6p7Bz76HLn5RY7qcwVSQTWYxaIlIBJx6M8ROQLBrBU2n27+n5NoHNy9boVz0RoTXCgqk7WACXlFJrkWE1BDWnlnMso2Xr1mN1Sgoma/Gv+FrTYYSLAUs192nkYkx5MkTc+eOi0Lw/wU3QFwBtPItPjS8UmcjrcNH/jqInf0GUS3fGILPMIXRKri96CEarnwZ1gy1LmWQ/CMsrDpBwUAgEVnmkxE9epKIUmKDFEOBLxU2Re7WfdFh8b4ewjPdHGUOJSUiBEMMS0eJxGgq7HzdhESYFX5IsykkXRYlZgvsnrfLSjbtaEREtkjMYZYmW2NvyScHyBjZAAD9fuO89jSsUmEYMtmt0szUgdRQFaVu1a3WYkWlFdErzPEUtg8ogwCwYtonm9ScTfTGJkBEJJGWA58+O9xnMr/mOQGKXMHRZrcZJNjO4XXy3PlvJUO7VL9BsyvTqdhh9Me4K0n1c5ZYWR4yB90OAwH0pKtHLp0Y2BiNej5JKWCZ593N7/lzNZiauRye9IMmzMA9Nupu6Z1Yk824HwOKkCrUV5lYNHx5oJJcvsV+EmMjqbH3jAiYh1cmK5yBMqI4x3dsIj6sNiHhnGzDCUI7O6Sm5LortiWKeJVp1hERHNusHEcRZgcslCukvxCbNyAnG9QWz3Mj8rdhZvuuo6EojnoO5nFJ+d2HEGhmjR9Ipqg/SqdnTbI/LFf6h/oGToQGA6Lfj3A0zgT9JEYcdusYlvjs1KMQO/gDq6XxwwlAuWw5mRL/GLFeULTAaYXrsZlEY9t8G2Ewu2qZArwYtlJ66V9521o1aXRgZsIhfi1l0dX7wbEBDJIZwxX9ua5xydtRSnmOvcoCPMLiMZ702XBh/QU6CdyW2G4ixxKtdTakxvSqROyg== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: c534aeb7-eb15-4624-dd30-08dcf4efaf1c X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8898.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2024 12:22:25.3977 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: qqQjaRKGqb+x7E3SSZ+rKaOFPZMj5jrasBun8pxVCO28oo5W0Yjp/v3wj7R2k7kh6o7dn+T+VbKie2NbKB5jbA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11052 This adds shared/bap support for enabling and starting multiple Broadcast Sink streams. Stream enabling should fail if any other Broadcast Sink streams are in the process of enabling or have been enabled for the same source. Also, a stream that has been enabled and already has the fd set should be started on the spot. --- src/shared/bap.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/shared/bap.c b/src/shared/bap.c index b314b4b99..dad510aec 100644 --- a/src/shared/bap.c +++ b/src/shared/bap.c @@ -2195,6 +2195,12 @@ static void bap_bcast_set_state(struct bt_bap_stream *stream, uint8_t state) bap_stream_io_detach(stream); stream_set_state(stream, BT_BAP_STREAM_STATE_IDLE); break; + case BT_ASCS_ASE_STATE_ENABLING: + if (bt_bap_stream_get_io(stream)) + /* Start stream if fd has already been set */ + bt_bap_stream_start(stream, NULL, NULL); + + break; } bt_bap_stream_unref(stream); @@ -2205,11 +2211,40 @@ static unsigned int bap_bcast_get_state(struct bt_bap_stream *stream) return stream->state; } +static bool bcast_sink_stream_enabled(const void *data, const void *match_data) +{ + struct bt_bap_stream *stream = (struct bt_bap_stream *)data; + struct bt_bap_stream *match = (struct bt_bap_stream *)match_data; + uint8_t state = bt_bap_stream_get_state(stream); + + if (stream == match) + return false; + + if (queue_find(stream->links, NULL, match)) + return false; + + /* Ignore streams that are not Broadcast Sink */ + if (bt_bap_pac_get_type(stream->lpac) != BT_BAP_BCAST_SINK) + return false; + + return ((state == BT_BAP_STREAM_STATE_ENABLING) || + bt_bap_stream_get_io(stream)); +} + static unsigned int bap_bcast_sink_enable(struct bt_bap_stream *stream, bool enable_links, struct iovec *data, bt_bap_stream_func_t func, void *user_data) { + struct bt_bap *bap = stream->bap; + + /* The stream cannot be enabled if there is any other + * unlinked stream for the same source that is in the + * process of enabling or that has already been started. + */ + if (queue_find(bap->streams, bcast_sink_stream_enabled, stream)) + return 0; + stream_set_state(stream, BT_BAP_STREAM_STATE_ENABLING); return 1; From patchwork Fri Oct 25 12:21:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iulia Tanasescu X-Patchwork-Id: 838486 Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2083.outbound.protection.outlook.com [40.107.247.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 87CD61F9431 for ; Fri, 25 Oct 2024 12:22:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.247.83 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858958; cv=fail; b=d8ho0EXDkjLmTJngseFpt57rFvxwy6pojrN7ruzdpTa/l9YvbdQfyN0Ewvbv8MCJMrFCA3GNCsCFI+TYDIHtK6R/RaR4537pDtNfUOoICO08sVJRIAh05f23bXF3h1tllXFzLwJSzt8fBK3pMyMvSkgSTzfBx1PGU4ym/5ZnAhw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858958; c=relaxed/simple; bh=RBkN4v8HbOrapJSD7ZWet5Tdlo6IkOvkm2+1rTmxx1Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=Uz7OrHolCPtN/Iv7nvsZH1EcLhDXUR7BGWC6q7CpPjPfV98sJk+U+I9apefKJ+C1GN4kmM4ifOWeGqh221g7za88k0G5Xvzvwty41CVbdDR3px1Bmy4OYsW/lfx9R0ziHQuZC8ApWH8jiYaCVcuU9wIeI8ymvbXvmF694CxtTo0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=U9IXOfsU; arc=fail smtp.client-ip=40.107.247.83 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="U9IXOfsU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=l3wBftEUpuQgqEwp6gEXHTUlbxvncxT9Ns/2a9BDhNhZVR2AbdmKVsHeqTR7i2E6rLNGlbcm/234h0CDe1bs9o5C41TGBNCDpwnxKacNN9fMGGjr1Iv6+GIwGVPYiSk0zg6AEJTzeI5ukCANyZVwOBxPjtkUsyz+7+5FNPx7oU25AkDSA2fAAziW4iKYKFkurTwvgosgNGaTwXHll8SH1QRL3QhESn75IZAJS2V2Cq/hpZdgqxXFsJ/zjzqHBNGr68JrF/9SnqykQQ6PQWNUqCcSo2VAkF+8fgYgLCJteAybCdK6C7ub+had9qzst1dfxT0IcGpzFGcTRKWfwI5s1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=HW2MlkTctZWRz39nmD/nTbjenO9cNqJ5OKsAgyabizQ=; b=IpQ+a7FTxwXEmDk8ydX4w5SATTllnNa8ND3u0jOE4m6eGYD3dfSUL29E0udLaVdyykezgFUSd9Al3sjZzKYHic54hIlr3sqIYXXba9UrbjQK1RVqDeywNjneKOlM+3YikUF2uW5QN8ghlVWfnECk4jdAaLifdNy+1DnYNW3mE8f4YMwPeE9rOoej6Fk4bv+PmA2AvDktV6Fs/Z01eysmk1CS04H/RMVsI7mknHuELW9XpugyUErux14BSryJ6ec258dWxkayVTlcVWPLIpXvWP7rrglloW6EMEHC8BV1dFseOpQcm0V/f0IExBJlpTvNXZsHrQFYa6kqdp1yU+GbJw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=HW2MlkTctZWRz39nmD/nTbjenO9cNqJ5OKsAgyabizQ=; b=U9IXOfsU94yKzK2S8p0NNsmwE1po5/PXFMhWth9T+bZoATBHDOD/v43lBD820JRivbZ39+GqJeXMNWkylLSNaArUjwholuuA1tLDQRst9virTSvfCVV7HyXh/OvJkUI2YSWh9jvz5JcRv5L/xhsirTlmezQXNLYc4HT7MF7VCmGJuqpQcgXm+m6vj9uPY4JDofcTKYca3/rUshMOYm1bpjUjS0wevxhVbA0y+yNhVW4OqQt8fWaKmpBA9q0aiKqr2Z8YrZnVJJ6G05aTDniQMW0SuV0tL+AUOQ3JZu+IxY825dt2MBbkPmgeVvkiDfAm5+xGzF6cctOxOtlETsz2Tw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) by VI2PR04MB11052.eurprd04.prod.outlook.com (2603:10a6:800:272::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.17; Fri, 25 Oct 2024 12:22:27 +0000 Received: from AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654]) by AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654%4]) with mapi id 15.20.8093.014; Fri, 25 Oct 2024 12:22:27 +0000 From: Iulia Tanasescu To: linux-bluetooth@vger.kernel.org Cc: claudia.rosu@nxp.com, mihai-octavian.urzica@nxp.com, andrei.istodorescu@nxp.com, luiz.dentz@gmail.com, Iulia Tanasescu Subject: [PATCH BlueZ v2 07/14] transport: Unset transport owner before owner free Date: Fri, 25 Oct 2024 15:21:39 +0300 Message-ID: <20241025122146.17925-8-iulia.tanasescu@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241025122146.17925-1-iulia.tanasescu@nxp.com> References: <20241025122146.17925-1-iulia.tanasescu@nxp.com> X-ClientProxiedBy: AM8P251CA0006.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::11) To AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB8898:EE_|VI2PR04MB11052:EE_ X-MS-Office365-Filtering-Correlation-Id: 31c344a5-6411-48af-38e6-08dcf4efb05a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|1800799024|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: n0hoItHEVn6qfQutj9ZA9WjPmKRcwkgKCwswLd+4karkRBB96muwz8ndhCE29d+B/s8fysl6W9D0cyYvfWtVlKTJVxt209sCTX9S2Dz+jsV/ijKtL3TD8xkcjJR1HcI4YxyVUQMfpdy1CLFjdAb1+iKOo05SLyjMZJPW3/EwMgB8pwNYoAGY4LBF68qOY450buE0lagpMDOVyOyih2lvXwVdhg0ckTKT9vrv3RnRVRrldw96A9aaEc2FLf+9YqEbLG9OuX0anMIBpHZ4U028AmEzdwYjdPsiejMGw8Bj8mUgRNNf5ICmTTs1uKVZFKTRSDmmTvnAti/IOIau/95HCm1EGVEoD+NepI3AUJ0lRBXFJ4lxECy8t505QI2gRvFhT6VrAaNH6XrbtouogOhJD4CTWhu4PPsS1szOAvpzJqvhpHdBoXNSf5aZcUy5AXwTfxNxKUYLveww7j9A7Ld04J+SI9MwG/Mtjg8N4RI7WnJjcHEytv6FsSrLBuILwuZWMOwDKAjKO5wWNKN0n7LxcSt2JiZ9nQJhbl7GQqpRsMZQKdNMWwstV1mvkZ2JCuZY4SppvVCIJZGJAbYpTntVW3hgDeWK4bpHIBvPuOOol4PRzAB03Z8wXkXAXSZg5DvXiWDeWpZHss1x6eMyfsC+8MimfOC4N0F7WwtByg+zPxDxTlHXCw8VlwHBR2W81Cty6n2nznf52c2zQ2dT/6pLztwfBxnkDpO3xko8jrsZUSAlwWTsBnHttJMmws7UR+T2XjahdZVp+x+1Mmb44i1nV20bOa8nbEfoGw7Ga8ctE480dht/BYhiiZanI0gtsE6QbGyJeTvfCRMPaCcUVn/aJ6QfamhOP78E0qmL3lOXehAVLFgKlwMaNzwgM+wWIUaW7Nu+DcI+9UYis9TKsE62+nIgHC20ejDXG8nKMvN3Dwlan2RIxjuSUw23nSprVQVYH53PQ5VFrIaK0cpFpmdDVxMUfFIMKjIom6W0QE7L7aMkjjU2F8rhxHdq73gq97UVAT3IXfjzp7ckUdzT66Hbkze/pAi15LaVk8tiIAz7yQpEqyq0vPK1RGP2mapVxytF8bajd9F2TgXx+oN4V2MhTshrwWSc0grA/AOI6r+YrgIZWyYzt5nFAPhqN/OygOo+YIAYCzKF2fOzTsMlwXzXhcjjOh2qSSfRBZosssyxbSxzAQ3Dlum2KaId7XFn9HHjp3jWaLTKYZP/5z2h04q9LX59SciCPU12VzIqY9/ZbsG2jfqWjLUKI9qamlVedLJMf8yq1AqdiTUajt2RcdguRAzKGx480ACiogyM2U6nDStRdyZr7xW04Q96UaSnGeDue0HPjGEIL5t6b35ksTuxZ1whi23eLvnZL399OGS6Dx8= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR04MB8898.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(1800799024)(376014)(366016)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: puc0i1bTS1kkzTKgMr7hTcuo50sbG2N6P+T70KTfSVifjzMT8jU2pOLFWKq/Io9neV81q84nFqw66lVhJbVnqZpFFjkR1agOkcZwJxG5N4LHyvvVUth1LjjGKb/y/995grXza0Rpq7m4q2cSs0eKo6XtjWeKJ1tIiIXfLHeAmTcwwUghUGztH0xDKIVUmTiap63DB7Df7UZrbiZ4WpMV4VRq0EBgW6teF0lvLmllL+Xbh6yPmdVFU8lEDK7Aa0CF8cDTDkQ7NoJ4By94nBrrvuo9UirYfhPFtlZB5h6/P4I6eiI09XQtt9mAedTS9DqPwhLIAXIGf2FBl4jEldAEroWVXH07C1pk+oChnUcHbSXAqJtwGn11MYuxWfX/ineOkmSv3vHHF2wxuPsCsh4RStkvHK93qvnTGd32vy2wQZpeAktKv1/qaSKLrhDL1fCozc7cxSa9mPIgQeobstdO9JYu0sY1n5PSaLgyfQ36yEymkuVkz1jYe7RwUxBnV8QlNiW+n5/P5Q69xONBAAD8qN2eC7zCcrqoAfdvz1NwPlIqZyx9BrGjNP6DfvNbwKheUex3QGp254tOlXCqZ5Z4+DcPeY2YHKjeCya2bs6fr0SXiEn+sVCOMw6PlwODKhFC4dWgVHwnesB/lo3N8lDJvPJLpDVd0yN6MXo7IbHst4MRqbYxa9E6+f1GkHo3B1k23EK1ygOXlImlHn/bHpxw00exBGwKnjp5cR7xihiI1UuUL0nnsZnaeqG/VDoKpFQxZQaiUhyX71X2iWU4ykOtlDPgB3jnNCh94eQFFPcsw4l5MByhnPWP3Dk/E8AbzxMU7ryzelxEFVrVzcAo0X5vmhoY0ITHyroMlvGHyqRZEgmJ4cXAl1D0IZN+i+kDX/mzP6fzpqfE+KC6XKH5MIYBDzxN2Ki3uS5oEaRk644dKeMPBLqWfJHXk4jwcuarzAp6LfNYIYK2sshL+8uvCC7IWZ/uVVELm9kL8BQlNIHCYH/PCYMlMhrnI2d2hYtX6r8Pu9jmFMoQgZpRQ66UqT6tBLsucMJHYfrspuP4VscunsCPpZwfwK5ZiipbZmTGmxQkz8XFayG8nIUs8rPqbX4fYNvl4DLl6y+5EKWp+7lnL9Fj/v9x9nwFT04Y9i1OXiHEpeAwGTqQFmbD6ycIDin9OIxXdK2kd8cqsF5HJHXSFe/3d55cOOadu4omxOdYiXSE/FJbKAAM3D13xaDtZm4obql5JaBj1cyFt7zkZu4Xh1wFcBLIhvEKQf0aaGoEHqOu54eGESbobUGhVdjmwjVFUBZ0FwkDAZt3o95tRa7JszNT1Rrtea1wION9V8oBFvnLhYadk1OXOtwUTQO1MY8dQbVqwfWch3HiHfQPZM7mVeNwCe97vJY+JMZzzOox8ksJQzS64Nu+iaR9di+qOcNp7gC7vcU62Wu6LdIp2SleoYgDHm5y4KTEIJ2TX0jGuDTGnlkxFbXFjGTtA3cUF86OHUAbUsKP8dpxAFVdu819Z2/AwpT9/T11LWIwvwskzNeEnqmKUl2RgrQtSdOXT7auoIMc6zO6fkEqck2sbxD0obCGm0E8lsUP6uGO0rP4Rh95wCdfFLP0kMRXIfvaFBsJWA== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 31c344a5-6411-48af-38e6-08dcf4efb05a X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8898.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2024 12:22:27.3919 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: chJIzLXWSMI0Lrq4Zoaf3w0qe/hux8KvflNogKbmw8j+4MulzaRDgVVeo768gjB3BR2DpG1cNbbg713AAGTIcg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11052 This sets the transport owner back to NULL, before the owner object is freed. --- profiles/audio/transport.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c index d71013077..dafd1c471 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -287,10 +287,15 @@ static void media_owner_remove(struct media_owner *owner) static void media_owner_free(struct media_owner *owner) { + struct media_transport *transport = owner->transport; + DBG("Owner %s", owner->name); media_owner_remove(owner); + if (transport) + transport->owner = NULL; + g_free(owner->name); g_free(owner); } From patchwork Fri Oct 25 12:21:42 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iulia Tanasescu X-Patchwork-Id: 838485 Received: from EUR02-AM0-obe.outbound.protection.outlook.com (mail-am0eur02on2083.outbound.protection.outlook.com [40.107.247.83]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 001EA20263B for ; Fri, 25 Oct 2024 12:22:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.247.83 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858961; cv=fail; b=T5ugUuePgwgoPGIXEicHKdCJ90YVO7zq4Dg7OoZ2jtUYmTbeJMtkkeL/UYIqdSNMF0+kDVz6baGzjoiPUJMnTKWyHXWJ4X0XhfU5IJ+1mDauhdP63oMvV/qbqlD+FBs1Cv9ShAOyKScj08C7Neu92ZQS25U5e/ygoTo64o+XCCQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858961; c=relaxed/simple; bh=DBjw1HuhG9Hc1TTXpFthYCiqbR6nNuTPlts6WlPno80=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=BOf2xCV1aaz5VqlYxR5w2tOUEAklDrOxfNKakuvY/+fa+Y9N564ZF0yN40Z2RldrwGle/cEmBfOjGzlTLY1JGb69mhbnWf3yjiUrYkEIa60wZtQNusw2znV2NNWY4XXPAQfKUPyy3lPSJ0U48qYHVKsi9xT/dT+PuV2hOAj7Pdc= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=QGPA03EC; arc=fail smtp.client-ip=40.107.247.83 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="QGPA03EC" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sQ9WuSFxuAjG3zO/mqWrZxdyxldnHzdR1S8x+6aAqz+KlJZOccuHN5JPfMoqxWVsh/B5Rh+yyVejCXacOn6cIp2LJ4GybpqeR+HGaw6Qi2BhZuOAUtZtaxdZ29/+F8p0Q0vi0Z5YGaMaGTOXme4k77hI9L03GNQQcy8yf7kCJ1WYKUYSHgAzMRkC7LocY7xLaUCfasUxdXI2Hm9WibS5Fm70u/ZSDzh9mpCz9Hg19tFR16upfcCe6q5ZT9Wl2TL+VfH2hiuXODhRHmOT3jTqOTfstfVH/kbJefj34ZH2k3x13E2Aig+vAqIqifXwV/v8HKkOd9wpxaPCBv59983chw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=kwWf7rVpAhkvNGcoWH8mWav+kcSOW7QebguyLx4xXQE=; b=hcepwA8cwNjYOGI/W6cbx06BpwrN0/ziIeeH5d3kyHYRIjGRYbV3vTjOWdQCB2p+OiWmtKHLl3tWA9iyEx6zjIsHJWD1jlmaGne/M+UvuOByPs8mTuoCQDryOj3xUKpntu1mtLUZ6HSkWFnypy6wf9buZgLz3crgc4/0mosfKviOfRDVC9E5bRqV/Dur08oybvMFhx0+WNCEYYkvq5PwrUawmxjYt26T1Zl2nodfaTIz+eAoWEZWZNhYmYnlu7XTpXTrFMCZiDeDfZL5PxyE3b+j7b4w7Gi/2OxdHsSDzuY3TmlFpFsWIykwqbN854131J24vXvecS+7LGvbris6Fg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=kwWf7rVpAhkvNGcoWH8mWav+kcSOW7QebguyLx4xXQE=; b=QGPA03ECiUKFkEXnGotwmGnH4J32Q0kouoQUHlHzOTQhCMmLSKo4j3QXZkrrG1h0Tiyhf65SEHFkzFr2SX7UG8LoEcz5jSICUeXrOSqxKJ6ti4cYqt/a6+uNarLXhvaJUCnGFJTv0I8bMcZSUkJaNN10nfM98ohmWVZfW3X2hM+v8BjHKo8NQPRToPHRCTxSmksNKEfG+eCHN90qsZRWVzfzPfxtGTUqUc/9rfc0G+1JAcwLGGTvPQ1KsF0xeBghvCZgGQxWitz/NE2t5qqFiiRclvINNyA8TMPook3xnAMWobE5dkeHdJPNz93jSSTMl2tR+eiKnPkVZxeEq+A7UA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) by VI2PR04MB11052.eurprd04.prod.outlook.com (2603:10a6:800:272::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.17; Fri, 25 Oct 2024 12:22:32 +0000 Received: from AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654]) by AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654%4]) with mapi id 15.20.8093.014; Fri, 25 Oct 2024 12:22:31 +0000 From: Iulia Tanasescu To: linux-bluetooth@vger.kernel.org Cc: claudia.rosu@nxp.com, mihai-octavian.urzica@nxp.com, andrei.istodorescu@nxp.com, luiz.dentz@gmail.com, Iulia Tanasescu Subject: [PATCH BlueZ v2 10/14] transport: Set bap_update_links as transport op Date: Fri, 25 Oct 2024 15:21:42 +0300 Message-ID: <20241025122146.17925-11-iulia.tanasescu@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241025122146.17925-1-iulia.tanasescu@nxp.com> References: <20241025122146.17925-1-iulia.tanasescu@nxp.com> X-ClientProxiedBy: AM8P251CA0006.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::11) To AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB8898:EE_|VI2PR04MB11052:EE_ X-MS-Office365-Filtering-Correlation-Id: 57217cc0-ca19-44c4-d0a4-08dcf4efb30e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|1800799024|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: qZUiFMmDCRWnxQaR3gG/j6Jj/HyUN7BjIeMA0wsNtpDe1fHPG0SKftoRMWPJPor4e9e+H8qTIYF03OUUFdoIW0PdqYxTWBAhgzzt02GAtBfabacyYbbkeZ9AVzJC0W5zso+MCasnh2SjraW9Qc0pPS9n2yz6A2PnI1WuetDqVMcFOMLBX57EDGPd1+elM3NLallhwoHHVG6JQsOYJCBIT9M1KyoF3fj9KRLY0/gIcQwwEnArzzZkf+33+5wW7XxPY7/BsWIoVDfaT8EHCTcoCt0XmTwhtHDzQdyfscj93oWKMO//Z42as7EJAxnzQs1IcbRQzrDDyqdhpqQ5mbgvZeTslPnj5KBtG6WFrtwstVAy1KloWP/J0BZRQpMgdFlsVou2rUo9WOBpn1tbvIoimGwsS0WzBbbBuMPKBC4+QY+3OLhPiP99GJfdykLHDDmxGiq61przIuMRWzyptcVlNwzDgTMPhO1xW3DCyo42gSW8So5/qx+FOBgSxM+mZHrhDMyoxNpfGQ+G4MzHfOn+EraFOIXPmZcYnTa74FREkN/9RE2FMnjh8MET7kmf4XdI7A29YNygpukFXb5DUxZrn8SqLLfoz9KALvAHeTcFsjfvIdmIZ51kixhgC5ttZi1PKLQKxTr6YhA2FjFwSZJiGf+tjhKvvFDDG0ODCTYY9gOrf+Eoz27ZhRSTii1XlA5bmIWX/9CyxYaYfWV26dxMTzXwvKS7TxWs9I1eUwaDdYXVvM+DAFKgmZuD1xDtx9/Yi/FpjgvZ2i76q4LPVvEIT+RuYQ5jGLY8Q8CR+9HIghay0LtAmiiq6gT7JOD4N1t+KlneTAddEkuoabJ2DHMwM7TXVQPL/8iau7YVDNRPiUh31se4NOg8bVIDxDriJGQtunMYNQJwJJh5j+v9/0huMUn7mebrZ2ildaCZCWI23gz36w6oUw7ONSFXnvpXMO2hBXXPsLbqIw+NPJwCmIlwSKgYR6oToobMpA4WBCAZBZPdYeVffYQd5jbRZqrjfzSbs87Rcx+/Jl/I1b1r5bYATxP8DmEKurQxZM85zxc/BwglGtTxdLW8Yov24swporU3xsZhicEGkO3j/ERGBYkecRej46yzlo5vSSzYlxe5u0g5c16wDVyAlLTZLFFx0MwvQlwlzF2oi/Bd0/cCcLkfrD4otvG33rtZMoksY4SBnKsJtC7I3/iZSxiAsMUoOr1aG8UnyGbxPmdE3qYfRjtdIo7JYFQifmUT/2UHie6skN+Xw+IyvFQS9QcO9fyWRmZ6v/3vb0KrDWjkfxXxzUa6ZroiJRVGqt5RZtP8YV6IjqOW866Y8+KvH4x3GqS1gfL+v7Bzj0OuiWQQq21+9pJNSPdqyYfG1IQL01q15rXzJic= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR04MB8898.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(1800799024)(376014)(366016)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: x8RiH6+LXChgontwqEOYpEp4Q/+gpR3r9wUqHG9ZMWNP1D9TTwvcaAR2wtVh7SaKYr4S2+gRs89rJG/z9EuatvUnORXH1TQGEHfxfcR6ZUNIsELaPIR2OULX5ViLo8My/JX1yrrhDil3kYUFbIavE50vWH7q9ceTMFDkfeRbiFEFoSpemYNED4qNs3FYXeV/bZRV4FG2oZLAQiyep4JpzP1JtM39o2/FfMLUnIjlPbq83/2xCtNUnuGFpcbIn7O1eB/8MHVqG/RsPxc2B4fT6yTUqa16lSc/y08UlZHLKAPjTxY+OdjHw+bWQ6IWjPQEvjnJ1+JtjTqc6YFZxyw24gPvWqz7sPBrOsvUtQrQ6yfB38RTyTXXrdjCRje77Qa3rcAmgV5SSuj4SRv33EiNCTpmir27p99oKSE2M5f2ZJ0jXIQesSEEWeeFiJnXORj1qWJyz21k6U7d3gPyAaLA7ecOlapvjfydjTjKn7SnDNQssC34qeDEEaNrsP++YztbRYyabVRG4goiDTBSBquGm4/KmBqFripFKhgLsrrsTRb6OnyzwyLoSW8ZS7IF6JSwpfiDUWoA87MzOUyw22zqzLXV/JSy03VbkolZFgII59XTyaqaVEzJAutJJBUKPLZUyDgQM/r4ffSj1XnDYiNpEkkhCSd2TLt9P2OxuGLt3tLiPGBlUyU3kQVCKaZwvAY9LOloZ/w09tFGSRlwN5GXImGi2xjfUJh8NUwkowkp1ZGwYVrgRvafTRoK6t/P/H3o54CyH5D2FT53RmfEdOaSBZg3yJdnCxANfnagHow8AVPpbzRwpgk0uDQxLlN2aRjEGAO1RL4oXK3dsk4Ht7Eo/C0PxdHrGS/JOjK0hPN+tlbAgNTsGVCupPCrCxxvrOHprVSGXyhtq74GO4ZVZct4lT4QfnvyT2dKcQyzVrNuCYCGbijy2sicw6Kx5aK+vpA+biOIgIUot6MBEGZUFLeHnePuTxKzI7SLOJB4PHl4ejGXjblkvo+Vc5DU/sNUrhCLjBA341tlPLUDrqhKsNw9boOoLBFLD6hTNWjyB/tV9clBU/IBhMbOS6Xdlc9xxDGTdW7DuxPklXktc3MD6iQnjF95N8ZFo+rwrD9mPtOdmgzRX2o4tS1F85YK/Tu6Gy3wXjkx8jPryB1bbRrgtGpkHuLhAGG3A+0EFXgFG1jZOzL6HfiRzZvSjx3lGVBDTEPfui+7TpDF912pB6FUwjHZ+644vz3090nyKRE3Ton6DbqzDpkrITftSICOiq/tonuKnDND5eNueVTLgypQBLZuwjGVZW2TiopceDXYHCiJPfbaz9riE4l/mslldgesVE3JIVGmu/1kUDnnYLf+hUDvDTQlwWO+Lwe9EP89WjikAdwAeDS1qIA4lnShF2cCmvvP8/sSqtTYxnH9i1cqCj4QtpcS9p9OOdFvLfn4HidtLYY2jsFJKu7pmnPwGz1IG6T9vQyru/nKUAUywdWpcBAMpCl/1ER4inZpGqn6vID8AX4t9FXgufOgELPQdwr/O5xXOco9hNPgoTnZUwjRzuDSRirzBXu4KrY9d0vPjILoaKErqipvynJFJokEEsPhpByjyHNSsfr66E5MvngqHytnlg== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 57217cc0-ca19-44c4-d0a4-08dcf4efb30e X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8898.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2024 12:22:31.9196 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Y/pDI1POgs9F6qpcoBomQtVmarVhK9c+Wu3MknMeUbXYKjCNslRDtgs2C8Py9mTBJT3QO2bmAf0O0bjYekzaqQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11052 This implements bap_update_links as transport op, since broadcast links need to be handled differently for unicast, which only allows one link. For broadcast, the property changed signal should be emitted everytime a new link is added or removed. --- profiles/audio/transport.c | 45 +++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 8 deletions(-) diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c index b3bcbaa19..2f5ff6de0 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -116,6 +116,7 @@ struct media_transport_ops { void *(*get_stream)(struct media_transport *transport); int8_t (*get_volume)(struct media_transport *transport); int (*set_volume)(struct media_transport *transport, int8_t level); + void (*update_links)(const struct media_transport *transport); GDestroyNotify destroy; }; @@ -1628,7 +1629,8 @@ static bool match_link_transport(const void *data, const void *user_data) return true; } -static void bap_update_links(const struct media_transport *transport) +static void transport_bap_update_links_uc( + const struct media_transport *transport) { struct bap_transport *bap = transport->data; struct queue *links = bt_bap_stream_io_get_links(bap->stream); @@ -1651,6 +1653,30 @@ static void bap_update_links(const struct media_transport *transport) DBG("stream %p linked %s", bap->stream, bap->linked ? "true" : "false"); } +static void transport_bap_update_links_bc( + const struct media_transport *transport) +{ + struct bap_transport *bap = transport->data; + struct queue *links = bt_bap_stream_io_get_links(bap->stream); + + if (!queue_isempty(links)) + bap->linked = true; + else + bap->linked = false; + + g_dbus_emit_property_changed(btd_get_dbus_connection(), transport->path, + MEDIA_TRANSPORT_INTERFACE, + "Links"); + + DBG("stream %p linked %s", bap->stream, bap->linked ? "true" : "false"); +} + +static void bap_update_links(const struct media_transport *transport) +{ + if (transport->ops && transport->ops->update_links) + transport->ops->update_links(transport); +} + static void bap_update_qos(const struct media_transport *transport) { struct bap_transport *bap = transport->data; @@ -2105,7 +2131,7 @@ static void *transport_asha_init(struct media_transport *transport, void *data) #define TRANSPORT_OPS(_uuid, _props, _set_owner, _remove_owner, _init, \ _resume, _suspend, _cancel, _set_state, _get_stream, \ - _get_volume, _set_volume, _destroy) \ + _get_volume, _set_volume, _update_links, _destroy) \ { \ .uuid = _uuid, \ .properties = _props, \ @@ -2119,6 +2145,7 @@ static void *transport_asha_init(struct media_transport *transport, void *data) .get_stream = _get_stream, \ .get_volume = _get_volume, \ .set_volume = _set_volume, \ + .update_links = _update_links, \ .destroy = _destroy \ } @@ -2127,22 +2154,24 @@ static void *transport_asha_init(struct media_transport *transport, void *data) transport_a2dp_resume, transport_a2dp_suspend, \ transport_a2dp_cancel, NULL, \ transport_a2dp_get_stream, transport_a2dp_get_volume, \ - _set_volume, _destroy) + _set_volume, NULL, _destroy) -#define BAP_OPS(_uuid, _props, _set_owner, _remove_owner) \ +#define BAP_OPS(_uuid, _props, _set_owner, _remove_owner, _update_links) \ TRANSPORT_OPS(_uuid, _props, _set_owner, _remove_owner,\ transport_bap_init, \ transport_bap_resume, transport_bap_suspend, \ transport_bap_cancel, transport_bap_set_state, \ - transport_bap_get_stream, NULL, NULL, \ + transport_bap_get_stream, NULL, NULL, _update_links, \ transport_bap_destroy) #define BAP_UC_OPS(_uuid) \ BAP_OPS(_uuid, transport_bap_uc_properties, \ - transport_bap_set_owner, transport_bap_remove_owner) + transport_bap_set_owner, transport_bap_remove_owner, \ + transport_bap_update_links_uc) #define BAP_BC_OPS(_uuid) \ - BAP_OPS(_uuid, transport_bap_bc_properties, NULL, NULL) + BAP_OPS(_uuid, transport_bap_bc_properties, NULL, NULL, \ + transport_bap_update_links_bc) #define ASHA_OPS(_uuid) \ TRANSPORT_OPS(_uuid, transport_asha_properties, NULL, NULL, \ @@ -2150,7 +2179,7 @@ static void *transport_asha_init(struct media_transport *transport, void *data) transport_asha_resume, transport_asha_suspend, \ transport_asha_cancel, NULL, NULL, \ transport_asha_get_volume, transport_asha_set_volume, \ - NULL) + NULL, NULL) static const struct media_transport_ops transport_ops[] = { A2DP_OPS(A2DP_SOURCE_UUID, transport_a2dp_src_init, From patchwork Fri Oct 25 12:21:45 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iulia Tanasescu X-Patchwork-Id: 838483 Received: from EUR02-DB5-obe.outbound.protection.outlook.com (mail-db5eur02on2066.outbound.protection.outlook.com [40.107.249.66]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5A4BA202F9D for ; Fri, 25 Oct 2024 12:22:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.249.66 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858966; cv=fail; b=iPnmJICVsmswmmt22Xr5+QZgZiOfH/x36Rsc0rGNr02kL9rwx833gm00pJwbaVv6g+TIEYER/apHP+rkF3rRISZugNGoPFQh0TNZkZJ/DM1dne2UEGh6ueLo8tWQK/Frc/KABSEyer1ETISmZhj7W6t2RjXvpghrjWjx0nhCtgg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858966; c=relaxed/simple; bh=A0KlTM+60pSi/BKDq4BjaLDPFP2MgJPBvuFCET9441Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=myzaYtDmspVjuMEC7nE5t1Qrnsjr9rktGRDg2tsf3MUvrq/kzMTwEmpXf+RXdPNroxpZeNcmQECw+CJZCHI4RPF7tDRrkdoaeOIlnaLEH7cy1Kd+Jlowrnj/4S4kRwLL2hHi6+bLBp1SkzhrAIpGJYke0355P4vZKhB8kWamDng= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=lW0Mibz2; arc=fail smtp.client-ip=40.107.249.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="lW0Mibz2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vVetc+7tQFnxWuGBRGUkP0xJzO3HEI1vKlo5fi/jkUloPF4KbeFvEabRoRHKR5ugdqac7ueFIXkDmFt4lvBxhZqN/ZVlUBltgxL+9LSwmLcoRp+RFvdNKDO07+Da3uAAf+ABRFnnP3mLD+hO84Pj7dYTq4mKmZ7h9s43XvTuk6Wuqe/OFFYWhfAKiaD7nk4r4G1wilKPToAuFpdj9i+0RRXjaPKWLleMg/BHNy2t34EUmgd9R0BwyQSWVLecHQIGfrdCUWa4utooKohHNyKK+beilsNrICXomuxJO30gvd+siZNurlkh705Yl31tMa0aMzUdBh+pqI0vdNakOjvdtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XjqyURUXzN1ULLwz0SXvnnDaimcQuKYmFBvTLDq0ePM=; b=tubO9Q1kPc+ri3QokMaB1yyJXXNg0naWtyxgyu/c5e1mNhjkCZ9CxMNWLsvOXzyS/rpPUm8zqM/mO9Sc2vi0ZIJV7aqRN+YNm0T7AGTayKA7NLUDCGxeiceNQaGoOfiSruRJ+UdOaicbC4bfEzDiBcWBBSnF/GIYC19S7ydBnVgdznBtyvjIqrJLVrRbb+IiH2FrZiUYo/pzDuBibD79+JZ4Oa95dRNvNBtpguvKCbj5kz0TAKNAV9sAsL0u1L/x0IVBbRdQnwEVQrCpmXtvhdpY3XtfRk4KtVfZZy9T6DP4u8eN69z6iRBeyb7ezwNOhtSj+32ZckU6GqT35BmxMQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XjqyURUXzN1ULLwz0SXvnnDaimcQuKYmFBvTLDq0ePM=; b=lW0Mibz29sZHAsQ6YGBI73PQr0krRHslGLGc+7LVW2YXHaUrbvV5LxiSkUPeDtiyBbD62mZSRVoWK+8tFS04YYBnE5KsEINifWurt4zeabE+U4Odjsv2M6Eew1hTWHpXpgWqRDcMxTbJG7XpKPaSsqHerWcFgO7SzZfo9ZuOYFO35+z3pNvSghmY6e2i5DlxNTy94/yHtUtTnG6NZqc8AZxkN8o+l1KEfCB5/wj3ewWV9LJr90cJru8iwOCHOaI6GAkMq/++5arz0yN6d0lNA1TI6rLz/owvDBxyNZVVZCHRHrV7HeE5nKyFq9FfH9h/8sE0/W/pVweT9mbIAlGaVw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) by VI2PR04MB11052.eurprd04.prod.outlook.com (2603:10a6:800:272::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.17; Fri, 25 Oct 2024 12:22:36 +0000 Received: from AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654]) by AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654%4]) with mapi id 15.20.8093.014; Fri, 25 Oct 2024 12:22:36 +0000 From: Iulia Tanasescu To: linux-bluetooth@vger.kernel.org Cc: claudia.rosu@nxp.com, mihai-octavian.urzica@nxp.com, andrei.istodorescu@nxp.com, luiz.dentz@gmail.com, Iulia Tanasescu Subject: [PATCH BlueZ v2 13/14] client/player: Add support to select multiple transports Date: Fri, 25 Oct 2024 15:21:45 +0300 Message-ID: <20241025122146.17925-14-iulia.tanasescu@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241025122146.17925-1-iulia.tanasescu@nxp.com> References: <20241025122146.17925-1-iulia.tanasescu@nxp.com> X-ClientProxiedBy: AM8P251CA0006.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::11) To AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB8898:EE_|VI2PR04MB11052:EE_ X-MS-Office365-Filtering-Correlation-Id: dd15d039-96f3-4d68-e962-08dcf4efb5a9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|52116014|1800799024|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: HYlqbBNlBIRo6I/rh4NpyuzTBmfPzM3BaajS9hJMDNQQlYZ8KFhIIpfyySlstaQNlLxiQ3PHR/1qgHyjpA8e0r7mHqH/lUxRlwp4ASbHKB9ZtYvr14deS6Of1+iL359Tn99M9/DR0xS4PzJNaE6YlZsBs5VbwJXTV6rKt40uoajErJExXkfDZAV7Cf9YX5rjOe7r+HfXUIdeiRbsN76xiqKh5lnP3QtGgxM/yOxiEOqUvVvoTiNOct8FydBSttZqq3VY9fEhnQXWRf2+F/gShlN+X5UpHKUJsA88rHomIuQ0vN6SQFh0/20TDfu0S9f+XcXNHlhS6+5Grq1yY0T0GTubU9d857EZo5FfPvWWkwDfmopMsJ45OaPOSypljPGtM6/bujvVPT+2nVt8vnJIb06FydZVA7NfvAUChuH/SuK+Wrfcm1C/7PmCfC69ni/dAwlAex3plMUHL1hzhXpzQ6BQQqFTpOhmVOvH3+fbLqBwKi32eCv/z0TFas3jSCgZr+TAgVK/wr9vDC7B8g94xJLkdOfB8DxcJDkdqsmYW4wGs9+dw2TBA0WwGueW403OIz+Gx0Zw/kHk4g469sW4njU6AwktbRoltgBzA7wIbA6/bnJXl6QvUUpJBQIaW6NMhAK3gSJDOfB8ESaBjymIeCDJFUOWAd4VmQL/NyI1tGxhtMZJg1avkMKGd6jEJdhztUwdRBdbaoCjBRk9SPAz5aAu5xG4ZuK0obBKvnllhsgsG1TV0e0Upu5iwITr5uIbhTAXGnzFrReCvjpXAxuvs2DybO7uAu3KctvGgq9AyCLKCOccDOSUP2NMIahjn7Mde8rGi4ilyLsTaKyfI2DWrHJsi2NU9M2SR4pnBNa0HB/UcQrh0Slm+RfsT4VuLzttFSp6oMHULNqO4Mp39t9DvHeyuef59jbCc6XINuC4Age//pYFxAAWOzzcqtBSQOKRX9HV3QXGNqS9aPRTW5/WpGZe1bQwGEQAzgv9sOH3g1wLAXIoJT8WCqDWn3F6SJcwrEcCz/u2BLqIEeAXATdeKufSrNJWOSaB+Wmw1h/t55YwCIL6IgRrQMtMZH7BuRAkdSSTq/EbKNzO5rykg2T6JL3tZvKlpD9pLfp4gnlg4gySXBPTKF/eAT7ODehf4qApQKB+zCjO9jYL+lAADq2/NxjLOtLaTStE5xXcch3N3ToFHF2WKIueqJr5mSGMN86P7e0RY+Rz36+BX2A8jKzB1tMjhI87hZtCoT0Z8JBdW0eu+QHLEZX5Sk0IVZe6qwFsv17KD20aXfS4G6RMPS3e/8jg+dcrJJ07C7ftuKiOXiFgQQo87pgE+7PMIqzB8eJJ4t573T3aAsH3v6tQb4W3jXFaOCqbQDse8o3wrsiDL8A= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR04MB8898.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(52116014)(1800799024)(376014)(366016)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: NXGZ1w2BQX7uEcyfTN0JYVKUqBW+KL8tovwlalJhwU3mguc3e996RyXMwqIKL6Djl2LINvE4zHyvHlL4ZlQwF/yp0yvkj6eyNd+pAY41sNfCBj2VDa872ADzlDj0YP/iXTX83uwF0gM+15lsi8t5SOtJYarKmLLhadn1tzjQbrk04lMEHT+re+4tSHxgTC2mQmOgTs/jqD7P4P1bEI3AqQlil6NWSSCVXqa5USDKJ8s350wLhq1cSmR7EiyAveh464FAhkjroUdY1GplYtjl4FCn75BE9da3r9DGoTWx71L2Hf77JAVYdm13BMDWG6caO4dhWXZUqVngueUyPwHzGvIT6UUY9tt24usgKaNKUY+3e0lYD4Ssy1gx7NgqQd91KVAlxvIcfkWTnAGmswRq6YEUacMbdb4+4xJ66+tG5Yoo2ouRWhnbNMUnMnco2phg3Lyt+wRfva/VgEPbSepPK3fqS5AFVgVR5BPxFR9lHDCJD3EUfo/VLPdLDqpLNvCYsX2xvWCUtLgN1oK/ay6/QHsH3o8hu1oSOyz5HowLb7mdi6SUs8H2dVcBHAYx2Dmz/pamCySiw7ZioqzPo/AydojHWwA26uPHIgwrRQ7qCQGO4BIYwEbzNcU6iDWOZ2OncketBop+hy1MLtwtE8y7h5c3Li4BCSJfCty006hZP40w/ImxM28mZltSD6AHl5SJQ8+wzSNQW/i3+iX5v+IttdAgL9FL7EtJ+T2zo9kMrBPxjrynuVr0lIGgfcSiqaWm+rIibLgMysrNizmeD/9XmghPbhejOdROsqs8SFke/5O6N9E4kkC0ReTsX65m3vDPHdkMJBy+kleNGnAc+f/d4FJJrhDd+1rxypZhspoTrDDyGMmRBkdxxmD7nwFqMIgRmH96+drHki5ZiAOx1xx6CtWyG5caOULkHiUCzADFzyy/CkJ0wmRWkMxt4g89405f7jGlCQCO4vRIn1sjflAAd9VC6/wUS8R+silphns/3XRTtg51uvYSm83OHsUy9LaR1yr39/MPgn6PLQJ4qN9sysywNCetTFFZiElooJ7oUvdZjcDqPzWbiNtkpKJiSMx5UyEeqfTYocz5mdUwvS82ouZvmB7mXqzCFqlOlBl6Ud/JugS2Um32bSMcSvS3jCao59DyPbk67ZqM1Y06ziPcmmXO8Wxxs6HuljRgsW22eY3UCRajveN328nf+PwqWiHXqF8tTYcdAMRwiOfCg579IsUplSqq0t+ZMTxSxHjaRqPOXgaP9etrNLUT0g+J0wW7278kh6p1re2unWZZHXmQrjekFa6/TQc9ZiIPxk6y6Mz1qa+yLF/aC5a7Mn1ZX5XvjK6lqFcWALT02i04vwS0T/fDpomNBNgYnP5nw15t00iZ9AA3KPt7L2dMjVMqwcznzJeJK+eVPuaokyXoXMulLZsxza7ppDtCb0BtEuTayGahSfMmoucWxu+xXyIUzXPYb1I4NzbkY6Qb5E9ICYpLRidhftPS/lZKZje5uYfwvK0FzK+rUBo3qk2U0hEOwAEAGP+aUl6WWgCpEXQimNtgZNuE6gLm+L3atseBu/g3GwKqKCp/dnfKO/BYupkzBp1j5gL7/+MJXoU/8EvvZ0r9qA== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: dd15d039-96f3-4d68-e962-08dcf4efb5a9 X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8898.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2024 12:22:36.4421 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Rd6ftjgtReq4GIpuq2A6ZM0pT9BG2HdHcqy/IQAbSGbi+3i5tvlfFy2Q2cEwYShmtJjCyaCiCQ2wlK0qSVcTQg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: VI2PR04MB11052 This updates transport select to link transports together before calling the "Select" method for each of them. The bluetoothctl log below shows a Broadcast Sink detecting 2 streams from a source and selecting both of them. After the first transport is acquired, the link is created and the first transport goes active. client/bluetoothctl [bluetooth]# endpoint.register 00001851-0000-1000-8000-00805f9b34fb 0x06 [/local/endpoint/ep0] Auto Accept (yes/no): y [/local/endpoint/ep0] Max Transports (auto/value): a [/local/endpoint/ep0] Locations: 1 [/local/endpoint/ep0] Supported Context (value): 1 Capabilities: 03 01 ff 00 02 02 03 05 04 1a 00 f0 00 02 03 01 Metadata: [bluetooth]# Endpoint /local/endpoint/ep0 registered [bluetooth]# scan on [bluetooth]# [NEW] Device 17:7A:80:64:A7:93 17-7A-80-64-A7-93 [17-7A-80-64-A7-93]# [NEW] Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis1/fd0 [17-7A-80-64-A7-93]# [NEW] Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis2/fd1 [17-7A-80-64-A7-93]# transport.select /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis1/fd0 /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis2/fd1 [17-7A-80-64-A7-93]# [CHG] Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis1/fd0 State: broadcasting [17-7A-80-64-A7-93]# [CHG] Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis2/fd1 State: broadcasting [17-7A-80-64-A7-93]# transport.acquire /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis1/fd0 [17-7A-80-64-A7-93]# [CHG] Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis1/fd0 Links: /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis2/fd1 [17-7A-80-64-A7-93]# Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis1/fd0 acquiring complete [17-7A-80-64-A7-93]# Acquire successful: fd 8 MTU 40:0 [17-7A-80-64-A7-93]# [CHG] Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis1/fd0 State: active The btmon log shows that sync has been established with both BISes: < HCI Command: LE Broadcast Isochronous Group Create Sync (0x08|0x006b) BIG Handle: 0x00 BIG Sync Handle: 0x0000 Encryption: Unencrypted (0x00) Broadcast Code[16]: 00000000000000000000000000000000 Maximum Number Subevents: 0x00 Timeout: 20000 ms (0x07d0) Number of BIS: 2 BIS ID: 0x01 BIS ID: 0x02 > HCI Event: Command Status (0x0f) plen 4 LE Broadcast Isochronous Group Create Sync (0x08|0x006b) ncmd 1 Status: Success (0x00) > HCI Event: LE Meta Event (0x3e) plen 19 LE Broadcast Isochronous Group Sync Estabilished (0x1d) Status: Success (0x00) BIG Handle: 0x00 Transport Latency: 0 us (0x000000) NSE: 3 BN: 1 PTO: 1 IRC: 3 Maximum PDU: 40 ISO Interval: 10.00 msec (0x0008) Connection Handle #0: 6 Connection Handle #1: 7 < HCI Command: LE Setup Isochronous Data Path (0x08|0x006e) plen 13 Handle: 6 Data Path Direction: Output (Controller to Host) (0x01) Data Path: HCI (0x00) Coding Format: Transparent (0x03) Company Codec ID: Ericsson Technology Licensing (0) Vendor Codec ID: 0 Controller Delay: 0 us (0x000000) Codec Configuration Length: 0 Codec Configuration[0]: > HCI Event: Command Complete (0x0e) plen 6 LE Setup Isochronous Data Path (0x08|0x006e) ncmd 1 Status: Success (0x00) Handle: 6 < HCI Command: LE Setup Isochronous Data Path (0x08|0x006e) plen 13 Handle: 7 Data Path Direction: Output (Controller to Host) (0x01) Data Path: HCI (0x00) Coding Format: Transparent (0x03) Company Codec ID: Ericsson Technology Licensing (0) Vendor Codec ID: 0 Controller Delay: 0 us (0x000000) Codec Configuration Length: 0 Codec Configuration[0]: > HCI Event: Command Complete (0x0e) plen 6 LE Setup Isochronous Data Path (0x08|0x006e) ncmd 1 Status: Success (0x00) Handle: 7 The second transport can then be acquired and it will go straight to active, since the fd has already been set: [17-7A-80-64-A7-93]# transport.acquire /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis2/fd1 [17-7A-80-64-A7-93]# [CHG] Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis2/fd1 Links: /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis1/fd0 [17-7A-80-64-A7-93]# Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis2/fd1 acquiring complete [17-7A-80-64-A7-93]# Acquire successful: fd 9 MTU 40:0 [17-7A-80-64-A7-93]# [CHG] Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis2/fd1 State: active The transports can them be released one by one: [17-7A-80-64-A7-93]# transport.release /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis1/fd0 [17-7A-80-64-A7-93]# Transport fd disconnected [17-7A-80-64-A7-93]# [CHG] Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis1/fd0 State: idle [17-7A-80-64-A7-93]# Release successful [17-7A-80-64-A7-93]# transport.release /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis2/fd1 [17-7A-80-64-A7-93]# Transport fd disconnected [17-7A-80-64-A7-93]# [CHG] Transport /org/bluez/hci0/dev_17_7A_80_64_A7_93/bis2/fd1 State: idle [17-7A-80-64-A7-93]# Release successful --- client/player.c | 47 +++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 41 insertions(+), 6 deletions(-) diff --git a/client/player.c b/client/player.c index 81d967a28..66a26ef40 100644 --- a/client/player.c +++ b/client/player.c @@ -5173,8 +5173,9 @@ static void set_bcode(const char *input, void *user_data) g_free(bcode); } -static void transport_select(GDBusProxy *proxy, bool prompt) +static void transport_select(void *data, void *user_data) { + GDBusProxy *proxy = data; DBusMessageIter iter, array, entry, value; unsigned char encryption; const char *key; @@ -5220,28 +5221,62 @@ static void transport_unselect(GDBusProxy *proxy, bool prompt) } } +static void set_links_cb(const DBusError *error, void *user_data) +{ + GDBusProxy *link = user_data; + + if (dbus_error_is_set(error)) { + bt_shell_printf("Failed to set link %s: %s\n", + g_dbus_proxy_get_path(link), + error->name); + return bt_shell_noninteractive_quit(EXIT_FAILURE); + } + + bt_shell_printf("Successfully linked transport %s\n", + g_dbus_proxy_get_path(link)); +} static void cmd_select_transport(int argc, char *argv[]) { - GDBusProxy *proxy; + GDBusProxy *proxy = NULL, *link; + struct queue *links = queue_new(); + const char *path; int i; for (i = 1; i < argc; i++) { - proxy = g_dbus_proxy_lookup(transports, NULL, argv[i], + link = g_dbus_proxy_lookup(transports, NULL, argv[i], BLUEZ_MEDIA_TRANSPORT_INTERFACE); - if (!proxy) { + if (!link) { bt_shell_printf("Transport %s not found\n", argv[i]); return bt_shell_noninteractive_quit(EXIT_FAILURE); } - if (find_transport(proxy)) { + if (find_transport(link)) { bt_shell_printf("Transport %s already acquired\n", argv[i]); return bt_shell_noninteractive_quit(EXIT_FAILURE); } - transport_select(proxy, false); + queue_push_tail(links, link); + + if (!proxy) { + proxy = link; + continue; + } + + path = g_dbus_proxy_get_path(link); + + if (g_dbus_proxy_set_property_array(proxy, "Links", + DBUS_TYPE_OBJECT_PATH, + &path, 1, set_links_cb, + link, NULL) == FALSE) { + bt_shell_printf("Linking transport %s failed\n", + argv[i]); + return bt_shell_noninteractive_quit(EXIT_FAILURE); + } } + + queue_foreach(links, transport_select, NULL); } static void cmd_unselect_transport(int argc, char *argv[]) From patchwork Fri Oct 25 12:21:46 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iulia Tanasescu X-Patchwork-Id: 838484 Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2078.outbound.protection.outlook.com [40.107.20.78]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F21AC2003BC for ; Fri, 25 Oct 2024 12:22:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.20.78 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858963; cv=fail; b=jCE71BZFEgKEXRLqAwBQt0XUXWGMfcxJHkbfean5+PcDezJh27PWy6l4GkyFJMrjhNJ9UIx1/v8jhs34Cy1I0jB4bVrP/hcnqq2f8mHxLyQj/2VBX6NQq6BM6w/4R9oPZudEpBMGG/RKC5WWnqFkm5PJAm02wXJZ7VWe2MBgwLA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1729858963; c=relaxed/simple; bh=aptpSCqH6pxjKOB/xIFyw1qsWYabgNFS7EDrumA7kxg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=gLCWVxOJw0phsc76ZPwLEuhN1ZmRUj17mWTOnYUJnlL4DVj7Z/3ao9JxXRzIM7CzoSO9xmY2cI6fPqq2d+vpbIbDckS9N7fY2NB7bE+stZMZ6jlGrITjvOxL6ZzyQuWiga8QxEgDlvPn+T0Jd3aPxLDNObqFdVUkZf4hHvGvhpw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com; spf=pass smtp.mailfrom=nxp.com; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b=bKEor026; arc=fail smtp.client-ip=40.107.20.78 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=nxp.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=nxp.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=nxp.com header.i=@nxp.com header.b="bKEor026" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IsTjzfVha+6n7BPay/2F6O8NdhAcJit25BqSWrF9k8vZWa6kvXh0tWT9b9J0rvaIZrhBee4/WpdTqPa/JR0TXfHoaU75gJaZ7rl9nbpWflHCAYC70b10yQvGnaFzJ3QDZK95tnMXmq42v9CoEX0e0f+WB/aXctUoq40BT9tWXmDEv3UXoExHckov5RXOunBnAsqT/mexHBiuOEqwsk/E2PeXU3utz/5AOBDt8/A8qW7rgY2Eh49rsbkKvwG6vl837nu5M8a00+1Zz+R79KvZJiKU9fK3VCvo+9VajPWkHGKgOSra5qOPCiFX0RgyNw90HNBWvoyu36IKCxlpxJXtTw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=L2aUKoPzRSyH7ntYn26/cxnlFeEcu2EtfFfDD2XBHlQ=; b=wW+ONM6gOQ++irCr0ljg6olrSBe790oSiOxBTD4KO/h4wVD+EeRYQlIG3Ubg9u5WXka6piAIlGNCYv20Mcy7Qmcr5PoXkz5gYeXj6+ouX2P1/8X6zy8q05kE/lmRrp0cIY35MUKqkehwXfzN0D3Tl+QL1TiR7ow8EwFhBdBCW8ZxUfdlixdyrYa46e4f/ClYaJ3hP8MLNvmhCtCLg4mTtKtDGFoOcp79j/1pfoNSzl9OWczN1ORV4cBm76I5NsxaWpGOgX90A37/YB4DacBGeRy7M2CysIwTTLBLCiMH6aUB/VAKtLFtfrW7KR0NTmnGE59ykCnJIDH82enkm3Rs0A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=L2aUKoPzRSyH7ntYn26/cxnlFeEcu2EtfFfDD2XBHlQ=; b=bKEor026tK0TFkwZ5L5Pn8rmea7iTyC9I2EBHzZc+OXZMS/Js9m61op9N99H9JXZY1Q++taC+XdoS5FsDRHS9hdMQQHhi05mXrHADgi0Y1XUjfg2699oKe5Lwd+NSLjI0MuWtMJcZUxitYXl+N7H28wKdVjlXTruCsfUjdepEZAHJjRpXRSpDBM+YM02sI8or6POrrNly4BBrVb6m1nqq3q/npDya5HUoyOLhLxqiGjYV1sz/EESKtCtkI8EstdSYCtdEHsPx1B7t9t3gY3DntYajcLlJgewzmvP3xw5GUKtI429JdbL/AowOwLRiz5pSs1bDRuOeDnZsVc5UEzQlw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; Received: from AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) by PA1PR04MB10843.eurprd04.prod.outlook.com (2603:10a6:102:480::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.17; Fri, 25 Oct 2024 12:22:38 +0000 Received: from AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654]) by AS8PR04MB8898.eurprd04.prod.outlook.com ([fe80::5e22:869c:33c:9654%4]) with mapi id 15.20.8093.014; Fri, 25 Oct 2024 12:22:38 +0000 From: Iulia Tanasescu To: linux-bluetooth@vger.kernel.org Cc: claudia.rosu@nxp.com, mihai-octavian.urzica@nxp.com, andrei.istodorescu@nxp.com, luiz.dentz@gmail.com, Iulia Tanasescu Subject: [PATCH BlueZ v2 14/14] transport: Unlink broadcast transport at release Date: Fri, 25 Oct 2024 15:21:46 +0300 Message-ID: <20241025122146.17925-15-iulia.tanasescu@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20241025122146.17925-1-iulia.tanasescu@nxp.com> References: <20241025122146.17925-1-iulia.tanasescu@nxp.com> X-ClientProxiedBy: AM8P251CA0006.EURP251.PROD.OUTLOOK.COM (2603:10a6:20b:21b::11) To AS8PR04MB8898.eurprd04.prod.outlook.com (2603:10a6:20b:42d::15) Precedence: bulk X-Mailing-List: linux-bluetooth@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: AS8PR04MB8898:EE_|PA1PR04MB10843:EE_ X-MS-Office365-Filtering-Correlation-Id: b9aa9ac9-c265-46c3-0787-08dcf4efb6c4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|1800799024|52116014|376014|366016|38350700014; X-Microsoft-Antispam-Message-Info: gghg6ewZqO7W3Ik7WgMDU8lIIEeRxEQey3zdcDz385Lfybfhr/qDJX/5pOjhz9CLFe2GA12idkI4KpMqvFW18Ee+OKDi1RoCqApreO9KQZGcf3F3h0ScEM/woeSjRIj7pIfpyha6j6h3i1KFi6URhfjoIZ0abZAN84RQQo2cc0X2lF6Bol3JMu8GBojAE5R/D2TYoxwT3dPCSoKm93yR6mQsEWARy0WpmT5yhdyIJE6vBlIJo6xMo2k7fLfzsQ/8mE6yLB5FSuEk50ThvqKufw5kxevOqLY4/wr+2JT4CJJR8yQHZe3ojJSCR5p6CNutedc+8KNSDdrBhN/tal+u8AbWHPOiumHNgBQMGpuuunLi0GvjgcUgOX+t6AEw7g4J3ZAltUVA9bBYWIGWT5Ie9m15KQW1Dts9qUOy8HV7GkQkhKKlhd/Tgrcfk7ectQyFKIU4unP8xONfCeQaCS0grhqnweDiFHtZuLRsKnEzi4ZCkQs2pb0DIX2mtTdmqi08/iI9sW7+0/P08M8VA1SO0gqnGBm8JNt2ax0vvyZkxfIchRmTHuEP0+aUt25IPDddCrb59oj3TIts9ssqfKMQecvl7yzgMMutdWkOPGT6m93++6fIBf1werCLz/5ixAhs3rBQlefl7HQx+wdWgsW35t8+P82GJzBEU6klfZaoW9E3CLny1t7fGdbGG5zOo6/8Hg7JXSZO56VxB+hEbYDwEHReZ+fY6bypCmkKlW3QyOqhmUrOZdQjIRyK4Bt5caVmomCWxgMznPFx6oj7+PlUoq8GyJ8BZsTxdcPxQ5Pky9aDcvIdGMWLZHH+KBSlNNdtz4cEHMC1URWDZu/jXLCEBpsiFFfexCfbML41DcVbB5/gIWIKmowEDcyIoNy84JzrlFdI9IVVi7DglffkB3Ml6ce0moyjQgUiibY6GewFtEj9iMI0nJyBsLYFcSst5Q1ZkBtfhYyOMNLtbgJrpXcN2oKU1DUPXKfVsC4WeVD0wHTkO8SGUtz21jDmoFeL5sZxv3jZmW9NxDNzvVKjy92QRQvBhoKAjJl1iqkmVV532C0b0xRmxF9CXwCGV9Lud7t+HWC1QkvFLLTKbrAaz3mTkvE94/heV1/V2KrkQADYHCFa0UGR0GVPTAgCPWx/2homEwDVfkSrBorFjR+IsJIuSKY8SAtMMcJB6Lns00RM/MF6r+S1Osby7PPv+vz0TN51k0NZcbh5XtG/Oct2q1mwbWoS+Q2sppPY+oMwGm+6/qe1QGPdgFcxxI5MTYv6C0mwArFhJkgZbY9AIe1uY37gqRdYOg31VCapbMhL0OILx9MtPsTSrVR41gBos6nKM9XDSGGhXJwqA8qt11Tfzqenvyu5pzl0Xka3N1U+05PLVIs= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:AS8PR04MB8898.eurprd04.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(52116014)(376014)(366016)(38350700014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: CzrFZ0jr46IPeERYCT5B9FQchkCm/rc6Oaaru1esZjCUxPhGiWIG7QGIXkelFn6FJIpDtzXrIaJKv+gpStRgBbIIfcFmAYgRkSRH8twgpYDZBZ4uw4saq1k1WvH0mn5TsoU7/Gm3WZkfHtakckYX5SQ/PobftOt5BAfaYCnR8NsWJzh/BjEGbdjN9OWyrHggF3jnM349Oh19bVV2nfGW87KmTs2h2HIj5chfps9zieDsGKURFDFX4+FWfeao5ryuU3qqP8NPxm2AzliidL+3aCoLBq6EHHZTt/001BrvqBMir5w86r0iKLGfFumzMf5je0T9gG3rqXX1VcVnc9jRQRWIknbKBCKP7bBce/T3Ve5qs6DqlliLgQmq1axGrIphKfz07Z6iFvXkpSOfLxhvghpj2AHycB5HtLzjRScMo+SjXJ6kgz8iUKZy8bEijeLIHs20WFuZ+ADcEgSxSk9I3+BLmos2399+KDySS1YQy+de4hn8J/nfE5vkBToN573maHmRCscO+mMywXKhLnlLSLoqz7JxPttmxmRANP8aV+1pmohcxt0Qg2xpzy1bXfPFKyyvsLumtvqBTCXRRHxvYyvyeRQs9BpUmXITkBNvbJUs1+1+DtTsA0AvaDb3eBhtF2Ux9ns0M7MRWHbnORFwmtwisz82it7juB5SI2MKyuDAnHUAyQyVlHEmMFYTvixruj2bMFEH16fdoRFjmPscJ7e/WGYFW0xxxBDuliL0WQ3pR68g9x0K9meNG3LzwFBdh4FfLkUI3V0HVRn8Cf+UUNWRgDZdfNQWbyY1XDYSjduiBW6urtnBWp0KicRq7x1vCyuW1+FH+Xts7tGPtp3MmKmJ+bwR81WGlZ5nuKq0y1gmJGjUDEcfd4/e7lM7wn22R8phMrk0JAoSIJHq9zYx4LI/E7z+pkm1Ha0BQXdvHegPzCJvxAk/opU9Z2hUDrLlEjaOx+3FnhEvSsQB1KIsTHwrGEaESTUx5t0cwTKtzjisEXS6vmkk6Tk5OAWs7r2gw0N1ppmV3xJ0MkSBATquPbJB1HWBeM21xwlWwuyHJEolAQ8woD4LT+uMU28mvr6xAPg4ePdsyb2vME961jC1pWF+jM++lGH+AfpCp3YPpS1U4aZmCW+sTFaMdszVCAQ1RDo8XUOMO+3FpOtntSHin9ONrh9G0B/Y72uTt8Sa3iolUMnML4kIxnGeoJ0H2/dh6S3aE89S3IKc2mkews4DJ8xiU1YLC5JkW2Nko93wUJ3DKqJTHNhp3hV+1UxU1tRpqWGvo7o3uoP0plJ9Y0jHpmIpRSogsacFEmbeIE1XUxX9UoiwsCcfqeTKa08Vj6qo9ckPQ2mpkzFRCqDv0MoPQVl7lR0XVkCdAgjriI9KsQ78OjggsSL9b4t/Eb4OiTwn6HBnDOhd7alagkVEZ6cIfWmwoIL+nVsf4iHyEs5TZ3dsQrV/03UCkAH+qGHTWoohLejfPdwZL21yBqovJxIaUAoliRGPljgnooHQY+zTLgPSgXoofariWCldjDx0FOnCqY6u+vzg5ARO0Fdc17OsIOT1kYp+K0VUf0Y6Wgc+9qwk/U6dJ2/CiAnLAj0kZqSvBoqu4T6S1zL7vJDCRYomdg== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: b9aa9ac9-c265-46c3-0787-08dcf4efb6c4 X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8898.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Oct 2024 12:22:38.1886 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: y+GnzZO2Cakqs1Wj13WXv80PLB4VIGWT802772a+sTtZ/yBFyhDna8jdQIuUlw9qonmgvUfTThkaB54+TKZWhg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PA1PR04MB10843 This updates broadcast transport release to unlink stream from all its links. --- profiles/audio/transport.c | 39 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c index bb2ce8a4a..5646b2004 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -1779,10 +1779,45 @@ static guint transport_bap_resume(struct media_transport *transport, return id; } +static void update_links(void *data, void *user_data) +{ + struct bt_bap_stream *link = data; + struct media_transport *transport; + + transport = find_transport_by_bap_stream(link); + if (!transport) { + error("Unable to find transport"); + return; + } + + bap_update_links(transport); +} + +static void transport_unlink(void *data, void *user_data) +{ + struct bt_bap_stream *link = data; + struct bt_bap_stream *stream = user_data; + struct media_transport *transport; + + transport = find_transport_by_bap_stream(link); + if (!transport) { + error("Unable to find transport"); + return; + } + + bt_bap_stream_io_unlink(link, stream); + + bap_update_links(transport); + + /* Emit property changed for all remaining links */ + queue_foreach(bt_bap_stream_io_get_links(link), update_links, NULL); +} + static guint transport_bap_suspend(struct media_transport *transport, struct media_owner *owner) { struct bap_transport *bap = transport->data; + struct queue *links = bt_bap_stream_io_get_links(bap->stream); bt_bap_stream_func_t func = NULL; guint id; @@ -1794,6 +1829,10 @@ static guint transport_bap_suspend(struct media_transport *transport, else transport_set_state(transport, TRANSPORT_STATE_IDLE); + if (bt_bap_stream_get_type(bap->stream) == BT_BAP_STREAM_TYPE_BCAST) + /* Unlink stream from all its links */ + queue_foreach(links, transport_unlink, bap->stream); + bap_update_links(transport); id = bt_bap_stream_disable(bap->stream, bap->linked, func, owner);