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