From nobody Tue Apr 7 20:06:12 2026 Received: from CO1PR03CU002.outbound.protection.outlook.com (mail-westus2azon11010021.outbound.protection.outlook.com [52.101.46.21]) (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 588C43148DD; Fri, 27 Feb 2026 12:32:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.46.21 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772195579; cv=fail; b=PBRyUt7zpThDrEmcicfy0VUjWHzy/XXGT0LvVN5Wa04T3efzj++y/RraPaOXt2jhIXG/k5WLC+qwRhEq2KE8HhWOlJqqJRkMr9VygYsZXDUMd3afKJ4IWG5eP6y+GVZJK6Qje8dMIycmggZZkAEv93SKiacn7rZSfKGO+WgxFtE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772195579; c=relaxed/simple; bh=idYk/nvOunu+SQo3t0q5isq8QGSNHiE7ZMJUjcjRn7c=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=EnByviJ13qxqynPDyBi2kc34tvzDoAknIDSl5IKPWvd5GjW9TouNX4/vwJCiK+FIU/dJ4r78BP1acia/OpYlldPYb4+u2RljGR+cLOe5F+FatPjkTR+KS9NJyv0bqUpK9aBFL/VnLjQcbObzB9Xs/Seq0u0BBGIcE1UmQx/LjRA= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=J/tMN/ou; arc=fail smtp.client-ip=52.101.46.21 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="J/tMN/ou" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pgb6kV5x21vuTKbnwIg4JxhfodD0gG5Wl6N+NLyV/0SyJGEe1hNy/bScSegwfHVUV6X7dXZETwtChNKKs803FO0uLdJemQxswCEryRBuOpnYD2nI5PctkWn8ov+tUfs6JikjODDSbdCHzqJ6EnvyLahk1lpzkt0EJI16mv6/0LxohJOwgAmzwU5qABTHFT0lOkc8mJcoug6E4N+4XASx/5mMcz1zc793VMiQx4J0HEpfLXB7H/in1u9hACrdVgS4sYaC50jqnEpw31HevDYtBTCOWdlVPOxywLyF6XFczH9ytkd6y9+8Gwo8jUJG6D1IscYx+DoHXL/gZChntXSCsg== 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=+cx/rHVrbSGINlDs63mZF1XN06AvbQrrravh97m13lQ=; b=u50dF/w8bJ7jqbHXZi0/R20MLnxNH3Dqk5+AasSnAGIkCZbJgYr70ar/8yZOX5Rb2NWccdHXDKmJ/XKMJFPzHOChmElLKuj2WLTnMgbzORZxYDg6euJc8OPKerrS8xWvR4rOGZppMJouSA/NyXtkKy6rPFko+Ef9dSzciFdDCcIJFqDYVa0i3go0IYq3G/rV/XIag5odlRKDetAB0jr6ScgrcKiPOXlqZj8/oSiHXsqcBVUinUP58JXK248fCVZHhdDjdN61AKMKB3FZNz5QfSXE4eNt0i+dul/Zzw8PKWNGOYiZna7mUT35POb/u/OfdliJ4i5W1CeMVv0jKm3yzw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+cx/rHVrbSGINlDs63mZF1XN06AvbQrrravh97m13lQ=; b=J/tMN/ouzTLjhr8MgkF2NYVF0ln1PXsezUeI7U97pMq9QuvVOGp923Qh/dNX60M/Pl4hynqhH/vETAhK4traCHeuHV29BhV5z5OKZ8JYEF4yXLJ7n4RfH/ZZwL6yph+w+oQwQ8L11iIjuKFmxl4Wmfjfi+mi5Dmf6Ih7XBvpMzzeXWU79QLecJF/3+jljpeBy8zTXGmYWnGZaXTVSHomUGpMj5WxgKXsa7Ek89TJEdS3G0eCvTAz9VGHRWX5/Cc/EaRflh8JYek1t2x4637mKoiX8cDQ9iV2gZDHnHW8q3uhY7cIxmSVefljtsC05dsHWSDYH9DmoKwl94U6RhiWDQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MN2PR12MB4287.namprd12.prod.outlook.com (2603:10b6:208:1dd::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.15; Fri, 27 Feb 2026 12:32:51 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9654.007; Fri, 27 Feb 2026 12:32:51 +0000 From: Eliot Courtney Date: Fri, 27 Feb 2026 21:32:07 +0900 Subject: [PATCH 2/9] gpu: nova-core: gsp: add NvStatus enum for RM control errors Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260227-rmcontrol-v1-2-86648e4869f9@nvidia.com> References: <20260227-rmcontrol-v1-0-86648e4869f9@nvidia.com> In-Reply-To: <20260227-rmcontrol-v1-0-86648e4869f9@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter Cc: rust-for-linux@vger.kernel.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY4P301CA0003.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:26f::14) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) 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: BL0PR12MB2353:EE_|MN2PR12MB4287:EE_ X-MS-Office365-Filtering-Correlation-Id: 601831b8-93c6-409b-8f5e-08de75fc52c1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|1800799024|376014|10070799003; X-Microsoft-Antispam-Message-Info: yuX68+F2yi8BJ49qzXChTM0Oe8kYNujTr6uqXTsrIFar6jhTs4BFW9MfFJmlc1C8PDQa5s7xBL1d2tRrnRljSpYDUJcldFC8jOCaO0zsGxvIbNN3vAbXOnwQiig+LQiKOHM3aVDBb3IFIoZ+0z4dTT4GP7nT5Wtbyfh75C59oN067pVScihh/z9I+hOVpFRp/XWUPHti721Q2MdB2Rx79yqUiohjBxTzPmMyIZvYrXtgwVYLmWj9z5oMXmAA89qR5oaT5FTmxyf8GvuUwoybqc42uJQYLCWP1MOLB7xKNuZE3YyTAB0BLoN4bf1LspZgvm1R/rnITIgmkLldUc4IXjn3TLhiMJDwrMiuEMjTKEtMkKxcZaLACODF/oRwJRh05uTS65AJg+p3sWVc7A+lI7RP4YDwO5Hs1DsdfGP3GLIPM7UoKrb1oCkRuckpwQsX5mGeL8+BewEDBY+/uRgtgl8DDs84mDt9xwimPElbieBS5cnwREeV/rcgoVgvtWddDgOb6pzdp+seu5gEh9PXLwE4t8cO5aCx3rxGpf1jN3S52jBO4oydooKP/G+Lv6kpakb+b/6t5PhVYa2V471Gj/s7/6CzrFmMB0ouCS32kXUghm5qCANNa4V33ya7mFfBGP7sxA3iy1f7kX2qwrk3494tIcAB05yzlq+AylTrTOl6IORS36IWSAAnjVshXMHBaNxoTeLxfuhMedcGsJQtyU3E0rj23u2hnrQZGc8PDH0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(1800799024)(376014)(10070799003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TEpSVVAwWFVob0toMGo3RkdoTTVwZjNGdGpFWWEyaWxSeUNKQ0VURld1a1NP?= =?utf-8?B?bG83d3VVS3IyZUdzeTJRN2dsWm9rOExqNW9aNlNqaDJCc3ZkS3R5SWwzRDhV?= =?utf-8?B?cFlLMi9BMGxHekR1WjFtSVBrYTNLV0RBTTVodFd4alVhSGFEVkVFRldhMjJx?= =?utf-8?B?YVp2bytCZ1hhSlEzb3Z0ejdaM2ZpMXFjUVhNNEx5eXpwTEV3T3dZOHgwdzRw?= =?utf-8?B?VUdFZGtBUHpkSkhRWFRRc0hlYUdlaXh5L29VNDVMSGtOTGpFSWRONS9LY0ht?= =?utf-8?B?UnBXNTZpMUFuNFdMdVpvM2RWRXRybnNmY3crTndmTEQ2eDFSWEEwL253TC8y?= =?utf-8?B?NjQ1eG1ydE40UjNpaTVWRzM3UXN5TWVjc2hRYWxCeVlFMmMralJJMXVuYTBC?= =?utf-8?B?RC81Qm4yWHVuM0orcFFkSGE5Q3d2bUxmSGNmeklyRzdSTmhQSExiamRrbjhZ?= =?utf-8?B?WTQ4dGp6N3ZCdE9FZjlLTjhBSWtEa2lQb0w4WU12bzVNV3NOTEtGV0Npd29T?= =?utf-8?B?UlF3QmtCakdsTnRQVGhPUDNFWU4rR3pMQlBlT1FFeXpWMjVzTWF4NWhGb0pj?= =?utf-8?B?dlNzZFJqY1d6UlhPQk4rSmJ0R3BWYlVnNmlyQkFxcUhOWmtyNEYxaXVLa09s?= =?utf-8?B?UktXMmpyQ3lMNWd1bXQwbWhpdTVsYUhQeWtubmZJSUFXVUI0OTBjYzE5dzhq?= =?utf-8?B?b2p3eTArZmx6UThDUS9scWh5c25YRE9YL0p2Zk9ITllOQUprRDV5QWJmZ3Rw?= =?utf-8?B?S1FCK2ljaUl3cExOQ1JpVndVbVppQWlBTkwwbVZVUWNCbGw5aGtzdmxXQnNQ?= =?utf-8?B?TjBncU5JeC9GSCt3VnQ2U21Ebld6bFlPeEJTRTlickxEQmQ1bEkzNkE1OW9r?= =?utf-8?B?YUV3ek5rUXpxZTB3SVBXZkUvdmJsNTNIZnFzVVRsVTg0VWtWMFA2MVBIWkxq?= =?utf-8?B?VHB4MWtkZkpVemY2S1haNkI3TmhlcmpWdXdJdDdabVE1cmZ3bWJabm5ZUFox?= =?utf-8?B?akUyMkN5ZG0rVEtUUUQvWUJZckhTWk13OFhGT0NCYzJRa2lzU2ZaMm9ERWho?= =?utf-8?B?VkxBY1IvQ3VqWG5uVm1XWW1WT1JRTW1Vem4zZGhFa2p6K1N1c2xpSWtUSmlj?= =?utf-8?B?cUdVZFpxakxpMElOTUV1M2RnczZnQWNYYW5nZEptTXkvMWZISWJyd0VKNEZD?= =?utf-8?B?eDdXTmZrMkN3aFExQVlqYnVEVjA0TEJlU0VqOXZLNXJZZXBhczVpQWQ5ZW4r?= =?utf-8?B?RGtORWozU2RERlBheGVLV3FveWF3YSs0VDlEZHRHRWNUZG1mWHZydEFVZ0s1?= =?utf-8?B?TForZlZIcDJ4c0I0ZkpuU01qODdwSldKTm9zVmR2M09YdmZXeDlFTzhLSFFD?= =?utf-8?B?MStHK1dEZURVdjhmYVRhNWwvUUpiMEpNRXp0UFk4SnVTc0IrZkF3TXljcUtl?= =?utf-8?B?b0g4YkJGbktYVWIxRjh5S1ZTUUNBTXdtcFgrT0Z2NWRqM28wdWU2ZkNXU2l5?= =?utf-8?B?T1ZZbkhvdVNLVzV1eDRkQjFpNlVhSE9mcEhJMDVYSHBjV2hWcndQanRiMExF?= =?utf-8?B?TVZUMUZaRTVDSTlEdkxRbkRSdW9BdGFRaDMwbWQ3SWdDYjlOc3Q3d1Y2RTZr?= =?utf-8?B?cytBKy8xb3ExQko4azhZR0NHYVRSL3dJRHZOcGVnK0NpRm9oODhuSHA4QXMw?= =?utf-8?B?RFExQXYzeWNrU2VPaGw1eGdxOG93T2RDK1I3ak5ScEhocGRSNXJNV3I5b3Rj?= =?utf-8?B?bHFBOFZ6dzM3dE51bnpsQUxlWlpCYWhQWlVjZjZQQzJjRkhsN1VPTU4yYmpp?= =?utf-8?B?d0V6Qnp0OVdpSHBVN0tZdEdvNnJHZlE5NjliQy9NTHVvWlhEblRDMStHTHFj?= =?utf-8?B?U2pJZVYrWW5ycWUycGF4am50Z1VzVE9uT3NLMk5XRksvSTcxSVVSTHlyOWpY?= =?utf-8?B?VTJSMjdMbC9ROTVNZVVKVVJTU0NnVVlMeC90VTNJZXRmTzBkeVRSWGJCMjVP?= =?utf-8?B?UmpCNUtjazFtTmhsWlc5UFRqYm9TNm1rZno1Smhtc1o4aWdvOGZCRm1wa2c3?= =?utf-8?B?Ly9iQzBkRmJ4YkJuRDI5Sjk5aVRaK2JFeU9sR3hNbnYrOXROeWtSdEtweWtx?= =?utf-8?B?UlZTL2grREYyUS9FWFF3VzROcnlDcWwrbGhXQm80cHlXTGdBRzBwa0pDSW5u?= =?utf-8?B?eEVNRjhadWVQN2s5eFZTU2Q2QzAxQkR1dWF6eWpFVFp6cnRuRmpZMDluek1q?= =?utf-8?B?ZGEwTmhucGQwRzBJQUxnT1lYQ08wYzFxNmU1ZVE3STZ6a3huN3FJWWFNOEJD?= =?utf-8?B?M1NLYlF2djJSdjU0alpyZUFtRXJuTTh0OTNaSW1VZUdjSEwxMjlLK1VQQm5F?= =?utf-8?Q?j/CULSyN12Zz+wVos9Fk5mdJBp3W57Yh8p3f64NaPDl6g?= X-MS-Exchange-AntiSpam-MessageData-1: c8yZ1/2GIsU1BQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 601831b8-93c6-409b-8f5e-08de75fc52c1 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Feb 2026 12:32:51.4814 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: UzpAMpp71iumPDoZ8PdT2P6m76IzcxnuRP4eD9oiYm0eULvYJoZzF0CBGMEGHStjI5iBXQN/gyzvecBB3tHmPg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR12MB4287 Add NvStatus enum that wraps the raw NV_STATUS u32 codes returned by RM control RPCs. Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/gsp/fw.rs | 401 ++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 401 insertions(+) diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 25fca1f6db2c..c71c45462efd 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -43,6 +43,407 @@ pub(crate) const GSP_MSG_QUEUE_ELEMENT_SIZE_MAX: usize =3D num::u32_as_usize(bindings::GSP_MSG_QUEUE_ELEMENT_SIZE_MAX); =20 +/// Status code returned by GSP-RM RPCs. +#[derive(Copy, Clone, Debug, PartialEq, Eq)] +pub(crate) enum NvStatus { + Ok, + AlreadySignalled, + BrokenFb, + BufferTooSmall, + BusyRetry, + CallbackNotScheduled, + CardNotPresent, + CycleDetected, + DmaInUse, + DmaMemNotLocked, + DmaMemNotUnlocked, + DualLinkInuse, + EccError, + FabricManagerNotPresent, + FatalError, + FeatureNotEnabled, + FifoBadAccess, + FlcnError, + FreqNotSupported, + Generic, + GpuDmaNotInitialized, + GpuInDebugMode, + GpuInFullchipReset, + GpuIsLost, + GpuMemoryOnliningFailure, + GpuNotFullPower, + GpuUuidNotFound, + HotSwitch, + I2cError, + I2cSpeedTooHigh, + IllegalAction, + InUse, + InflateCompressedDataFailed, + InsertDuplicateName, + InsufficientPermissions, + InsufficientPower, + InsufficientResources, + InsufficientZbcEntry, + InvalidAccessType, + InvalidAddress, + InvalidArgument, + InvalidBase, + InvalidChannel, + InvalidClass, + InvalidClient, + InvalidCommand, + InvalidData, + InvalidDevice, + InvalidDmaSpecifier, + InvalidEvent, + InvalidFlags, + InvalidFunction, + InvalidHeap, + InvalidIndex, + InvalidIrqLevel, + InvalidLicense, + InvalidLimit, + InvalidLockState, + InvalidMethod, + InvalidObject, + InvalidObjectBuffer, + InvalidObjectHandle, + InvalidObjectNew, + InvalidObjectOld, + InvalidObjectParent, + InvalidOffset, + InvalidOperation, + InvalidOwner, + InvalidParamStruct, + InvalidParameter, + InvalidPath, + InvalidPointer, + InvalidRead, + InvalidRegistryKey, + InvalidRequest, + InvalidState, + InvalidStringLength, + InvalidWrite, + InvalidXlate, + IrqEdgeTriggered, + IrqNotFiring, + KeyRotationInProgress, + LibRmVersionMismatch, + MaxSessionLimitReached, + MemoryError, + MemoryTrainingFailed, + MismatchedSlave, + MismatchedTarget, + MissingTableEntry, + ModuleLoadFailed, + MoreDataAvailable, + MoreProcessingRequired, + MultipleMemoryTypes, + NoFreeFifos, + NoIntrPending, + NoMemory, + NoSuchDomain, + NoValidPath, + NotCompatible, + NotReady, + NotSupported, + NvlinkClockError, + NvlinkConfigurationError, + NvlinkFabricFailure, + NvlinkFabricNotReady, + NvlinkInitError, + NvlinkMinionError, + NvlinkTrainingError, + ObjectNotFound, + ObjectTypeMismatch, + OperatingSystem, + OtherDeviceFound, + OutOfRange, + OverlappingUvmCommit, + PageTableNotAvail, + PidNotFound, + PmuNotReady, + PrivSecViolation, + ProtectionFault, + QueueTaskSlotNotAvailable, + RcError, + ReductionManagerNotAvailable, + RejectedVbios, + ResetRequired, + ResourceLost, + ResourceRetirementError, + RiscvError, + SecureBootFailed, + SignalPending, + StateInUse, + TestOnlyCodeNotEnabled, + Timeout, + TimeoutRetry, + TooManyPrimaries, + UvmAddressInUse, + Unknown(u32), +} + +impl From for Result { + fn from(status: NvStatus) -> Self { + match status { + NvStatus::Ok =3D> Ok(()), + + NvStatus::BufferTooSmall | NvStatus::MoreDataAvailable =3D> Er= r(EMSGSIZE), + + NvStatus::BusyRetry + | NvStatus::DmaInUse + | NvStatus::DualLinkInuse + | NvStatus::GpuInFullchipReset + | NvStatus::InUse + | NvStatus::KeyRotationInProgress + | NvStatus::NotReady + | NvStatus::NvlinkFabricNotReady + | NvStatus::PmuNotReady + | NvStatus::StateInUse + | NvStatus::UvmAddressInUse =3D> Err(EBUSY), + + NvStatus::CardNotPresent + | NvStatus::FabricManagerNotPresent + | NvStatus::InvalidDevice + | NvStatus::ReductionManagerNotAvailable =3D> Err(ENODEV), + + NvStatus::FeatureNotEnabled + | NvStatus::FreqNotSupported + | NvStatus::NotSupported + | NvStatus::TestOnlyCodeNotEnabled =3D> Err(ENOTSUPP), + + NvStatus::GpuUuidNotFound + | NvStatus::MissingTableEntry + | NvStatus::NoSuchDomain + | NvStatus::NoValidPath + | NvStatus::ObjectNotFound =3D> Err(ENOENT), + + NvStatus::I2cSpeedTooHigh + | NvStatus::InvalidAccessType + | NvStatus::InvalidArgument + | NvStatus::InvalidBase + | NvStatus::InvalidChannel + | NvStatus::InvalidClass + | NvStatus::InvalidClient + | NvStatus::InvalidCommand + | NvStatus::InvalidData + | NvStatus::InvalidDmaSpecifier + | NvStatus::InvalidEvent + | NvStatus::InvalidFlags + | NvStatus::InvalidFunction + | NvStatus::InvalidHeap + | NvStatus::InvalidIndex + | NvStatus::InvalidIrqLevel + | NvStatus::InvalidLimit + | NvStatus::InvalidLockState + | NvStatus::InvalidMethod + | NvStatus::InvalidObject + | NvStatus::InvalidObjectBuffer + | NvStatus::InvalidObjectHandle + | NvStatus::InvalidObjectNew + | NvStatus::InvalidObjectOld + | NvStatus::InvalidObjectParent + | NvStatus::InvalidOffset + | NvStatus::InvalidOperation + | NvStatus::InvalidOwner + | NvStatus::InvalidParamStruct + | NvStatus::InvalidParameter + | NvStatus::InvalidPath + | NvStatus::InvalidRegistryKey + | NvStatus::InvalidRequest + | NvStatus::InvalidState + | NvStatus::InvalidStringLength + | NvStatus::InvalidXlate + | NvStatus::LibRmVersionMismatch + | NvStatus::MismatchedSlave + | NvStatus::MismatchedTarget + | NvStatus::MultipleMemoryTypes + | NvStatus::NotCompatible + | NvStatus::ObjectTypeMismatch + | NvStatus::OverlappingUvmCommit + | NvStatus::RejectedVbios =3D> Err(EINVAL), + + NvStatus::IllegalAction =3D> Err(EPERM), + + NvStatus::InsertDuplicateName =3D> Err(EEXIST), + + NvStatus::InsufficientPermissions + | NvStatus::InvalidLicense + | NvStatus::PrivSecViolation =3D> Err(EACCES), + + NvStatus::InsufficientResources | NvStatus::NoMemory | NvStatu= s::PageTableNotAvail =3D> { + Err(ENOMEM) + } + + NvStatus::InsufficientZbcEntry + | NvStatus::MaxSessionLimitReached + | NvStatus::NoFreeFifos + | NvStatus::QueueTaskSlotNotAvailable + | NvStatus::TooManyPrimaries =3D> Err(ENOSPC), + + NvStatus::InvalidAddress | NvStatus::InvalidPointer | NvStatus= ::ProtectionFault =3D> { + Err(EFAULT) + } + + NvStatus::MoreProcessingRequired | NvStatus::TimeoutRetry =3D>= Err(EAGAIN), + + NvStatus::OutOfRange =3D> Err(ERANGE), + + NvStatus::PidNotFound =3D> Err(ESRCH), + + NvStatus::SignalPending =3D> Err(EINTR), + + NvStatus::Timeout =3D> Err(ETIMEDOUT), + + _ =3D> Err(EIO), + } + } +} + +impl From for NvStatus { + fn from(value: u32) -> Self { + match value { + bindings::NV_OK =3D> Self::Ok, + bindings::NV_ERR_ALREADY_SIGNALLED =3D> Self::AlreadySignalled, + bindings::NV_ERR_BROKEN_FB =3D> Self::BrokenFb, + bindings::NV_ERR_BUFFER_TOO_SMALL =3D> Self::BufferTooSmall, + bindings::NV_ERR_BUSY_RETRY =3D> Self::BusyRetry, + bindings::NV_ERR_CALLBACK_NOT_SCHEDULED =3D> Self::CallbackNot= Scheduled, + bindings::NV_ERR_CARD_NOT_PRESENT =3D> Self::CardNotPresent, + bindings::NV_ERR_CYCLE_DETECTED =3D> Self::CycleDetected, + bindings::NV_ERR_DMA_IN_USE =3D> Self::DmaInUse, + bindings::NV_ERR_DMA_MEM_NOT_LOCKED =3D> Self::DmaMemNotLocked, + bindings::NV_ERR_DMA_MEM_NOT_UNLOCKED =3D> Self::DmaMemNotUnlo= cked, + bindings::NV_ERR_DUAL_LINK_INUSE =3D> Self::DualLinkInuse, + bindings::NV_ERR_ECC_ERROR =3D> Self::EccError, + bindings::NV_ERR_FABRIC_MANAGER_NOT_PRESENT =3D> Self::FabricM= anagerNotPresent, + bindings::NV_ERR_FATAL_ERROR =3D> Self::FatalError, + bindings::NV_ERR_FEATURE_NOT_ENABLED =3D> Self::FeatureNotEnab= led, + bindings::NV_ERR_FIFO_BAD_ACCESS =3D> Self::FifoBadAccess, + bindings::NV_ERR_FLCN_ERROR =3D> Self::FlcnError, + bindings::NV_ERR_FREQ_NOT_SUPPORTED =3D> Self::FreqNotSupporte= d, + bindings::NV_ERR_GENERIC =3D> Self::Generic, + bindings::NV_ERR_GPU_DMA_NOT_INITIALIZED =3D> Self::GpuDmaNotI= nitialized, + bindings::NV_ERR_GPU_IN_DEBUG_MODE =3D> Self::GpuInDebugMode, + bindings::NV_ERR_GPU_IN_FULLCHIP_RESET =3D> Self::GpuInFullchi= pReset, + bindings::NV_ERR_GPU_IS_LOST =3D> Self::GpuIsLost, + bindings::NV_ERR_GPU_MEMORY_ONLINING_FAILURE =3D> Self::GpuMem= oryOnliningFailure, + bindings::NV_ERR_GPU_NOT_FULL_POWER =3D> Self::GpuNotFullPower, + bindings::NV_ERR_GPU_UUID_NOT_FOUND =3D> Self::GpuUuidNotFound, + bindings::NV_ERR_HOT_SWITCH =3D> Self::HotSwitch, + bindings::NV_ERR_I2C_ERROR =3D> Self::I2cError, + bindings::NV_ERR_I2C_SPEED_TOO_HIGH =3D> Self::I2cSpeedTooHigh, + bindings::NV_ERR_ILLEGAL_ACTION =3D> Self::IllegalAction, + bindings::NV_ERR_IN_USE =3D> Self::InUse, + bindings::NV_ERR_INFLATE_COMPRESSED_DATA_FAILED =3D> Self::Inf= lateCompressedDataFailed, + bindings::NV_ERR_INSERT_DUPLICATE_NAME =3D> Self::InsertDuplic= ateName, + bindings::NV_ERR_INSUFFICIENT_PERMISSIONS =3D> Self::Insuffici= entPermissions, + bindings::NV_ERR_INSUFFICIENT_POWER =3D> Self::InsufficientPow= er, + bindings::NV_ERR_INSUFFICIENT_RESOURCES =3D> Self::Insufficien= tResources, + bindings::NV_ERR_INSUFFICIENT_ZBC_ENTRY =3D> Self::Insufficien= tZbcEntry, + bindings::NV_ERR_INVALID_ACCESS_TYPE =3D> Self::InvalidAccessT= ype, + bindings::NV_ERR_INVALID_ADDRESS =3D> Self::InvalidAddress, + bindings::NV_ERR_INVALID_ARGUMENT =3D> Self::InvalidArgument, + bindings::NV_ERR_INVALID_BASE =3D> Self::InvalidBase, + bindings::NV_ERR_INVALID_CHANNEL =3D> Self::InvalidChannel, + bindings::NV_ERR_INVALID_CLASS =3D> Self::InvalidClass, + bindings::NV_ERR_INVALID_CLIENT =3D> Self::InvalidClient, + bindings::NV_ERR_INVALID_COMMAND =3D> Self::InvalidCommand, + bindings::NV_ERR_INVALID_DATA =3D> Self::InvalidData, + bindings::NV_ERR_INVALID_DEVICE =3D> Self::InvalidDevice, + bindings::NV_ERR_INVALID_DMA_SPECIFIER =3D> Self::InvalidDmaSp= ecifier, + bindings::NV_ERR_INVALID_EVENT =3D> Self::InvalidEvent, + bindings::NV_ERR_INVALID_FLAGS =3D> Self::InvalidFlags, + bindings::NV_ERR_INVALID_FUNCTION =3D> Self::InvalidFunction, + bindings::NV_ERR_INVALID_HEAP =3D> Self::InvalidHeap, + bindings::NV_ERR_INVALID_INDEX =3D> Self::InvalidIndex, + bindings::NV_ERR_INVALID_IRQ_LEVEL =3D> Self::InvalidIrqLevel, + bindings::NV_ERR_INVALID_LICENSE =3D> Self::InvalidLicense, + bindings::NV_ERR_INVALID_LIMIT =3D> Self::InvalidLimit, + bindings::NV_ERR_INVALID_LOCK_STATE =3D> Self::InvalidLockStat= e, + bindings::NV_ERR_INVALID_METHOD =3D> Self::InvalidMethod, + bindings::NV_ERR_INVALID_OBJECT =3D> Self::InvalidObject, + bindings::NV_ERR_INVALID_OBJECT_BUFFER =3D> Self::InvalidObjec= tBuffer, + bindings::NV_ERR_INVALID_OBJECT_HANDLE =3D> Self::InvalidObjec= tHandle, + bindings::NV_ERR_INVALID_OBJECT_NEW =3D> Self::InvalidObjectNe= w, + bindings::NV_ERR_INVALID_OBJECT_OLD =3D> Self::InvalidObjectOl= d, + bindings::NV_ERR_INVALID_OBJECT_PARENT =3D> Self::InvalidObjec= tParent, + bindings::NV_ERR_INVALID_OFFSET =3D> Self::InvalidOffset, + bindings::NV_ERR_INVALID_OPERATION =3D> Self::InvalidOperation, + bindings::NV_ERR_INVALID_OWNER =3D> Self::InvalidOwner, + bindings::NV_ERR_INVALID_PARAM_STRUCT =3D> Self::InvalidParamS= truct, + bindings::NV_ERR_INVALID_PARAMETER =3D> Self::InvalidParameter, + bindings::NV_ERR_INVALID_PATH =3D> Self::InvalidPath, + bindings::NV_ERR_INVALID_POINTER =3D> Self::InvalidPointer, + bindings::NV_ERR_INVALID_READ =3D> Self::InvalidRead, + bindings::NV_ERR_INVALID_REGISTRY_KEY =3D> Self::InvalidRegist= ryKey, + bindings::NV_ERR_INVALID_REQUEST =3D> Self::InvalidRequest, + bindings::NV_ERR_INVALID_STATE =3D> Self::InvalidState, + bindings::NV_ERR_INVALID_STRING_LENGTH =3D> Self::InvalidStrin= gLength, + bindings::NV_ERR_INVALID_WRITE =3D> Self::InvalidWrite, + bindings::NV_ERR_INVALID_XLATE =3D> Self::InvalidXlate, + bindings::NV_ERR_IRQ_EDGE_TRIGGERED =3D> Self::IrqEdgeTriggere= d, + bindings::NV_ERR_IRQ_NOT_FIRING =3D> Self::IrqNotFiring, + bindings::NV_ERR_KEY_ROTATION_IN_PROGRESS =3D> Self::KeyRotati= onInProgress, + bindings::NV_ERR_LIB_RM_VERSION_MISMATCH =3D> Self::LibRmVersi= onMismatch, + bindings::NV_ERR_MAX_SESSION_LIMIT_REACHED =3D> Self::MaxSessi= onLimitReached, + bindings::NV_ERR_MEMORY_ERROR =3D> Self::MemoryError, + bindings::NV_ERR_MEMORY_TRAINING_FAILED =3D> Self::MemoryTrain= ingFailed, + bindings::NV_ERR_MISMATCHED_SLAVE =3D> Self::MismatchedSlave, + bindings::NV_ERR_MISMATCHED_TARGET =3D> Self::MismatchedTarget, + bindings::NV_ERR_MISSING_TABLE_ENTRY =3D> Self::MissingTableEn= try, + bindings::NV_ERR_MODULE_LOAD_FAILED =3D> Self::ModuleLoadFaile= d, + bindings::NV_ERR_MORE_DATA_AVAILABLE =3D> Self::MoreDataAvaila= ble, + bindings::NV_ERR_MORE_PROCESSING_REQUIRED =3D> Self::MoreProce= ssingRequired, + bindings::NV_ERR_MULTIPLE_MEMORY_TYPES =3D> Self::MultipleMemo= ryTypes, + bindings::NV_ERR_NO_FREE_FIFOS =3D> Self::NoFreeFifos, + bindings::NV_ERR_NO_INTR_PENDING =3D> Self::NoIntrPending, + bindings::NV_ERR_NO_MEMORY =3D> Self::NoMemory, + bindings::NV_ERR_NO_SUCH_DOMAIN =3D> Self::NoSuchDomain, + bindings::NV_ERR_NO_VALID_PATH =3D> Self::NoValidPath, + bindings::NV_ERR_NOT_COMPATIBLE =3D> Self::NotCompatible, + bindings::NV_ERR_NOT_READY =3D> Self::NotReady, + bindings::NV_ERR_NOT_SUPPORTED =3D> Self::NotSupported, + bindings::NV_ERR_NVLINK_CLOCK_ERROR =3D> Self::NvlinkClockErro= r, + bindings::NV_ERR_NVLINK_CONFIGURATION_ERROR =3D> Self::NvlinkC= onfigurationError, + bindings::NV_ERR_NVLINK_FABRIC_FAILURE =3D> Self::NvlinkFabric= Failure, + bindings::NV_ERR_NVLINK_FABRIC_NOT_READY =3D> Self::NvlinkFabr= icNotReady, + bindings::NV_ERR_NVLINK_INIT_ERROR =3D> Self::NvlinkInitError, + bindings::NV_ERR_NVLINK_MINION_ERROR =3D> Self::NvlinkMinionEr= ror, + bindings::NV_ERR_NVLINK_TRAINING_ERROR =3D> Self::NvlinkTraini= ngError, + bindings::NV_ERR_OBJECT_NOT_FOUND =3D> Self::ObjectNotFound, + bindings::NV_ERR_OBJECT_TYPE_MISMATCH =3D> Self::ObjectTypeMis= match, + bindings::NV_ERR_OPERATING_SYSTEM =3D> Self::OperatingSystem, + bindings::NV_ERR_OTHER_DEVICE_FOUND =3D> Self::OtherDeviceFoun= d, + bindings::NV_ERR_OUT_OF_RANGE =3D> Self::OutOfRange, + bindings::NV_ERR_OVERLAPPING_UVM_COMMIT =3D> Self::Overlapping= UvmCommit, + bindings::NV_ERR_PAGE_TABLE_NOT_AVAIL =3D> Self::PageTableNotA= vail, + bindings::NV_ERR_PID_NOT_FOUND =3D> Self::PidNotFound, + bindings::NV_ERR_PMU_NOT_READY =3D> Self::PmuNotReady, + bindings::NV_ERR_PRIV_SEC_VIOLATION =3D> Self::PrivSecViolatio= n, + bindings::NV_ERR_PROTECTION_FAULT =3D> Self::ProtectionFault, + bindings::NV_ERR_QUEUE_TASK_SLOT_NOT_AVAILABLE =3D> Self::Queu= eTaskSlotNotAvailable, + bindings::NV_ERR_RC_ERROR =3D> Self::RcError, + bindings::NV_ERR_REDUCTION_MANAGER_NOT_AVAILABLE =3D> Self::Re= ductionManagerNotAvailable, + bindings::NV_ERR_REJECTED_VBIOS =3D> Self::RejectedVbios, + bindings::NV_ERR_RESET_REQUIRED =3D> Self::ResetRequired, + bindings::NV_ERR_RESOURCE_LOST =3D> Self::ResourceLost, + bindings::NV_ERR_RESOURCE_RETIREMENT_ERROR =3D> Self::Resource= RetirementError, + bindings::NV_ERR_RISCV_ERROR =3D> Self::RiscvError, + bindings::NV_ERR_SECURE_BOOT_FAILED =3D> Self::SecureBootFaile= d, + bindings::NV_ERR_SIGNAL_PENDING =3D> Self::SignalPending, + bindings::NV_ERR_STATE_IN_USE =3D> Self::StateInUse, + bindings::NV_ERR_TEST_ONLY_CODE_NOT_ENABLED =3D> Self::TestOnl= yCodeNotEnabled, + bindings::NV_ERR_TIMEOUT =3D> Self::Timeout, + bindings::NV_ERR_TIMEOUT_RETRY =3D> Self::TimeoutRetry, + bindings::NV_ERR_TOO_MANY_PRIMARIES =3D> Self::TooManyPrimarie= s, + bindings::NV_ERR_UVM_ADDRESS_IN_USE =3D> Self::UvmAddressInUse, + other =3D> Self::Unknown(other), + } + } +} + /// Empty type to group methods related to heap parameters for running the= GSP firmware. enum GspFwHeapParams {} =20 --=20 2.53.0