From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-0024c301.pphosted.com (mx0a-0024c301.pphosted.com [148.163.149.154]) (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 D6907DF6C for ; Thu, 12 Feb 2026 15:01:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=148.163.149.154 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770908478; cv=fail; b=PQdHpNgau9pZEkgjDYQL0UzHTUYYAHeMTWZRuIEVvTgBrTtA0766P4H74cIw86O4ELu4t3xI2WzGnmrqDVKVewCGC9326MDhHpVeeRW3LFnrVbbTHI1GG6EYVT9+r1UI5v54ktIMM3fEb7HOUiGUIj1+0E0BmMVhmvvy1SNJf6A= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770908478; c=relaxed/simple; bh=KHvt9WzXSlin5sBJv7ncygfyGEHPLdYJ0NeVUFpEuqI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=GoNC3ECCreAbMmG6Z06ZRp1vFuVD5LkuBgPkeEGuOsLWifZlvx1vGoSHVylQ0lX7cPDUtlC1bondfmxLJKFnkkfsfpCarz5yaFH2Y6Mocr+p4r6clIPDSXkOJkEzS8KwnMsMQ29aloGwpbllTABaUYqOaJtP3YMmbqKMzDF2iWc= 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=nGYYa+TU; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=DcGU+z9X; arc=fail smtp.client-ip=148.163.149.154 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="nGYYa+TU"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="DcGU+z9X" Received: from pps.filterd (m0101743.ppops.net [127.0.0.1]) by mx0a-0024c301.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 61C2Lwnm2678544; Thu, 12 Feb 2026 08:44:18 -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=NaJwkLGtOYJ2MaqZlMoAC38zRqSqD/20L8Jxt3YupcY=; b=nGYYa+TUnJ3W Xf3+zxaduzrgej0t/OaXb2/IIcLKKDb/kKaGrDNZtCNLwl/IdzJ4MoNpDRLlLx2c 5A/bLVOqEfOZfV0IKhVPDK6G+07vR3Us73k/Wvje4WpnzvmBQ6iKlk63L3UMw5eX xMhlJFY1lmWJcB5J4h+gBHPCPvmfIzmB1HBawsiz7fWMNA7ghyKCgGnp6XtTMY5Y MoBLnn67/33amz7IHk6ca3bEa8voK4q+PfgyF4cS/rM2IQnHP20rS2Sz4YwCGXjr NEaatz1eoqOdx/VM6iWTghUplute+L8HT3WxwJVgomLD29eGko2JUCwB6YCCompC nCm5wxkFlA== Received: from dm1pr04cu001.outbound.protection.outlook.com (mail-centralusazon11020096.outbound.protection.outlook.com [52.101.61.96]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4c92uysn4e-10 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Thu, 12 Feb 2026 08:44:17 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=I8duuW/kqerCdjlGtH+rLCftvFdiFTlzUOILJ9j7keJuZ8/5w/TETl1QwPuEZCfN9Xr29NmWrkPyhuXG4/XhIzpJ1BqrSEiNJ6dpI8Y4eAcylJa6CJZ0UvCftqGkVAlwchJM4u7zcLgFBrl4k6S6X946c4SS/vgNQNoQ/gG9zl062IL3omLlFvObjkTgxDX8Ba35U8PmEsUdmeyQPwIVNlYtxkDNkOPWz0KDNNuCxhFxD6hqRCq8R0+LhlGG50ovRJr6814PEW44LuICMUPys6d6uz9uoroLg/UKWagKP1fekdvwOMb4go0cVa8CLPH1Mnhxy9zg/adLDIK3wie1MQ== 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=NaJwkLGtOYJ2MaqZlMoAC38zRqSqD/20L8Jxt3YupcY=; b=TAJlS7oxJa+D9tDkC0r6XGs8Udl5vDIzFZRWFFilk1lAU/cI3C5pfGwzSsXzfwtvhLrqNDtvl1UxprD4KVoNaAN+rkIhnH/AnAxH+G1veuK6z+BOB9LvXam+zQ9i32YTrbjtsncVxxQzhBqJY8ftmMkHYPemcAzKcKWG+zgB7O+dcQKW+KciFXlcjU+ErN/3QZfU15eacZKURH0LYRX+ibDvFBzwCiqaUFy4yhP7tAXaSGD7pMAUyi1XY2GOg/pG8gRv3zNqdJUhgOV8L+E0ZB0MRBOYeh3EC24FpkG1quuB+tblZUKcJN9rrJdnW1g07wcIaCajWGTX79RUzvlFlA== 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=NaJwkLGtOYJ2MaqZlMoAC38zRqSqD/20L8Jxt3YupcY=; b=DcGU+z9XjY39M2q+c7FMSKFP9uRJe70kkJnotHxuFSirEHZHIXntlnh8s0dliWjH4sWfhRVYwaV+pFLruVEV+jFaZSiVgVMe2wAritR3q+048gvQVSeJ6y3tTtVD9eLt9IXItwYLPY1BBF4TvA3UZ2M0H5AJexzL5VnmygQXQOI= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by LV8PR11MB8486.namprd11.prod.outlook.com (2603:10b6:408:1e8::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.19; Thu, 12 Feb 2026 14:44:14 +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.9611.008; Thu, 12 Feb 2026 14:44:14 +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 v3 12/14] greybus: cpc: let host device drivers dequeue TX frames Date: Thu, 12 Feb 2026 09:43:50 -0500 Message-ID: <20260212144352.93043-13-damien.riegel@silabs.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20260212144352.93043-1-damien.riegel@silabs.com> References: <20260212144352.93043-1-damien.riegel@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-ClientProxiedBy: YQBPR0101CA0124.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:5::27) 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_|LV8PR11MB8486:EE_ X-MS-Office365-Filtering-Correlation-Id: 3bd19228-e855-4687-786d-08de6a453153 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|52116014|376014|1800799024|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cTI5d2ErQnBsSHRlNlFheDJmcS9rQ1lmMFpPMUhpODhVdmFmVzl5OGNpMnpp?= =?utf-8?B?QmYzeGVMU3dTUkJGYWp2OWN2dHVMUUtlYVY1Zno3aVdmU05Ia3VpKy9hVnZO?= =?utf-8?B?T0VVVHhWR0JaNC9ZZ0lhdlVrWWVEZklHcVUrZjJOTXliWjZIeUF4WnMxcHZ3?= =?utf-8?B?M3BwWWpuSURkdHJnM3c2bnJ2TFVJK0hOa21jVUVUOVE0eXgxQ2xCTWR4WkNZ?= =?utf-8?B?b2RWSGgwZlNWR3UzNUNncytzQWZyeDlhSFpTQkRRdXplZU5lTXQ1TjdQWndL?= =?utf-8?B?bzJoa0VlNVY2ZHBiK3JEL1liS2pKZitBOHdwbWNtQlZLajhtUnlsR3d0d3dn?= =?utf-8?B?YmZsZzhyc01veU4yOGRZUUtnZ1VpNUJuK21NMTVZcU9mcDByUFlZTjNkblRY?= =?utf-8?B?Ni9QTWxzS3hXWWE0d0dacE1ldHFCcW1iczJkN3MvbWpLWUtHTGhnbUZJREhl?= =?utf-8?B?a1c2QVA1VjRZSGNnUEhGZ0hPci81bVVVam1YK004SGNuMExzZmJQQmhYbUJR?= =?utf-8?B?VWZpMmxBU0Y4U1M5UEdHMy9UcWJ0bmNLMzV4QmlqaGVUKytCamdIR0YwUmY5?= =?utf-8?B?R3l6am5WbEFWcVF6OXorWlI1VnNzQWdtdCt5dURzWEkrSEVURmZoNVBUN1B3?= =?utf-8?B?bElZYU5OKytiWm5uUE50RitwZVdBOTE2M0lnOFdraGExYTVzZ3NENXYwYVpG?= =?utf-8?B?NlFqQ0EvRy8ybFpVZ0EvU01TWFpsQzRvWDFCYjlxVzRWMzB2My8rd3lKLy9D?= =?utf-8?B?ckxsYVRKQTE2MFNNOThTVWdnamJpMEtlM1UvdDBwWGw5MU80SEx5SWptUDZ0?= =?utf-8?B?MFoya1lCUFRUaVhrdGh6SXpnTWFSb1ZVdm1kRkozUzh6TnlPa0NVcmwvTkQ4?= =?utf-8?B?QVF6SnpQQU5WVTIzKzdkaVRaZmNiU3BVTVg2cU9XQmt1UEZ6N1BzQzNyQTVp?= =?utf-8?B?VHYyT2k3NXliNFhXSWJZTStGVGs1TUhYQWlZN3Qva3BRci9lOWtKaTFUZWRt?= =?utf-8?B?eDVJKzlGZ0tyZGlSOWh1UG81YVdKRExkbjR3eFRDRHlHTzV4RDRnS2wxZno0?= =?utf-8?B?aTREOWNuY1RkTEttTFdSMjU4KzJmQzdzMHBpakd2NzM5R3VpWTlncnBZeU1M?= =?utf-8?B?bS9YU0pIbVVRWEdIV2JWdCt0dkZDbGI1bnY2Zlo4LzBvN204d1BIY3JtTkw3?= =?utf-8?B?em1VZkh2SktkdCsrQTNGdU9xM2JNeGRjTHdZbVRyYWhXbVFKV3lGaDh5VXk4?= =?utf-8?B?TTE0OTR5cnBsSUYzL1UySTFzdFE2emlBdGc0bWdOeFRrdU9DTndoMEo2eWpK?= =?utf-8?B?YW05NktwREM4cXpjUHNLQVlDOS83aXM2Z3NMSkZsaWQ3RjZ4clBwUHJGSWN6?= =?utf-8?B?MHdjeXB0a29ieG1hNmVsUUY2MUZQQ0FIQkNHN3Nsczd2eHhWVWpHU214WmdW?= =?utf-8?B?d21teE10ODlHZmtNKy94NGw0V0R6Z1FQOXVOSkxLNlBnYWJsN2VUZFZER3RS?= =?utf-8?B?Y29KSXUxWmlLNVlUZjlPdjNMUUVHV2txbjFEbTVueDBsTVJZbEpYTU0yK25M?= =?utf-8?B?alZQSjBJQzA3b0d3VGVBc0pzQmZwVm93TTZJeWR3aXhkZFduTXNjOElibnNk?= =?utf-8?B?MU1QRlRpM21lMFBlK0JqZU5ZY2pDcjhKV3hRbG03M3VTWllvWEJ1RC9FTkVr?= =?utf-8?B?ZDIwbmlPRFhYNnMyUzRScG9ZOWlkOVcwQXlNYXFQd0FrME5nVkJSRWgzM1A4?= =?utf-8?B?S1VRVURVSENnamNiSVBMMjFkWVUrNjdhUklhUGd3SVV2bGxaaWVEbXRHZDNT?= =?utf-8?B?VUhtUXQ4bythcjVWSzlrOElONlIxOG8zWjJzY0FBbU05d09GSkpWY3I5aHMv?= =?utf-8?B?Q0cwWWlnQmJYYUZFejhoYVBKcEVOWU5RQklvV1NvcGhWMHhMdUFvS3REcFdL?= =?utf-8?B?NzA1d1dtbmJLS1kzMXNBZmkwV1JtTmxsT2FoK0NsMmI5Zzh6K1VZY3lxWVRX?= =?utf-8?B?U3VEcy9sbkQwL3VDVE10RE9hZUlWbDk1eXl3MnFWOGZpNHgwTUFGYTA2UnF3?= =?utf-8?B?U1RUOVpvVk5LQ3IvenFhSXB2VHk2cElCaHBPU01rYmNKaHc3bmFzQmlKUVJo?= =?utf-8?B?MEJHMEFLRDlULzcrSTlxdXZ0dnlLd3RIYnVTM0NidVUzbG1jYkFyM3A5bzRL?= =?utf-8?Q?BxbT72sYqvPBgDXd3/ueBPU=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)(366016)(52116014)(376014)(1800799024)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UVFlWVJuWDF5UkFvZG56SVcxMkJJNVpzWmw5MVdlL3JCNDloNHVZM0lJakw1?= =?utf-8?B?SzkxMEtrQzArRFN4NGdJeDBkRmdHN2N6cnRHMWRMYjg5SG5lTmdpYmQ0bngr?= =?utf-8?B?eDFGRjZobW9qYktZekFLUGJZaDIxanRsd2hlOHA1K25IaWhnREh6UFZ1ZXQv?= =?utf-8?B?V0p3WXJJWE9CQW10YjdxZ2JMR3IyazZONDg2Y0EwTTk1eGNEb0hMeG1yampD?= =?utf-8?B?MUdzNUQyYy9QU3NYbzA2L3o4dW9wM24rNEhLamlkbVJKOGFtelNXdkVvdExn?= =?utf-8?B?VmQvdXJteHpqeHEvQWFXZ0Y3Y3NGcWE1UlVxOFdsZjJwSkExV1hmUkdQNHJX?= =?utf-8?B?N3d6M3E4enh6ajNmYjlIK2RqTzVjaFhsdnU3dW9WQm41bDdNZFF2aUNHTENh?= =?utf-8?B?VStBQkVJTXNHaDI3QWsxRFRlb3JrQkZpN0NONnFmQjBabnF2WkZuSHFwenJJ?= =?utf-8?B?ZHdTa1pYZkdKcnc4NHF3ckE5NjJSbmpqMFBsZnJzVFBUVGVMRkRwc2p2VWFC?= =?utf-8?B?K0lIZTFMS3J1SHhhRS9sMExOcGx4UWRaZVhLN1lVZ2hMRXl0ZTVURlp0cElV?= =?utf-8?B?dFZqbUpCWk81bFoxakQxNHY0OHZIcnNyRElzRVhSV3h0aURiSDFJQ3E2bDFL?= =?utf-8?B?ZnI5aTJSSXBUOVJRNWJWRWxsNEN4UFhGSUdvNDByNzdNSmNwbER5SlhGYlhE?= =?utf-8?B?a0VnTjNMcnVoNVYvUlZxSHRZay9MREhueFFiL1phd1crb3VzMDBoV3VRcFRK?= =?utf-8?B?TmxDZzYwdmFhc0JMVU8rVnc2MEZKekJjckR1QzMyY2VxRnpVTU8reHpZRDVP?= =?utf-8?B?WFN5bEUwQVhjemdiZEM2RVpVSEtzV05jVE4wdklxb1hBV3M3bDlUN2NzVkVV?= =?utf-8?B?NXBGYXZTMUovbkN1R3pkWHBUNndPcWtpNGZHNk01cmV5VkFMVVNCMlAwVCs3?= =?utf-8?B?Tnhvc1B4Wk56OC9QajRONG9XRjlDalVGdkxIWWkzU3RLVWlqOXE0emgxOWtX?= =?utf-8?B?YUxoVlpQTkdkMHZwM0NHb215eWtZcXJwdlNLbnV0OGI4eE4zRGt2QWw1ODBG?= =?utf-8?B?ZEtkc1RRa3Z4UVRzcWZMSkxIbFcveE95Z2Zxc0lIcHBMVGJqeUtuSzk4eWs1?= =?utf-8?B?ellwUEFoM3dqQ1RWWkRNQkJ0YmJNNldxa2NXZHJub21BWGQrQnhWdUU4U09p?= =?utf-8?B?U0gwYmNPMEkybUt3TDlIVCt0K0xWZkF3dmxnTGo5bExLUVV0MzlWVnhEVnJB?= =?utf-8?B?MjlRTlFvMFFxZUErai8ybCtWdzB5WkpkbmV2UGM2cDhDSnNUdlpvbTRDdWFh?= =?utf-8?B?cHVibnJDR21FQTM1Z0Q0RGpBNGdFNlMvTEswNXFJMlpQajFtMmwrTkQ5bUYy?= =?utf-8?B?VHQ0ZVFjRS9wUjBWR25KNzFIVDYwcDkrZDN1WGxlaEZiSkpNMUJobHBlTnpT?= =?utf-8?B?ck1uaEVQUlNOaEV4L2tXV3EydWU2dTNRZlBQU1UvN0t6ZEN0QjV0U0c2Zk9m?= =?utf-8?B?a3JWMWtybWFwOThXS1pwd1NIZlpRTFR1dU01QllqU1FOUktoYnRKT0JiZURr?= =?utf-8?B?cWd1Mi9nY3l3ZGpHaUttSWVsOGdNMHFCamdjQXlhQ25nQnllZ3RGSHhPVXl1?= =?utf-8?B?TVlva1d2V0ZMQnBHTDdyMUFMVENEdjV1M1FLMU4rUTRGdXUwcjNMOVZUdXR6?= =?utf-8?B?UW5DSlRYOVhFVTMvSnUzckdDWlluRkUvdmNjOENJWHdoU2JjZzUxbUk0em5C?= =?utf-8?B?RXhqZjIzMXMyUDIwbm9TaE92Y2dwVG5GcWpBMFdNdHBvdTVNZDhkY2ZKZEpI?= =?utf-8?B?NXNIS1FUQ0lyNFVNV3dNWDc5U1pJUXBUakhlZytzNHRCL28vZkZ1SGR4MEZt?= =?utf-8?B?SlpPenQ3TGdxeVAvVXZKM0pIc1g5R0dLeUJaQkE2bUlOck5OUGIvQmwwbEl3?= =?utf-8?B?dWgzL3JWd215bksxeGprcW5BeXd1STViR3h3UzRYOGkrUnBVdTV1Ynp6V1Qr?= =?utf-8?B?RWovTGlYMW9nNHJMSE41S2M2QlZSY1RWTU1ZeS81YlJuS0FxL2tYaS82MkhC?= =?utf-8?B?bnJ1dFp0RkEzdXRUaXdFOGhGTWNpWTdwRlJaMUhPelphTVF4bUZnMkNDSHdE?= =?utf-8?B?VTd4T1JhaFlyTWwvc1FIVG9DaFYyaHlUVHAvdVI0SmV1TjVPMWsvMEhUUXpt?= =?utf-8?B?SUMvWTROaWR1VEljN2czbSs1YTQxeHZHVjdNY0FydjlXT1ErM2RWS0tOQnZn?= =?utf-8?B?TDRlZFA0Wm9aNXdpVlZmSUZLV256SHd5RU1la01lMXlKWC9VYnc4S0piZ0Uy?= =?utf-8?B?dDZhVk5QU0VJTHdHRWNqUVlJWWhheWY4c2hrcVJFNXZxRmI0cTlLQT09?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3bd19228-e855-4687-786d-08de6a453153 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Feb 2026 14:44:14.7437 (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: zriK+FjcI7ET43S+krwnGnxfntqh36YQ6AqehBhmjB6VTqfEFTvBZTnjRoib3O1gESVoXiGAunAl9hwdxnmECA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV8PR11MB8486 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwMjEyMDExMSBTYWx0ZWRfXxWF5Q6yU1tUY 0GbW33vNMbGWo15D9qV7mz2l16yhLaauz1tM8ZoLP1jLomyk+aX9gzPq/iuwOstmyfb6dTO2CKM Ob84Jp80k0eMr4jTpNXRCLoxNUY9B7kuqDDNE+rKkXMVt4YJAm2rglMcFV5y+jHgI6rQKWGCnbA qwpP/mRYye691N9avXhfYUnfKOwPd8HPJEMFaMupft7uZJvhjFIXhAFE9RddHx31PbhBzAtza/b dnnrzSZZc11p1GxS2V2SVQvL1yItwtF3l8oK0QrA+OX4U5qyqA2Wv57qh1BAnG3VwAq8acd6IlS +u4ED4MXbT2HiKk0CXMzw8dz5G1o+9+oeKiL6qqZu7ZPjkoV8Pe53pLdG9wPbVCrcEsS5sJcEpK 59Nc0VJnZ+b6VLFYspPNz4bjbywkJ9nlAo57sauAwIGqD3fM49FTT/c5UwBx+dZUMHimkY3/hJM vM+vaoTThWbu5mG+kGg== X-Authority-Analysis: v=2.4 cv=DtRbOW/+ c=1 sm=1 tr=0 ts=698de741 cx=c_pps a=TvliyZNEFSK35vtP2Nadqg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=HzLeVaNsDn8A:10 a=M51BFTxLslgA:10 a=i1IsUcr2s-wA:10 a=VkNPw1HP01LnGYTKEx00:22 a=Mpw57Om8IfrbqaoTuvik:22 a=GgsMoib0sEa3-_RKJdDe:22 a=2AEO0YjSAAAA:8 a=0-yszGi1pw2bLUArnyYA:9 a=3ZKOabzyN94A:10 a=QEXdDO2ut3YA:10 X-Proofpoint-ORIG-GUID: 4AYZcIClCtuKt7oSEem2A9weh6jYrFL_ X-Proofpoint-GUID: 4AYZcIClCtuKt7oSEem2A9weh6jYrFL_ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.51,FMLib:17.12.100.49 definitions=2026-02-12_04,2026-02-12_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 spamscore=0 impostorscore=0 lowpriorityscore=0 bulkscore=0 clxscore=1015 malwarescore=0 adultscore=0 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2601150000 definitions=main-2602120111 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Ʃgel --- 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 9a0f8158504..d5ceb657fa9 100644 --- a/drivers/greybus/cpc/host.c +++ b/drivers/greybus/cpc/host.c @@ -161,6 +161,7 @@ static struct gb_hd_driver cpc_gb_driver = { static void cpc_hd_init(struct cpc_host_device *cpc_hd) { mutex_init(&cpc_hd->lock); + skb_queue_head_init(&cpc_hd->tx_queue); } struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct device *parent) @@ -168,7 +169,7 @@ struct cpc_host_device *cpc_hd_create(struct cpc_hd_driver *driver, struct devic struct cpc_host_device *cpc_hd; struct gb_host_device *hd; - if (!driver->transmit) { + if (!driver->wake_tx) { dev_err(parent, "missing mandatory callback\n"); return ERR_PTR(-EINVAL); } @@ -237,13 +238,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 = cpc_hd->driver; - 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); } +/** + * 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 = 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 = 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 for 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_head *frame_list, + unsigned int max_frames) +{ + struct sk_buff *skb; + unsigned int count = 0; + + mutex_lock(&cpc_hd->lock); + while (count < max_frames && (skb = 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 #define GB_CPC_MSG_SIZE_MAX 4096 @@ -18,7 +19,7 @@ struct cpc_cport; struct cpc_host_device; struct cpc_hd_driver { - int (*transmit)(struct cpc_host_device *hd, struct sk_buff *skb); + int (*wake_tx)(struct cpc_host_device *cpc_hd); }; /** @@ -34,6 +35,8 @@ struct cpc_host_device { struct mutex lock; /* Synchronize access to cports */ struct cpc_cport *cports[GB_CPC_NUM_CPORTS]; + + struct sk_buff_head tx_queue; }; 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); -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_head *frame_list, + unsigned int max_frames); #endif -- 2.52.0