From nobody Wed Dec 17 04:05:13 2025 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 9C3DC23ABBE for ; Fri, 12 Dec 2025 16:29:25 +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=1765556967; cv=fail; b=cE2vEBYC2tShQlIBoFIx2JffYPIODpQsqU5W2fBZfsgxeHaYg0nZg0EaiF5xh58lnT9y5ChFovu4vCrd2zQlAv9FN6J3H9gPUTRMswS+8gdmWrI9kzzn6mjiSO07Nj3lFvpMX5aqoQTjYcP9/h3J73ecccy3DKy3jxxEUB5FLzY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1765556967; c=relaxed/simple; bh=4TwVMaEbzaqgKfu25QoLmZ58QUEv29F4uP31XwCSo1Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=cUP1Gvp/tetp6XBkQwIvPRvQv/TCXWYGPakhTdcv5zE5cVixg99bUkKo4JoO1VYqkzJgE4PwPzX1nrfajOyZiXwi/RQf5fJiTPG86zMdBIyGlMU/RYTXM5L/S7xXVh98TTm5CX7vMew6P0JL3BKZ99CqsdcFrP47swFXDaioFng= 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=stAHxUsY; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b=H0D5Q9F5; 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="stAHxUsY"; dkim=pass (1024-bit key) header.d=silabs.com header.i=@silabs.com header.b="H0D5Q9F5" 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 5BC1HxRw2471899; Fri, 12 Dec 2025 10:13:36 -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=To5zo8pux2Dy/S1u99tsF/n75NjPmFS7HhKApsnO2Rc=; b=stAHxUsYJHW0 KXt89pw1JWEbrubSZEFhHynqBXKc14NCKk63Nmkn4cm30GIZzZR7XKwettKKe+f/ ro++xXxC3d4YriBmXD97Vomqkh9UVvmLeQ8h6XF8UjRxkMnrC8jbGbX9/jMyzSzg z0e3IGi4umVr+GvsilyCtoSxPCoQ28nBFsM/gwHI9murancoqvE4nLZuNRionCw4 xW7nst+cjfTXpBa3t7Z6sBQJ8EbJP3UqgjoPA1CpLy/iN3nWXNUk79ikOkoKbX1A v1c2C+YRTFaT6X6YehMlxbJ5wZWs9WTv2vJAUP9c99UGUlVmPIsPlSDuw8wrYY7u fAFNFGQZVg== Received: from cy7pr03cu001.outbound.protection.outlook.com (mail-westcentralusazon11020120.outbound.protection.outlook.com [40.93.198.120]) by mx0a-0024c301.pphosted.com (PPS) with ESMTPS id 4ayht2mdet-3 (version=TLSv1.3 cipher=TLS_AES_256_GCM_SHA384 bits=256 verify=NOT); Fri, 12 Dec 2025 10:13:36 -0600 (CST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kEtzpr/bUyjTkT1ZsSfuH7MKc5W72natN9PTNareGyFDpUuq6SbkjtR9JFnTdO694WCSdsfzc8I1pkpXNBU6zt2Ye3AQ5Am0GcbOODiBUoCS1FTfiDL2iPajF5tcArWuE6oBS70/OsL06jabFhLzq1zMY9XN8R73RPf2mjAuXo09awRxR5hQP5EnwTpyiU6zfgNio3DX+LWi93a31Vo7HfRUWj3QJZknpL1pS3TDffrxCoc+z6ShJ192/G+UxpjRSQnU3GxucGT+uG6NBlY4XTeM0xMtiYzAU3XEgiJXfaAgqs7dVniXySCRNnht78rJAYhtlqFM7uGaEvgZ2DlF/A== 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=To5zo8pux2Dy/S1u99tsF/n75NjPmFS7HhKApsnO2Rc=; b=U0QokAoXGuuaaQd7U1XhijSDDWEZa+FEPP5QsbhMtU2SRAPbz8kGy2RDjbzVkBkNP+ej/e5bpQCZPNzEwNMlY+MQBh7TT183H7CeFXcRgoa9mc9XZpA0eomxV5eOkpHMwdXfRLhxcMBZiK76JP734Q9vSeqPOgLPvKVK8R6CbTJAXR9sc597x4RCzsD6s+8Pzb2iWKh4viqkMRnJjVisx9abEW8d/IMS7XYYJSivxqKd8GsWnXrpma6u5sctaHsSfR+ZkTGGN1lu2dnLvC00ld0K1XcabX9LIju05WSLLyOjoAefG9jLGYgUGkc8nOHTeFnA1eY2eL6aoIcaP3O5EQ== 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=To5zo8pux2Dy/S1u99tsF/n75NjPmFS7HhKApsnO2Rc=; b=H0D5Q9F5W6qGIWuTA0UKYmkLpJ179amKmUEPK+IvsXLathccwTvYo55EChjAa+9M8czIqkntIqDEqGYivpEizX1DiJjl6SSgUrC0Jd8e9XzA2pqUj9S8v0apI6OnoKHulu0ww72Zr/3gi253LYTAoW8/zGunWfXTsuDHmAV6yxQ= Received: from DS0PR11MB8205.namprd11.prod.outlook.com (2603:10b6:8:162::17) by DM3PPF7468F7991.namprd11.prod.outlook.com (2603:10b6:f:fc00::f2d) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9412.9; Fri, 12 Dec 2025 16:13:31 +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.9412.005; Fri, 12 Dec 2025 16:13:31 +0000 From: =?UTF-8?q?Damien=20Ri=C3=A9gel?= To: greybus-dev@lists.linaro.org Cc: linux-kernel@vger.kernel.org, Johan Hovold , Alex Elder , Greg Kroah-Hartman , Silicon Labs Kernel Team , =?UTF-8?q?Damien=20Ri=C3=A9gel?= Subject: [PATCH 12/14] greybus: cpc: let host device drivers dequeue TX frames Date: Fri, 12 Dec 2025 11:13:06 -0500 Message-ID: <20251212161308.25678-13-damien.riegel@silabs.com> X-Mailer: git-send-email 2.49.0 In-Reply-To: <20251212161308.25678-1-damien.riegel@silabs.com> References: <20251212161308.25678-1-damien.riegel@silabs.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: YQZPR01CA0176.CANPRD01.PROD.OUTLOOK.COM (2603:10b6:c01:8b::25) 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_|DM3PPF7468F7991:EE_ X-MS-Office365-Filtering-Correlation-Id: a45267cc-7f5e-4dd7-4b18-08de39996443 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|52116014|376014|1800799024|366016|38350700014; X-Microsoft-Antispam-Message-Info: =?utf-8?B?YnNJa0YzWHoxWVpFOVVDQUZOcUxQeHFCQXRieFhiMDRIUStEQ3FtMnpVZ0Vp?= =?utf-8?B?WUN3STJxbk95S1NQSnB0dWpWY2g5bkV0Wk9UQW5uMWZuM1NOVG9XTXNENkU0?= =?utf-8?B?bnFmTWhNSXNjWlBYZjlRbldqN3grcE56WWJMZE0rTXo4bzJzQmpnd3BqOThs?= =?utf-8?B?RGxxZExvczBRVC9xT2hQUFBkTzluNW54UVdIMXk4VG96VUU1TklVdDdoQ2lG?= =?utf-8?B?Wmp4emp3R1l5ckd5Wk52cEp3MGRCOTVVMm4yQTR2enR6Ny9xQWx2UVpBUHNn?= =?utf-8?B?cFhROFUxSWNrN0wySHY4VFRMK1I3M1ZQUFdOc3V4UmtuZTk3N2NNdjRwQldO?= =?utf-8?B?cGZ4VDk4Y0lYMmgybzlwVERWaFIweHBmQmJETzEvWStxWHJUMmZxWmRrUEVG?= =?utf-8?B?SzRXdTVWL3ZpVmN0ekR4emFWT3FxYnE2TVNuak5Kd3hEK1BLWGNOZ0RicThn?= =?utf-8?B?ZjYyc01GS0NVZC9Gak1yZlJ5YXN0VUhKb0U4NFNaZmp3YzFmaVkzdFBXTmRB?= =?utf-8?B?RXFuNWV4dGE2RWNkbk1HYWpLeHVoemRNd0JQWGtsc1l6emxORHNPN1NkQ3dy?= =?utf-8?B?MkNXeHhaeG5xYXhkV21iSXFlMDZpN3E1c0dPZkliejQ1cE93ZEUxYjc4aTI5?= =?utf-8?B?N2tBQVkva0NjUEVYLy9ybktJQm0rM2lJZ0x1Z2Z5bEk5Vm5hMDF2YVBSY2NH?= =?utf-8?B?Sk1zZHU3QmVGbTh2d29SdCs1YTVGV21JZTBlbHFMWGMrcVhwY3FZVlZPZXZw?= =?utf-8?B?Sys1VUpwNGYrL3ltc3QzcVliSGo5d20xS3FaaUNHYkNzUUVoZ2VvbTRJUVIx?= =?utf-8?B?bEt0NjdnMnFZeUJFZzdaMndWc21ET1l4MTFObzJQWlQ3OGVkR3hPQWlUb1ZU?= =?utf-8?B?dDRCM2svNnMyV3FDeGg3Q1BJUzFBZ3pNNzVyMVo1cWpWSHlxR3Zid2JVNDZa?= =?utf-8?B?aGRVUTJuSFZQTXZtaG9XQU45Nk5wRGVYWGc4bmxHT2k3U1RaMzNUNVk0Y0V0?= =?utf-8?B?VXloSWJ3UWFnMTJ1Z2x2MXd6VkVGQVdmL1psL2JrYmJXRmtzYXUzTHgvYWpD?= =?utf-8?B?TmFYNGV2Y0NUeDZ4QXZ0TTJJOVBkS0ZCeTVML1hwRU1nRTJwRWJDRnYrRHY4?= =?utf-8?B?eHdINFBTWHZHOVhVN3dUcnF1NlJoa2hNWWg4enFVSmdDVWlEQ3FBWnF6RHdl?= =?utf-8?B?U2J3OHpncnY3Z0tYbkdnWFU4SGx0QndTOU1sNjdkc2paMXkrQXRyajhkUXAr?= =?utf-8?B?M3RLY3NGRnFpTkcyYTltQ1FMWVh0NmY1Ri9ITEJaNEtWaStxYmR5NWNicGo3?= =?utf-8?B?WjlnbDNxUThoYU40ajJxT1VyQjgwdjZCZDhlUEV0SUlFclp4KzFsUUxjZmNP?= =?utf-8?B?MGdmTGFvM2J2YjAyeGl3cFRXUzhzNFpKTjFuL0cvenF3VDhwZnpoamUxOTBy?= =?utf-8?B?ZlE3bUxqZ3hKL0ZXbTZLSWZzeVhFdDYrOGR6Q0lSbXJjS29ib0F2VWkvbURj?= =?utf-8?B?SzZOeHVBNXlCY3NDbThsTWg5WEw1SXJvZmtlalhyT25TeGl0ZTJkQ2R5M2JK?= =?utf-8?B?cGVyL3R2RVovTkVNbTNhUHEwVEtWNG1Ydys0ZU53NFBnVUttVWhqSGFyOUl2?= =?utf-8?B?OS91ZjdJcENrNVFIeGpVdHNSSDFHTExsemtyZGFRZUtFdWtxLys2WXdWbXRp?= =?utf-8?B?UmFsaEFLL1B5YlVmd1E2c244MTAxYjh0dEFsQTRkRXRNc3d2bXA0cThEUm9w?= =?utf-8?B?ZlRONkdSNDU4YjFWamJWMml6WXRlMmN6QUVrR0FHMnR3RklhQWx0MXZUbkNI?= =?utf-8?B?YW5TYW5UUjJkTVo0ZFFXeFhDaUJnc0l4RGF5bWRqMytvaTJWWEdBMmxVdXNz?= =?utf-8?B?am1ZVUNnVlpzSGFGeGNMcW1GdVQzalZNRzdUY01VVkRLNzFQRGFKK0lHbDJN?= =?utf-8?B?QXVmUW5UUldjdVh1T1FaR1lrTFBrR3Y4eDRrc2E3SmMvenNUTXAwYi9JdEY2?= =?utf-8?B?Sm56VnJkd2xrdFBOSlRGSWNPc3VWZGhwMFhHcXBNVWFHS3VlQkZRMThQOWgy?= =?utf-8?Q?kJ1Y+h?= 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)(52116014)(376014)(1800799024)(366016)(38350700014);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TU1TRXgreDEwbUgwKzRuZm9ORzdkSHFkVHBHaEE4VTFLOG4yaUhxbVBBYUxy?= =?utf-8?B?QjRUVXJOOXhsVVZ4ZWNhNEF5ekpuRndEQ200anVmdUc1eFdZL2pldW9DY2Jm?= =?utf-8?B?VGdBa242V2ZNcHZ4L1hKUEdZMm1oY0d4Mlg0K1ltVURscFZXL3o4TDhtVHFE?= =?utf-8?B?WGxvcjJNaWc0ZU1UZ1JZeStUWWEycUNtOEhKWkRuWkh3b3ZmTlJGbW1PSEJn?= =?utf-8?B?Y244dXpMRHFBMjBBWmpzTEFCRFBScm5HSlJ4ODJUd0I1YmpDV1k5S2lNRmxI?= =?utf-8?B?UTgxeXRkbE1jQkt5VjZQK0I3OXV2VlZuRzBWY0ZSbkdwR3Z0Sm1rdHJ1dEJn?= =?utf-8?B?VjV5Um16akVwZVZDeWRIYWo3OGFkODVOaWZDRmhOcmIvMGpzOFIyMkYvL2Fs?= =?utf-8?B?M2NJcTBBeVU5NENBdWhES0FwUzAyUzJncWJhUEZRZkJQejF0SC9TaFpiT1FJ?= =?utf-8?B?ZXlTbXgyZ3ErckNVTDE1RjBybm50Y2lHbERmbnNWRjJBMUhEa2NIZS9mTDlj?= =?utf-8?B?c0h0emVXWWdaRHZXVmFYSFZGWlFVM1FzMEtPVExkUjZFOG4xb0cxeitYandq?= =?utf-8?B?NTJ0QXpnOUkyNXRobEtTRitWTzhRVXNrM2hETkpiRk42OU52OUlKRk9VWlJI?= =?utf-8?B?K3ZqZklWL0lDOGEvdjZWWjdsT2FtOWZrVnFUT1J1MXNRWXVXU3BkTmFvK0JX?= =?utf-8?B?TnVlM2lnaTZLanJkZ3Y1MlE4RlUrTUR4U00xYWh5T2xaemVwQ0FJRm94eFNR?= =?utf-8?B?T3p1Nk4waUpYTkVzSURyZVJZMjFUSWV3Rzd2aUgvSnRRRWw0TEZNcFJxbmFz?= =?utf-8?B?bUZ5SFJGYjRWYjRGTVExWHFVTnNBL3VBMEpnQ0d6RUtxdlZNTXVrRThBQjlJ?= =?utf-8?B?UkhReHRFTG5RaXV1MzJKRWg4OG9pK0J0SUEzL0hyZHJVZlNkZTNNQUhZMk5r?= =?utf-8?B?MEQ5dHB3LzZ1Y1dHQTBnR0V6b3JtTVVCeTlVQXFjL25FeE1UQUVDVWY0WThD?= =?utf-8?B?dVFUdFVQbkpTMkk2Nk1hZnJqeG10NG1SbWppaHlkV29WRWdKSktXZTF6anEw?= =?utf-8?B?TWh4N1FvUHNTZWFnL2hSY2FVcUtkeDJHVi81TGNLZkFwbXZpeUFucnY1ZnFK?= =?utf-8?B?a1U5dlhuWE9aQWRWTE90eXI3L2RJUlM3K0ZINlVjTkNlZkNvYVNnSWZlWWpw?= =?utf-8?B?RVgxcVNOQ0l6S1N2OUxHSVQzQ0lHbFRjR2cwZ0pYUFd3VCtPQXNWYXl5WW5u?= =?utf-8?B?bVBnYUJBQjlRaXoxM01pZmI5WFlKakpwbURiWHUvcERXZ2I0TlVTZWJJMU5B?= =?utf-8?B?UXpYR21ab1VUd1FLWVhqQ1NETW05VEVQeTNOc0FVZmZHU1YwR2ErWkNseGdi?= =?utf-8?B?bmVmWXVmZ2NxZlVHeGxJeUJMQXp5YkNDR0JxakllaG5SRklOa3BCRDhId1Zv?= =?utf-8?B?Wm40WWRBY0VoN01HSzU2Mk5TVVU0TkFYU1Yrc3l2eHhMOVFiUEtmUDVIOUVx?= =?utf-8?B?UVVKV2MzR3VtdXpwRzdob21Lb0l2ajRGamxVL2tmQ3VTM01oayt0TXIzU1pq?= =?utf-8?B?NUNlbXBUY1JRbXhZeGVGK3hwVnZ4WFFCK1AzWnYvREdPSUp6QVRzTmZYZURF?= =?utf-8?B?c2pQZm9FSmFDdm0xR0ZLNE1QcUNsbW9mbFFodXFnUVVpSDRWWlJ1WUlHdERN?= =?utf-8?B?WFprMEIxYVdReklxR2I1ZVNVQ29wQm8xVkJONzREL3hWK0NPV1hYQXNXV3pV?= =?utf-8?B?ZGsxMkVxNnZPWmxZcG14N0hTSU1WTllwRkhpWXE0WktmQS9Fek44bzgwaHdO?= =?utf-8?B?NEtUNDlqRVRqbENTdlpIS1JPaExySmhnN28xVllINSt0K0lIY1VpdXZVUWRk?= =?utf-8?B?d0wzUi80M2Nhalh2ODdPaFZKMWRiS003MVN4K21JQnpQWnpTOUZHTDdXK1hT?= =?utf-8?B?QW5Ia2owMmNHZ2t6NGdVcnJoMlovRHFHVksyekVyZmpCNkM2YzlIa2tqU0dX?= =?utf-8?B?V3NYekdua240NEN1VkVFOGswSUVUWktDRUpWQWhwOWNIa3hXZm5xQ1FrMEFx?= =?utf-8?B?dGI2TkQzVzVpcTRpTDk4bjR6dTF6aXBuUERmdHJLSHFBZjZCRFNYMGVzYjlZ?= =?utf-8?Q?11eSFYMeBy8QnSN0tDSNRN3Bk?= X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: a45267cc-7f5e-4dd7-4b18-08de39996443 X-MS-Exchange-CrossTenant-AuthSource: DS0PR11MB8205.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2025 16:13:31.0294 (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: FG37I4wO7ZquYAcGBOu5fijRisay4OHT2fnWX635TplIZR1wI8EIQvqI0XbGoDCX5Mx2uJ9jsN8GZ43avpcA3g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM3PPF7468F7991 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMjEyMDEyOSBTYWx0ZWRfX3GzXridikPPP qs7m4nvFG2NhXVvKzVKuTIjbvVqpelPrket6HWtlUIpA713iWQbw4yaAD/aRxLkdAuLWBpqJWj+ kjr/MtiampDOLlr2nrElPGi63NdobUX84nU5PYhJl+F+MWhOmp3/fZUjkPY4J54nTorX1u8Fm2G 7d5ArOBes3xz+LVD8eA8kq/iRqS6eYYjsR5D16HNstI7vwRYS4oQLSreCSGJv2pW+guT5B37zUh FKDfn9slMo0//GIn2ABvy7CK8mi8j8JCUbYeU5XFWO5zZDt+J1kJml8mcj7av9J6bmRT+qdhTwc +kWz85OL11RixZZxLwtSXNNcl0xqoy5Wp/gIL4FkODPDGuu4g+6rllN60McmqofEhV9I/Z9SyPz VqLBuWJYU5P6eq0tH651C5RCjib5Cw== X-Authority-Analysis: v=2.4 cv=BKy+bVQG c=1 sm=1 tr=0 ts=693c3f30 cx=c_pps a=OsHIvx7z5txkqQhXuj38dg==:117 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=wP3pNCr1ah4A: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-ORIG-GUID: WM29DcWpE4jgpE6jdHr4mhJkLyzISbNg X-Proofpoint-GUID: WM29DcWpE4jgpE6jdHr4mhJkLyzISbNg 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=2025-12-12_04,2025-12-11_01,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 spamscore=0 lowpriorityscore=0 adultscore=0 impostorscore=0 suspectscore=0 bulkscore=0 phishscore=0 priorityscore=1501 malwarescore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2510240001 definitions=main-2512120129 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.49.0