1 /* 2 * SPDX-FileCopyrightText: Copyright (c) 2021-2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 3 * SPDX-License-Identifier: MIT 4 * 5 * Permission is hereby granted, free of charge, to any person obtaining a 6 * copy of this software and associated documentation files (the "Software"), 7 * to deal in the Software without restriction, including without limitation 8 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 9 * and/or sell copies of the Software, and to permit persons to whom the 10 * Software is furnished to do so, subject to the following conditions: 11 * 12 * The above copyright notice and this permission notice shall be included in 13 * all copies or substantial portions of the Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 */ 23 24 #pragma once 25 26 #include <nvtypes.h> 27 28 // 29 // This file was generated with FINN, an NVIDIA coding tool. 30 // Source file: ctrl/ctrla084.finn 31 // 32 33 #include "ctrl/ctrlxxxx.h" 34 #include "ctrl/ctrl2080/ctrl2080gpu.h" // NV2080_GPU_MAX_GID_LENGTH 35 #include "ctrl/ctrl2080/ctrl2080fb.h" // NV2080_CTRL_FB_OFFLINED_PAGES_MAX_PAGES 36 37 /* NVA084_KERNEL_HOST_VGPU_DEVICE control commands and parameters */ 38 #define NVA084_CTRL_CMD(cat,idx) NVXXXX_CTRL_CMD(0xA084U, NVA084_CTRL_##cat, idx) 39 40 /* Command categories (6bits) */ 41 #define NVA084_CTRL_RESERVED (0x00) 42 #define NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE (0x01) 43 44 /* 45 * NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_DEVICE_INFO 46 * 47 * This command sets the guest vgpu device's information 48 * 49 * Parameter: 50 * 51 * vgpuUuid [IN] 52 * This parameter specifies the universaly unique identifier of the guest vGPU device 53 * 54 * vgpuDeviceInstanceId [IN] 55 * This parameter specifies the vGPU device instance 56 * 57 * Possible status values returned are: 58 * NV_OK 59 */ 60 #define NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_DEVICE_INFO (0xa0840101) /* finn: Evaluated from "(FINN_NVA084_KERNEL_HOST_VGPU_DEVICE_KERNEL_HOST_VGPU_DEVICE_INTERFACE_ID << 8) | NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_DEVICE_INFO_PARAMS_MESSAGE_ID" */ 61 62 #define NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_DEVICE_INFO_PARAMS_MESSAGE_ID (0x1U) 63 64 typedef struct NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_DEVICE_INFO_PARAMS { 65 NvU8 vgpuUuid[NV2080_GPU_MAX_GID_LENGTH]; 66 } NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_DEVICE_INFO_PARAMS; 67 68 /* NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_GUEST_LIFE_CYCLE_STATE 69 * 70 * This command triggers the notifier for vGPU guest. 71 * 72 * Parameters: 73 * 74 * vmLifeCycleState[IN] 75 * The life cycle event of the vGPU guest. This can be: 76 * NVA081_NOTIFIERS_EVENT_VGPU_GUEST_DESTROYED 77 * NVA081_NOTIFIERS_EVENT_VGPU_GUEST_CREATED 78 * 79 * Possible status values returned are: 80 * NV_OK 81 */ 82 #define NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_GUEST_LIFE_CYCLE_STATE (0xa0840102) /* finn: Evaluated from "(FINN_NVA084_KERNEL_HOST_VGPU_DEVICE_KERNEL_HOST_VGPU_DEVICE_INTERFACE_ID << 8) | NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_GUEST_LIFE_CYCLE_STATE_PARAMS_MESSAGE_ID" */ 83 84 #define NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_GUEST_LIFE_CYCLE_STATE_PARAMS_MESSAGE_ID (0x2U) 85 86 typedef struct NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_GUEST_LIFE_CYCLE_STATE_PARAMS { 87 NvU32 vmLifeCycleState; 88 } NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_VGPU_GUEST_LIFE_CYCLE_STATE_PARAMS; 89 90 /* 91 * NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_SET_OFFLINED_PAGE_PATCHINFO 92 * 93 * This command is used to copy offlined page mapping info from plugin to host vgpu device 94 * 95 * guestFbSegmentPageSize [in] 96 * Guest FB segment page size 97 * 98 * offlinedPageCount [in] 99 * Offlined page count in the guest FB range 100 * 101 * gpa [in] 102 * This array represents guest page address list of offlined page 103 * 104 * hMemory [in] 105 * This array represents memory handle list of good page 106 * 107 * Possible status values returned are: 108 * NV_OK 109 * NV_ERR_INVALID_STATE 110 */ 111 #define NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_SET_OFFLINED_PAGE_PATCHINFO (0xa0840103) /* finn: Evaluated from "(FINN_NVA084_KERNEL_HOST_VGPU_DEVICE_KERNEL_HOST_VGPU_DEVICE_INTERFACE_ID << 8) | NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_OFFLINED_PAGE_PATCHINFO_PARAMS_MESSAGE_ID" */ 112 113 #define NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_OFFLINED_PAGE_PATCHINFO_PARAMS_MESSAGE_ID (0x3U) 114 115 typedef struct NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_OFFLINED_PAGE_PATCHINFO_PARAMS { 116 NvU32 guestFbSegmentPageSize; 117 NvU32 offlinedPageCount; 118 NV_DECLARE_ALIGNED(NvU64 gpa[NV2080_CTRL_FB_OFFLINED_PAGES_MAX_PAGES], 8); 119 NvHandle hMemory[NV2080_CTRL_FB_OFFLINED_PAGES_MAX_PAGES]; 120 } NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_SET_OFFLINED_PAGE_PATCHINFO_PARAMS; 121 122 /* 123 * NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_VF_CONFIG_SPACE_ACCESS 124 * 125 * Config space access for the virtual function 126 * 127 * Parameters: 128 * 129 * offset [IN] 130 * Offset within the config space 131 * 132 * numBytes [IN] 133 * Number of bytes to be read/written: 1/2/4 134 * 135 * accessType [IN] 136 * To indicate whether it is a read operation or a write operation 137 * 138 * value [INOUT] 139 * Value to be read or written 140 * 141 * Possible status values returned are: 142 * NV_OK 143 */ 144 #define NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_VF_CONFIG_SPACE_ACCESS (0xa0840104) /* finn: Evaluated from "(FINN_NVA084_KERNEL_HOST_VGPU_DEVICE_KERNEL_HOST_VGPU_DEVICE_INTERFACE_ID << 8) | NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_VF_CONFIG_SPACE_ACCESS_PARAMS_MESSAGE_ID" */ 145 146 #define NVA084_CTRL_VF_CONFIG_SPACE_ACCESS_TYPE_READ 0x1 147 #define NVA084_CTRL_VF_CONFIG_SPACE_ACCESS_TYPE_WRITE 0x2 148 149 #define NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_VF_CONFIG_SPACE_ACCESS_PARAMS_MESSAGE_ID (0x4U) 150 151 typedef struct NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_VF_CONFIG_SPACE_ACCESS_PARAMS { 152 NvU16 offset; 153 NvU8 numBytes; 154 NvU8 accessType; 155 NvU32 value; 156 } NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_VF_CONFIG_SPACE_ACCESS_PARAMS; 157 158 /* 159 * NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_BIND_FECS_EVTBUF 160 * 161 * This command is used to create a bind-point on a host system 162 * for the collection of guest VM FECS events 163 * 164 * hEventBufferClient[IN] 165 * The client of the event buffer to bind to 166 * 167 * hEventBufferSubdevice[IN] 168 * The subdevice of the event buffer to bind to 169 * 170 * hEventBuffer[IN] 171 * The event buffer to bind to 172 * 173 * reasonCode[OUT] 174 * The reason for failure (if any); see NV2080_CTRL_GR_FECS_BIND_EVTBUF_REASON_CODE 175 * 176 * Possible status values returned are: 177 * NV_OK 178 * NV_ERR_INVALID_ARGUMENT 179 * NV_ERR_NOT_SUPPORTED 180 */ 181 #define NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_BIND_FECS_EVTBUF (0xa0840105) /* finn: Evaluated from "(FINN_NVA084_KERNEL_HOST_VGPU_DEVICE_KERNEL_HOST_VGPU_DEVICE_INTERFACE_ID << 8) | NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_BIND_FECS_EVTBUF_PARAMS_MESSAGE_ID" */ 182 183 #define NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_BIND_FECS_EVTBUF_PARAMS_MESSAGE_ID (0x5U) 184 185 typedef struct NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_BIND_FECS_EVTBUF_PARAMS { 186 NvHandle hEventBufferClient; 187 NvHandle hEventBufferSubdevice; 188 NvHandle hEventBuffer; 189 NvU32 reasonCode; 190 } NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_BIND_FECS_EVTBUF_PARAMS; 191 192 /* 193 * NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_TRIGGER_PRIV_DOORBELL 194 * 195 * The command will trigger the specified interrupt on the host from CPU Plugin. 196 * 197 * handle[IN] 198 * - An opaque handle that will be passed in along with the interrupt 199 * 200 * Possible status values returned are: 201 * NV_OK 202 * NV_ERR_INVALID_ARGUMENT 203 * NV_ERR_NOT_SUPPORTED 204 */ 205 #define NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_TRIGGER_PRIV_DOORBELL (0xa0840106) /* finn: Evaluated from "(FINN_NVA084_KERNEL_HOST_VGPU_DEVICE_KERNEL_HOST_VGPU_DEVICE_INTERFACE_ID << 8) | NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_TRIGGER_PRIV_DOORBELL_PARAMS_MESSAGE_ID" */ 206 207 #define NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_TRIGGER_PRIV_DOORBELL_PARAMS_MESSAGE_ID (0x6U) 208 209 typedef struct NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_TRIGGER_PRIV_DOORBELL_PARAMS { 210 NvU32 handle; 211 } NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_TRIGGER_PRIV_DOORBELL_PARAMS; 212 213 /* valid action values */ 214 #define NVA084_CTRL_EVENT_SET_NOTIFICATION_ACTION_DISABLE (0x00000000) 215 #define NVA084_CTRL_EVENT_SET_NOTIFICATION_ACTION_SINGLE (0x00000001) 216 #define NVA084_CTRL_EVENT_SET_NOTIFICATION_ACTION_REPEAT (0x00000002) 217 218 /* 219 * NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_EVENT_SET_NOTIFICATION 220 * 221 * This command sets event notification state for the associated host vgpu device. 222 * This command requires that an instance of NV01_EVENT has been previously 223 * bound to the associated host vgpu device object. 224 */ 225 #define NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_EVENT_SET_NOTIFICATION (0xa0840107) /* finn: Evaluated from "(FINN_NVA084_KERNEL_HOST_VGPU_DEVICE_KERNEL_HOST_VGPU_DEVICE_INTERFACE_ID << 8) | NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_EVENT_SET_NOTIFICATION_PARAMS_MESSAGE_ID" */ 226 227 #define NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_EVENT_SET_NOTIFICATION_PARAMS_MESSAGE_ID (0x7U) 228 229 typedef struct NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_EVENT_SET_NOTIFICATION_PARAMS { 230 // 231 // @todo: We will define the actual event values later based on the use case. 232 // These event values are only for Test purpose. 233 // 234 NvU32 event; 235 NvU32 action; 236 NvBool bNotifyState; 237 } NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_EVENT_SET_NOTIFICATION_PARAMS; 238 239 /* NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_GER_BAR_MAPPING_RANGES 240 * 241 * This command is used to get Bar mapping ranges in RM. 242 * 243 * Parameters: 244 * offsets [OUT] 245 * Offsets of the ranges 246 * sizes [OUT] 247 * Sizes of the ranges 248 * mitigated [OUT] 249 * Specifies whether it's mitigated range 250 * numRanges [OUT] 251 * Number of ranges 252 * 253 * osPageSize [IN] 254 * Page size. 255 * 256 * Possible status values returned are: 257 * NV_OK 258 * NV_ERR_INVALID_STATE 259 */ 260 #define NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_GET_BAR_MAPPING_RANGES (0xa084010a) /* finn: Evaluated from "(FINN_NVA084_KERNEL_HOST_VGPU_DEVICE_KERNEL_HOST_VGPU_DEVICE_INTERFACE_ID << 8) | NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_GET_BAR_MAPPING_RANGES_PARAMS_MESSAGE_ID" */ 261 262 #define NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_MAX_BAR_MAPPING_RANGES 10 263 264 #define NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_GET_BAR_MAPPING_RANGES_PARAMS_MESSAGE_ID (0xAU) 265 266 typedef struct NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_GET_BAR_MAPPING_RANGES_PARAMS { 267 NV_DECLARE_ALIGNED(NvU64 offsets[NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_MAX_BAR_MAPPING_RANGES], 8); 268 NV_DECLARE_ALIGNED(NvU64 sizes[NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_MAX_BAR_MAPPING_RANGES], 8); 269 NvU32 numRanges; 270 NvU32 osPageSize; 271 NvBool mitigated[NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_MAX_BAR_MAPPING_RANGES]; 272 } NVA084_CTRL_KERNEL_HOST_VGPU_DEVICE_GET_BAR_MAPPING_RANGES_PARAMS; 273 274 /* 275 * NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_RESTORE_DEFAULT_EXEC_PARTITION 276 * 277 * This command restores the vGPU device's default EXEC partition saved in 278 * KERNEL_HOST_VGPU_DEVICE. 279 * 280 * Possible status values returned are: 281 * NV_OK 282 * NV_ERR_OBJECT_NOT_FOUND 283 * NV_ERR_NOT_SUPPORTED 284 */ 285 #define NVA084_CTRL_CMD_KERNEL_HOST_VGPU_DEVICE_RESTORE_DEFAULT_EXEC_PARTITION (0xa084010b) /* finn: Evaluated from "(FINN_NVA084_KERNEL_HOST_VGPU_DEVICE_KERNEL_HOST_VGPU_DEVICE_INTERFACE_ID << 8) | 0xB" */ 286 287 /* _ctrla084_h_ */ 288