From nobody Sat Feb 7 08:58:22 2026 Received: from mx0b-0024c301.pphosted.com (mx0b-0024c301.pphosted.com [148.163.153.153]) (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 8414A28D8DB for ; Thu, 15 Jan 2026 16:01:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.153.153 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768492887; cv=fail; b=JfZWC+LfSiHFv7Kkbau9ut0PjpV4URAhyF59DvZxuzLe/O3kHRxFWXG/GxViCx2f1O7b7Vw2UlzAY+ycoHrtDZx9P0MNA05nkHubozzLrC3K0L9CMtsDlNpuhzQRn8Pl6x74A6hDuiJ242/igyOhankSWpIKRynwBepTYPpQ120= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1768492887; c=relaxed/simple; bh=o9odqtD0J1V46cfxDGrnuymj05GXLe0yIse6L/Y/K/U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=OcH9tiogbPqH0XY3NgjRRfSyp7yMh8djSKcZzfUsbRdgHGFZnPoHB6pIVVTzjTlIRJrf38nekRd7xd4EsqRnIlAcSxK9tSZSXOFtKTAmnG2nT+bDWHTO7kRO2tYCGZL8KuVVszX71xP6d7T6x44CJ2gfs8RyN9nOAkeV0xX2Hek= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=silabs.com; spf=pass smtp.mailfrom=silabs.com; dkim=pass (2048-bit key) header.d=silabs.com header.i=@silabs.com header.b=w1DJV4sx; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=S6adbSon; arc=fail smtp.client-ip=148.163.153.153 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=silabs.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=silabs.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=silabs.com header.i=@silabs.com header.b="w1DJV4sx"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="S6adbSon" Received: from pps.filterd (m0101742.ppops.net [127.0.0.1]) by mx0a-0024c301.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 60FFlYo7459381; Thu, 15 Jan 2026 09:58:44 -0600 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pps12202023; bh=gyzU/lKkwxsVS49bSojUi1HzytzagTW8QhlDhMU7YkA=; b=w1DJV4sxJ5Oa /d1Qddithh9M7pFmETOGBfVaZBNtZf3oopUBBhP2D8T8zfhpHHJPXTZQzduiFHYi dao/lI/TzBUJFE2Nx5gWaytqOi9+GMw7EQ2jO9XJMIpUqrdVfZRZYuJNMh+JAzVd XcLb47fKrbD2ood6xCy0yEuyd0ToJNgh86onVUdE2jjmnY1kbilWz3JFFL125xGJ r+iDaRe8z0QI+6AxREayfQbenaDqyNJMZevVhGKcv4nPbKZvnOTsh/HFJy5CislO Gb6FO9tMC+EdLc2xqpoHBkRdHeIkh6bQ8/USUSDd6a2oADBcWYr3KyICvDwlvED2 Rkodu045fg== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020081.outbound.protection.outlook.com [40.93.198.81]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4bq36kr0v2-1 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 15 Jan 2026 09:58:44 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZvyeYAPScNHu7mkFM0u45OcpvI9vn4PkDYkv+UM5afZUdvW2in1oGmQtJnqVs2vbEGAxNw9cYZ5/KQwgcqMnA70JSBsi1wDA+3cdQUZEJFMhe60CD1FCgZiY5NkHWzImuYnkS16RVTkW+3B+otKI4o4cjJg8Nzc60+L/tv+EtZKaqR5T/SJiY4um1eD9+9XKxWBtdL5k9DRnmDVWGj88J+RDI3ScOqooKRNEQXWOqj0ZxtrSh3SPgIKy3UgI4UnYmh+9HcXyhjnBxW6IZ5Ul93am6eneJzz/yxR99jRXVW31m8JMVfAdTAs7c11hvnnTWdFdF/NG/EmlFgAFfe1f5Q== 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=gyzU/lKkwxsVS49bSojUi1HzytzagTW8QhlDhMU7YkA=; b=WwbgFahvYNaxfuChQe61vr/0ATaHdzDi34q2hQLcKBdB5oJT/utz9DvyW77Y1WAtxC51s2EI+9418xsCeOLyRX3KJxLCqB/yLK1sn6fGw9MItdl3U+30JbwhhB+35UBAV1TSPllKFW75kiXpysqIDBB5E+yy5PYq4Ac/P0eIOJyv5dezUXbqq5LBuFTHu0idSk0/sKf3zi2XnG+m2jtj3wAV1OWAws6sLfipa/2sYXjdelLOFTStRwnXjDjR1273DOS92A9GTOo9imkp6xCo0Tbg4KAQyQt35q6exJ6NVGN30hHiGBIWIk1ExEdnRBwd4Zqzgo6APkzbmoux0ptuEw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=gyzU/lKkwxsVS49bSojUi1HzytzagTW8QhlDhMU7YkA=; b=S6adbSonEdkSzU+hnZYGYg1acjXk0yRPg5UH24vOm/p0adYruYBvTg3RQU1EEgVo3YmveEHaEFkpggaX90XKS+Uy98d0Xa14leSJ5Xj4BsXPILgoqOqInQFQk0yMLwbnwrJJ8Iz20c8MfLPQKdgFj60jCBWxTsAiuwy3nRxEVxc= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by SA2PR11MB5097.namprd11.prod.outlook.com (2603:10b6:806:11a::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9499.7; Thu, 15 Jan 2026 15:58:41 +0000 Received: from DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583]) by DS0PR11MB8205.namprd11.prod.outlook.com ([fe80::2de6:bc88:2af7:3583%3]) with mapi id 15.20.9520.005; Thu, 15 Jan 2026 15:58:40 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , linux-kernel@vger.kernel.org Cc: Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH v2 12/14] greybus: cpc: let host device drivers dequeue TX frames Date: Thu, 15 Jan 2026 10:58:05 -0500 Message-ID: <20260115155808.36102-13-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260115155808.36102-1-damien.riegel@silabs.com> References: <20260115155808.36102-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0025.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:86::22) To DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR11MB8205:EE_|SA2PR11MB5097:EE_ X-MS-Office365-Filtering-Correlation-Id: 989c9246-339a-4b32-48fb-08de544ef3c5 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: =?utf-8?B?MmhSUE83WVBEUkJvWUl0VHIrMTJIR2Y4ejlVblBFTjdYT0hMNkNxdEg4MzRV?= =?utf-8?B?UVFhUjhZK05WV3cvR0FpQURFbDdSQnJJZFY0d1BUMjQxaWl3NnlZeGx2VS9G?= =?utf-8?B?VjR1dzUzcWVXcDBnK0M3c203YXR5UDhnMFdCb0FPOTlRcTlyd0RkN3VIQWtj?= =?utf-8?B?ZmUvbHJmWDhGejVWYXFFM2syVDZFampIYkNLNHBnUUhqS2RLV1pHckhYWmI2?= =?utf-8?B?eFNFRkIyK1RET29vR1REVVlYQjcwU0o2Qks1bWd6b3VyaEVZS1BrUzhibkFu?= =?utf-8?B?YWQ4ZytzblJwZDhiaUdFbDNpY0JVcFh4SzlFWHM1OU5FVjZyVmZOQ1hDQ1hG?= =?utf-8?B?K1dpV1dVRGxmdkVzTCs1LzVaWnk1QmFQTHJFQnd4eFViczNYSlRCdCsxMDl4?= =?utf-8?B?NWZIYlNpNmoyZEdJdTBtblREd3ord21Rd1NJTkdzUWc4Z0w4cmlrUkJJdzJy?= =?utf-8?B?NnVSd3JoVUdPS3JodWtrY3l4NGZxQTU5YmpYWHFheXhaYkZqdHVIQW1tWHpL?= =?utf-8?B?cThCYnlOTjBNVWk3THViUE4wVEJNbWEzVnFPOVdWZVBxdWtOZFBSMWRNNnR6?= =?utf-8?B?U1EwalIyNFhSN1F1OGo1WVNIZnA2YzZYYzIvOGIra1JvOFg0ZkVtZmhDazQr?= =?utf-8?B?empMeFJOaFc3ZW8yV0NLbTRUQkZMTGhpalRYWFlheTRxZTJZYWlwLzFqcWJ6?= =?utf-8?B?c2hWMDZ5QjVkY0E1eGpCak9nYkNJTHNtc05ocytvNXRjZnFYQmlhRG10RWJo?= =?utf-8?B?WGRBTnBIQ2d3Q1hWYkMxOWJOUVBGZml6RWhmaVVXRVNkejdlVm9lbGZGU2F3?= =?utf-8?B?QkNFL2Q5dGlXUTFKTDhQY2N2Umt2dUhTK0d6cWtMT1pRVDdlVnpzQndodm41?= =?utf-8?B?SitBTHlWdW5ER3pNa0xtV09PSXQ0QlJvVUJTNVhNdVhreVJZam9WVGhVMTE2?= =?utf-8?B?cVZBeDhVaTl3aXZvMTZ6ZktmZ1oxR1ZHazdhRkVpWERGWUtOU2V3a2FXTUo5?= =?utf-8?B?R0hHRlJjczdXWGs4ektJL3ZGVjRSQWxCZEUvb2JGK004d0o3a1VXVVF1eWtK?= =?utf-8?B?aW9KYU94NjNsWXI1ckkrOGc3dlFhQytQVVBOOWtTc1RXYWt0YnFQdTg0cWU0?= =?utf-8?B?ckRDbEtyeGo5M29CYkJ6WVRXUUlqVTgyWDJiT0svdXUvZjk3UHdvblNqQ25u?= =?utf-8?B?UjRvWnNRTGY4Q1B3WFhEM0psVzIrLzZ0VjdBQUExY0VydFRUTVRucWp4S0RV?= =?utf-8?B?SytvbGFoekh1Mk9ONXFkR3g1dzZYN0lUbjBwTFlsLzFHQ0h1a051aHVvTnlE?= =?utf-8?B?K2ZEWG0yUUlJTm84a1VnVEhENk1PWFoyUFozYUxoMGxYQ3VpalRuVGJISEk3?= =?utf-8?B?cW8wYU83U3lERkxFc21zdTBWUjNPaDdrdHBQN3l3c2YzQVNPcGUxc29JbXFN?= =?utf-8?B?VUE0NzlsV0N2YjJJeFBhWkluNjlNSDFDYkFGenNCZUJBanNUMVZFWGF6V3A1?= =?utf-8?B?S2lOU093ODZibm1CTXhjQjlacGxUMXJFZ1NvV1dLY1VrTU5aajB1UTBwa3JW?= =?utf-8?B?VjU4cXQxY0JXVkNEQkNqaGRPU0JHOWdORU9WSFk4Q0MzUldkd0QzVFVDUEIw?= =?utf-8?B?KzlHUk5zdmMvSmRyaTVtN1JKTno3MGwxRzNWVGRjQXhQTU1sV0xVdFhmcVU2?= =?utf-8?B?Rm1NYlVkbDk5ejhZRitBOXZpQkNiTG8xMEhTaDBDc0h4ZFZLVFlRcXlLMmFG?= =?utf-8?B?L2N0NVBDeDBiSHFSTWFOWnk3RmZvQVcxTjlKbDNpTlZkZ21Yb1RGSURadlkv?= =?utf-8?B?SG0vd1pOQVliS0xHbVF2aUVsaGRvQjNwelVWeXlFdE1vOHdJY09qcWtpbmt1?= =?utf-8?B?ck42SlE3ek5DWEd4cFgxcURtd24yT1dZQkphaTd1UmtmbytnU1MvU2FpTkQ1?= =?utf-8?B?aHo3c0lSRzhTUGNzNURuMTRVZFNrNDlhNitnenJYZ25SajJlRnRNSkc2ajkz?= =?utf-8?B?UkU1Qjg1UXVoOVVaUkpva3hjcXBpVW5qYzZQMGo4NlNQWmJYRUVoUWxxSFhT?= =?utf-8?B?RmhSN2JxZnhDVW1yVVlGQ2tURjV6b0FWM29pT2diWTRaT2dWdmlzSUdNbUM5?= =?utf-8?B?NkFjd3RVWW5obUhqU1lFYmwrRmJGS1ZJMG5Ubi9FT1o5dkJpTnNVenFuWTF3?= =?utf-8?Q?DZup5vodKpefANo0bBPkphQ=3D?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR11MB8205.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(52116014)(376014)(366016)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bEFZYjZJWkxEZitDbTg0dVhWcFdSd0RkOUlqem1raXV1RjdpaDRRZUplbXRL?= =?utf-8?B?dmliV0l3QThaS0FvLzlIMXdsT01YU2tpR3dmcGljQTlJZ3J6b01xZGdQOWN1?= =?utf-8?B?N251RVJHeHBHUFQxL0JWb0pNQU1ORzdiVzcyN21ubnZuMXdWaE1HK3ZLS3hm?= =?utf-8?B?YzZwaWZLaEcyYVdIdGczeHpneWN2c252Z1VmbUx4bk9MT3N3TUhMc3cyMHgy?= =?utf-8?B?L28rVHNPbWd1SzFCMjAyaWdXTVBTcU9WREl2MDJZcDlLZHh3VjlSQ25HMk5K?= =?utf-8?B?elA2dlJvRnB0WWZzb3hxL3Z1REM1ekpQbHlOQWdaTHoyS0lWcXh2Q1dVeGd5?= =?utf-8?B?TFYzU29KN2RWMEFhbmlkVkVGd1ZuSHFLWDN2RGFsQ0pVOHBTaHcycW1lcjA1?= =?utf-8?B?NENIMjU1SU8rYkhZYWtvb2w4WDVCNW4rMlN6UWZWS0lRa1JnWGQxVU1uSElH?= =?utf-8?B?YlZVaFpUcXFhTWxJL281eUs0Ujc1bHpLOTlxaTdKbWlNNS9BVHM0ckdRdjJJ?= =?utf-8?B?eGFoMzE3VklYeC9qeFZSWmtZaEUrWXJ3VG9JeE1tNStmdEpzYzhiNnhYU2ZG?= =?utf-8?B?MkZpaDMwZXM2c0hKZlhzbVgxZzk5TGkxelM5SDJ0WUtTdkNzUHVNcVhMSmtT?= =?utf-8?B?QkRwMWtQbnNoM1NOaUxNZmRVTGtvMkw4Ni90c1ltMDdwWThuN2hTWDF6cDI3?= =?utf-8?B?QnNmYU9DZ1IvSnJKdFV1cmtrUEh1ZEMrR1c3THpUckxFQU5udUdmaWd4dWxw?= =?utf-8?B?dHNESUFVU25OWllkN1N6T3BJVmhPWjlERVZUUkJqbW11bFRHQ3hnUmhpcE1x?= =?utf-8?B?SDBQWm5aUVl1a3RkWm4yYzExUStXdFlPVkxmZ3NpTSs5a2ZwaFk3cUlVZFR0?= =?utf-8?B?S09WMjVSSlkzMFU4cDVUaXh5RXVyeXR3QS9EVy8yZ1hEQ2VCU2NhcXIyRXgr?= =?utf-8?B?M1F5bS9FdTlRUGZGWVlIQWt5aGprRVIvTEQ5aXRRVm5SU21sUXBxM21SQjRp?= =?utf-8?B?YnpaYUxQMml6NEVrbm9ieFZuQ21sdmhhS2ZWRktOSHdVbHloUTRxdk9jb2g3?= =?utf-8?B?N2pQby9OQlRKYkc4NnFSdjFndHlZUWEwOW9pNDFUSncvZzhyUFV0WjVqWHpQ?= =?utf-8?B?S1ZuSzRHM245VVFvejN5bXRSRHU3cnhPbzcwKy9kRzI1RFFXd1Zxc1Z3TERW?= =?utf-8?B?YnJkTGRwL2pUUDVrR0cwTG80NVlqSXBWZ3lKbEJ6d2ZzWjBSVzhGMXUyc2hr?= =?utf-8?B?TTVrNHQvVmVKVzgvenFaZU5mWDdyVERRYXUydFNWYStDRE1yMkFHTkdlVUp0?= =?utf-8?B?cjhCQlgvZm1ZYmtXckVycXZOMjZzQ1FMaUtXM1IxdXl6cXNNc3daNU9jWHEz?= =?utf-8?B?MWgwYmY1eUhjZTYrdEVHaU5waFUwTE1UelM3ZklSZTU4TE9OSVJtNTZURHcy?= =?utf-8?B?N09QUitONXFjZGxac0x5aEN2a0c5emNBS3ZKSlpJUHZCT2UzeFU0UDFsVE1J?= =?utf-8?B?TWJ0dG9HZVlpeGhLQUJ6KzlPNUN4Nkl6ZlJqUnBDcHMwN1lOWlJQR0hoSFkw?= =?utf-8?B?aGtBMGRRZ2FTb2Q2UlhtYTJkQnZvWnl1WFgxRkREckVTeXRFcHRqVmhKd1V3?= =?utf-8?B?WHJmUXlFNmhDMjRjdlR6empOelJhamxETHpPN0xzQUFreUI2RFhmUFRDRm11?= =?utf-8?B?eFYwVnJuNWl6KzFlSjduN0xqYWVBL1hKdm1kZGM1cTBwM016MWlpTVdDajNt?= =?utf-8?B?SDhTSkxHN0VWNm5wNXVXVngwTk9jd1ByM3hTbmhpTHRMbXgrOXRkTk9Lc2ZD?= =?utf-8?B?a2wyaUl2R2VuOG40dWdHd1JFTzNvRGQ5TUxSU3hrdThpRWtXVkdSQmJ0WEhB?= =?utf-8?B?dWdEanBLdXhpOHpRZFhxMUtxMXRiMjJXQ1lWdmxUWG5lR2FtQTczUk5mZTli?= =?utf-8?B?T3hYSGEwamJoSUlqRkxUb2pJTUxCb3YxTmtjUmwxcnJVTVgrSzhtWndadk8v?= =?utf-8?B?NUhVSWVLc242RUtKQW1JbVpZQ2szVGRYMXRXMlM5UnVGOGRzb2ZXa2JabStG?= =?utf-8?B?VmdGK3VVblFoME5KVGdBZExlQ1BZdUdyTkc5eWxwT2wrN3ZscDJ0UWRuL3hO?= =?utf-8?B?QU9mZ3RiSnpvZjFtTFlSSmVIQUt0VHMzNGxvcGNEeHd4VXBMTllwMVVTMFd3?= =?utf-8?B?ZS8xZW5hYzVFR3J4dFcxR0JhZUVWUS9KMGlWTEtPNDR4ZTg1SFlyazk1Rjl3?= =?utf-8?B?WlZEbDlrcEkxNDVNZi9GMVZSaFlvbmh0V2dUUjl6SHpyQUt2WVlVT1lZdGxz?= =?utf-8?B?UE04dlk4eTg2Z2VwdThNZ28vajFQd3RLRzJPeXNyQUpTSnZQb3dGQT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 989c9246-339a-4b32-48fb-08de544ef3c5 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Jan 2026 15:58:40.8571 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: MBz1/TOp8dVsLIcnsZKXNWMQZYpN8dwWwR/Z+ejZD6r89YZAOSV+/R2i+gKdJ6f+fBa/3tVOaPYF1kszlcX90A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR11MB5097 X-Proofpoint-GUID: Ci66CZR5ZdudoRdwQG21t769OhN70500 X-Authority-Analysis: v=2.4 cv=M6BA6iws c=1 sm=1 tr=0 ts=69690eb4 cx=c_pps a=vcV0SyA3r3yo/t37AMr7eA==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=vUbySO9Y5rIA:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=2AEO0YjSAAAA:8 a=0-yszGi1pw2bLUArnyYA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMTE1MDEyMSBTYWx0ZWRfX+a6yQ7xQAqAa mnhw59+wuRMYJThKKre+hIC/V1GySBY6aIG7EGrJyaOPWYRHxRg8zL4eENmvQbqs+TfxWkADZVz +OQWIP2dAuDMd3/vLmu2o4NFfxgZklwysU+v+KcQeyVsY0MHCK4mN6Aia3XzQ90cxc2hMqYdTej ZKOw58I/NT1wKi5um0832NL3hBb1n7YnQN3hswjQ5gWdnb9Ll4OmvT1xtQUiXOOY4sGSBYk0e0D L1uHd/VVoEJaVFJaepumuq1+DlQFnnruUmnKU81h0ODjTHu45SIMQEvQVeyL36OqTg911uSgmvi TumkykmAQDsdUKYQwf5Rzbv7Qqns5RD8mGI1oYjOfxeJ52xGTXsuVkXdEN5ohYIE/YbQUjj+j8v cDl11wWma5pkpqdQ/RZUEbdJ+ChroOucLlTiLchF7UinZcHBatdIT7+oDfLQmLumNMhP8WKpEe1 cr2yJbmsSCeHwKmkV9w== X-Proofpoint-ORIG-GUID: Ci66CZR5ZdudoRdwQG21t769OhN70500 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2026-01-15_05,2026-01-15_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 suspectscore=0 bulkscore=0 spamscore=0 adultscore=0 priorityscore=1501 clxscore=1015 lowpriorityscore=0 phishscore=0 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2512120000 definitions=main-2601150121 This lets the CPC host device drivers dequeue frames when it's convenient for them to do so, instead of forcing each to them to implement a queue to store pending skbs. The callback is changed from `transmit` to `wake_tx` and let CPC core notify these drivers when there is something to transmit. Signed-off-by: Damien Ri=C3=A9gel --- drivers/greybus/cpc/host.c | 74 ++++++++++++++++++++++++++++++++++++-- drivers/greybus/cpc/host.h | 12 +++++-- 2 files changed, 81 insertions(+), 5 deletions(-) diff --git a/drivers/greybus/cpc/host.c b/drivers/greybus/cpc/host.c index a7715c0a960..54f0b07efec 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -155,6 +155,7 @@ static struct gb_hd_driver cpc_gb_driver =3D { static void cpc_hd_init(struct cpc_host_device *cpc_hd) { mutex_init(&cpc_hd->lock); + skb_queue_head_init(&cpc_hd->tx_queue); } =20 struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct= device *parent) @@ -162,7 +163,7 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_dri= ver *driver, struct devic struct cpc_host_device *cpc_hd; struct gb_host_device *hd; =20 - if (!driver->transmit) { + if (!driver->wake_tx) { dev_err(parent, "missing mandatory callback\n"); return ERR_PTR(-EINVAL); } @@ -231,13 +232,80 @@ EXPORT_SYMBOL_GPL(cpc_hd_rcvd); * @cpc_hd: Host device to send SKB over. * @skb: SKB to send. */ -int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb) +void cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb) { const struct cpc_hd_driver *drv =3D cpc_hd->driver; =20 - return drv->transmit(cpc_hd, skb); + mutex_lock(&cpc_hd->lock); + skb_queue_tail(&cpc_hd->tx_queue, skb); + mutex_unlock(&cpc_hd->lock); + + drv->wake_tx(cpc_hd); } =20 +/** + * cpc_hd_tx_queue_empty() - Check if transmit queue is empty. + * @cpc_hd: CPC Host Device. + * + * Return: True if transmit queue is empty, false otherwise. + */ +bool cpc_hd_tx_queue_empty(struct cpc_host_device *cpc_hd) +{ + bool empty; + + mutex_lock(&cpc_hd->lock); + empty =3D skb_queue_empty(&cpc_hd->tx_queue); + mutex_unlock(&cpc_hd->lock); + + return empty; +} +EXPORT_SYMBOL_GPL(cpc_hd_tx_queue_empty); + +/** + * cpc_hd_dequeue() - Get the next SKB that was queued for transmission. + * @cpc_hd: CPC Host Device. + * + * Get an SKB that was previously queued by cpc_hd_send_skb(). + * + * Return: An SKB, or %NULL if queue was empty. + */ +struct sk_buff *cpc_hd_dequeue(struct cpc_host_device *cpc_hd) +{ + struct sk_buff *skb; + + mutex_lock(&cpc_hd->lock); + skb =3D skb_dequeue(&cpc_hd->tx_queue); + mutex_unlock(&cpc_hd->lock); + + return skb; +} +EXPORT_SYMBOL_GPL(cpc_hd_dequeue); + +/** + * cpc_hd_dequeue_many() - Get the next max_frames SKBs that were queued f= or transmission. + * @cpc_hd: CPC host device. + * @frame_list: Caller-provided sk_buff_head to fill with dequeued frames. + * @max_frames: Maximum number of frames to dequeue. + * + * Return: Number of frames actually dequeued. + */ +u32 cpc_hd_dequeue_many(struct cpc_host_device *cpc_hd, struct sk_buff_hea= d *frame_list, + unsigned int max_frames) +{ + struct sk_buff *skb; + unsigned int count =3D 0; + + mutex_lock(&cpc_hd->lock); + while (count < max_frames && (skb =3D skb_dequeue(&cpc_hd->tx_queue))) { + skb_queue_tail(frame_list, skb); + count++; + } + mutex_unlock(&cpc_hd->lock); + + return count; +} +EXPORT_SYMBOL_GPL(cpc_hd_dequeue_many); + MODULE_DESCRIPTION("Greybus over CPC"); MODULE_LICENSE("GPL"); MODULE_AUTHOR("Silicon Laboratories, Inc."); diff --git a/drivers/greybus/cpc/host.h b/drivers/greybus/cpc/host.h index 8f05877b2be..ee6a86de309 100644 --- a/drivers/greybus/cpc/host.h +++ b/drivers/greybus/cpc/host.h @@ -9,6 +9,7 @@ #include #include #include +#include #include =20 #define GB_CPC_MSG_SIZE_MAX 4096 @@ -18,7 +19,7 @@ struct cpc_cport; struct cpc_host_device; =20 struct cpc_hd_driver { - int (*transmit)(struct cpc_host_device *hd, struct sk_buff *skb); + int (*wake_tx)(struct cpc_host_device *cpc_hd); }; =20 /** @@ -34,6 +35,8 @@ struct cpc_host_device { =20 struct mutex lock; /* Synchronize access to cports */ struct cpc_cport *cports[GB_CPC_NUM_CPORTS]; + + struct sk_buff_head tx_queue; }; =20 static inline struct device *cpc_hd_dev(struct cpc_host_device *cpc_hd) @@ -47,6 +50,11 @@ void cpc_hd_put(struct cpc_host_device *cpc_hd); void cpc_hd_del(struct cpc_host_device *cpc_hd); void cpc_hd_rcvd(struct cpc_host_device *cpc_hd, struct sk_buff *skb); =20 -int cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); +void cpc_hd_send_skb(struct cpc_host_device *cpc_hd, struct sk_buff *skb); + +bool cpc_hd_tx_queue_empty(struct cpc_host_device *cpc_hd); +struct sk_buff *cpc_hd_dequeue(struct cpc_host_device *cpc_hd); +u32 cpc_hd_dequeue_many(struct cpc_host_device *cpc_hd, struct sk_buff_hea= d *frame_list, + unsigned int max_frames); =20 #endif --=20 2.52.0