From nobody Fri Sep 25 16:04:05 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 EA11348EC83 for ; Thu, 10 Sep 2026 14:40:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789051212; cv=none; b=FlpCUs9j2l0br4tV7SK3xJFtAaFJ17AIlXYLpcrHIzCzJUBU6hFiSJx0QDXn0pS84cYkHq12dZri6I4n3nKmbQljZrKCj6Z+e/K0rFs8tBM8UzoWukRD4qZeaZrfNCqZfwDXe5XJ/jg1SjEzuHAjDjKsIraXJGXSBZeHTY4mo3U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789051212; c=relaxed/simple; bh=nGZreA1amTgzCPBA3pk9j3iYkm570B956O1G7sPHObE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TiJ7nJhV2g/onqF5DdcdIuG5Iz8SCuxkj1pyelSnXYtDmXlXEIzW5EQmRec/JCsTe0dipvGQuDSJHlgZftp4aLurAd76LBXZZjwdr3i8vI7AnDTwp9uP8TRodKBrb7zPMVJUUqcN3pJfR0wbHIucnyWyGVimNC0HAkguKVyGDqs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=cgFqw294; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=gw32IV3R; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="cgFqw294"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="gw32IV3R" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68AC7i8g780831 for ; Thu, 10 Sep 2026 14:40:08 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= KgjPny+eSGIgNXcSG5I6onSrjp3K5wwDfeW3fNEHLX0=; b=cgFqw294BhjbeoSA urLg+kN/HPgn8wns9sFJMAK7dJPKDSMZYpIvMx88f5TGpUrhpS860/I4//WfdkP5 bEvU+PEu3H64QlO0tjJV/oNQ17ozfmIqVIxayGiQBr7m3wKwJl1RxDa16iAbD2F0 VkyyGEndPCz2zBNWr2hWO1LsgRiOkCe8Q02wuDuY42nU0csq4SL71qdj9l24JoUc 2UAaalOkyhXv9spqJm+mothX5nViyrJY0RvtoVBaEO0sdcf8ryO4F+Ydi2Joo5nt F75Tpy8Y8majNexw6vAzakqxt9159+y6XJkDy+Qn+CMcRptHUKEy2jwiubzw+A/1 G8yFjA== Received: from mail-ot1-f72.google.com (mail-ot1-f72.google.com [209.85.210.72]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gkrak9sq8-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 10 Sep 2026 14:40:08 +0000 (GMT) Received: by mail-ot1-f72.google.com with SMTP id 46e09a7af769-8003169e5c5so570760a34.0 for ; Thu, 10 Sep 2026 07:40:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1789051208; x=1789656008; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=KgjPny+eSGIgNXcSG5I6onSrjp3K5wwDfeW3fNEHLX0=; b=gw32IV3RSMnnsvzIpJ53YwC/5v5aUVVHaNhScEAKuhEVyZEKL/pzE3ISoJhzvAzYwh iAr8WUiPLjaBsnimOIbDqsc8FztDNH+WqDN8EeI2xojA/Gs/i1+n+GYOVf1b1qG2SGUi HK7LUIZqjZ3LV5eRPZPi++t+0yKu5e79gkmEkdjW29mczUyLeBbg9QqrtFNrjjETtZ/l y/RgAwlb3kT6yj7qYizJUrGmuJ9EhHG4OpBymzx3ygNise/+/y1h86M3UY3xtyWeRCP8 oONiPd8kQGepDxYWly/e7n7u8YobjZA2PHeXU1A8Pm7y58FlkLnRfSvEGzS6+mdbq8ad 1giQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789051208; x=1789656008; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=KgjPny+eSGIgNXcSG5I6onSrjp3K5wwDfeW3fNEHLX0=; b=n55uG1DxbfjNlybG+bex2gTCS0kMrYgEPjfjDENJpvVxi7ZcXQVWBQj04Lsmz8qaUJ E/7KrbOw1i/iedQhNVM36lx7AR1TtkczE2ZS68Lh5+SX1oosoBRcQdHJ6gY252/lUGNu S9k3qERuvU6bttLSL3k8aMhe570I9kqAnjr+iFGa2wEbIcniylEthx6OLwuqlYVYrBke RP3mK4bHNcz49W4wdSs9Qmo7OsADb5fbpz8V29F2DtJwtxZ33knxVYsb2bwSs/qXwGYu 1IQUdTVbdmduDg7/GLEkI63aADpaA5MjH5GWY9YPiEjoIRe3TPlWthpoI16RdUz1+H// 2quw== X-Forwarded-Encrypted: i=1; AKwUvBxceOd+jimgMO2uWX1dKKRPMMrqe5Ts6eHOmc/D6V+WAVDhyyrO2wDJumHLc6Fp8GgnbvK+ZE6Q+gP5CFM=@vger.kernel.org X-Gm-Message-State: AFuF++kZ+GVtA7cQitFg2SgEVO/IGH2qMpzbulsTMuccDVWCY/p7/bHp DsdYM0JmpMGGLNgcwn63b01YSy8uOcEUUKr4LcMOq+NrZjGUqxEbweP6OEHoKU0pm2pIigFK/bM VpQEcQtVibkTUj5w80xslq3qYU992caYI3fZs55wmGobLgW+Org0QqhfaCe0IeHPw0+Y= X-Gm-Gg: AYBFou18OARhoByTd/5DYnzEaqPP66HJDf0nZNXFqNfnAvd/ekkE0z0FHHwRviHNXs/ VgnY6nZJpFbRhGcpDl9ue8wBRHbWEeJXc8i5Ld5HnFeAegW8UatqkAxYSNx8TXcElEMiMqQCF+j s7dEh/F5VFheg7FcQiVmEpS+ctLVfXqmktaETcEaPD+qbVovPnCj/pXwgKod2nbweLIB1klvjfv TYp1mJ3NtOldJsyy0gnJl/agTQoaKxm5fNvlPKbZEpC9wwyiZ7tQAWzM/8od40oM3+MGazFuuUu uVowjIL0ZsQpa1PkoDdzPS2r/UbYjoewKsG85uUni+hu7fefK93/UPviiJfGDrI/m6ikMjnKkLx 2JqCXP77Xk0vfd9tmkMBj6nqFyYt4ddC33KK8+frcnZtv3fU= X-Received: by 2002:a05:6830:3495:b0:801:b3e8:25ab with SMTP id 46e09a7af769-801b3e8a6c8mr5287707a34.2.1789051207825; Thu, 10 Sep 2026 07:40:07 -0700 (PDT) X-Received: by 2002:a05:6830:3495:b0:801:b3e8:25ab with SMTP id 46e09a7af769-801b3e8a6c8mr5287560a34.2.1789051203817; Thu, 10 Sep 2026 07:40:03 -0700 (PDT) Received: from hu-zijuhu-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7fa02cddc41sm20740155a34.22.2026.09.10.07.40.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 07:40:03 -0700 (PDT) From: Zijun Hu Date: Thu, 10 Sep 2026 07:39:55 -0700 Subject: [PATCH BlueZ v4 1/3] doc/hci-protocol: Fix missing & on mtu argument in BT_RCVMTU example Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260910-vendor_hci-v4-1-b953ce117d12@oss.qualcomm.com> References: <20260910-vendor_hci-v4-0-b953ce117d12@oss.qualcomm.com> In-Reply-To: <20260910-vendor_hci-v4-0-b953ce117d12@oss.qualcomm.com> To: Marcel Holtmann , Luiz Augusto von Dentz Cc: Zijun Hu , linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTEwMDE3NyBTYWx0ZWRfX3zGWN4p9/B4F jeutRjcqXZ47xx6T9QcF4kflx1lDsgwFKB0cNQoDG5rFJW4XPgL2oWZgx+IPFPwN/E28UkqUC9l 8yjYVUCZo4q5h80LxoxK7Qnif5sfGyA= X-Proofpoint-GUID: 2mUx83ostCh6czgzjFlIfrMLGeaqL2D2 X-Proofpoint-ORIG-GUID: 2mUx83ostCh6czgzjFlIfrMLGeaqL2D2 X-Authority-Analysis: v=2.4 cv=EspHPicA c=1 sm=1 tr=0 ts=6aa2c148 cx=c_pps a=+3WqYijBVYhDct2f5Fivkw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=wa7QpaTpAAAA:8 a=zpTOe8WlNf4vmfFp-y0A:9 a=QEXdDO2ut3YA:10 a=eYe2g0i6gJ5uXG_o6N4q:22 a=ehqneT2-Ts4HTEaPPMaO:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTEwMDE3NyBTYWx0ZWRfX9T0TweSzTTgV 7izaKnHbCbdEjPogVUSeAhxkrK4Nm6BQx/F4VQfcZKht7y1cMTcOH8hqQTJ6yNRSI84GRkZLLCM bR0yMueJK61R/KomezU0M0F5+XyxornZ77uNOGGZodRUakVA9Da2mbA5lbuFGfvyi9UOV4wyV9G Q2sExMNQYNtI4V+gmGDXiKUhnH9nGQoSmAFVu18Z3MkdSma0T/I/D1S49qOUBAuStn8JeTxhwvu M4hsMzLm6MZdScHlFdagfLQMd9Cpx8A1rjfz+ykS9+dJUS9HzdcrhtaOHM1hOwpUFbnMQs46l59 B1H0ebhUhoA5qNa21CIgNQjGR3svZ4ctn06L/SHXSTijsEbT/vxPXlTVy1nXMoATHXJn9AcNDnE XvxtyUzK3B+znTIs4oJTkwt958zvRXPCHzIYqvjetVlZcUeNlpPbU4HFP/FjdbwFm+22MkQVxdC Hcw2rbSQ+pO2ZK0iAdg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-10_04,2026-09-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 suspectscore=0 spamscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 malwarescore=0 adultscore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609100177 getsockopt() requires a pointer argument, but mtu was passed by value. Fix by using &mtu instead of mtu. --- doc/hci-protocol.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/hci-protocol.rst b/doc/hci-protocol.rst index f28684655842..db10b35df736 100644 --- a/doc/hci-protocol.rst +++ b/doc/hci-protocol.rst @@ -129,17 +129,17 @@ Example: =20 .. code-block:: =20 uint16_t mtu; socklen_t len; int err; =20 len =3D sizeof(mtu); - err =3D getsockopt(sock, SOL_BLUETOOTH, BT_RCVMTU, mtu, &len); + err =3D getsockopt(sock, SOL_BLUETOOTH, BT_RCVMTU, &mtu, &len); =20 RESOURCES =3D=3D=3D=3D=3D=3D=3D=3D=3D =20 http://www.bluez.org =20 REPORTING BUGS =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D --=20 2.34.1 From nobody Fri Sep 25 16:04:05 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 D945E49F134 for ; Thu, 10 Sep 2026 14:40:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789051213; cv=none; b=GjpFQGu0cn0ray60l2oyBnbV5WrG4CswPm4LEUNd8o70UPgpWeMOYAFHL30S9cqrvYKFyr0x8o0NO+fyhTxEJZU2u/v51pbBZ7+fKs/5und6Ebtnpocxees7O1FTiuzHRV3o5xu2DRsuWK1wsPv1uZPoEwKgxbV21znxuvQW4ac= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789051213; c=relaxed/simple; bh=Y7CgLZjt83mCJzO+IYKo7Xz8T3dQW4naqAN6c67Kxn8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZkbdHJ1KjXsyZjj1plB8jek2aj0xl4SuBuU+VSRlH6+ZUGD6oF6l1h2i7L4mZ7Ud5VDxFE1vzSCRQI5JatkU4bF3BnWgkvMawc9TyRhYm4L1NsRHSsCgPIUOC9BozNNhzjW0IA8aJNmfbGM8SrqS6+FJjmVQzUcqTc3iCdOIXhA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=BZEhaRTZ; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=A4S0YmQT; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="BZEhaRTZ"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="A4S0YmQT" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68AC7ilM780804 for ; Thu, 10 Sep 2026 14:40:09 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= umzImKTKFCuagCNnRrR7rhAXOSarpb4xlG6ZP6A1hxU=; b=BZEhaRTZ1vLhwCLv 8pn8sa+Pg+mfr7l7yBzb+QU+hZFV1GLa10CA7m4ap2rUO33u3Xe96iqXiTpn0KVg nDpAtipV4XdjdZuPdwE+igDYHwfkmV1DpT6bQr9hCunRDxoUvHLwGBAoDXvZHkC3 IYVLWkaPKT+N34O1nQzt9ySXIgGJAtUtEQHcg9hGq2EZVUr54jO+p/FekTvgj/cs P0kY7/bUU0fYGeVpB9WO/YP7pGVjmyxD7xU4DRwIVIC+GLyEm7U9J9wm9/fP+Dgi iW66Mk+4sS8Q82yR/t7XMUKDyxebpxSodQfpNvyLy/A3SbcpMa+NDaq/Sl+vjvCL 8M9WkA== Received: from mail-ot1-f71.google.com (mail-ot1-f71.google.com [209.85.210.71]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gkrak9sqa-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 10 Sep 2026 14:40:09 +0000 (GMT) Received: by mail-ot1-f71.google.com with SMTP id 46e09a7af769-7e9e4a02796so855786a34.2 for ; Thu, 10 Sep 2026 07:40:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1789051209; x=1789656009; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=umzImKTKFCuagCNnRrR7rhAXOSarpb4xlG6ZP6A1hxU=; b=A4S0YmQTUpso6FNybX66SEWXhNrFGn9khpr77LoTcyczy5xjcapOfFAf/2gIjnIvm2 entUec0Tq6lMLtPhwHsH49CfqqTrJg+aWZSNqVRqbxK7ztO6TDGhNm38RyNHQQqpXQcb 67RLBQdJp8PhcwOuu82+wrTJBMYiEBtN3YlfbHShUZhu8BjWFl1yRLSCN9k2nj59e7p/ QBGExHnarVlqXvROA8xaOEM7YdSMWajbNT3ptN+iC42pnmIUOjfOZf2KYr3pZP5jYOKz o2CQmO3a1UcledD7OKv1a1KYmGMVpSgR0tSangZlXGoJL39V9HH1yzAIoO1y1kue/gcs asDg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789051209; x=1789656009; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=umzImKTKFCuagCNnRrR7rhAXOSarpb4xlG6ZP6A1hxU=; b=an/H+OcUuqpq8b4Uyn3ieLW+YNBYLVlje0KUplJXPROXBdN50RWjmHhUBusFv689G6 EAPcgQjVapvjmhtH7kdp4cKbHLBwrnySmTcGx1LWUKuvjB3xpWAHPO6+nS0VxoWCRelV UoBvm3w8h1MMwXoUFI2VLbEK4HXOxMZYh9227b+neqYbLyu4bCzmz3QRSOxDNHd887ru 7o3KfZX1zqq+z7g1EBn9iWczAp3TyhewZVDy7cgu9xJqQXyuPuFN+JUsrepI1A+IPtMT BhnEbswnMWu09w2Qkfr4Yul1pME0BvzdieBJ0Fl8KNYuH/HvNG9Gng5RPdkGKfMU7sM4 Ly4w== X-Forwarded-Encrypted: i=1; AKwUvBwX6xxcbbYmZ5hcvknKLNgx3xkYYxQyUY1jUHsCNhLSUPxeVRhmnCpl3ChdtqaN8/FtZZAU8+iTZY/cRLQ=@vger.kernel.org X-Gm-Message-State: AFuF++m0S4mEnQxOuR165/5a/t1FcUeGUNm1Ido8LQwgr2X85fOP53VB 7hTg+vQtxuNDUqysCLPPZtBrOBVdyUFGmWM/+7o024svZqrBZThry67HuLqYMch/X6TX+/WQSjf kl9+oLSo5g03x/Eh13mfuB8JaqdBnqJpPjAa6V2LSwK01yxcw+1gjj095sbmwkgNJos4= X-Gm-Gg: AYBFou1WCOPQKWPE0wXjkN2MM1NteOMlj8ROVvVNaFDZE8LJeD6k6Ohg1spOBfq1ud8 RUU6n0ID0Mv8fadrTOxf/X7CV0b4wdMcUzBJKGvej8XxFa20F+09Ghqn5DKzcWdB1qahAoyvnRC 50PGx0m9a+4n4ULumxXs93+RpSAjXGiZg5aIlXGL51bD0QOUUKuLztXdpPUFKih7izvEUf/cbfI ly+QgpFZ3yHNJfWgQmz1EJLhJY9VEui2pzyRuAvQXl/RdjoQ1HBirva/ZFp/tq3VRaADdSatjnD Z/4NS758BQldAJJtYxyL3gBgf2/O+0FAsCXu6I1yFEcH2IEQU5yqzhyu/mk4D9IkyEUHhXeuh0Z WKVhZl0Mf5QlRllw1CsukEVPwBXyk9aGryZXsTzC8hYzWcm0= X-Received: by 2002:a05:6830:7316:b0:7e9:bbf5:1079 with SMTP id 46e09a7af769-7fb7d276778mr18800133a34.2.1789051208619; Thu, 10 Sep 2026 07:40:08 -0700 (PDT) X-Received: by 2002:a05:6830:7316:b0:7e9:bbf5:1079 with SMTP id 46e09a7af769-7fb7d276778mr18799970a34.2.1789051205057; Thu, 10 Sep 2026 07:40:05 -0700 (PDT) Received: from hu-zijuhu-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7fa02cddc41sm20740155a34.22.2026.09.10.07.40.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 07:40:04 -0700 (PDT) From: Zijun Hu Date: Thu, 10 Sep 2026 07:39:56 -0700 Subject: [PATCH BlueZ v4 2/3] monitor: s/vendor_(evt|event)/\1_vendor/ Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260910-vendor_hci-v4-2-b953ce117d12@oss.qualcomm.com> References: <20260910-vendor_hci-v4-0-b953ce117d12@oss.qualcomm.com> In-Reply-To: <20260910-vendor_hci-v4-0-b953ce117d12@oss.qualcomm.com> To: Marcel Holtmann , Luiz Augusto von Dentz Cc: Zijun Hu , linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTEwMDE3NyBTYWx0ZWRfX+MgoPPCGoyi0 A2ickel1KW6JFQdxbpDWg1fopZkQXdNYmgO31PqwzNJaPywkbzpOBCEI/RPFLe0m5zpBKiyl6re jGtCaDrXTtUb1qDyRUmq3y51JAxvbok= X-Proofpoint-GUID: 7ZuqGub4HcmKf2dhjl9lfBYW1zUsBeJD X-Proofpoint-ORIG-GUID: 7ZuqGub4HcmKf2dhjl9lfBYW1zUsBeJD X-Authority-Analysis: v=2.4 cv=EspHPicA c=1 sm=1 tr=0 ts=6aa2c149 cx=c_pps a=OI0sxtj7PyCX9F1bxD/puw==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=Dei6p5SHAAAA:8 a=7rLAfYvYRfl3bdLfV3sA:9 a=QEXdDO2ut3YA:10 a=Z1Yy7GAxqfX1iEi80vsk:22 a=M-Yerj1wOn-OpK7r_3ei:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTEwMDE3NyBTYWx0ZWRfX8dQ1Z3xpslIh QN0/f/Iwdq2N+gjJjI1014hBrOeDR1UeD+4sUh+3KB8zHps+nVN1UeFBayJ4SSd4SU4G9WxB7ya f/GkMmOc1Fvk19MKXqx9tFC3RTOGDzoAZEk0zrhpT41IeBLWbBBjhqF3I+L08eHOLyKwjhOlNeJ 7I5T7GpsnP0AONz8/9Ap8vdEBBxEhZef/orWB9wNrF7M9Um81wHWOVl/STyneNoarDvgPAkqTWb CCGPLgKidr5zEI6ayCq+1CIyTi11T0c0H9Mp3GXVshAJTtdO1IXpV4hJXbNxHEWl20hCMZM+WIn f9fzPpy3kL3lLB5LhOz0H/b+uZuwcV+t5YLcPz8nfNUCPjPnbom39RMFZq5jycCBH/OYG7Xs9oj VejvefTCUBPUmUOkVtujp9DTkxpAzHLQ/pQf9BNECR7ExgbuKItaBLBNxMlpQdlBFXZ9yd3K6KG JLdwmb1PruOPYg1o25A== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-10_04,2026-09-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 suspectscore=0 spamscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 malwarescore=0 adultscore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609100177 Kernel include/net/bluetooth/hci.h defines: #define HCI_EVENT_PKT 0x04 #define HCI_VENDOR_PKT 0xff #define HCI_EV_VENDOR 0xff HCI_VENDOR_PKT and HCI_EV_VENDOR share the same value, but are very different, as the table below shows: +------------+-----------------------+---------------------------+ | | HCI_VENDOR_PKT | HCI_EV_VENDOR | +------------+-----------------------+---------------------------+ | Defined by | Vendor | BT SIG | +------------+-----------------------+---------------------------+ | Hierarchy | Parallel to | Nested inside | | | HCI_EVENT_PKT | HCI_EVENT_PKT | +------------+-----------------------+---------------------------+ | Direction | RX and TX | RX only | +------------+-----------------------+---------------------------+ | kernel <-> | HCI_VENDOR_PKT, ... | 0x04, HCI_EV_VENDOR, ... | | userspace | | | +------------+-----------------------+---------------------------+ | kernel <-> | RX: 23, vendor packet | RX: 3, HCI_EV_VENDOR, ... | | monitor | TX: 22, vendor packet | | +------------+-----------------------+---------------------------+ monitor is about to gain HCI_VENDOR_PKT support. To avoid confusing the two, rename what deals with HCI_EV_VENDOR to follow its pattern: s/vendor_(evt|event)/\1_vendor/ --- monitor/broadcom.c | 10 +++++----- monitor/broadcom.h | 4 ++-- monitor/intel.c | 16 ++++++++-------- monitor/intel.h | 4 ++-- monitor/msft.c | 6 +++--- monitor/msft.h | 4 ++-- monitor/packet.c | 20 ++++++++++---------- monitor/vendor.c | 2 +- monitor/vendor.h | 4 ++-- 9 files changed, 35 insertions(+), 35 deletions(-) diff --git a/monitor/broadcom.c b/monitor/broadcom.c index 80c95e91db0a..0dbc5eb39bb8 100644 --- a/monitor/broadcom.c +++ b/monitor/broadcom.c @@ -707,24 +707,24 @@ void broadcom_lm_diag(const void *data, uint8_t size) } =20 static void lm_diag_evt(struct timeval *tv, uint16_t index, const void *data, uint8_t size) { broadcom_lm_diag(data, 63); } =20 -static const struct vendor_evt vendor_evt_table[] =3D { +static const struct evt_vendor evt_vendor_table[] =3D { { 0xb4, "LM Diag", lm_diag_evt, 64, true }, { } }; =20 -const struct vendor_evt *broadcom_vendor_evt(uint8_t evt) +const struct evt_vendor *broadcom_evt_vendor(uint8_t evt) { int i; =20 - for (i =3D 0; vendor_evt_table[i].str; i++) { - if (vendor_evt_table[i].evt =3D=3D evt) - return &vendor_evt_table[i]; + for (i =3D 0; evt_vendor_table[i].str; i++) { + if (evt_vendor_table[i].evt =3D=3D evt) + return &evt_vendor_table[i]; } =20 return NULL; } diff --git a/monitor/broadcom.h b/monitor/broadcom.h index 5cb51d81dbb8..36492a4071a7 100644 --- a/monitor/broadcom.h +++ b/monitor/broadcom.h @@ -7,13 +7,13 @@ * Copyright (C) 2002-2010 Marcel Holtmann * * */ =20 #include =20 struct vendor_ocf; -struct vendor_evt; +struct evt_vendor; =20 const struct vendor_ocf *broadcom_vendor_ocf(uint16_t ocf); -const struct vendor_evt *broadcom_vendor_evt(uint8_t evt); +const struct evt_vendor *broadcom_evt_vendor(uint8_t evt); void broadcom_lm_diag(const void *data, uint8_t size); diff --git a/monitor/intel.c b/monitor/intel.c index 782fda675422..d52b2dc80e4c 100644 --- a/monitor/intel.c +++ b/monitor/intel.c @@ -1286,17 +1286,17 @@ static void system_exception_evt(struct timeval *tv= , uint16_t index, break; } =20 print_field("Type: %s (0x%2.2x)", str, type); =20 packet_hexdump(data + 1, size - 1); } =20 -static const struct vendor_evt vendor_evt_table[] =3D { +static const struct evt_vendor evt_vendor_table[] =3D { { 0x00, "Startup", startup_evt, 0, true }, { 0x01, "Fatal Exception", fatal_exception_evt, 4, true }, { 0x02, "Bootup", bootup_evt, 6, true }, { 0x05, "Default BD Data", default_bd_data_evt, 1, true }, @@ -1861,17 +1861,17 @@ static void intel_vendor_ext_evt(struct timeval *tv= , uint16_t index, tlv =3D process_ext_subevent(tlv, last_tlv); =20 /* If an error occurs in decoding the subevents, hexdump the packet. */ if (!tlv) packet_hexdump(data, size); } =20 /* Vendor extended events with a vendor prefix. */ -static const struct vendor_evt vendor_prefix_evt_table[] =3D { +static const struct evt_vendor vendor_prefix_evt_table[] =3D { { 0x03, "Extended Telemetry", intel_vendor_ext_evt }, { } }; =20 static const uint8_t intel_vendor_prefix[] =3D {0x87, 0x80}; #define INTEL_VENDOR_PREFIX_SIZE sizeof(intel_vendor_prefix) =20 /* @@ -1883,17 +1883,17 @@ static const uint8_t intel_vendor_prefix[] =3D {0x8= 7, 0x80}; * When =3D=3D 0x03, it is a telemetry event; and * is a number of tlv data. */ struct vendor_prefix_evt { uint8_t prefix_data[INTEL_VENDOR_PREFIX_SIZE]; uint8_t subopcode; }; =20 -static const struct vendor_evt *intel_vendor_prefix_evt(const void *data, +static const struct evt_vendor *intel_vendor_prefix_evt(const void *data, int *consumed_size) { unsigned int i; const struct vendor_prefix_evt *vnd =3D data; char prefix_string[INTEL_VENDOR_PREFIX_SIZE * 2 + 1] =3D { 0 }; =20 /* Check if the vendor prefix matches. */ for (i =3D 0; i < INTEL_VENDOR_PREFIX_SIZE; i++) { @@ -1914,29 +1914,29 @@ static const struct vendor_evt *intel_vendor_prefix= _evt(const void *data, *consumed_size =3D sizeof(struct vendor_prefix_evt); return &vendor_prefix_evt_table[i]; } } =20 return NULL; } =20 -const struct vendor_evt *intel_vendor_evt(const void *data, int *consumed_= size) +const struct evt_vendor *intel_evt_vendor(const void *data, int *consumed_= size) { uint8_t evt =3D *((const uint8_t *) data); int i; =20 /* * Handle the vendor event without a vendor prefix. * 0xff - * This loop checks whether the exists in the vendor_evt_table. + * This loop checks whether the exists in the evt_vendor_table. */ - for (i =3D 0; vendor_evt_table[i].str; i++) { - if (vendor_evt_table[i].evt =3D=3D evt) - return &vendor_evt_table[i]; + for (i =3D 0; evt_vendor_table[i].str; i++) { + if (evt_vendor_table[i].evt =3D=3D evt) + return &evt_vendor_table[i]; } =20 /* * It is not a regular event. Check whether it is a vendor extended * event that comes with a vendor prefix followed by a subopcode. */ return intel_vendor_prefix_evt(data, consumed_size); } diff --git a/monitor/intel.h b/monitor/intel.h index bfb04540c058..e218745a8712 100644 --- a/monitor/intel.h +++ b/monitor/intel.h @@ -7,12 +7,12 @@ * Copyright (C) 2002-2010 Marcel Holtmann * * */ =20 #include =20 struct vendor_ocf; -struct vendor_evt; +struct evt_vendor; =20 const struct vendor_ocf *intel_vendor_ocf(uint16_t ocf); -const struct vendor_evt *intel_vendor_evt(const void *data, int *consumed_= size); +const struct evt_vendor *intel_evt_vendor(const void *data, int *consumed_= size); diff --git a/monitor/msft.c b/monitor/msft.c index d41f10d68a96..1fd13cf88ea0 100644 --- a/monitor/msft.c +++ b/monitor/msft.c @@ -364,23 +364,23 @@ static void msft_evt(struct timeval *tv, uint16_t ind= ex, " (0x%2.2x)", code); =20 if (code_func) code_func(data, size); else packet_hexdump(data + 1, size - 1); } =20 -static const struct vendor_evt vendor_evt_entry =3D { +static const struct evt_vendor evt_vendor_entry =3D { 0x00, "Extension", msft_evt, 1, false }; =20 -const struct vendor_evt *msft_vendor_evt(void) +const struct evt_vendor *msft_evt_vendor(void) { - return &vendor_evt_entry; + return &evt_vendor_entry; } =20 bool msft_event_code_valid(uint8_t code) { int i; =20 for (i =3D 0; evt_table[i].str; i++) { if (evt_table[i].code =3D=3D code) diff --git a/monitor/msft.h b/monitor/msft.h index ff6c28011018..8ecc925add80 100644 --- a/monitor/msft.h +++ b/monitor/msft.h @@ -178,13 +178,13 @@ struct msft_evt_monitor_device { uint8_t subevt; uint8_t addr_type; uint8_t addr[6]; uint8_t handle; uint8_t state; } __attribute__((packed)); =20 struct vendor_ocf; -struct vendor_evt; +struct evt_vendor; =20 const struct vendor_ocf *msft_vendor_ocf(void); -const struct vendor_evt *msft_vendor_evt(void); +const struct evt_vendor *msft_evt_vendor(void); bool msft_event_code_valid(uint8_t code); diff --git a/monitor/packet.c b/monitor/packet.c index 00b37e0b0514..058d12dd465e 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -11164,46 +11164,46 @@ static const struct vendor_ocf *current_vendor_oc= f(uint16_t ocf) return intel_vendor_ocf(ocf); case COMPANY_ID_BROADCOM: return broadcom_vendor_ocf(ocf); } =20 return NULL; } =20 -static const struct vendor_evt *current_vendor_evt(const void *data, +static const struct evt_vendor *current_evt_vendor(const void *data, uint8_t size, int *consumed_size) { uint16_t manufacturer; uint8_t evt =3D *((const uint8_t *) data); =20 if (msft_event_prefix_match(data, size)) { *consumed_size =3D index_list[index_current].msft_evt_len; - return msft_vendor_evt(); + return msft_evt_vendor(); } =20 /* A regular vendor event consumes 1 byte. */ *consumed_size =3D 1; =20 if (index_current < MAX_INDEX) manufacturer =3D index_list[index_current].manufacturer; else manufacturer =3D fallback_manufacturer; =20 switch (manufacturer) { case COMPANY_ID_INTEL: - return intel_vendor_evt(data, consumed_size); + return intel_evt_vendor(data, consumed_size); case COMPANY_ID_BROADCOM: - return broadcom_vendor_evt(evt); + return broadcom_evt_vendor(evt); } =20 return NULL; } =20 -static const char *current_vendor_evt_str(const void *data, uint8_t size) +static const char *current_evt_vendor_str(const void *data, uint8_t size) { uint16_t manufacturer; =20 if (msft_event_prefix_match(data, size)) return "Microsoft"; =20 if (index_current < MAX_INDEX) manufacturer =3D index_list[index_current].manufacturer; @@ -13891,27 +13891,27 @@ static void le_meta_event_evt(struct timeval *tv,= uint16_t index, subevent_data =3D &le_meta_event_table[i]; break; } } =20 print_subevent(tv, index, subevent_data, data + 1, size - 1); } =20 -static void vendor_evt(struct timeval *tv, uint16_t index, +static void evt_vendor(struct timeval *tv, uint16_t index, const void *data, uint8_t size) { struct subevent_data vendor_data; char vendor_str[150]; int consumed_size; - const struct vendor_evt *vnd =3D current_vendor_evt(data, size, + const struct evt_vendor *vnd =3D current_evt_vendor(data, size, &consumed_size); =20 if (vnd) { - const char *str =3D current_vendor_evt_str(data, size); + const char *str =3D current_evt_vendor_str(data, size); =20 if (str) { snprintf(vendor_str, sizeof(vendor_str), "%s %s", str, vnd->str); vendor_data.str =3D vendor_str; } else { vendor_data.str =3D vnd->str; } @@ -13926,17 +13926,17 @@ static void vendor_evt(struct timeval *tv, uint16= _t index, } else { uint16_t manufacturer; =20 if (index_current < MAX_INDEX) manufacturer =3D index_list[index_current].manufacturer; else manufacturer =3D fallback_manufacturer; =20 - vendor_event(manufacturer, data, size); + event_vendor(manufacturer, data, size); } } =20 struct event_data { uint8_t event; const char *str; void (*func) (struct timeval *tv, uint16_t index, const void *data, uint8_t size); @@ -14093,17 +14093,17 @@ static const struct event_data event_table[] =3D { { 0x56, "Inquiry Response Notification", inquiry_response_notify_evt, 4, true }, { 0x57, "Authenticated Payload Timeout Expired", auth_payload_timeout_expired_evt, 2, true }, { 0x58, "SAM Status Change" }, { 0x59, "Encryption Change v2", encrypt_change_evt_v2, 5, true }, { 0xfe, "Testing" }, - { 0xff, "Vendor", vendor_evt, 0, false }, + { 0xff, "Vendor", evt_vendor, 0, false }, { } }; =20 void packet_new_index(struct timeval *tv, uint16_t index, const char *labe= l, uint8_t type, uint8_t bus, const char *name) { char details[48]; =20 diff --git a/monitor/vendor.c b/monitor/vendor.c index ecbfcf2eb817..9942e3d735d8 100644 --- a/monitor/vendor.c +++ b/monitor/vendor.c @@ -12,12 +12,12 @@ #ifdef HAVE_CONFIG_H #include #endif =20 #define _GNU_SOURCE #include "packet.h" #include "vendor.h" =20 -void vendor_event(uint16_t manufacturer, const void *data, uint8_t size) +void event_vendor(uint16_t manufacturer, const void *data, uint8_t size) { packet_hexdump(data, size); } diff --git a/monitor/vendor.h b/monitor/vendor.h index 996ed44cb18e..1ce42a645096 100644 --- a/monitor/vendor.h +++ b/monitor/vendor.h @@ -17,18 +17,18 @@ struct vendor_ocf { void (*cmd_func) (uint16_t index, const void *data, uint8_t size); uint8_t cmd_size; bool cmd_fixed; void (*rsp_func) (uint16_t index, const void *data, uint8_t size); uint8_t rsp_size; bool rsp_fixed; }; =20 -struct vendor_evt { +struct evt_vendor { uint8_t evt; const char *str; void (*evt_func) (struct timeval *tv, uint16_t index, const void *data, uint8_t size); uint8_t evt_size; bool evt_fixed; }; =20 -void vendor_event(uint16_t manufacturer, const void *data, uint8_t size); +void event_vendor(uint16_t manufacturer, const void *data, uint8_t size); --=20 2.34.1 From nobody Fri Sep 25 16:04:05 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (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 0266A492E27 for ; Thu, 10 Sep 2026 14:40:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789051211; cv=none; b=JL9OKLFviy+pDa+9+FxApkzxYiBXTKAwQgBSEaKlCdO6F5KWVxQB9YKjaNYSEnnAb8Pm9kYeo8+HCvKEOLy44Vjc7BI9kNWmVN9tpTiv3i1Nz5ymQaxA9OFWIXiv543ZiboXANbpnpoh1K/1gz1lhHJ9GxAQxa3HbkYt2FYJGSQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789051211; c=relaxed/simple; bh=PAcEGguv5Ci6zow8o+tvIiIRDbV3cpTG4m7QA/uCO6g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DKe0NQwXzCyb+UV7XoE8KwodzCNaT6fV24SQ98s2lKOELnhv0szexDKetE29bWB8tFF1qf2i0hokP49FyZThlrEGMLVqzhVeDA2o+xZwLb491zYhOVTiNvUX1gp4OY3weavW6+qD56o+BxTSR+MzK5I9vlXmizwkR/6hf3FwIeI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=Pps2lZ/U; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=OeWOlmOd; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="Pps2lZ/U"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="OeWOlmOd" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68AC7oLa781276 for ; Thu, 10 Sep 2026 14:40:07 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=qcppdkim1; bh= vapBzwkaqvpHjBwbkS1xWWGf5FLNHXEfGsLyCdSOTB4=; b=Pps2lZ/U17K2iJTX Gi3tLn4Q42Q5UqP/KQXFtw0xnw/1cx6IiGfE/PTz860p8sgTKoNh4rcLTilGFZkD AEveXhyRTHj84VPeBg/OmxnlDoxi0jSyJ8wThxO25pPDD/3Gc/wczELaC3oQEKgT wdTBPpx9UHiJtdAp6wP65AAucypUf07H8ozqNKRaCA4IJmE0juGe3/dcP+TJmUzt yaBaYcQnbL3HZ23V2Xzv3tkv6jn1fNqlkrYW2K9NRWngnVN2jKjCYLzPn+oTIlMM 75svNbfZ8Djf7KGMjTFXk/A73u52IYQ9wIPL+4AwyNQAN8kZTMZI5Y/H/PvroVRd sQdXmQ== Received: from mail-ot1-f70.google.com (mail-ot1-f70.google.com [209.85.210.70]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gkrak9sq4-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Thu, 10 Sep 2026 14:40:07 +0000 (GMT) Received: by mail-ot1-f70.google.com with SMTP id 46e09a7af769-7f4effaa74fso710669a34.0 for ; Thu, 10 Sep 2026 07:40:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1789051207; x=1789656007; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=vapBzwkaqvpHjBwbkS1xWWGf5FLNHXEfGsLyCdSOTB4=; b=OeWOlmOd11ju+bTltLF5rtoAjguhKMG649fXPKQjiyEiHNTC/bH+/9ISJNwX32rPVP +YA9TD74Lf9cuKsDkhlcNCIx/KPl0iLTgPIK18xE6GPW86EeVa6xb5WhtSfkDCP+s3ai ebmtc9/kIdiJUEOC1ojztUtdyaOd3OdGzqH6OKu7QmqSaFpwhNRjrr88zDgy5E2BfqkH jkj2bbCs4uzOL6tF8//wMW+aIzAgEdwlCXPjid5mGpkkRdm9EOsTrys2EP8C+QrzYpPb 61aayVDPYa4B9tMP76rHhrtE+JsPuJ0z+gLcxD05x64qz0t4zL0bVXFWswJLzRxS5+ob Qp5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789051207; x=1789656007; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=vapBzwkaqvpHjBwbkS1xWWGf5FLNHXEfGsLyCdSOTB4=; b=DIaibMqCR/PLUthLAyBehz1WU3v04d/SEQ5YTvo6VnO3rd8RDL06wV7mAc+s92EK7z 9MwqowvLl/uBviySQ4P2ZCVz3bryf7jdvcDBy/kSvU5Io0B8S422mt0G8yPgNOMKVqdM 5fjPAs/3YPryfU3emko6MNDfufa/iITCFFyLi/yqb4Z9lKkDM0QIBZ2Ml104fHZEL2QF 81uMQ5i0VrkAhrU8LaGoHwvSurPBIVFXIy+KarupF6vKScYK+o3+stEAaqMke6zO82Ng tWJRzIXbSb5aqRY8eBcKvWYzWq+OKAwWTBDDSl3ev41g0Jwc3csqofR87gYUAElPPRDN CRBg== X-Forwarded-Encrypted: i=1; AKwUvBxUUOc+QTmxFcEs359ik6zZlxFLFW4mb+9vcDF7LOD2egYOGFJjKksP6UflyFCd0PqSrX2G4AD5Rvl+ci0=@vger.kernel.org X-Gm-Message-State: AFuF++mEE5MlkFAJSLIzDKP3DwMvj+fqf+A16d9b1y30uDDFrsn4pCTR 8f4jToR+Q7ff8b3PFneHzOCue/u+xWxONxXxUmg1BLZVhMXbI1mcGdHKKjkP3Vk6KEQonHjfncm meOF4pyZFjZJaJhN6o/oO3H/D1B0uJjR6MwfncM56cVO3KuR0PtQHDS/HKRrNx/SfYwY= X-Gm-Gg: AYBFou103l6tWD4O24s3B/DvqhErOKpvCpltmmQEEZkk6yKWm19FUcWGSiAURv+HQN/ E/VDcZTFUeifiw1S9LDyV0e87CoPBqKRJCB8lv2C4FIEmezwr8b6RipsMtcmBf6dwfzCXjVT0hj QMc5XxqeJxtXiRtxeglinKvI5PZHOZfDKdUZLRtMxrZcDLq6Iy5oLv/QmDzQQpcYzKoN+ASJGVV HkEM/lNjyHXar4w/ycBH/0rftO8DjAe4nwVgT6FgFzu9xE+NUTPkW+3mYWLe2/U73l0zy+dj/v9 YD5nItFaKoiRSn812XKnRBwqiP79ULKij28KNNN+UAIukrd6DG8REFhM3PiVIEz6e3EjtyBA+u7 vP6Z7/kXiVsqoV8VadQfuMVAY5EkgGvXWAZT0UlfFke6dhLI= X-Received: by 2002:a05:6830:f89:b0:7ee:363d:ce16 with SMTP id 46e09a7af769-7fb76e3cd73mr18760317a34.0.1789051206606; Thu, 10 Sep 2026 07:40:06 -0700 (PDT) X-Received: by 2002:a05:6830:f89:b0:7ee:363d:ce16 with SMTP id 46e09a7af769-7fb76e3cd73mr18760285a34.0.1789051206135; Thu, 10 Sep 2026 07:40:06 -0700 (PDT) Received: from hu-zijuhu-lv.qualcomm.com (Global_NAT1.qualcomm.com. [129.46.96.20]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7fa02cddc41sm20740155a34.22.2026.09.10.07.40.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 10 Sep 2026 07:40:05 -0700 (PDT) From: Zijun Hu Date: Thu, 10 Sep 2026 07:39:57 -0700 Subject: [PATCH BlueZ v4 3/3] monitor: Support vendor packets Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260910-vendor_hci-v4-3-b953ce117d12@oss.qualcomm.com> References: <20260910-vendor_hci-v4-0-b953ce117d12@oss.qualcomm.com> In-Reply-To: <20260910-vendor_hci-v4-0-b953ce117d12@oss.qualcomm.com> To: Marcel Holtmann , Luiz Augusto von Dentz Cc: Zijun Hu , linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.15.2 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTEwMDE3NyBTYWx0ZWRfX/uT4Ogl+HW8F C6MR4tLkVAXczg0LVZtueYJhF/z2otpitPvYmPsMy5SVZYeVCCxzSkPBz7kSAtBuU+hkMDk0aHi YIxznStc1jCE3USCmwAKeXxP4MmYOwc= X-Proofpoint-GUID: msZnV4gJN4TGfDlPVbRso72rEhq9fSo0 X-Proofpoint-ORIG-GUID: msZnV4gJN4TGfDlPVbRso72rEhq9fSo0 X-Authority-Analysis: v=2.4 cv=EspHPicA c=1 sm=1 tr=0 ts=6aa2c147 cx=c_pps a=7uPEO8VhqeOX8vTJ3z8K6Q==:117 a=ouPCqIW2jiPt+lZRy3xVPw==:17 a=IkcTkHD0fZMA:10 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=wKszYPmeBrtX0xbgVwQA:9 a=QEXdDO2ut3YA:10 a=EXS-LbY8YePsIyqnH6vw:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTEwMDE3NyBTYWx0ZWRfX4whtFtHL86g9 TA5fRz0UgdndQN9oABCCw/bJvEjSEJeED2dNrVrmvjo4xz66KSKKC6vgZiXajisTwbwFJI6FQCC KMzRCbOZOtc4Tua9tfHDLz6b0BtVxvfw7hGDh6MgvShWZBoDozAHZvgjdhOJX4DEmSj6ZY50Y6G UUkO5QmMXcKj2chdZdncujVCtTys9LQN6vKTxaRa/G5v8HGav0EB9DCVL8rCPrQO86MX0N4nGGK JTTY7iIQH3MlFiJzxm4TUE4A7QysKnp/PeGZ7LA6/10XFhXfcHNWESCfp1MULqxq8Tvb6ac3UPg vtvrmlpcr3UQsa6WlBLIErdxhqBgJ5gKmGvjycTSb6tbjXIHpVf1mvb9gS+/uRsa57QawWphdM/ k10HjMqHj6UokcPc1AgeriuNCb6QONIVQKoKvBca2nBGGpQLu+ngh2seQ0ihd2IYK5RoHTkOFnY 15f8Nu9ZMD5kNZGdvVg== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-10_04,2026-09-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 suspectscore=0 spamscore=0 clxscore=1015 priorityscore=1501 impostorscore=0 malwarescore=0 adultscore=0 phishscore=0 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609100177 Kernel include/net/bluetooth/hci.h defines its packet type as: #define HCI_VENDOR_PKT 0xff - Defined by vendor - Bidirectional (RX and TX) - kernel <-> userspace: HCI_VENDOR_PKT followed by vendor packet - kernel <-> monitor: vendor packet has TX opcode (22) or RX opcode (23) Support them in tool btmon. --- doc/btsnoop-protocol.rst | 8 ++++++++ monitor/analyze.c | 23 +++++++++++++++++++++++ monitor/packet.c | 26 ++++++++++++++++++++++++++ monitor/packet.h | 2 ++ src/shared/btsnoop.h | 2 ++ 5 files changed, 61 insertions(+) diff --git a/doc/btsnoop-protocol.rst b/doc/btsnoop-protocol.rst index a875db63a9dd..ba1eb858f185 100644 --- a/doc/btsnoop-protocol.rst +++ b/doc/btsnoop-protocol.rst @@ -111,16 +111,24 @@ values match the definitions in ``src/shared/btsnoop.= h``. * - BTSNOOP_OPCODE_ISO_TX_PKT - 18 - 0x0012 - Outgoing ISO packet * - BTSNOOP_OPCODE_ISO_RX_PKT - 19 - 0x0013 - Incoming ISO packet + * - BTSNOOP_OPCODE_VENDOR_TX_PKT + - 22 + - 0x0016 + - Outgoing vendor packet + * - BTSNOOP_OPCODE_VENDOR_RX_PKT + - 23 + - 0x0017 + - Incoming vendor packet =20 New Index --------- =20 Code: 0x0000 =20 Parameters: =20 diff --git a/monitor/analyze.c b/monitor/analyze.c index 9742981ec21a..a8bea9efc784 100644 --- a/monitor/analyze.c +++ b/monitor/analyze.c @@ -45,16 +45,17 @@ struct hci_dev { struct timeval time_added; struct timeval time_removed; unsigned long num_hci; unsigned long num_cmd; unsigned long num_evt; unsigned long num_acl; unsigned long num_sco; unsigned long num_iso; + unsigned long num_vendor; unsigned long vendor_diag; unsigned long system_note; unsigned long user_log; unsigned long ctrl_msg; unsigned long unknown; uint16_t manufacturer; struct queue *conn_list; }; @@ -478,16 +479,17 @@ static void dev_destroy(void *data) printf("\n"); =20 =20 printf(" %lu commands\n", dev->num_cmd); printf(" %lu events\n", dev->num_evt); printf(" %lu ACL packets\n", dev->num_acl); printf(" %lu SCO packets\n", dev->num_sco); printf(" %lu ISO packets\n", dev->num_iso); + printf(" %lu vendor packets\n", dev->num_vendor); printf(" %lu vendor diagnostics\n", dev->vendor_diag); printf(" %lu system notes\n", dev->system_note); printf(" %lu user logs\n", dev->user_log); printf(" %lu control messages \n", dev->ctrl_msg); printf(" %lu unknown opcodes\n", dev->unknown); queue_destroy(dev->conn_list, conn_destroy); printf("\n"); =20 @@ -1398,16 +1400,29 @@ static void iso_pkt(struct timeval *tv, uint16_t in= dex, bool out, =20 if (out) { conn_pkt_tx(conn, tv, size - sizeof(*hdr), NULL); } else { conn_pkt_rx(conn, tv, size - sizeof(*hdr), NULL); } } =20 +static void vendor_pkt(struct timeval *tv, uint16_t index, bool out, + const void *data, uint16_t size) +{ + struct hci_dev *dev; + + dev =3D dev_lookup(index); + if (!dev) + return; + + dev->num_hci++; + dev->num_vendor++; +} + static void unknown_opcode(struct timeval *tv, uint16_t index, const void *data, uint16_t size) { struct hci_dev *dev; =20 dev =3D dev_lookup(index); if (!dev) return; @@ -1504,16 +1519,24 @@ void analyze_trace(const char *path) case BTSNOOP_OPCODE_ISO_TX_PKT: num_frames++; iso_pkt(&tv, index, true, buf, pktlen); break; case BTSNOOP_OPCODE_ISO_RX_PKT: num_frames++; iso_pkt(&tv, index, false, buf, pktlen); break; + case BTSNOOP_OPCODE_VENDOR_TX_PKT: + num_frames++; + vendor_pkt(&tv, index, true, buf, pktlen); + break; + case BTSNOOP_OPCODE_VENDOR_RX_PKT: + num_frames++; + vendor_pkt(&tv, index, false, buf, pktlen); + break; default: unknown_opcode(&tv, index, buf, pktlen); break; } =20 num_packets++; } =20 diff --git a/monitor/packet.c b/monitor/packet.c index 058d12dd465e..39e042108c2d 100644 --- a/monitor/packet.c +++ b/monitor/packet.c @@ -68,16 +68,17 @@ =20 #define COLOR_HCI_COMMAND COLOR_BLUE #define COLOR_HCI_COMMAND_UNKNOWN COLOR_WHITE_BG #define COLOR_HCI_EVENT COLOR_MAGENTA #define COLOR_HCI_EVENT_UNKNOWN COLOR_WHITE_BG #define COLOR_HCI_ACLDATA COLOR_CYAN #define COLOR_HCI_SCODATA COLOR_YELLOW #define COLOR_HCI_ISODATA COLOR_YELLOW +#define COLOR_HCI_VENDOR COLOR_GREEN =20 #define COLOR_UNKNOWN_ERROR COLOR_WHITE_BG #define COLOR_UNKNOWN_FEATURE_BIT COLOR_WHITE_BG #define COLOR_UNKNOWN_COMMAND_BIT COLOR_WHITE_BG #define COLOR_UNKNOWN_EVENT_MASK COLOR_WHITE_BG #define COLOR_UNKNOWN_LE_STATES COLOR_WHITE_BG #define COLOR_UNKNOWN_SERVICE_CLASS COLOR_WHITE_BG #define COLOR_UNKNOWN_PKT_TYPE_BIT COLOR_WHITE_BG @@ -4527,16 +4528,22 @@ void packet_monitor(struct timeval *tv, struct ucre= d *cred, packet_hci_scodata(tv, cred, index, true, data, size); break; case BTSNOOP_OPCODE_ISO_TX_PKT: packet_hci_isodata(tv, cred, index, false, data, size); break; case BTSNOOP_OPCODE_ISO_RX_PKT: packet_hci_isodata(tv, cred, index, true, data, size); break; + case BTSNOOP_OPCODE_VENDOR_TX_PKT: + packet_hci_vendor(tv, cred, index, false, data, size); + break; + case BTSNOOP_OPCODE_VENDOR_RX_PKT: + packet_hci_vendor(tv, cred, index, true, data, size); + break; case BTSNOOP_OPCODE_OPEN_INDEX: if (index < MAX_INDEX) addr2str(index_list[index].bdaddr, str); else sprintf(str, "00:00:00:00:00:00"); =20 packet_open_index(tv, index, str); break; @@ -14766,16 +14773,35 @@ malformed: print_packet(tv, cred, '*', index, NULL, COLOR_ERROR, "Malformed ISO Data RX packet", NULL, NULL); else print_packet(tv, cred, '*', index, NULL, COLOR_ERROR, "Malformed ISO Data TX packet", NULL, NULL); packet_hexdump(data, size); } =20 +void packet_hci_vendor(struct timeval *tv, struct ucred *cred, uint16_t in= dex, + bool in, const void *data, uint16_t size) +{ + char extra_str[16]; + + if (index >=3D MAX_INDEX) { + print_field("Invalid index (%d).", index); + return; + } + + index_list[index].frame++; + + sprintf(extra_str, "(len %d)", size); + print_packet(tv, cred, in ? '>' : '<', index, NULL, COLOR_HCI_VENDOR, + "HCI Vendor", NULL, extra_str); + + packet_hexdump(data, size); +} + void packet_ctrl_open(struct timeval *tv, struct ucred *cred, uint16_t ind= ex, const void *data, uint16_t size) { uint32_t cookie; uint16_t format; char channel[11]; =20 if (size < 6) { diff --git a/monitor/packet.h b/monitor/packet.h index 9d1efdf45258..fc0e0dc59959 100644 --- a/monitor/packet.h +++ b/monitor/packet.h @@ -145,16 +145,18 @@ void packet_hci_command(struct timeval *tv, struct uc= red *cred, uint16_t index, void packet_hci_event(struct timeval *tv, struct ucred *cred, uint16_t ind= ex, const void *data, uint16_t size); void packet_hci_acldata(struct timeval *tv, struct ucred *cred, uint16_t i= ndex, bool in, const void *data, uint16_t size); void packet_hci_scodata(struct timeval *tv, struct ucred *cred, uint16_t i= ndex, bool in, const void *data, uint16_t size); void packet_hci_isodata(struct timeval *tv, struct ucred *cred, uint16_t i= ndex, bool in, const void *data, uint16_t size); +void packet_hci_vendor(struct timeval *tv, struct ucred *cred, uint16_t in= dex, + bool in, const void *data, uint16_t size); =20 void packet_ctrl_open(struct timeval *tv, struct ucred *cred, uint16_t ind= ex, const void *data, uint16_t size); void packet_ctrl_close(struct timeval *tv, struct ucred *cred, uint16_t in= dex, const void *data, uint16_t size); void packet_ctrl_command(struct timeval *tv, struct ucred *cred, uint16_t = index, const void *data, uint16_t size); void packet_ctrl_event(struct timeval *tv, struct ucred *cred, uint16_t in= dex, diff --git a/src/shared/btsnoop.h b/src/shared/btsnoop.h index c24755d56729..efa87a8f2971 100644 --- a/src/shared/btsnoop.h +++ b/src/shared/btsnoop.h @@ -37,16 +37,18 @@ #define BTSNOOP_OPCODE_SYSTEM_NOTE 12 #define BTSNOOP_OPCODE_USER_LOGGING 13 #define BTSNOOP_OPCODE_CTRL_OPEN 14 #define BTSNOOP_OPCODE_CTRL_CLOSE 15 #define BTSNOOP_OPCODE_CTRL_COMMAND 16 #define BTSNOOP_OPCODE_CTRL_EVENT 17 #define BTSNOOP_OPCODE_ISO_TX_PKT 18 #define BTSNOOP_OPCODE_ISO_RX_PKT 19 +#define BTSNOOP_OPCODE_VENDOR_TX_PKT 22 +#define BTSNOOP_OPCODE_VENDOR_RX_PKT 23 =20 #define BTSNOOP_MAX_PACKET_SIZE (1486 + 4) =20 #define BTSNOOP_TYPE_PRIMARY 0 #define BTSNOOP_TYPE_AMP 1 =20 #define BTSNOOP_BUS_VIRTUAL 0 #define BTSNOOP_BUS_USB 1 --=20 2.34.1