Show a cover letter.

GET /api/1.0/covers/2197379/?format=api
HTTP 200 OK
Allow: GET, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 2197379,
    "url": "http://patchwork.ozlabs.org/api/1.0/covers/2197379/?format=api",
    "project": {
        "id": 28,
        "url": "http://patchwork.ozlabs.org/api/1.0/projects/28/?format=api",
        "name": "Linux PCI development",
        "link_name": "linux-pci",
        "list_id": "linux-pci.vger.kernel.org",
        "list_email": "linux-pci@vger.kernel.org",
        "web_url": null,
        "scm_url": null,
        "webscm_url": null
    },
    "msgid": "<20260217204909.211793-1-zhiw@nvidia.com>",
    "date": "2026-02-17T20:49:05",
    "name": "[v3,0/1] rust: introduce abstractions for fwctl",
    "submitter": {
        "id": 88076,
        "url": "http://patchwork.ozlabs.org/api/1.0/people/88076/?format=api",
        "name": "Zhi Wang",
        "email": "zhiw@nvidia.com"
    },
    "series": [
        {
            "id": 492476,
            "url": "http://patchwork.ozlabs.org/api/1.0/series/492476/?format=api",
            "date": "2026-02-17T20:49:05",
            "name": "rust: introduce abstractions for fwctl",
            "version": 3,
            "mbox": "http://patchwork.ozlabs.org/series/492476/mbox/"
        }
    ],
    "headers": {
        "Return-Path": "\n <linux-pci+bounces-47504-incoming=patchwork.ozlabs.org@vger.kernel.org>",
        "X-Original-To": [
            "incoming@patchwork.ozlabs.org",
            "linux-pci@vger.kernel.org"
        ],
        "Delivered-To": "patchwork-incoming@legolas.ozlabs.org",
        "Authentication-Results": [
            "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.a=rsa-sha256\n header.s=selector2 header.b=mqWVuLvS;\n\tdkim-atps=neutral",
            "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c15:e001:75::12fc:5321; helo=sin.lore.kernel.org;\n envelope-from=linux-pci+bounces-47504-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)",
            "smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com\n header.b=\"mqWVuLvS\"",
            "smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.193.35",
            "smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=nvidia.com",
            "smtp.subspace.kernel.org;\n spf=fail smtp.mailfrom=nvidia.com"
        ],
        "Received": [
            "from sin.lore.kernel.org (sin.lore.kernel.org\n [IPv6:2600:3c15:e001:75::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fFsGM6yW3z1xvq\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 18 Feb 2026 07:50:03 +1100 (AEDT)",
            "from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sin.lore.kernel.org (Postfix) with ESMTP id 836BA300845E\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 17 Feb 2026 20:50:00 +0000 (UTC)",
            "from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 5854D29BDB4;\n\tTue, 17 Feb 2026 20:49:58 +0000 (UTC)",
            "from CH1PR05CU001.outbound.protection.outlook.com\n (mail-northcentralusazon11010035.outbound.protection.outlook.com\n [52.101.193.35])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id C51A02773E4;\n\tTue, 17 Feb 2026 20:49:56 +0000 (UTC)",
            "from PH0PR07CA0084.namprd07.prod.outlook.com (2603:10b6:510:f::29)\n by IA0PR12MB8086.namprd12.prod.outlook.com (2603:10b6:208:403::7) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9611.16; Tue, 17 Feb\n 2026 20:49:41 +0000",
            "from CO1PEPF000044F9.namprd21.prod.outlook.com\n (2603:10b6:510:f:cafe::b7) by PH0PR07CA0084.outlook.office365.com\n (2603:10b6:510:f::29) with Microsoft SMTP Server (version=TLS1_3,\n cipher=TLS_AES_256_GCM_SHA384) id 15.20.9632.13 via Frontend Transport; Tue,\n 17 Feb 2026 20:49:40 +0000",
            "from mail.nvidia.com (216.228.117.160) by\n CO1PEPF000044F9.mail.protection.outlook.com (10.167.241.199) with Microsoft\n SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id\n 15.20.9654.0 via Frontend Transport; Tue, 17 Feb 2026 20:49:40 +0000",
            "from rnnvmail202.nvidia.com (10.129.68.7) by mail.nvidia.com\n (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 17 Feb\n 2026 12:49:20 -0800",
            "from rnnvmail203.nvidia.com (10.129.68.9) by rnnvmail202.nvidia.com\n (10.129.68.7) with Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Tue, 17 Feb\n 2026 12:49:19 -0800",
            "from inno-thin-ubuntu.nvidia.com (10.127.8.9) by mail.nvidia.com\n (10.129.68.9) with Microsoft SMTP Server id 15.2.2562.20 via Frontend\n Transport; Tue, 17 Feb 2026 12:49:11 -0800"
        ],
        "ARC-Seal": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1771361398; cv=fail;\n b=ryyK5XE2h20hl0qppfNt1mv9XiE2lHjd2L1XVeIHF11zGqDa2AzlBdE2EUHbA4yphgtO4fPR4sXccoXpCH8qzeBXJ9OyXJmMmjZszK0nHjUmz84LEMCI7LtRDjEu3zLc1ZYkR5A4ksGNwvEM7BSozYfaxGAk6Ek+7qRB8C57Hu0=",
            "i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=luZ8tSfzb2wvqhNQs0O2DC2RM/SXry8uYnak/N4hYyPfdwPF14Ud904h3aUZPsmzWIWD0WWUaUyJOViW1rrOZ4S6OYv0ELFnojxq2qjXCJLkkPwMXo77Rw1LV44Kgt6dv2TVggtLEJWoscBfR9+fiwqD8KqDNzMDynBPZ84QVWDNnWXcNEv2t/FpHctiTWlYJW5J381DP65MRbHbfIasH2t5z7G4vpMQiLWQWyiHnfCKQbFUnqgKZgKLIs1GNUw0ZReJrGhUzZmMudRIi18plmzsj+eOSJ8lOAhAmnFfFTNRNIYZ6EKyVSPj1M2Og8tgNrWRe9B4RU/i+tIBAS9NJw=="
        ],
        "ARC-Message-Signature": [
            "i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1771361398; c=relaxed/simple;\n\tbh=o48Xyus27uJf9FOOH1dIW0K3bd1X20im5psRkjnH/bg=;\n\th=From:To:CC:Subject:Date:Message-ID:MIME-Version:Content-Type;\n b=nrYBxJwQ/vm9cZ0b5J4f8LK/s8dBcWMR7UNuPwlzEdgt5JSCfnOha0ABqGvf5LcQs4s7U1OAja8LZ+91BmC6k5n6n+0kWmH0itHc/W4PPq0JDtUk4fXaE01dqp7Hre63ELdYCJwtsSZuQJR22TeGdgT/v9xGNTL9KD9gysCFHGU=",
            "i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=DYsMAXUIPyICa31jW/kFwRjzmNKfOmK9T0Lm0JvgDG4=;\n b=jmNszP76pAOzPcVldLX5dFJeG2vQgCVtE0woVDq2gJackvrUB1szTWPQlB9U/xAn7PY4OGYMPpT74sWEOb82HaysaEbvGZ1DbbNnSQ8soXLdjPhTT3WCdh+5/0sJVLEVAEPgBOUnrBgQe3tUVWMQdmakruzVD9IO0MLqoRiuzGBvLgBX2gr3bN5sGgC1xa2CuQoMi9zD3Ngk02BFjU8gN1r+bKTIP5WUXJzUQemMMIg5aBQuZ957n0PaMzLJDxNTor949UOmqZjTaAD/pwuVx39b6cvUiZhAi5EWIWWvvkYmS9Hs0ZOKfOn2C54kbRQyDLcwaOaBqkaiS69xFzAg7g=="
        ],
        "ARC-Authentication-Results": [
            "i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=reject dis=none) header.from=nvidia.com;\n spf=fail smtp.mailfrom=nvidia.com;\n dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com\n header.b=mqWVuLvS; arc=fail smtp.client-ip=52.101.193.35",
            "i=1; mx.microsoft.com 1; spf=pass (sender ip is\n 216.228.117.160) smtp.rcpttodomain=vger.kernel.org smtp.mailfrom=nvidia.com;\n dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com;\n dkim=none (message not signed); arc=none (0)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com;\n s=selector2;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=DYsMAXUIPyICa31jW/kFwRjzmNKfOmK9T0Lm0JvgDG4=;\n b=mqWVuLvSkWDro3/k6Bxi2j0FmnP4wvjLm6EX1Lc1cDFUcWWzsgObprLUYnyBhusFuOMhhvevK1lFm/bjm3zPHSUldMGa4PiAg0i7Z3KGnTYyTv374IzNHxLDM7SZFM1doqMb95FC8E0vmete5zA9wMYhudd7y0PdogpPmquXcKsuvCf4gGIcYM/6qIeCCvln1vs5QK0/gkqdWN77In2Wh/ZSfkxJkhTz9VXAT9QWGGe4K8P8IdbwyFVHpU8YjsyAt3EiV/CDR6+Vu5WAf2vX+NOTD5h3tw8FwsovdDI4ZDzPcfTPlcPBxKK7uPr2KxR2EuKJKVnVx211R5yw4TtF9g==",
        "X-MS-Exchange-Authentication-Results": "spf=pass (sender IP is 216.228.117.160)\n smtp.mailfrom=nvidia.com; dkim=none (message not signed)\n header.d=none;dmarc=pass action=none header.from=nvidia.com;",
        "Received-SPF": "Pass (protection.outlook.com: domain of nvidia.com designates\n 216.228.117.160 as permitted sender) receiver=protection.outlook.com;\n client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C",
        "From": "Zhi Wang <zhiw@nvidia.com>",
        "To": "<rust-for-linux@vger.kernel.org>, <linux-pci@vger.kernel.org>,\n\t<linux-kernel@vger.kernel.org>",
        "CC": "<dakr@kernel.org>, <jgg@nvidia.com>, <gary@garyguo.net>,\n\t<joelagnelf@nvidia.com>, <aliceryhl@google.com>, <bhelgaas@google.com>,\n\t<kwilczynski@kernel.org>, <ojeda@kernel.org>, <alex.gaynor@gmail.com>,\n\t<boqun.feng@gmail.com>, <bjorn3_gh@protonmail.com>, <lossin@kernel.org>,\n\t<a.hindborg@kernel.org>, <tmgross@umich.edu>, <markus.probst@posteo.de>,\n\t<helgaas@kernel.org>, <cjia@nvidia.com>, <smitra@nvidia.com>,\n\t<ankita@nvidia.com>, <aniketa@nvidia.com>, <kwankhede@nvidia.com>,\n\t<targupta@nvidia.com>, <acourbot@nvidia.com>, <jhubbard@nvidia.com>,\n\t<zhiwang@kernel.org>, <daniel.almeida@collabora.com>, Zhi Wang\n\t<zhiw@nvidia.com>",
        "Subject": "[PATCH v3 0/1] rust: introduce abstractions for fwctl",
        "Date": "Tue, 17 Feb 2026 22:49:05 +0200",
        "Message-ID": "<20260217204909.211793-1-zhiw@nvidia.com>",
        "X-Mailer": "git-send-email 2.43.0",
        "Precedence": "bulk",
        "X-Mailing-List": "linux-pci@vger.kernel.org",
        "List-Id": "<linux-pci.vger.kernel.org>",
        "List-Subscribe": "<mailto:linux-pci+subscribe@vger.kernel.org>",
        "List-Unsubscribe": "<mailto:linux-pci+unsubscribe@vger.kernel.org>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain; charset=\"UTF-8\"",
        "Content-Transfer-Encoding": "8bit",
        "X-NV-OnPremToCloud": "ExternallySecured",
        "X-EOPAttributedMessage": "0",
        "X-MS-PublicTrafficType": "Email",
        "X-MS-TrafficTypeDiagnostic": "CO1PEPF000044F9:EE_|IA0PR12MB8086:EE_",
        "X-MS-Office365-Filtering-Correlation-Id": "cab2a54b-9a23-4f10-77b6-08de6e661224",
        "X-MS-Exchange-SenderADCheck": "1",
        "X-MS-Exchange-AntiSpam-Relay": "0",
        "X-Microsoft-Antispam": "\n\tBCL:0;ARA:13230040|82310400026|1800799024|376014|7416014|36860700013|13003099007;",
        "X-Microsoft-Antispam-Message-Info": "=?utf-8?q?GX8++0iKGFu3VPaPCwJPCuyK/iDunpK?=\n\t=?utf-8?q?Ng6louGCszjQfoSb7zDdFYSSid5zaQSTlj8UrvBs6gUZsunq2lpbJb8eHCkw58wJu?=\n\t=?utf-8?q?PWky1Qx6yKfeD55vZnQPDurm5NArnf8E2fdkMtbJEHquthmt6XPg/Rq5A72MwQQB0?=\n\t=?utf-8?q?cQ2cGLSFXNX84HOKXz4lU25K0Vm1RVUeFrdrylAKiYbjSIexQlp+hqymZoHs8MT8j?=\n\t=?utf-8?q?Xm80Al4/qaENuBXxrQ77jC7mpKEwprHTwAJs/eJB35N+XAkiJ+qWfbRk0wO8PgtI4?=\n\t=?utf-8?q?0ayPtAJKs4pfham/qxjb6s7f1IMIUwJEqcYeCL0d//g7PIkMn3ztdcrzoE7OLUVxt?=\n\t=?utf-8?q?BO0njL36+3k57TyqKcw3BVjSRsCXQwitp8cU1/uKnDVvwpklRFXByYMExS4ylsBDc?=\n\t=?utf-8?q?VbDFwH7c+dSr9NJ+Kzj+f8Jm6M82u5TpVS+uMLIn69bYOpYkxmMSqz3YU5zqUzWQg?=\n\t=?utf-8?q?lruz64hZgyY4mCPCm2sOKl5femYX4b2Q4nbCBVivXl8b+vZtJ5zFQYuBcA5IfzIk4?=\n\t=?utf-8?q?DYATxviKXYuD+MAxWlKtCZRAKzq06SK4sH1uto9pdUqCmFqXX29xBZNKZA8FZIRVu?=\n\t=?utf-8?q?vv5pI1dQMzFAfL8oUvC09ggFXoNW+3I5C9EhB2cR6I1akbh63FrB6Ne2js/z6/YM6?=\n\t=?utf-8?q?HdU3Clv/CsWPIT4pBkk8iqznRVCoWEl+FeZ82kbN9bbzF3YPppssH6goCCPW9Zf6P?=\n\t=?utf-8?q?68IKboINNw2siqLRa9mRHBlFN2O02W8BbMioM/GuBoxGrDoKrI7kQ4NMdbPWiKHCI?=\n\t=?utf-8?q?8W2feUOwNUOgIMRjIMSBJWqYDtEiHju8lNTK2gwjh6YgReMw3ilsEsUVrJ2BY/fJB?=\n\t=?utf-8?q?lnBZcu1z0hZTPObtp9lEWpn7vq93xuGlUXPWJ1KcYyIbaFoOZ7VZB+2pvjBHoSta+?=\n\t=?utf-8?q?j+SeVnVBjbHNQHv3tAteojRtI3o9gujKtR7dWf4Jb/RXJSzG8QveZvW/3hHUrSO+K?=\n\t=?utf-8?q?Rvm4b9u5dGWQagUk8nCXf324a7aCZK+/agXBR7wt5ekmROGWTJKKsTHlifVLJFtXX?=\n\t=?utf-8?q?9CzwW1OfrD7cOtXuqeMnyomi/4a2PlOo/inu8j5MdUEz/PaCxVukedEeodkUXq8/X?=\n\t=?utf-8?q?RBemOX2RzQc8QxE2avNSMnp+EenHBAJvF+7k78m7OzlJdxMZ37z1sPCtYdWarth8n?=\n\t=?utf-8?q?5TTq3RBxDHv+hxPX3BZKR+6g1quXaCMzLLSOj1Or/Zz31V6JX17RK5oaXPXDvMuEh?=\n\t=?utf-8?q?xld3nVYU27ixhqdirViqAk3P40gTm9nidRipwRDAs1bZAPUM+FsU2Shmu1ktFq27e?=\n\t=?utf-8?q?j5tosgDT0J8DXKZVbFfB02Js6ImIMuMND/9bHhqyrJwm8mwj8Ipb0nhYP7NHLmtql?=\n\t=?utf-8?q?QWbfPyswMBMeNnV39UxJASfm/YVpmZlCmdns+6Ke9lRMS4Rc4gRZ4leOky7XrPPyH?=\n\t=?utf-8?q?hhaF0AD+Tno+J21PFgkTmfXsl4q9WPEJ/r/wUd3nvjjcK+QE/7ul6iktuSI71wNxa?=\n\t=?utf-8?q?TFEUKV32Ycswu1XoqHY+HhnhQAuEcdRc3PxAR0KKKmKvsF2rkfP2RsTpATNdQ/0NN?=\n\t=?utf-8?q?2Y7ocWeYG4KSvmqgRGkGJ1Z5FXLNWPaY3/7Hx2f9t4iPNfH3BhJvbCRh9Ff7UthAS?=\n\t=?utf-8?q?u4VjPVJl7+OmtzZXgFY+TBPt5shlrHUNOmhOXBF1wS9PSSvYECY=3D?=",
        "X-Forefront-Antispam-Report": "\n\tCIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(376014)(7416014)(36860700013)(13003099007);DIR:OUT;SFP:1101;",
        "X-MS-Exchange-AntiSpam-MessageData-ChunkCount": "1",
        "X-MS-Exchange-AntiSpam-MessageData-0": "\n\trkQM2m1e4tVSgFx+9UhIFfbqQ90s7gE2uE9vlgLmrwTSvV3jCibwY74mGX8ezw1wxo0HnhVYO3qDcAql4k/dqJ++U+/9SgdyCIq34tIxPatfplGVneltPtIbXp4RPib/V/sCsCJXkifzZGA+OjbXde6hubErlwLIlVr4pnoFj5ASF4rqy/2xB9prdiZtS9MGXzVJV8IhI3kQBEQF4B5VisItXU0BcrJdm5Cc4qg6GbZdSGoYwfOZGru4scjq2zliEQ3VBGC/UirBNtBiDvTEIYdXXYpyWGNaEImk+rbolJ4ma+pZwjsrnQTScmtk2L4EypJI3MXAUtGdQ+bvuuFaxjwvHEBUAEZf3rj0AQMnYp9FgSUtw+veuh+2SATX4DE9vFNfzm/szKTUXDbxbx534yRdlq00g+9dgUL2f3fdayK/aT4FsOoYX/4n9QfBmrSF",
        "X-OriginatorOrg": "Nvidia.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "17 Feb 2026 20:49:40.1927\n (UTC)",
        "X-MS-Exchange-CrossTenant-Network-Message-Id": "\n cab2a54b-9a23-4f10-77b6-08de6e661224",
        "X-MS-Exchange-CrossTenant-Id": "43083d15-7273-40c1-b7db-39efd9ccc17a",
        "X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp": "\n TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com]",
        "X-MS-Exchange-CrossTenant-AuthSource": "\n\tCO1PEPF000044F9.namprd21.prod.outlook.com",
        "X-MS-Exchange-CrossTenant-AuthAs": "Anonymous",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "HybridOnPrem",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "IA0PR12MB8086"
    },
    "content": "In the NVIDIA vGPU RFC [1], the vGPU type blobs must be provided to the GSP\nbefore userspace can enumerate available vGPU types and create vGPU\ninstances. The original design relied on the firmware loading interface,\nbut fwctl is a more natural fit for this use case, as it is designed for\nuploading configuration or firmware data required before the device becomes\noperational.\n\nThis patch introduces a Rust abstraction over the fwctl subsystem,\nproviding safe and idiomatic bindings.\n\nThe new `fwctl` module allows Rust drivers to integrate with the existing\nC-side fwctl core through a typed trait interface. It provides:\n\n  - `Operations` trait — defines driver-specific callbacks: `open()`,\n    `close()`, `info()`, and `fw_rpc()`. The implementing type itself\n    serves as the per-FD user context, one instance per open().\n\n  - `Device<T>` — wraps `struct fwctl_device` with embedded driver-\n    specific data (`T::DeviceData`).\n\n  - `Registration<T>` — safe registration and automatic unregistration\n    of `struct fwctl_device` objects, living inside `Devres` to ensure\n    teardown before the parent device unbinds.\n\n  - `RpcScope` / `FwRpcResponse` — type-safe enums for RPC scope and\n    response handling, keeping unsafe pointer manipulation confined to\n    the abstraction layer.\n\n`rust/kernel/lib.rs` is updated to conditionally include this module\nunder `CONFIG_FWCTL`.\n\nThe repo with the patches can be found at [2].\n\nv3:\n\nQuite some updates in this version. Here you can find the example\nnova-core fwctl driver [3]. The interface is still WIP so it is just to\ndemonstrate the use of the rust fwctl abstractions.\n\nComments from folks:\n\n- Use an enum for the return of fw_rpc. (Joel)\n- Remove FWCTL_DEVICE_TYPE_RUST_FWCTL_TEST together with the sample\n  driver. (Jason)\n- Remove DeviceType:Error. (Gary)\n- Add __rust_helper for fwctl_get/fwctl_put. (Gary)\n- Refine the design of the device private data. Now it has a similar\n  device private data structure as DRM. (Danilo)\n- Separate fwctl alloc and register in the abstractions. (Jason)\n- Registration::new() now takes &fwctl::Device<T> and the parent\n  &Device<Bound> to align with other class device abstractions. (Danilo)\n- Update the Registration SAFETY comments. (Danilo & Jason)\n- Take self as per-FD user context in callbacks. (Danilo)\n- {open, close}_uctx -> {open, close}(). open() now takes &Device<Self>.\n  (Danilo)\n\nUpdates from me:\n\n- Introduce enums for fwctl RPC scope.\n- Introduce AlwaysRefCounted to avoid hacks after introducing the\n  refined flow of device private data.\n- Introduce default implementation of close()/info().\n- Fix a leak: Drop T::UserCtx in the close_uctx_callback explicitly.\n\nv2:\n\n- Don't open fwctl_put(). Add a rust helper. (Jason/Danilo)\n- Wrap Registration with Devres to guarantee proper lifetime management.\n  (Jason/Danilo)\n- Rename FwctlOps to Operations, FwctlUserCtx to UserCtx, FwctlDevice to\n  Device. (Danilo)\n- Use fwctl::DeviceType enum instead of raw u32 for DEVICE_TYPE. (Danilo)\n- Change fwctl_uctx field in UserCtx to Opaque<bindings::fwctl_uctx> and\n  make it private. (Danilo)\n- Provide Deref and DerefMut implementations for UserCtx::uctx. (Danilo)\n- Add UserCtx::parent_device_from_raw() to simplify parent device access.\n- Use cast() and cast_mut() instead of manual pointer casts. (Danilo)\n- Implement AlwaysRefCounted for Device and use ARef<Device> in\n  Registration. (Danilo)\n- Add rust_helper_fwctl_get() for reference counting.\n- Improve safety comments for slice::from_raw_parts_mut() in\n  fw_rpc_callback. (Danilo)\n- Convert imports to vertical style.\n- Fix all clippy warnings.\n\nv1:\n\n- Initial submission introducing fwctl Rust abstractions.\n\n[1] https://lore.kernel.org/all/20250903221111.3866249-1-zhiw@nvidia.com/\n[2] https://github.com/zhiwang-nvidia/driver-core/tree/fwctl-rust-abstraction-v3\n[3] https://github.com/zhiwang-nvidia/nova-core/commit/2068da7e8caf58da9584b0aa6c81fed8f547d59f\n\nZhi Wang (1):\n  rust: introduce abstractions for fwctl\n\n drivers/fwctl/Kconfig           |  12 +\n rust/bindings/bindings_helper.h |   1 +\n rust/helpers/fwctl.c            |  17 ++\n rust/helpers/helpers.c          |   3 +-\n rust/kernel/fwctl.rs            | 449 ++++++++++++++++++++++++++++++++\n rust/kernel/lib.rs              |   2 +\n 6 files changed, 483 insertions(+), 1 deletion(-)\n create mode 100644 rust/helpers/fwctl.c\n create mode 100644 rust/kernel/fwctl.rs"
}