From patchwork Tue Feb 25 08:44:12 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iulia Tanasescu X-Patchwork-Id: 868231 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2070.outbound.protection.outlook.com [40.107.21.70]) (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 A1681260A2D for ; Tue, 25 Feb 2025 08:44:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.21.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740473073; cv=fail; b=hOVH2V+EHd0+1XuIMyK/VlW0KY7qL7e1FUFP/K4lVSYJ1xkAysDovrNYawNkDnwSBUkzwOHnm6cm4Q4XEcyzqQnsuPuwu71Hr38EBpCm3NEnRmeNUDExVJ/1+LwVjw7bp+eUhHNVgmDTvijZ9uEygMsl1KgZDFfyPSBRiUHJJBA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740473073; c=relaxed/simple; bh=PKfL2qj4SQcOtIgIGD16MGrMCJrZIp5qsf9bKTGRRsg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=AiZIHBQEpAbPnxExTvHt7xueCHautoK6p+nFLYFLDL0ScOrsqhgy0j6fewVV43zf38U8xgeu/kVunL5/akd+3r+11ETAo1yMhatLkogSzo1YWLSEYEyT+S3M9ujqPmgoJPpqv0hAmAuEccl0wwoeRTmECwUTsFv9dYzdQZslsyY= 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=Gh9xvDU5; arc=fail smtp.client-ip=40.107.21.70 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="Gh9xvDU5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=he6blR8X79vjAVPc8aiNlmCFID3k2lEXw0cewHdS2YBto91W5FQaxeQqEpP9CY9+AsTVIUQGTzrTo/aQKSCkG1dLfg360M5bRbOnvY1trV869Yr8ehNPGOD5PrOArgpVE80c4B7DAneQO4QtSnPtCNxeMaXy9s+aUC0t6/OT8UyLWwHnnQufQ4Cgh/WX9VxRS6W7aD4iZMvudKMnQHBvvyELcs6dJu5lLYsdeXYcBWu4oi4BVmZ5ANjBS910GeVmdeJ11KrhFhHbpZC3k4WjjwcnVr1sB78rkHaYnrb3zY9vjd2ZFq6IO+ANZ4XyWZ2x0ASFhiVNpPYGaGhlNxhK0g== 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=AhznEPCvN+MCgMYJhMeEw4i7RXI5fNyAO9yPXDXrQgk=; b=wu3tMI1B4C59EYhJ5O5kM/5P1u4O9mRu6Td4zY6dMQlHuqBzFxgTR7mNOzcdMNS3QIklcQJNIn68sW56ueq7foAavufoW2wNQNnXCtbAeS25FKdIxi8YgeyAGBHXB5HDxkTvP310tQ2SLmKA6UDt58no/TtNUc/F9/xuKzXqDJjbe/Nn5dRItiJagA953MX+Ny4LyIxhGL0EK9cpFWOLhmZifRSJYQM19WKbPrjySW1KK0lmh5K3WHaeEZbf88l/0LKkSvvOLhH+yQEFDaHXx/IZAHYJsf4UA5+4HvXzKVLHACaL7ubzWQ6Y65bhoVYZgfwk8lVVny6L0YbnkGklTg== 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=AhznEPCvN+MCgMYJhMeEw4i7RXI5fNyAO9yPXDXrQgk=; b=Gh9xvDU5CJFqMLbiOj5St8XUg8ArZzTR3N5x00XukX1mHQKa77Al945tAVDmwz1nZdAdgdU2C7BT/uVBAhTc1j9LfDMN/z2ze7i6hIXoIinL1numtMXnBXsWf7y01iK5yhaMaRMgb/6HUudoAaCW7ylFpuqxtx5UhWXjjSfIaN5errcdyGO8NSgPntXGiQSUGqzxiib/rGp0+CZtj4ov+SsGCOYPJXVWVluGa5OkupHLpFV71ZAm4rTqhIAw0R14TmkkaqY5lsG32J04KHBzBXhSf/35/7hGXGmMEfdHHVri2BgfHTBiPTT47cZWDvhxspCfVEy53WI9YEWtgTYYVw== 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 PAXPR04MB9570.eurprd04.prod.outlook.com (2603:10a6:102:24d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Tue, 25 Feb 2025 08:44:28 +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.8489.018; Tue, 25 Feb 2025 08:44:28 +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 1/3] shared/bap: Add support to register bis callbacks Date: Tue, 25 Feb 2025 10:44:12 +0200 Message-ID: <20250225084414.28677-2-iulia.tanasescu@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250225084414.28677-1-iulia.tanasescu@nxp.com> References: <20250225084414.28677-1-iulia.tanasescu@nxp.com> X-ClientProxiedBy: AM4PR07CA0025.eurprd07.prod.outlook.com (2603:10a6:205:1::38) 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_|PAXPR04MB9570:EE_ X-MS-Office365-Filtering-Correlation-Id: d94e4e37-8aa5-4416-857c-08dd55789d9e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: fr4I3vfZQEk31sM6lphFNDkf6D0vC8UjKhQ4RkduiPYPVOiP7HzXLpZVydKnfsvw2Mjoenv/aKUkwaPVkSi+YbSiZWTIC8OI0oXOws5+Wmm9sQZ8QwtXdl4q9kUs7ZOMxdvNAvgfOcRVbXGaYfzdYj1lPoR1TTSW/56hl4zbl7NJWcMiZatx9H+PYfEXWbFgCd6pueyB/gWAr7gpueWvpRKTABhdwbA7Qtftle/TIiRlkyy/RUs9p/VncjksEXstnfKIFDbDvVQ8nzu1zF2TBVX5A1U+7gdD/1uWEHrDGwF025S5LXkjM+5VLxkIoHjTX7hzK6on8y1Qb2pA8limdYQZcxdy67dhb8VqLANM6flZXxjVtK5FpU2hVVARJ/q9BdZzDOMKM0RS+7XMg4VG51K21nJWS0HMmCz7p2g3HH2ZJdJg/+U5paFHtIB9iJQN4z8IXxx3fOVoiI+JKWQEJQe8vUDiX/uNw8pElpbT6DqS9nvvfM06Oih8c4brMlymrA3N3rXMxwPdypm6lKFDnud8KPIHHWeRs0V9YpJV6MeEATezmT2TVVh5z/iDJ7cVtNmlY+OSqnDd3m2OKk0F86zytOzVy1Q5MJe8HWWOvQpjLwv+axh4AdgiRMhZzq+dv1JSUibf+Z0vwcHXsfiCUKZUp3fjsF7YQVFRObSJPzyjLHtxLuXbjhOri2XLJ6qhvfF9jv3YgYkpxEiW8k/5daUqUh2h0mImrPi+Dg3q6PZDQiFaiAGkl+tsyvOtef0eRmtiVBW4CnVSm9tqwNF31AXUnD2hAtdtn3j2tXdTA+i8MTsDKDNrd071QmfMOzcg8n8Mwss8ewXFSgR06YYU74jfnFBsqOBMJIW7SJ9pvx8Wq7bw5wO8uxJFUVmjVr4U+cLV7zlWKWhZEsb/I0ylpEaQEpWSKP8G7QTaBmLYKqctau+EejEZENcKy6Dh8+A8vV9oBw4vtBRbWHqzIiJsNpzsDEc42tKBdpebtfQ3FF64snalSM8BTjiJYadRGIVv/lvOaYHoy2LSLm7ZHRKsSnfMYVzsc+fzqetCVX6jvPpEke8R0xL42gyZp5Ijk5OaYaoA5LSxgxh5sPLj+vcFdOMb9k8dBp4yLytYHgbDI9AwO5cJ/x1uLKbd7+LzftCeZHGW9HXLmrU0jSEscF83HAEd5RcTwp9U3xbDy4GZttyzP2bdOvQhqr/gUzxmz5i8fm0UOELObu0JIJjsonXfyJuaxT1TvdiaUkwS3Yqscud0sYLd/aq55Ah3Yd5P49hVuAX9KgOVxvnvzE6FxYBIRkbKrTau2OvHI1QCdwBMwejXwJXEzBeqaE4ij6VF8Px6+r0ZxLnRw8fTuSnKSWoSjxYBANHP1LFhfNcibAXBUt1FkihppLAGoLM5fGPOUR+0 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)(366016)(1800799024)(376014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HzpwLCPdoGnEFL3gdphfyU38jVTITBnKclCLQtPJ4/1dtU/0T8s+l4WXyt9qSgyKl4UXUUOZLXoC70ZpmA+xDGnBkXpQjMG866SmO0d3fI1abkcA2YNBikHV0FV/2vXIP8ElpyWwEvWHSNYiRiFPpLFdiFjZzu4G+r6CUI0zOBi7I8/2kSVmjZpqj2koWBv+Yf8btlRpTbdyErFR5oGiqHfLeK1NWY8dL8R0DhZ8xY/H3lItdEC+7hJNdKceyCRANzb1mRo1Cey+pV6eQClbC9P+NC+b+BcOFdPtwh+zkLx9Gu3iDJ4K2xb/8XcM/Qf4SlSTXy6hqCiet0+BYpIhcqU5kQxA/wWKOIxLF0+bIjBrRb/pnxZppKeHWbtdmGXm1zSO/xfVONeI6eqzeQJV+Po6UHATMCmxlDQBu640Hga8G6PvgmPqIk4mR+VpQ47EX3JIFApNPZOEPH35NVwu2Ob7QRrFhIRl2SBv+mq96PTypIQEHLHvVoVn+kSs9tF/AFEuHLgUeMTsTwRQ+EDzv+hLKMFyd8chEkmTy6EAw9/g7gWBRRyeAX2bibXW6UT2XbidSX2tcOaUWRKkYbMrlV6OLMFH4jnoSVaVEy92ensJ2GnjDsGtNPDbpOS+cEzSz68ETfaqZ6FHSEi5EqVfr3ezS8kq1mJer0miEZyCmptT4XlHTJYEWWw8+TkPfO/umwLtUdPMQJUTTW74yj8Ah5yrMKhqiFgcY8zpuBasLhe1CXIcoRhUrBIjv7UkDg7TtFCdQDaore9LsFy6FpjiArYcVd2Qr/hdOcOXxhbaTDBQSzWN/1L2pzxMkCRK+sXfDL2+8ZGhjn7QvshOKRJatwfp+BIrA7tMepnJu9O4yjMOAyubj4Vf6Io9Iz3XCG5Pj+5KNJ0ViHiH1TJ2iHcOiPQmQRDna1z2qhg4RtHTwgI3tnib8Al3Ywa3upIYD/qExwRPwmMpPmimmsvO9Bc7pxqX4RzU2cdviFO6iS6bvCUMZ995jrDvewSICzYWoKg4QYedjkQ3TIA6ptAJkV37/gL15fl7pyHGCcmLp5oYZ3yoYpFZu0dkS2Zc9bN94bFVctpxRU9iCWsW407mgJjO3u7kHt2ABcfM0DBVtOPQxBKloO/sBIZz2E8XZQEwg04Am523fE8//h04QjUG4++h+dUPFozq9YT9jE70+C94yDrrMRGtLg8fjt9LmGsrJdDTU5dmxspZxqmZkS18hrU1ECe+kZHtT8Fuzd/fXNI/APCzfs/EXsW403BFvH01UKYkQzHVlTJvfHl6KZfQEEoK0cqTN0JtsMO549A1Lkgg4v9KMRTdW4L8mgtfPBZpSMWqxb0xmvspFiVTZnwAE0FbDRhBxXjuuH54rAbNFbQcykLrBq/E5Ury0fXMA2FZC92+SmqS9KIWPGz3UWY1ika4ShaYpN2JBu1UwncBne79pgS7wMMngtyMd1lqtqmofhECrrnrv+LqN0moFM5/ZmrDdf8AnCni5MaSLpa3u40OoCkPlhM5Tuat3U3vVbCKyPcIgSRDOxvnvhG6A2pWUsGYvZBI45BFJxCynEAmpLUrTZLgk9gy9EWeGz3ZjcHzhNv7vZUMIYtdkZkJcktOLsQrKw== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d94e4e37-8aa5-4416-857c-08dd55789d9e X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8898.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2025 08:44:28.6662 (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: PWIazuAFCZcMIxHoxjQ7uQxfcw2TkUFr/Oi1fiLhl+6DfYUFNh2QGpK9QDON8jzJ4KDnBSlN7dXu5TfjN37ftg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB9570 This adds support for registering BIS probe/remove calllbacks with shared/bap. This is needed by the BAP Broadcast Assistant (BASS Client) implementation, so that the BAP plugin can notify BISes discovered after parsing the BASE to BASS, avoiding direct function calls between plugins. --- src/shared/bap.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++++ src/shared/bap.h | 12 +++++- 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/src/shared/bap.c b/src/shared/bap.c index 6ffeefa41..76df7f4e4 100644 --- a/src/shared/bap.c +++ b/src/shared/bap.c @@ -80,6 +80,14 @@ struct bt_bap_state { void *data; }; +struct bt_bap_bis_cb { + unsigned int id; + bt_bap_bis_func_t probe; + bt_bap_func_t remove; + bt_bap_destroy_func_t destroy; + void *data; +}; + struct bt_bap_cb { unsigned int id; bt_bap_func_t attached; @@ -180,6 +188,7 @@ struct bt_bap { struct queue *pac_cbs; struct queue *ready_cbs; struct queue *state_cbs; + struct queue *bis_cbs; bt_bap_debug_func_t debug_func; bt_bap_destroy_func_t debug_destroy; @@ -4190,6 +4199,16 @@ static void bap_state_free(void *data) free(state); } +static void bap_bis_cb_free(void *data) +{ + struct bt_bap_bis_cb *bis_cb = data; + + if (bis_cb->destroy) + bis_cb->destroy(bis_cb->data); + + free(bis_cb); +} + static void bap_ep_free(void *data) { struct bt_bap_endpoint *ep = data; @@ -4228,6 +4247,7 @@ static void bap_free(void *data) queue_destroy(bap->pac_cbs, pac_changed_free); queue_destroy(bap->ready_cbs, bap_ready_free); queue_destroy(bap->state_cbs, bap_state_free); + queue_destroy(bap->bis_cbs, bap_bis_cb_free); queue_destroy(bap->local_eps, free); queue_destroy(bap->remote_eps, bap_ep_free); @@ -4310,6 +4330,7 @@ struct bt_bap *bt_bap_new(struct gatt_db *ldb, struct gatt_db *rdb) bap->ready_cbs = queue_new(); bap->streams = queue_new(); bap->state_cbs = queue_new(); + bap->bis_cbs = queue_new(); bap->local_eps = queue_new(); if (!rdb) @@ -5519,6 +5540,82 @@ bool bt_bap_state_unregister(struct bt_bap *bap, unsigned int id) return false; } +unsigned int bt_bap_bis_cb_register(struct bt_bap *bap, + bt_bap_bis_func_t probe, + bt_bap_func_t remove, + void *user_data, + bt_bap_destroy_func_t destroy) +{ + struct bt_bap_bis_cb *bis_cb; + static unsigned int id; + + if (!bap) + return 0; + + bis_cb = new0(struct bt_bap_bis_cb, 1); + bis_cb->id = ++id ? id : ++id; + bis_cb->probe = probe; + bis_cb->remove = remove; + bis_cb->destroy = destroy; + bis_cb->data = user_data; + + queue_push_tail(bap->bis_cbs, bis_cb); + + return bis_cb->id; +} + +static bool match_bis_cb_id(const void *data, const void *match_data) +{ + const struct bt_bap_bis_cb *bis_cb = data; + unsigned int id = PTR_TO_UINT(match_data); + + return (bis_cb->id == id); +} + +bool bt_bap_bis_cb_unregister(struct bt_bap *bap, unsigned int id) +{ + struct bt_bap_bis_cb *bis_cb; + + if (!bap) + return false; + + bis_cb = queue_remove_if(bap->bis_cbs, match_bis_cb_id, + UINT_TO_PTR(id)); + if (!bis_cb) + return false; + + bap_bis_cb_free(bis_cb); + + return false; +} + +void bt_bap_bis_probe(struct bt_bap *bap, uint8_t bis, uint8_t sgrp, + struct iovec *caps, struct iovec *meta, struct bt_bap_qos *qos) +{ + const struct queue_entry *entry; + + for (entry = queue_get_entries(bap->bis_cbs); entry; + entry = entry->next) { + struct bt_bap_bis_cb *cb = entry->data; + + if (cb->probe) + cb->probe(bis, sgrp, caps, meta, qos, cb->data); + } +} + +void bt_bap_bis_remove(struct bt_bap *bap) +{ + const struct queue_entry *entry; + + for (entry = queue_get_entries(bap->bis_cbs); entry; + entry = entry->next) { + struct bt_bap_bis_cb *cb = entry->data; + + if (cb->remove) + cb->remove(bap, cb->data); + } +} + const char *bt_bap_stream_statestr(uint8_t state) { switch (state) { diff --git a/src/shared/bap.h b/src/shared/bap.h index 200dc8f13..adb531b4c 100644 --- a/src/shared/bap.h +++ b/src/shared/bap.h @@ -4,7 +4,7 @@ * BlueZ - Bluetooth protocol stack for Linux * * Copyright (C) 2022 Intel Corporation. All rights reserved. - * Copyright 2023-2024 NXP + * Copyright 2023-2025 NXP * */ @@ -269,3 +269,13 @@ bool bt_bap_parse_base(struct iovec *base, bt_bap_bis_func_t handler, void *user_data); +unsigned int bt_bap_bis_cb_register(struct bt_bap *bap, + bt_bap_bis_func_t probe, + bt_bap_func_t remove, + void *user_data, + bt_bap_destroy_func_t destroy); +bool bt_bap_bis_cb_unregister(struct bt_bap *bap, unsigned int id); + +void bt_bap_bis_probe(struct bt_bap *bap, uint8_t bis, uint8_t sgrp, + struct iovec *caps, struct iovec *meta, struct bt_bap_qos *qos); +void bt_bap_bis_remove(struct bt_bap *bap); From patchwork Tue Feb 25 08:44:13 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iulia Tanasescu X-Patchwork-Id: 869375 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2070.outbound.protection.outlook.com [40.107.21.70]) (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 29CDD260A51 for ; Tue, 25 Feb 2025 08:44:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.21.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740473076; cv=fail; b=o+vv53vzAGRZTi5w7MM9RVi5Si53AyUbkb8w0DOAmOp9az1DGODcyTQOQr8/YReoIbTDLafbHusWXnClvFzMgbh16pg2+qMRxZSQWzeNaVIYmL9hMsIZlbaoaXfsBu4xdlJnLC+ONrY76wQJJ23aK2tTHnf/rUJ4ua0iX2DD3o0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740473076; c=relaxed/simple; bh=6Q9blRxzuQRFXjbVRxdCmJFh/F2xutGGU40wxV29BH8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=YqHQ12YFejqGD7+7rpAuOHsYbPYRYhY8slVRzyUPPtNg6uIM9WJoZn8vXTeIdgsqyOqYLbwJP03eMq6wr25+Rhzb4xf9UAOWfNxdLnZzxwW4b34LpCJG+Me+M3AV1Mft64xvM2QX2tjZVknkyVAYsdNIByoHNFe3kg7dY6ZdcwE= 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=iAEviy6k; arc=fail smtp.client-ip=40.107.21.70 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="iAEviy6k" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MVlsSo3afHNvT+f8PPDcZ3SHudq7Nn9sx5dV6eYvCvlqMDSKV9g9TukbyVXmlKZk+03MbWMTz2YXmTPB4Cz6SHJ5RdCJZR+AscbL1khXp1ZX0zNTBLe9lXndJZB57EvSw4zaTIOei9AXc7hxx07Dq+zVzj/s4K5MwtGl82cNb1w4HM/hjHA7j5J/QqAKazZzr8BlMbkKMLGEiB6+XeDZ0i4FRr6DPOko/0pkmuKC9TEOlDUhn65zWw6TnhPxK/CuHAR+vAoGGNXIouqaE21+1KAzDTHucv0bV9mXnu+pQeM8cinXxPOpFloCHiEOBqAcUnHI7rPtU7/95IXfUbRLzg== 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=iZ0AVM8JKUpqNCYOX5iNTUY+EgTXp85NrrBoIVJ97z4=; b=fuw/lGezrnM7oD4rBTEfulctbHEPh4n8pddH2VmhteAjFZbTO4aqselgJ3+AKDhG2ixH/UngpWOxalatORjBKWJ9DvDUULZdOdN+XO14OqNEIppG5whRErXnUc+gvoVzMn8v5kOgXwXhmNRJLHxQBiOkUcpwhcjczr1obZQUoyUTFkN4UWDwTzOk0lvloVbSp74DC7U92AAOaeLk/KHEhGwtsEqiLy1dpl6bj1JcEGYIsEipfb7uDqnGqkCRPGmCDsib2R6fXAOxhuhyC6dCsn9IDwcX/aq6LQDFynvmbXYmoQwQE9/x8xLbmmzhs92jwm/h/4YqCJIwiH+Sggq/1A== 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=iZ0AVM8JKUpqNCYOX5iNTUY+EgTXp85NrrBoIVJ97z4=; b=iAEviy6kmXdDJkv01NbSTf07NlXJlMWX9DZPp9dpVwYmdz1bsJ9av8h2Kp1BIdeU9NXAKMRTyxVs3n862McW6NcmLVEpnkFZ43tazOJJFyPOOT3geOsxT0U5r7KhUhaUyE5kue8fdnjDRvJYgQOOwx8aFmpUYIk9bOHwmrsbh+cWKJfjDBOEvV4g4WV9If8IwWI7hOL3/0aSot1CwgaW7Y0yohudDbjHcI8C3T3PbYQfxvYHe0HA841+hiw5/LTHLXKlg6ROpEjb0d6t0Qlx9R+8vlD87COPTu7S5TvYA+wYpOnlXTHdb90OHe/taVDFWwmeNXFEjT9HIwoGriaNCw== 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 PAXPR04MB9570.eurprd04.prod.outlook.com (2603:10a6:102:24d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Tue, 25 Feb 2025 08:44:31 +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.8489.018; Tue, 25 Feb 2025 08:44: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 2/3] bass: Create BASS session with Broadcasters Date: Tue, 25 Feb 2025 10:44:13 +0200 Message-ID: <20250225084414.28677-3-iulia.tanasescu@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250225084414.28677-1-iulia.tanasescu@nxp.com> References: <20250225084414.28677-1-iulia.tanasescu@nxp.com> X-ClientProxiedBy: AS4P189CA0066.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::14) 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_|PAXPR04MB9570:EE_ X-MS-Office365-Filtering-Correlation-Id: d3200dc2-1844-4e7a-f0dd-08dd55789f3b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: p5BTY6let+nC7s2f8gavcnin8aqtf6iHXElyyXcY8oIWPgU/A/pp7XZao8ZerNzvcCGeOgn8qDcIq4StxoSnmLpteOHcXVj8VJPlnR6zdtq62yOjYgVNcKkke8RFO2CKzL9eHTBmlSt6YP4jtEpA1dcCNUoyntgQg6pg7P6ZViX6lrhR3s1TqyEmSd0LQiMaYOAd8SFK+FIpZTWw2z9/fzs0jltpqJ4QCcnp+L3hsLYrf+kIctSAQwtNQx4yKb+AT6kFoRXgaiI6Qd7ufNB7qprBatZpgVPlXj6+I78MgrnpWisR2mjvBXLAdYlgKpf/cJq/l8JI5yenKJDUmGWTgd2HcAVh7pysimMJ5MO9cCwuTDs0/f21SX09j+1c4qpbSSFg0tyeTf1PJOF+XQs9RBkHFu7Q3fyJFKJTvv9c+mEV4V/g+6MU7nVUHY1UYK3iWkw3yNXX9iP7VNNqp8IRHluecDai5drBoRZT23azHe3+u5aaBnC9MVWXwQ0+PZ2hyfj6T0hDkTqPh3a+3s9ZlMZT+sC8JoxsY9BqNc3yGOIR8NUUjl4aEb4U/jTDiYGhmLA+PBrJIp5G3Dwe+fHzg6hM+qQ48uV3gQKac0IckVR5ap9zfAHnRhpYCN9uC2aRpgEAm6xiv14eSR8tPsBEDoEhKzbgSDSJw/LB66kliIh3jCo//x0zRBtAfDT9PSRkNHhP21z8YnMF5j9rvk3F47Gmf4Lus6szQsUHQL5UgKFqS1Tv62CyA/jS9kYXvNwojXZShidzqwlwYAX02rjLSfpNXJ0R+hNH7VheAvGJpRF+Hh7MCpql2VXb2hsFvsple/MiBZvjWdqF/2Yxd+LUPGJQQGS9o7KJzZf9FKRo94o9bS3wLkx2zAl5USzVJfw9DGX6pzq4cnOg6RpNzgVHPL6f3G04rs3FA7/p9UY+G83Gfsgo/0QPzjYX2MinmRCmuSFo1D3GzI/f6EshlAsiAuGcefR/uGetDSSJkKKLl1v/0orKyqZRQB99QgZ01iN+ElxgVx6tphQjZ80Kl7yLcZarflvaW67Lo5U9YjMIyOlTr8wBnDEgTE7AkAElWp6k/G0cJ+p8Rqb76MEzCHACSqFBrHI5jPRpsYy42Ft2i2uh7bF34D/hWt+zw6s7H/u9lnFt1NPe5gF23RV/dkjgds3XCTLIMIx0dfmQ8JVP3/OnfPPcufHxhk9jgr1D8RGEZx5X1mQr6yWuLnH3B4BOHCFYp6zICc4VTFFqWYqKOvud4uxngt0uYBOOr1Ftn6hTlE5Sj6eOPpUVdHL/E1VCggPAWmRhxaMdp9PzTlFVi4p6XShaUnytWVhjBS5XM3FlaxV7YAJbw9ZtH5OD8dr6bRRMaG/X4P6MAGlrswYEaOP68PCRuHOldFH1vZhMrhd8 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)(366016)(1800799024)(376014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ihuYRepolIWnHCF9dqCHKNEYkuVd0EmfeRR+igSEfV3ASAivKBloM8IUg68N2BCGj1a/vQ0paaSpsRo3kEbzLTr2wgpFFLV5bN+V2xUe4B5hik2EMS5MP9sI8LVPbhHFqmYW/yp1KmCgMEFDtd6Cad6TyvAstt6+P+o/njy0la9EnlTk8tYzHTyaALd8BX5Obu73Lv/sOEE3m7A8hmKK2+p9esK3GzCw8ns09BbksOG0Ck0KMvotDqzXKd/gfVaC0o/UyMMR0waWjJrnSB0guky5bk5PfoHf9jpEfTRMocxT3ZuSowMLUHu2POlmh4t+SylT6dcxnjwIRIZ0QMucI91+/af+dDVuhpsR61o1pZVK6ZLk0qEz57huhcA7qXdTzjWXTlHoIR/SmmJMRDLyPDrIXCAa5jEIUE9UzO0pYGnwIT/+8Bk0vFsoS1XqhzDm2ahZvqoaa+4Sl5mdG5Ys9lP0GC5/MG8kZWKoTi6p1xKPxhmZbtnTHQVLF+DrFRIKzW0BvxURiK+mOpfURzE4Ks8DU5Z3810RGrCm3drPZPvN4dNZMNjNqOYDjfLzFCwxTM8Phj6mTiF4UDpf0ZdzEIiMSKXbaxBWs7oMLuQQGq+sOflgG6RP2rCPPU3c0u0us9e2kTHxxezPz14dTOK6RaysU/n/Oqq6m2WN7R7lmUgMP2VaDOPHpA7XjRwjQlDgatoSrRGiq6SRHfk0jfCTol+XG0+Hn7hBHPWx7ux/X1fwIBRgJHk16ctO/JheTImtR4DGfyypSgw8tNAnyYckVFw8Tb6hBEzCpcvQmQChdxBVhH9WTNiC8pccY6LFN5k17iVcFcNgJUWFBhH2Po7CR8JAfH+O8mizctNVp16MoD/BHAr+t+SU9RicLpCdmXWgVA5ozSOWLopflrlI7jaueEBySSE5CNlM4AA0TO2FBhTxQtbdzlhSU5q65REYidVzdYBrIj7DfJ9Lq2Z5n8WZ+Qf6E1lk48zpblJLF4zQSmegvNSCw3Rzgy8TqL3aMPCDVz6Hd6uJyijCGOuVUZC3rKvoVfFvh5eSon/9XZNItWX53FfkJMbUJ+2ksoQ7+d+wQhe5RSAbOGoKrlOz+PfETf8LpW+w0bLYUv3ZNJAuYQCAdXmYKvoVIlwX3zCNFWH/W7IIAiC2NRuf7Z1yUTZaTFwnAkDYc+E2p8giY0TzeD+WXAvte1uK7QVp/3s+EzbWMKHRU2Bjjc+JpGB4/MJGO4HDfF778ynn7omkZ8kKbbD7G/+BcCQZ+N4VFNtTSbVIYXxPSrERXmpjsG5ts67yu1lDwhm9zwKX5xniAMuGK/ZQiSy8VODZJ/LpvBURPWLXZ/YLtL2ca/PBpD76tSHTIz8Zwm9WQC1NM516GINIqsdT+MJmhmFgZS4rv3yijpmkNd3uPMrwKHT/eIGa9tK1rZMfLKSu/fTho09HDaUdN6oePbbQRSToNWOB21mI2ySmmNog8SYyjgz/7QKRsslvK1eP5lOj5YnCEEThwWWx5+HEn1TLy4HuTOyb4lK2vy+ve1F9+bFg915o9Z+UKBKnTvq2nkjiVkd4iNuluUjcthan2rmg4RCy7BHEW1R07sCiX51hJhax9C0x6Lz2Y/Vk/Q== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: d3200dc2-1844-4e7a-f0dd-08dd55789f3b X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8898.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2025 08:44:31.3950 (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: nafsD83zn0jGcTUCc+WFp48Onz2n6UijrmkyDpEViRF1lL2JYQwFx/ZZtpTNaLkkpEXYWjnYQ8Jbq5ZsNQm8aw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB9570 In the BASS plugin, BAP sessions created with scanned Broadcasters are notified in the bap attached callback. This creates BASS data for these devices as well, to internally keep information about the sessions. --- profiles/audio/bass.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/profiles/audio/bass.c b/profiles/audio/bass.c index 67ee847b8..96e767744 100644 --- a/profiles/audio/bass.c +++ b/profiles/audio/bass.c @@ -137,6 +137,10 @@ static struct queue *delegators; static const char *state2str(enum assistant_state state); +static struct bass_data *bass_data_new(struct btd_device *device); +static void bass_data_add(struct bass_data *data); +static void bass_data_remove(struct bass_data *data); + static void bass_debug(const char *str, void *user_data) { DBG_IDX(0xffff, "%s", str); @@ -560,9 +564,11 @@ static void confirm_cb(GIOChannel *io, void *user_data) static void bap_attached(struct bt_bap *bap, void *user_data) { struct btd_service *service; + struct btd_profile *p; struct btd_device *device; struct btd_adapter *adapter; struct bass_delegator *dg; + struct bass_data *data; GError *err = NULL; DBG("%p", bap); @@ -571,9 +577,22 @@ static void bap_attached(struct bt_bap *bap, void *user_data) if (!service) return; + p = btd_service_get_profile(service); + if (!p) + return; + + /* Only handle sessions with Broadcast Sources */ + if (!g_str_equal(p->remote_uuid, BCAAS_UUID_STR)) + return; + device = btd_service_get_device(service); adapter = device_get_adapter(device); + /* Create BASS session with the Broadcast Source */ + data = bass_data_new(device); + + bass_data_add(data); + dg = queue_find(delegators, delegator_match_device, device); if (!dg) /* Only probe devices added via Broadcast Assistants */ @@ -625,11 +644,21 @@ static void setup_free(void *data) bt_bass_clear_bis_sync(setup->dg->src, setup->bis); } +static bool match_device(const void *data, const void *match_data) +{ + const struct bass_data *bdata = data; + const struct btd_device *device = match_data; + + return bdata->device == device; +} + static void bap_detached(struct bt_bap *bap, void *user_data) { struct btd_service *service; + struct btd_profile *p; struct btd_device *device; struct bass_delegator *dg; + struct bass_data *data; DBG("%p", bap); @@ -637,8 +666,21 @@ static void bap_detached(struct bt_bap *bap, void *user_data) if (!service) return; + p = btd_service_get_profile(service); + if (!p) + return; + + /* Only handle sessions with Broadcast Sources */ + if (!g_str_equal(p->remote_uuid, BCAAS_UUID_STR)) + return; + device = btd_service_get_device(service); + /* Remove BASS session with the Broadcast Source device */ + data = queue_find(sessions, match_device, device); + if (data) + bass_data_remove(data); + dg = queue_remove_if(delegators, delegator_match_device, device); if (!dg) return; From patchwork Tue Feb 25 08:44:14 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Iulia Tanasescu X-Patchwork-Id: 868230 Received: from EUR05-VI1-obe.outbound.protection.outlook.com (mail-vi1eur05on2070.outbound.protection.outlook.com [40.107.21.70]) (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 57C1425EFAB for ; Tue, 25 Feb 2025 08:44:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.21.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740473078; cv=fail; b=TAaUAgKlIrZhD++FXbTUoLxJod04XwYJ/Q6KeQuZnIT2Xenxk1MaJgfMHdCyKAHBKbh4xQSIH/J0n0ZwP6VK8lgwdpGf2a8iILzqKpPcylH9+gyQyKVjJR8t5avoXWUS6yvNIK33gmsuk7x+WTfHjrEXuozzI9s80up+eimxfLw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1740473078; c=relaxed/simple; bh=dCIMbZLdukPeMSe269Awu/LhXzWTxdst7FA5Jxh72TY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=gITepz5qWyIGK3VB6FLC0bns7doOmD0+DK19lmGvYvthcc2FsQbiiL15xoGjJljS2Hg2bSRHMIYjs9Gxrr6lweEO3YPFO8LwCihokvobCFQOpURSpSPJJdXL5QTCFkn45nFCniNVr3qmcK+0Q+QQmTKTe1hVikOw8TxhadpdRbM= 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=Z3KPdH5I; arc=fail smtp.client-ip=40.107.21.70 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="Z3KPdH5I" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=l3895fwR0A9nQbqdbBVmttcOa6geVizrL3KTV4y0P/rINC0Z20fhqwgZjCn+yXoPzyRU/TOgEAoa9/CaPyIdKc+nVDRPBQz03VFywPt/WAtRh7hTWOQDreRZqw68TsYwk0kh6qJWGIm2X5sW0Vl11X7QYMOqmzXK1Uq25SF1DKj6vxCES55BYWKVtMxWcjVQ0RHlTaMjpEw8MZx0NevMfeIRYm2oA7RDnFQiMONQswxP+dnF5OBfcgYDZUyqWYKCO0z6Ygfv1MHzfuDCW+0sMe+WXatjmLIqnaa6rR42j8DwpWYdDc6AhSU2jH1CRDOgOXYR5zl1nPyjoaEf8755Ng== 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=4DfEsqD6Ug8OISbsA8zl8Wn3I+frqS0mfimgO6/Ol9U=; b=BB8rQXr/eCMB66mlsXbJgfUi1ZYJAr5vO/t5CRr71R1SL0pzAl1XcGXo9gVRLvks1Jz0oVGVhpCYQkv3mFppD+G5Xn09vFfPsjG+2XirGhPmV1XeaAr9Mfsj7p7RhXdCpR3YEcuqLz6+tFdCKkO4V5m5NWEKoKYmKJ0GwmDNyK/Brr3yzSpzrt5eeLhWmD9ytUvlpQzmNtAMNckyGDsZfGoJglu7+U1rpDJL66DGc7oJwMcxJTus35HwnH2RZJaOnMN8/jUnhrDwrRO97hYr2EHbK2TGOUdr8IsVkYe2gg+Qk0j3aPYU8cK7tRwHgnSNC1AILOoWDQVoHZZDKtmNrQ== 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=4DfEsqD6Ug8OISbsA8zl8Wn3I+frqS0mfimgO6/Ol9U=; b=Z3KPdH5I69KnC63EC+h68ky7KICyjI2ERFYTfu+XyhYbiYxjpNa+WYUNV66JHv+VvaM3iqxy/4miMWnolO3bFyASpauKG/qfWgrc6k9h1bQNgvs+/2Fgp/bsprwhqCST+xCB7H94Ve+CiJRXEJdOn+9EfoDGNeugduommaxtIRui47g2XZNCdUxoVE4Lmzi6kMz1J7UeahZDPHMEy78eqVxKsuYXU0GKE6fIIOn3liXSMZprS3s1/Mx/QQ3taLTRGFD5r435n74n3o0oob/fTT4C3JIg18444/sI3HHeVAInzRDbUGe9+Tzal1mSuERrBdufSNJAukkMjCl/2NvbDw== 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 PAXPR04MB9570.eurprd04.prod.outlook.com (2603:10a6:102:24d::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.20; Tue, 25 Feb 2025 08:44:34 +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.8489.018; Tue, 25 Feb 2025 08:44:34 +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 3/3] bass: Register bis probe/remove callbacks Date: Tue, 25 Feb 2025 10:44:14 +0200 Message-ID: <20250225084414.28677-4-iulia.tanasescu@nxp.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250225084414.28677-1-iulia.tanasescu@nxp.com> References: <20250225084414.28677-1-iulia.tanasescu@nxp.com> X-ClientProxiedBy: AS4P189CA0057.EURP189.PROD.OUTLOOK.COM (2603:10a6:20b:659::6) 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_|PAXPR04MB9570:EE_ X-MS-Office365-Filtering-Correlation-Id: 55ec81f3-3ebb-420f-a10c-08dd5578a112 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014; X-Microsoft-Antispam-Message-Info: 1SsnuripSmASbJSsO5A/6ow6Njijnm8RMDh/AgV/oTTdPEbFL36qRBzM7DYN+Syj3gETZrEjBiaimGdZdBFzMXQ7RGqRO1kcw+4xUYtW6ETb9JNvmCrQG79kDC2ifu6nBf6MOIwLBsSbO1Qfb6viMilxnOfNMB4URnGcVyeMBHrKEIPfLPTD1mV8ozdkRHBFrXs09YHaKSzs2zsqj6Wz2qMvHaOV1UDc1IPGcrWauYlRPlA/soy3ZuHRrytUq+DXOHgHN90x3uPmuvwVu0xrzM4vFdWugM9slk2iAs83p92dEGVZqkeY+l/199dh5Up//Tqhlja+WwjqcJQP7abnZcMTe0ez1xLegD9fL4uwgD3THVPeYW4ND8klGgsA+kJA+yNxrf4q/4ndKjUx/pJl05EMAMNSfMI7n14A/TBoGmei0KL7Pq4ciSihcY2Wio2JxWHF6u8sH9zOjhQo4DI8N9xb7f/lmKOBR9iclmfW8+g5+KtTr8HVLOYO6r8bwypJEBVIO9Bo1AjLZtOFwpQzT4c9RQyshkN6TOH52y1ed1jBAIjfsaC3ozi19ObuEkHoCn1HQwN0lA4Rkg94VkHWCC9y84Tp+6CbQLOYgwN3n65Zzrz3cPjrJ/yY5dzhqNkZyeRi4L/cm8i31c5yHVVH5F+iGzUEKTVrvEBm2umlcDC6pk6zfpBmg6vj5+mtPGO2DSmkGvAS61/n6ern01s1WxK427ohP6aqxeOZL3cdm8b1qLjzkYvPSbQpBbdex+xfGA7L1zrY3IgiCUPe2HVwCPi6Sh7jXdEzNiidoup8GpsER7B3EixeYG6XmB4OCFzkPbCUcEFuFbv/E3oounpZW0lkxvTmDf87GpDkRdgxYw3T3pROpuLDwfoL9wCzZvZenNFJN5jz+cU+Uz/UEFNTFAvkHZxiEhnFeSbt6/ITuaB0U+IHX67Z+MIJT5OVlk9vu7V+eFY9G8p5mzLfSEOfCB0KhcNGwvaJ4X38eUKNLVaXYoxLUWIWHykv5Ih/FgtONtiqdVurL8yNG9DyD3l9oft+zm/kPoMO1YeHWKZwZ2l2zd7NMRQM9Z1uI4nC+28sPrGXzR8VE/OgOOTZ3WlVZc02O/q7XKzFA5e+bcEgvO2x7nCDmBF8oY/mdL7a7cJ+dLBdl/AofR3BqYiUbCnWWUO0X4CmRtnDNIIDBJciNuTl6SKD5HegEa2kGScnUqk87HuuY1pPZXdq6czNlGMmrzb6u9UXxEhZfXQ04XLGjeOMt1dOkk4KX0zEN52s07XuNH13O1zTQg/ZEiv2/XMENxqOUvG7q4998siI4ZIp2NZaRd5sJHxzBVcnrDXS4vxbMOyb8F7/3a0I4Zc5q1gDBetJep5ES8fwTTUWLl6Ip9fnGSdNKaBjuCCaA7OdmFJ7 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)(366016)(1800799024)(376014); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hTOLI6jxuUHsjhrOc9IWP9I4O7nLIGhq26SqLf0d76npvkKOiPPyYF25nJEfHJh8VE+Ry6t1cmDo+69c81Wd9h7ByEYFxEYzdCZKr2Ma+6QdprfwXwHpvNN5F3DqxvSPyIEV9yRsegvqOnihDHG16hwwD23u6MSCNcdyFs/L5YGioY607wsBNMIXZpXsHH60qgZQRfi4ZB7t/WDaGLJIkpl6dqAK+IZ8W4xk73gvREDXFnYBYu/siY5cVVi3LQ4gOEalM8KYpE9F98E27k7OwnUNXNhHg1I9uNmSZ1T7q+UHM0U6Qc+W/he3hZBOLaKMQnG/fYkzwoaaR4XDnG1MVMJShF/XqmrjfYvp6L7mMLR8cqMruLpNthIz7kc/VE53WclTDnm45tiLp6RdsjF/WNUWZKV+1x7IpyyH5XXK4Cp3VUK5prt6Up3f1bCk94Rgyb8x/h0XXv6b7OAdY9NmjE4igzZHxwDghhMlMg3iAMIeJ0uQN7FDt/y2S6hSjscGdx/xr6+5WIRqfSCC6WR0j3HAb4fZnM7FPu3zPZ0/OGcqDLfbDsOknfosdM5t0glweXsJJ/RjxE+83UyNU+Rrje3nZWose9Cm9RJIeTXJOB21INXWGH6HVjxmv5wAAKgLwQkwWKf4man+YTqDR3jSRafnCDX9pgojSZz6IfsKgkhgpVhJdbLBufYAlqWsrfsiifg3KVgdDiaCJQon3LEtsFjlwrDo3mlyhv+kTNH2bcIhmcpcX5oMgMjtS7IqiCqVPtCvzu6e8AWgJQeYmjBc7kW9VYgsA+iSQ26Cugk2RHVv69gaw25ifhZfttACFbsxuLcuYuSAa+Tlt/TqlTh6AAT1DWV69yVVb7HQiRVQTGEfQMdC05+VMZ5ZW/oPda5ONcggOTq14YlxfZUmdtyv9Fi/xPbmpHeyWbNNtokWyoDe3ewGDs0jC8zmoHAE9RJGOTLshKDejPI3o1OKltXXTLtKBFSg4BWiuiVmpRm/R9dojN0q/4WAz1YxnNvh2kZdbhoP093W15W+gkAUKUTrqEhOj64cY1RQGjo/Y/N/cs5fIV0+zLc6Vppwe2b7YvJYSOJVTGZJM3c4DC7o0w93u3EZcBrz7Jzm7YqqX4P6KtnJIrHXrVrBb8egT+iYS/wUUVkP0MoLwsImCGK7nUZSwXuLLp7JgHbS6WT5wz36Vy9D5ESbCupOyEzD6y8Iqqn22nRLn1DAF8iaJiTllCb19/Q1Qjvuh0AH/tqKShj+CsXzec57ZmEZUYuI6UtcLGYO/ktukLqyzeWc3ZDdI8Hj1f/uiQjhiC4Ru9BrmnY8eF7zf+gMFb4CSXgnKE2h8Q0JkWzSwyC8H57jvUilfYYAAAqqVuDE0QLqFDty9kKtq/rIfEGE7feAU6qjushjVSF9tAgysKUytd+Oc/ETvdPfCW1LxfifXT770hDt4JDNT50Qr2qvr2LvSi64ipPSxrcA5fKW8qwsghxN4wuJS8DcSymHBvF0UGV+tLRTgUISpbiSpqApozqBgA3/oofEvd7XM22Hy3yHthea68CQmQcNH0tJIt5EGF8pUuxU7B3kPAgeW1cfzYweurj9PwYKDJbncyglRudKrXExeASzvtm3Mw== X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 55ec81f3-3ebb-420f-a10c-08dd5578a112 X-MS-Exchange-CrossTenant-AuthSource: AS8PR04MB8898.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2025 08:44:34.4233 (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: 6g2UCmiTF0lTdQ9gti+GYU+fgTpRCQVIshek+m85WLd9mqwuiwYhOPHnQHbjg0CaXu1QecynraprHH5/OWIUqw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PAXPR04MB9570 This removes the BASS add/remove stream APIs and uses shared/bap to register BIS probe/remove callbacks instead, to avoid making direct calls between plugins. --- profiles/audio/bap.c | 6 +++--- profiles/audio/bass.c | 22 +++++++++++++++++----- profiles/audio/bass.h | 5 ----- 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/profiles/audio/bap.c b/profiles/audio/bap.c index b36e45ea4..37168e58c 100644 --- a/profiles/audio/bap.c +++ b/profiles/audio/bap.c @@ -1178,7 +1178,7 @@ static void bis_handler(uint8_t bis, uint8_t sgrp, struct iovec *caps, struct bt_bap_pac *lpac; char *path; - bass_add_stream(data->device, meta, caps, qos, sgrp, bis); + bt_bap_bis_probe(data->bap, bis, sgrp, caps, meta, qos); /* Check if this BIS matches any local PAC */ bt_bap_verify_bis(data->bap, bis, @@ -3128,9 +3128,9 @@ static void bap_bcast_remove(struct btd_service *service) return; } - bap_data_remove(data); + bt_bap_bis_remove(data->bap); - bass_remove_stream(device); + bap_data_remove(data); } static int bap_probe(struct btd_service *service) diff --git a/profiles/audio/bass.c b/profiles/audio/bass.c index 96e767744..f5fe60652 100644 --- a/profiles/audio/bass.c +++ b/profiles/audio/bass.c @@ -86,6 +86,7 @@ struct bass_data { struct bt_bass *bass; unsigned int src_id; unsigned int cp_id; + unsigned int bis_id; }; struct bass_assistant { @@ -141,6 +142,11 @@ static struct bass_data *bass_data_new(struct btd_device *device); static void bass_data_add(struct bass_data *data); static void bass_data_remove(struct bass_data *data); +static void bis_probe(uint8_t bis, uint8_t sgrp, struct iovec *caps, + struct iovec *meta, struct bt_bap_qos *qos, void *user_data); +static void bis_remove(struct bt_bap *bap, void *user_data); + + static void bass_debug(const char *str, void *user_data) { DBG_IDX(0xffff, "%s", str); @@ -590,6 +596,8 @@ static void bap_attached(struct bt_bap *bap, void *user_data) /* Create BASS session with the Broadcast Source */ data = bass_data_new(device); + data->bis_id = bt_bap_bis_cb_register(bap, bis_probe, + bis_remove, device, NULL); bass_data_add(data); @@ -678,8 +686,10 @@ static void bap_detached(struct bt_bap *bap, void *user_data) /* Remove BASS session with the Broadcast Source device */ data = queue_find(sessions, match_device, device); - if (data) + if (data) { + bt_bap_bis_cb_unregister(bap, data->bis_id); bass_data_remove(data); + } dg = queue_remove_if(delegators, delegator_match_device, device); if (!dg) @@ -1077,10 +1087,10 @@ static struct bass_assistant *assistant_new(struct btd_adapter *adapter, return assistant; } -void bass_add_stream(struct btd_device *device, struct iovec *meta, - struct iovec *caps, struct bt_bap_qos *qos, - uint8_t sgrp, uint8_t bis) +static void bis_probe(uint8_t bis, uint8_t sgrp, struct iovec *caps, + struct iovec *meta, struct bt_bap_qos *qos, void *user_data) { + struct btd_device *device = user_data; const struct queue_entry *entry; struct bt_bap *bap; struct bt_bap_pac *pac; @@ -1142,8 +1152,10 @@ static void unregister_assistant(void *data) assistant->path, MEDIA_ASSISTANT_INTERFACE); } -void bass_remove_stream(struct btd_device *device) +static void bis_remove(struct bt_bap *bap, void *user_data) { + struct btd_device *device = user_data; + queue_remove_all(assistants, assistant_match_device, device, unregister_assistant); } diff --git a/profiles/audio/bass.h b/profiles/audio/bass.h index 99b755259..42a2c047f 100644 --- a/profiles/audio/bass.h +++ b/profiles/audio/bass.h @@ -7,11 +7,6 @@ * */ -void bass_add_stream(struct btd_device *device, struct iovec *meta, - struct iovec *caps, struct bt_bap_qos *qos, - uint8_t sgrp, uint8_t bis); -void bass_remove_stream(struct btd_device *device); - typedef void (*bt_bass_bcode_func_t)(void *user_data, int err); void bass_req_bcode(struct bt_bap_stream *stream,