summaryrefslogtreecommitdiffstats
path: root/userspace/sdks/nv570/inc/ctrl/ctrl0000
diff options
context:
space:
mode:
authorArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-13 18:36:21 -0400
committerArthur Hanson Rasmusson <arthur@vgpu.io>2026-09-13 18:36:21 -0400
commit00e54c13c7c9030c4d5f7151467f2d85a3730e29 (patch)
tree17a45239df8d2e4912ff3697ed06e85a10b969de /userspace/sdks/nv570/inc/ctrl/ctrl0000
downloadopen-iov-00e54c13c7c9030c4d5f7151467f2d85a3730e29.tar.gz
open-iov-00e54c13c7c9030c4d5f7151467f2d85a3730e29.zip
Initial commit: Open-IOV vGPU-IO complete stack
- Firmware decompilation: GSP 570.144W (28.5MB ELF, RV64IMAC), 132 decompiled C files - Kernel modules: nvidia.ko (34MB, OpenRM), open-iov-vfio.ko (2.8MB, VFIO mdev), gsp-vgpu.ko (1.8MB, guest driver) - Userspace: libiov.so/libvgpu.so (76KB), example_vgpu (28KB), rpc_emulator.c - PCI config space emulation (256B with PM, MSI, MSI-X, PCIe caps) - 12 RPC types fully mapped from firmware decompilation - BAR trap, WPR, scheduling, notification, migration emulation - Helper scripts: load_vgpu_stack, create_mdev, launch_qemu_vgpu, test_vgpu_stack, setup_guest_driver, unload_vgpu_stack - Architecture documentation - Wiki: 10 technical documents - Git LFS for large binaries (.ko, .bin, .iso, .img, .o, ghidra repos) - nvidia-open-gpu-kernel-modules as submodule
Diffstat (limited to 'userspace/sdks/nv570/inc/ctrl/ctrl0000')
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000base.h68
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000client.h208
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000diag.h324
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000event.h145
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gpu.h1122
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gpuacct.h319
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gsync.h101
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000nvd.h637
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000proc.h98
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000syncgpuboost.h112
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000system.h3239
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000unix.h468
-rw-r--r--userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000vgpu.h224
13 files changed, 7065 insertions, 0 deletions
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000base.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000base.h
new file mode 100644
index 0000000..6f49405
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000base.h
@@ -0,0 +1,68 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2005-2015 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000base.finn
+//
+
+#include "ctrl/ctrlxxxx.h"
+/* NV01_ROOT (client) control commands and parameters */
+
+#define NV0000_CTRL_CMD(cat,idx) NVXXXX_CTRL_CMD(0x0000,NV0000_CTRL_##cat,idx)
+
+/* Client command categories (6bits) */
+#define NV0000_CTRL_RESERVED (0x00)
+#define NV0000_CTRL_SYSTEM (0x01)
+#define NV0000_CTRL_GPU (0x02)
+#define NV0000_CTRL_GSYNC (0x03)
+#define NV0000_CTRL_DIAG (0x04)
+#define NV0000_CTRL_EVENT (0x05)
+#define NV0000_CTRL_NVD (0x06)
+#define NV0000_CTRL_SWINSTR (0x07)
+#define NV0000_CTRL_PROC (0x09)
+#define NV0000_CTRL_SYNC_GPU_BOOST (0x0A)
+#define NV0000_CTRL_GPUACCT (0x0B)
+#define NV0000_CTRL_VGPU (0x0C)
+#define NV0000_CTRL_CLIENT (0x0D)
+
+// per-OS categories start at highest category and work backwards
+#define NV0000_CTRL_OS_WINDOWS (0x3F)
+#define NV0000_CTRL_OS_MACOS (0x3E)
+#define NV0000_CTRL_OS_UNIX (0x3D)
+
+
+/*
+ * NV0000_CTRL_CMD_NULL
+ *
+ * This command does nothing.
+ * This command does not take any parameters.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ */
+#define NV0000_CTRL_CMD_NULL (0x0) /* finn: Evaluated from "(FINN_NV01_ROOT_RESERVED_INTERFACE_ID << 8) | 0x0" */
+
+/* _ctrl0000_base_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000client.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000client.h
new file mode 100644
index 0000000..163d26a
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000client.h
@@ -0,0 +1,208 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2006-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000client.finn
+//
+
+#include "ctrl/ctrl0000/ctrl0000base.h"
+
+#include "ctrl/ctrlxxxx.h"
+#include "class/cl0000.h"
+#include "rs_access.h"
+
+/*
+ * NV0000_CTRL_CMD_CLIENT_GET_ADDR_SPACE_TYPE
+ *
+ * This command may be used to query memory address space type associated with an object
+ *
+ * Parameters:
+ * hObject[IN]
+ * handle of the object to look up
+ * addrSpaceType[OUT]
+ * addrSpaceType with associated memory descriptor
+ *
+ * Possible status values are:
+ * NV_OK
+ * NV_ERR_INVALID_OBJECT_HANDLE
+ * NV_ERR_INVALID_OBJECT
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_NOT_SUPPORTED
+ */
+#define NV0000_CTRL_CMD_CLIENT_GET_ADDR_SPACE_TYPE (0xd01) /* finn: Evaluated from "(FINN_NV01_ROOT_CLIENT_INTERFACE_ID << 8) | NV0000_CTRL_CLIENT_GET_ADDR_SPACE_TYPE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CLIENT_GET_ADDR_SPACE_TYPE_PARAMS_MESSAGE_ID (0x1U)
+
+typedef struct NV0000_CTRL_CLIENT_GET_ADDR_SPACE_TYPE_PARAMS {
+ NvHandle hObject; /* [in] - Handle of object to look up */
+ NvU32 mapFlags; /* [in] - Flags that will be used when mapping the object */
+ NvU32 addrSpaceType; /* [out] - Memory Address Space Type */
+} NV0000_CTRL_CLIENT_GET_ADDR_SPACE_TYPE_PARAMS;
+
+#define NV0000_CTRL_CMD_CLIENT_GET_ADDR_SPACE_TYPE_INVALID 0x00000000
+#define NV0000_CTRL_CMD_CLIENT_GET_ADDR_SPACE_TYPE_SYSMEM 0x00000001
+#define NV0000_CTRL_CMD_CLIENT_GET_ADDR_SPACE_TYPE_VIDMEM 0x00000002
+#define NV0000_CTRL_CMD_CLIENT_GET_ADDR_SPACE_TYPE_REGMEM 0x00000003
+#define NV0000_CTRL_CMD_CLIENT_GET_ADDR_SPACE_TYPE_FABRIC 0x00000004
+#define NV0000_CTRL_CMD_CLIENT_GET_ADDR_SPACE_TYPE_FABRIC_MC 0x00000005
+
+/*
+ * NV0000_CTRL_CMD_CLIENT_GET_HANDLE_INFO
+ *
+ * This command may be used to query information on a handle
+ */
+#define NV0000_CTRL_CMD_CLIENT_GET_HANDLE_INFO (0xd02) /* finn: Evaluated from "(FINN_NV01_ROOT_CLIENT_INTERFACE_ID << 8) | NV0000_CTRL_CLIENT_GET_HANDLE_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CLIENT_GET_HANDLE_INFO_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV0000_CTRL_CLIENT_GET_HANDLE_INFO_PARAMS {
+ NvHandle hObject; /* [in] - Handle of object to look up */
+ NvU32 index; /* [in] - Type of lookup */
+
+ union {
+ NvHandle hResult; /* [out] - Result of lookup when result is a handle type */
+ NV_DECLARE_ALIGNED(NvU64 iResult, 8); /* [out] - Result of lookup when result is a integer */
+ } data;
+} NV0000_CTRL_CLIENT_GET_HANDLE_INFO_PARAMS;
+
+#define NV0000_CTRL_CMD_CLIENT_GET_HANDLE_INFO_INDEX_INVALID 0x00000000
+#define NV0000_CTRL_CMD_CLIENT_GET_HANDLE_INFO_INDEX_PARENT 0x00000001
+#define NV0000_CTRL_CMD_CLIENT_GET_HANDLE_INFO_INDEX_CLASSID 0x00000002
+
+/*
+ * NV0000_CTRL_CMD_CLIENT_GET_ACCESS_RIGHTS
+ *
+ * This command may be used to get this client's access rights for an object
+ * The object to which access rights are checked does not have to be owned by
+ * the client calling the command, it is owned by the hClient parameter
+ */
+#define NV0000_CTRL_CMD_CLIENT_GET_ACCESS_RIGHTS (0xd03) /* finn: Evaluated from "(FINN_NV01_ROOT_CLIENT_INTERFACE_ID << 8) | NV0000_CTRL_CLIENT_GET_ACCESS_RIGHTS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CLIENT_GET_ACCESS_RIGHTS_PARAMS_MESSAGE_ID (0x3U)
+
+typedef struct NV0000_CTRL_CLIENT_GET_ACCESS_RIGHTS_PARAMS {
+ NvHandle hObject; /* [in] - Handle of object to look up */
+ NvHandle hClient; /* [in] - Handle of client which owns hObject */
+ RS_ACCESS_MASK maskResult; /* [out] - Result of lookup */
+} NV0000_CTRL_CLIENT_GET_ACCESS_RIGHTS_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_CLIENT_SET_INHERITED_SHARE_POLICY
+ *
+ * DEPRECATED: Calls NV0000_CTRL_CMD_CLIENT_SHARE_OBJECT with hObject=hClient
+ *
+ * This command will modify a client's inherited share policy list
+ * The policy is applied in the same way that NvRmShare applies policies,
+ * except to the client's inherited policy list instead of an object's policy list
+ */
+#define NV0000_CTRL_CMD_CLIENT_SET_INHERITED_SHARE_POLICY (0xd04) /* finn: Evaluated from "(FINN_NV01_ROOT_CLIENT_INTERFACE_ID << 8) | NV0000_CTRL_CLIENT_SET_INHERITED_SHARE_POLICY_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CLIENT_SET_INHERITED_SHARE_POLICY_PARAMS_MESSAGE_ID (0x4U)
+
+typedef struct NV0000_CTRL_CLIENT_SET_INHERITED_SHARE_POLICY_PARAMS {
+ RS_SHARE_POLICY sharePolicy; /* [in] - Share Policy to apply */
+} NV0000_CTRL_CLIENT_SET_INHERITED_SHARE_POLICY_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_CLIENT_GET_CHILD_HANDLE
+ *
+ * This command may be used to get a handle of a child of a given type
+ */
+#define NV0000_CTRL_CMD_CLIENT_GET_CHILD_HANDLE (0xd05) /* finn: Evaluated from "(FINN_NV01_ROOT_CLIENT_INTERFACE_ID << 8) | NV0000_CTRL_CMD_CLIENT_GET_CHILD_HANDLE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CMD_CLIENT_GET_CHILD_HANDLE_PARAMS_MESSAGE_ID (0x5U)
+
+typedef struct NV0000_CTRL_CMD_CLIENT_GET_CHILD_HANDLE_PARAMS {
+ NvHandle hParent; /* [in] - Handle of parent object */
+ NvU32 classId; /* [in] - Class ID of the child object */
+ NvHandle hObject; /* [out] - Handle of the child object (0 if not found) */
+} NV0000_CTRL_CMD_CLIENT_GET_CHILD_HANDLE_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_CLIENT_SHARE_OBJECT
+ *
+ * This command is meant to imitate the NvRmShare API.
+ * Applies a share policy to an object, which should be owned by the caller's client.
+ * The policy is applied in the same way that NvRmShare applies policies.
+ *
+ * This ctrl command is only meant to be used in older branches. For releases after R450,
+ * use NvRmShare directly instead.
+ */
+#define NV0000_CTRL_CMD_CLIENT_SHARE_OBJECT (0xd06) /* finn: Evaluated from "(FINN_NV01_ROOT_CLIENT_INTERFACE_ID << 8) | NV0000_CTRL_CLIENT_SHARE_OBJECT_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CLIENT_SHARE_OBJECT_PARAMS_MESSAGE_ID (0x6U)
+
+typedef struct NV0000_CTRL_CLIENT_SHARE_OBJECT_PARAMS {
+ NvHandle hObject; /* [in] - Handle of object to share */
+ RS_SHARE_POLICY sharePolicy; /* [in] - Share Policy to apply */
+} NV0000_CTRL_CLIENT_SHARE_OBJECT_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_CLIENT_OBJECTS_ARE_DUPLICATES
+ *
+ * This command returns true if the objects are duplicates.
+ *
+ * Currently supported only for memory objects.
+ */
+#define NV0000_CTRL_CMD_CLIENT_OBJECTS_ARE_DUPLICATES (0xd07) /* finn: Evaluated from "(FINN_NV01_ROOT_CLIENT_INTERFACE_ID << 8) | NV0000_CTRL_CLIENT_OBJECTS_ARE_DUPLICATES_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CLIENT_OBJECTS_ARE_DUPLICATES_PARAMS_MESSAGE_ID (0x7U)
+
+typedef struct NV0000_CTRL_CLIENT_OBJECTS_ARE_DUPLICATES_PARAMS {
+ NvHandle hObject1; /* [in] - Handle of object to be checked */
+ NvHandle hObject2; /* [in] - Handle of object to be checked */
+ NvBool bDuplicates; /* [out] - Returns true if duplicates */
+} NV0000_CTRL_CLIENT_OBJECTS_ARE_DUPLICATES_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_CLIENT_SUBSCRIBE_TO_IMEX_CHANNEL:
+ *
+ * Subscribes to the first accessible or provided channel.
+ * Subscription is valid throughout the lifetime of a client.
+ *
+ * devDescriptor [OPAQUE IN]
+ * devDescriptor is an IMEX file descriptor for UNIX RM clients, but a void
+ * pointer for windows RM clients. It is transparent to RM clients i.e. RM's
+ * user-mode shim populates this field on behalf of clients.
+ *
+ * channel [IN/OUT]
+ * Channel number to which the client is subscribed
+ * If -1 is passed, RM picks the first accessible channel.
+ */
+#define NV0000_CTRL_CMD_CLIENT_SUBSCRIBE_TO_IMEX_CHANNEL (0xd08) /* finn: Evaluated from "(FINN_NV01_ROOT_CLIENT_INTERFACE_ID << 8) | NV0000_CTRL_CLIENT_SUBSCRIBE_TO_IMEX_CHANNEL_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CLIENT_SUBSCRIBE_TO_IMEX_CHANNEL_PARAMS_MESSAGE_ID (0x8U)
+
+typedef struct NV0000_CTRL_CLIENT_SUBSCRIBE_TO_IMEX_CHANNEL_PARAMS {
+ NV_DECLARE_ALIGNED(NvU64 devDescriptor, 8);
+ NvU32 channel;
+} NV0000_CTRL_CLIENT_SUBSCRIBE_TO_IMEX_CHANNEL_PARAMS;
+
+
+
+/* _ctrl0000client_h_ */
+
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000diag.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000diag.h
new file mode 100644
index 0000000..45f421e
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000diag.h
@@ -0,0 +1,324 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2005-2022 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000diag.finn
+//
+
+#include "ctrl/ctrl0000/ctrl0000base.h"
+
+#include "ctrl/ctrlxxxx.h"
+/* NV01_ROOT (client) system control commands and parameters */
+
+/*
+ * NV0000_CTRL_CMD_DIAG_GET_LOCK_METER_STATE
+ *
+ * This command returns the current lock meter logging state.
+ *
+ * state
+ * This parameter returns the current lock meter logging state.
+ * NV0000_CTRL_DIAG_GET_LOCK_METER_STATE_DISABLED
+ * This value indicates lock metering is disabled.
+ * NV0000_CTRL_DIAG_GET_LOCK_METER_STATE_ENABLED
+ * This value indicates lock metering is enabled.
+ * count
+ * This parameter returns the total number of lock metering entries
+ * (NV0000_CTRL_DIAG_LOCK_METER_ENTRY) available. This value will
+ * not exceed NV0000_CTRL_DIAG_LOCK_METER_MAX_ENTRIES. When lock metering
+ * is enabled this parameter will return zero.
+ * missedCount
+ * This parameter returns the number of lock metering entries that had
+ * to be discarded due to a full lock metering table. This value will
+ * not exceed NV0000_CTRL_DIAG_LOCK_METER_MAX_TABLE_ENTRIES. When lock
+ * metering is enabled this parameter will return zero.
+ * bCircularBuffer
+ * This parameter returns type of buffer.
+ * TRUE
+ * Buffer is circular
+ * FALSE
+ * Buffer is sequential
+ *
+ * Possible status values returned are:
+ * NV_OK
+ */
+#define NV0000_CTRL_CMD_DIAG_GET_LOCK_METER_STATE (0x480) /* finn: Evaluated from "(FINN_NV01_ROOT_DIAG_INTERFACE_ID << 8) | NV0000_CTRL_DIAG_GET_LOCK_METER_STATE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_DIAG_GET_LOCK_METER_STATE_PARAMS_MESSAGE_ID (0x80U)
+
+typedef struct NV0000_CTRL_DIAG_GET_LOCK_METER_STATE_PARAMS {
+ NvU32 state;
+ NvU32 count;
+ NvU32 missedCount;
+ NvBool bCircularBuffer;
+} NV0000_CTRL_DIAG_GET_LOCK_METER_STATE_PARAMS;
+
+/* valid lock metering state values */
+#define NV0000_CTRL_DIAG_GET_LOCK_METER_STATE_DISABLED (0x00000000)
+#define NV0000_CTRL_DIAG_GET_LOCK_METER_STATE_ENABLED (0x00000001)
+
+/* maximum possible number of lock metering entries stored internally */
+#define NV0000_CTRL_DIAG_LOCK_METER_MAX_TABLE_ENTRIES (0x20000)
+
+/*
+ * NV0000_CTRL_CMD_DIAG_SET_LOCK_METER_STATE
+ *
+ * This command sets the current lock meter logging state.
+ *
+ * state
+ * This parameter specifies the new state of the lock metering mechanism.
+ * Legal state values are:
+ * NV0000_CTRL_DIAG_SET_LOCK_METER_STATE_DISABLE
+ * This value disables lock metering.
+ * NV0000_CTRL_DIAG_SET_LOCK_METER_STATE_ENABLE
+ * This value enables lock metering.
+ * NV0000_CTRL_DIAG_SET_LOCK_METER_STATE_RESET
+ * This value resets, or clears, all lock metering state. Lock
+ * metering must be disabled prior to attempting a reset.
+ * bCircularBuffer
+ * This parameter specifies type of buffer.
+ * Possible values are:
+ * TRUE
+ * For circular buffer.
+ * FALSE
+ * For sequential buffer.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_STATE
+ */
+#define NV0000_CTRL_CMD_DIAG_SET_LOCK_METER_STATE (0x481) /* finn: Evaluated from "(FINN_NV01_ROOT_DIAG_INTERFACE_ID << 8) | NV0000_CTRL_DIAG_SET_LOCK_METER_STATE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_DIAG_SET_LOCK_METER_STATE_PARAMS_MESSAGE_ID (0x81U)
+
+typedef struct NV0000_CTRL_DIAG_SET_LOCK_METER_STATE_PARAMS {
+ NvU32 state;
+ NvBool bCircularBuffer;
+} NV0000_CTRL_DIAG_SET_LOCK_METER_STATE_PARAMS;
+
+/* valid lock metering state values */
+#define NV0000_CTRL_DIAG_SET_LOCK_METER_STATE_DISABLE (0x00000000)
+#define NV0000_CTRL_DIAG_SET_LOCK_METER_STATE_ENABLE (0x00000001)
+#define NV0000_CTRL_DIAG_SET_LOCK_METER_STATE_RESET (0x00000002)
+
+/*
+ * NV0000_CTRL_DIAG_LOCK_METER_ENTRY
+ *
+ * This structure represents a single lock meter entry.
+ *
+ * counter
+ * This field contains the number of nanonseconds elapsed since the
+ * the last system boot when the lock meter entry was generated.
+ * freq
+ * This field contains the CPU performance counter frequency in units
+ * of ticks per second.
+ * line
+ * This field contains the relevant line number.
+ * filename
+ * This field contains the relevant file name.
+ * tag
+ * This field contains a tag uniquely identifying the user of the metered
+ * lock operations.
+ * cpuNum
+ * This field contains the CPU number from which the metered operation
+ * was initiated.
+ * irql
+ * This field contains the IRQL at which the metered operation was
+ * initiated.
+ * data0
+ * data1
+ * data2
+ * These fields contain tag-specific data.
+ */
+#define NV0000_CTRL_DIAG_LOCK_METER_ENTRY_FILENAME_LENGTH (0xc)
+
+typedef struct NV0000_CTRL_DIAG_LOCK_METER_ENTRY {
+ NV_DECLARE_ALIGNED(NvU64 counter, 8);
+
+ NvU32 line;
+ NvU8 filename[NV0000_CTRL_DIAG_LOCK_METER_ENTRY_FILENAME_LENGTH];
+
+ NvU16 tag;
+ NvU8 cpuNum;
+ NvU8 irql;
+
+ NV_DECLARE_ALIGNED(NvU64 threadId, 8);
+
+ NvU32 data0;
+ NvU32 data1;
+ NvU32 data2;
+} NV0000_CTRL_DIAG_LOCK_METER_ENTRY;
+
+/* valid lock meter entry tag values */
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_ACQUIRE_SEMA (0x00000001)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_ACQUIRE_SEMA_FORCED (0x00000002)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_ACQUIRE_SEMA_COND (0x00000003)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_RELEASE_SEMA (0x00000004)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_ACQUIRE_API (0x00000010)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_RELEASE_API (0x00000011)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_ACQUIRE_GPUS (0x00000020)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_RELEASE_GPUS (0x00000021)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_DATA (0x00000100)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_RMCTRL (0x00001000)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_CFG_GETEX (0x00002002)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_CFG_SETEX (0x00002003)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_VIDHEAP (0x00003000)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_MAPMEM (0x00003001)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_UNMAPMEM (0x00003002)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_MAPMEM_DMA (0x00003003)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_UNMAPMEM_DMA (0x00003004)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_ALLOC (0x00004000)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_ALLOC_MEM (0x00004001)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_DUP_OBJECT (0x00004010)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_CLIENT (0x00005000)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_DEVICE (0x00005001)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_SUBDEVICE (0x00005002)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_SUBDEVICE_DIAG (0x00005003)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_DISP (0x00005004)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_DISP_CMN (0x00005005)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_CHANNEL (0x00005006)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_CHANNEL_MPEG (0x00005007)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_CHANNEL_DISP (0x00005008)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_MEMORY (0x00005009)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_FBMEM (0x0000500A)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_OBJECT (0x0000500B)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_FREE_EVENT (0x0000500C)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_IDLE_CHANNELS (0x00006000)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_BIND_CTXDMA (0x00007000)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_ALLOC_CTXDMA (0x00007001)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_ISR (0x0000F000)
+#define NV0000_CTRL_DIAG_LOCK_METER_TAG_DPC (0x0000F00F)
+
+/*
+ * NV0000_CTRL_CMD_DIAG_GET_LOCK_METER_ENTRIES
+ *
+ * This command returns lock metering data in a fixed-sized array of entries.
+ * Each request will return up NV0000_CTRL_CMD_DIAG_GET_LOCK_METER_MAX_ENTRIES
+ * entries.
+ *
+ * It is up to the caller to repeat these requests to retrieve the total number
+ * of entries reported by NV0000_CTRL_CMD_DIAG_GET_LOCK_METER_STATE.
+ *
+ * entryCount
+ * This parameter returns the total number of valid entries returned
+ * in the entries array. This value will not exceed
+ * NV0000_CTRL_DIAG_GET_LOCK_METER_ENTRIES_MAX but may be less.
+ * A value of zero indicates there are no more valid entries.
+ * entries
+ * This parameter contains the storage into which lock metering entry
+ * data is returned.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_STATE
+ */
+#define NV0000_CTRL_CMD_DIAG_GET_LOCK_METER_ENTRIES (0x485) /* finn: Evaluated from "(FINN_NV01_ROOT_DIAG_INTERFACE_ID << 8) | NV0000_CTRL_DIAG_GET_LOCK_METER_ENTRIES_PARAMS_MESSAGE_ID" */
+
+/* total number of entries returned */
+#define NV0000_CTRL_DIAG_GET_LOCK_METER_ENTRIES_MAX (0x40)
+
+#define NV0000_CTRL_DIAG_GET_LOCK_METER_ENTRIES_PARAMS_MESSAGE_ID (0x85U)
+
+typedef struct NV0000_CTRL_DIAG_GET_LOCK_METER_ENTRIES_PARAMS {
+ NvU32 entryCount;
+ NV_DECLARE_ALIGNED(NV0000_CTRL_DIAG_LOCK_METER_ENTRY entries[NV0000_CTRL_DIAG_GET_LOCK_METER_ENTRIES_MAX], 8);
+} NV0000_CTRL_DIAG_GET_LOCK_METER_ENTRIES_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_DIAG_PROFILE_RPC
+ *
+ * This command returns the RPC runtime information, and
+ * will only return valid when it is running inside VGX mode.
+ *
+ * rpcProfileCmd:
+ * RPC profiler command issued by rpc profiler utility
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV0000_CTRL_CMD_DIAG_PROFILE_RPC (0x488) /* finn: Evaluated from "(FINN_NV01_ROOT_DIAG_INTERFACE_ID << 8) | NV0000_CTRL_DIAG_PROFILE_RPC_PARAMS_MESSAGE_ID" */
+
+typedef struct RPC_METER_ENTRY {
+ NV_DECLARE_ALIGNED(NvU64 startTimeInNs, 8);
+ NV_DECLARE_ALIGNED(NvU64 endTimeInNs, 8);
+ NV_DECLARE_ALIGNED(NvU64 rpcDataTag, 8);
+ NV_DECLARE_ALIGNED(NvU64 rpcExtraData, 8);
+} RPC_METER_ENTRY;
+
+#define NV0000_CTRL_DIAG_PROFILE_RPC_PARAMS_MESSAGE_ID (0x88U)
+
+typedef struct NV0000_CTRL_DIAG_PROFILE_RPC_PARAMS {
+ NvU32 rpcProfileCmd;
+} NV0000_CTRL_DIAG_PROFILE_RPC_PARAMS;
+
+#define NV0000_CTRL_PROFILE_RPC_CMD_DISABLE (0x00000000)
+#define NV0000_CTRL_PROFILE_RPC_CMD_ENABLE (0x00000001)
+#define NV0000_CTRL_PROFILE_RPC_CMD_RESET (0x00000002)
+
+/*
+ * NV0000_CTRL_CMD_DIAG_DUMP_RPC
+ *
+ * This command returns the RPC runtime information, which
+ * will be logged by NV0000_CTRL_CMD_DIAG_PROFILE_RPC command
+ * when running inside VGX mode.
+ *
+ * When issuing this command, the RPC profiler has to be disabled.
+ *
+ * firstEntryOffset:
+ * [IN] offset for first entry.
+ *
+ * outputEntryCout:
+ * [OUT] number of entries returned in rpcProfilerBuffer.
+ *
+ * remainingEntryCount:
+ * [OUT] number of entries remaining.
+ *
+ * elapsedTimeInNs:
+ * [OUT] runtime for the RPC profiler tool.
+ *
+ * rpcProfilerBuffer:
+ * [OUT] buffer to store the RPC entries
+ */
+
+#define NV0000_CTRL_CMD_DIAG_DUMP_RPC (0x489) /* finn: Evaluated from "(FINN_NV01_ROOT_DIAG_INTERFACE_ID << 8) | NV0000_CTRL_DIAG_DUMP_RPC_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_DIAG_RPC_MAX_ENTRIES (100)
+
+#define NV0000_CTRL_DIAG_DUMP_RPC_PARAMS_MESSAGE_ID (0x89U)
+
+typedef struct NV0000_CTRL_DIAG_DUMP_RPC_PARAMS {
+ NvU32 firstEntryOffset;
+ NvU32 outputEntryCount;
+ NvU32 remainingEntryCount;
+ NV_DECLARE_ALIGNED(NvU64 elapsedTimeInNs, 8);
+ NV_DECLARE_ALIGNED(RPC_METER_ENTRY rpcProfilerBuffer[NV0000_CTRL_DIAG_RPC_MAX_ENTRIES], 8);
+} NV0000_CTRL_DIAG_DUMP_RPC_PARAMS;
+
+/* _ctrl0000diag_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000event.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000event.h
new file mode 100644
index 0000000..ded1265
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000event.h
@@ -0,0 +1,145 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2006-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000event.finn
+//
+
+#include "ctrl/ctrl0000/ctrl0000base.h"
+
+#include "ctrl/ctrlxxxx.h"
+#include "class/cl0000.h"
+
+#define NV0000_NOTIFIERS_DISPLAY_CHANGE (0)
+#define NV0000_NOTIFIERS_VGPU_UNBIND_EVENT (1)
+#define NV0000_NOTIFIERS_VGPU_BIND_EVENT (2)
+#define NV0000_NOTIFIERS_GPU_BIND_UNBIND_EVENT (3)
+#define NV0000_NOTIFIERS_MAXCOUNT (4)
+
+/*
+ * NV0000_CTRL_CMD_EVENT_SET_NOTIFICATION
+ *
+ * This command sets event notification for the system events.
+ *
+ * event
+ * This parameter specifies the type of event to which the specified
+ * action is to be applied. The valid event values can be found in
+ * cl0000.h.
+ *
+ * action
+ * This parameter specifies the desired event notification action.
+ * Valid notification actions include:
+ * NV0000_CTRL_EVENT_SET_NOTIFICATION_ACTION_DISABLE
+ * This action disables event notification for the specified
+ * event.
+ * NV0000_CTRL_EVENT_SET_NOTIFICATION_ACTION_SINGLE
+ * This action enables single-shot event notification for the
+ * specified event.
+ * NV0000_CTRL_EVENT_SET_NOTIFICATION_ACTION_REPEAT
+ * This action enables repeated event notification for the
+ * specified event.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_STATE
+ * NV_ERR_INVALID_CLIENT
+ *
+ */
+
+#define NV0000_CTRL_CMD_EVENT_SET_NOTIFICATION (0x501) /* finn: Evaluated from "(FINN_NV01_ROOT_EVENT_INTERFACE_ID << 8) | NV0000_CTRL_EVENT_SET_NOTIFICATION_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_EVENT_SET_NOTIFICATION_PARAMS_MESSAGE_ID (0x1U)
+
+typedef struct NV0000_CTRL_EVENT_SET_NOTIFICATION_PARAMS {
+ NvU32 event;
+ NvU32 action;
+} NV0000_CTRL_EVENT_SET_NOTIFICATION_PARAMS;
+
+/* valid action values */
+#define NV0000_CTRL_EVENT_SET_NOTIFICATION_ACTION_DISABLE (0x00000000)
+#define NV0000_CTRL_EVENT_SET_NOTIFICATION_ACTION_SINGLE (0x00000001)
+#define NV0000_CTRL_EVENT_SET_NOTIFICATION_ACTION_REPEAT (0x00000002)
+
+typedef struct NV0000_CTRL_SYSTEM_EVENT_DATA_DISPLAY_CHANGE {
+ NvU32 deviceMask;
+} NV0000_CTRL_SYSTEM_EVENT_DATA_DISPLAY_CHANGE;
+
+typedef struct NV0000_CTRL_SYSTEM_EVENT_DATA_VGPU_UNBIND {
+ NvU32 gpuId;
+} NV0000_CTRL_SYSTEM_EVENT_DATA_VGPU_UNBIND;
+
+typedef struct NV0000_CTRL_SYSTEM_EVENT_DATA_VGPU_BIND {
+ NvU32 gpuId;
+} NV0000_CTRL_SYSTEM_EVENT_DATA_VGPU_BIND;
+
+typedef struct NV0000_CTRL_SYSTEM_EVENT_DATA_GPU_BIND_UNBIND {
+ NvU32 gpuId;
+ NvBool bBind;
+} NV0000_CTRL_SYSTEM_EVENT_DATA_GPU_BIND_UNBIND;
+
+/*
+ * NV0000_CTRL_CMD_GET_SYSTEM_EVENT_DATA
+ *
+ * This command reads the client's event data queue info FIFO order.
+ * See the description of NV01_EVENT for details on registering events.
+ *
+ * event
+ * Output only as selective event data query is not supported yet.
+ * Event type.
+ * Valid event type values can be found in this header file.
+ *
+ * data
+ * Data associated with the event.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_CLIENT
+ * NV_ERR_OBJECT_NOT_FOUND when system event queue is empty
+ *
+ */
+
+#define NV0000_CTRL_CMD_GET_SYSTEM_EVENT_DATA (0x502) /* finn: Evaluated from "(FINN_NV01_ROOT_EVENT_INTERFACE_ID << 8) | NV0000_CTRL_GET_SYSTEM_EVENT_DATA_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GET_SYSTEM_EVENT_DATA_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV0000_CTRL_GET_SYSTEM_EVENT_DATA_PARAMS {
+ NvU32 event;
+
+ union {
+ NV0000_CTRL_SYSTEM_EVENT_DATA_DISPLAY_CHANGE display;
+ NV0000_CTRL_SYSTEM_EVENT_DATA_VGPU_UNBIND vgpuUnbind;
+ NV0000_CTRL_SYSTEM_EVENT_DATA_VGPU_BIND vgpuBind;
+ NV0000_CTRL_SYSTEM_EVENT_DATA_GPU_BIND_UNBIND gpuBindUnbind;
+ } data;
+} NV0000_CTRL_GET_SYSTEM_EVENT_DATA_PARAMS;
+
+/* _ctrl0000event_h_ */
+
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gpu.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gpu.h
new file mode 100644
index 0000000..6cbc76f
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gpu.h
@@ -0,0 +1,1122 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2005-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000gpu.finn
+//
+
+#include "ctrl/ctrl0000/ctrl0000base.h"
+#include "ctrl/ctrlxxxx.h"
+#include "ctrl/ctrl2080/ctrl2080nvlink_common.h"
+#include "nvlimits.h"
+
+/* NV01_ROOT (client) GPU control commands and parameters */
+
+typedef NV2080_CTRL_NVLINK_LINK_MASK NV0000_CTRL_NVLINK_LINK_MASK;
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_ATTACHED_IDS
+ *
+ * This command returns a table of attached gpuId values.
+ * The table is NV0000_CTRL_GPU_MAX_ATTACHED_GPUS entries in size.
+ *
+ * gpuIds[]
+ * This parameter returns the table of attached GPU IDs.
+ * The GPU ID is an opaque platform-dependent value that can be used
+ * with the NV0000_CTRL_CMD_GPU_GET_ID_INFO command to retrieve
+ * additional information about the GPU. The valid entries in gpuIds[]
+ * are contiguous, with a value of NV0000_CTRL_GPU_INVALID_ID indicating
+ * the invalid entries.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_OPERATING_SYSTEM
+ */
+#define NV0000_CTRL_CMD_GPU_GET_ATTACHED_IDS (0x201U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_ATTACHED_IDS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_MAX_ATTACHED_GPUS 32U
+#define NV0000_CTRL_GPU_INVALID_ID (0xffffffffU)
+
+#define NV0000_CTRL_GPU_GET_ATTACHED_IDS_PARAMS_MESSAGE_ID (0x1U)
+
+typedef struct NV0000_CTRL_GPU_GET_ATTACHED_IDS_PARAMS {
+ NvU32 gpuIds[NV0000_CTRL_GPU_MAX_ATTACHED_GPUS];
+} NV0000_CTRL_GPU_GET_ATTACHED_IDS_PARAMS;
+
+/*
+ * Deprecated. Please use NV0000_CTRL_CMD_GPU_GET_ID_INFO_V2 instead.
+ */
+#define NV0000_CTRL_CMD_GPU_GET_ID_INFO (0x202U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_ID_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_MAX_SZNAME 128U
+
+#define NV0000_CTRL_NO_NUMA_NODE (-1)
+
+#define NV0000_CTRL_GPU_GET_ID_INFO_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV0000_CTRL_GPU_GET_ID_INFO_PARAMS {
+ NvU32 gpuId;
+ NvU32 gpuFlags;
+ NvU32 deviceInstance;
+ NvU32 subDeviceInstance;
+ NV_DECLARE_ALIGNED(NvP64 szName, 8);
+ NvU32 sliStatus;
+ NvU32 boardId;
+ NvU32 gpuInstance;
+ NvS32 numaId;
+} NV0000_CTRL_GPU_GET_ID_INFO_PARAMS;
+
+#define NV0000_CTRL_SLI_STATUS_OK (0x00000000U)
+#define NV0000_CTRL_SLI_STATUS_OS_NOT_SUPPORTED (0x00000002U)
+#define NV0000_CTRL_SLI_STATUS_GPU_NOT_SUPPORTED (0x00000040U)
+#define NV0000_CTRL_SLI_STATUS_INVALID_GPU_COUNT (0x00000001U)
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_ID_INFO_V2
+ * This command returns GPU instance information for the specified GPU.
+ *
+ * [in] gpuId
+ * This parameter should specify a valid GPU ID value. If there
+ * is no GPU present with the specified ID, a status of
+ * NV_ERR_INVALID_ARGUMENT is returned.
+ * [out] gpuFlags
+ * This parameter returns various flags values for the specified GPU.
+ * Valid flag values include:
+ * NV0000_CTRL_GPU_ID_INFO_IN_USE
+ * When true this flag indicates there are client references
+ * to the GPU in the form of device class instantiations (see
+ * NV01_DEVICE or NV03_DEVICE descriptions for details).
+ * NV0000_CTRL_GPU_ID_INFO_LINKED_INTO_SLI_DEVICE
+ * When true this flag indicates the GPU is linked into an
+ * active SLI device.
+ * NV0000_CTRL_GPU_ID_INFO_MOBILE
+ * When true this flag indicates the GPU is a mobile GPU.
+ * NV0000_CTRL_GPU_ID_BOOT_MASTER
+ * When true this flag indicates the GPU is the boot master GPU.
+ * NV0000_CTRL_GPU_ID_INFO_SOC
+ * When true this flag indicates the GPU is part of a
+ * System-on-Chip (SOC).
+ * NV0000_CTRL_GPU_ID_INFO_ATS_ENABLED
+ * When ATS is enabled on the system.
+ * NV0000_CTRL_GPU_ID_INFO_SOC_TYPE
+ * This field indicates the GPU type for SOC-based GPUs. Legal values
+ * for this field include:
+ * NV0000_CTRL_GPU_ID_INFO_SOC_TYPE_NONE
+ * This value indicates the GPU is not an SOC GPU.
+ * NV0000_CTRL_GPU_ID_INFO_SOC_TYPE_DISPLAY
+ * This value indicates the GPU is an SOC display GPU.
+ * NV0000_CTRL_GPU_ID_INFO_SOC_TYPE_IGPU
+ * This value indicates the GPU is an iGPU.
+ * NV0000_CTRL_GPU_ID_INFO_SOC_TYPE_DISPLAY_AND_IGPU
+ * This value indicates the GPU is both an iGPU and an SOC
+ * display GPU.
+ * [out] deviceInstance
+ * This parameter returns the broadcast device instance number associated
+ * with the specified GPU. This value can be used to instantiate
+ * a broadcast reference to the GPU using the NV01_DEVICE classes.
+ * [out] subDeviceInstance
+ * This parameter returns the unicast subdevice instance number
+ * associated with the specified GPU. This value can be used to
+ * instantiate a unicast reference to the GPU using the NV20_SUBDEVICE
+ * classes.
+ * [out] sliStatus
+ * This parameters returns the SLI status for the specified GPU.
+ * Legal values for this member are described by NV0000_CTRL_SLI_STATUS.
+ * [out] boardId
+ * This parameter returns the board ID value with which the
+ * specified GPU is associated. Multiple GPUs can share the
+ * same board ID in multi-GPU configurations.
+ * [out] gpuInstance
+ * This parameter returns the GPU instance number for the specified GPU.
+ * GPU instance numbers are assigned in bus-probe order beginning with
+ * zero and are limited to one less the number of GPUs in the system.
+ * [out] numaId
+ * This parameter returns the ID of NUMA node for the specified GPU or
+ * the subscribed MIG partition when MIG is enabled.
+ * In case there is no NUMA node, NV0000_CTRL_NO_NUMA_NODE is returned.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+
+
+#define NV0000_CTRL_CMD_GPU_GET_ID_INFO_V2 (0x205U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_ID_INFO_V2_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_GET_ID_INFO_V2_PARAMS_MESSAGE_ID (0x5U)
+
+typedef struct NV0000_CTRL_GPU_GET_ID_INFO_V2_PARAMS {
+ NvU32 gpuId;
+ NvU32 gpuFlags;
+ NvU32 deviceInstance;
+ NvU32 subDeviceInstance;
+ NvU32 sliStatus;
+ NvU32 boardId;
+ NvU32 gpuInstance;
+ NvS32 numaId;
+} NV0000_CTRL_GPU_GET_ID_INFO_V2_PARAMS;
+
+
+/* valid flags values */
+#define NV0000_CTRL_GPU_ID_INFO_IN_USE 0:0
+#define NV0000_CTRL_GPU_ID_INFO_IN_USE_FALSE (0x00000000U)
+#define NV0000_CTRL_GPU_ID_INFO_IN_USE_TRUE (0x00000001U)
+#define NV0000_CTRL_GPU_ID_INFO_LINKED_INTO_SLI_DEVICE 1:1
+#define NV0000_CTRL_GPU_ID_INFO_LINKED_INTO_SLI_DEVICE_FALSE (0x00000000U)
+#define NV0000_CTRL_GPU_ID_INFO_LINKED_INTO_SLI_DEVICE_TRUE (0x00000001U)
+#define NV0000_CTRL_GPU_ID_INFO_MOBILE 2:2
+#define NV0000_CTRL_GPU_ID_INFO_MOBILE_FALSE (0x00000000U)
+#define NV0000_CTRL_GPU_ID_INFO_MOBILE_TRUE (0x00000001U)
+#define NV0000_CTRL_GPU_ID_INFO_BOOT_MASTER 3:3
+#define NV0000_CTRL_GPU_ID_INFO_BOOT_MASTER_FALSE (0x00000000U)
+#define NV0000_CTRL_GPU_ID_INFO_BOOT_MASTER_TRUE (0x00000001U)
+
+
+#define NV0000_CTRL_GPU_ID_INFO_SOC 5:5
+#define NV0000_CTRL_GPU_ID_INFO_SOC_FALSE (0x00000000U)
+#define NV0000_CTRL_GPU_ID_INFO_SOC_TRUE (0x00000001U)
+#define NV0000_CTRL_GPU_ID_INFO_ATS_ENABLED 6:6
+#define NV0000_CTRL_GPU_ID_INFO_ATS_ENABLED_FALSE (0x00000000U)
+#define NV0000_CTRL_GPU_ID_INFO_ATS_ENABLED_TRUE (0x00000001U)
+#define NV0000_CTRL_GPU_ID_INFO_SOC_TYPE 8:7
+#define NV0000_CTRL_GPU_ID_INFO_SOC_TYPE_NONE (0x00000000U)
+#define NV0000_CTRL_GPU_ID_INFO_SOC_TYPE_DISPLAY (0x00000001U)
+#define NV0000_CTRL_GPU_ID_INFO_SOC_TYPE_IGPU (0x00000002U)
+#define NV0000_CTRL_GPU_ID_INFO_SOC_TYPE_DISPLAY_AND_IGPU (0x00000003U)
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_INIT_STATUS
+ *
+ * This command returns the initialization status for the specified GPU, and
+ * will return NV_ERR_INVALID_STATE if called prior to GPU
+ * initialization.
+ *
+ * gpuId
+ * This parameter should specify a valid GPU ID value. If there
+ * is no GPU present with the specified ID, a status of
+ * NV_ERR_INVALID_ARGUMENT is returned.
+ * status
+ * This parameter returns the status code identifying the initialization
+ * state of the GPU. If this parameter has the value NV_OK,
+ * then no errors were detected during GPU initialization. Otherwise, this
+ * parameter specifies the top-level error that was detected during GPU
+ * initialization. Note that a value of NV_OK only means that
+ * no errors were detected during the actual GPU initialization, and other
+ * errors may have occurred that prevent the GPU from being attached or
+ * accessible via the NV01_DEVICE or NV20_SUBDEVICE classes.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_STATE
+ */
+#define NV0000_CTRL_CMD_GPU_GET_INIT_STATUS (0x203U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_INIT_STATUS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_GET_INIT_STATUS_PARAMS_MESSAGE_ID (0x3U)
+
+typedef struct NV0000_CTRL_GPU_GET_INIT_STATUS_PARAMS {
+ NvU32 gpuId;
+ NvU32 status;
+} NV0000_CTRL_GPU_GET_INIT_STATUS_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_DEVICE_IDS
+ *
+ * This command returns a mask of valid device IDs. These device IDs
+ * can be used to instantiate the NV01_DEVICE_0 class (see NV01_DEVICE_0
+ * for more information).
+ *
+ * deviceIds
+ * This parameter returns the mask of valid device IDs. Each enabled bit
+ * in the mask corresponds to a valid device instance. Valid device
+ * instances can be used to initialize the NV0080_ALLOC_PARAMETERS
+ * structure when using NvRmAlloc to instantiate device handles. The
+ * number of device IDs will not exceed NV_MAX_DEVICES in number.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ */
+#define NV0000_CTRL_CMD_GPU_GET_DEVICE_IDS (0x204U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_DEVICE_IDS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_GET_DEVICE_IDS_PARAMS_MESSAGE_ID (0x4U)
+
+typedef struct NV0000_CTRL_GPU_GET_DEVICE_IDS_PARAMS {
+ NvU32 deviceIds;
+} NV0000_CTRL_GPU_GET_DEVICE_IDS_PARAMS;
+
+
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_PROBED_IDS
+ *
+ * This command returns a table of probed gpuId values.
+ * The table is NV0000_CTRL_GPU_MAX_PROBED_GPUS entries in size.
+ *
+ * gpuIds[]
+ * This parameter returns the table of probed GPU IDs.
+ * The GPU ID is an opaque platform-dependent value that can
+ * be used with the NV0000_CTRL_CMD_GPU_ATTACH_IDS and
+ * NV0000_CTRL_CMD_GPU_DETACH_ID commands to attach and detach
+ * the GPU.
+ * The valid entries in gpuIds[] are contiguous, with a value
+ * of NV0000_CTRL_GPU_INVALID_ID indicating the invalid entries.
+ * excludedGpuIds[]
+ * This parameter returns the table of excluded GPU IDs.
+ * An excluded GPU ID is an opaque platform-dependent value that
+ * can be used with NV0000_CTRL_CMD_GPU_GET_PCI_INFO and
+ * NV0000_CTRL_CMD_GPU_GET_UUID_INFO.
+ * The valid entries in excludedGpuIds[] are contiguous, with a value
+ * of NV0000_CTRL_GPU_INVALID_ID indicating the invalid entries.
+ * gpuFlags[]
+ * This parameter returns flags for each valid entry in the gpuIds[]
+ * table. Note that excluded GPUs do not have a gpuFlags[] entry.
+ * Valid flag values include:
+ * NV0000_CTRL_GPU_PROBED_ID_INFO_FLAGS_SOC_DISPLAY
+ * When TRUE this flag indicates the GPU supports SOC Display
+ * functionality.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ */
+#define NV0000_CTRL_CMD_GPU_GET_PROBED_IDS (0x214U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_PROBED_IDS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_MAX_PROBED_GPUS NV_MAX_DEVICES
+
+#define NV0000_CTRL_GPU_GET_PROBED_IDS_PARAMS_MESSAGE_ID (0x14U)
+
+typedef struct NV0000_CTRL_GPU_GET_PROBED_IDS_PARAMS {
+ NvU32 gpuIds[NV0000_CTRL_GPU_MAX_PROBED_GPUS];
+ NvU32 excludedGpuIds[NV0000_CTRL_GPU_MAX_PROBED_GPUS];
+ NvU32 gpuFlags[NV0000_CTRL_GPU_MAX_PROBED_GPUS];
+} NV0000_CTRL_GPU_GET_PROBED_IDS_PARAMS;
+
+/* valid flags values */
+#define NV0000_CTRL_GPU_PROBED_ID_FLAGS_SOC_DISPLAY 0:0
+#define NV0000_CTRL_GPU_PROBED_ID_FLAGS_SOC_DISPLAY_FALSE (0x00000000U)
+#define NV0000_CTRL_GPU_PROBED_ID_FLAGS_SOC_DISPLAY_TRUE (0x00000001U)
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_PCI_INFO
+ *
+ * This command takes a gpuId and returns PCI bus information about
+ * the device. If the OS does not support returning PCI bus
+ * information, this call will return NV_ERR_NOT_SUPPORTED
+ *
+ * gpuId
+ * This parameter should specify a valid GPU ID value. If there
+ * is no GPU present with the specified ID, a status of
+ * NV_ERR_INVALID_ARGUMENT is returned.
+ *
+ * domain
+ * This parameter returns the PCI domain of the GPU.
+ *
+ * bus
+ * This parameter returns the PCI bus of the GPU.
+ *
+ * slot
+ * This parameter returns the PCI slot of the GPU.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_NOT_SUPPORTED
+ * NV_ERR_INVALID_ARGUMENT
+ */
+#define NV0000_CTRL_CMD_GPU_GET_PCI_INFO (0x21bU) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_PCI_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_GET_PCI_INFO_PARAMS_MESSAGE_ID (0x1BU)
+
+typedef struct NV0000_CTRL_GPU_GET_PCI_INFO_PARAMS {
+ NvU32 gpuId;
+ NvU32 domain;
+ NvU16 bus;
+ NvU16 slot;
+} NV0000_CTRL_GPU_GET_PCI_INFO_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_ATTACH_IDS
+ *
+ * This command attaches the GPUs with the gpuIds matching those in
+ * the table provided by the client.
+ * The table is NV0000_CTRL_GPU_MAX_PROBED_GPUS entries in size.
+ *
+ * gpuIds[]
+ * This parameter holds the table of gpuIds to attach. At least
+ * one gpuId must be specified; clients may use the special
+ * gpuId value NV0000_CTRL_GPU_ATTACH_ALL_PROBED_IDS to indicate
+ * that all probed GPUs are to be attached.
+ * The entries in gpuIds[] must be contiguous, with a value of
+ * NV0000_CTRL_GPU_INVALID_ID to indicate the first invalid
+ * entry.
+ * If one or more of the gpuId values do not specify a GPU found
+ * in the system, the NV_ERR_INVALID_ARGUMENT error
+ * status is returned.
+ *
+ * failedId
+ * If NV0000_CTRL_GPU_ATTACH_ALL_PROBED_IDS is specified and
+ * a GPU cannot be attached, the NV0000_CTRL_CMD_GPU_ATTACH_IDS
+ * command returns an error code and saves the failing GPU's
+ * gpuId in this field.
+ *
+ * If a table of gpuIds is provided, these gpuIds will be validated
+ * against the RM's table of probed gpuIds and attached in turn,
+ * if valid; if NV0000_CTRL_GPU_ATTACH_ALL_PROBED_IDS is used, all
+ * probed gpuIds will be attached, in the order the associated GPUs
+ * were probed in by the RM.
+ *
+ * If a gpuId fails to attach, this gpuId is stored in the failedId
+ * field. Any GPUs attached by the command prior the failure are
+ * detached.
+ *
+ * If multiple clients use NV0000_CTRL_CMD_GPU_ATTACH_IDS to attach
+ * a gpuId, the RM ensures that the gpuId won't be detached until
+ * all clients have issued a call to NV0000_CTRL_CMD_GPU_DETACH_IDS
+ * to detach the gpuId (or have terminated).
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_OPERATING_SYSTEM
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_IRQ_EDGE_TRIGGERED
+ * NV_ERR_IRQ_NOT_FIRING
+ */
+#define NV0000_CTRL_CMD_GPU_ATTACH_IDS (0x215U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_ATTACH_IDS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_ATTACH_ALL_PROBED_IDS (0x0000ffffU)
+
+#define NV0000_CTRL_GPU_ATTACH_IDS_PARAMS_MESSAGE_ID (0x15U)
+
+typedef struct NV0000_CTRL_GPU_ATTACH_IDS_PARAMS {
+ NvU32 gpuIds[NV0000_CTRL_GPU_MAX_PROBED_GPUS];
+ NvU32 failedId;
+} NV0000_CTRL_GPU_ATTACH_IDS_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_DETACH_IDS
+ *
+ * This command detaches the GPUs with the gpuIds matching those in
+ * the table provided by the client.
+ * The table is NV0000_CTRL_GPU_MAX_ATTACHED_GPUS entries in size.
+ *
+ * gpuIds[]
+ * This parameter holds the table of gpuIds to detach. At least
+ * one gpuId must be specified; clients may use the special
+ * gpuId NV0000_CTRL_GPU_DETACH_ALL_ATTACHED_IDS to indicate that
+ * all attached GPUs are to be detached.
+ * The entries in gpuIds[] must be contiguous, with a value of
+ * NV0000_CTRL_GPU_INVALID_ID to indicate the first invalid
+ * entry.
+ * If one or more of the gpuId values do not specify a GPU found
+ * in the system, the NV_ERR_INVALID_ARGUMENT error
+ * status is returned.
+ *
+ * If a table of gpuIds is provided, these gpuIds will be validated
+ * against the RM's list of attached gpuIds; each valid gpuId is
+ * detached immediately if it's no longer in use (i.e. if there are
+ * no client references to the associated GPU in the form of
+ * device class instantiations (see the NV01_DEVICE or NV03_DEVICE
+ * descriptions for details)) and if no other client still requires
+ * the associated GPU to be attached.
+ *
+ * If a given gpuId can't be detached immediately, it will instead
+ * be detached when the last client reference is freed or when
+ * the last client that issued NV0000_CTRL_CMD_GPU_ATTACH_IDS for
+ * this gpuId either issues NV0000_CTRL_CMD_GPU_DETACH_IDS or exits
+ * without detaching the gpuId explicitly.
+ *
+ * Clients may use the NV0000_CTRL_CMD_GPU_GET_ATTACHED_IDS command
+ * to obtain a table of the attached gpuIds.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_OPERATING_SYSTEM
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+#define NV0000_CTRL_CMD_GPU_DETACH_IDS (0x216U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_DETACH_IDS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_DETACH_ALL_ATTACHED_IDS (0x0000ffffU)
+
+#define NV0000_CTRL_GPU_DETACH_IDS_PARAMS_MESSAGE_ID (0x16U)
+
+typedef struct NV0000_CTRL_GPU_DETACH_IDS_PARAMS {
+ NvU32 gpuIds[NV0000_CTRL_GPU_MAX_ATTACHED_GPUS];
+} NV0000_CTRL_GPU_DETACH_IDS_PARAMS;
+
+
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_VIDEO_LINKS
+ *
+ * This command returns information about video bridge connections
+ * detected between GPUs in the system, organized as a table
+ * with one row per attached GPU and none, one or more peer GPUs
+ * listed in the columns of each row, if connected to the row head
+ * GPU via a video bridge.
+ *
+ * gpuId
+ * For each row, this field holds the GPU ID of the GPU
+ * whose connections are listed in the row.
+ *
+ * connectedGpuIds
+ * For each row, this table holds the GPU IDs of the
+ * GPUs connected to the GPU identified via the 'gpuId'
+ * field.
+ *
+ * links
+ * This table holds information about the video bridges
+ * connected between GPUs in the system. Each row
+ * represents connections to a single GPU.
+ *
+ * Please note: the table only reports video links between already
+ * attached GPUs.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV0000_CTRL_CMD_GPU_GET_VIDEO_LINKS (0x219U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_VIDEO_LINKS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_MAX_VIDEO_LINKS 8U
+
+typedef struct NV0000_CTRL_GPU_VIDEO_LINKS {
+ NvU32 gpuId;
+ NvU32 connectedGpuIds[NV0000_CTRL_GPU_MAX_VIDEO_LINKS];
+} NV0000_CTRL_GPU_VIDEO_LINKS;
+
+#define NV0000_CTRL_GPU_GET_VIDEO_LINKS_PARAMS_MESSAGE_ID (0x19U)
+
+typedef struct NV0000_CTRL_GPU_GET_VIDEO_LINKS_PARAMS {
+ NV0000_CTRL_GPU_VIDEO_LINKS links[NV0000_CTRL_GPU_MAX_ATTACHED_GPUS];
+} NV0000_CTRL_GPU_GET_VIDEO_LINKS_PARAMS;
+
+
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_UUID_INFO
+ *
+ * This command returns requested information pertaining to the GPU
+ * specified by the GPU UUID passed in.
+ *
+ * Generally only GPUs that have been attached are visible to this call. Therefore
+ * queries on unattached GPUs will fail with NV_ERR_OBJECT_NOT_FOUND. However,
+ * a query for a SHA1 UUID may succeed for an unattached GPU in cases where the GID
+ * is cached, such as an excluded GPU.
+ *
+ * gpuGuid (INPUT)
+ * The GPU UUID of the gpu whose parameters are to be returned. Refer to
+ * NV0000_CTRL_CMD_GPU_GET_ID_INFO for more information.
+ *
+ * flags (INPUT)
+ * The _FORMAT* flags designate ascii string format or a binary format.
+ *
+ * The _TYPE* flags designate either SHA-1-based (32-hex-character) or
+ * SHA-256-based (64-hex-character).
+ *
+ * gpuId (OUTPUT)
+ * The GPU ID of the GPU identified by gpuGuid. Refer to
+ * NV0000_CTRL_CMD_GPU_GET_ID_INFO for more information.
+ *
+ * deviceInstance (OUTPUT)
+ * The device instance of the GPU identified by gpuGuid. Refer to
+ * NV0000_CTRL_CMD_GPU_GET_ID_INFO for more information.
+ *
+ * subdeviceInstance (OUTPUT)
+ * The subdevice instance of the GPU identified by gpuGuid. Refer to
+ * NV0000_CTRL_CMD_GPU_GET_ID_INFO for more information.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_OBJECT_NOT_FOUND
+ *
+ */
+#define NV0000_CTRL_CMD_GPU_GET_UUID_INFO (0x274U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_UUID_INFO_PARAMS_MESSAGE_ID" */
+
+/* maximum possible number of bytes of GID information */
+#define NV0000_GPU_MAX_GID_LENGTH (0x00000100U)
+
+#define NV0000_CTRL_GPU_GET_UUID_INFO_PARAMS_MESSAGE_ID (0x74U)
+
+typedef struct NV0000_CTRL_GPU_GET_UUID_INFO_PARAMS {
+ NvU8 gpuUuid[NV0000_GPU_MAX_GID_LENGTH];
+ NvU32 flags;
+ NvU32 gpuId;
+ NvU32 deviceInstance;
+ NvU32 subdeviceInstance;
+} NV0000_CTRL_GPU_GET_UUID_INFO_PARAMS;
+
+#define NV0000_CTRL_CMD_GPU_GET_UUID_INFO_FLAGS_FORMAT 1:0
+#define NV0000_CTRL_CMD_GPU_GET_UUID_INFO_FLAGS_FORMAT_ASCII (0x00000000U)
+#define NV0000_CTRL_CMD_GPU_GET_UUID_INFO_FLAGS_FORMAT_BINARY (0x00000002U)
+
+#define NV0000_CTRL_CMD_GPU_GET_UUID_INFO_FLAGS_TYPE 2:2
+#define NV0000_CTRL_CMD_GPU_GET_UUID_INFO_FLAGS_TYPE_SHA1 (0x00000000U)
+#define NV0000_CTRL_CMD_GPU_GET_UUID_INFO_FLAGS_TYPE_SHA256 (0x00000001U)
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID
+ *
+ * This command returns the GPU UUID for the provided GPU ID.
+ * Note that only GPUs that have been attached are visible to this call.
+ * Therefore queries on unattached GPUs will fail
+ * with NV_ERR_OBJECT_NOT_FOUND.
+ *
+ * gpuId (INPUT)
+ * The GPU ID whose parameters are to be returned. Refer to
+ * NV0000_CTRL_CMD_GPU_GET_ID_INFO for more information.
+ *
+ * flags (INPUT)
+ *
+ * NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID_FLAGS_FORMAT_ASCII
+ * This value is used to request the GPU UUID in ASCII format.
+ * NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID_FLAGS_FORMAT_BINARY
+ * This value is used to request the GPU UUID in binary format.
+ *
+ * NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID_FLAGS_TYPE_SHA1
+ * This value is used to request that the GPU UUID value
+ * be SHA1-based (32-hex-character).
+ * NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID_FLAGS_TYPE_SHA256
+ * This value is used to request that the GPU UUID value
+ * be SHA256-based (64-hex-character).
+ *
+ * gpuUuid[NV0000_GPU_MAX_GID_LENGTH] (OUTPUT)
+ * The GPU UUID of the GPU identified by GPU ID. Refer to
+ * NV0000_CTRL_CMD_GPU_GET_ID_INFO for more information.
+ *
+ * uuidStrLen (OUTPUT)
+ * The length of the UUID returned which is related to the format that
+ * was requested using flags.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_OBJECT_NOT_FOUND
+ * NV_ERR_OPERATING_SYSTEM
+ */
+#define NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID (0x275U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_UUID_FROM_GPU_ID_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_GET_UUID_FROM_GPU_ID_PARAMS_MESSAGE_ID (0x75U)
+
+typedef struct NV0000_CTRL_GPU_GET_UUID_FROM_GPU_ID_PARAMS {
+ NvU32 gpuId;
+ NvU32 flags;
+ NvU8 gpuUuid[NV0000_GPU_MAX_GID_LENGTH];
+ NvU32 uuidStrLen;
+} NV0000_CTRL_GPU_GET_UUID_FROM_GPU_ID_PARAMS;
+
+/* valid format values */
+#define NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID_FLAGS_FORMAT 1:0
+#define NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID_FLAGS_FORMAT_ASCII (0x00000000U)
+#define NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID_FLAGS_FORMAT_BINARY (0x00000002U)
+
+/*valid type values*/
+#define NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID_FLAGS_TYPE 2:2
+#define NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID_FLAGS_TYPE_SHA1 (0x00000000U)
+#define NV0000_CTRL_CMD_GPU_GET_UUID_FROM_GPU_ID_FLAGS_TYPE_SHA256 (0x00000001U)
+
+
+
+/*
+ * NV0000_CTRL_CMD_GPU_MODIFY_DRAIN_STATE
+ *
+ * This command is used to enter or exit the so called "drain" state.
+ * When this state is enabled, the existing clients continue executing
+ * as usual, however no new client connections are allowed.
+ * This is done in order to "drain" the system of the running clients
+ * in preparation to selectively powering down the GPU.
+ * No GPU can enter a bleed state if that GPU is in an SLI group.
+ * In that case, NV_ERR_IN_USE is returned.
+ * Requires administrator privileges.
+ *
+ * It is expected, that the "drain" state will be eventually deprecated
+ * and replaced with another mechanism to quiesce a GPU (Bug 1718113).
+ *
+ * gpuId (INPUT)
+ * This parameter should specify a valid GPU ID value. If there
+ * is no GPU present with the specified ID, a status of
+ * NV_ERR_INVALID_ARGUMENT is returned.
+ * newState (INPUT)
+ * This input parameter is used to enter or exit the "drain"
+ * software state of the GPU specified by the gpuId parameter.
+ * Possible values are:
+ * NV0000_CTRL_GPU_DRAIN_STATE_ENABLED
+ * NV0000_CTRL_GPU_DRAIN_STATE_DISABLED
+ * flags (INPUT)
+ * NV0000_CTRL_GPU_DRAIN_STATE_FLAG_REMOVE_DEVICE
+ * if set, upon reaching quiescence, a request will be made to
+ * the OS to "forget" the PCI device associated with the
+ * GPU specified by the gpuId parameter, in case such a request
+ * is supported by the OS. Otherwise, NV_ERR_NOT_SUPPORTED
+ * will be returned.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INSUFFICIENT_PERMISSIONS
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_NOT_SUPPORTED
+ * NV_ERR_IN_USE
+ */
+
+#define NV0000_CTRL_CMD_GPU_MODIFY_DRAIN_STATE (0x278U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_MODIFY_DRAIN_STATE_PARAMS_MESSAGE_ID" */
+
+/* Possible values of newState */
+#define NV0000_CTRL_GPU_DRAIN_STATE_DISABLED (0x00000000U)
+#define NV0000_CTRL_GPU_DRAIN_STATE_ENABLED (0x00000001U)
+
+/* Defined bits for the "flags" argument */
+#define NV0000_CTRL_GPU_DRAIN_STATE_FLAG_REMOVE_DEVICE (0x00000001U)
+#define NV0000_CTRL_GPU_DRAIN_STATE_FLAG_LINK_DISABLE (0x00000002U)
+
+#define NV0000_CTRL_GPU_MODIFY_DRAIN_STATE_PARAMS_MESSAGE_ID (0x78U)
+
+typedef struct NV0000_CTRL_GPU_MODIFY_DRAIN_STATE_PARAMS {
+ NvU32 gpuId;
+ NvU32 newState;
+ NvU32 flags;
+} NV0000_CTRL_GPU_MODIFY_DRAIN_STATE_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_QUERY_DRAIN_STATE
+ *
+ * gpuId (INPUT)
+ * This parameter should specify a valid GPU ID value. If there
+ * is no GPU present with the specified ID, a status of
+ * NVOS_STATUS_ERROR_INVALID_ARGUMENT is returned.
+ * drainState (OUTPUT)
+ * This parameter returns a value indicating if the "drain"
+ * state is currently enabled or not for the specified GPU. See the
+ * description of NV0000_CTRL_CMD_GPU_MODIFY_DRAIN_STATE.
+ * Possible values are:
+ * NV0000_CTRL_GPU_DRAIN_STATE_ENABLED
+ * NV0000_CTRL_GPU_DRAIN_STATE_DISABLED
+ * flags (OUTPUT)
+ * NV0000_CTRL_GPU_DRAIN_STATE_FLAG_REMOVE_DEVICE
+ * if set, upon reaching quiesence, the GPU device will be
+ * removed automatically from the kernel space, similar
+ * to what writing "1" to the sysfs "remove" node does.
+ * NV0000_CTRL_GPU_DRAIN_STATE_FLAG_LINK_DISABLE
+ * after removing the GPU, also disable the parent bridge's
+ * PCIe link. This flag can only be set in conjunction with
+ * NV0000_CTRL_GPU_DRAIN_STATE_FLAG_REMOVE_DEVICE, and then
+ * only when the GPU is already idle (not attached).
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV0000_CTRL_CMD_GPU_QUERY_DRAIN_STATE (0x279U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_QUERY_DRAIN_STATE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_QUERY_DRAIN_STATE_PARAMS_MESSAGE_ID (0x79U)
+
+typedef struct NV0000_CTRL_GPU_QUERY_DRAIN_STATE_PARAMS {
+ NvU32 gpuId;
+ NvU32 drainState;
+ NvU32 flags;
+} NV0000_CTRL_GPU_QUERY_DRAIN_STATE_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_DISCOVER
+ *
+ * This request asks the OS to scan the PCI tree or a sub-tree for GPUs,
+ * that are not yet known to the OS, and to make them available for use.
+ * If all of domain:bus:slot.function are zeros, the entire tree is scanned,
+ * otherwise the parameters identify the bridge device, that roots the
+ * subtree to be scanned.
+ * Requires administrator privileges.
+ *
+ * domain (INPUT)
+ * PCI domain of the bridge
+ * bus (INPUT)
+ * PCI bus of the bridge
+ * slot (INPUT)
+ * PCI slot of the bridge
+ * function (INPUT)
+ * PCI function of the bridge
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_DEVICE
+ * NV_ERR_INSUFFICIENT_PERMISSIONS
+ * NV_ERR_OPERATING_SYSTEM
+ * NV_ERR_NOT_SUPPORTED
+ */
+
+#define NV0000_CTRL_CMD_GPU_DISCOVER (0x27aU) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | 0x7A" */
+
+typedef struct NV0000_CTRL_GPU_DISCOVER_PARAMS {
+ NvU32 domain;
+ NvU8 bus;
+ NvU8 slot;
+ NvU8 function;
+} NV0000_CTRL_GPU_DISCOVER_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_MEMOP_ENABLE
+ *
+ * This command is used to get the content of the MemOp (CUDA Memory Operation)
+ * enablement mask, which can be overridden by using the MemOpOverride RegKey.
+ *
+ * The enableMask member must be treated as a bitmask, where each bit controls
+ * the enablement of a feature.
+ *
+ * So far, the only feature which is defined controls to whole MemOp APIs.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ *
+ */
+#define NV0000_CTRL_CMD_GPU_GET_MEMOP_ENABLE (0x27bU) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_MEMOP_ENABLE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_GET_MEMOP_ENABLE_PARAMS_MESSAGE_ID (0x7BU)
+
+typedef struct NV0000_CTRL_GPU_GET_MEMOP_ENABLE_PARAMS {
+ NvU32 enableMask;
+} NV0000_CTRL_GPU_GET_MEMOP_ENABLE_PARAMS;
+
+#define NV0000_CTRL_GPU_FLAGS_MEMOP_ENABLE (0x00000001U)
+
+/*
+ * NV0000_CTRL_CMD_GPU_DISABLE_NVLINK_INIT
+ *
+ * This privileged command is used to disable initialization for the NVLinks
+ * provided in the mask.
+ *
+ * The mask must be applied before the GPU is attached. DISABLE_NVLINK_INIT
+ * is an NOP for non-NVLink GPUs.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_DEVICE
+ * NV_ERR_INSUFFICIENT_PERMISSIONS
+ * NV_ERR_INVALID_STATE
+ * NV_ERR_IN_USE
+ *
+ */
+#define NV0000_CTRL_CMD_GPU_DISABLE_NVLINK_INIT (0x281U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_DISABLE_NVLINK_INIT_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_DISABLE_NVLINK_INIT_PARAMS_MESSAGE_ID (0x81U)
+
+typedef struct NV0000_CTRL_GPU_DISABLE_NVLINK_INIT_PARAMS {
+ NvU32 gpuId;
+ NvU32 mask; // This field will be deprecated in the future, please use links
+ NV_DECLARE_ALIGNED(NV0000_CTRL_NVLINK_LINK_MASK links, 8);
+ NvBool bSkipHwNvlinkDisable;
+} NV0000_CTRL_GPU_DISABLE_NVLINK_INIT_PARAMS;
+
+
+#define NV0000_CTRL_GPU_LEGACY_CONFIG_MAX_PARAM_DATA 0x00000175U
+#define NV0000_CTRL_GPU_LEGACY_CONFIG_MAX_PROPERTIES_IN 6U
+#define NV0000_CTRL_GPU_LEGACY_CONFIG_MAX_PROPERTIES_OUT 5U
+
+/*
+ * NV0000_CTRL_CMD_IDLE_CHANNELS
+ */
+#define NV0000_CTRL_CMD_IDLE_CHANNELS (0x283U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_IDLE_CHANNELS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_IDLE_CHANNELS_PARAMS_MESSAGE_ID (0x83U)
+
+typedef struct NV0000_CTRL_GPU_IDLE_CHANNELS_PARAMS {
+ NvHandle hDevice;
+ NvHandle hChannel;
+ NvV32 numChannels;
+ /* C form: NvP64 phClients NV_ALIGN_BYTES(8); */
+ NV_DECLARE_ALIGNED(NvP64 phClients, 8);
+ /* C form: NvP64 phDevices NV_ALIGN_BYTES(8); */
+ NV_DECLARE_ALIGNED(NvP64 phDevices, 8);
+ /* C form: NvP64 phChannels NV_ALIGN_BYTES(8); */
+ NV_DECLARE_ALIGNED(NvP64 phChannels, 8);
+ NvV32 flags;
+ NvV32 timeout;
+} NV0000_CTRL_GPU_IDLE_CHANNELS_PARAMS;
+
+#define NV0000_CTRL_GPU_IMAGE_TYPE_GSP (0x00000001U)
+#define NV0000_CTRL_GPU_IMAGE_TYPE_GSP_LOG (0x00000002U)
+#define NV0000_CTRL_GPU_IMAGE_TYPE_BINDATA_IMAGE (0x00000003U)
+/*
+ * NV0000_CTRL_CMD_PUSH_UCODE_IMAGE
+ *
+ * This command is used to push the GSP ucode into RM.
+ * This function is used only on VMware
+ *
+ * Possible status values returned are:
+ * NV_OK The sent data is stored successfully
+ * NV_ERR_INVALID_ARGUMENT if the arguments are not proper
+ * NV_ERR_NO_MEMORY if memory allocation failed
+ * NV_ERR_NOT_SUPPORTED if function is invoked on non-GSP setup or any
+ * setup other than VMware host
+ *
+ */
+#define NV0000_CTRL_CMD_PUSH_UCODE_IMAGE (0x285) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_PUSH_UCODE_IMAGE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_PUSH_UCODE_IMAGE_PARAMS_MESSAGE_ID (0x85U)
+
+typedef struct NV0000_CTRL_GPU_PUSH_UCODE_IMAGE_PARAMS {
+ NvU8 image;
+ NV_DECLARE_ALIGNED(NvU64 totalSize, 8);
+ NV_DECLARE_ALIGNED(NvP64 pData, 8);
+} NV0000_CTRL_GPU_PUSH_UCODE_IMAGE_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_SET_NVLINK_BW_MODE
+ *
+ * This command is used to set NVLINK bandwidth for power saving
+ *
+ * The setting must be applied before the GPU is attached.
+ * NVLINK_BW_MODE is an NOP for non-NVLink GPUs.
+ *
+ * [in] mode
+ * Possible Legacy values that can be set in bits 2:0:
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_FULL
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_OFF
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_MIN
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_HALF
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_3QUARTER
+ * bits 3:15 can be used to specify link count
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_DEVICE
+ * NV_ERR_INSUFFICIENT_PERMISSIONS
+ * NV_ERR_INVALID_STATE
+ * NV_ERR_IN_USE
+ */
+
+#define NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_SETTING_LEGACY 2:0
+#define NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_SETTING_LINK_COUNT 7:3
+
+#define NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_FULL (0x00U)
+#define NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_OFF (0x01U)
+#define NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_MIN (0x02U)
+#define NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_HALF (0x03U)
+#define NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_3QUARTER (0x04U)
+#define NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_LINK_COUNT (0x05U)
+
+#define NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_SCOPE_UNSET (0x00U)
+#define NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_SCOPE_PER_NODE (0x01U)
+#define NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_SCOPE_PER_GPU (0x02U)
+
+
+#define NV0000_CTRL_CMD_GPU_SET_NVLINK_BW_MODE (0x286U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_SET_NVLINK_BW_MODE_PARAMS_MESSAGE_ID" */
+#define NV0000_CTRL_GPU_SET_NVLINK_BW_MODE_PARAMS_MESSAGE_ID (0x86U)
+
+typedef struct NV0000_CTRL_GPU_SET_NVLINK_BW_MODE_PARAMS {
+ NvU16 mode;
+} NV0000_CTRL_GPU_SET_NVLINK_BW_MODE_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_NVLINK_BW_MODE
+ *
+ * This command is used to get NVLINK bandwidth for power saving
+ *
+ * NVLINK_BW_MODE is an NOP for non-NVLink GPUs.
+ *
+ * [out] mode
+ * BW mode currently set for the GPUs on the system.
+ * Possible values are:
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_FULL
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_OFF
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_MIN
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_HALF
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_3QUARTER
+ * [out] bwModeScope
+ * Scope of the bw mode setting on the system.
+ * Possible values are:
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_SCOPE_UNSET
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_SCOPE_PER_NODE
+ * NV0000_CTRL_CMD_GPU_NVLINK_BW_MODE_SCOPE_PER_GPU
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_DEVICE
+ * NV_ERR_INSUFFICIENT_PERMISSIONS
+ * NV_ERR_INVALID_STATE
+ * NV_ERR_IN_USE
+ */
+
+#define NV0000_CTRL_CMD_GPU_GET_NVLINK_BW_MODE (0x287U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_NVLINK_BW_MODE_PARAMS_MESSAGE_ID" */
+#define NV0000_CTRL_GPU_GET_NVLINK_BW_MODE_PARAMS_MESSAGE_ID (0x87U)
+
+typedef struct NV0000_CTRL_GPU_GET_NVLINK_BW_MODE_PARAMS {
+ NvU8 mode;
+ NvU8 bwModeScope;
+} NV0000_CTRL_GPU_GET_NVLINK_BW_MODE_PARAMS;
+
+/*
+ * NV0000_CTRL_GPU_ACTIVE_DEVICE
+ *
+ * This structure describes a single MIG or plain device in the system
+ * available for use.
+ *
+ * gpuId
+ * ID of an attached GPU.
+ * gpuInstanceId
+ * MIG gpu instance id of an instance existing on this GPU.
+ * NV0000_CTRL_GPU_INVALID_ID if the GPU is not in MIG mode.
+ * computeInstanceId
+ * MIG compute instance id of an instance existing on this GPU.
+ * NV0000_CTRL_GPU_INVALID_ID if the GPU is not in MIG mode.
+ *
+ */
+typedef struct NV0000_CTRL_GPU_ACTIVE_DEVICE {
+ NvU32 gpuId;
+ NvU32 gpuInstanceId;
+ NvU32 computeInstanceId;
+} NV0000_CTRL_GPU_ACTIVE_DEVICE;
+
+/*
+ * NV0000_CTRL_CMD_GPU_GET_ACTIVE_DEVICE_IDS
+ *
+ * This command returns a list of valid GPUs treating uniformly MIG devices
+ * and GPUs not in MIG mode.
+ *
+ * [out] devices
+ * List of devices aviable for use.
+ * [out] numDevices
+ * Number of valid entries in gpus
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ */
+#define NV0000_CTRL_CMD_GPU_GET_ACTIVE_DEVICE_IDS (0x288U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_GET_ACTIVE_DEVICE_IDS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_MAX_ACTIVE_DEVICES 256U
+
+#define NV0000_CTRL_GPU_GET_ACTIVE_DEVICE_IDS_PARAMS_MESSAGE_ID (0x88U)
+
+typedef struct NV0000_CTRL_GPU_GET_ACTIVE_DEVICE_IDS_PARAMS {
+ NvU32 numDevices;
+ NV0000_CTRL_GPU_ACTIVE_DEVICE devices[NV0000_CTRL_GPU_MAX_ACTIVE_DEVICES];
+} NV0000_CTRL_GPU_GET_ACTIVE_DEVICE_IDS_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_ASYNC_ATTACH_ID
+ *
+ * This command attaches the GPU with the given gpuId, similar to
+ * NV0000_CTRL_CMD_GPU_ATTACH_IDS. However, this command instructs the RM
+ * to perform the attach in the background.
+ *
+ * After calling this command, clients are expected to call
+ * NV0000_CTRL_CMD_GPU_WAIT_ATTACH_ID before performing any operation that
+ * depends on the GPU being attached.
+ *
+ * If the gpuId fails to attach, either this command or the subsequent
+ * NV0000_CTRL_CMD_GPU_WAIT_ATTACH_ID command may fail.
+ *
+ * If clients from multiple processes use this command or the
+ * NV0000_CTRL_CMD_GPU_ATTACH_IDS command to attach a gpuId, the RM ensures
+ * that the gpuId won't be detached until all processes have issued a call to
+ * NV0000_CTRL_CMD_GPU_DETACH_IDS to detach the gpuId (or have terminated).
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_OPERATING_SYSTEM
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+#define NV0000_CTRL_CMD_GPU_ASYNC_ATTACH_ID (0x289U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_ASYNC_ATTACH_ID_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_ASYNC_ATTACH_ID_PARAMS_MESSAGE_ID (0x89U)
+
+typedef struct NV0000_CTRL_GPU_ASYNC_ATTACH_ID_PARAMS {
+ NvU32 gpuId;
+} NV0000_CTRL_GPU_ASYNC_ATTACH_ID_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_WAIT_ATTACH_ID
+ *
+ * This command waits for and returns the status of a background attach
+ * operation started by NV0000_CTRL_CMD_GPU_ASYNC_ATTACH_ID.
+ *
+ * Clients are expected to call this command after calling
+ * NV0000_CTRL_CMD_GPU_ASYNC_ATTACH_ID before performing any operation that
+ * depends on the GPU being attached.
+ *
+ * If the gpuId fails to attach, either this command or the previous
+ * NV0000_CTRL_CMD_GPU_ASYNC_ATTACH_ID command may fail.
+ *
+ * Calling this command for a gpuId that is already attached (for example,
+ * after a successful NV0000_CTRL_CMD_GPU_ATTACH_IDS) is a no-op.
+ *
+ * Calling this command for a gpuId that is neither attached nor has a
+ * background attach operation will result in NV_ERR_INVALID_ARGUMENT.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_OPERATING_SYSTEM
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_IRQ_EDGE_TRIGGERED
+ * NV_ERR_IRQ_NOT_FIRING
+ */
+#define NV0000_CTRL_CMD_GPU_WAIT_ATTACH_ID (0x290U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_WAIT_ATTACH_ID_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_WAIT_ATTACH_ID_PARAMS_MESSAGE_ID (0x90U)
+
+typedef struct NV0000_CTRL_GPU_WAIT_ATTACH_ID_PARAMS {
+ NvU32 gpuId;
+} NV0000_CTRL_GPU_WAIT_ATTACH_ID_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_PCI_READ_WRITE
+ *
+ * This control is supported only on MODS.
+ *
+ */
+
+#define NV0000_CTRL_CMD_GPU_PCI_READ_WRITE_DATA_SIZE_08 0
+#define NV0000_CTRL_CMD_GPU_PCI_READ_WRITE_DATA_SIZE_16 1
+#define NV0000_CTRL_CMD_GPU_PCI_READ_WRITE_DATA_SIZE_32 2
+
+#define NV0000_CTRL_CMD_GPU_PCI_READ_WRITE (0x291U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_PCI_READ_WRITE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_PCI_READ_WRITE_PARAMS_MESSAGE_ID (0x91U)
+
+typedef struct NV0000_CTRL_GPU_PCI_READ_WRITE_PARAMS {
+ NvBool bWrite;
+ NvU16 pciDomain;
+ NvU8 pciBus;
+ NvU8 pciDevice;
+ NvU8 pciFunction;
+ NvU8 pciOffset;
+ NvU32 dataSize;
+ NvU32 data;
+} NV0000_CTRL_GPU_PCI_READ_WRITE_PARAMS;
+
+/* _ctrl0000gpu_h_ */
+
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gpuacct.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gpuacct.h
new file mode 100644
index 0000000..4e01862
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gpuacct.h
@@ -0,0 +1,319 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2013-2015 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000gpuacct.finn
+//
+
+#include "ctrl/ctrl0000/ctrl0000base.h"
+
+/*
+ * NV0000_CTRL_CMD_GPUACCT_SET_ACCOUNTING_STATE
+ *
+ * This command is used to enable or disable the per process GPU accounting.
+ * This is part of GPU's software state and will persist if persistent
+ * software state is enabled. Refer to the description of
+ * NV0080_CTRL_CMD_GPU_MODIFY_SW_STATE_PERSISTENCE for more information.
+ *
+ * gpuId
+ * This parameter should specify a valid GPU ID value. Refer to the
+ * description of NV0000_CTRL_CMD_GPU_GET_ATTACHED_IDS for more
+ * information. If there is no GPU present with the specified ID,
+ * a status of NV_ERR_INVALID_ARGUMENT is returned.
+ * pid
+ * This input parameter specifies the process id of the process for which
+ * the accounting state needs to be set.
+ * In case of VGX host, this parameter specifies VGPU plugin(VM) pid. This
+ * parameter is set only when this RM control is called from VGPU plugin,
+ * otherwise it is zero meaning set/reset the accounting state for the
+ * specified GPU.
+ * newState
+ * This input parameter is used to enable or disable the GPU accounting.
+ * Possible values are:
+ * NV0000_CTRL_GPU_ACCOUNTING_STATE_ENABLED
+ * NV0000_CTRL_GPU_ACCOUNTING_STATE_DISABLED
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV0000_CTRL_CMD_GPUACCT_SET_ACCOUNTING_STATE (0xb01) /* finn: Evaluated from "(FINN_NV01_ROOT_GPUACCT_INTERFACE_ID << 8) | NV0000_CTRL_GPUACCT_SET_ACCOUNTING_STATE_PARAMS_MESSAGE_ID" */
+
+/* Possible values of persistentSwState */
+#define NV0000_CTRL_GPU_ACCOUNTING_STATE_ENABLED (0x00000000)
+#define NV0000_CTRL_GPU_ACCOUNTING_STATE_DISABLED (0x00000001)
+
+#define NV0000_CTRL_GPUACCT_SET_ACCOUNTING_STATE_PARAMS_MESSAGE_ID (0x1U)
+
+typedef struct NV0000_CTRL_GPUACCT_SET_ACCOUNTING_STATE_PARAMS {
+ NvU32 gpuId;
+ NvU32 pid;
+ NvU32 newState;
+} NV0000_CTRL_GPUACCT_SET_ACCOUNTING_STATE_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPUACCT_GET_ACCOUNTING_STATE
+ *
+ * This command is used to get the current state of GPU accounting.
+ *
+ * gpuId
+ * This parameter should specify a valid GPU ID value. Refer to the
+ * description of NV0000_CTRL_CMD_GPU_GET_ATTACHED_IDS for more
+ * information. If there is no GPU present with the specified ID,
+ * a status of NV_ERR_INVALID_ARGUMENT is returned.
+ * pid
+ * This input parameter specifies the process id of the process of which the
+ * accounting state needs to be queried.
+ * In case of VGX host, this parameter specifies VGPU plugin(VM) pid. This
+ * parameter is set only when this RM control is called from VGPU plugin,
+ * otherwise it is zero meaning the accounting state needs to be queried for
+ * the specified GPU.
+ * state
+ * This parameter returns a value indicating if per process GPU accounting
+ * is currently enabled or not for the specified GPU. See the
+ * description of NV0000_CTRL_CMD_GPU_SET_ACCOUNTING_STATE.
+ * Possible values are:
+ * NV0000_CTRL_GPU_ACCOUNTING_STATE_ENABLED
+ * NV0000_CTRL_GPU_ACCOUNTING_STATE_DISABLED
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV0000_CTRL_CMD_GPUACCT_GET_ACCOUNTING_STATE (0xb02) /* finn: Evaluated from "(FINN_NV01_ROOT_GPUACCT_INTERFACE_ID << 8) | NV0000_CTRL_GPUACCT_GET_ACCOUNTING_STATE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPUACCT_GET_ACCOUNTING_STATE_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV0000_CTRL_GPUACCT_GET_ACCOUNTING_STATE_PARAMS {
+ NvU32 gpuId;
+ NvU32 pid;
+ NvU32 state;
+} NV0000_CTRL_GPUACCT_GET_ACCOUNTING_STATE_PARAMS;
+
+/*
+ * NV0000_CTRL_GPUACCT_GET_PROC_ACCOUNTING_INFO_PARAMS
+ *
+ * This command returns GPU accounting data for the process.
+ *
+ * gpuId
+ * This parameter should specify a valid GPU ID value. Refer to the
+ * description of NV0000_CTRL_CMD_GPU_GET_ATTACHED_IDS for more
+ * information. If there is no GPU present with the specified ID,
+ * a status of NV_ERR_INVALID_ARGUMENT is returned.
+ * pid
+ * This parameter specifies the PID of the process for which information is
+ * to be queried.
+ * In case of VGX host, this parameter specifies VGPU plugin(VM) pid inside
+ * which the subPid is running. This parameter is set to VGPU plugin pid
+ * when this RM control is called from VGPU plugin.
+ * subPid
+ * In case of VGX host, this parameter specifies the PID of the process for
+ * which information is to be queried. In other cases, it is zero.
+ * gpuUtil
+ * This parameter returns the average GR utilization during the process's
+ * lifetime.
+ * fbUtil
+ * This parameter returns the average FB bandwidth utilization during the
+ * process's lifetime.
+ * maxFbUsage
+ * This parameter returns the maximum FB allocated (in bytes) by the process.
+ * startTime
+ * This parameter returns the time stamp value in micro seconds at the time
+ * process started utilizing GPU.
+ * stopTime
+ * This parameter returns the time stamp value in micro seconds at the time
+ * process stopped utilizing GPU.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+#define NV0000_CTRL_CMD_GPUACCT_GET_PROC_ACCOUNTING_INFO (0xb03) /* finn: Evaluated from "(FINN_NV01_ROOT_GPUACCT_INTERFACE_ID << 8) | NV0000_CTRL_GPUACCT_GET_PROC_ACCOUNTING_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPUACCT_GET_PROC_ACCOUNTING_INFO_PARAMS_MESSAGE_ID (0x3U)
+
+typedef struct NV0000_CTRL_GPUACCT_GET_PROC_ACCOUNTING_INFO_PARAMS {
+ NvU32 gpuId;
+ NvU32 pid;
+ NvU32 subPid;
+ NvU32 gpuUtil;
+ NvU32 fbUtil;
+ NV_DECLARE_ALIGNED(NvU64 maxFbUsage, 8);
+ NV_DECLARE_ALIGNED(NvU64 startTime, 8);
+ NV_DECLARE_ALIGNED(NvU64 endTime, 8);
+} NV0000_CTRL_GPUACCT_GET_PROC_ACCOUNTING_INFO_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPUACCT_GET_ACCOUNTING_PIDS
+ *
+ * This command is used to get the PIDS of processes with accounting
+ * information in the driver.
+ *
+ * gpuId
+ * This parameter should specify a valid GPU ID value. Refer to the
+ * description of NV0000_CTRL_CMD_GPU_GET_ATTACHED_IDS for more
+ * information. If there is no GPU present with the specified ID,
+ * a status of NV_ERR_INVALID_ARGUMENT is returned.
+ * pid
+ * This input parameter specifies the process id of the process of which the
+ * information needs to be queried.
+ * In case of VGX host, this parameter specifies VGPU plugin(VM) pid. This
+ * parameter is set only when this RM control is called from VGPU plugin,
+ * otherwise it is zero meaning get the pid list of the all the processes
+ * running on the specified GPU.
+ * pidTbl
+ * This parameter returns the table of all PIDs for which driver has
+ * accounting info.
+ * pidCount
+ * This parameter returns the number of entries in the PID table.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV0000_CTRL_CMD_GPUACCT_GET_ACCOUNTING_PIDS (0xb04) /* finn: Evaluated from "(FINN_NV01_ROOT_GPUACCT_INTERFACE_ID << 8) | NV0000_CTRL_GPUACCT_GET_ACCOUNTING_PIDS_PARAMS_MESSAGE_ID" */
+
+/* max size of pidTable */
+#define NV0000_GPUACCT_PID_MAX_COUNT 4000
+
+#define NV0000_CTRL_GPUACCT_GET_ACCOUNTING_PIDS_PARAMS_MESSAGE_ID (0x4U)
+
+typedef struct NV0000_CTRL_GPUACCT_GET_ACCOUNTING_PIDS_PARAMS {
+ NvU32 gpuId;
+ NvU32 pid;
+ NvU32 pidTbl[NV0000_GPUACCT_PID_MAX_COUNT];
+ NvU32 pidCount;
+} NV0000_CTRL_GPUACCT_GET_ACCOUNTING_PIDS_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPUACCT_CLEAR_ACCOUNTING_DATA
+ *
+ * This command is used to clear previously collected GPU accounting data. This
+ * will have no affect on data for the running processes, accounting data for
+ * these processes will not be cleared and will still be logged for these
+ * processes. In order to clear ALL accounting data, accounting needs to be
+ * disabled using NV0000_CTRL_CMD_GPUACCT_SET_ACCOUNTING_STATE before executing
+ * this command.
+ *
+ * gpuId
+ * This parameter should specify a valid GPU ID value. Refer to the
+ * description of NV0000_CTRL_CMD_GPU_GET_ATTACHED_IDS for more
+ * information. If there is no GPU present with the specified ID,
+ * a status of NV_ERR_INVALID_ARGUMENT is returned.
+ * pid
+ * This input parameter specifies the process id of the process for which
+ * the accounting data needs to be cleared.
+ * In case of VGX host, this parameter specifies VGPU plugin(VM) pid for
+ * which the accounting data needs to be cleared. This parameter is set only
+ * when this RM control is called from VGPU plugin, otherwise it is zero
+ * meaning clear the accounting data of processes running on baremetal
+ * system.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_STATE
+ */
+
+#define NV0000_CTRL_CMD_GPUACCT_CLEAR_ACCOUNTING_DATA (0xb05) /* finn: Evaluated from "(FINN_NV01_ROOT_GPUACCT_INTERFACE_ID << 8) | NV0000_CTRL_GPUACCT_CLEAR_ACCOUNTING_DATA_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPUACCT_CLEAR_ACCOUNTING_DATA_PARAMS_MESSAGE_ID (0x5U)
+
+typedef struct NV0000_CTRL_GPUACCT_CLEAR_ACCOUNTING_DATA_PARAMS {
+ NvU32 gpuId;
+ NvU32 pid;
+} NV0000_CTRL_GPUACCT_CLEAR_ACCOUNTING_DATA_PARAMS;
+
+/*
+ * NV0000_CTRL_GPUACCT_GET_PROC_ACCOUNTING_INFO_V2_PARAMS
+ *
+ * This command returns GPU accounting data (V2) for the process.
+ *
+ * gpuId
+ * This parameter should specify a valid GPU ID value. Refer to the
+ * description of NV0000_CTRL_CMD_GPU_GET_ATTACHED_IDS for more
+ * information. If there is no GPU present with the specified ID,
+ * a status of NV_ERR_INVALID_ARGUMENT is returned.
+ * pid
+ * This parameter specifies the PID of the process for which information is
+ * to be queried.
+ * In case of VGX host, this parameter specifies VGPU plugin(VM) pid inside
+ * which the subPid is running. This parameter is set to VGPU plugin pid
+ * when this RM control is called from VGPU plugin.
+ * subPid
+ * In case of VGX host, this parameter specifies the PID of the process for
+ * which information is to be queried. In other cases, it is zero.
+ * gpuUtil
+ * This parameter returns the average GR utilization during the process's
+ * lifetime.
+ * fbUtil
+ * This parameter returns the average FB bandwidth utilization during the
+ * process's lifetime.
+ * sampleCount
+ * This parameter returns the samples count during the process's lifetime.
+ * maxFbUsage
+ * This parameter returns the maximum FB allocated (in bytes) by the process.
+ * startTime
+ * This parameter returns the time stamp value in micro seconds at the time
+ * process started utilizing GPU.
+ * stopTime
+ * This parameter returns the time stamp value in micro seconds at the time
+ * process stopped utilizing GPU.
+ * sumGpuUtil
+ * This parameter returns the sum of GR utilization during the process's
+ * lifetime.
+ * sumFbUtil
+ * This parameter returns the sum of FB bandwidth utilization during the
+ * process's lifetime.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+#define NV0000_CTRL_CMD_GPUACCT_GET_PROC_ACCOUNTING_INFO_V2 (0xb06) /* finn: Evaluated from "(FINN_NV01_ROOT_GPUACCT_INTERFACE_ID << 8) | NV0000_CTRL_GPUACCT_GET_PROC_ACCOUNTING_INFO_V2_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPUACCT_GET_PROC_ACCOUNTING_INFO_V2_PARAMS_MESSAGE_ID (0x6U)
+
+typedef struct NV0000_CTRL_GPUACCT_GET_PROC_ACCOUNTING_INFO_V2_PARAMS {
+ NvU32 gpuId;
+ NvU32 pid;
+ NvU32 subPid;
+ NvU32 gpuUtil;
+ NvU32 fbUtil;
+ NvU32 sampleCount;
+ NV_DECLARE_ALIGNED(NvU64 maxFbUsage, 8);
+ NV_DECLARE_ALIGNED(NvU64 startTime, 8);
+ NV_DECLARE_ALIGNED(NvU64 endTime, 8);
+ NV_DECLARE_ALIGNED(NvU64 sumGpuUtil, 8);
+ NV_DECLARE_ALIGNED(NvU64 sumFbUtil, 8);
+} NV0000_CTRL_GPUACCT_GET_PROC_ACCOUNTING_INFO_V2_PARAMS;
+
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gsync.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gsync.h
new file mode 100644
index 0000000..fae2cf9
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000gsync.h
@@ -0,0 +1,101 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2006-2015 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000gsync.finn
+//
+
+#include "ctrl/ctrl0000/ctrl0000base.h"
+
+#include "ctrl/ctrlxxxx.h"
+#include "class/cl30f1.h"
+/* NV01_ROOT (client) system controller control commands and parameters */
+
+/*
+ * NV0000_CTRL_CMD_GSYNC_GET_ATTACHED_IDS
+ *
+ * This command returns a table of attached gsyncId values.
+ * The table is NV0000_CTRL_GSYNC_MAX_ATTACHED_GSYNCS entries in size.
+ *
+ * gsyncIds[]
+ * This parameter returns the table of attached gsync IDs.
+ * The gsync ID is an opaque platform-dependent value that
+ * can be used with the NV0000_CTRL_CMD_GSYNC_GET_ID_INFO command to
+ * retrieve additional information about the gsync device.
+ * The valid entries in gsyncIds[] are contiguous, with a value
+ * of NV0000_CTRL_GSYNC_INVALID_ID indicating the invalid entries.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_OPERATING_SYSTEM
+ */
+#define NV0000_CTRL_CMD_GSYNC_GET_ATTACHED_IDS (0x301) /* finn: Evaluated from "(FINN_NV01_ROOT_GSYNC_INTERFACE_ID << 8) | NV0000_CTRL_GSYNC_GET_ATTACHED_IDS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GSYNC_GET_ATTACHED_IDS_PARAMS_MESSAGE_ID (0x1U)
+
+typedef struct NV0000_CTRL_GSYNC_GET_ATTACHED_IDS_PARAMS {
+ NvU32 gsyncIds[NV30F1_MAX_GSYNCS];
+} NV0000_CTRL_GSYNC_GET_ATTACHED_IDS_PARAMS;
+
+/* this value marks entries in gsyncIds[] as invalid */
+#define NV0000_CTRL_GSYNC_INVALID_ID (0xffffffff)
+
+/*
+ * NV0000_CTRL_CMD_GSYNC_GET_ID_INFO
+ *
+ * This command returns gsync instance information for the
+ * specified gsync device.
+ *
+ * gsyncId
+ * This parameter should specify a valid gsync ID value.
+ * If there is no gsync present with the specified ID, a
+ * status of NV_ERR_INVALID_ARGUMENT is returned.
+ * gsyncFlags
+ * This parameter returns the current state of the gsync device.
+ * gsyncInstance
+ * This parameter returns the instance number associated with the
+ * specified gsync. This value can be used to instantiate
+ * a reference to the gsync using one of the NV30_GSYNC
+ * classes.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+#define NV0000_CTRL_CMD_GSYNC_GET_ID_INFO (0x302) /* finn: Evaluated from "(FINN_NV01_ROOT_GSYNC_INTERFACE_ID << 8) | NV0000_CTRL_GSYNC_GET_ID_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GSYNC_GET_ID_INFO_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV0000_CTRL_GSYNC_GET_ID_INFO_PARAMS {
+ NvU32 gsyncId;
+ NvU32 gsyncFlags;
+ NvU32 gsyncInstance;
+} NV0000_CTRL_GSYNC_GET_ID_INFO_PARAMS;
+
+/* _ctrl0000gsync_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000nvd.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000nvd.h
new file mode 100644
index 0000000..92a2ba5
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000nvd.h
@@ -0,0 +1,637 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2005-2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000nvd.finn
+//
+
+#include "ctrl/ctrl0000/ctrl0000base.h"
+
+#include "ctrl/ctrlxxxx.h"
+/* NV01_ROOT (client) nvd control commands and parameters */
+
+/*
+ * NV0080_CTRL_NVD_DUMP_COMPONENT
+ *
+ * The following dump components are used to describe legal ranges in
+ * commands below:
+ *
+ * NV0080_CTRL_CMD_NVD_DUMP_COMPONENT_SYS
+ * This is the system dump component.
+ * NV0080_CTRL_CMD_NVD_DUMP_COMPONENT_NVLOG
+ * This is the nvlog dump component.
+ * NV0080_CTRL_CMD_NVD_DUMP_COMPONENT_RESERVED
+ * This component is reserved.
+ *
+ * See nvdump.h for more information on dump component values.
+ */
+#define NV0000_CTRL_NVD_DUMP_COMPONENT_SYS (0x400)
+#define NV0000_CTRL_NVD_DUMP_COMPONENT_NVLOG (0x800)
+#define NV0000_CTRL_NVD_DUMP_COMPONENT_RESERVED (0xB00)
+
+/*
+ * NV0000_CTRL_CMD_NVD_GET_DUMP_SIZE
+ *
+ * This command gets the expected dump size of a particular system
+ * dump component. Note that events that occur between this command
+ * and a later NV0000_CTRL_CMD_NVD_GET_DUMP command could alter the size of
+ * the buffer required.
+ *
+ * component
+ * This parameter specifies the system dump component for which the
+ * dump size is desired. Legal values for this parameter must
+ * be greater than or equal to NV0000_CTRL_NVD_DUMP_COMPONENT_SYS and
+ * less than NV0000_CTRL_NVD_GET_DUMP_COMPONENT_NVLOG.
+ * size
+ * This parameter returns the expected size in bytes. The maximum
+ * value of this call is NV0000_CTRL_NVD_MAX_DUMP_SIZE.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT if components are invalid.
+ */
+
+#define NV0000_CTRL_CMD_NVD_GET_DUMP_SIZE (0x601) /* finn: Evaluated from "(FINN_NV01_ROOT_NVD_INTERFACE_ID << 8) | NV0000_CTRL_NVD_GET_DUMP_SIZE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_NVD_GET_DUMP_SIZE_PARAMS_MESSAGE_ID (0x1U)
+
+typedef struct NV0000_CTRL_NVD_GET_DUMP_SIZE_PARAMS {
+ NvU32 component;
+ NvU32 size;
+} NV0000_CTRL_NVD_GET_DUMP_SIZE_PARAMS;
+
+/* Max size that a GET_DUMP_SIZE_PARAMS call can return */
+#define NV0000_CTRL_NVD_MAX_DUMP_SIZE (1000000)
+
+/*
+ * NV0000_CTRL_CMD_NVD_GET_DUMP
+ *
+ * This command gets a dump of a particular system dump component. If triggers
+ * is non-zero, the command waits for the trigger to occur before it returns.
+ *
+ * pBuffer
+ * This parameter points to the buffer for the data.
+ * component
+ * This parameter specifies the system dump component for which the
+ * dump is to be retrieved. Legal values for this parameter must
+ * be greater than or equal to NV0000_CTRL_NVD_DUMP_COMPONENT_SYS and
+ * less than NV0000_CTRL_NVD_GET_DUMP_COMPONENT_NVLOG.
+ * size
+ * On entry, this parameter specifies the maximum length for
+ * the returned data. On exit, it specifies the number of bytes
+ * returned.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NVOS_ERROR_INVALID_ARGUMENT if components are invalid.
+ * NVOS_ERROR_INVALID_ADDRESS if pBuffer is invalid
+ * NVOS_ERROR_INVALID_???? if the buffer was too small
+ */
+#define NV0000_CTRL_CMD_NVD_GET_DUMP (0x602) /* finn: Evaluated from "(FINN_NV01_ROOT_NVD_INTERFACE_ID << 8) | NV0000_CTRL_NVD_GET_DUMP_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_NVD_GET_DUMP_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV0000_CTRL_NVD_GET_DUMP_PARAMS {
+ NV_DECLARE_ALIGNED(NvP64 pBuffer, 8);
+ NvU32 component;
+ NvU32 size;
+} NV0000_CTRL_NVD_GET_DUMP_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_NVD_GET_TIMESTAMP
+ *
+ * This command returns the current value of the timestamp used
+ * by the RM in NvDebug dumps. It is provided to keep the RM and NvDebug
+ * clients on the same time base.
+ *
+ * cpuClkId
+ * See also NV2080_CTRL_CMD_TIMER_GET_GPU_CPU_TIME_CORRELATION_INFO
+ * This parameter specifies the source of the CPU clock. Legal values for
+ * this parameter include:
+ * NV0000_NVD_CPU_TIME_CLK_ID_DEFAULT and NV0000_NVD_CPU_TIME_CLK_ID_OSTIME
+ * This clock id will provide real time in microseconds since 00:00:00 UTC on January 1, 1970.
+ * It is calculated as follows:
+ * (seconds * 1000000) + uSeconds
+ * NV0000_NVD_CPU_TIME_CLK_ID_PLATFORM_API
+ * This clock id will provide time stamp that is constant-rate, high
+ * precision using platform API that is also available in the user mode.
+ * NV0000_NVD_CPU_TIME_CLK_ID_TSC
+ * This clock id will provide time stamp using CPU's time stamp counter.
+ *
+ * timestamp
+ * Retrieved timestamp
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_NOT_SUPPORTED
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV0000_NVD_CPU_TIME_CLK_ID_DEFAULT (0x00000000)
+#define NV0000_NVD_CPU_TIME_CLK_ID_OSTIME (0x00000001)
+#define NV0000_NVD_CPU_TIME_CLK_ID_TSC (0x00000002)
+#define NV0000_NVD_CPU_TIME_CLK_ID_PLATFORM_API (0x00000003)
+
+#define NV0000_CTRL_CMD_NVD_GET_TIMESTAMP (0x603) /* finn: Evaluated from "(FINN_NV01_ROOT_NVD_INTERFACE_ID << 8) | NV0000_CTRL_NVD_GET_TIMESTAMP_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_NVD_GET_TIMESTAMP_PARAMS_MESSAGE_ID (0x3U)
+
+typedef struct NV0000_CTRL_NVD_GET_TIMESTAMP_PARAMS {
+ NV_DECLARE_ALIGNED(NvU64 timestamp, 8);
+ NvU8 cpuClkId;
+} NV0000_CTRL_NVD_GET_TIMESTAMP_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_NVD_GET_NVLOG_INFO
+ *
+ * This command gets the current state of the NvLog buffer system.
+ *
+ * component (in)
+ * This parameter specifies the system dump component for which the
+ * NvLog info is desired. Legal values for this parameter must
+ * be greater than or equal to NV0000_CTRL_NVD_DUMP_COMPONENT_NVLOG and
+ * less than NV0000_CTRL_NVD_DUMP_COMPONENT_RESERVED.
+ * version (out)
+ * This parameter returns the version of the Nvlog subsystem.
+ * runtimeSizes (out)
+ * This parameter returns the array of sizes for all supported printf
+ * specifiers. This information is necessary to know how many bytes
+ * to decode when given a certain specifier (such as %d).
+ * The following describes the contents of each array entry:
+ * NV0000_CTRL_NVD_RUNTIME_SIZE_UNUSED
+ * This array entry has special meaning and is unused in the
+ * runtimeSizes array.
+ * NV0000_CTRL_NVD_RUNTIME_SIZE_INT
+ * This array entry returns the size of integer types for use in
+ * interpreting the %d, %u, %x, %X, %i, %o specifiers.
+ * NV0000_CTRL_NVD_RUNTIME_SIZE_LONG_LONG
+ * This array entry returns the size of long long integer types for
+ * using in interpreting the %lld, %llu, %llx, %llX, %lli, %llo
+ * specifiers.
+ * NV0000_CTRL_NVD_RUNTIME_SIZE_STRING
+ * This array entry returns zero as strings are not allowed.
+ * NV0000_CTRL_NVD_RUNTIME_SIZE_PTR
+ * This array entry returns the size of the pointer type for use
+ * in interpreting the %p specifier.
+ * NV0000_CTRL_NVD_RUNTIME_SIZE_CHAR
+ * This array entry returns the size of the char type for use in
+ * intpreting the %c specifier.
+ * NV0000_CTRL_NVD_RUNTIME_SIZE_FLOAT
+ * This array entry returns the size of the float types for use in
+ * in interpreting the %f, %g, %e, %F, %G, %E specifiers.
+ * All remaining entries are reserved and return 0.
+ * printFlags (out)
+ * This parameter returns the flags of the NvLog system.
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_BUFFER_FLAGS
+ * See NV0000_CTRL_CMD_NVD_GET_NVLOG_BUF_INFO for more details.
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_BUFFER_SIZE
+ * This field returns the buffer size in KBytes. A value of zero
+ * is returned when logging is disabled.
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_TIMESTAMP
+ * This field returns the format of the timestamp. Legal values
+ * for this parameter include:
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_TIMESTAMP_NONE
+ * This value indicates no timestamp.
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_TIMESTAMP_32BIT
+ * This value indicates a 32-bit timestamp.
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_TIMESTAMP_64BIT
+ * This value indicates a 64-bit timestamp.
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_TIMESTAMP_32BIT_DIFF
+ * This value indicates a 32-bit differential timestamp.
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_RESERVED
+ * This field is reserved.
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_RUNTIME_LEVEL
+ * This field returns the lowest debug level for which logging
+ * is enabled by default.
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_INIT
+ * This field indicates if logging for the specified component has
+ * been initialized. Legal values for this parameter include:
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_INIT_NO
+ * This value indicates NvLog is uninitialized.
+ * NV0000_CTRL_NVD_NVLOG_PRINT_FLAGS_INIT_YES
+ * This value indicates NvLog has been initialized.
+ * signature (out)
+ * This parameter is the signature of the database
+ * required to decode these logs, autogenerated at buildtime.
+ * bufferTags (out)
+ * This parameter identifies the buffer tag used during allocation
+ * or a value of '0' if buffer is unallocated for each possible
+ * buffer.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT if components are invalid.
+ */
+#define NV0000_CTRL_CMD_NVD_GET_NVLOG_INFO (0x604) /* finn: Evaluated from "(FINN_NV01_ROOT_NVD_INTERFACE_ID << 8) | NV0000_CTRL_NVD_GET_NVLOG_INFO_PARAMS_MESSAGE_ID" */
+
+/* maximum size of the runtimeSizes array */
+#define NV0000_CTRL_NVD_MAX_RUNTIME_SIZES (16)
+
+/* size of signature parameter */
+#define NV0000_CTRL_NVD_SIGNATURE_SIZE (4)
+
+/* Maximum number of buffers */
+#define NV0000_CTRL_NVD_MAX_BUFFERS (3840)
+
+#define NV0000_CTRL_NVD_GET_NVLOG_INFO_PARAMS_MESSAGE_ID (0x4U)
+
+typedef struct NV0000_CTRL_NVD_GET_NVLOG_INFO_PARAMS {
+ NvU32 component;
+ NvU32 version;
+ NvU8 runtimeSizes[NV0000_CTRL_NVD_MAX_RUNTIME_SIZES];
+ NvU32 printFlags;
+ NvU32 signature[NV0000_CTRL_NVD_SIGNATURE_SIZE];
+ NvU32 bufferTags[NV0000_CTRL_NVD_MAX_BUFFERS];
+} NV0000_CTRL_NVD_GET_NVLOG_INFO_PARAMS;
+
+/* runtimeSize array indices */
+#define NV0000_CTRL_NVD_RUNTIME_SIZE_UNUSED (0)
+#define NV0000_CTRL_NVD_RUNTIME_SIZE_INT (1)
+#define NV0000_CTRL_NVD_RUNTIME_SIZE_LONG_LONG (2)
+#define NV0000_CTRL_NVD_RUNTIME_SIZE_STRING (3)
+#define NV0000_CTRL_NVD_RUNTIME_SIZE_PTR (4)
+#define NV0000_CTRL_NVD_RUNTIME_SIZE_CHAR (5)
+#define NV0000_CTRL_NVD_RUNTIME_SIZE_FLOAT (6)
+
+/* printFlags fields and values */
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_BUFFER_INFO 7:0
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_BUFFER_SIZE 23:8
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_BUFFER_SIZE_DISABLE (0x00000000)
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_BUFFER_SIZE_DEFAULT (0x00000004)
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_RUNTIME_LEVEL 28:25
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_TIMESTAMP 30:29
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_TIMESTAMP_NONE (0x00000000)
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_TIMESTAMP_32 (0x00000001)
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_TIMESTAMP_64 (0x00000002)
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_TIMESTAMP_32_DIFF (0x00000003)
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_INITED 31:31
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_INITED_NO (0x00000000)
+#define NV0000_CTRL_NVD_NVLOG_INFO_PRINTFLAGS_INITED_YES (0x00000001)
+
+/*
+ * NV0000_CTRL_CMD_NVD_GET_NVLOG_BUFFER_INFO
+ *
+ * This command gets the current state of a specific buffer in the NvLog
+ * buffer system.
+ *
+ * component (in)
+ * This parameter specifies the system dump component for which the
+ * NvLog info is desired. Legal values for this parameter must
+ * be greater than or equal to NV0000_CTRL_NVD_DUMP_COMPONENT_NVLOG and
+ * less than NV0000_CTRL_NVD_DUMP_COMPONENT_RESERVED.
+ * buffer (in/out)
+ * This parameter specifies the buffer number from which to retrieve the
+ * buffer information. Valid values are 0 to (NV0000_CTRL_NVD_MAX_BUFFERS - 1).
+ * If the buffer is specified using the 'tag' parameter, the buffer
+ * number is returned through this one.
+ * tag (in/out)
+ * If this parameter is non-zero, it will be used to specify the buffer,
+ * instead of 'buffer' parameter. It returns the tag of the specified buffer
+ * size (out)
+ * This parameter returns the size of the specified buffer.
+ * flags (in/out)
+ * On input, this parameter sets the following behavior:
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_PAUSE
+ * This flag controls if the nvlog system should pause output
+ * to this buffer.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_PAUSE_YES
+ * The buffer should be paused until another command
+ * unpauses this buffer.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_PAUSE_NO
+ * The buffer should not be paused.
+ * On output, this parameter returns the flags of a specified buffer:
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_DISABLED
+ * This flag indicates if logging to the specified buffer is
+ * disabled or not.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_TYPE
+ * This flag indicates the buffer logging type:
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_TYPE_RING
+ * This type value indicates logging to the buffer wraps.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_TYPE_NOWRAP
+ * This type value indicates logging to the buffer does not wrap.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_EXPANDABLE
+ * This flag indicates if the buffer size is expandable.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_EXPANDABLE_NO
+ * The buffer is not expandable.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_EXPANDABLE_YES
+ * The buffer is expandable.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_NON_PAGED
+ * This flag indicates if the buffer occupies non-paged or pageable
+ * memory.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_NON_PAGED_NO
+ * The buffer is in pageable memory.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_NON_PAGES_YES
+ * The buffer is in non-paged memory.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_LOCKING
+ * This flag indicates the locking mode for the specified buffer.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_LOCKING_NONE
+ * This locking value indicates that no locking is performed. This
+ * locking mode is typically used for inherently single-threaded
+ * buffers.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_LOCKING_STATE
+ * This locking value indicates that the buffer is locked only
+ * during state changes and that memory copying is unlocked. This
+ * mode should not be used tiny buffers that overflow every write
+ * or two.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_LOCKING_FULL
+ * This locking value indicates the buffer is locked for the full
+ * duration of the write.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_OCA
+ * This flag indicates if the buffer is stored in OCA dumps.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_OCA_NO
+ * The buffer is not included in OCA dumps.
+ * NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_OCA_YES
+ * The buffer is included in OCA dumps.
+ * pos (out)
+ * This parameter is the current position of the tracker/cursor in the
+ * buffer.
+ * overflow (out)
+ * This parameter is the number of times the buffer has overflowed.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT if components are invalid.
+ */
+
+#define NV0000_CTRL_CMD_NVD_GET_NVLOG_BUFFER_INFO (0x605) /* finn: Evaluated from "(FINN_NV01_ROOT_NVD_INTERFACE_ID << 8) | NV0000_CTRL_NVD_GET_NVLOG_BUFFER_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_NVD_GET_NVLOG_BUFFER_INFO_PARAMS_MESSAGE_ID (0x5U)
+
+typedef struct NV0000_CTRL_NVD_GET_NVLOG_BUFFER_INFO_PARAMS {
+ NvU32 component;
+ NvU32 buffer;
+ NvU32 tag;
+ NvU32 size;
+ NvU32 flags;
+ NvU32 pos;
+ NvU32 overflow;
+} NV0000_CTRL_NVD_GET_NVLOG_BUFFER_INFO_PARAMS;
+
+/* flags fields and values */
+/* input */
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_PAUSE 0:0
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_PAUSE_NO (0x00000000)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_PAUSE_YES (0x00000001)
+
+/* output */
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_DISABLED 0:0
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_DISABLED_NO (0x00000000)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_DISABLED_YES (0x00000001)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_TYPE 1:1
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_TYPE_RING (0x00000000)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_TYPE_NOWRAP (0x00000001)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_EXPANDABLE 2:2
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_EXPANDABLE_NO (0x00000000)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_EXPANDABLE_YES (0x00000001)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_NONPAGED 3:3
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_NONPAGED_NO (0x00000000)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_NONPAGED_YES (0x00000001)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_LOCKING 5:4
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_LOCKING_NONE (0x00000000)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_LOCKING_STATE (0x00000001)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_LOCKING_FULL (0x00000002)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_OCA 6:6
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_OCA_NO (0x00000000)
+#define NV0000_CTRL_NVD_NVLOG_BUFFER_INFO_FLAGS_OCA_YES (0x00000001)
+
+/*
+ * NV0000_CTRL_CMD_NVD_GET_NVLOG
+ *
+ * This command retrieves the specified dump block from the specified
+ * NvLog buffer. To retrieve the entire buffer, the caller should start
+ * with blockNum set to 0 and continue issuing calls with an incremented
+ * blockNum until the returned size value is less than
+ * NV0000_CTRL_NVD_NVLOG_MAX_BLOCK_SIZE.
+ *
+ * component (in)
+ * This parameter specifies the system dump component for which the NvLog
+ * dump operation is to be directed. Legal values for this parameter
+ * must be greater than or equal to NV0000_CTRL_NVD_DUMP_COMPONENT_NVLOG
+ * and less than NV0000_CTRL_NVD_DUMP_COMPONENT_RESERVED.
+ * buffer (in)
+ * This parameter specifies the NvLog buffer to dump.
+ * blockNum (in)
+ * This parameter specifies the block number for which data is to be
+ * dumped.
+ * size (in/out)
+ * On entry, this parameter specifies the maximum length in bytes for
+ * the returned data (should be set to NV0000_CTRL_NVLOG_MAX_BLOCK_SIZE).
+ * On exit, it specifies the number of bytes returned.
+ * data (out)
+ * This parameter returns the data for the specified block. The size
+ * patameter values indicates the number of valid bytes returned.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NVOS_ERROR_INVALID_ARGUMENT if components are invalid.
+ */
+#define NV0000_CTRL_CMD_NVD_GET_NVLOG (0x606) /* finn: Evaluated from "(FINN_NV01_ROOT_NVD_INTERFACE_ID << 8) | NV0000_CTRL_NVD_GET_NVLOG_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_NVLOG_MAX_BLOCK_SIZE (4000)
+
+#define NV0000_CTRL_NVD_GET_NVLOG_PARAMS_MESSAGE_ID (0x6U)
+
+typedef struct NV0000_CTRL_NVD_GET_NVLOG_PARAMS {
+ NvU32 component;
+ NvU32 buffer;
+ NvU32 blockNum;
+ NvU32 size;
+ NvU8 data[NV0000_CTRL_NVLOG_MAX_BLOCK_SIZE];
+} NV0000_CTRL_NVD_GET_NVLOG_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_NVD_GET_RCERR_RPT
+ *
+ * This command returns block of registers that were recorded at the time
+ * of an RC error for the current process.
+ *
+ * reqIdx:
+ * [IN] the index of the report being requested.
+ * index rolls over to 0.
+ * if the requested index is not in the circular buffer, then no data is
+ * transferred & either NV_ERR_INVALID_INDEX (indicating the specified
+ * index is not in the table) is returned.
+ *
+ * rptIdx:
+ * [OUT] the index of the report being returned.
+ * if the requested index is not in the circular buffer, then the value is
+ * undefined, no data istransferred & NV_ERR_INVALID_INDEX is returned.
+ * if the the specified index is present, but does not meet the requested
+ * criteria (refer to the owner & processId fields). the rptIdx will be
+ * set to a value that does not match the reqIdx, and no data will be
+ * transferred. NV_ERR_INSUFFICIENT_PERMISSIONS is still returned.
+ *
+ * gpuTag:
+ * [OUT] id of the GPU whose data was collected.
+ *
+ * rptTimeInNs:
+ * [OUT] the timestamp for when the report was created.
+ *
+ * startIdx:
+ * [OUT] the index of the oldest start record for the first report that
+ * matches the specified criteria (refer to the owner & processId
+ * fields). If no records match the specified criteria, this value is
+ * undefined, the failure code NV_ERR_MISSING_TABLE_ENTRY will
+ * be returned, and no data will be transferred.
+ *
+ * endIdx:
+ * [OUT] the index of the newest end record for the most recent report that
+ * matches the specified criteria (refer to the owner & processId
+ * fields). If no records match the specified criteria, this value is
+ * undefined, the failure code NV_ERR_MISSING_TABLE_ENTRY will
+ * be returned, and no data will be transferred.
+ *
+ * rptType:
+ * [OUT] indicator of what data is in the report.
+ *
+ * flags
+ * [OUT] a set odf flags indicating attributes of the record
+ * NV0000_CTRL_CMD_NVD_RCERR_RPT_FLAGS_POS_FIRST -- indicates this is the first record of a report.
+ * NV0000_CTRL_CMD_NVD_RCERR_RPT_FLAGS_POS_LAST -- indicates this is the last record of the report.
+ * NV0000_CTRL_CMD_NVD_RCERR_RPT_FLAGS_RANGE_VALID -- indicates this is the response contains a valid
+* index range.
+ * Note, this may be set when an error is returned indicating a valid range was found, but event of
+ * the requested index was not.
+ * NV0000_CTRL_CMD_NVD_RCERR_RPT_FLAGS_DATA_VALID -- indicates this is the response contains valid data.
+ *
+ * rptCount:
+ * [OUT] number of entries returned in report.
+ *
+ * owner:
+ * [IN] Entries are only returned if they have the same owner as the specified owner or the specified
+ * owner Id is NV0000_CTRL_CMD_NVD_RPT_ANY_OWNER_ID.
+ * if the requested index is not owned by the specified owner, the rptIdx
+ * will be set to a value that does not match the reqIdx, and no data will
+ * be transferred. NV_ERR_INSUFFICIENT_PERMISSIONS is returned.
+ *
+ * processId:
+ * [IN] Deprecated
+ * report:
+ * [OUT] array of rptCount enum/value pair entries containing the data from the report.
+ * entries beyond rptCount are undefined.
+ *
+ *
+ * Possible status values returned are:
+ * NV_OK -- we found & transferred the requested record.
+ * NV_ERR_MISSING_TABLE_ENTRY -- we don't find any records that meet the criteria.
+ * NV_ERR_INVALID_INDEX -- the requested index was not found in the buffer.
+ * NV_ERR_INSUFFICIENT_PERMISSIONS -- the requested record was found, but it did not meet the criteria.
+ * NV_ERR_BUSY_RETRY -- We could not access the circular buffer.
+ *
+ */
+
+#define NV0000_CTRL_CMD_NVD_GET_RCERR_RPT (0x607) /* finn: Evaluated from "(FINN_NV01_ROOT_NVD_INTERFACE_ID << 8) | NV0000_CTRL_CMD_NVD_GET_RCERR_RPT_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_MAX_ENTRIES 200
+
+// report types
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_TYPE_TEST 0
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_TYPE_GRSTATUS 1
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_TYPE_GPCSTATUS 2
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_TYPE_MMU_FAULT_STATUS 3
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_TYPE_RC_ERROR 4
+
+// pseudo register enums attribute content
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_REG_EMPTY 0x00000000
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_REG_OVERFLOWED 0x00000001 // number of missed entries.
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_REG_MAX_PSEDO_REG 0x0000000f
+
+
+
+// Flags Definitions
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_FLAGS_POS_FIRST 0x00000001 // indicates this is the first record of a report.
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_FLAGS_POS_LAST 0x00000002 // indicates this is the last record of the report.
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_FLAGS_RANGE_VALID 0x00000004 // indicates this is the response contains a valid range
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_FLAGS_DATA_VALID 0x00000008 // indicates this is the response contains valid data
+
+
+// Attribute Definitions
+#define TPC_REG_ATTR(gpcId, tpcId) ((gpcId << 8) | (tpcId))
+#define ROP_REG_ATTR(gpcId, ropId) ((gpcId << 8) | (ropId))
+#define SM_REG_ATTR(gpcId, tpcId, smId) ((((gpcId) << 16) | ((tpcId) << 8)) | (smId))
+
+// Process Id Pseudo values
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_ANY_PROCESS_ID 0x00000000 // get report for any process ID
+
+#define NV0000_CTRL_CMD_NVD_RCERR_RPT_ANY_OWNER_ID 0xFFFFFFFF // get report for any owner ID
+
+
+typedef struct NV0000_CTRL_CMD_NVD_RCERR_RPT_REG_ENTRY {
+ NvU32 tag;
+ NvU32 value;
+ NvU32 attribute;
+} NV0000_CTRL_CMD_NVD_RCERR_RPT_REG_ENTRY;
+
+#define NV0000_CTRL_CMD_NVD_GET_RCERR_RPT_PARAMS_MESSAGE_ID (0x7U)
+
+typedef struct NV0000_CTRL_CMD_NVD_GET_RCERR_RPT_PARAMS {
+ NvU16 reqIdx;
+ NvU16 rptIdx;
+ NvU32 GPUTag;
+ NvU32 rptTime; // time in seconds since 1/1/1970
+ NvU16 startIdx;
+ NvU16 endIdx;
+ NvU16 rptType;
+ NvU32 flags;
+ NvU16 rptCount;
+ NvU32 owner; // indicating whose reports to get
+ NvU32 processId; // deprecated field
+
+ NV0000_CTRL_CMD_NVD_RCERR_RPT_REG_ENTRY report[NV0000_CTRL_CMD_NVD_RCERR_RPT_MAX_ENTRIES];
+} NV0000_CTRL_CMD_NVD_GET_RCERR_RPT_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_NVD_GET_DPC_ISR_TS
+ *
+ * This command returns the time stamp information that are collected from
+ * the execution of various DPCs/ISRs. This time stamp information is for
+ * debugging purposes only and would help with analyzing regressions and
+ * latencies for DPC/ISR execution times.
+ *
+ * tsBufferSize
+ * This field specifies the size of the buffer that the caller allocates.
+ * tsBuffer
+ * THis field specifies a pointer in the callers address space to the
+ * buffer into which the timestamp info on DPC/ISR is to be returned.
+ * This buffer must at least be as big as tsBufferSize.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_OPERATING_SYSTEM
+ */
+#define NV0000_CTRL_CMD_NVD_GET_DPC_ISR_TS (0x608) /* finn: Evaluated from "(FINN_NV01_ROOT_NVD_INTERFACE_ID << 8) | NV0000_CTRL_NVD_GET_DPC_ISR_TS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_NVD_GET_DPC_ISR_TS_PARAMS_MESSAGE_ID (0x8U)
+
+typedef struct NV0000_CTRL_NVD_GET_DPC_ISR_TS_PARAMS {
+ NvU32 tsBufferSize;
+ NV_DECLARE_ALIGNED(NvP64 pTSBuffer, 8);
+} NV0000_CTRL_NVD_GET_DPC_ISR_TS_PARAMS;
+
+/* _ctrl0000nvd_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000proc.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000proc.h
new file mode 100644
index 0000000..70ff0eb
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000proc.h
@@ -0,0 +1,98 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2014-2015 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000proc.finn
+//
+
+#include "ctrl/ctrl0000/ctrl0000base.h"
+#include "nvlimits.h"
+
+/*
+ * NV0000_CTRL_CMD_SET_SUB_PROCESS_ID
+ *
+ * Save the sub process ID and sub process name in client database
+ * subProcID
+ * Sub process ID
+ * subProcessName
+ * Sub process name
+ *
+ * In vGPU environment, sub process means the guest user/kernel process running
+ * within a single VM. It also refers to any sub process (or sub-sub process)
+ * within a parent process.
+ *
+ * Please refer to the wiki for more details about sub process concept: Resource_Server
+ *
+ * Possible return values are:
+ * NV_OK
+ */
+#define NV0000_CTRL_SET_SUB_PROCESS_ID_PARAMS_MESSAGE_ID (0x1U)
+
+typedef struct NV0000_CTRL_SET_SUB_PROCESS_ID_PARAMS {
+ NvU32 subProcessID;
+ char subProcessName[NV_PROC_NAME_MAX_LENGTH];
+} NV0000_CTRL_SET_SUB_PROCESS_ID_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_DISABLE_SUB_PROCESS_USERD_ISOLATION
+ *
+ * Disable sub process USERD isolation.
+ * bIsSubProcIsolated
+ * NV_TRUE to disable sub process USERD isolation
+ *
+ * USERD allocated by different domains should not be put into the same physical page.
+ * This provides the basic security isolation because a physical page is the unit of
+ * granularity at which OS can provide isolation between processes.
+ *
+ * GUEST_USER: USERD allocated by guest user process
+ * GUEST_KERNEL: USERD allocated by guest kernel process
+ * GUEST_INSECURE: USERD allocated by guest/kernel process,
+ * INSECURE means there is no isolation between guest user and guest kernel
+ * HOST_USER: USERD allocated by host user process
+ * HOST_KERNEL: USERD allocated by host kernel process
+ *
+ * When sub process USERD isolation is disabled, we won't distinguish USERD allocated by guest
+ * user and guest kernel. They all belong to the GUEST_INSECURE domain.
+ *
+ * Please refer to wiki for more details: RM_USERD_Isolation
+ *
+ * Possible return values are:
+ * NV_OK
+ */
+#define NV0000_CTRL_DISABLE_SUB_PROCESS_USERD_ISOLATION_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV0000_CTRL_DISABLE_SUB_PROCESS_USERD_ISOLATION_PARAMS {
+ NvBool bIsSubProcessDisabled;
+} NV0000_CTRL_DISABLE_SUB_PROCESS_USERD_ISOLATION_PARAMS;
+
+#define NV0000_CTRL_CMD_SET_SUB_PROCESS_ID (0x901) /* finn: Evaluated from "(FINN_NV01_ROOT_PROC_INTERFACE_ID << 8) | NV0000_CTRL_SET_SUB_PROCESS_ID_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CMD_DISABLE_SUB_PROCESS_USERD_ISOLATION (0x902) /* finn: Evaluated from "(FINN_NV01_ROOT_PROC_INTERFACE_ID << 8) | NV0000_CTRL_DISABLE_SUB_PROCESS_USERD_ISOLATION_PARAMS_MESSAGE_ID" */
+
+/* _ctrl0000proc_h_ */
+
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000syncgpuboost.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000syncgpuboost.h
new file mode 100644
index 0000000..1ca299f
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000syncgpuboost.h
@@ -0,0 +1,112 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2015-2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000syncgpuboost.finn
+//
+
+#include "ctrl/ctrl0000/ctrl0000base.h"
+
+#include "ctrl/ctrlxxxx.h"
+#include "nvtypes.h"
+#include "nvlimits.h"
+
+/* --------------------------- Macros ----------------------------------------*/
+// There are at least 2 GPUs in a sync group. Hence max is half of max devices.
+#define NV0000_SYNC_GPU_BOOST_MAX_GROUPS (0x10) /* finn: Evaluated from "((NV_MAX_DEVICES) >> 1)" */
+#define NV0000_SYNC_GPU_BOOST_INVALID_GROUP_ID 0xFFFFFFFF
+
+/*-------------------------Command Prototypes---------------------------------*/
+
+/*!
+ * Query whether SYNC GPU BOOST MANAGER is enabled or disabled.
+ */
+#define NV0000_CTRL_CMD_SYNC_GPU_BOOST_INFO (0xa01) /* finn: Evaluated from "(FINN_NV01_ROOT_SYNC_GPU_BOOST_INTERFACE_ID << 8) | NV0000_SYNC_GPU_BOOST_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_SYNC_GPU_BOOST_INFO_PARAMS_MESSAGE_ID (0x1U)
+
+typedef struct NV0000_SYNC_GPU_BOOST_INFO_PARAMS {
+ // [out] Specifies if Sync Gpu Boost Manager is enabled or not.
+ NvBool bEnabled;
+} NV0000_SYNC_GPU_BOOST_INFO_PARAMS;
+
+/*!
+ * Creates a Synchronized GPU-Boost Group (SGBG)
+ */
+#define NV0000_CTRL_CMD_SYNC_GPU_BOOST_GROUP_CREATE (0xa02) /* finn: Evaluated from "(FINN_NV01_ROOT_SYNC_GPU_BOOST_INTERFACE_ID << 8) | NV0000_SYNC_GPU_BOOST_GROUP_CREATE_PARAMS_MESSAGE_ID" */
+
+/*!
+ * Describes a Synchronized GPU-Boost Group configuration
+ */
+typedef struct NV0000_SYNC_GPU_BOOST_GROUP_CONFIG {
+ // [in] Number of elements in @ref gpuIds
+ NvU32 gpuCount;
+
+ // [in] IDs of GPUs to be put in the Sync Boost Group
+ NvU32 gpuIds[NV_MAX_DEVICES];
+
+ // [out] Unique ID of the SGBG, if created
+ NvU32 boostGroupId;
+
+ // [in] If this group represents bridgeless SLI
+ NvBool bBridgeless;
+} NV0000_SYNC_GPU_BOOST_GROUP_CONFIG;
+
+#define NV0000_SYNC_GPU_BOOST_GROUP_CREATE_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV0000_SYNC_GPU_BOOST_GROUP_CREATE_PARAMS {
+ NV0000_SYNC_GPU_BOOST_GROUP_CONFIG boostConfig;
+} NV0000_SYNC_GPU_BOOST_GROUP_CREATE_PARAMS;
+
+/*!
+ * Destroys a previously created Synchronized GPU-Boost Group(SGBG)
+ */
+#define NV0000_CTRL_CMD_SYNC_GPU_BOOST_GROUP_DESTROY (0xa03) /* finn: Evaluated from "(FINN_NV01_ROOT_SYNC_GPU_BOOST_INTERFACE_ID << 8) | NV0000_SYNC_GPU_BOOST_GROUP_DESTROY_PARAMS_MESSAGE_ID" */
+
+#define NV0000_SYNC_GPU_BOOST_GROUP_DESTROY_PARAMS_MESSAGE_ID (0x3U)
+
+typedef struct NV0000_SYNC_GPU_BOOST_GROUP_DESTROY_PARAMS {
+ // [[in] Unique ID of the SGBG to be destroyed
+ NvU32 boostGroupId;
+} NV0000_SYNC_GPU_BOOST_GROUP_DESTROY_PARAMS;
+
+/*!
+ * Get configuration information for all Synchronized Boost Groups in the system.
+ */
+#define NV0000_CTRL_CMD_SYNC_GPU_BOOST_GROUP_INFO (0xa04) /* finn: Evaluated from "(FINN_NV01_ROOT_SYNC_GPU_BOOST_INTERFACE_ID << 8) | NV0000_SYNC_GPU_BOOST_GROUP_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_SYNC_GPU_BOOST_GROUP_INFO_PARAMS_MESSAGE_ID (0x4U)
+
+typedef struct NV0000_SYNC_GPU_BOOST_GROUP_INFO_PARAMS {
+ // [out] Number of groups retrieved. @ref NV0000_SYNC_GPU_BOOST_GROUP_INFO_PARAMS::boostGroups
+ NvU32 groupCount;
+
+ // [out] @ref NV0000_SYNC_GPU_BOOST_GROUP_CONFIG
+ NV0000_SYNC_GPU_BOOST_GROUP_CONFIG pBoostGroups[NV0000_SYNC_GPU_BOOST_MAX_GROUPS];
+} NV0000_SYNC_GPU_BOOST_GROUP_INFO_PARAMS;
+
+/* _ctrl0000syncgpuboost_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000system.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000system.h
new file mode 100644
index 0000000..8376c57
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000system.h
@@ -0,0 +1,3239 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2005-2026 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000system.finn
+//
+
+#include "ctrl/ctrlxxxx.h"
+#include "ctrl/ctrl0000/ctrl0000base.h"
+
+/* NV01_ROOT (client) system control commands and parameters */
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_FEATURES
+ *
+ * This command returns a mask of supported features for the SYSTEM category
+ * of the 0000 class.
+ *
+ * Valid features include:
+ *
+ * NV0000_CTRL_GET_FEATURES_SLI
+ * When this bit is set, SLI is supported.
+ * NV0000_CTRL_SYSTEM_GET_FEATURES_IS_EFI_INIT
+ * When this bit is set, EFI has initialized core channel
+ * NV0000_CTRL_SYSTEM_GET_FEATURES_RM_TEST_ONLY_CODE_ENABLED
+ * When this bit is set, RM test only code is supported.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_STATE
+ */
+#define NV0000_CTRL_CMD_SYSTEM_GET_FEATURES (0x1f0U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_FEATURES_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_FEATURES_PARAMS_MESSAGE_ID (0xF0U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_FEATURES_PARAMS {
+ NvU32 featuresMask;
+} NV0000_CTRL_SYSTEM_GET_FEATURES_PARAMS;
+
+
+
+/* Valid feature values */
+#define NV0000_CTRL_SYSTEM_GET_FEATURES_SLI 0:0
+#define NV0000_CTRL_SYSTEM_GET_FEATURES_SLI_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_FEATURES_SLI_TRUE (0x00000001U)
+
+#define NV0000_CTRL_SYSTEM_GET_FEATURES_UUID_BASED_MEM_SHARING 3:3
+#define NV0000_CTRL_SYSTEM_GET_FEATURES_UUID_BASED_MEM_SHARING_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_FEATURES_UUID_BASED_MEM_SHARING_TRUE (0x00000001U)
+
+#define NV0000_CTRL_SYSTEM_GET_FEATURES_RM_TEST_ONLY_CODE_ENABLED 4:4
+#define NV0000_CTRL_SYSTEM_GET_FEATURES_RM_TEST_ONLY_CODE_ENABLED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_FEATURES_RM_TEST_ONLY_CODE_ENABLED_TRUE (0x00000001U)
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_BUILD_VERSION
+ *
+ * This command returns the current driver information.
+ * The first time this is called the size of strings is
+ * set with the greater of NV_BUILD_BRANCH_VERSION and
+ * NV_DISPLAY_DRIVER_TITLE. The client then allocates memory
+ * of size sizeOfStrings for pVersionBuffer and pTitleBuffer
+ * and calls the command again to receive driver info.
+ *
+ * sizeOfStrings
+ * This field returns the size in bytes of the pVersionBuffer and
+ * pTitleBuffer strings.
+ * pDriverVersionBuffer
+ * This field returns the version (NV_VERSION_STRING).
+ * pVersionBuffer
+ * This field returns the version (NV_BUILD_BRANCH_VERSION).
+ * pTitleBuffer
+ * This field returns the title (NV_DISPLAY_DRIVER_TITLE).
+ * changelistNumber
+ * This field returns the changelist value (NV_BUILD_CHANGELIST_NUM).
+ * officialChangelistNumber
+ * This field returns the last official changelist value
+ * (NV_LAST_OFFICIAL_CHANGELIST_NUM).
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_GET_BUILD_VERSION (0x101U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_PARAMS_MESSAGE_ID (0x1U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_PARAMS {
+ NvU32 sizeOfStrings;
+ NV_DECLARE_ALIGNED(NvP64 pDriverVersionBuffer, 8);
+ NV_DECLARE_ALIGNED(NvP64 pVersionBuffer, 8);
+ NV_DECLARE_ALIGNED(NvP64 pTitleBuffer, 8);
+ NvU32 changelistNumber;
+ NvU32 officialChangelistNumber;
+} NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_PARAMS;
+
+typedef enum NV0000_CTRL_SYSTEM_SH_SOC_TYPE {
+ NV0000_CTRL_SYSTEM_SH_SOC_TYPE_NA = 0,
+ NV0000_CTRL_SYSTEM_SH_SOC_TYPE_NV_GRACE = 1,
+
+} NV0000_CTRL_SYSTEM_SH_SOC_TYPE;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_CPU_INFO
+ *
+ * This command returns system CPU information.
+ *
+ * type
+ * This field returns the processor type.
+ * Legal processor types include:
+ * Intel processors:
+ * P55 : P55C - MMX
+ * P6 : PPro
+ * P2 : PentiumII
+ * P2XC : Xeon & Celeron
+ * CELA : Celeron-A
+ * P3 : Pentium-III
+ * P3_INTL2 : Pentium-III w/integrated L2 (fullspeed, on die, 256K)
+ * P4 : Pentium 4
+ * CORE2 : Core2 Duo Conroe
+ * AMD processors
+ * K62 : K6-2 w/ 3DNow
+ * IDT/Centaur processors
+ * C6 : WinChip C6
+ * C62 : WinChip 2 w/ 3DNow
+ * Cyrix processors
+ * GX : MediaGX
+ * M1 : 6x86
+ * M2 : M2
+ * MGX : MediaGX w/ MMX
+ * Transmeta processors
+ * TM_CRUSOE : Transmeta Crusoe(tm)
+ * PowerPC processors
+ * PPC603 : PowerPC 603
+ * PPC604 : PowerPC 604
+ * PPC750 : PowerPC 750
+ *
+ * capabilities
+ * This field returns the capabilities of the processor.
+ * Legal processor capabilities include:
+ * MMX : supports MMX
+ * SSE : supports SSE
+ * 3DNOW : supports 3DNow
+ * SSE2 : supports SSE2
+ * SFENCE : supports SFENCE
+ * WRITE_COMBINING : supports write-combining
+ * ALTIVEC : supports ALTIVEC
+ * PUT_NEEDS_IO : requires OUT inst w/PUT updates
+ * NEEDS_WC_WORKAROUND : requires workaround for P4 write-combining bug
+ * 3DNOW_EXT : supports 3DNow Extensions
+ * MMX_EXT : supports MMX Extensions
+ * CMOV : supports CMOV
+ * CLFLUSH : supports CLFLUSH
+ * SSE3 : supports SSE3
+ * NEEDS_WAR_124888 : requires write to GPU while spinning on
+ * : GPU value
+ * HT : support hyper-threading
+ * clock
+ * This field returns the processor speed in MHz.
+ * L1DataCacheSize
+ * This field returns the level 1 data (or unified) cache size
+ * in kilobytes.
+ * L2DataCacheSize
+ * This field returns the level 2 data (or unified) cache size
+ * in kilobytes.
+ * dataCacheLineSize
+ * This field returns the bytes per line in the level 1 data cache.
+ * numLogicalCpus
+ * This field returns the number of logical processors. On Intel x86
+ * systems that support it, this value will incorporate the current state
+ * of HyperThreading.
+ * numPhysicalCpus
+ * This field returns the number of physical processors.
+ * name
+ * This field returns the CPU name in ASCII string format.
+ * family
+ * Vendor defined Family and Extended Family combined
+ * model
+ * Vendor defined Model and Extended Model combined
+ * stepping
+ * Silicon stepping
+ * bCCEnabled
+ * Confidentail compute enabled/disabled state
+ * selfHostedSocType
+ * SoC type NV0000_CTRL_SYSTEM_SH_SOC_TYPE* in case of self hosted systems
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ */
+#define NV0000_CTRL_CMD_SYSTEM_GET_CPU_INFO (0x102U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_CPU_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_CPU_INFO_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_CPU_INFO_PARAMS {
+ NvU32 type; /* processor type */
+ NvU32 capabilities; /* processor caps */
+ NvU32 clock; /* processor speed (MHz) */
+ NvU32 L1DataCacheSize; /* L1 dcache size (KB) */
+ NvU32 L2DataCacheSize; /* L2 dcache size (KB) */
+ NvU32 dataCacheLineSize; /* L1 dcache bytes/line */
+ NvU32 numLogicalCpus; /* logial processor cnt */
+ NvU32 numPhysicalCpus; /* physical processor cnt*/
+ NvU8 name[52]; /* embedded cpu name */
+ NvU32 family; /* Vendor defined Family and Extended Family combined */
+ NvU32 model; /* Vendor defined Model and Extended Model combined */
+ NvU8 stepping; /* Silicon stepping */
+ NvU32 coresOnDie; /* cpu cores per die */
+ NvBool bCCEnabled; /* CC enabled on cpu */
+ NV0000_CTRL_SYSTEM_SH_SOC_TYPE selfHostedSocType; /* SoC type in case of self hosted systems */
+} NV0000_CTRL_SYSTEM_GET_CPU_INFO_PARAMS;
+
+// Macros for CPU family information
+#define NV0000_CTRL_SYSTEM_CPU_FAMILY 3:0
+#define NV0000_CTRL_SYSTEM_CPU_EXTENDED_FAMILY 11:4
+
+// Macros for CPU model information
+#define NV0000_CTRL_SYSTEM_CPU_MODEL 3:0
+#define NV0000_CTRL_SYSTEM_CPU_EXTENDED_MODEL 7:4
+
+// Macros for AMD CPU information
+#define NV0000_CTRL_SYSTEM_CPU_ID_AMD_FAMILY 0xF
+#define NV0000_CTRL_SYSTEM_CPU_ID_AMD_EXTENDED_FAMILY 0xA
+#define NV0000_CTRL_SYSTEM_CPU_ID_AMD_MODEL 0x0
+#define NV0000_CTRL_SYSTEM_CPU_ID_AMD_EXTENDED_MODEL 0x4
+
+// Macros for Intel CPU information
+#define NV0000_CTRL_SYSTEM_CPU_ID_INTEL_FAMILY 0x6
+#define NV0000_CTRL_SYSTEM_CPU_ID_INTEL_EXTENDED_FAMILY 0x0
+#define NV0000_CTRL_SYSTEM_CPU_ID_INTEL_CORE_S_MODEL 0x7
+#define NV0000_CTRL_SYSTEM_CPU_ID_INTEL_CORE_P_MODEL 0xA
+#define NV0000_CTRL_SYSTEM_CPU_ID_INTEL_EXTENDED_MODEL 0x9
+
+/* processor type values */
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_UNKNOWN (0x00000000U)
+/* Intel types */
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_P5 (0x00000001U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_P55 (0x00000002U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_P6 (0x00000003U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_P2 (0x00000004U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_P2XC (0x00000005U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_CELA (0x00000006U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_P3 (0x00000007U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_P3_INTL2 (0x00000008U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_P4 (0x00000009U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_CORE2 (0x00000010U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_CELN_M16H (0x00000011U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_CORE2_EXTRM (0x00000012U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_ATOM (0x00000013U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_XEON_SPR (0x00000014U)
+/* AMD types */
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_K5 (0x00000030U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_K6 (0x00000031U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_K62 (0x00000032U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_K63 (0x00000033U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_K7 (0x00000034U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_K8 (0x00000035U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_K10 (0x00000036U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_K11 (0x00000037U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_RYZEN (0x00000038U)
+/* IDT/Centaur types */
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_C6 (0x00000060U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_C62 (0x00000061U)
+/* Cyrix types */
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_GX (0x00000070U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_M1 (0x00000071U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_M2 (0x00000072U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_MGX (0x00000073U)
+/* Transmeta types */
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_TM_CRUSOE (0x00000080U)
+/* IBM types */
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_PPC603 (0x00000090U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_PPC604 (0x00000091U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_PPC750 (0x00000092U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_POWERN (0x00000093U)
+/* Unknown ARM architecture CPU type */
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_ARM_UNKNOWN (0xA0000000U)
+/* ARM Ltd types */
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_ARM_A9 (0xA0000009U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_ARM_A15 (0xA000000FU)
+/* NVIDIA types */
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_NV_DENVER_1_0 (0xA0001000U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_NV_DENVER_2_0 (0xA0002000U)
+
+/* Generic types */
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_ARMV8A_GENERIC (0xA00FF000U)
+#define NV0000_CTRL_SYSTEM_CPU_TYPE_ARMV9A_GENERIC (0xA00FF001U)
+
+/* processor capabilities */
+#define NV0000_CTRL_SYSTEM_CPU_CAP_MMX (0x00000001U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_SSE (0x00000002U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_3DNOW (0x00000004U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_SSE2 (0x00000008U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_SFENCE (0x00000010U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_WRITE_COMBINING (0x00000020U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_ALTIVEC (0x00000040U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_PUT_NEEDS_IO (0x00000080U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_NEEDS_WC_WORKAROUND (0x00000100U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_3DNOW_EXT (0x00000200U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_MMX_EXT (0x00000400U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_CMOV (0x00000800U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_CLFLUSH (0x00001000U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_NEEDS_WAR_190854 (0x00002000U) /* deprecated */
+#define NV0000_CTRL_SYSTEM_CPU_CAP_SSE3 (0x00004000U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_NEEDS_WAR_124888 (0x00008000U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_HT_CAPABLE (0x00010000U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_SSE41 (0x00020000U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_SSE42 (0x00040000U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_AVX (0x00080000U)
+#define NV0000_CTRL_SYSTEM_CPU_CAP_ERMS (0x00100000U)
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_CHIPSET_INFO
+ *
+ * This command returns system chipset information.
+ *
+ * vendorId
+ * This parameter returns the vendor identification for the chipset.
+ * A value of NV0000_SYSTEM_CHIPSET_INVALID_ID indicates the chipset
+ * cannot be identified.
+ * deviceId
+ * This parameter returns the device identification for the chipset.
+ * A value of NV0000_SYSTEM_CHIPSET_INVALID_ID indicates the chipset
+ * cannot be identified.
+ * subSysVendorId
+ * This parameter returns the subsystem vendor identification for the
+ * chipset. A value of NV0000_SYSTEM_CHIPSET_INVALID_ID indicates the
+ * chipset cannot be identified.
+ * subSysDeviceId
+ * This parameter returns the subsystem device identification for the
+ * chipset. A value of NV0000_SYSTEM_CHIPSET_INVALID_ID indicates the
+ * chipset cannot be identified.
+ * HBvendorId
+ * This parameter returns the vendor identification for the chipset's
+ * host bridge. A value of NV0000_SYSTEM_CHIPSET_INVALID_ID indicates
+ * the chipset's host bridge cannot be identified.
+ * HBdeviceId
+ * This parameter returns the device identification for the chipset's
+ * host bridge. A value of NV0000_SYSTEM_CHIPSET_INVALID_ID indicates
+ * the chipset's host bridge cannot be identified.
+ * HBsubSysVendorId
+ * This parameter returns the subsystem vendor identification for the
+ * chipset's host bridge. A value of NV0000_SYSTEM_CHIPSET_INVALID_ID
+ * indicates the chipset's host bridge cannot be identified.
+ * HBsubSysDeviceId
+ * This parameter returns the subsystem device identification for the
+ * chipset's host bridge. A value of NV0000_SYSTEM_CHIPSET_INVALID_ID
+ * indicates the chipset's host bridge cannot be identified.
+ * sliBondId
+ * This parameter returns the SLI bond identification for the chipset.
+ * vendorNameString
+ * This parameter returns the vendor name string.
+ * chipsetNameString
+ * This parameter returns the vendor name string.
+ * sliBondNameString
+ * This parameter returns the SLI bond name string.
+ * flag
+ * This parameter specifies NV0000_CTRL_SYSTEM_CHIPSET_FLAG_XXX flags:
+ * _HAS_RESIZABLE_BAR_ISSUE_YES: Chipset where the use of resizable BAR1
+ * should be disabled - bug 3440153
+ * _BAR1_UNALIGNED_ACCESS_YES: unaligned acccess in BAR1 is allowed.
+ * chipsetId
+ * This parameter returns the chipset identification.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_OPERATING_SYSTEM
+ */
+#define NV0000_CTRL_CMD_SYSTEM_GET_CHIPSET_INFO (0x104U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_CHIPSET_INFO_PARAMS_MESSAGE_ID" */
+
+/* maximum name string length */
+#define NV0000_SYSTEM_MAX_CHIPSET_STRING_LENGTH (0x0000020U)
+
+/* invalid id */
+#define NV0000_SYSTEM_CHIPSET_INVALID_ID (0xffffU)
+
+#define NV0000_CTRL_SYSTEM_GET_CHIPSET_INFO_PARAMS_MESSAGE_ID (0x4U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_CHIPSET_INFO_PARAMS {
+ NvU16 vendorId;
+ NvU16 deviceId;
+ NvU16 subSysVendorId;
+ NvU16 subSysDeviceId;
+ NvU16 HBvendorId;
+ NvU16 HBdeviceId;
+ NvU16 HBsubSysVendorId;
+ NvU16 HBsubSysDeviceId;
+ NvU32 sliBondId;
+ NvU8 vendorNameString[NV0000_SYSTEM_MAX_CHIPSET_STRING_LENGTH];
+ NvU8 subSysVendorNameString[NV0000_SYSTEM_MAX_CHIPSET_STRING_LENGTH];
+ NvU8 chipsetNameString[NV0000_SYSTEM_MAX_CHIPSET_STRING_LENGTH];
+ NvU8 sliBondNameString[NV0000_SYSTEM_MAX_CHIPSET_STRING_LENGTH];
+ NvU32 flags;
+ NvU32 chipsetId;
+} NV0000_CTRL_SYSTEM_GET_CHIPSET_INFO_PARAMS;
+
+#define NV0000_CTRL_SYSTEM_CHIPSET_FLAG_HAS_RESIZABLE_BAR_ISSUE 0:0
+#define NV0000_CTRL_SYSTEM_CHIPSET_FLAG_HAS_RESIZABLE_BAR_ISSUE_NO (0x00000000U)
+#define NV0000_CTRL_SYSTEM_CHIPSET_FLAG_HAS_RESIZABLE_BAR_ISSUE_YES (0x00000001U)
+
+#define NV0000_CTRL_SYSTEM_CHIPSET_FLAG_BAR1_UNALIGNED_ACCESS 1:1
+#define NV0000_CTRL_SYSTEM_CHIPSET_FLAG_BAR1_UNALIGNED_ACCESS_NO (0x00000000U)
+#define NV0000_CTRL_SYSTEM_CHIPSET_FLAG_BAR1_UNALIGNED_ACCESS_YES (0x00000001U)
+
+
+
+/*
+ * NV0000_CTRL_SYSTEM_GET_VRR_COOKIE_PRESENT
+ *
+ * This command returns whether the VRR cookie is present in the SBIOS.
+ *
+ * bIsPresent (out)
+ * This parameter contains whether the VRR cookie is present in the SBIOS.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_REQUEST
+ * NV_ERR_NOT_SUPPORTED
+ */
+
+#define NV0000_CTRL_SYSTEM_GET_VRR_COOKIE_PRESENT (0x107U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_VRR_COOKIE_PRESENT_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_VRR_COOKIE_PRESENT_PARAMS_MESSAGE_ID (0x7U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_VRR_COOKIE_PRESENT_PARAMS {
+ NvBool bIsPresent;
+} NV0000_CTRL_SYSTEM_GET_VRR_COOKIE_PRESENT_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_LOCK_TIMES
+ *
+ * This command is used to retrieve the measured times spent holding and waiting for
+ * the main RM locks (API and GPU).
+ *
+ * waitApiLock
+ * Total time spent by RM API's waiting to acquire the API lock
+ *
+ * holdRoApiLock
+ * Total time spent by RM API's holding the API lock in RO mode.
+ *
+ * holdRwApiLock
+ * Total time spent by RM API's holding the API lock in RW mode.
+ *
+ * waitGpuLock
+ * Total time spent by RM API's waiting to acquire one or more GPU locks.
+ *
+ * holdGpuLock
+ * Total time spent by RM API's holding one or more GPU locks.
+ *
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_NOT_SUPPORTED
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_GET_LOCK_TIMES (0x109U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_LOCK_TIMES_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_LOCK_TIMES_PARAMS_MESSAGE_ID (0x9U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_LOCK_TIMES_PARAMS {
+ NV_DECLARE_ALIGNED(NvU64 waitApiLock, 8);
+ NV_DECLARE_ALIGNED(NvU64 holdRoApiLock, 8);
+ NV_DECLARE_ALIGNED(NvU64 holdRwApiLock, 8);
+ NV_DECLARE_ALIGNED(NvU64 waitGpuLock, 8);
+ NV_DECLARE_ALIGNED(NvU64 holdGpuLock, 8);
+} NV0000_CTRL_SYSTEM_GET_LOCK_TIMES_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_CLASSLIST
+ *
+ * This command is used to retrieve the set of system-level classes
+ * supported by the platform.
+ *
+ * numClasses
+ * This parameter returns the number of valid entries in the returned
+ * classes[] list. This parameter will not exceed
+ * Nv0000_CTRL_SYSTEM_MAX_CLASSLIST_SIZE.
+ * classes
+ * This parameter returns the list of supported classes
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_GET_CLASSLIST (0x108U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_CLASSLIST_PARAMS_MESSAGE_ID" */
+
+/* maximum number of classes returned in classes[] array */
+#define NV0000_CTRL_SYSTEM_MAX_CLASSLIST_SIZE (32U)
+
+#define NV0000_CTRL_SYSTEM_GET_CLASSLIST_PARAMS_MESSAGE_ID (0x8U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_CLASSLIST_PARAMS {
+ NvU32 numClasses;
+ NvU32 classes[NV0000_CTRL_SYSTEM_MAX_CLASSLIST_SIZE];
+} NV0000_CTRL_SYSTEM_GET_CLASSLIST_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_NOTIFY_EVENT
+ *
+ * This command is used to send triggered mobile related system events
+ * to the RM.
+ *
+ * eventType
+ * This parameter indicates the triggered event type. This parameter
+ * should specify a valid NV0000_CTRL_SYSTEM_EVENT_TYPE value.
+ * eventData
+ * This parameter specifies the type-dependent event data associated
+ * with EventType. This parameter should specify a valid
+ * NV0000_CTRL_SYSTEM_EVENT_DATA value.
+ * bEventDataForced
+ * This parameter specifies what we have to do, Whether trust current
+ * Lid/Dock state or not. This parameter should specify a valid
+ * NV0000_CTRL_SYSTEM_EVENT_DATA_FORCED value.
+
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ *
+ * Sync this up (#defines) with one in nvapi.spec!
+ * (NV_ACPI_EVENT_TYPE & NV_ACPI_EVENT_DATA)
+ */
+#define NV0000_CTRL_CMD_SYSTEM_NOTIFY_EVENT (0x110U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_NOTIFY_EVENT_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_NOTIFY_EVENT_PARAMS_MESSAGE_ID (0x10U)
+
+typedef struct NV0000_CTRL_SYSTEM_NOTIFY_EVENT_PARAMS {
+ NvU32 eventType;
+ NvU32 eventData;
+ NvBool bEventDataForced;
+} NV0000_CTRL_SYSTEM_NOTIFY_EVENT_PARAMS;
+
+/* valid eventType values */
+#define NV0000_CTRL_SYSTEM_EVENT_TYPE_LID_STATE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_EVENT_TYPE_POWER_SOURCE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_EVENT_TYPE_DOCK_STATE (0x00000002U)
+#define NV0000_CTRL_SYSTEM_EVENT_TYPE_TRUST_LID (0x00000003U)
+#define NV0000_CTRL_SYSTEM_EVENT_TYPE_TRUST_DOCK (0x00000004U)
+
+/* valid eventData values */
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_LID_OPEN (0x00000000U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_LID_CLOSED (0x00000001U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_POWER_BATTERY (0x00000000U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_POWER_AC (0x00000001U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_UNDOCKED (0x00000000U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_DOCKED (0x00000001U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_LID_DSM (0x00000000U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_LID_DCS (0x00000001U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_LID_NVIF (0x00000002U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_LID_ACPI (0x00000003U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_LID_POLL (0x00000004U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_LID_COUNT (0x5U) /* finn: Evaluated from "(NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_LID_POLL + 1)" */
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_DOCK_DSM (0x00000000U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_DOCK_DCS (0x00000001U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_DOCK_NVIF (0x00000002U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_DOCK_ACPI (0x00000003U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_DOCK_POLL (0x00000004U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_DOCK_COUNT (0x5U) /* finn: Evaluated from "(NV0000_CTRL_SYSTEM_EVENT_DATA_TRUST_DOCK_POLL + 1)" */
+
+/* valid bEventDataForced values */
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_FORCED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_EVENT_DATA_FORCED_TRUE (0x00000001U)
+
+/*
+ * NV000_CTRL_CMD_SYSTEM_GET_PLATFORM_TYPE
+ *
+ * This command is used to query the platform type.
+ *
+ * systemType
+ * This parameter returns the type of the system.
+ * Legal values for this parameter include:
+ * NV0000_CTRL_SYSTEM_GET_PLATFORM_TYPE_DESKTOP
+ * The system is a desktop platform.
+ * NV0000_CTRL_SYSTEM_GET_PLATFORM_TYPE_MOBILE_GENERIC
+ * The system is a mobile (non-Toshiba) platform.
+ * NV0000_CTRL_SYSTEM_GET_PLATFORM_TYPE_DESKTOP
+ * The system is a mobile Toshiba platform.
+ * NV0000_CTRL_SYSTEM_GET_PLATFORM_TYPE_SOC
+ * The system is a system-on-a-chip (SOC) platform.
+ *
+
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+#define NV0000_CTRL_CMD_SYSTEM_GET_PLATFORM_TYPE (0x111U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_CMD_SYSTEM_GET_PLATFORM_TYPE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CMD_SYSTEM_GET_PLATFORM_TYPE_PARAMS_MESSAGE_ID (0x11U)
+
+typedef struct NV0000_CTRL_CMD_SYSTEM_GET_PLATFORM_TYPE_PARAMS {
+ NvU32 systemType;
+} NV0000_CTRL_CMD_SYSTEM_GET_PLATFORM_TYPE_PARAMS;
+
+/* valid systemType values */
+#define NV0000_CTRL_SYSTEM_GET_PLATFORM_TYPE_DESKTOP (0x000000U)
+#define NV0000_CTRL_SYSTEM_GET_PLATFORM_TYPE_MOBILE_GENERIC (0x000001U)
+#define NV0000_CTRL_SYSTEM_GET_PLATFORM_TYPE_MOBILE_TOSHIBA (0x000002U)
+#define NV0000_CTRL_SYSTEM_GET_PLATFORM_TYPE_SOC (0x000003U)
+
+
+
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_DEBUG_RMMSG_CTRL
+ *
+ * This command controls the current RmMsg filters.
+ *
+ * It is only supported if RmMsg is enabled (e.g. debug builds).
+ *
+ * cmd
+ * GET - Gets the current RmMsg filter string.
+ * SET - Sets the current RmMsg filter string.
+ *
+ * count
+ * The length of the RmMsg filter string.
+ *
+ * data
+ * The RmMsg filter string.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_NOT_SUPPORTED
+ */
+#define NV0000_CTRL_CMD_SYSTEM_DEBUG_RMMSG_CTRL (0x121U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_DEBUG_RMMSG_CTRL_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_DEBUG_RMMSG_SIZE 512U
+
+#define NV0000_CTRL_SYSTEM_DEBUG_RMMSG_CTRL_CMD_GET (0x00000000U)
+#define NV0000_CTRL_SYSTEM_DEBUG_RMMSG_CTRL_CMD_SET (0x00000001U)
+
+#define NV0000_CTRL_SYSTEM_DEBUG_RMMSG_CTRL_PARAMS_MESSAGE_ID (0x21U)
+
+typedef struct NV0000_CTRL_SYSTEM_DEBUG_RMMSG_CTRL_PARAMS {
+ NvU32 cmd;
+ NvU32 count;
+ NvU8 data[NV0000_CTRL_SYSTEM_DEBUG_RMMSG_SIZE];
+} NV0000_CTRL_SYSTEM_DEBUG_RMMSG_CTRL_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CONTROL
+ *
+ * This command is used to control GPS functionality. It allows control of
+ * GPU Performance Scaling (GPS), changing its operational parameters and read
+ * most GPS dynamic parameters.
+ *
+ * command
+ * This parameter specifies the command to execute. Invalid commands
+ * result in the return of an NV_ERR_INVALID_ARGUMENT status.
+ * locale
+ * This parameter indicates the specific locale to which the command
+ * 'command' is to be applied.
+ * Supported range of CPU/GPU {i = 0, ..., 255}
+ * data
+ * This parameter contains a command-specific data payload. It can
+ * be used to input data as well as output data.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_COMMAND
+ * NV_ERR_INVALID_STATE
+ * NV_ERR_INVALID_DATA
+ * NV_ERR_INVALID_REQUEST
+ * NV_ERR_NOT_SUPPORTED
+ */
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CONTROL (0x122U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GPS_CONTROL_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GPS_CONTROL_PARAMS_MESSAGE_ID (0x22U)
+
+typedef struct NV0000_CTRL_SYSTEM_GPS_CONTROL_PARAMS {
+ NvU16 command;
+ NvU16 locale;
+ NvU32 data;
+} NV0000_CTRL_SYSTEM_GPS_CONTROL_PARAMS;
+
+/*
+ * Valid command values :
+ *
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_INIT
+ * Is used to check if GPS was correctly initialized.
+ * Possible return (OUT) values are:
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_INIT_NO
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_INIT_YES
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_EXEC
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_EXEC
+ * Are used to stop/start GPS functionality and to get current status.
+ * Possible IN/OUT values are:
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_EXEC_STOP
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_EXEC_START
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_ACTIONS
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_ACTIONS
+ * Are used to control execution of GPS actions and to get current status.
+ * Possible IN/OUT values are:
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_ACTIONS_OFF
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_ACTIONS_ON
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_LOGIC
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_LOGIC
+ * Are used to switch current GPS logic and to retrieve current logic.
+ * Possible IN/OUT values are:
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_LOGIC_OFF
+ * Will cause that all GPS actions will be NULL.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_LOGIC_FUZZY
+ * Fuzzy logic will determine GPS actions based on current ruleset.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_LOGIC_DETERMINISTIC
+ * Deterministic logic will define GPS actions based on current ruleset.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_PREFERENCE
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_PREFERENCE
+ * Are used to set/retrieve system control preference.
+ * Possible IN/OUT values are:
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_PREFERENCE_CPU
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_PREFERENCE_GPU
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_PREFERENCE_BOTH
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_GPU2CPU_LIMIT
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_GPU2CPU_LIMIT
+ * Are used to set/retrieve GPU2CPU pstate limits.
+ * IN/OUT values are four bytes packed into a 32-bit data field.
+ * The CPU cap index for GPU pstate 0 is in the lowest byte, the CPU cap
+ * index for the GPU pstate 3 is in the highest byte, etc. One
+ * special value is to disable the override to the GPU2CPU map:
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_PMU_GPS_STATE
+ * Is used to stop/start GPS PMU functionality.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_PMU_GPS_STATE
+ * Is used to get the current status of PMU GPS.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_NO_MAP_OVERRIDE
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_MAX_POWER
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_MAX_POWER
+ * Are used to set/retrieve max power [mW] that system can provide.
+ * This is hardcoded GPS safety feature and logic/rules does not apply
+ * to this threshold.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_COOLING_BUDGET
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_COOLING_BUDGET
+ * Are used to set/retrieve current system cooling budget [mW].
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_INTEGRAL_PERIOD
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_INTEGRAL_PERIOD
+ * Are used to set/retrieve integration interval [sec].
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_RULESET
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_RULESET
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_RULE_COUNT
+ * Are used to set/retrieve used ruleset [#]. Value is checked
+ * against MAX number of rules for currently used GPS logic. Also COUNT
+ * provides a way to find out how many rules exist for the current control
+ * system.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_APP_BOOST
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_APP_BOOST
+ * Is used to set/get a delay relative to now during which to allow unbound
+ * CPU performance. Units are seconds.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_PWR_SUPPLY_MODE
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_PWR_SUPPLY_MODE
+ * Is used to override/get the actual power supply mode (AC/Battery).
+ * Possible IN/OUT values are:
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_PWR_SUPPLY_REAL
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_PWR_SUPPLY_FAKE_AC
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_PWR_SUPPLY_FAKE_BATT
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_VCT_SUPPORT_INFO
+ * Is used to get the Ventura system information for VCT tool
+ * Returned 32bit value should be treated as bitmask and decoded in
+ * following way:
+ * Encoding details are defined in objgps.h refer to
+ * NV_GPS_SYS_SUPPORT_INFO and corresponding bit defines.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_SUPPORTED_FUNCTION
+ * Is used to get the supported sub-functions defined in SBIOS. Returned
+ * value is a bitmask where each bit corresponds to different function:
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_SUPPORT
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_VENTURASTATUS
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_GETPSS
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_SETPPC
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_GETPPC
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_VENTURACB
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_SYSPARAMS
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_DELTA
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_FUTURE
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_LTMAVG
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_INTEGRAL
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_BURDEN
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_INTERMEDIATE
+ * Are used to retrieve appropriate power measurements and their derivatives
+ * in [mW] for required locale. _BURDEN is defined only for _LOCALE_SYSTEM.
+ * _INTERMEDIATE is not defined for _LOCALE_SYSTEM, and takes an In value as
+ * index.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_SENSOR_PARAMETERS
+ * Is used to retrieve parameters when adjusting raw sensor power reading.
+ * The values may come from SBIOS, VBIOS, registry or driver default.
+ * Possible IN value is the index of interested parameter.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_TEMP
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_TEMP_DELTA
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_TEMP_FUTURE
+ * Are used to retrieve appropriate temperature measurements and their
+ * derivatives in [1/1000 Celsius].
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_PSTATE
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_PSTATE_CAP
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_PSTATE_MIN
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_PSTATE_MAX
+ * Are used to retrieve CPU(x)/GPU(x) p-state or it's limits.
+ * Not applicable to _LOCALE_SYSTEM.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_PSTATE_ACTION
+ * Is used to retrieve last GPS action for given domain.
+ * Not applicable to _LOCALE_SYSTEM.
+ * Possible return (OUT) values are:
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_DEC_TO_P0
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_DEC_BY_1
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_DO_NOTHING
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_SET_CURRENT
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_INC_BY_1
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_INC_BY_2
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_INC_TO_LFM
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_INC_TO_SLFM
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_SET_POWER_SIM_STATE
+ * Is used to set the power sensor simulator state.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_SIM_STATE
+ * Is used to get the power simulator sensor simulator state.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_SET_POWER_SIM_DATA
+ * Is used to set power sensor simulator data
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_SIM_DATA
+ * Is used to get power sensor simulator data
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_INIT_USING_SBIOS_AND_ACK
+ * Is used to respond to the ACPI event triggered by SBIOS. RM will
+ * request value for budget and status, validate them, apply them
+ * and send ACK back to SBIOS.
+ * NV0000_CTRL_CMD_SYSTEM_GPS_DATA_PING_SBIOS_FOR_EVENT
+ * Is a test cmd that should notify SBIOS to send ACPI event requesting
+ * budget and status change.
+ */
+#define NV0000_CTRL_CMD_SYSTEM_GPS_INVALID (0xFFFFU)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_INIT (0x0000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_EXEC (0x0001U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_EXEC (0x0002U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_ACTIONS (0x0003U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_ACTIONS (0x0004U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_LOGIC (0x0005U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_LOGIC (0x0006U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_PREFERENCE (0x0007U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_PREFERENCE (0x0008U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_GPU2CPU_LIMIT (0x0009U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_GPU2CPU_LIMIT (0x000AU)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_SET_PMU_GPS_STATE (0x000BU)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_GET_PMU_GPS_STATE (0x000CU)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_MAX_POWER (0x0100U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_MAX_POWER (0x0101U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_COOLING_BUDGET (0x0102U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_COOLING_BUDGET (0x0103U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_INTEGRAL_PERIOD (0x0104U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_INTEGRAL_PERIOD (0x0105U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_RULESET (0x0106U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_RULESET (0x0107U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_RULE_COUNT (0x0108U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_APP_BOOST (0x0109U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_APP_BOOST (0x010AU)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_SET_PWR_SUPPLY_MODE (0x010BU)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_PWR_SUPPLY_MODE (0x010CU)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_VCT_SUPPORT_INFO (0x010DU)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_GET_SUPPORTED_FUNCTIONS (0x010EU)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER (0x0200U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_DELTA (0x0201U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_FUTURE (0x0202U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_LTMAVG (0x0203U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_INTEGRAL (0x0204U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_BURDEN (0x0205U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_INTERMEDIATE (0x0206U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_SENSOR_PARAMETERS (0x0210U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_TEMP (0x0220U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_TEMP_DELTA (0x0221U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_TEMP_FUTURE (0x0222U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_PSTATE (0x0240U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_PSTATE_CAP (0x0241U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_PSTATE_MIN (0x0242U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_PSTATE_MAX (0x0243U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_PSTATE_ACTION (0x0244U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_PSTATE_SLFM_PRESENT (0x0245U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_SET_POWER_SIM_STATE (0x0250U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_SIM_STATE (0x0251U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_SET_POWER_SIM_DATA (0x0252U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_GET_POWER_SIM_DATA (0x0253U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_INIT_USING_SBIOS_AND_ACK (0x0320U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_PING_SBIOS_FOR_EVENT (0x0321U)
+
+/* valid LOCALE values */
+#define NV0000_CTRL_CMD_SYSTEM_GPS_LOCALE_INVALID (0xFFFFU)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_LOCALE_SYSTEM (0x0000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_LOCALE_CPU(i) (0x0100+((i)%0x100))
+#define NV0000_CTRL_CMD_SYSTEM_GPS_LOCALE_GPU(i) (0x0200+((i)%0x100))
+
+/* valid data values for enums */
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_INVALID (0x80000000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_INIT_NO (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_INIT_YES (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_EXEC_STOP (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_EXEC_START (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_ACTIONS_OFF (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_ACTIONS_ON (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_LOGIC_OFF (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_LOGIC_FUZZY (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_LOGIC_DETERMINISTIC (0x00000002U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_PREFERENCE_CPU (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_PREFERENCE_GPU (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_PREFERENCE_BOTH (0x00000002U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_NO_MAP_OVERRIDE (0xFFFFFFFFU)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_PMU_GPS_STATE_OFF (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_PMU_GPS_STATE_ON (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_PWR_SUPPLY_REAL (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_PWR_SUPPLY_FAKE_AC (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_PWR_SUPPLY_FAKE_BATT (0x00000002U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_SUPPORT (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_VENTURASTATUS (0x00000002U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_GETPSS (0x00000004U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_SETPPC (0x00000008U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_GETPPC (0x00000010U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_VENTURACB (0x00000020U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SYS_DEF_FUNC_SYSPARAMS (0x00000040U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_DEC_TO_P0 (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_DEC_BY_1 (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_DO_NOTHING (0x00000002U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_SET_CURRENT (0x00000003U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_INC_BY_1 (0x00000004U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_INC_BY_2 (0x00000005U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_INC_TO_LFM (0x00000006U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_ACTION_INC_TO_SLFM (0x00000007U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_SLFM_PRESENT_NO (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_SLFM_PRESENT_YES (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_POWER_SIM_STATE_OFF (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_GPS_DATA_DEF_POWER_SIM_STATE_ON (0x00000001U)
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GPS_BATCH_CONTROL
+ *
+ * This command allows execution of multiple GpsControl commands within one
+ * RmControl call. For practical reasons # of commands is limited to 16.
+ * This command shares defines with NV0000_CTRL_CMD_SYSTEM_GPS_CONTROL.
+ *
+ * cmdCount
+ * Number of commands that should be executed.
+ * Less or equal to NV0000_CTRL_CMD_SYSTEM_GPS_BATCH_COMMAND_MAX.
+ *
+ * succeeded
+ * Number of commands that were succesully executed.
+ * Less or equal to NV0000_CTRL_CMD_SYSTEM_GPS_BATCH_COMMAND_MAX.
+ * Failing commands return NV0000_CTRL_CMD_SYSTEM_GPS_CMD_DEF_INVALID
+ * in their data field.
+ *
+ * cmdData
+ * Array of commands with following structure:
+ * command
+ * This parameter specifies the command to execute.
+ * Invalid commands result in the return of an
+ * NV_ERR_INVALID_ARGUMENT status.
+ * locale
+ * This parameter indicates the specific locale to which
+ * the command 'command' is to be applied.
+ * Supported range of CPU/GPU {i = 0, ..., 255}
+ * data
+ * This parameter contains a command-specific data payload.
+ * It is used both to input data as well as to output data.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_REQUEST
+ * NV_ERR_NOT_SUPPORTED
+ */
+#define NV0000_CTRL_CMD_SYSTEM_GPS_BATCH_CONTROL (0x123U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GPS_BATCH_CONTROL_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CMD_SYSTEM_GPS_BATCH_COMMAND_MAX (16U)
+#define NV0000_CTRL_SYSTEM_GPS_BATCH_CONTROL_PARAMS_MESSAGE_ID (0x23U)
+
+typedef struct NV0000_CTRL_SYSTEM_GPS_BATCH_CONTROL_PARAMS {
+ NvU32 cmdCount;
+ NvU32 succeeded;
+
+ struct {
+ NvU16 command;
+ NvU16 locale;
+ NvU32 data;
+ } cmdData[NV0000_CTRL_CMD_SYSTEM_GPS_BATCH_COMMAND_MAX];
+} NV0000_CTRL_SYSTEM_GPS_BATCH_CONTROL_PARAMS;
+
+
+/*
+ * Deprecated. Please use NV0000_CTRL_CMD_SYSTEM_GET_P2P_CAPS_V2 instead.
+ */
+#define NV0000_CTRL_CMD_SYSTEM_GET_P2P_CAPS (0x127U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PARAMS_MESSAGE_ID" */
+
+/*
+ * NV0000_CTRL_SYSTEM_MAX_ATTACHED_GPUS_SQUARED must remain equal to the square of
+ * NV0000_CTRL_SYSTEM_MAX_ATTACHED_GPUS due to Check RM parsing issues.
+ * NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS is the maximum size of GPU groups
+ * allowed for batched P2P caps queries provided by the RM control
+ * NV0000_CTRL_CMD_SYSTEM_GET_P2P_CAPS_MATRIX.
+ */
+#define NV0000_CTRL_SYSTEM_MAX_ATTACHED_GPUS 32U
+#define NV0000_CTRL_SYSTEM_MAX_ATTACHED_GPUS_SQUARED 1024U
+#define NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS 8U
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INVALID_PEER 0xffffffffU
+
+/* P2P capabilities status index values */
+#define NV0000_CTRL_P2P_CAPS_INDEX_READ 0U
+#define NV0000_CTRL_P2P_CAPS_INDEX_WRITE 1U
+#define NV0000_CTRL_P2P_CAPS_INDEX_NVLINK 2U
+#define NV0000_CTRL_P2P_CAPS_INDEX_ATOMICS 3U
+#define NV0000_CTRL_P2P_CAPS_INDEX_PROP 4U
+#define NV0000_CTRL_P2P_CAPS_INDEX_LOOPBACK 5U
+#define NV0000_CTRL_P2P_CAPS_INDEX_PCI 6U
+#define NV0000_CTRL_P2P_CAPS_INDEX_C2C 7U
+#define NV0000_CTRL_P2P_CAPS_INDEX_PCI_BAR1 8U
+
+#define NV0000_CTRL_P2P_CAPS_INDEX_TABLE_SIZE 9U
+
+
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PARAMS_MESSAGE_ID (0x27U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PARAMS {
+ NvU32 gpuIds[NV0000_CTRL_SYSTEM_MAX_ATTACHED_GPUS];
+ NvU32 gpuCount;
+ NvU32 p2pCaps;
+ NvU32 p2pOptimalReadCEs;
+ NvU32 p2pOptimalWriteCEs;
+ NvU8 p2pCapsStatus[NV0000_CTRL_P2P_CAPS_INDEX_TABLE_SIZE];
+ NV_DECLARE_ALIGNED(NvP64 busPeerIds, 8);
+ NV_DECLARE_ALIGNED(NvP64 busEgmPeerIds, 8);
+} NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PARAMS;
+
+/* valid p2pCaps values */
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_WRITES_SUPPORTED 0:0
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_WRITES_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_WRITES_SUPPORTED_TRUE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_READS_SUPPORTED 1:1
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_READS_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_READS_SUPPORTED_TRUE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PROP_SUPPORTED 2:2
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PROP_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PROP_SUPPORTED_TRUE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_NVLINK_SUPPORTED 3:3
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_NVLINK_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_NVLINK_SUPPORTED_TRUE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_ATOMICS_SUPPORTED 4:4
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_ATOMICS_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_ATOMICS_SUPPORTED_TRUE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_LOOPBACK_SUPPORTED 5:5
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_LOOPBACK_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_LOOPBACK_SUPPORTED_TRUE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PCI_SUPPORTED 6:6
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PCI_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PCI_SUPPORTED_TRUE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_WRITES_SUPPORTED 7:7
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_WRITES_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_WRITES_SUPPORTED_TRUE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_READS_SUPPORTED 8:8
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_READS_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_READS_SUPPORTED_TRUE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_ATOMICS_SUPPORTED 9:9
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_ATOMICS_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_ATOMICS_SUPPORTED_TRUE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_NVLINK_SUPPORTED 10:10
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_NVLINK_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_NVLINK_SUPPORTED_TRUE (0x00000001U)
+
+
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_C2C_SUPPORTED 12:12
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_C2C_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_C2C_SUPPORTED_TRUE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PCI_BAR1_SUPPORTED 13:13
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PCI_BAR1_SUPPORTED_FALSE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PCI_BAR1_SUPPORTED_TRUE (0x00000001U)
+
+/* P2P status codes */
+#define NV0000_P2P_CAPS_STATUS_OK (0x00U)
+#define NV0000_P2P_CAPS_STATUS_CHIPSET_NOT_SUPPORTED (0x01U)
+#define NV0000_P2P_CAPS_STATUS_GPU_NOT_SUPPORTED (0x02U)
+#define NV0000_P2P_CAPS_STATUS_IOH_TOPOLOGY_NOT_SUPPORTED (0x03U)
+#define NV0000_P2P_CAPS_STATUS_DISABLED_BY_REGKEY (0x04U)
+#define NV0000_P2P_CAPS_STATUS_NOT_SUPPORTED (0x05U)
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_P2P_CAPS_V2
+ *
+ * This command returns peer to peer capabilities present between GPUs.
+ * Valid requests must present a list of GPU Ids.
+ *
+ * [in] gpuIds
+ * This member contains the array of GPU IDs for which we query the P2P
+ * capabilities. Valid entries are contiguous, beginning with the first
+ * entry in the list.
+ * [in] gpuCount
+ * This member contains the number of GPU IDs stored in the gpuIds[] array.
+ * [out] p2pCaps
+ * This member returns the peer to peer capabilities discovered between the
+ * GPUs. Valid p2pCaps values include:
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_WRITES_SUPPORTED
+ * When this bit is set, peer to peer writes between subdevices owned
+ * by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_READS_SUPPORTED
+ * When this bit is set, peer to peer reads between subdevices owned
+ * by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PROP_SUPPORTED
+ * When this bit is set, peer to peer PROP between subdevices owned
+ * by this device are supported. This is enabled by default
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PCI_SUPPORTED
+ * When this bit is set, PCI is supported for all P2P between subdevices
+ * owned by this device.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_NVLINK_SUPPORTED
+ * When this bit is set, NVLINK is supported for all P2P between subdevices
+ * owned by this device.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_ATOMICS_SUPPORTED
+ * When this bit is set, peer to peer atomics between subdevices owned
+ * by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_LOOPBACK_SUPPORTED
+ * When this bit is set, peer to peer loopback is supported for subdevices
+ * owned by this device.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_WRITES_SUPPORTED
+ * When this bit is set, indirect peer to peer writes between subdevices
+ * owned by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_READS_SUPPORTED
+ * When this bit is set, indirect peer to peer reads between subdevices
+ * owned by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_ATOMICS_SUPPORTED
+ * When this bit is set, indirect peer to peer atomics between
+ * subdevices owned by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_NVLINK_SUPPORTED
+ * When this bit is set, indirect NVLINK is supported for subdevices
+ * owned by this device.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_C2C_SUPPORTED
+ * When this bit is set, C2C P2P is supported between the GPUs
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_BAR1_SUPPORTED
+ * When this bit is set, BAR1 P2P is supported between the GPUs
+ * mentioned in @ref gpuIds
+ * [out] p2pOptimalReadCEs
+ * For a pair of GPUs, return mask of CEs to use for p2p reads over Nvlink
+ * [out] p2pOptimalWriteCEs
+ * For a pair of GPUs, return mask of CEs to use for p2p writes over Nvlink
+ * [out] p2pCapsStatus
+ * This member returns status of all supported p2p capabilities. Valid
+ * status values include:
+ * NV0000_P2P_CAPS_STATUS_OK
+ * P2P capability is supported.
+ * NV0000_P2P_CAPS_STATUS_CHIPSET_NOT_SUPPORTED
+ * Chipset doesn't support p2p capability.
+ * NV0000_P2P_CAPS_STATUS_GPU_NOT_SUPPORTED
+ * GPU doesn't support p2p capability.
+ * NV0000_P2P_CAPS_STATUS_IOH_TOPOLOGY_NOT_SUPPORTED
+ * IOH topology isn't supported. For e.g. root ports are on different
+ * IOH.
+ * NV0000_P2P_CAPS_STATUS_DISABLED_BY_REGKEY
+ * P2P Capability is disabled by a regkey.
+ * NV0000_P2P_CAPS_STATUS_NOT_SUPPORTED
+ * P2P Capability is not supported.
+ * NV0000_P2P_CAPS_STATUS_NVLINK_SETUP_FAILED
+ * Indicates that NvLink P2P link setup failed.
+ * [out] busPeerIds
+ * Peer ID matrix. It is a one-dimentional array.
+ * busPeerIds[X * gpuCount + Y] maps from index X to index Y in
+ * the gpuIds[] table. For invalid or non-existent peer busPeerIds[]
+ * has the value NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INVALID_PEER.
+ * [out] busEgmPeerIds
+ * EGM Peer ID matrix. It is a one-dimentional array.
+ * busEgmPeerIds[X * gpuCount + Y] maps from index X to index Y in
+ * the gpuIds[] table. For invalid or non-existent peer busEgmPeerIds[]
+ * has the value NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INVALID_PEER.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_PARAM_STRUCT
+ */
+
+
+
+#define NV0000_CTRL_CMD_SYSTEM_GET_P2P_CAPS_V2 (0x12bU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_P2P_CAPS_V2_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_V2_PARAMS_MESSAGE_ID (0x2BU)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_P2P_CAPS_V2_PARAMS {
+ NvU32 gpuIds[NV0000_CTRL_SYSTEM_MAX_ATTACHED_GPUS];
+ NvU32 gpuCount;
+ NvU32 p2pCaps;
+ NvU32 p2pOptimalReadCEs;
+ NvU32 p2pOptimalWriteCEs;
+ NvU8 p2pCapsStatus[NV0000_CTRL_P2P_CAPS_INDEX_TABLE_SIZE];
+ NvU32 busPeerIds[NV0000_CTRL_SYSTEM_MAX_ATTACHED_GPUS_SQUARED];
+ NvU32 busEgmPeerIds[NV0000_CTRL_SYSTEM_MAX_ATTACHED_GPUS_SQUARED];
+} NV0000_CTRL_SYSTEM_GET_P2P_CAPS_V2_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_P2P_CAPS_MATRIX
+ *
+ * This command returns peer to peer capabilities present between all pairs of
+ * GPU IDs {(a, b) : a in gpuIdGrpA and b in gpuIdGrpB}. This can be used to
+ * collect all P2P capabilities in the system - see the SRT:
+ * NV0000_CTRL_CMD_SYSTEM_GET_P2P_CAPS_MATRIX_TEST
+ * for a demonstration.
+ *
+ * The call will query for all pairs between set A and set B, and returns
+ * results in both link directions. The results are two-dimensional arrays where
+ * the first dimension is the index within the set-A array of one GPU ID under
+ * consideration, and the second dimension is the index within the set-B array
+ * of the other GPU ID under consideration.
+ *
+ * That is, the result arrays are *ALWAYS* to be indexed first with the set-A
+ * index, then with the set-B index. The B-to-A direction of results are put in
+ * the b2aOptimal(Read|Write)CEs. This makes it unnecessary to call the query
+ * twice, since the usual use case requires both directions.
+ *
+ * If a set is being compared against itself (by setting grpBCount to 0), then
+ * the result matrices are symmetric - it doesn't matter which index is first.
+ * However, the choice of indices is effectively a choice of which ID is "B" and
+ * which is "A" for the "a2b" and "b2a" directional results.
+ *
+ * [in] grpACount
+ * This member contains the number of GPU IDs stored in the gpuIdGrpA[]
+ * array. Must be >= 0.
+ * [in] grpBCount
+ * This member contains the number of GPU IDs stored in the gpuIdGrpB[]
+ * array. Can be == 0 to specify a check of group A against itself.
+ * [in] gpuIdGrpA
+ * This member contains the array of GPU IDs in "group A", each of which
+ * will have its P2P capabilities returned with respect to each GPU ID in
+ * "group B". Valid entries are contiguous, beginning with the first entry
+ * in the list.
+ * [in] gpuIdGrpB
+ * This member contains the array of GPU IDs in "group B", each of which
+ * will have its P2P capabilities returned with respect to each GPU ID in
+ * "group A". Valid entries are contiguous, beginning with the first entry
+ * in the list. May be equal to gpuIdGrpA, but best performance requires
+ * that the caller specifies grpBCount = 0 in this case, and ignores this.
+ * [out] p2pCaps
+ * This member returns the peer to peer capabilities discovered between the
+ * pairs of input GPUs between the groups, indexed by [A_index][B_index].
+ * Valid p2pCaps values include:
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_WRITES_SUPPORTED
+ * When this bit is set, peer to peer writes between subdevices owned
+ * by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_READS_SUPPORTED
+ * When this bit is set, peer to peer reads between subdevices owned
+ * by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PROP_SUPPORTED
+ * When this bit is set, peer to peer PROP between subdevices owned
+ * by this device are supported. This is enabled by default
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_PCI_SUPPORTED
+ * When this bit is set, PCI is supported for all P2P between subdevices
+ * owned by this device.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_NVLINK_SUPPORTED
+ * When this bit is set, NVLINK is supported for all P2P between subdevices
+ * owned by this device.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_ATOMICS_SUPPORTED
+ * When this bit is set, peer to peer atomics between subdevices owned
+ * by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_LOOPBACK_SUPPORTED
+ * When this bit is set, peer to peer loopback is supported for subdevices
+ * owned by this device.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_WRITES_SUPPORTED
+ * When this bit is set, indirect peer to peer writes between subdevices
+ * owned by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_READS_SUPPORTED
+ * When this bit is set, indirect peer to peer reads between subdevices
+ * owned by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_ATOMICS_SUPPORTED
+ * When this bit is set, indirect peer to peer atomics between
+ * subdevices owned by this device are supported.
+ * NV0000_CTRL_SYSTEM_GET_P2P_CAPS_INDIRECT_NVLINK_SUPPORTED
+ * When this bit is set, indirect NVLINK is supported for subdevices
+ * owned by this device.
+ * [out] a2bOptimalReadCes
+ * For a pair of GPUs, return mask of CEs to use for p2p reads over Nvlink
+ * in the A-to-B direction.
+ * [out] a2bOptimalWriteCes
+ * For a pair of GPUs, return mask of CEs to use for p2p writes over Nvlink
+ * in the A-to-B direction.
+ * [out] b2aOptimalReadCes
+ * For a pair of GPUs, return mask of CEs to use for p2p reads over Nvlink
+ * in the B-to-A direction.
+ * [out] b2aOptimalWriteCes
+ * For a pair of GPUs, return mask of CEs to use for p2p writes over Nvlink
+ * in the B-to-A direction.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_PARAM_STRUCT
+ */
+
+
+
+#define NV0000_CTRL_CMD_SYSTEM_GET_P2P_CAPS_MATRIX (0x13aU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_P2P_CAPS_MATRIX_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_P2P_CAPS_MATRIX_PARAMS_MESSAGE_ID (0x3AU)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_P2P_CAPS_MATRIX_PARAMS {
+ NvU32 grpACount;
+ NvU32 grpBCount;
+ NvU32 gpuIdGrpA[NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS];
+ NvU32 gpuIdGrpB[NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS];
+ NvU32 p2pCaps[NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS][NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS];
+ NvU32 a2bOptimalReadCes[NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS][NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS];
+ NvU32 a2bOptimalWriteCes[NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS][NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS];
+ NvU32 b2aOptimalReadCes[NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS][NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS];
+ NvU32 b2aOptimalWriteCes[NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS][NV0000_CTRL_SYSTEM_MAX_P2P_GROUP_GPUS];
+} NV0000_CTRL_SYSTEM_GET_P2P_CAPS_MATRIX_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CTRL
+ *
+ * This command is used to execute general GPS Functions, most dealing with
+ * calling SBIOS, or retrieving cached sensor and GPS state data.
+ *
+ * version
+ * This parameter specifies the version of the interface. Legal values
+ * for this parameter are 1.
+ * cmd
+ * This parameter specifies the GPS API to be invoked.
+ * Valid values for this parameter are:
+ * NV0000_CTRL_GPS_CMD_GET_THERM_LIMIT
+ * This command gets the temperature limit for thermal controller. When
+ * this command is specified the input parameter contains ???.
+ * NV0000_CTRL_GPS_CMD_SET_THERM_LIMIT
+ * This command set the temperature limit for thermal controller. When
+ * this command is specified the input parameter contains ???.
+ * input
+ * This parameter specifies the cmd-specific input value.
+ * result
+ * This parameter returns the cmd-specific output value.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CTRL (0x12aU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GPS_CTRL_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GPS_CTRL_PARAMS_MESSAGE_ID (0x2AU)
+
+typedef struct NV0000_CTRL_SYSTEM_GPS_CTRL_PARAMS {
+ NvU32 cmd;
+ NvS32 input[2];
+ NvS32 result[4];
+} NV0000_CTRL_SYSTEM_GPS_CTRL_PARAMS;
+
+/* valid version values */
+#define NV0000_CTRL_GPS_PSHARE_PARAMS_PSP_CURRENT_VERSION (0x00010000U)
+
+/* valid cmd values */
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_THERM_LIMIT (0x00000002U)
+#define NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000U)
+#define NV0000_CTRL_GPS_RESULT_THERMAL_LIMIT (0x00000000U)
+#define NV0000_CTRL_GPS_RESULT_MIN_LIMIT (0x00000001U)
+#define NV0000_CTRL_GPS_RESULT_MAX_LIMIT (0x00000002U)
+#define NV0000_CTRL_GPS_RESULT_LIMIT_SOURCE (0x00000003U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_THERM_LIMIT (0x00000003U)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_INPUT_THERMAL_LIMIT (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_TEMP_CTRL_DOWN_N_DELTA (0x00000004U)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_RESULT_TEMP_CTRL_DOWN_N_DELTA (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_TEMP_CTRL_DOWN_N_DELTA (0x00000005U)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_INPUT_TEMP_CTRL_DOWN_N_DELTA (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_TEMP_CTRL_HOLD_DELTA (0x00000006U)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_RESULT_TEMP_CTRL_HOLD_DELTA (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_TEMP_CTRL_HOLD_DELTA (0x00000007U)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_INPUT_TEMP_CTRL_HOLD_DELTA (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_TEMP_CTRL_UP_DELTA (0x00000008U)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_RESULT_TEMP_CTRL_UP_DELTA (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_TEMP_CTRL_UP_DELTA (0x00000009U)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_INPUT_TEMP_CTRL_UP_DELTA (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_TEMP_CTRL_ENGAGE_DELTA (0x0000000AU)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_RESULT_TEMP_CTRL_ENGAGE_DELTA (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_TEMP_CTRL_ENGAGE_DELTA (0x0000000BU)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_INPUT_TEMP_CTRL_ENGAGE_DELTA (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_TEMP_CTRL_DISENGAGE_DELTA (0x0000000CU)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_RESULT_TEMP_CTRL_DISENGAGE_DELTA (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_TEMP_CTRL_DISENGAGE_DELTA (0x0000000DU)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_INPUT_TEMP_CTRL_DISENGAGE_DELTA (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_TEMP_CTRL_STATUS (0x00000016U)
+#define NV0000_CTRL_GPS_RESULT_TEMP_CTRL_STATUS (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_TEMP_CTRL_STATUS (0x00000017U)
+#define NV0000_CTRL_GPS_INPUT_TEMP_CTRL_STATUS (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_CPU_GET_UTIL_AVG_NUM (0x00000018U)
+#define NV0000_CTRL_GPS_RESULT_CPU_SET_UTIL_AVG_NUM (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_CPU_SET_UTIL_AVG_NUM (0x00000019U)
+#define NV0000_CTRL_GPS_INPUT_CPU_GET_UTIL_AVG_NUM (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_PERF_SENSOR (0x0000001AU)
+// NV0000_CTRL_GPS_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_GPS_INPUT_NEXT_EXPECTED_POLL (0x00000001U)
+#define NV0000_CTRL_GPS_RESULT_PERF_SENSOR_VALUE (0x00000000U)
+#define NV0000_CTRL_GPS_RESULT_PERF_SENSOR_AVAILABLE (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_CALL_ACPI (0x0000001BU)
+#define NV0000_CTRL_GPS_INPUT_ACPI_CMD (0x00000000U)
+#define NV0000_CTRL_GPS_INPUT_ACPI_PARAM_IN (0x00000001U)
+#define NV0000_CTRL_GPS_OUTPUT_ACPI_RESULT_1 (0x00000000U)
+#define NV0000_CTRL_GPS_OUTPUT_ACPI_RESULT_2 (0x00000001U)
+#define NV0000_CTRL_GPS_OUTPUT_ACPI_PSHAREPARAM_STATUS (0x00000000U)
+#define NV0000_CTRL_GPS_OUTPUT_ACPI_PSHAREPARAM_VERSION (0x00000001U)
+#define NV0000_CTRL_GPS_OUTPUT_ACPI_PSHAREPARAM_SZ (0x00000002U)
+#define NV0000_CTRL_GPS_OUTPUT_ACPI_PSS_SZ (0x00000000U)
+#define NV0000_CTRL_GPS_OUTPUT_ACPI_PSS_COUNT (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_IGPU_TURBO (0x0000001CU)
+#define NV0000_CTRL_GPS_INPUT_SET_IGPU_TURBO (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_TEMP_PERIOD (0x00000026U)
+#define NV0000_CTRL_GPS_INPUT_TEMP_PERIOD (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_TEMP_PERIOD (0x00000027U)
+#define NV0000_CTRL_GPS_RESULT_TEMP_PERIOD (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_TEMP_NUDGE_FACTOR (0x00000028U)
+#define NV0000_CTRL_GPS_INPUT_TEMP_NUDGE_UP (0x00000000U)
+#define NV0000_CTRL_GPS_INPUT_TEMP_NUDGE_DOWN (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_TEMP_NUDGE_FACTOR (0x00000029U)
+#define NV0000_CTRL_GPS_RESULT_TEMP_NUDGE_UP (0x00000000U)
+#define NV0000_CTRL_GPS_RESULT_TEMP_NUDGE_DOWN (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_TEMP_THRESHOLD_SAMPLES (0x0000002AU)
+#define NV0000_CTRL_GPS_INPUT_TEMP_THRESHOLD_SAMPLE_HOLD (0x00000000U)
+#define NV0000_CTRL_GPS_INPUT_TEMP_THRESHOLD_SAMPLE_STEP (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_TEMP_THRESHOLD_SAMPLES (0x0000002BU)
+#define NV0000_CTRL_GPS_RESULT_TEMP_THRESHOLD_SAMPLE_HOLD (0x00000000U)
+#define NV0000_CTRL_GPS_RESULT_TEMP_THRESHOLD_SAMPLE_STEP (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_TEMP_PERF_LIMITS (0x0000002CU)
+#define NV0000_CTRL_GPS_INPUT_TEMP_PERF_LIMIT_UPPER (0x00000000U)
+#define NV0000_CTRL_GPS_INPUT_TEMP_PERF_LIMIT_LOWER (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_TEMP_PERF_LIMITS (0x0000002DU)
+#define NV0000_CTRL_GPS_RESULT_TEMP_PERF_LIMIT_UPPER (0x00000000U)
+#define NV0000_CTRL_GPS_RESULT_TEMP_PERF_LIMIT_LOWER (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_PM1_AVAILABLE (0x0000002EU)
+#define NV0000_CTRL_GPS_INPUT_PM1_AVAILABLE (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_PM1_AVAILABLE (0x0000002FU)
+#define NV0000_CTRL_GPS_OUTPUT_PM1_AVAILABLE (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_CPU_PACKAGE_LIMITS (0x00000044U)
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_CPU_PACKAGE_LIMITS_PL1 (0x00000000U)
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_CPU_PACKAGE_LIMITS_PL2 (0x00000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_CPU_PACKAGE_LIMITS (0x00000045U)
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_CPU_PACKAGE_LIMITS_PL1 (0x00000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_CPU_FREQ_LIMIT (0x00000046U)
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_CPU_FREQ_LIMIT_MHZ (0000000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_CPU_FREQ_LIMIT (0x00000047U)
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_CPU_FREQ_LIMIT_MHZ (0000000000U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_PPM (0x00000048U)
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_PPM_INDEX (0000000000U)
+#define NV0000_CTRL_GPS_CMD_TYPE_GET_PPM_AVAILABLE_MASK (0000000001U)
+
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_PPM (0x00000049U)
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_PPM_INDEX (0000000000U)
+#define NV0000_CTRL_GPS_CMD_TYPE_SET_PPM_INDEX_MAX (2U)
+
+#define NV0000_CTRL_GPS_PPM_INDEX 7:0
+#define NV0000_CTRL_GPS_PPM_INDEX_MAXPERF (0U)
+#define NV0000_CTRL_GPS_PPM_INDEX_BALANCED (1U)
+#define NV0000_CTRL_GPS_PPM_INDEX_QUIET (2U)
+#define NV0000_CTRL_GPS_PPM_INDEX_INVALID (0xFFU)
+#define NV0000_CTRL_GPS_PPM_MASK 15:8
+#define NV0000_CTRL_GPS_PPM_MASK_INVALID (0U)
+
+/* valid PS_STATUS result values */
+#define NV0000_CTRL_GPS_CMD_PS_STATUS_OFF (0U)
+#define NV0000_CTRL_GPS_CMD_PS_STATUS_ON (1U)
+
+
+#define GPS_MAX_COUNTERS_PER_BLOCK 32U
+#define NV0000_CTRL_SYSTEM_GPS_GET_PERF_SENSOR_COUNTERS_PARAMS_MESSAGE_ID (0x29U)
+
+typedef struct NV0000_CTRL_SYSTEM_GPS_GET_PERF_SENSOR_COUNTERS_PARAMS {
+ NvU32 objHndl;
+ NvU32 blockId;
+ NvU32 nextExpectedSampleTimems;
+ NvU32 countersReq;
+ NvU32 countersReturned;
+ NvU32 counterBlock[GPS_MAX_COUNTERS_PER_BLOCK];
+} NV0000_CTRL_SYSTEM_GPS_GET_PERF_SENSOR_COUNTERS_PARAMS;
+
+#define NV0000_CTRL_CMD_SYSTEM_GPS_GET_PERF_SENSORS (0x12cU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GPS_GET_PERF_SENSORS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GPS_GET_PERF_SENSORS_PARAMS_MESSAGE_ID (0x2CU)
+
+typedef NV0000_CTRL_SYSTEM_GPS_GET_PERF_SENSOR_COUNTERS_PARAMS NV0000_CTRL_SYSTEM_GPS_GET_PERF_SENSORS_PARAMS;
+
+#define NV0000_CTRL_CMD_SYSTEM_GPS_GET_EXTENDED_PERF_SENSORS (0x12eU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GPS_GET_EXTENDED_PERF_SENSORS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GPS_GET_EXTENDED_PERF_SENSORS_PARAMS_MESSAGE_ID (0x2EU)
+
+typedef NV0000_CTRL_SYSTEM_GPS_GET_PERF_SENSOR_COUNTERS_PARAMS NV0000_CTRL_SYSTEM_GPS_GET_EXTENDED_PERF_SENSORS_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GPS_CALL_ACPI
+ *
+ * This command allows users to call GPS ACPI commands for testing purposes.
+ *
+ * cmd
+ * This parameter specifies the GPS ACPI command to execute.
+ *
+ * input
+ * This parameter specified the cmd-dependent input value.
+ *
+ * resultSz
+ * This parameter returns the size (in bytes) of the valid data
+ * returned in the result parameter.
+ *
+ * result
+ * This parameter returns the results of the specified cmd.
+ * The maximum size (in bytes) of this returned data will
+ * not exceed GPS_MAX_ACPI_OUTPUT_BUFFER_SIZE
+ *
+ * GPS_MAX_ACPI_OUTPUT_BUFFER_SIZE
+ * The size of buffer (result) in unit of NvU32.
+ * The smallest value is sizeof(PSS_ENTRY)*ACPI_PSS_ENTRY_MAX.
+ * Since the prior one is 24 bytes, and the later one is 48,
+ * this value cannot be smaller than 288.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT,
+ * NV_ERR_INVALID_OBJECT_HANDLE
+ * NV_ERR_NOT_SUPPORTED
+ * NV_ERR_INSUFFICIENT_PERMISSIONS
+ *
+ */
+#define GPS_MAX_ACPI_OUTPUT_BUFFER_SIZE 288U
+#define NV0000_CTRL_SYSTEM_GPS_CALL_ACPI_PARAMS_MESSAGE_ID (0x2DU)
+
+typedef struct NV0000_CTRL_SYSTEM_GPS_CALL_ACPI_PARAMS {
+ NvU32 cmd;
+ NvU32 input;
+ NvU32 resultSz;
+ NvU32 result[GPS_MAX_ACPI_OUTPUT_BUFFER_SIZE];
+} NV0000_CTRL_SYSTEM_GPS_CALL_ACPI_PARAMS;
+
+#define NV0000_CTRL_CMD_SYSTEM_GPS_CALL_ACPI (0x12dU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GPS_CALL_ACPI_PARAMS_MESSAGE_ID" */
+
+/*
+ * NV0000_CTRL_SYSTEM_PARAM_*
+ *
+ * The following is a list of system-level parameters (often sensors) that the
+ * driver can be made aware of. They are primarily intended to be used by system
+ * power-balancing algorithms that require system-wide visibility in order to
+ * function. The names and values used here are established and specified in
+ * several different NVIDIA documents that are made externally available. Thus,
+ * updates to this list must be made with great caution. The only permissible
+ * change is to append new parameters. Reordering is strictly prohibited.
+ *
+ * Brief Parameter Summary:
+ * TGPU - GPU temperature (NvTemp)
+ * PDTS - CPU package temperature (NvTemp)
+ * SFAN - System fan speed (% of maximum fan speed)
+ * SKNT - Skin temperature (NvTemp)
+ * CPUE - CPU energy counter (NvU32)
+ * TMP1 - Additional temperature sensor 1 (NvTemp)
+ * TMP2 - Additional temperature sensor 2 (NvTemp)
+ * CTGP - Mode 2 power limit offset (NvU32)
+ * PPMD - Power mode data (NvU32)
+ */
+#define NV0000_CTRL_SYSTEM_PARAM_TGPU (0x00000000U)
+#define NV0000_CTRL_SYSTEM_PARAM_PDTS (0x00000001U)
+#define NV0000_CTRL_SYSTEM_PARAM_SFAN (0x00000002U)
+#define NV0000_CTRL_SYSTEM_PARAM_SKNT (0x00000003U)
+#define NV0000_CTRL_SYSTEM_PARAM_CPUE (0x00000004U)
+#define NV0000_CTRL_SYSTEM_PARAM_TMP1 (0x00000005U)
+#define NV0000_CTRL_SYSTEM_PARAM_TMP2 (0x00000006U)
+#define NV0000_CTRL_SYSTEM_PARAM_CTGP (0x00000007U)
+#define NV0000_CTRL_SYSTEM_PARAM_PPMD (0x00000008U)
+#define NV0000_CTRL_SYSTEM_PARAM_COUNT (0x00000009U)
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_EXECUTE_ACPI_METHOD
+ *
+ * This command is used to execute general ACPI methods.
+ *
+ * method
+ * This parameter identifies the MXM ACPI API to be invoked.
+ * Valid values for this parameter are:
+ * NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NVOP_OPTIMUSCAPS
+ * This value specifies that the DSM NVOP subfunction OPTIMUSCAPS
+ * API is to be invoked.
+ * NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NVOP_OPTIMUSFLAG
+ * This value specifies that the DSM NVOP subfunction OPTIMUSFLAG
+ * API is to be invoked. This API will set a Flag in sbios to Indicate
+ * that HD Audio Controller is disable/Enabled from GPU Config space.
+ * This flag will be used by sbios to restore Audio state after resuming
+ * from s3/s4.
+ * NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_JT_CAPS
+ * This value specifies that the DSM JT subfunction FUNC_CAPS is to
+ * to be invoked to get the SBIOS capabilities
+ * NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_JT_PLATPOLICY
+ * This value specifies that the DSM JT subfunction FUNC_PLATPOLICY is
+ * to be invoked to set and get the various platform policies for JT.
+ * Refer to the JT spec in more detail on various policies.
+ * inData
+ * This parameter specifies the method-specific input buffer. Data is
+ * passed to the specified API using this buffer.
+ * inDataSize
+ * This parameter specifies the size of the inData buffer in bytes.
+ * outStatus
+ * This parameter returns the status code from the associated ACPI call.
+ * outData
+ * This parameter specifies the method-specific output buffer. Data
+ * is returned by the specified API using this buffer.
+ * outDataSize
+ * This parameter specifies the size of the outData buffer in bytes.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_EXECUTE_ACPI_METHOD (0x130U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_PARAMS_MESSAGE_ID (0x30U)
+
+typedef struct NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_PARAMS {
+ NvU32 method;
+ NV_DECLARE_ALIGNED(NvP64 inData, 8);
+ NvU16 inDataSize;
+ NvU32 outStatus;
+ NV_DECLARE_ALIGNED(NvP64 outData, 8);
+ NvU16 outDataSize;
+} NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_PARAMS;
+
+/* valid method parameter values */
+#define NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NVOP_OPTIMUSCAPS (0x00000000U)
+#define NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NVOP_OPTIMUSFLAG (0x00000001U)
+#define NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_JT_CAPS (0x00000002U)
+#define NV0000_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_JT_PLATPOLICY (0x00000003U)
+/*
+ * NV0000_CTRL_CMD_SYSTEM_ENABLE_ETW_EVENTS
+ *
+ * This command can be used to instruct the RM to enable/disable specific module
+ * of ETW events.
+ *
+ * moduleMask
+ * This parameter specifies the module of events we would like to
+ * enable/disable.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ */
+#define NV0000_CTRL_CMD_SYSTEM_ENABLE_ETW_EVENTS (0x131U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_ENABLE_ETW_EVENTS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_ENABLE_ETW_EVENTS_PARAMS_MESSAGE_ID (0x31U)
+
+typedef struct NV0000_CTRL_SYSTEM_ENABLE_ETW_EVENTS_PARAMS {
+ NvU32 moduleMask;
+} NV0000_CTRL_SYSTEM_ENABLE_ETW_EVENTS_PARAMS;
+
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_ALL (0x00000001U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_NOFREQ (0x00000002U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_FLUSH (0x00000004U)
+
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_PERF (0x00000010U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_ELPG (0x00000020U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_NVDPS (0x00000040U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_POWER (0x00000080U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_DISP (0x00000100U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_RMAPI (0x00000200U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_INTR (0x00000400U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_LOCK (0x00000800U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_RCJOURNAL (0x00001000U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_GENERIC (0x00002000U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_THERM (0x00004000U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_GPS (0x00008000U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_PCIE (0x00010000U)
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_NVTELEMETRY (0x00020000U)
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GPS_GET_FRM_DATA
+ *
+ * This command is used to read FRL data based on need.
+ *
+ * nextSampleNumber
+ * This parameter returns the counter of next sample which is being filled.
+ * samples
+ * This parameter returns the frame time, render time, target time, client ID
+ * with one reserve bit for future use.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_NOT_SUPPORTED
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_GPS_GET_FRM_DATA (0x12fU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GPS_GET_FRM_DATA_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GPS_FRM_DATA_SAMPLE_SIZE 64U
+
+typedef struct NV0000_CTRL_SYSTEM_GPS_FRM_DATA_SAMPLE {
+ NvU16 frameTime;
+ NvU16 renderTime;
+ NvU16 targetTime;
+ NvU8 sleepTime;
+ NvU8 sampleNumber;
+} NV0000_CTRL_SYSTEM_GPS_FRM_DATA_SAMPLE;
+
+#define NV0000_CTRL_SYSTEM_GPS_GET_FRM_DATA_PARAMS_MESSAGE_ID (0x2FU)
+
+typedef struct NV0000_CTRL_SYSTEM_GPS_GET_FRM_DATA_PARAMS {
+ NV0000_CTRL_SYSTEM_GPS_FRM_DATA_SAMPLE samples[NV0000_CTRL_SYSTEM_GPS_FRM_DATA_SAMPLE_SIZE];
+ NvU8 nextSampleNumber;
+} NV0000_CTRL_SYSTEM_GPS_GET_FRM_DATA_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GPS_SET_FRM_DATA
+ *
+ * This command is used to write FRM data based on need.
+ *
+ * frameTime
+ * This parameter contains the frame time of current frame.
+ * renderTime
+ * This parameter contains the render time of current frame.
+ * targetTime
+ * This parameter contains the target time of current frame.
+ * sleepTime
+ * This parameter contains the sleep duration inserted by FRL for the latest frame.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_NOT_SUPPORTED
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_GPS_SET_FRM_DATA (0x132U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GPS_SET_FRM_DATA_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GPS_SET_FRM_DATA_PARAMS_MESSAGE_ID (0x32U)
+
+typedef struct NV0000_CTRL_SYSTEM_GPS_SET_FRM_DATA_PARAMS {
+ NV0000_CTRL_SYSTEM_GPS_FRM_DATA_SAMPLE sampleData;
+} NV0000_CTRL_SYSTEM_GPS_SET_FRM_DATA_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_VGX_SYSTEM_INFO
+ *
+ * This command returns the current host driver, host OS and
+ * plugin information. It is only valid when VGX is setup.
+ * szHostDriverVersionBuffer
+ * This field returns the host driver version (NV_VERSION_STRING).
+ * szHostVersionBuffer
+ * This field returns the host driver version (NV_BUILD_BRANCH_VERSION).
+ * szHostTitleBuffer
+ * This field returns the host driver title (NV_DISPLAY_DRIVER_TITLE).
+ * szPluginTitleBuffer
+ * This field returns the plugin build title (NV_DISPLAY_DRIVER_TITLE).
+ * szHostUnameBuffer
+ * This field returns the call of 'uname' on the host OS.
+ * iHostChangelistNumber
+ * This field returns the changelist value of the host driver (NV_BUILD_CHANGELIST_NUM).
+ * iPluginChangelistNumber
+ * This field returns the changelist value of the plugin (NV_BUILD_CHANGELIST_NUM).
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_GET_VGX_SYSTEM_INFO_BUFFER_SIZE 256U
+#define NV0000_CTRL_CMD_SYSTEM_GET_VGX_SYSTEM_INFO (0x133U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_VGX_SYSTEM_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_VGX_SYSTEM_INFO_PARAMS_MESSAGE_ID (0x33U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_VGX_SYSTEM_INFO_PARAMS {
+ char szHostDriverVersionBuffer[NV0000_CTRL_CMD_SYSTEM_GET_VGX_SYSTEM_INFO_BUFFER_SIZE];
+ char szHostVersionBuffer[NV0000_CTRL_CMD_SYSTEM_GET_VGX_SYSTEM_INFO_BUFFER_SIZE];
+ char szHostTitleBuffer[NV0000_CTRL_CMD_SYSTEM_GET_VGX_SYSTEM_INFO_BUFFER_SIZE];
+ char szPluginTitleBuffer[NV0000_CTRL_CMD_SYSTEM_GET_VGX_SYSTEM_INFO_BUFFER_SIZE];
+ char szHostUnameBuffer[NV0000_CTRL_CMD_SYSTEM_GET_VGX_SYSTEM_INFO_BUFFER_SIZE];
+ NvU32 iHostChangelistNumber;
+ NvU32 iPluginChangelistNumber;
+} NV0000_CTRL_SYSTEM_GET_VGX_SYSTEM_INFO_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_GPUS_POWER_STATUS
+ *
+ * This command returns the power status of the GPUs in the system, successfully attached or not because of
+ * insufficient power. It is supported on Kepler and up only.
+ * gpuCount
+ * This field returns the count into the following arrays.
+ * busNumber
+ * This field returns the busNumber of a GPU.
+ * gpuExternalPowerStatus
+ * This field returns the corresponding external power status:
+ * NV0000_CTRL_SYSTEM_GPU_EXTERNAL_POWER_STATUS_CONNECTED
+ * NV0000_CTRL_SYSTEM_GPU_EXTERNAL_POWER_STATUS_NOT_CONNECTED
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_NOT_SUPPORTED
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_GET_GPUS_POWER_STATUS (0x134U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_GPUS_POWER_STATUS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_GPUS_POWER_STATUS_PARAMS_MESSAGE_ID (0x34U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_GPUS_POWER_STATUS_PARAMS {
+ NvU8 gpuCount;
+ NvU8 gpuBus[NV0000_CTRL_SYSTEM_MAX_ATTACHED_GPUS];
+ NvU8 gpuExternalPowerStatus[NV0000_CTRL_SYSTEM_MAX_ATTACHED_GPUS];
+} NV0000_CTRL_SYSTEM_GET_GPUS_POWER_STATUS_PARAMS;
+
+/* Valid gpuExternalPowerStatus values */
+#define NV0000_CTRL_SYSTEM_GPU_EXTERNAL_POWER_STATUS_CONNECTED 0U
+#define NV0000_CTRL_SYSTEM_GPU_EXTERNAL_POWER_STATUS_NOT_CONNECTED 1U
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_PRIVILEGED_STATUS
+ *
+ * This command returns the caller's API access privileges using
+ * this client handle.
+ *
+ * privStatus
+ * This parameter returns a mask of possible access privileges:
+ * NV0000_CTRL_SYSTEM_PRIVILEGED_STATUS_PRIV_USER_FLAG
+ * The caller is running with elevated privileges
+ * NV0000_CTRL_SYSTEM_PRIVILEGED_STATUS_ROOT_HANDLE_FLAG
+ * Client is of NV01_ROOT class.
+ * NV0000_CTRL_SYSTEM_PRIVILEGED_STATUS_PRIV_HANDLE_FLAG
+ * Client has PRIV bit set.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ */
+
+
+#define NV0000_CTRL_CMD_SYSTEM_GET_PRIVILEGED_STATUS (0x135U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_PRIVILEGED_STATUS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_PRIVILEGED_STATUS_PARAMS_MESSAGE_ID (0x35U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_PRIVILEGED_STATUS_PARAMS {
+ NvU8 privStatusFlags;
+} NV0000_CTRL_SYSTEM_GET_PRIVILEGED_STATUS_PARAMS;
+
+
+/* Valid privStatus values */
+#define NV0000_CTRL_SYSTEM_GET_PRIVILEGED_STATUS_PRIV_USER_FLAG (0x00000001U)
+#define NV0000_CTRL_SYSTEM_GET_PRIVILEGED_STATUS_KERNEL_HANDLE_FLAG (0x00000002U)
+#define NV0000_CTRL_SYSTEM_GET_PRIVILEGED_STATUS_PRIV_HANDLE_FLAG (0x00000004U)
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_FABRIC_STATUS
+ *
+ * The fabric manager (FM) notifies RM that fabric (system) is ready for peer to
+ * peer (P2P) use or still initializing the fabric. This command allows clients
+ * to query fabric status to allow P2P operations.
+ *
+ * Note, on systems where FM isn't used, RM just returns _SKIP.
+ *
+ * fabricStatus
+ * This parameter returns current fabric status:
+ * NV0000_CTRL_GET_SYSTEM_FABRIC_STATUS_SKIP
+ * NV0000_CTRL_GET_SYSTEM_FABRIC_STATUS_UNINITIALIZED
+ * NV0000_CTRL_GET_SYSTEM_FABRIC_STATUS_IN_PROGRESS
+ * NV0000_CTRL_GET_SYSTEM_FABRIC_STATUS_INITIALIZED
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_INVALID_OBJECT_HANDLE
+ * NV_ERR_NOT_SUPPORTED
+ * NV_ERR_INSUFFICIENT_PERMISSIONS
+ * NV_ERR_INVALID_PARAM_STRUCT
+ */
+
+typedef enum NV0000_CTRL_GET_SYSTEM_FABRIC_STATUS {
+ NV0000_CTRL_GET_SYSTEM_FABRIC_STATUS_SKIP = 1,
+ NV0000_CTRL_GET_SYSTEM_FABRIC_STATUS_UNINITIALIZED = 2,
+ NV0000_CTRL_GET_SYSTEM_FABRIC_STATUS_IN_PROGRESS = 3,
+ NV0000_CTRL_GET_SYSTEM_FABRIC_STATUS_INITIALIZED = 4,
+} NV0000_CTRL_GET_SYSTEM_FABRIC_STATUS;
+
+#define NV0000_CTRL_CMD_SYSTEM_GET_FABRIC_STATUS (0x136U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_FABRIC_STATUS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_FABRIC_STATUS_PARAMS_MESSAGE_ID (0x36U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_FABRIC_STATUS_PARAMS {
+ NV0000_CTRL_GET_SYSTEM_FABRIC_STATUS fabricStatus;
+} NV0000_CTRL_SYSTEM_GET_FABRIC_STATUS_PARAMS;
+
+/*
+ * NV0000_CTRL_VGPU_GET_VGPU_VERSION_INFO
+ *
+ * This command is used to query the range of VGX version supported.
+ *
+ * host_min_supported_version
+ * The minimum vGPU version supported by host driver
+ * host_max_supported_version
+ * The maximum vGPU version supported by host driver
+ * user_min_supported_version
+ * The minimum vGPU version set by user for vGPU support
+ * user_max_supported_version
+ * The maximum vGPU version set by user for vGPU support
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_REQUEST
+ */
+#define NV0000_CTRL_VGPU_GET_VGPU_VERSION (0x137U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_VGPU_GET_VGPU_VERSION_PARAMS_MESSAGE_ID" */
+
+/*
+ * NV0000_CTRL_VGPU_GET_VGPU_VERSION
+ */
+#define NV0000_CTRL_VGPU_GET_VGPU_VERSION_PARAMS_MESSAGE_ID (0x37U)
+
+typedef struct NV0000_CTRL_VGPU_GET_VGPU_VERSION_PARAMS {
+ NvU32 host_min_supported_version;
+ NvU32 host_max_supported_version;
+ NvU32 user_min_supported_version;
+ NvU32 user_max_supported_version;
+} NV0000_CTRL_VGPU_GET_VGPU_VERSION_PARAMS;
+
+/*
+ * NV0000_CTRL_VGPU_SET_VGPU_VERSION
+ *
+ * This command is used to query whether pGPU is live migration capable or not.
+ *
+ * min_version
+ * The minimum vGPU version to be supported being set
+ * max_version
+ * The maximum vGPU version to be supported being set
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_REQUEST
+ */
+#define NV0000_CTRL_VGPU_SET_VGPU_VERSION (0x138U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_VGPU_SET_VGPU_VERSION_PARAMS_MESSAGE_ID" */
+
+/*
+ * NV0000_CTRL_VGPU_SET_VGPU_VERSION_PARAMS
+ */
+#define NV0000_CTRL_VGPU_SET_VGPU_VERSION_PARAMS_MESSAGE_ID (0x38U)
+
+typedef struct NV0000_CTRL_VGPU_SET_VGPU_VERSION_PARAMS {
+ NvU32 min_version;
+ NvU32 max_version;
+} NV0000_CTRL_VGPU_SET_VGPU_VERSION_PARAMS;
+
+/*
+ * NV0000_CTRL_SYSTEM_GET_RM_INSTANCE_ID
+ *
+ * This command is used to get a unique identifier for the instance of RM.
+ * The returned value will only change when the driver is reloaded. A previous
+ * value will never be reused on a given machine.
+ *
+ * rm_instance_id;
+ * The instance ID of the current RM instance
+ *
+ * Possible status values returned are:
+ * NV_OK
+ */
+#define NV0000_CTRL_CMD_SYSTEM_GET_RM_INSTANCE_ID (0x139U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_RM_INSTANCE_ID_PARAMS_MESSAGE_ID" */
+
+/*
+ * NV0000_CTRL_SYSTEM_GET_RM_INSTANCE_ID_PARAMS
+ */
+#define NV0000_CTRL_SYSTEM_GET_RM_INSTANCE_ID_PARAMS_MESSAGE_ID (0x39U)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_RM_INSTANCE_ID_PARAMS {
+ NV_DECLARE_ALIGNED(NvU64 rm_instance_id, 8);
+} NV0000_CTRL_SYSTEM_GET_RM_INSTANCE_ID_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_NVPCF_GET_POWER_MODE_INFO
+ *
+ * This API is used to get the TPP(total processing power) and
+ * the rated TGP(total GPU power) from SBIOS.
+ *
+ * NVPCF is an acronym for Nvidia Platform Controllers and Framework
+ * which implements platform level policies. NVPCF is implemented in
+ * a kernel driver on windows. It is implemented in a user mode app
+ * called nvidia-powerd on Linux.
+ *
+ * Valid subFunc ids for NVPCF 1x include :
+ * NVPCF0100_CTRL_CONFIG_DSM_1X_FUNC_GET_SUPPORTED
+ * NVPCF0100_CTRL_CONFIG_DSM_1X_FUNC_GET_DYNAMIC_PARAMS
+ *
+ * Valid subFunc ids for NVPCF 2x include :
+ * NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_GET_SUPPORTED
+ * NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_GET_DYNAMIC_PARAMS
+ * NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_GET_STATIC_CONFIG_TABLES
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_REQUEST
+ * NV_ERR_NOT_SUPPORTED
+ */
+#define NV0000_CTRL_CMD_SYSTEM_NVPCF_GET_POWER_MODE_INFO (0x13bU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_NVPCF_GET_POWER_MODE_INFO_PARAMS_MESSAGE_ID" */
+#define NVPCF_CTRL_SYSPWRLIMIT_TYPE_BASE 1U
+#define NV0000_CTRL_SYSTEM_POWER_INFO_INDEX_MAX_SIZE 32U
+
+#define NV0000_CTRL_CMD_SYSTEM_GET_SYSTEM_POWER_LIMIT_MESSAGE_ID (0x48U)
+
+typedef struct NV0000_CTRL_CMD_SYSTEM_GET_SYSTEM_POWER_LIMIT {
+
+ /* Battery state of charge threshold (percent 0-100) */
+ NvU8 batteryStateOfChargePercent;
+
+ /* Long Timescale Battery current limit (milliamps) */
+ NvU32 batteryCurrentLimitmA;
+
+ /* Rest of system reserved power (milliwatts) */
+ NvU32 restOfSytemReservedPowermW;
+
+ /* Min CPU TDP (milliwatts) */
+ NvU32 minCpuTdpmW;
+
+ /* Max CPU TDP (milliwatts) */
+ NvU32 maxCpuTdpmW;
+
+ /* Short Timescale Battery current limit (milliamps) */
+ NvU32 shortTimescaleBatteryCurrentLimitmA;
+} NV0000_CTRL_CMD_SYSTEM_GET_SYSTEM_POWER_LIMIT;
+
+/*!
+ * States for the Battery CPU TDP Control ability.
+ * _CPU_TDP_CONTROL_TYPE_DC_ONLY :==> Legacy setting for DC only CPU TDP Control
+ * _CPU_TDP_CONTROL_TYPE_DC_AC :==> AC and DC both support CPU TDP Control
+ */
+typedef enum QBOOST_CPU_TDP_CONTROL_TYPE {
+ QBOOST_CPU_TDP_CONTROL_TYPE_DC_ONLY = 0,
+ QBOOST_CPU_TDP_CONTROL_TYPE_DC_AC = 1,
+} QBOOST_CPU_TDP_CONTROL_TYPE;
+
+#define NV0000_CTRL_SYSTEM_NVPCF_GET_POWER_MODE_INFO_PARAMS_MESSAGE_ID (0x3BU)
+
+typedef struct NV0000_CTRL_SYSTEM_NVPCF_GET_POWER_MODE_INFO_PARAMS {
+ /*Buffer to get all the supported functions*/
+ NvU32 supportedFuncs;
+
+ /* GPU ID */
+ NvU32 gpuId;
+
+ /* Total processing power including CPU and GPU */
+ NvU32 tpp;
+
+ /* Rated total GPU Power */
+ NvU32 ratedTgp;
+
+ /* NVPCF subfunction id */
+ NvU32 subFunc;
+
+ /* Configurable TGP offset, in mW */
+ NvS32 ctgpOffsetmW;
+
+ /* TPP, as offset in mW */
+ NvS32 targetTppOffsetmW;
+
+ /* Maximum allowed output, as offset in mW */
+ NvS32 maxOutputOffsetmW;
+
+ /* Minimum allowed output, as offset in mW */
+ NvS32 minOutputOffsetmW;
+
+ /* Configurable TGP offset, on battery, in milli-Watts. */
+ NvS32 ctgpBattOffsetmW;
+
+ /* Target total processing power on battery, offset, in milli-Watts. */
+ NvS32 targetTppBattOffsetmW;
+
+ /*
+ * Maximum allowed output on battery, offset, in milli-Watts.
+ */
+ NvS32 maxOutputBattOffsetmW;
+
+ /*
+ * Minimum allowed output on battery, offset, in milli-Watts.
+ */
+ NvS32 minOutputBattOffsetmW;
+
+ /*
+ * If value specified is larger than the statically assigned ROS reserve in
+ * the system power limits table, this will take affect.
+ *
+ * A value of zero naturally works as a clear as it will be lesser than the
+ * statically assigned value.
+ */
+ NvU32 dcRosReserveOverridemW;
+
+ /*
+ * This is the active arbitrated long timescale limit provided by Qboost and
+ * honored by JPAC/JPPC
+ */
+ NvU32 dcTspLongTimescaleLimitmA;
+
+ /*
+ * The long timescale limit override.
+ */
+ NvU32 dcTspLongTimescaleLimitOverridemA;
+
+ /*
+ * This is the active arbitrated short timescale limit provided by Qboost and
+ * honored by RM/PMU
+ */
+ NvU32 dcTspShortTimescaleLimitmA;
+
+ /*
+ * This is the value provided by the SBIOS to update the short timescale
+ * DC-TSP power policy managed by the PMU
+ */
+ NvU32 dcTspShortTimescaleLimitOverridemA;
+
+ /* Dynamic Boost AC support */
+ NvBool bEnableForAC;
+
+ /* Dynamic Boost DC support */
+ NvBool bEnableForDC;
+
+ /* The System Controller Table Version */
+ NvU8 version;
+
+ /* Base sampling period */
+ NvU16 samplingPeriodmS;
+
+ /* Sampling Multiplier */
+ NvU16 samplingMulti;
+
+ /* Fitler function type */
+ NvU8 filterType;
+
+ union {
+
+ /* weight */
+ NvU8 weight;
+
+ /* windowSize */
+ NvU8 windowSize;
+ } filterParam;
+
+ /* Reserved */
+ NvU16 filterReserved;
+
+ /* Controller Type Dynamic Boost Controller */
+ NvBool bIsBoostController;
+
+ /* Increase power limit ratio */
+ NvU16 incRatio;
+
+ /* Decrease power limit ratio */
+ NvU16 decRatio;
+
+ /* Dynamic Boost Controller DC Support */
+ NvBool bSupportBatt;
+
+ /* CPU type(Intel/AMD) */
+ NvU8 cpuType;
+
+ /* GPU type(Nvidia) */
+ NvU8 gpuType;
+
+ /* System Power Table info index */
+ NvU32 sysPwrIndex;
+
+ /* System Power Table get table limits */
+ NV0000_CTRL_CMD_SYSTEM_GET_SYSTEM_POWER_LIMIT sysPwrGetInfo[NV0000_CTRL_SYSTEM_POWER_INFO_INDEX_MAX_SIZE];
+
+ /*
+ * Does this version of the system power limits table support TSP -> table
+ * version 2.0 and later should set this to true
+ */
+ NvBool bIsTspSupported;
+
+ /*
+ * Stores the System Power Limits (Battery State of Charge aka BSOC) table version implemented by the SBIOS
+ *
+ */
+ NvU8 sysPwrLimitsTableVersion;
+
+ /* SYSPWRLIMIT class types */
+ NvU32 type;
+
+ /* CPU TDP Limit to be set (milliwatts) */
+ NvU32 cpuTdpmw;
+
+ /* CPU TDP Control Support */
+ QBOOST_CPU_TDP_CONTROL_TYPE cpuTdpControlType;
+} NV0000_CTRL_SYSTEM_NVPCF_GET_POWER_MODE_INFO_PARAMS;
+
+/* Define the filter types */
+#define CONTROLLER_FILTER_TYPE_EMWA 0U
+#define CONTROLLER_FILTER_TYPE_MOVING_MAX 1U
+
+/* Valid NVPCF subfunction case */
+#define NVPCF0100_CTRL_CONFIG_DSM_1X_FUNC_GET_SUPPORTED_CASE 0U
+#define NVPCF0100_CTRL_CONFIG_DSM_1X_FUNC_GET_DYNAMIC_CASE 1U
+#define NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_GET_SUPPORTED_CASE 2U
+#define NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_GET_DYNAMIC_CASE 3U
+
+/* NVPCF subfunction to get the static data tables */
+#define NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_GET_STATIC_CASE 4U
+
+/* NVPCF subfunction to get the system power limits table */
+#define NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_GET_DC_SYSTEM_POWER_LIMITS_CASE 5U
+
+/* NVPCF subfunction to change the CPU's TDP limit */
+#define NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_CPU_TDP_LIMIT_CONTROL_CASE 6U
+
+/* Valid NVPCF subfunction ids */
+#define NVPCF0100_CTRL_CONFIG_DSM_1X_FUNC_GET_SUPPORTED (0x00000000)
+#define NVPCF0100_CTRL_CONFIG_DSM_1X_FUNC_GET_DYNAMIC_PARAMS (0x00000002)
+
+/*
+ * Defines for get supported sub functions bit fields
+ */
+#define NVPCF0100_CTRL_CONFIG_DSM_FUNC_GET_SUPPORTED_IS_SUPPORTED 0:0
+#define NVPCF0100_CTRL_CONFIG_DSM_FUNC_GET_SUPPORTED_IS_SUPPORTED_YES 1
+#define NVPCF0100_CTRL_CONFIG_DSM_FUNC_GET_SUPPORTED_IS_SUPPORTED_NO 0
+#define NVPCF0100_CTRL_CONFIG_DSM_FUNC_GET_DC_SYSTEM_POWER_LIMITS_IS_SUPPORTED 8:8
+#define NVPCF0100_CTRL_CONFIG_DSM_FUNC_GET_DC_SYSTEM_POWER_LIMITS_IS_SUPPORTED_YES 1
+#define NVPCF0100_CTRL_CONFIG_DSM_FUNC_GET_DC_SYSTEM_POWER_LIMITS_IS_SUPPORTED_NO 0
+#define NVPCF0100_CTRL_CONFIG_DSM_FUNC_CPU_TDP_LIMIT_CONTROL_IS_SUPPORTED 9:9
+#define NVPCF0100_CTRL_CONFIG_DSM_FUNC_CPU_TDP_LIMIT_CONTROL_IS_SUPPORTED_YES 1
+#define NVPCF0100_CTRL_CONFIG_DSM_FUNC_CPU_TDP_LIMIT_CONTROL_IS_SUPPORTED_NO 0
+
+
+/*!
+ * Config DSM 2x version specific defines
+ */
+#define NVPCF0100_CTRL_CONFIG_DSM_2X_VERSION (0x00000200)
+#define NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_GET_SUPPORTED (0x00000000)
+#define NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_GET_STATIC_CONFIG_TABLES (0x00000001)
+#define NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_GET_DYNAMIC_PARAMS (0x00000002)
+#define NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_GET_DC_SYSTEM_POWER_LIMITS_TABLE (0x00000008)
+#define NVPCF0100_CTRL_CONFIG_DSM_2X_FUNC_CPU_TDP_LIMIT_CONTROL (0x00000009)
+
+/*!
+ * Defines the max buffer size for config
+ */
+#define NVPCF0100_CTRL_CONFIG_2X_BUFF_SIZE_MAX (255)
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_SYNC_EXTERNAL_FABRIC_MGMT
+ *
+ * This API is used to sync the external fabric management status with
+ * GSP-RM
+ *
+ * bExternalFabricMgmt
+ * Whether fabric is externally managed
+ *
+ * Possible status values returned are:
+ * NV_OK
+ */
+#define NV0000_CTRL_CMD_SYSTEM_SYNC_EXTERNAL_FABRIC_MGMT (0x13cU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_CMD_SYSTEM_SYNC_EXTERNAL_FABRIC_MGMT_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CMD_SYSTEM_SYNC_EXTERNAL_FABRIC_MGMT_PARAMS_MESSAGE_ID (0x3CU)
+
+typedef struct NV0000_CTRL_CMD_SYSTEM_SYNC_EXTERNAL_FABRIC_MGMT_PARAMS {
+ NvBool bExternalFabricMgmt;
+} NV0000_CTRL_CMD_SYSTEM_SYNC_EXTERNAL_FABRIC_MGMT_PARAMS;
+
+/*
+ * NV0000_CTRL_SYSTEM_GET_CLIENT_DATABASE_INFO
+ *
+ * This API is used to get information about the RM client
+ * database.
+ *
+ * clientCount [OUT]
+ * This field indicates the number of clients currently allocated.
+ *
+ * resourceCount [OUT]
+ * This field indicates the number of resources currently allocated
+ * across all clients.
+ *
+ */
+#define NV0000_CTRL_CMD_SYSTEM_GET_CLIENT_DATABASE_INFO (0x13dU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_CLIENT_DATABASE_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_CLIENT_DATABASE_INFO_PARAMS_MESSAGE_ID (0x3DU)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_CLIENT_DATABASE_INFO_PARAMS {
+ NvU32 clientCount;
+ NV_DECLARE_ALIGNED(NvU64 resourceCount, 8);
+} NV0000_CTRL_SYSTEM_GET_CLIENT_DATABASE_INFO_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_GET_BUILD_VERSION_V2
+ *
+ * This command returns the current driver information in
+ * statically sized character arrays.
+ *
+ * driverVersionBuffer
+ * This field returns the version (NV_VERSION_STRING).
+ * versionBuffer
+ * This field returns the version (NV_BUILD_BRANCH_VERSION).
+ * driverBranch
+ * This field returns the branch (NV_BUILD_BRANCH).
+ * titleBuffer
+ * This field returns the title (NV_DISPLAY_DRIVER_TITLE).
+ * changelistNumber
+ * This field returns the changelist value (NV_BUILD_CHANGELIST_NUM).
+ * officialChangelistNumber
+ * This field returns the last official changelist value
+ * (NV_LAST_OFFICIAL_CHANGELIST_NUM).
+ *
+ * Possible status values returned are:
+ * NV_OK
+ */
+
+#define NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_V2_MAX_STRING_SIZE 256U
+#define NV0000_CTRL_CMD_SYSTEM_GET_BUILD_VERSION_V2 (0x13eU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_V2_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_V2_PARAMS_MESSAGE_ID (0x3EU)
+
+typedef struct NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_V2_PARAMS {
+ char driverVersionBuffer[NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_V2_MAX_STRING_SIZE];
+ char versionBuffer[NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_V2_MAX_STRING_SIZE];
+ char driverBranch[NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_V2_MAX_STRING_SIZE];
+ char titleBuffer[NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_V2_MAX_STRING_SIZE];
+ NvU32 changelistNumber;
+ NvU32 officialChangelistNumber;
+} NV0000_CTRL_SYSTEM_GET_BUILD_VERSION_V2_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_RMCTRL_CACHE_MODE_CTRL
+ *
+ * This API is used to get/set RMCTRL cache mode
+ *
+ * cmd [IN]
+ * GET - Gets RMCTRL cache mode
+ * SET - Sets RMCTRL cache mode
+ *
+ * mode [IN/OUT]
+ * On GET, this field is the output of current RMCTRL cache mode
+ * On SET, this field indicates the mode to set RMCTRL cache to
+ * Valid values for this parameter are:
+ * NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_MODE_DISABLE
+ * No get/set action to cache.
+ * NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_MODE_ENABLE
+ * Try to get from cache at the beginning of the control.
+ * Set cache after control finished if the control has not been cached.
+ * NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_MODE_VERIFY_ONLY
+ * Do not get from cache. Set cache when control call finished.
+ * When setting the cache, verify the value in the cache is the same
+ * with the current control value if the control is already cached.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ */
+#define NV0000_CTRL_CMD_SYSTEM_RMCTRL_CACHE_MODE_CTRL (0x13fU) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_PARAMS_MESSAGE_ID (0x3FU)
+
+typedef struct NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_PARAMS {
+ NvU32 cmd;
+ NvU32 mode;
+} NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_PARAMS;
+
+#define NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_CMD_GET (0x00000000U)
+#define NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_CMD_SET (0x00000001U)
+
+#define NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_MODE_DISABLE (0x00000000U)
+#define NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_MODE_ENABLE (0x00000001U)
+#define NV0000_CTRL_SYSTEM_RMCTRL_CACHE_MODE_CTRL_MODE_VERIFY_ONLY (0x00000002U)
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CONTROL
+ *
+ * This command is used to control PFM_REQ_HNDLR functionality. It allows control of
+ * GPU Performance Scaling (PFM_REQ_HNDLR), changing its operational parameters and read
+ * most PFM_REQ_HNDLR dynamic parameters.
+ *
+ * command
+ * This parameter specifies the command to execute. Invalid commands
+ * result in the return of an NV_ERR_INVALID_ARGUMENT status.
+ * locale
+ * This parameter indicates the specific locale to which the command
+ * 'command' is to be applied.
+* Supported range of CPU/GPU {i = 0, ..., 255}
+ * data
+ * This parameter contains a command-specific data payload. It can
+ * be used to input data as well as output data.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_COMMAND
+ * NV_ERR_INVALID_STATE
+ * NV_ERR_INVALID_DATA
+ * NV_ERR_INVALID_REQUEST
+ * NV_ERR_NOT_SUPPORTED
+ */
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CONTROL (0x140U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CONTROL_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CONTROL_PARAMS_MESSAGE_ID (0x40U)
+
+typedef struct NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CONTROL_PARAMS {
+ NvU16 command;
+ NvU16 locale;
+ NvU32 data;
+} NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CONTROL_PARAMS;
+
+/*
+ * Valid command values :
+ *
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_INIT
+ * Is used to check if PFM_REQ_HNDLR was correctly initialized.
+ * Possible return (OUT) values are:
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_INIT_NO
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_INIT_YES
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_EXEC
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_EXEC
+ * Are used to stop/start PFM_REQ_HNDLR functionality and to get current status.
+ * Possible IN/OUT values are:
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_EXEC_STOP
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_EXEC_START
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_ACTIONS
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_ACTIONS
+ * Are used to control execution of PFM_REQ_HNDLR actions and to get current status.
+ * Possible IN/OUT values are:
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_ACTIONS_OFF
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_ACTIONS_ON
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_LOGIC
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_LOGIC
+ * Are used to switch current PFM_REQ_HNDLR logic and to retrieve current logic.
+ * Possible IN/OUT values are:
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_LOGIC_OFF
+ * Will cause that all PFM_REQ_HNDLR actions will be NULL.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_LOGIC_FUZZY
+ * Fuzzy logic will determine PFM_REQ_HNDLR actions based on current ruleset.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_LOGIC_DETERMINISTIC
+ * Deterministic logic will define PFM_REQ_HNDLR actions based on current ruleset.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_PREFERENCE
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_PREFERENCE
+ * Are used to set/retrieve system control preference.
+ * Possible IN/OUT values are:
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_PREFERENCE_CPU
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_PREFERENCE_GPU
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_PREFERENCE_BOTH
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_GPU2CPU_LIMIT
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_GPU2CPU_LIMIT
+ * Are used to set/retrieve GPU2CPU pstate limits.
+ * IN/OUT values are four bytes packed into a 32-bit data field.
+ * The CPU cap index for GPU pstate 0 is in the lowest byte, the CPU cap
+ * index for the GPU pstate 3 is in the highest byte, etc. One
+ * special value is to disable the override to the GPU2CPU map:
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_PMU_PFM_REQ_HNDLR_STATE
+ * Is used to stop/start PFM_REQ_HNDLR PMU functionality.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_PMU_PFM_REQ_HNDLR_STATE
+ * Is used to get the current status of PMU PFM_REQ_HNDLR.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_NO_MAP_OVERRIDE
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_MAX_POWER
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_MAX_POWER
+ * Are used to set/retrieve max power [mW] that system can provide.
+ * This is hardcoded PFM_REQ_HNDLR safety feature and logic/rules does not apply
+ * to this threshold.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_COOLING_BUDGET
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_COOLING_BUDGET
+ * Are used to set/retrieve current system cooling budget [mW].
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_INTEGRAL_PERIOD
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_INTEGRAL_PERIOD
+ * Are used to set/retrieve integration interval [sec].
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_RULESET
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_RULESET
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_RULE_COUNT
+ * Are used to set/retrieve used ruleset [#]. Value is checked
+ * against MAX number of rules for currently used PFM_REQ_HNDLR logic. Also COUNT
+ * provides a way to find out how many rules exist for the current control
+ * system.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_APP_BOOST
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_APP_BOOST
+ * Is used to set/get a delay relative to now during which to allow unbound
+ * CPU performance. Units are seconds.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_PWR_SUPPLY_MODE
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_PWR_SUPPLY_MODE
+ * Is used to override/get the actual power supply mode (AC/Battery).
+ * Possible IN/OUT values are:
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_PWR_SUPPLY_REAL
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_PWR_SUPPLY_FAKE_AC
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_PWR_SUPPLY_FAKE_BATT
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_VCT_SUPPORT_INFO
+ * Is used to get the Ventura system information for VCT tool
+ * Returned 32bit value should be treated as bitmask and decoded in
+ * following way:
+ * Encoding details are defined in objPFM_REQ_HNDLR.h refer to
+ * NV_PFM_REQ_HNDLR_SYS_SUPPORT_INFO and corresponding bit defines.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_SUPPORTED_FUNCTION
+ * Is used to get the supported sub-functions defined in SBIOS. Returned
+ * value is a bitmask where each bit corresponds to different function:
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_SUPPORT
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_VENTURASTATUS
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_GETPSS
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_SETPPC
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_GETPPC
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_VENTURACB
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_SYSPARAMS
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_DELTA
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_FUTURE
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_LTMAVG
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_INTEGRAL
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_BURDEN
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_INTERMEDIATE
+ * Are used to retrieve appropriate power measurements and their derivatives
+ * in [mW] for required locale. _BURDEN is defined only for _LOCALE_SYSTEM.
+ * _INTERMEDIATE is not defined for _LOCALE_SYSTEM, and takes an In value as
+ * index.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_SENSOR_PARAMETERS
+ * Is used to retrieve parameters when adjusting raw sensor power reading.
+ * The values may come from SBIOS, VBIOS, registry or driver default.
+ * Possible IN value is the index of interested parameter.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_TEMP
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_TEMP_DELTA
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_TEMP_FUTURE
+ * Are used to retrieve appropriate temperature measurements and their
+ * derivatives in [1/1000 Celsius].
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_PSTATE
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_PSTATE_CAP
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_PSTATE_MIN
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_PSTATE_MAX
+ * Are used to retrieve CPU(x)/GPU(x) p-state or it's limits.
+ * Not applicable to _LOCALE_SYSTEM.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_PSTATE_ACTION
+ * Is used to retrieve last PFM_REQ_HNDLR action for given domain.
+ * Not applicable to _LOCALE_SYSTEM.
+ * Possible return (OUT) values are:
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_DEC_TO_P0
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_DEC_BY_1
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_DO_NOTHING
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_SET_CURRENT
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_INC_BY_1
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_INC_BY_2
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_INC_TO_LFM
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_INC_TO_SLFM
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_SET_POWER_SIM_STATE
+ * Is used to set the power sensor simulator state.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_SIM_STATE
+ * Is used to get the power simulator sensor simulator state.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_SET_POWER_SIM_DATA
+ * Is used to set power sensor simulator data
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_SIM_DATA
+ * Is used to get power sensor simulator data
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_INIT_USING_SBIOS_AND_ACK
+ * Is used to respond to the ACPI event triggered by SBIOS. RM will
+ * request value for budget and status, validate them, apply them
+ * and send ACK back to SBIOS.
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_PING_SBIOS_FOR_EVENT
+ * Is a test cmd that should notify SBIOS to send ACPI event requesting
+ * budget and status change.
+ */
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_INVALID (0xFFFFU)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_INIT (0x0000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_EXEC (0x0001U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_EXEC (0x0002U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_ACTIONS (0x0003U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_ACTIONS (0x0004U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_LOGIC (0x0005U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_LOGIC (0x0006U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_PREFERENCE (0x0007U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_PREFERENCE (0x0008U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_GPU2CPU_LIMIT (0x0009U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_GPU2CPU_LIMIT (0x000AU)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_SET_PMU_PFM_REQ_HNDLR_STATE (0x000BU)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_GET_PMU_PFM_REQ_HNDLR_STATE (0x000CU)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_MAX_POWER (0x0100U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_MAX_POWER (0x0101U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_COOLING_BUDGET (0x0102U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_COOLING_BUDGET (0x0103U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_INTEGRAL_PERIOD (0x0104U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_INTEGRAL_PERIOD (0x0105U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_RULESET (0x0106U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_RULESET (0x0107U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_RULE_COUNT (0x0108U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_APP_BOOST (0x0109U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_APP_BOOST (0x010AU)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_SET_PWR_SUPPLY_MODE (0x010BU)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_PWR_SUPPLY_MODE (0x010CU)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_VCT_SUPPORT_INFO (0x010DU)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_GET_SUPPORTED_FUNCTIONS (0x010EU)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER (0x0200U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_DELTA (0x0201U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_FUTURE (0x0202U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_LTMAVG (0x0203U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_INTEGRAL (0x0204U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_BURDEN (0x0205U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_INTERMEDIATE (0x0206U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_SENSOR_PARAMETERS (0x0210U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_TEMP (0x0220U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_TEMP_DELTA (0x0221U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_TEMP_FUTURE (0x0222U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_PSTATE (0x0240U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_PSTATE_CAP (0x0241U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_PSTATE_MIN (0x0242U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_PSTATE_MAX (0x0243U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_PSTATE_ACTION (0x0244U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_PSTATE_SLFM_PRESENT (0x0245U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_SET_POWER_SIM_STATE (0x0250U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_SIM_STATE (0x0251U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_SET_POWER_SIM_DATA (0x0252U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_GET_POWER_SIM_DATA (0x0253U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_INIT_USING_SBIOS_AND_ACK (0x0320U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_PING_SBIOS_FOR_EVENT (0x0321U)
+
+/* valid LOCALE values */
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_LOCALE_INVALID (0xFFFFU)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_LOCALE_SYSTEM (0x0000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_LOCALE_CPU(i) (0x0100+((i)%0x100))
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_LOCALE_GPU(i) (0x0200+((i)%0x100))
+
+/* valid data values for enums */
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_INVALID (0x80000000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_INIT_NO (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_INIT_YES (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_EXEC_STOP (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_EXEC_START (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_ACTIONS_OFF (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_ACTIONS_ON (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_LOGIC_OFF (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_LOGIC_FUZZY (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_LOGIC_DETERMINISTIC (0x00000002U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_PREFERENCE_CPU (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_PREFERENCE_GPU (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_PREFERENCE_BOTH (0x00000002U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_NO_MAP_OVERRIDE (0xFFFFFFFFU)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_PMU_PFM_REQ_HNDLR_STATE_OFF (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_PMU_PFM_REQ_HNDLR_STATE_ON (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_PWR_SUPPLY_REAL (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_PWR_SUPPLY_FAKE_AC (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_PWR_SUPPLY_FAKE_BATT (0x00000002U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_SUPPORT (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_VENTURASTATUS (0x00000002U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_GETPSS (0x00000004U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_SETPPC (0x00000008U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_GETPPC (0x00000010U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_VENTURACB (0x00000020U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SYS_DEF_FUNC_SYSPARAMS (0x00000040U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_DEC_TO_P0 (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_DEC_BY_1 (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_DO_NOTHING (0x00000002U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_SET_CURRENT (0x00000003U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_INC_BY_1 (0x00000004U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_INC_BY_2 (0x00000005U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_INC_TO_LFM (0x00000006U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_ACTION_INC_TO_SLFM (0x00000007U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_SLFM_PRESENT_NO (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_SLFM_PRESENT_YES (0x00000001U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_POWER_SIM_STATE_OFF (0x00000000U)
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_DATA_DEF_POWER_SIM_STATE_ON (0x00000001U)
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_BATCH_CONTROL
+ *
+ * This command allows execution of multiple PFM_REQ_HNDLRControl commands within one
+ * RmControl call. For practical reasons # of commands is limited to 16.
+ * This command shares defines with NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CONTROL.
+ *
+ * cmdCount
+ * Number of commands that should be executed.
+ * Less or equal to NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_BATCH_COMMAND_MAX.
+ *
+ * succeeded
+ * Number of commands that were succesully executed.
+ * Less or equal to NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_BATCH_COMMAND_MAX.
+ * Failing commands return NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CMD_DEF_INVALID
+ * in their data field.
+ *
+ * cmdData
+ * Array of commands with following structure:
+ * command
+ * This parameter specifies the command to execute.
+ * Invalid commands result in the return of an
+ * NV_ERR_INVALID_ARGUMENT status.
+ * locale
+ * This parameter indicates the specific locale to which
+ * the command 'command' is to be applied.
+ * Supported range of CPU/GPU {i = 0, ..., 255}
+ * data
+ * This parameter contains a command-specific data payload.
+ * It is used both to input data as well as to output data.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_REQUEST
+ * NV_ERR_NOT_SUPPORTED
+ */
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_BATCH_CONTROL (0x141U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_BATCH_CONTROL_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_BATCH_COMMAND_MAX (16U)
+#define NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_BATCH_CONTROL_PARAMS_MESSAGE_ID (0x41U)
+
+typedef struct NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_BATCH_CONTROL_PARAMS {
+ NvU32 cmdCount;
+ NvU32 succeeded;
+
+ struct {
+ NvU16 command;
+ NvU16 locale;
+ NvU32 data;
+ } cmdData[NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_BATCH_COMMAND_MAX];
+} NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_BATCH_CONTROL_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CTRL
+ *
+ * This command is used to execute general PFM_REQ_HNDLR Functions, most dealing with
+ * calling SBIOS, or retrieving cached sensor and PFM_REQ_HNDLR state data.
+ *
+ * version
+ * This parameter specifies the version of the interface. Legal values
+ * for this parameter are 1.
+ * cmd
+ * This parameter specifies the PFM_REQ_HNDLR API to be invoked.
+ * Valid values for this parameter are:
+ * NV0000_CTRL_PFM_REQ_HNDLR_CMD_GET_THERM_LIMIT
+ * This command gets the temperature limit for thermal controller. When
+ * this command is specified the input parameter contains ???.
+ * NV0000_CTRL_PFM_REQ_HNDLR_CMD_SET_THERM_LIMIT
+ * This command set the temperature limit for thermal controller. When
+ * this command is specified the input parameter contains ???.
+ * input
+ * This parameter specifies the cmd-specific input value.
+ * result
+ * This parameter returns the cmd-specific output value.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_PARAM_STRUCT
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CTRL (0x142U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CTRL_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CTRL_PARAMS_MESSAGE_ID (0x42U)
+
+typedef struct NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CTRL_PARAMS {
+ NvU32 cmd;
+ NvS32 input[2];
+ NvS32 result[4];
+} NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CTRL_PARAMS;
+
+/* valid version values */
+#define NV0000_CTRL_PFM_REQ_HNDLR_PSHARE_PARAMS_PSP_CURRENT_VERSION (0x00010000U)
+
+/* valid cmd values */
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_THERM_LIMIT (0x00000002U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_THERMAL_LIMIT (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_MIN_LIMIT (0x00000001U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_MAX_LIMIT (0x00000002U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_LIMIT_SOURCE (0x00000003U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_THERM_LIMIT (0x00000003U)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_THERMAL_LIMIT (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_TEMP_CTRL_DOWN_N_DELTA (0x00000004U)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_CTRL_DOWN_N_DELTA (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_TEMP_CTRL_DOWN_N_DELTA (0x00000005U)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_CTRL_DOWN_N_DELTA (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_TEMP_CTRL_HOLD_DELTA (0x00000006U)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_CTRL_HOLD_DELTA (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_TEMP_CTRL_HOLD_DELTA (0x00000007U)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_CTRL_HOLD_DELTA (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_TEMP_CTRL_UP_DELTA (0x00000008U)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_CTRL_UP_DELTA (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_TEMP_CTRL_UP_DELTA (0x00000009U)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_CTRL_UP_DELTA (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_TEMP_CTRL_ENGAGE_DELTA (0x0000000AU)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_CTRL_ENGAGE_DELTA (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_TEMP_CTRL_ENGAGE_DELTA (0x0000000BU)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_CTRL_ENGAGE_DELTA (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_TEMP_CTRL_DISENGAGE_DELTA (0x0000000CU)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_CTRL_DISENGAGE_DELTA (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_TEMP_CTRL_DISENGAGE_DELTA (0x0000000DU)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_CTRL_DISENGAGE_DELTA (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_TEMP_CTRL_STATUS (0x00000016U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_CTRL_STATUS (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_TEMP_CTRL_STATUS (0x00000017U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_CTRL_STATUS (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_CPU_GET_UTIL_AVG_NUM (0x00000018U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_CPU_SET_UTIL_AVG_NUM (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_CPU_SET_UTIL_AVG_NUM (0x00000019U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_CPU_GET_UTIL_AVG_NUM (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_PERF_SENSOR (0x0000001AU)
+// NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SENSOR_INDEX (0x00000000)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_NEXT_EXPECTED_POLL (0x00000001U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_PERF_SENSOR_VALUE (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_PERF_SENSOR_AVAILABLE (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_CALL_ACPI (0x0000001BU)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_ACPI_CMD (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_ACPI_PARAM_IN (0x00000001U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_OUTPUT_ACPI_RESULT_1 (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_OUTPUT_ACPI_RESULT_2 (0x00000001U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_OUTPUT_ACPI_PSHAREPARAM_STATUS (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_OUTPUT_ACPI_PSHAREPARAM_VERSION (0x00000001U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_OUTPUT_ACPI_PSHAREPARAM_SZ (0x00000002U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_OUTPUT_ACPI_PSS_SZ (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_OUTPUT_ACPI_PSS_COUNT (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_IGPU_TURBO (0x0000001CU)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_SET_IGPU_TURBO (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_TEMP_PERIOD (0x00000026U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_PERIOD (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_TEMP_PERIOD (0x00000027U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_PERIOD (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_TEMP_NUDGE_FACTOR (0x00000028U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_NUDGE_UP (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_NUDGE_DOWN (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_TEMP_NUDGE_FACTOR (0x00000029U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_NUDGE_UP (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_NUDGE_DOWN (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_TEMP_THRESHOLD_SAMPLES (0x0000002AU)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_THRESHOLD_SAMPLE_HOLD (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_THRESHOLD_SAMPLE_STEP (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_TEMP_THRESHOLD_SAMPLES (0x0000002BU)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_THRESHOLD_SAMPLE_HOLD (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_THRESHOLD_SAMPLE_STEP (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_TEMP_PERF_LIMITS (0x0000002CU)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_PERF_LIMIT_UPPER (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_TEMP_PERF_LIMIT_LOWER (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_TEMP_PERF_LIMITS (0x0000002DU)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_PERF_LIMIT_UPPER (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_RESULT_TEMP_PERF_LIMIT_LOWER (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_PM1_AVAILABLE (0x0000002EU)
+#define NV0000_CTRL_PFM_REQ_HNDLR_INPUT_PM1_AVAILABLE (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_PM1_AVAILABLE (0x0000002FU)
+#define NV0000_CTRL_PFM_REQ_HNDLR_OUTPUT_PM1_AVAILABLE (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_CPU_PACKAGE_LIMITS (0x00000044U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_CPU_PACKAGE_LIMITS_PL1 (0x00000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_CPU_PACKAGE_LIMITS_PL2 (0x00000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_CPU_PACKAGE_LIMITS (0x00000045U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_CPU_PACKAGE_LIMITS_PL1 (0x00000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_CPU_FREQ_LIMIT (0x00000046U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_CPU_FREQ_LIMIT_MHZ (0000000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_CPU_FREQ_LIMIT (0x00000047U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_CPU_FREQ_LIMIT_MHZ (0000000000U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_PPM (0x00000048U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_PPM_INDEX (0000000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_GET_PPM_AVAILABLE_MASK (0000000001U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_PPM (0x00000049U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_PPM_INDEX (0000000000U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_TYPE_SET_PPM_INDEX_MAX (2U)
+
+#define NV0000_CTRL_PFM_REQ_HNDLR_PPM_INDEX 7:0
+#define NV0000_CTRL_PFM_REQ_HNDLR_PPM_INDEX_MAXPERF (0U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_PPM_INDEX_BALANCED (1U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_PPM_INDEX_QUIET (2U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_PPM_INDEX_INVALID (0xFFU)
+#define NV0000_CTRL_PFM_REQ_HNDLR_PPM_MASK 15:8
+#define NV0000_CTRL_PFM_REQ_HNDLR_PPM_MASK_INVALID (0U)
+
+/* valid PS_STATUS result values */
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_PS_STATUS_OFF (0U)
+#define NV0000_CTRL_PFM_REQ_HNDLR_CMD_PS_STATUS_ON (1U)
+
+#define PFM_REQ_HNDLR_MAX_COUNTERS_PER_BLOCK 32U
+typedef struct NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_PERF_SENSOR_COUNTERS_PARAMS {
+ NvU32 objHndl;
+ NvU32 blockId;
+ NvU32 nextExpectedSampleTimems;
+ NvU32 countersReq;
+ NvU32 countersReturned;
+ NvU32 counterBlock[PFM_REQ_HNDLR_MAX_COUNTERS_PER_BLOCK];
+} NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_PERF_SENSOR_COUNTERS_PARAMS;
+
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_GET_PERF_SENSORS (0x146U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_PERF_SENSORS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_PERF_SENSORS_PARAMS_MESSAGE_ID (0x46U)
+
+typedef NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_PERF_SENSOR_COUNTERS_PARAMS NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_PERF_SENSORS_PARAMS;
+
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_GET_EXTENDED_PERF_SENSORS (0x147U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_EXTENDED_PERF_SENSORS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_EXTENDED_PERF_SENSORS_PARAMS_MESSAGE_ID (0x47U)
+
+typedef NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_PERF_SENSOR_COUNTERS_PARAMS NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_EXTENDED_PERF_SENSORS_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CALL_ACPI
+ *
+ * This command allows users to call PFM_REQ_HNDLR ACPI commands for testing purposes.
+ *
+ * cmd
+ * This parameter specifies the PFM_REQ_HNDLR ACPI command to execute.
+ *
+ * input
+ * This parameter specified the cmd-dependent input value.
+ *
+ * resultSz
+ * This parameter returns the size (in bytes) of the valid data
+ * returned in the result parameter.
+ *
+ * result
+ * This parameter returns the results of the specified cmd.
+ * The maximum size (in bytes) of this returned data will
+ * not exceed PFM_REQ_HNDLR_MAX_ACPI_OUTPUT_BUFFER_SIZE
+ *
+ * PFM_REQ_HNDLR_MAX_ACPI_OUTPUT_BUFFER_SIZE
+ * The size of buffer (result) in unit of NvU32.
+ * The smallest value is sizeof(PSS_ENTRY)*ACPI_PSS_ENTRY_MAX.
+ * Since the prior one is 24 bytes, and the later one is 48,
+ * this value cannot be smaller than 288.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT,
+ * NV_ERR_INVALID_OBJECT_HANDLE
+ * NV_ERR_NOT_SUPPORTED
+ * NV_ERR_INSUFFICIENT_PERMISSIONS
+ *
+ */
+#define PFM_REQ_HNDLR_MAX_ACPI_OUTPUT_BUFFER_SIZE 288U
+#define NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CALL_ACPI_PARAMS_MESSAGE_ID (0x43U)
+
+typedef struct NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CALL_ACPI_PARAMS {
+ NvU32 cmd;
+ NvU32 input;
+ NvU32 resultSz;
+ NvU32 result[PFM_REQ_HNDLR_MAX_ACPI_OUTPUT_BUFFER_SIZE];
+} NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CALL_ACPI_PARAMS;
+
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_CALL_ACPI (0x143U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_CALL_ACPI_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_RMTRACE_MODULE_PFM_REQ_HNDLR (0x00008000U)
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_GET_FRM_DATA
+ *
+ * This command is used to read FRL data based on need.
+ *
+ * nextSampleNumber
+ * This parameter returns the counter of next sample which is being filled.
+ * samples
+ * This parameter returns the frame time, render time, target time, client ID
+ * with one reserve bit for future use.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_NOT_SUPPORTED
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_GET_FRM_DATA (0x144U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_FRM_DATA_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_FRM_DATA_SAMPLE_SIZE 64U
+
+typedef struct NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_FRM_DATA_SAMPLE {
+ NvU16 frameTime;
+ NvU16 renderTime;
+ NvU16 targetTime;
+ NvU8 sleepTime;
+ NvU8 sampleNumber;
+} NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_FRM_DATA_SAMPLE;
+
+#define NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_FRM_DATA_PARAMS_MESSAGE_ID (0x44U)
+
+typedef struct NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_FRM_DATA_PARAMS {
+ NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_FRM_DATA_SAMPLE samples[NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_FRM_DATA_SAMPLE_SIZE];
+ NvU8 nextSampleNumber;
+} NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_GET_FRM_DATA_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SET_FRM_DATA
+ *
+ * This command is used to write FRM data based on need.
+ *
+ * frameTime
+ * This parameter contains the frame time of current frame.
+ * renderTime
+ * This parameter contains the render time of current frame.
+ * targetTime
+ * This parameter contains the target time of current frame.
+ * sleepTime
+ * This parameter contains the sleep duration inserted by FRL for the latest frame.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_NOT_SUPPORTED
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_PFM_REQ_HNDLR_SET_FRM_DATA (0x145U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_SET_FRM_DATA_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_SET_FRM_DATA_PARAMS_MESSAGE_ID (0x45U)
+
+typedef struct NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_SET_FRM_DATA_PARAMS {
+ NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_FRM_DATA_SAMPLE sampleData;
+} NV0000_CTRL_SYSTEM_PFM_REQ_HNDLR_SET_FRM_DATA_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_READ_CPER
+ *
+ * This command is used to pull CPER logs from RM.
+ *
+ * cperTypeMask [IN]
+ * Types of records to access. Bitmask of READ_CPER_ACCESS_TYPE values.
+ * uuid [IN]
+ * UUID of target to pull records for. Set to 0 to pull records for all UUIDs.
+ * cperCursor [IN/OUT]
+ * Opaque handle used to sequentially pull CPER records
+ * buffer [OUT]
+ * Buffer to be filled in.
+ * bufferSize [IN/OUT]
+ * Size of buffer. Returning 0 to user indicates no buffer was found.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_NOT_SUPPORTED
+ */
+
+#define NV0000_CTRL_CMD_SYSTEM_READ_CPER (0x149U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_READ_CPER_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_SYSTEM_READ_CPER_ACCESS_TYPE_GPU (1U)
+
+#define READ_CPER_BUFFER_SIZE 1024U
+
+#define NV0000_CTRL_SYSTEM_READ_CPER_PARAMS_MESSAGE_ID (0x49U)
+
+typedef struct NV0000_CTRL_SYSTEM_READ_CPER_PARAMS {
+ NV_DECLARE_ALIGNED(NvU64 cperTypeMask, 8);
+ NvU8 uuid[16];
+ NvU32 cperCursor;
+ NvU8 buffer[READ_CPER_BUFFER_SIZE];
+ NvU32 bufferSize;
+} NV0000_CTRL_SYSTEM_READ_CPER_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_SYSTEM_SOC_SET_PERF_LIMITS
+ *
+ * This command sets lower and/or upper bounds for a display clock (dispclk or
+ * hubclk), or for the memory perf level. When this API is called, the system
+ * will immediately attempt to switch the clock or perf level to a value that
+ * meets the specified condition(s).
+ *
+ * For both clock and perf level, if no lower limit is desired, the "min" input
+ * should be set to zero. For a clock, if no upper limit is desired, the "max"
+ * input should be set to NV_U32_MAX. For a perf level, an upper limit is not
+ * currently supported, and the "max" input must be set to NV_U32_MAX.
+ *
+ * Any perf limit set through this API will remain in effect until it is updated
+ * or cancelled by a subsequent call to this API. A perf limit may be
+ * cancelled by setting the "min" value to NV_U32_MIN (0) and the "max" value
+ * (for clocks) to NV_U32_MAX. Only one perf limit may be in effect for a
+ * given clientUsageId and resource at any given time.
+ *
+ * At any given time, multiple perf limits (with different clientUsageIds) may
+ * be in effect for a given clock or perf level, and that clock or perf level
+ * will be set to a value that meets the requirements of all active perf
+ * limits. If there is a conflict between perf limits, the conflict will be
+ * resolved by the perf limit(s) with the higher priority.
+ *
+ * For example, suppose the API is called with the following parameters:
+ * clientUsageId = NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_MODS
+ * bwResource = NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_BW_RESOURCE_DISPCLK
+ * minLevelOrFreqKHz = 800000
+ * maxLevelOrFreqKHz = 800000
+ * This will set dispclk to 800 MHz (or possibly a slightly higher frequency,
+ * if the clock dividers do not allow 800 MHz to be set exactly).
+ *
+ * Then suppose this call is made:
+ * clientUsageId = NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_ISMODEPOSSIBLE
+ * bwResource = NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_BW_RESOURCE_DISPCLK
+ * minLevelOrFreqKHz = 1000000
+ * maxLevelOrFreqKHz = 0xFFFFFFFF
+ * After this call, dispclk will remain set to 800 MHz, because, although the
+ * min frequency was requested to be at least 1 GHz, this would conflict with
+ * the "maxLevelOrFreqKHz = 800000" value set in the previous call, which is
+ * still in effect. The previous call takes priority because
+ * NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_MODS has higher priority than
+ * NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_ISMODEPOSSIBLE.
+ *
+ * Then suppose this call is made:
+ * clientUsageId = NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_MODS
+ * bwResource = NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_BW_RESOURCE_DISPCLK
+ * minLevelOrFreqKHz = 0
+ * maxLevelOrFreqKHz = 0xFFFFFFFF
+ * This removes the NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_MODS perf
+ * limit. At this point, dispclk will be set to 1 GHz, in accordance with the
+ * NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_ISMODEPOSSIBLE perf limit,
+ * which is still in effect. (The remaining perf limit allows the clock to be
+ * higher than 1 GHz, but in practice, the clock will generally be set to the
+ * lowest frequency that meets the perf limit requirement, to save power. For
+ * perf level, perf monitors (which do not use the perf limit mechanism) may
+ * force a higher value in order to meet performance needs.)
+ *
+ * This API takes an array of perf limit structures, so multiple perf limits
+ * may be set within the same call.
+ *
+ * This API is primarily intended for use on SOC products, where display is
+ * separate from the GPU. On dGPU products, this API may not be supported;
+ * instead, NV2080_CTRL_CMD_PERF_LIMITS_SET_STATUS_V2 may be used to set perf
+ * limits.
+ *
+ * numLimits (in)
+ * This is the number of perf limits with lower and/or upper limits to
+ * apply.
+ *
+ * bWaitForCompletion (in)
+ * It is possible that a perf change or clock change may take some time to
+ * execute. If this flag is set, the API will wait for all of the changes
+ * to complete before returning. (However, it will not wait for completion
+ * of any operation that is blocked by a higher priority perf limit.)
+ *
+ * clientUsageId (in)
+ * This is a NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_xxx value indicating
+ * who the client is, and/or the purpose of the perf limit. It is used to
+ * establish priority between conflicting perf limits.
+ *
+ * bwResource (in)
+ * This is a NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_BW_RESOURCE_xxx value
+ * indicating which clock, or memory perf level, is to have limits applied.
+ *
+ * minLevelOrFreqKHz (in)
+ * maxLevelOrFreqKHz (in)
+ * If bwResource is
+ * NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_BW_RESOURCE_PERF_LEVEL, then
+ * minLevelOrFreqKHz specifies the zero-based index of the minimum perf
+ * level to allow. maxLevelOrFreqKHz should be set to NV_U32_MAX.
+ *
+ * If bwResource specifies a clock
+ * (NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_BW_RESOURCE_DISPCLK or
+ * NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_BW_RESOURCE_HUBCLK), then
+ * minLevelOrFreqKHz and maxLevelOrFreqKHz specify the lower and upper
+ * limits (respectively) for the specified clock's frequency.
+ */
+#define NV0000_CTRL_CMD_SYSTEM_SOC_SET_PERF_LIMITS (0x150U) /* finn: Evaluated from "(FINN_NV01_ROOT_SYSTEM_INTERFACE_ID << 8) | NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMITS_PARAMS_MESSAGE_ID" */
+
+/* valid clientUsageId values */
+#define NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_TEST_PERF_LEVELS (0U)
+#define NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_ISMODEPOSSIBLE (1U)
+#define NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_MCLK_SWITCH (2U)
+#define NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_ID_MODS (3U)
+
+/* valid bwResource values */
+#define NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_BW_RESOURCE_PERF_LEVEL (0U)
+#define NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_BW_RESOURCE_DISPCLK (1U)
+#define NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMIT_BW_RESOURCE_HUBCLK (2U)
+
+/* Define a structure for a single perf limit */
+typedef struct NV0000_CTRL_SYSTEM_SOC_PERF_LIMIT {
+ NvU32 minLevelOrFreqKHz;
+ NvU32 maxLevelOrFreqKHz;
+ NvU8 clientUsageId;
+ NvU8 bwResource;
+} NV0000_CTRL_SYSTEM_SOC_PERF_LIMIT;
+
+/* Maximum number of limits that can be set in a single call */
+#define NV0000_CTRL_SYSTEM_SOC_PERF_MAX_LIMITS (16U)
+
+#define NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMITS_PARAMS_MESSAGE_ID (0x150U)
+
+typedef struct NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMITS_PARAMS {
+ NvU32 numLimits;
+ NV0000_CTRL_SYSTEM_SOC_PERF_LIMIT limits[NV0000_CTRL_SYSTEM_SOC_PERF_MAX_LIMITS];
+ NvBool bWaitForCompletion;
+} NV0000_CTRL_SYSTEM_SOC_SET_PERF_LIMITS_PARAMS;
+
+/* _ctrl0000system_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000unix.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000unix.h
new file mode 100644
index 0000000..7400a69
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000unix.h
@@ -0,0 +1,468 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2009-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000unix.finn
+//
+
+#include "ctrl0000gpu.h"
+#include "ctrl/ctrl0000/ctrl0000base.h"
+
+#include "ctrl/ctrlxxxx.h"
+/* NV01_ROOT (client) Linux control commands and parameters */
+
+/*
+ * NV0000_CTRL_CMD_OS_UNIX_FLUSH_USER_CACHE
+ *
+ * This command may be used to force a cache flush for a range of virtual addresses in
+ * memory. Can be used for either user or kernel addresses.
+ *
+ * offset, length
+ * These parameters specify the offset within the memory block
+ * and the number of bytes to flush/invalidate
+ * cacheOps
+ * This parameter flags whether to flush, invalidate or do both.
+ * Possible values are:
+ * NV0000_CTRL_OS_UNIX_FLAGS_USER_CACHE_FLUSH
+ * NV0000_CTRL_OS_UNIX_FLAGS_USER_CACHE_INVALIDATE
+ * NV0000_CTRL_OS_UNIX_FLAGS_USER_CACHE_FLUSH_INVALIDATE
+ * hDevice
+ * This parameter is the handle to the device
+ * hObject
+ * This parameter is the handle to the memory structure being operated on.
+ * internalOnly
+ * Intended for internal use unless client is running in MODS UNIX environment,
+ * in which case this parameter specify the virtual address of the memory block
+ * to flush.
+ *
+ * Possible status values are:
+ * NV_OK
+ * NV_ERR_OBJECT_NOT_FOUND
+ * NV_ERR_INVALID_OBJECT_HANDLE
+ * NV_ERR_INVALID_COMMAND
+ * NV_ERR_INVALID_LIMIT
+ * NV_ERR_NOT_SUPPORTED
+ */
+#define NV0000_CTRL_CMD_OS_UNIX_FLUSH_USER_CACHE (0x3d02) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | NV0000_CTRL_OS_UNIX_FLUSH_USER_CACHE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_OS_UNIX_FLUSH_USER_CACHE_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV0000_CTRL_OS_UNIX_FLUSH_USER_CACHE_PARAMS {
+ NV_DECLARE_ALIGNED(NvU64 offset, 8);
+ NV_DECLARE_ALIGNED(NvU64 length, 8);
+ NvU32 cacheOps;
+ NvHandle hDevice;
+ NvHandle hObject;
+ NV_DECLARE_ALIGNED(NvU64 internalOnly, 8);
+} NV0000_CTRL_OS_UNIX_FLUSH_USER_CACHE_PARAMS;
+
+#define NV0000_CTRL_OS_UNIX_FLAGS_USER_CACHE_FLUSH (0x00000001)
+#define NV0000_CTRL_OS_UNIX_FLAGS_USER_CACHE_INVALIDATE (0x00000002)
+#define NV0000_CTRL_OS_UNIX_FLAGS_USER_CACHE_FLUSH_INVALIDATE (0x00000003)
+
+
+/*
+ * NV0000_CTRL_CMD_OS_UNIX_GET_CONTROL_FILE_DESCRIPTOR
+ *
+ * This command is used to get the control file descriptor.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ *
+ */
+#define NV0000_CTRL_CMD_OS_UNIX_GET_CONTROL_FILE_DESCRIPTOR (0x3d04) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | 0x4" */
+
+typedef struct NV0000_CTRL_OS_UNIX_GET_CONTROL_FILE_DESCRIPTOR_PARAMS {
+ NvS32 fd;
+} NV0000_CTRL_OS_UNIX_GET_CONTROL_FILE_DESCRIPTOR_PARAMS;
+
+typedef enum NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TYPE {
+ NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TYPE_NONE = 0,
+ NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TYPE_RM = 1,
+} NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TYPE;
+
+typedef struct NV0000_CTRL_OS_UNIX_EXPORT_OBJECT {
+ NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TYPE type;
+
+ union {
+ struct {
+ NvHandle hDevice;
+ NvHandle hParent;
+ NvHandle hObject;
+ } rmObject;
+ } data;
+} NV0000_CTRL_OS_UNIX_EXPORT_OBJECT;
+
+/*
+ * NV0000_CTRL_CMD_OS_UNIX_EXPORT_OBJECT_TO_FD
+ *
+ * This command may be used to export NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TYPE
+ * object to file descriptor.
+ *
+ * Note that the 'fd' parameter is an input parameter at the kernel level, but
+ * an output parameter for usermode RMAPI clients -- the RMAPI library will
+ * open a new FD automatically if a usermode RMAPI client exports an object.
+ *
+ * Kernel-mode RM clients can export an object to an FD in two steps:
+ * 1. User client calls this RMControl with the flag 'EMPTY_FD_TRUE' to create
+ * an empty FD to receive the object, then passes that FD to the kernel-mode
+ * RM client.
+ * 2. Kernel-mode RM client fills in the rest of the
+ * NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TO_FD_PARAMS as usual and calls RM to
+ * associate its desired RM object with the empty FD from its usermode
+ * client.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_NOT_SUPPORTED
+ * NV_ERR_OBJECT_NOT_FOUND
+ * NV_ERR_INVALID_OBJECT_HANDLE
+ * NV_ERR_INVALID_PARAMETER
+ */
+#define NV0000_CTRL_CMD_OS_UNIX_EXPORT_OBJECT_TO_FD (0x3d05) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TO_FD_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TO_FD_PARAMS_MESSAGE_ID (0x5U)
+
+typedef struct NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TO_FD_PARAMS {
+ NV0000_CTRL_OS_UNIX_EXPORT_OBJECT object; /* IN */
+ NvS32 fd; /* IN/OUT */
+ NvU32 flags; /* IN */
+} NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TO_FD_PARAMS;
+
+/*
+ * If EMPTY_FD is TRUE, the 'fd' will be created but no object will be
+ * associated with it. The hDevice parameter is still required, to determine
+ * the correct device node on which to create the file descriptor.
+ * (An empty FD can then be passed to a kernel-mode driver to associate it with
+ * an actual object.)
+ */
+#define NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TO_FD_FLAGS_EMPTY_FD 0:0
+#define NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TO_FD_FLAGS_EMPTY_FD_FALSE (0x00000000)
+#define NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TO_FD_FLAGS_EMPTY_FD_TRUE (0x00000001)
+
+/*
+ * NV0000_CTRL_CMD_OS_UNIX_IMPORT_OBJECT_FROM_FD
+ *
+ * This command may be used to import back
+ * NV0000_CTRL_OS_UNIX_EXPORT_OBJECT_TYPE object from file descriptor.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_NOT_SUPPORTED
+ * NV_ERR_OBJECT_NOT_FOUND
+ * NV_ERR_INVALID_OBJECT_HANDLE
+ * NV_ERR_INVALID_PARAMETER
+ */
+#define NV0000_CTRL_CMD_OS_UNIX_IMPORT_OBJECT_FROM_FD (0x3d06) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | NV0000_CTRL_OS_UNIX_IMPORT_OBJECT_FROM_FD_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_OS_UNIX_IMPORT_OBJECT_FROM_FD_PARAMS_MESSAGE_ID (0x6U)
+
+typedef struct NV0000_CTRL_OS_UNIX_IMPORT_OBJECT_FROM_FD_PARAMS {
+ NvS32 fd; /* IN */
+ NV0000_CTRL_OS_UNIX_EXPORT_OBJECT object; /* IN */
+} NV0000_CTRL_OS_UNIX_IMPORT_OBJECT_FROM_FD_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_OS_GET_GPU_INFO
+ *
+ * This command will query the OS specific info for the specified GPU.
+ *
+ * gpuId
+ * This parameter should specify a valid GPU ID value. If there
+ * is no GPU present with the specified ID, a status of
+ * NV_ERR_INVALID_ARGUMENT is returned.
+ * minorNum
+ * This parameter returns minor number of device node.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ */
+
+#define NV0000_CTRL_CMD_OS_GET_GPU_INFO (0x3d07) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | 0x7" */
+
+typedef struct NV0000_CTRL_OS_GET_GPU_INFO_PARAMS {
+ NvU32 gpuId; /* IN */
+ NvU32 minorNum; /* OUT */
+} NV0000_CTRL_OS_GET_GPU_INFO_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_OS_UNIX_GET_EXPORT_OBJECT_INFO
+ *
+ * This command will query the deviceInstance for the specified FD
+ * which is referencing an exported object.
+ *
+ * fd
+ * File descriptor parameter is referencing an exported object on a Unix system.
+ *
+ * deviceInstatnce
+ * This parameter returns a deviceInstance on which the object is located.
+ *
+ * NV_MAX_DEVICES is returned if the object is parented by a client instead
+ * of a device.
+ *
+ * gpuInstanceId
+ * For objects parented by device this parameter returns MIG GPU instance
+ * id the device is subscribed to or NV_U32_MAX if no subscription was made.
+ *
+ * maxObjects
+ * This parameter returns the maximum number of object handles that may be
+ * contained in the file descriptor.
+ *
+ * metadata
+ * This parameter returns the user metadata passed into the
+ * _EXPORT_OBJECTS_TO_FD control call.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_ARGUMENT
+ * NV_ERR_OBJECT_NOT_FOUND
+ */
+
+#define NV0000_CTRL_CMD_OS_UNIX_GET_EXPORT_OBJECT_INFO (0x3d08) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | NV0000_CTRL_OS_UNIX_GET_EXPORT_OBJECT_INFO_PARAMS_MESSAGE_ID" */
+
+#define NV0000_OS_UNIX_EXPORT_OBJECT_FD_BUFFER_SIZE 64
+
+#define NV0000_CTRL_OS_UNIX_GET_EXPORT_OBJECT_INFO_PARAMS_MESSAGE_ID (0x8U)
+
+typedef struct NV0000_CTRL_OS_UNIX_GET_EXPORT_OBJECT_INFO_PARAMS {
+ NvS32 fd; /* IN */
+ NvU32 deviceInstance; /* OUT */
+ NvU32 gpuInstanceId; /* OUT */
+ NvU16 maxObjects; /* OUT */
+ NvU8 metadata[NV0000_OS_UNIX_EXPORT_OBJECT_FD_BUFFER_SIZE]; /* OUT */
+} NV0000_CTRL_OS_UNIX_GET_EXPORT_OBJECT_INFO_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_OS_UNIX_REFRESH_RMAPI_DEVICE_LIST
+ *
+ * This command will re-fetch probed GPUs information and update RMAPI library's
+ * internal detected GPU context information accordingly. Without this, GPUs
+ * attached to RM after RMAPI client initialization will not be accessible and
+ * all RMAPI library calls will fail on them.
+ * Currently this is used by NVSwitch Fabric Manager in conjunction with NVSwitch
+ * Shared Virtualization feature where GPUs are hot-plugged to OS/RM (by Hypervisor)
+ * and Fabric Manager is signaled externally by the Hypervisor to initialize those GPUs.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_STATE
+ * NV_ERR_OPERATING_SYSTEM
+ */
+
+#define NV0000_CTRL_CMD_OS_UNIX_REFRESH_RMAPI_DEVICE_LIST (0x3d09) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | 0x9" */
+
+/*
+ * This control call has been deprecated. It will be deleted soon.
+ * Use NV0000_CTRL_CMD_OS_UNIX_EXPORT_OBJECT_TO_FD (singular) or
+ * NV0000_CTRL_CMD_OS_UNIX_EXPORT_OBJECTS_TO_FD (plural) instead.
+ */
+#define NV0000_CTRL_CMD_OS_UNIX_CREATE_EXPORT_OBJECT_FD (0x3d0a) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | NV0000_CTRL_OS_UNIX_CREATE_EXPORT_OBJECT_FD_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_OS_UNIX_CREATE_EXPORT_OBJECT_FD_BUFFER_SIZE NV0000_OS_UNIX_EXPORT_OBJECT_FD_BUFFER_SIZE
+
+#define NV0000_CTRL_OS_UNIX_CREATE_EXPORT_OBJECT_FD_PARAMS_MESSAGE_ID (0xAU)
+
+typedef struct NV0000_CTRL_OS_UNIX_CREATE_EXPORT_OBJECT_FD_PARAMS {
+ NvHandle hDevice; /* IN */
+ NvU16 maxObjects; /* IN */
+ NvU8 metadata[NV0000_CTRL_OS_UNIX_CREATE_EXPORT_OBJECT_FD_BUFFER_SIZE]; /* IN */
+ NvS32 fd; /* IN/OUT */
+} NV0000_CTRL_OS_UNIX_CREATE_EXPORT_OBJECT_FD_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_OS_UNIX_EXPORT_OBJECTS_TO_FD
+ *
+ * Exports RM handles to an fd that was provided, also creates an FD if
+ * requested.
+ *
+ * The objects in the 'handles' array are exported into the fd
+ * as the range [index, index + numObjects).
+ *
+ * If index + numObjects is greater than the maxObjects value used
+ * to create the file descriptor, NV_ERR_INVALID_PARAMETER is returned.
+ *
+ * If 'numObjects and 'index' overlap with a prior call, the newer call's RM object
+ * handles will overwrite the previously exported handles from the previous call.
+ * This overlapping behavior can also be used to unexport a handle by setting
+ * the appropriate object in 'objects' to 0.
+ *
+ * fd
+ * A file descriptor. If -1, a new FD will be created.
+ *
+ * hDevice
+ * The owning device of the objects to be exported (must be the same for
+ * all objects).
+ *
+ * maxObjects
+ * The total number of objects that the client wishes to export to the FD.
+ * This parameter will be honored only when the FD is getting created.
+ *
+ * metadata
+ * A buffer for clients to write some metadata to and pass to the importing
+ * client. This parameter will be honored only when the FD is getting
+ * created.
+ *
+ * objects
+ * Array of RM object handles to export to the fd.
+ *
+ * numObjects
+ * The number of handles the user wishes to export in this call.
+ *
+ * index
+ * The index into the export fd at which to start exporting the handles in
+ * 'objects' (for use in iterative calls).
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_OUT_OF_RANGE
+ * NV_ERR_NOT_SUPPORTED
+ * NV_ERR_OBJECT_NOT_FOUND
+ * NV_ERR_INVALID_OBJECT_HANDLE
+ */
+#define NV0000_CTRL_CMD_OS_UNIX_EXPORT_OBJECTS_TO_FD (0x3d0b) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | NV0000_CTRL_OS_UNIX_EXPORT_OBJECTS_TO_FD_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_OS_UNIX_EXPORT_OBJECTS_TO_FD_MAX_OBJECTS 512
+
+#define NV0000_CTRL_OS_UNIX_EXPORT_OBJECTS_TO_FD_PARAMS_MESSAGE_ID (0xBU)
+
+typedef struct NV0000_CTRL_OS_UNIX_EXPORT_OBJECTS_TO_FD_PARAMS {
+ NvS32 fd; /* IN/OUT */
+ NvHandle hDevice; /* IN */
+ NvU16 maxObjects; /* IN */
+ NvU8 metadata[NV0000_OS_UNIX_EXPORT_OBJECT_FD_BUFFER_SIZE]; /* IN */
+ NvHandle objects[NV0000_CTRL_OS_UNIX_EXPORT_OBJECTS_TO_FD_MAX_OBJECTS]; /* IN */
+ NvU16 numObjects; /* IN */
+ NvU16 index; /* IN */
+} NV0000_CTRL_OS_UNIX_EXPORT_OBJECTS_TO_FD_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_OS_UNIX_IMPORT_OBJECTS_FROM_FD
+ *
+ * This command can be used to import back RM handles
+ * that were exported to an fd using the
+ * NV0000_CTRL_CMD_OS_UNIX_EXPORT_OBJECTS_TO_FD control call.
+ *
+ * If index + numObjects is greater than the maxObjects value used
+ * to create the file descriptor, NV_ERR_INVALID_PARAMETER is returned
+ * and no objects are imported.
+ *
+ * For each valid handle in the 'objects' array parameter at index 'i',
+ * the corresponding object handle at index ('i' + 'index') contained by
+ * the fd will be imported. If the object at index ('i' + 'index') has
+ * not been exported into the fd, no object will be imported.
+ *
+ * If any of handles contained in the 'objects' array parameter are invalid
+ * and the corresponding export object handle is valid,
+ * NV_ERR_INVALID_PARAMETER will be returned and no handles will be imported.
+ *
+ * fd
+ * The export fd on which to import handles out of.
+ *
+ * hParent
+ * The parent RM handle of which all of the exported objects will
+ * be duped under.
+ *
+ * objects
+ * An array of RM handles. The exported objects will be duped under
+ * these handles during the import process.
+ *
+ * objectTypes
+ * An array of RM handle types. The type _NONE will be returned if
+ * the object was not imported. Other possible object types are
+ * mentioned below.
+ *
+ * numObjects
+ * The number of valid object handles in the 'objects' array. This should
+ * be set to the number of objects that the client wishes to import.
+ *
+ * index
+ * The index into the fd in which to start importing from. For
+ * use in iterative calls.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_OUT_OF_RANGE
+ * NV_ERR_NOT_SUPPORTED
+ * NV_ERR_OBJECT_NOT_FOUND
+ * NV_ERR_INVALID_OBJECT_HANDLE
+ * NV_ERR_INVALID_PARAMETER
+ */
+#define NV0000_CTRL_CMD_OS_UNIX_IMPORT_OBJECTS_FROM_FD (0x3d0c) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | NV0000_CTRL_OS_UNIX_IMPORT_OBJECTS_FROM_FD_PARAMS_MESSAGE_ID" */
+
+//
+// TODO Bump this back up to 512 after the FLA revamp is complete
+//
+#define NV0000_CTRL_OS_UNIX_IMPORT_OBJECTS_TO_FD_MAX_OBJECTS 128
+
+#define NV0000_CTRL_CMD_OS_UNIX_IMPORT_OBJECT_TYPE_NONE 0
+#define NV0000_CTRL_CMD_OS_UNIX_IMPORT_OBJECT_TYPE_VIDMEM 1
+#define NV0000_CTRL_CMD_OS_UNIX_IMPORT_OBJECT_TYPE_SYSMEM 2
+#define NV0000_CTRL_CMD_OS_UNIX_IMPORT_OBJECT_TYPE_FABRIC 3
+#define NV0000_CTRL_CMD_OS_UNIX_IMPORT_OBJECT_TYPE_FABRIC_MC 4
+
+#define NV0000_CTRL_OS_UNIX_IMPORT_OBJECTS_FROM_FD_PARAMS_MESSAGE_ID (0xCU)
+
+typedef struct NV0000_CTRL_OS_UNIX_IMPORT_OBJECTS_FROM_FD_PARAMS {
+ NvS32 fd; /* IN */
+ NvHandle hParent; /* IN */
+ NvHandle objects[NV0000_CTRL_OS_UNIX_IMPORT_OBJECTS_TO_FD_MAX_OBJECTS]; /* IN */
+ NvU8 objectTypes[NV0000_CTRL_OS_UNIX_IMPORT_OBJECTS_TO_FD_MAX_OBJECTS]; /* OUT */
+ NvU16 numObjects; /* IN */
+ NvU16 index; /* IN */
+} NV0000_CTRL_OS_UNIX_IMPORT_OBJECTS_FROM_FD_PARAMS;
+
+#define NV0000_CTRL_OS_UNIX_MEMACCT_SET_LIMITS_PARAMS_MESSAGE_ID (0xDU)
+
+typedef struct NV0000_CTRL_OS_UNIX_MEMACCT_SET_LIMITS_PARAMS {
+ NvS32 cgroupFd;
+ NvU32 gpuId;
+ NV_DECLARE_ALIGNED(NvU64 softLimit, 8);
+ NV_DECLARE_ALIGNED(NvU64 hardLimit, 8);
+} NV0000_CTRL_OS_UNIX_MEMACCT_SET_LIMITS_PARAMS;
+
+#define NV0000_CTRL_OS_UNIX_CMD_MEMACCT_SET_LIMITS (0x3d0d) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | NV0000_CTRL_OS_UNIX_MEMACCT_SET_LIMITS_PARAMS_MESSAGE_ID" */
+
+typedef struct NV0000_CTRL_OS_UNIX_MEMACCT_LIMITS {
+ NvU32 gpuId;
+ NV_DECLARE_ALIGNED(NvU64 soft, 8);
+ NV_DECLARE_ALIGNED(NvU64 hard, 8);
+ NV_DECLARE_ALIGNED(NvU64 current, 8);
+} NV0000_CTRL_OS_UNIX_MEMACCT_LIMITS;
+
+#define NV0000_CTRL_OS_UNIX_MEMACCT_GET_LIMITS_PARAMS_MESSAGE_ID (0xEU)
+
+typedef struct NV0000_CTRL_OS_UNIX_MEMACCT_GET_LIMITS_PARAMS {
+ NvS32 cgroupFd;
+ NvU32 count;
+ NV_DECLARE_ALIGNED(NV0000_CTRL_OS_UNIX_MEMACCT_LIMITS limits[NV0000_CTRL_GPU_MAX_ATTACHED_GPUS], 8);
+} NV0000_CTRL_OS_UNIX_MEMACCT_GET_LIMITS_PARAMS;
+
+#define NV0000_CTRL_OS_UNIX_CMD_MEMACCT_GET_LIMITS (0x3d0e) /* finn: Evaluated from "(FINN_NV01_ROOT_OS_UNIX_INTERFACE_ID << 8) | NV0000_CTRL_OS_UNIX_MEMACCT_GET_LIMITS_PARAMS_MESSAGE_ID" */
+
+/* _ctrl0000unix_h_ */
diff --git a/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000vgpu.h b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000vgpu.h
new file mode 100644
index 0000000..412559c
--- /dev/null
+++ b/userspace/sdks/nv570/inc/ctrl/ctrl0000/ctrl0000vgpu.h
@@ -0,0 +1,224 @@
+/*
+ * SPDX-FileCopyrightText: Copyright (c) 2016-2024 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+ * SPDX-License-Identifier: MIT
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ */
+
+#pragma once
+
+#include <nvtypes.h>
+
+//
+// This file was generated with FINN, an NVIDIA coding tool.
+// Source file: ctrl/ctrl0000/ctrl0000vgpu.finn
+//
+
+#include "ctrl/ctrl0000/ctrl0000base.h"
+
+#include "ctrl/ctrlxxxx.h"
+#include "ctrl/ctrla081.h"
+#include "class/cl0000.h"
+#include "nv_vgpu_types.h"
+
+/* DRF macros for OBJGPU::gpuId */
+#define NV0000_BUSDEVICE_DOMAIN 31:16
+#define NV0000_BUSDEVICE_BUS 15:8
+#define NV0000_BUSDEVICE_DEVICE 7:0
+
+#define GPU_32_BIT_ID_DECODE_DOMAIN(gpuId) (NvU16)DRF_VAL(0000, _BUSDEVICE, _DOMAIN, gpuId);
+#define GPU_32_BIT_ID_DECODE_BUS(gpuId) (NvU8) DRF_VAL(0000, _BUSDEVICE, _BUS, gpuId);
+#define GPU_32_BIT_ID_DECODE_DEVICE(gpuId) (NvU8) DRF_VAL(0000, _BUSDEVICE, _DEVICE, gpuId);
+
+/*
+ * NV0000_CTRL_CMD_VGPU_CREATE_DEVICE
+ *
+ * This command informs RM to create a vGPU device on KVM.
+ *
+ * vgpuName [IN]
+ * This parameter provides the MDEV UUID or VF BDF depending on whether MDEV
+ * or vfio-pci-core framework is used.
+ *
+ * gpuPciId [IN]
+ * This parameter provides gpuId of GPU on which vgpu device is created.
+ *
+ * gpuPciBdf
+ * This parameter specifies the BDF of the VF. (Same as PF for non-sriov)
+ *
+ * vgpuTypeId [IN]
+ * This parameter specifies the vGPU type ID for the device to be created.
+ *
+ * vgpuId [OUT]
+ * This parameter returns the vgpu id allocated by RM for the device
+ *
+ * gpuInstanceId [OUT]
+ * This parameter returns the swizzId allocated by RM for the device.
+ *
+ * placementId [OUT]
+ * This parameter returns the placementId allocated by RM for the device.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_EVENT
+ * NV_ERR_OBJECT_NOT_FOUND
+ * NV_ERR_INVALID_CLIENT
+ *
+ */
+
+#define NV0000_CTRL_CMD_VGPU_CREATE_DEVICE (0xc02) /* finn: Evaluated from "(FINN_NV01_ROOT_VGPU_INTERFACE_ID << 8) | NV0000_CTRL_VGPU_CREATE_DEVICE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_VGPU_CREATE_DEVICE_PARAMS_MESSAGE_ID (0x2U)
+
+typedef struct NV0000_CTRL_VGPU_CREATE_DEVICE_PARAMS {
+ NvU8 vgpuName[VM_UUID_SIZE];
+ NvU32 gpuPciId;
+ NvU32 gpuPciBdf;
+ NvU32 vgpuTypeId;
+ NvU16 vgpuId;
+ NvU32 gpuInstanceId;
+ NvU32 placementId;
+} NV0000_CTRL_VGPU_CREATE_DEVICE_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_VGPU_GET_INSTANCES
+ *
+ * This command queries RM for available instances for a particular vGPU type ID
+ * on KVM.
+ *
+ * gpuPciId [IN]
+ * This parameter specifies gpuId of GPU on which vGPU instances are being
+ * queried.
+ *
+ * gpuPciBdf [IN]
+ * This parameter specifies the BDF of the VF. (Same as PF for non-sriov)
+ *
+ * numVgpuTypes [IN]
+ * This parameter specifies the count of vgpuTypeIds supplied and the
+ * count of availableInstances values to be returned.
+ *
+ * vgpuTypeIds [IN]
+ * This parameter specifies a total of numVgpuTypes vGPU type IDs for which
+ * the available instances are to be queried.
+ *
+ * availableInstances [OUT]
+ * This parameter returns a total of numVgpuTypes available instances for
+ * the respective vGPU type IDs supplied in vgpuTypeIds input parameter.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_EVENT
+ * NV_ERR_OBJECT_NOT_FOUND
+ * NV_ERR_INVALID_CLIENT
+ * NV_ERR_INVALID_STATE
+ *
+ */
+
+#define NV0000_CTRL_CMD_VGPU_GET_INSTANCES (0xc03) /* finn: Evaluated from "(FINN_NV01_ROOT_VGPU_INTERFACE_ID << 8) | NV0000_CTRL_VGPU_GET_INSTANCES_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_VGPU_GET_INSTANCES_PARAMS_MESSAGE_ID (0x3U)
+
+typedef struct NV0000_CTRL_VGPU_GET_INSTANCES_PARAMS {
+ NvU32 gpuPciId;
+ NvU32 gpuPciBdf;
+ NvU32 numVgpuTypes;
+ NvU32 vgpuTypeIds[NVA081_MAX_VGPU_TYPES_PER_PGPU];
+ NvU32 availableInstances[NVA081_MAX_VGPU_TYPES_PER_PGPU];
+} NV0000_CTRL_VGPU_GET_INSTANCES_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_VGPU_DELETE_DEVICE
+ *
+ * This command informs RM to delete a vGPU device on KVM.
+ *
+ * vgpuName [IN]
+ * This parameter provides the MDEV UUID or VF BDF depending on whether MDEV
+ * or vfio-pci-core framework is used.
+ *
+ * vgpuId [IN]
+ * This parameter provides the vgpu id allocated by RM for the device to be
+ * deleted.
+ *
+ * Possible status values returned are:
+ * NV_OK
+ * NV_ERR_INVALID_EVENT
+ * NV_ERR_OBJECT_NOT_FOUND
+ * NV_ERR_INVALID_CLIENT
+ *
+ */
+
+#define NV0000_CTRL_CMD_VGPU_DELETE_DEVICE (0xc04) /* finn: Evaluated from "(FINN_NV01_ROOT_VGPU_INTERFACE_ID << 8) | NV0000_CTRL_VGPU_DELETE_DEVICE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_VGPU_DELETE_DEVICE_PARAMS_MESSAGE_ID (0x4U)
+
+typedef struct NV0000_CTRL_VGPU_DELETE_DEVICE_PARAMS {
+ NvU8 vgpuName[VM_UUID_SIZE];
+ NvU16 vgpuId;
+} NV0000_CTRL_VGPU_DELETE_DEVICE_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_VGPU_VFIO_NOTIFY_RM_STATUS
+ *
+ * This command informs RM the status of vgpu-vfio GPU operations such as probe and unregister.
+ *
+ * returnStatus [IN]
+ * This parameter provides the status of vgpu-vfio GPU operation.
+ *
+ * gpuPciId [IN]
+ * This parameter provides the gpu id of the GPU
+ */
+
+#define NV0000_CTRL_CMD_VGPU_VFIO_NOTIFY_RM_STATUS (0xc05) /* finn: Evaluated from "(FINN_NV01_ROOT_VGPU_INTERFACE_ID << 8) | NV0000_CTRL_VGPU_VFIO_NOTIFY_RM_STATUS_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_VGPU_VFIO_NOTIFY_RM_STATUS_PARAMS_MESSAGE_ID (0x5U)
+
+typedef struct NV0000_CTRL_VGPU_VFIO_NOTIFY_RM_STATUS_PARAMS {
+ NvU32 returnStatus;
+ NvU32 gpuId;
+} NV0000_CTRL_VGPU_VFIO_NOTIFY_RM_STATUS_PARAMS;
+
+/*
+ * NV0000_CTRL_CMD_GPU_UPDATE_SYSFS_NODE
+ *
+ * This command will get/set the information of following sysfs node:
+ * gpuInstanceId
+ * placementId
+ *
+ * vgpuName [IN]
+ * This parameter provides the MDEV UUID or VF BDF depending on whether MDEV
+ * or vfio-pci-core framework is used.
+ *
+ * mode [IN]
+ * This parameter provides info about the type of operation this cmd will perform.
+ *
+ * sysfs_val [IN/OUT]
+ * This parameter will store the info of placementID/gpuInstanceId.
+ *
+ */
+
+#define NV0000_CTRL_CMD_GPU_UPDATE_SYSFS_NODE (0x206U) /* finn: Evaluated from "(FINN_NV01_ROOT_GPU_INTERFACE_ID << 8) | NV0000_CTRL_GPU_UPDATE_SYSFS_NODE_PARAMS_MESSAGE_ID" */
+
+#define NV0000_CTRL_GPU_UPDATE_SYSFS_NODE_PARAMS_MESSAGE_ID (0x6U)
+
+typedef struct NV0000_CTRL_GPU_UPDATE_SYSFS_NODE_PARAMS {
+ NvU8 vgpuName[VM_UUID_SIZE];
+ NvU32 mode;
+ NvU32 sysfs_val;
+} NV0000_CTRL_GPU_UPDATE_SYSFS_NODE_PARAMS;
+
+/* _ctrl0000vgpu_h_ */