1 /*
2  * SPDX-FileCopyrightText: Copyright (c) 2005-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/ctrl0073/ctrl0073system.finn
31 //
32 
33 #include "ctrl/ctrl0073/ctrl0073base.h"
34 
35 /* NV04_DISPLAY_COMMON system-level control commands and parameters */
36 
37 /* extract cap bit setting from tbl */
38 #define NV0073_CTRL_SYSTEM_GET_CAP(tbl,c)         (((NvU8)tbl[(1?c)]) & (0?c))
39 
40 /* Caps format is byte_index:bit_mask.
41  * Important: keep the number of bytes needed for these fields in sync with
42  * NV0073_CTRL_SYSTEM_CAPS_TBL_SIZE
43  */
44 #define NV0073_CTRL_SYSTEM_CAPS_AA_FOS_GAMMA_COMP_SUPPORTED        0:0x01
45 #define NV0073_CTRL_SYSTEM_CAPS_TV_LOWRES_BUG_85919                0:0x02
46 #define NV0073_CTRL_SYSTEM_CAPS_DFP_GPU_SCALING_BUG_154102         0:0x04
47 #define NV0073_CTRL_SYSTEM_CAPS_SLI_INTERLACED_MODE_BUG_235218     0:0x08 // Deprecated
48 #define NV0073_CTRL_SYSTEM_CAPS_STEREO_DIN_AVAILABLE               0:0x10
49 #define NV0073_CTRL_SYSTEM_CAPS_OFFSET_PCLK_DFP_FOR_EMI_BUG_443891 0:0x20
50 #define NV0073_CTRL_SYSTEM_CAPS_GET_DMI_SCANLINE_SUPPORTED         0:0x40
51 /*
52  * Indicates support for HDCP Key Selection Vector (KSV) list and System
53  * Renewability Message (SRM) validation
54 */
55 #define NV0073_CTRL_SYSTEM_CAPS_KSV_SRM_VALIDATION_SUPPORTED       0:0x80
56 
57 #define NV0073_CTRL_SYSTEM_CAPS_SINGLE_HEAD_MST_SUPPORTED          1:0x01
58 #define NV0073_CTRL_SYSTEM_CAPS_SINGLE_HEAD_DUAL_SST_SUPPORTED     1:0x02
59 #define NV0073_CTRL_SYSTEM_CAPS_HDMI_2_0_SUPPORTED                 1:0x04
60 #define NV0073_CTRL_SYSTEM_CAPS_CROSS_BAR_SUPPORTED                1:0x08
61 #define NV0073_CTRL_SYSTEM_CAPS_RASTER_LOCK_NEEDS_MIO_POWER        1:0x10
62 /*
63  * Indicates that modesets where no heads are increasing resource requirements,
64  * or no heads are decreasing resource requirements, can be done glitchlessly.
65  */
66 #define NV0073_CTRL_SYSTEM_CAPS_GLITCHLESS_MODESET_SUPPORTED       1:0x20
67 /* Indicates the SW ACR is enabled for HDMI 2.1 due to Bug 3275257. */
68 #define NV0073_CTRL_SYSTEM_CAPS_HDMI21_SW_ACR_BUG_3275257          1:0x40
69 
70 /* Size in bytes of display caps table. Keep in sync with # of fields above. */
71 #define NV0073_CTRL_SYSTEM_CAPS_TBL_SIZE   2U
72 
73 /*
74  * NV0073_CTRL_CMD_SYSTEM_GET_CAPS_V2
75  *
76  * This command returns the set of display capabilities for the parent device
77  * in the form of an array of unsigned bytes.  Display capabilities
78  * include supported features and required workarounds for the display
79  * engine(s) within the device, each represented by a byte offset into the
80  * table and a bit position within that byte.  The set of display capabilities
81  * will be normalized across all GPUs within the device (a feature capability
82  * will be set only if it's supported on all GPUs while a required workaround
83  * capability will be set if any of the GPUs require it).
84  *
85  *   [out] capsTbl
86  *     The display caps bits will be transferred by the RM into this array of
87  *     unsigned bytes.
88  *
89  * Possible status values returned are:
90  *   NV_OK
91  */
92 #define NV0073_CTRL_CMD_SYSTEM_GET_CAPS_V2 (0x730138U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_CAPS_V2_PARAMS_MESSAGE_ID" */
93 
94 #define NV0073_CTRL_SYSTEM_GET_CAPS_V2_PARAMS_MESSAGE_ID (0x38U)
95 
96 typedef struct NV0073_CTRL_SYSTEM_GET_CAPS_V2_PARAMS {
97     NvU8 capsTbl[NV0073_CTRL_SYSTEM_CAPS_TBL_SIZE];
98 } NV0073_CTRL_SYSTEM_GET_CAPS_V2_PARAMS;
99 
100 /*
101  * NV0073_CTRL_CMD_SYSTEM_GET_NUM_HEADS
102  *
103  * This commands returns the number of heads supported by the specified
104  * subdevice and available for use by displays.
105  *
106  *   subDeviceInstance
107  *     This parameter specifies the subdevice instance within the
108  *     NV04_DISPLAY_COMMON parent device to which the operation should be
109  *     directed.  This parameter must specify a value between zero and the
110  *     total number of subdevices within the parent device.  This parameter
111  *     should be set to zero for default behavior.
112  *   flags
113  *     This parameter specifies optional flags to be used to while retrieving
114  *     the number of heads.
115  *     Possible valid flags are:
116  *       NV0073_CTRL_SYSTEM_GET_NUM_HEADS_CLIENT
117  *         This flag is used to request the number of heads that are
118  *         currently in use by an NV client using a user display class
119  *         instance (see NV15_VIDEO_LUT_CURSOR_DAC for an examle).  If this
120  *         flag is disabled then the total number of heads supported is
121  *         returned.
122  *   numHeads
123  *     This parameter returns the number of usable heads for the specified
124  *     subdevice.
125  *
126  * Possible status values returned are:
127  *   NV_OK
128  *   NV_ERR_INVALID_PARAM_STRUCT
129  *   NV_ERR_INVALID_ARGUMENT
130  */
131 #define NV0073_CTRL_CMD_SYSTEM_GET_NUM_HEADS (0x730102U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_NUM_HEADS_PARAMS_MESSAGE_ID" */
132 
133 #define NV0073_CTRL_SYSTEM_GET_NUM_HEADS_PARAMS_MESSAGE_ID (0x2U)
134 
135 typedef struct NV0073_CTRL_SYSTEM_GET_NUM_HEADS_PARAMS {
136     NvU32 subDeviceInstance;
137     NvU32 flags;
138     NvU32 numHeads;
139 } NV0073_CTRL_SYSTEM_GET_NUM_HEADS_PARAMS;
140 
141 /* valid get num heads flags */
142 #define NV0073_CTRL_SYSTEM_GET_NUM_HEADS_FLAGS_CLIENT              0:0
143 #define NV0073_CTRL_SYSTEM_GET_NUM_HEADS_FLAGS_CLIENT_DISABLE (0x00000000U)
144 #define NV0073_CTRL_SYSTEM_GET_NUM_HEADS_FLAGS_CLIENT_ENABLE  (0x00000001U)
145 
146 
147 
148 
149 /*
150  * NV0073_CTRL_CMD_SYSTEM_GET_SCANLINE
151  *
152  * This command returns the current RG scanline of the specified head on the
153  * specified subdevice. To get the DMI scanline on supported chips, use
154  * NV0073_CTRL_CMD_SYSTEM_GET_DMI_SCANLINE
155  *
156  *   subDeviceInstance
157  *     This parameter specifies the subdevice instance within the
158  *     NV04_DISPLAY_COMMON parent device to which the operation should be
159  *     directed.  This parameter must specify a value between zero and the
160  *     total number of subdevices within the parent device.  This parameter
161  *     should be set to zero for default behavior.
162  *   head
163  *     This parameter specifies the head for which the active display
164  *     should be retrieved.  This value must be between zero and the
165  *     maximum number of heads supported by the subdevice.
166  *   currentScanline
167  *     This parameter returns the current RG scanline value for the specified
168  *     head.  If the head does not have a valid mode enabled then a scanline
169  *     value of 0xffffffff is returned.
170  *   bStereoEyeSupported (out)
171  *     This parameter specifies whether stereoEye reporting is supported (this
172  *     is hw dependent). Note that this value doesn't actually reflect whether
173  *     given head is really in stereo mode.
174  *   stereoEye (out)
175  *     If supported (ie bStereoEyeSupported is TRUE), this parameter returns
176  *     either NV0073_CTRL_SYSTEM_GET_SCANLINE_PARAMS_RIGHT_EYE or
177  *     NV0073_CTRL_SYSTEM_GET_SCANLINE_PARAMS_LEFT_EYE, reflecting the
178  *     stereo eye that is currently scanned out. Although this value typically
179  *     changes at the beginning of vblank, the exact guarantee isn't more
180  *     accurate than "somewhere in vblank".
181  *
182  * Possible status values returned are:
183  *   NV_OK
184  *   NV_ERR_INVALID_PARAM_STRUCT
185  *   NV_ERR_INVALID_ARGUMENT
186  */
187 #define NV0073_CTRL_CMD_SYSTEM_GET_SCANLINE           (0x730108U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_SCANLINE_PARAMS_MESSAGE_ID" */
188 
189 #define NV0073_CTRL_CMD_SYSTEM_GET_SCANLINE_RIGHT_EYE 0x00000000U
190 #define NV0073_CTRL_CMD_SYSTEM_GET_SCANLINE_LEFT_EYE  0x00000001U
191 
192 #define NV0073_CTRL_SYSTEM_GET_SCANLINE_PARAMS_MESSAGE_ID (0x8U)
193 
194 typedef struct NV0073_CTRL_SYSTEM_GET_SCANLINE_PARAMS {
195     NvU32  subDeviceInstance;
196     NvU32  head;
197     NvU32  currentScanline;
198     NvBool bStereoEyeSupported;
199     NvU32  stereoEye;
200 } NV0073_CTRL_SYSTEM_GET_SCANLINE_PARAMS;
201 
202 /*
203  * NV0073_CTRL_CMD_SYSTEM_GET_VBLANK_COUNTER
204  *
205  * This command returns the current VBlank counter of the specified head on the
206  * specified subdevice.
207  *
208  *   subDeviceInstance
209  *     This parameter specifies the subdevice instance within the
210  *     NV04_DISPLAY_COMMON parent device to which the operation should be
211  *     directed.  This parameter must specify a value between zero and the
212  *     total number of subdevices within the parent device.  This parameter
213  *     should be set to zero for default behavior.
214  *   head
215  *     This parameter specifies the head for which the vblank counter
216  *     should be retrieved.  This value must be between zero and the
217  *     maximum number of heads supported by the subdevice.
218  *   verticalBlankCounter
219  *     This parameter returns the vblank counter value for the specified
220  *     head. If the display mode is not valid or vblank not active then
221  *     the verticalBlankCounter value is undefined.
222  * Possible status values returned are:
223  *   NV_OK
224  *   NV_ERR_INVALID_PARAM_STRUCT
225  *   NV_ERR_INVALID_ARGUMENT
226  */
227 #define NV0073_CTRL_CMD_SYSTEM_GET_VBLANK_COUNTER (0x730109U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_VBLANK_COUNTER_PARAMS_MESSAGE_ID" */
228 
229 #define NV0073_CTRL_SYSTEM_GET_VBLANK_COUNTER_PARAMS_MESSAGE_ID (0x9U)
230 
231 typedef struct NV0073_CTRL_SYSTEM_GET_VBLANK_COUNTER_PARAMS {
232     NvU32 subDeviceInstance;
233     NvU32 head;
234     NvU32 verticalBlankCounter;
235 } NV0073_CTRL_SYSTEM_GET_VBLANK_COUNTER_PARAMS;
236 
237 /*
238  * NV0073_CTRL_CMD_SYSTEM_GET_VBLANK_ENABLE
239  *
240  * This command returns the current VBlank enable status for the specified
241  * head.
242  *
243  *   subDeviceInstance
244  *     This parameter specifies the subdevice instance within the
245  *     NV04_DISPLAY_COMMON parent device to which the operation should be
246  *     directed.  This parameter must specify a value between zero and the
247  *     total number of subdevices within the parent device.  This parameter
248  *     should be set to zero for default behavior.
249  *   head
250  *     This parameter specifies the head for which the vblank status
251  *     should be retrieved.  This value must be between zero and the
252  *     maximum number of heads supported by the subdevice.
253  *   bEnabled
254  *     This parameter returns the vblank enable status for the specified head.
255  *     A value of NV_FALSE indicates that vblank interrupts are not currently
256  *     enabled while a value of NV_TRUE indicates that vblank are currently
257  *     enabled.
258  *
259  * Possible status values returned are:
260  *   NV_OK
261  *   NV_ERR_INVALID_PARAM_STRUCT
262  *   NV_ERR_INVALID_ARGUMENT
263  */
264 #define NV0073_CTRL_CMD_SYSTEM_GET_VBLANK_ENABLE (0x73010aU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_VBLANK_ENABLE_PARAMS_MESSAGE_ID" */
265 
266 #define NV0073_CTRL_SYSTEM_GET_VBLANK_ENABLE_PARAMS_MESSAGE_ID (0xAU)
267 
268 typedef struct NV0073_CTRL_SYSTEM_GET_VBLANK_ENABLE_PARAMS {
269     NvU32  subDeviceInstance;
270     NvU32  head;
271     NvBool bEnabled;
272 } NV0073_CTRL_SYSTEM_GET_VBLANK_ENABLE_PARAMS;
273 
274 /*
275  * NV0073_CTRL_CMD_SYSTEM_GET_SUPPORTED
276  *
277  * This command returns the set of supported display IDs for the specified
278  * subdevice in the form of a 32bit display mask.  State from internal
279  * display connectivity tables is used to determine the set of possible
280  * display connections for the GPU.  The presence of a display in the
281  * display mask only indicates the display is supported.  The connectivity
282  * status of the display should be determined using the
283  * NV0073_CTRL_CMD_SYSTEM_GET_CONNECT_STATE command.  The displayMask
284  * value returned by NV0073_CTRL_CMD_SYSTEM_GET_SUPPORTED is static
285  * and will remain consistent across boots of the system.
286  *
287  *   subDeviceInstance
288  *     This parameter specifies the subdevice instance within the
289  *     NV04_DISPLAY_COMMON parent device to which the operation should be
290  *     directed.  This parameter must specify a value between zero and the
291  *     total number of subdevices within the parent device.  This parameter
292  *     should be set to zero for default behavior.
293  *   displayMask
294  *     This parameter returns a NV0073_DISPLAY_MASK value describing the set
295  *     of displays supported by the subdevice.  An enabled bit in displayMask
296  *     indicates the support of a display device with that displayId.
297  *   displayMaskDDC
298  *     This parameter returns a NV0073_DISPLAY_MASK value, indicating the
299  *     subset of displayMask that supports DDC.
300  *
301  * Possible status values returned are:
302  *   NV_OK
303  *   NV_ERR_INVALID_PARAM_STRUCT
304  *   NV_ERR_INVALID_ARGUMENT
305  */
306 #define NV0073_CTRL_CMD_SYSTEM_GET_SUPPORTED (0x730120U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_SUPPORTED_PARAMS_MESSAGE_ID" */
307 
308 #define NV0073_CTRL_SYSTEM_GET_SUPPORTED_PARAMS_MESSAGE_ID (0x20U)
309 
310 typedef struct NV0073_CTRL_SYSTEM_GET_SUPPORTED_PARAMS {
311     NvU32 subDeviceInstance;
312     NvU32 displayMask;
313     NvU32 displayMaskDDC;
314 } NV0073_CTRL_SYSTEM_GET_SUPPORTED_PARAMS;
315 
316 /*
317  * NV0073_CTRL_CMD_SYSTEM_GET_CONNECT_STATE
318  *
319  * This command can be used to check the presence of a mask of display
320  * devices on the specified subdevice.
321  *
322  *   subDeviceInstance
323  *     This parameter specifies the subdevice instance within the
324  *     NV04_DISPLAY_COMMON parent device to which the operation should be
325  *     directed.  This parameter must specify a value between zero and the
326  *     total number of subdevices within the parent device.  This parameter
327  *     should be set to zero for default behavior.
328  *   flags
329  *     This parameter specifies optional flags to be used while retrieving
330  *     the connection state information.
331  *     Here are the current defined fields:
332  *       NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_METHOD
333  *         A client uses this field to indicate what method it wishes the
334  *         system to use when determining the presence of attached displays.
335  *         Possible values are:
336  *            NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_METHOD_DEFAULT
337  *              The system decides what method to use.
338  *            NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_METHOD_CACHED
339  *              Return the last full detection state for the display mask.
340  *                   safety.)
341  *            NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_METHOD_ECONODDC
342  *              Ping the DDC address of the given display mask to check for
343  *              a connected device. This is a lightweight method to check
344  *              for a present device.
345  *       NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_DDC
346  *         A client uses this field to indicate whether to allow DDC during
347  *         this detection or to not use it.
348  *         Possible values are:
349  *            NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_DDC_DEFAULT
350  *              The system will use DDC as needed for each display.
351  *            NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_DDC_DISABLE
352  *              The system will not use DDC for any display. If DDC is
353  *              disabled, this detection state will not be cached.
354  *       NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_LOAD
355  *         A client uses this field to indicate whether to detect loads
356  *         during this detection or to not use it.
357  *         Possible values are:
358  *            NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_LOAD_DEFAULT
359  *              The system will use load detection as needed for each display.
360  *            NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_LOAD_DISABLE
361  *              The system will not use load detection for any display. If
362  *              load detection is disabled, this detection state will not
363  *              be cached.
364  *   displayMask
365  *     This parameter specifies an NV0073_DISPLAY_MASK value describing
366  *     the set of displays for which connectivity status is to be checked.
367  *     If a display is present then the corresponding bit in the display
368  *     mask is left enabled.  If the display is not present then the
369  *     corresponding bit in the display mask is disabled.  Upon return this
370  *     parameter contains the subset of displays in the mask that are
371  *     connected.
372  *
373  *     If displayMask includes bit(s) that correspond to a TV encoder, the
374  *     result will be simply 'yes' or 'no' without any indication of which
375  *     connector(s) are actually attached.  For fine-grained TV attachment
376  *     detection, please see NV0073_CTRL_CMD_TV_GET_ATTACHMENT_STATUS.
377  *   retryTimeMs
378  *     This parameter is an output to this command.  In case of
379  *     NVOS_STATUS_ERROR_RETRY return status, this parameter returns the time
380  *     duration in milli-seconds after which client should retry this command.
381  *
382  * Possible status values returned are:
383  *   NV_OK
384  *   NV_ERR_INVALID_PARAM_STRUCT
385  *   NV_ERR_INVALID_ARGUMENT
386  *   NVOS_STATUS_ERROR_RETRY
387  */
388 #define NV0073_CTRL_CMD_SYSTEM_GET_CONNECT_STATE (0x730122U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_PARAMS_MESSAGE_ID" */
389 
390 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_PARAMS_MESSAGE_ID (0x22U)
391 
392 typedef struct NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_PARAMS {
393     NvU32 subDeviceInstance;
394     NvU32 flags;
395     NvU32 displayMask;
396     NvU32 retryTimeMs;
397 } NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_PARAMS;
398 
399 /* valid get connect state flags */
400 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_METHOD                  1:0
401 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_METHOD_DEFAULT  (0x00000000U)
402 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_METHOD_CACHED   (0x00000001U)
403 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_METHOD_ECONODDC (0x00000002U)
404 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_DDC                     4:4
405 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_DDC_DEFAULT     (0x00000000U)
406 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_DDC_DISABLE     (0x00000001U)
407 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_LOAD                    5:5
408 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_LOAD_DEFAULT    (0x00000000U)
409 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_LOAD_DISABLE    (0x00000001U)
410 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_VBLANK                  6:6
411 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_VBLANK_DEFAULT  (0x00000000U)
412 #define NV0073_CTRL_SYSTEM_GET_CONNECT_STATE_FLAGS_VBLANK_SAFE     (0x00000001U)
413 
414 
415 /*
416  * NV0073_CTRL_CMD_SYSTEM_GET_HOTPLUG_CONFIG
417  *
418  * This command can be used to retrieve dynamic hotplug state information that
419  * are currently recorded by the RM. This information can be used by the client
420  * to determine which displays to detect after a hotplug event occurs.  Or if
421  * the client knows that this device generates a hot plug/unplug signal on all
422  * connectors, then this can be used to cull displays from detection.
423  *
424  *   subDeviceInstance
425  *     This parameter specifies the subdevice instance within the
426  *     NV04_DISPLAY_COMMON parent device to which the operation should be
427  *     directed.  This parameter must specify a value between zero and the
428  *     total number of subdevices within the parent device.  This parameter
429  *     should be set to zero for default behavior.
430  *   flags
431  *     This parameter specifies optional flags to be used while retrieving
432  *     or changing the hotplug configuration.
433  *       No flags are currently defined.
434  *   hotplugEventMask
435  *     For _GET_HOTPLUG_CONFIG, this returns which connectors the client
436  *     has asked for notifications for, when a hotplug event is detected.
437  *     Events can only be provided for connectors whose displayID is set
438  *     by the system in the hotplugInterruptible field.
439  *   hotplugPollable
440  *     For _GET_HOTPLUG_CONFIG, this returns which connectors are pollable
441  *     in some non-destructive fashion.
442  *   hotplugInterruptible
443  *     For _GET_HOTPLUG_CONFIG, this returns which connectors are capable
444  *     of generating interrupts.
445  *
446  *     This display mask specifies an NV0073_DISPLAY_MASK value describing
447  *     the set of displays that have seen a hotplug or hotunplug event
448  *     sometime after the last valid EDID read.  If the device never has
449  *     a valid EDID read, then it will always be listed here.
450  *
451  * Possible status values returned are:
452  *   NV_OK
453  *   NV_ERR_INVALID_PARAM_STRUCT
454  *   NV_ERR_INVALID_ARGUMENT
455  */
456 
457 
458 #define NV0073_CTRL_CMD_SYSTEM_GET_HOTPLUG_CONFIG                  (0x730123U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_SET_HOTPLUG_CONFIG_PARAMS_MESSAGE_ID" */
459 
460 #define NV0073_CTRL_SYSTEM_GET_SET_HOTPLUG_CONFIG_PARAMS_MESSAGE_ID (0x23U)
461 
462 typedef struct NV0073_CTRL_SYSTEM_GET_SET_HOTPLUG_CONFIG_PARAMS {
463     NvU32 subDeviceInstance;
464     NvU32 flags;
465     NvU32 hotplugEventMask;
466     NvU32 hotplugPollable;
467     NvU32 hotplugInterruptible;
468     NvU32 hotplugAlwaysAttached;
469 } NV0073_CTRL_SYSTEM_GET_SET_HOTPLUG_CONFIG_PARAMS;
470 
471 /*
472  * NV0073_CTRL_CMD_SYSTEM_GET_HOTPLUG_STATE
473  *
474  * This command can be used to retrieve dynamic hotplug state information that
475  * are currently recorded by the RM. This information can be used by the client
476  * to determine which displays to detect after a hotplug event occurs.  Or if
477  * the client knows that this device generates a hot plug/unplug signal on all
478  * connectors, then this can be used to cull displays from detection.
479  *
480  *   subDeviceInstance
481  *     This parameter specifies the subdevice instance within the
482  *     NV04_DISPLAY_COMMON parent device to which the operation should be
483  *     directed.  This parameter must specify a value between zero and the
484  *     total number of subdevices within the parent device.  This parameter
485  *     should be set to zero for default behavior.
486  *   flags
487  *     This parameter specifies optional flags to be used while retrieving
488  *     the hotplug state information.
489  *     Here are the current defined fields:
490  *       NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_FLAGS_LID
491  *         A client uses this field to determine the lid state.
492  *         Possible values are:
493  *            NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_FLAGS_LID_OPEN
494  *              The lid is open.
495  *            NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_FLAGS_LID_CLOSED
496  *              The lid is closed.  The client should remove devices as
497  *              reported inside the
498  *              NV0073_CTRL_SYSTEM_GET_CONNECT_POLICY_PARAMS.lidClosedMask.
499  *   hotplugAfterEdidMask
500  *     This display mask specifies an NV0073_DISPLAY_MASK value describing
501  *     the set of displays that have seen a hotplug or hotunplug event
502  *     sometime after the last valid EDID read.  If the device never has
503  *     a valid EDID read, then it will always be listed here.
504  *
505  * Possible status values returned are:
506  *   NV_OK
507  *   NV_ERR_INVALID_PARAM_STRUCT
508  *   NV_ERR_INVALID_ARGUMENT
509  */
510 
511 
512 #define NV0073_CTRL_CMD_SYSTEM_GET_HOTPLUG_STATE (0x730124U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_PARAMS_MESSAGE_ID" */
513 
514 #define NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_PARAMS_MESSAGE_ID (0x24U)
515 
516 typedef struct NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_PARAMS {
517     NvU32 subDeviceInstance;
518     NvU32 flags;
519     NvU32 hotplugAfterEdidMask;
520 } NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_PARAMS;
521 
522 /* valid get hoplug state flags */
523 #define NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_FLAGS_LID                   0:0
524 #define NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_FLAGS_LID_OPEN   (0x00000000U)
525 #define NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_FLAGS_LID_CLOSED (0x00000001U)
526 
527 /*
528  * NV0073_CTRL_CMD_SYSTEM_GET_HEAD_ROUTING_MAP
529  *
530  * This command can be used to retrieve the suggested head routing map
531  * for the specified display mask.  A head routing map describes the
532  * suggested crtc (or head) assignments for each display in the specified
533  * mask.
534  *
535  * Up to MAX_DISPLAYS displays may be specified in the display mask.  Displays
536  * are numbered from zero beginning with the lowest bit position set in the
537  * mask.  The corresponding head assignment for each of specified displays can
538  * then be found in the respective per-device field in the routing map.
539  *
540  * If a particular display cannot be successfully assigned a position in the
541  * head routing map then it is removed from the display mask.
542  *
543  *   subDeviceInstance
544  *     This parameter specifies the subdevice instance within the
545  *     NV04_DISPLAY_COMMON parent device to which the operation should be
546  *     directed.  This parameter must specify a value between zero and the
547  *     total number of subdevices within the parent device.  This parameter
548  *     should be set to zero for default behavior.
549  *   displayMask
550  *     This parameter specifies the NV0073_DISPLAY_MASK value for which
551  *     the head routing map is desired.  Each enabled bit indicates
552  *     a display device to include in the routing map. Enabled bits
553  *     must represent supported displays as indicated by the
554  *     NV0073_CTRL_CMD_SYSTEM_GET_SUPPORTED command.  If a particular
555  *     display cannot be included in the routing map then it's corresponding
556  *     bit in the displayMask will be disabled.  A return value of 0 in
557  *     displayMask indicates that a head routing map could not be constructed
558  *     with the given display devices.
559  *   oldDisplayMask
560  *     This optional parameter specifies a prior display mask to be
561  *     used when generating the head routing map to be returned in
562  *     headRoutingMap.  Displays set in oldDisplayMask are retained
563  *     if possible in the new routing map.
564  *   oldHeadRoutingMap
565  *     This optional parameter specifies a prior head routing map to be
566  *     used when generating the new routing map to be returned in
567  *     headRoutingMap.  Head assignments in oldHeadRoutingMap are
568  *     retained if possible in the new routing map.
569  *   headRoutingMap
570  *     This parameter returns the new head routing map.  This parameter
571  *     is organized into eight distinct fields, each containing the head
572  *     assignment for the corresponding display in display mask.
573  *
574  * Possible status values returned are:
575  *   NV_OK
576  *   NV_ERR_INVALID_PARAM_STRUCT
577  *   NV_ERR_INVALID_ARGUMENT
578  */
579 #define NV0073_CTRL_CMD_SYSTEM_GET_HEAD_ROUTING_MAP           (0x730125U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_HEAD_ROUTING_MAP_PARAMS_MESSAGE_ID" */
580 
581 #define NV0073_CTRL_SYSTEM_GET_HEAD_ROUTING_MAP_PARAMS_MESSAGE_ID (0x25U)
582 
583 typedef struct NV0073_CTRL_SYSTEM_GET_HEAD_ROUTING_MAP_PARAMS {
584     NvU32 subDeviceInstance;
585     NvU32 displayMask;
586     NvU32 oldDisplayMask;
587     NvU32 oldHeadRoutingMap;
588     NvU32 headRoutingMap;
589 } NV0073_CTRL_SYSTEM_GET_HEAD_ROUTING_MAP_PARAMS;
590 
591 /* maximum number of allowed displays in a routing map */
592 #define NV0073_CTRL_SYSTEM_HEAD_ROUTING_MAP_MAX_DISPLAYS (8U)
593 
594 /* per-display head assignments in a routing map */
595 #define NV0073_CTRL_SYSTEM_HEAD_ROUTING_MAP_DISPLAY0               3:0
596 #define NV0073_CTRL_SYSTEM_HEAD_ROUTING_MAP_DISPLAY1               7:4
597 #define NV0073_CTRL_SYSTEM_HEAD_ROUTING_MAP_DISPLAY2               11:8
598 #define NV0073_CTRL_SYSTEM_HEAD_ROUTING_MAP_DISPLAY3               15:12
599 #define NV0073_CTRL_SYSTEM_HEAD_ROUTING_MAP_DISPLAY4               19:16
600 #define NV0073_CTRL_SYSTEM_HEAD_ROUTING_MAP_DISPLAY5               23:20
601 #define NV0073_CTRL_SYSTEM_HEAD_ROUTING_MAP_DISPLAY6               27:24
602 #define NV0073_CTRL_SYSTEM_HEAD_ROUTING_MAP_DISPLAY7               31:28
603 
604 
605 /*
606  * NV0073_CTRL_CMD_SYSTEM_GET_ACTIVE
607  *
608  * This command returns the active display ID for the specified head
609  * on the specified subdevice.  The active display may be established
610  * at system boot by low-level software and can then be later modified
611  * by an NV client using a user display class instance (see
612  * NV15_VIDEO_LUT_CURSOR_DAC).
613  *
614  *   subDeviceInstance
615  *     This parameter specifies the subdevice instance within the
616  *     NV04_DISPLAY_COMMON parent device to which the operation should be
617  *     directed.  This parameter must specify a value between zero and the
618  *     total number of subdevices within the parent device.  This parameter
619  *     should be set to zero for default behavior.
620  *   head
621  *     This parameter specifies the head for which the active display
622  *     should be retrieved.  This value must be between zero and the
623  *     maximum number of heads supported by the subdevice.
624  *   flags
625  *     This parameter specifies optional flags to be used to while retrieving
626  *     the active display information.
627  *     Possible valid flags are:
628  *       NV0073_CTRL_SYSTEM_GET_ACTIVE_FLAGS_CLIENT
629  *         This flag is used to limit the search for the active display to
630  *         that established by an NV client.  If this flag is not specified,
631  *         then any active display is returned (setup at system boot by
632  *         low-level software or later by an NV client).
633  *   displayId
634  *     This parameter returns the displayId of the active display.  A value
635  *     of zero indicates no display is active.
636  *
637  * Possible status values returned are:
638  *   NV_OK
639  *   NV_ERR_INVALID_PARAM_STRUCT
640  *   NV_ERR_INVALID_ARGUMENT
641  */
642 #define NV0073_CTRL_CMD_SYSTEM_GET_ACTIVE                (0x730126U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_ACTIVE_PARAMS_MESSAGE_ID" */
643 
644 #define NV0073_CTRL_SYSTEM_GET_ACTIVE_PARAMS_MESSAGE_ID (0x26U)
645 
646 typedef struct NV0073_CTRL_SYSTEM_GET_ACTIVE_PARAMS {
647     NvU32 subDeviceInstance;
648     NvU32 head;
649     NvU32 flags;
650     NvU32 displayId;
651 } NV0073_CTRL_SYSTEM_GET_ACTIVE_PARAMS;
652 
653 /* valid get active flags */
654 #define NV0073_CTRL_SYSTEM_GET_ACTIVE_FLAGS_CLIENT                 0:0
655 #define NV0073_CTRL_SYSTEM_GET_ACTIVE_FLAGS_CLIENT_DISABLE (0x00000000U)
656 #define NV0073_CTRL_SYSTEM_GET_ACTIVE_FLAGS_CLIENT_ENABLE  (0x00000001U)
657 
658 
659 
660 /*
661  * NV0073_CTRL_SYSTEM_ACPI_ID_MAP
662  *
663  * This structure defines the mapping between the RM's displayId and the
664  * defined ACPI IDs for each display.
665  *   displayId
666  *     This parameter is a handle to a single display output path from the
667  *     GPU pins to the display connector.  Each display ID is defined by one bit.
668  *     A zero in this parameter indicates a skip entry.
669  *   acpiId
670  *     This parameter defines the corresponding ACPI ID of the displayId.
671  *   flags
672  *     This parameter specifies optional flags that describe the association
673  *     between the display ID and the ACPI ID.
674  *       NV0073_CTRL_SYSTEM_ACPI_ID_MAP_ORIGIN
675  *         This field describes where the ACPI was found.
676  *           NV0073_CTRL_SYSTEM_ACPI_ID_MAP_ORIGIN_RM
677  *             The ACPI ID was generated by RM code.
678  *           NV0073_CTRL_SYSTEM_ACPI_ID_MAP_ORIGIN_DOD
679  *             The ACPI ID was found via the ACPI _DOD call.
680  *           NV0073_CTRL_SYSTEM_ACPI_ID_MAP_ORIGIN_CLIENT
681  *             The ACPI ID was generated by RM Client and sent to RM. Note this
682  *             must be set on a NV0073_CTRL_CMD_SYSTEM_SET_ACPI_ID_MAP call.
683  *       NV0073_CTRL_SYSTEM_ACPI_ID_MAP_SNAG_UNDOCKED
684  *         This flag explains that the ACPI ID is only valid when the system
685  *         is undocked.  If this flag is not set, the ACPI ID is valid always.
686  *       NV0073_CTRL_SYSTEM_ACPI_ID_MAP_SNAG_DOCKED
687  *         This flag explains that the ACPI ID is only valid when the system
688  *         is docked.  If this flag is not set, the ACPI ID is valid always.
689  *       NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_BIOS_DETECT
690  *         This flag is set only if the _DOD returns that the device can be
691  *         detected by the system BIOS.  This flag is copied directly from
692  *         the ACPI spec.
693  *       NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_NON_VGA_OUTPUT
694  *         This flag is set only if the _DOD returns that the device is
695  *         a non-VGA device whose power is related to the VGA device.
696  *         i.e. TV tuner, DVD decoder, Video capture. This flag is copied
697  *         directly from the ACPI spec.
698  *       NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_MULTIHEAD_ID
699  *         This value is set only if the _DOD returns it.  The number
700  *         indicates the head output of a multi-head device. This has no
701  *         relation to the term, Head, currently used in the RM today.
702  *         This is strictly a copy of the value directly from the ACPI spec.
703  *       NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_SCHEME
704  *         This flag is set only if the _DOD returns that the acpiID follows
705  *         the ACPI 3.0 spec.  This flag is copied directly from
706  *         the ACPI spec.
707  *
708  */
709 
710 typedef struct NV0073_CTRL_SYSTEM_ACPI_ID_MAP_PARAMS {
711     NvU32 displayId;
712     NvU32 acpiId;
713     NvU32 flags;
714 } NV0073_CTRL_SYSTEM_ACPI_ID_MAP_PARAMS;
715 
716 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_ORIGIN                            1:0
717 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_ORIGIN_RM                0x00000000U
718 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_ORIGIN_DOD               0x00000001U
719 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_ORIGIN_CLIENT            0x00000002U
720 
721 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_SNAG_UNDOCKED                     2:2
722 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_SNAG_UNDOCKED_FALSE      0x00000000U
723 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_SNAG_UNDOCKED_TRUE       0x00000001U
724 
725 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_SNAG_DOCKED                       3:3
726 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_SNAG_DOCKED_FALSE        0x00000000U
727 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_SNAG_DOCKED_TRUE         0x00000001U
728 
729 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_BIOS_DETECT                 16:16
730 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_BIOS_DETECT_FALSE    0x00000000U
731 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_BIOS_DETECT_TRUE     0x00000001U
732 
733 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_NON_VGA_OUTPUT              17:17
734 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_NON_VGA_OUTPUT_FALSE 0x00000000U
735 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_NON_VGA_OUTPUT_TRUE  0x00000001U
736 
737 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_MULTIHEAD_ID                20:18
738 
739 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_SCHEME                      31:31
740 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_SCHEME_VENDOR        0x00000000U
741 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_DOD_SCHEME_30            0x00000001U
742 
743 #define NV0073_CTRL_SYSTEM_ACPI_ID_MAP_MAX_DISPLAYS             (16U)
744 
745 /*
746  * NV0073_CTRL_CMD_SYSTEM_GET_ACPI_ID_MAP
747  *
748  * This command retrieves the mapping between the RM's displayId and the
749  * defined ACPI IDs for each display.
750  *
751  *   subDeviceInstance
752  *     This parameter specifies the subdevice instance within the
753  *     NV04_DISPLAY_COMMON parent device to which the operation should be
754  *     directed.  This parameter must specify a value between zero and
755  *     the total number of subdevices within the parent device.  It should
756  *     be set to zero for default behavior.
757  *   NV0073_CTRL_SYSTEM_ACPI_ID_MAP_PARAMS
758  *     An array of display ID to ACPI ids with flags for each description.
759  *
760  * Possible status values returned are:
761  *   NV_OK
762  *   NV_ERR_INVALID_ARGUMENT
763  *     Only returned if subdeviceInstance was not valid.
764  */
765 
766 #define NV0073_CTRL_CMD_SYSTEM_GET_ACPI_ID_MAP                  (0x73015aU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_ACPI_ID_MAP_PARAMS_MESSAGE_ID" */
767 
768 
769 #define NV0073_CTRL_SYSTEM_GET_ACPI_ID_MAP_PARAMS_MESSAGE_ID (0x5AU)
770 
771 typedef struct NV0073_CTRL_SYSTEM_GET_ACPI_ID_MAP_PARAMS {
772     NvU32                                 subDeviceInstance;
773     NV0073_CTRL_SYSTEM_ACPI_ID_MAP_PARAMS acpiIdMap[NV0073_CTRL_SYSTEM_ACPI_ID_MAP_MAX_DISPLAYS];
774 } NV0073_CTRL_SYSTEM_GET_ACPI_ID_MAP_PARAMS;
775 
776 /*
777  * NV0073_CTRL_CMD_SYSTEM_GET_INTERNAL_DISPLAYS
778  *
779  * This command returns the set of internal (safe) display IDs for the specified
780  * subdevice in the form of a 32bit display mask. Safe means the displays do
781  * not require copy protection as they are on the motherboard.
782  *
783  *   subDeviceInstance
784  *     This parameter specifies the subdevice instance within the
785  *     NV04_DISPLAY_COMMON parent device to which the operation should be
786  *     directed.  This parameter must specify a value between zero and the
787  *     total number of subdevices within the parent device.  This parameter
788  *     should be set to zero for default behavior.
789  *   internalDisplaysMask
790  *     This parameter returns a NV0073_DISPLAY_MASK value describing the set
791  *     of displays that are internal (safe) and which do not require copy
792  *     protection schemes.
793  *   availableInternalDisplaysMask
794  *     This parameter returns a NV0073_DISPLAY_MASK value describing the set
795  *     of displays that are internal and available for use.
796  *
797  * Possible status values returned are:
798  *   NV_OK
799  *   NV_ERR_INVALID_PARAM_STRUCT
800  *   NV_ERR_INVALID_ARGUMENT
801  */
802 #define NV0073_CTRL_CMD_SYSTEM_GET_INTERNAL_DISPLAYS (0x73015bU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_INTERNAL_DISPLAYS_PARAMS_MESSAGE_ID" */
803 
804 #define NV0073_CTRL_SYSTEM_GET_INTERNAL_DISPLAYS_PARAMS_MESSAGE_ID (0x5BU)
805 
806 typedef struct NV0073_CTRL_SYSTEM_GET_INTERNAL_DISPLAYS_PARAMS {
807     NvU32 subDeviceInstance;
808     NvU32 internalDisplaysMask;
809     NvU32 availableInternalDisplaysMask;
810 } NV0073_CTRL_SYSTEM_GET_INTERNAL_DISPLAYS_PARAMS;
811 
812 /*
813  * NV0073_CTRL_CMD_SYSTEM_ACPI_SUBSYSTEM_ACTIVATED
814  *
815  * This command is used to notify RM that all subdevices are ready for ACPI
816  * calls. The caller must make sure that the OS is ready to handle the ACPI
817  * calls for each ACPI ID. So, this call must be done after the OS has
818  * initialized all the display ACPI IDs to this subdevice.
819  * Besides, the ACPI spec provides a function for the display drivers to read
820  * the EDID directly from the SBIOS for each display's ACPI ID. This function
821  * is used to override the EDID found from a I2C or DPAux based transaction.
822  * This command will also attempt to call the ACPI _DDC function to read the
823  * EDID from the SBIOS for all displayIDs. If an EDID is found from this call,
824  * the RM will store that new EDID in the EDID buffer of that OD.
825  *
826  *   subDeviceInstance
827  *     This parameter specifies the subdevice instance within the
828  *     NV04_DISPLAY_COMMON parent device to which the operation should be
829  *     directed. This parameter must specify a value between zero and the
830  *     total number of subdevices within the parent device.  This parameter
831  *     should be set to zero for default behavior.
832  *
833  * Possible status values returned are:
834  * NV_OK
835  * NV_ERR_INVALID_PARAM_STRUCT
836  * NV_ERR_NOT_SUPPORTED
837  *
838  */
839 
840 #define NV0073_CTRL_SYSTEM_ACPI_SUBSYSTEM_ACTIVATED_PARAMS_MESSAGE_ID (0x5CU)
841 
842 typedef struct NV0073_CTRL_SYSTEM_ACPI_SUBSYSTEM_ACTIVATED_PARAMS {
843     NvU32 subDeviceInstance;
844 } NV0073_CTRL_SYSTEM_ACPI_SUBSYSTEM_ACTIVATED_PARAMS;
845 
846 #define NV0073_CTRL_CMD_SYSTEM_ACPI_SUBSYSTEM_ACTIVATED (0x73015cU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_ACPI_SUBSYSTEM_ACTIVATED_PARAMS_MESSAGE_ID" */
847 
848 
849 /*
850  * NV0073_CTRL_SYSTEM_CONNECTOR_INFO
851  *
852  * This structure describes a single connector table entry.
853  *
854  *   type
855  *     This field specifies the connector type.
856  *   displayMask
857  *     This field specifies the the displayMask to which the connector belongs.
858  *   location
859  *     This field specifies the placement of the connector on the platform.
860  *   hotplug
861  *     This field specifies hotplug capabilities (if any) for the connector.
862  */
863 typedef struct NV0073_CTRL_SYSTEM_CONNECTOR_INFO {
864     NvU32 type;
865     NvU32 displayMask;
866     NvU32 location;
867     NvU32 hotplug;
868 } NV0073_CTRL_SYSTEM_CONNECTOR_INFO;
869 
870 /* valid type values */
871 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_VGA_15_PIN               (0x00000000U)
872 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DVI_A                    (0x00000001U)
873 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_POD_VGA_15_PIN           (0x00000002U)
874 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_TV_COMPOSITE             (0x00000010U)
875 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_TV_SVIDEO                (0x00000011U)
876 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_TV_SVIDEO_BO_COMPOSITE   (0x00000012U)
877 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_TV_COMPONENT             (0x00000013U)
878 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_TV_SCART                 (0x00000014U)
879 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_TV_SCART_EIAJ4120        (0x00000014U)
880 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_TV_EIAJ4120              (0x00000017U)
881 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_PC_POD_HDTV_YPRPB        (0x00000018U)
882 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_PC_POD_SVIDEO            (0x00000019U)
883 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_PC_POD_COMPOSITE         (0x0000001AU)
884 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DVI_I_TV_SVIDEO          (0x00000020U)
885 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DVI_I_TV_COMPOSITE       (0x00000021U)
886 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DVI_I_TV_SV_BO_COMPOSITE (0x00000022U)
887 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DVI_I                    (0x00000030U)
888 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DVI_D                    (0x00000031U)
889 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_ADC                      (0x00000032U)
890 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_LFH_DVI_I_1              (0x00000038U)
891 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_LFH_DVI_I_2              (0x00000039U)
892 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_LFH_SVIDEO               (0x0000003AU)
893 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_BNC                      (0x0000003CU)
894 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_LVDS_SPWG                (0x00000040U)
895 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_LVDS_OEM                 (0x00000041U)
896 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_LVDS_SPWG_DET            (0x00000042U)
897 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_LVDS_OEM_DET             (0x00000043U)
898 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_TVDS_OEM_ATT             (0x00000045U)
899 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_VGA_15_PIN_UNDOCKED      (0x00000050U)
900 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_VGA_15_PIN_DOCKED        (0x00000051U)
901 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DVI_I_UNDOCKED           (0x00000052U)
902 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DVI_I_DOCKED             (0x00000053U)
903 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DVI_D_UNDOCKED           (0x00000052U)
904 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DVI_D_DOCKED             (0x00000053U)
905 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DP_EXT                   (0x00000056U)
906 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DP_INT                   (0x00000057U)
907 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DP_EXT_UNDOCKED          (0x00000058U)
908 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_DP_EXT_DOCKED            (0x00000059U)
909 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_3PIN_DIN_STEREO          (0x00000060U)
910 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_HDMI_A                   (0x00000061U)
911 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_AUDIO_SPDIF              (0x00000062U)
912 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_HDMI_C_MINI              (0x00000063U)
913 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_LFH_DP_1                 (0x00000064U)
914 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_LFH_DP_2                 (0x00000065U)
915 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_TYPE_VIRTUAL_WFD              (0x00000070U)
916 
917 /* valid hotplug values */
918 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_HOTPLUG_A_SUPPORTED           (0x00000001U)
919 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_HOTPLUG_B_SUPPORTED           (0x00000002U)
920 
921 /*
922  * Nv0073_CTRL_CMD_SYSTEM_GET_CONNECTOR_TABLE
923  *
924  * This command can be used to retrieve display connector information.
925  *
926  *   subDeviceInstance
927  *     This parameter specifies the subdevice instance within the
928  *     NV04_DISPLAY_COMMON parent device to which the operation should be
929  *     directed.  This parameter must specify a value between zero and the
930  *     total number of subdevices within the parent device.  This parameter
931  *     should be set to zero for default behavior.
932  *   version
933  *     This parameter returns the version of the connector table.
934  *   platform
935  *     This parameter returns the type of platform of the associated subdevice.
936  *   connectorTableEntries
937  *     This parameter returns the number of valid entries in the connector
938  *     table.
939  *   connectorTable
940  *     This parameter returns the connector information in the form of an
941  *     array of NV0073_CTRL_SYSTEM_CONNECTOR_INFO structures.
942  *
943  * Possible status values returned are:
944  *   NV_OK
945  *   NV_ERR_INVALID_ARGUMENT
946  *
947  */
948 #define NV0073_CTRL_CMD_SYSTEM_GET_CONNECTOR_TABLE                      (0x730165U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_CONNECTOR_TABLE_PARAMS_MESSAGE_ID" */
949 
950 /* maximum number of connector table entries */
951 #define NV0073_CTRL_SYSTEM_GET_CONNECTOR_TABLE_MAX_ENTRIES              (16U)
952 
953 #define NV0073_CTRL_SYSTEM_GET_CONNECTOR_TABLE_PARAMS_MESSAGE_ID (0x65U)
954 
955 typedef struct NV0073_CTRL_SYSTEM_GET_CONNECTOR_TABLE_PARAMS {
956     NvU32                             subDeviceInstance;
957     NvU32                             version;
958     NvU32                             platform;
959     NvU32                             connectorTableEntries;
960     /*
961      * C form:
962      * NV0073_CTRL_SYSTEM_CONNECTOR_INFO connectorTable[NV0073_CTRL_SYSTEM_CONNECTOR_TABLE_MAX_ENTRIES];
963      */
964     NV0073_CTRL_SYSTEM_CONNECTOR_INFO connectorTable[NV0073_CTRL_SYSTEM_GET_CONNECTOR_TABLE_MAX_ENTRIES];
965 } NV0073_CTRL_SYSTEM_GET_CONNECTOR_TABLE_PARAMS;
966 
967 /* valid version values */
968 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_VERSION_30                     (0x00000030U)
969 
970 /* valid platform values */
971 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_PLATFORM_DEFAULT_ADD_IN_CARD   (0x00000000U)
972 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_PLATFORM_TWO_PLATE_ADD_IN_CARD (0x00000001U)
973 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_PLATFORM_MOBILE_ADD_IN_CARD    (0x00000008U)
974 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_PLATFORM_MXM_MODULE            (0x00000009U)
975 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_PLATFORM_MOBILE_BACK           (0x00000010U)
976 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_PLATFORM_MOBILE_BACK_LEFT      (0x00000011U)
977 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_PLATFORM_MOBILE_BACK_DOCK      (0x00000018U)
978 #define NV0073_CTRL_SYSTEM_CONNECTOR_INFO_PLATFORM_CRUSH_DEFAULT         (0x00000020U)
979 
980 /*
981  * NV0073_CTRL_CMD_SYSTEM_GET_BOOT_DISPLAYS
982  *
983  * This command returns a mask of boot display IDs.
984  *
985  *   subDeviceInstance
986  *     This parameter specifies the subdevice instance within the
987  *     NV04_DISPLAY_COMMON parent device to which the operation should be
988  *     directed.  This parameter must specify a value between zero and the
989  *     total number of subdevices within the parent device.  This parameter
990  *     should be set to zero for default behavior.
991  *   bootDisplayMask
992  *     This parameter returns the mask of boot display IDs.
993  *
994  * Possible status values returned are:
995  *    NV_OK
996  *    NV_ERR_INVALID_PARAM_STRUCT
997  */
998 #define NV0073_CTRL_CMD_SYSTEM_GET_BOOT_DISPLAYS                         (0x730166U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_BOOT_DISPLAYS_PARAMS_MESSAGE_ID" */
999 
1000 #define NV0073_CTRL_SYSTEM_GET_BOOT_DISPLAYS_PARAMS_MESSAGE_ID (0x66U)
1001 
1002 typedef struct NV0073_CTRL_SYSTEM_GET_BOOT_DISPLAYS_PARAMS {
1003     NvU32 subDeviceInstance;
1004     NvU32 bootDisplayMask;
1005 } NV0073_CTRL_SYSTEM_GET_BOOT_DISPLAYS_PARAMS;
1006 
1007 
1008 
1009 /*
1010  * NV0073_CTRL_CMD_SYSTEM_EXECUTE_ACPI_METHOD
1011  *
1012  * This command is used to execute general MXM ACPI methods.
1013  *
1014  * method
1015  *   This parameter identifies the MXM ACPI API to be invoked.
1016  *   Valid values for this parameter are:
1017  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_MXMI
1018  *       This value specifies that the MXMI API is to invoked.
1019  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_MXMS
1020  *       This value specifies that the MXMS API is to invoked.
1021  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_MXMX
1022  *       This value specifies that the MXMX API is to invoked.
1023  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_GPUON
1024  *       This value specifies that the Hybrid GPU ON API is to be invoked.
1025  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_GPUOFF
1026  *       This value specifies that the Hybrid GPU OFF API is to be invoked.
1027  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_GPUSTA
1028  *       This value specifies that the Hybrid GPU STA API is to be invoked.
1029  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_MXDS
1030  *       This value specifies that the Hybrid GPU MXDS API is to be invoked.
1031  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NVHG_MXMX
1032  *       This value specifies that the Hybrid GPU MXMX API is to be invoked.
1033  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DOS
1034  *       This value specifies that the Hybrid GPU DOS API is to be invoked.
1035  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_ROM
1036  *       This value specifies that the Hybrid GPU ROM API is to be invoked.
1037  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DOD
1038  *       This value specifies that the Hybrid GPU DOD API is to be invoked.
1039  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_SUPPORT
1040  *       This value specifies that the Hybrid GPU DSM subfunction SUPPORT
1041  *       API is to be invoked.
1042  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HYBRIDCAPS
1043  *       This value specifies that the Hybrid GPU DSM subfunction SUPPORT
1044  *       API is to be invoked.
1045  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_POLICYSELECT
1046  *       This value specifies that the Hybrid GPU DSM subfunction POLICYSELECT
1047  *       API is to be invoked.
1048  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_POWERCONTROL
1049  *       This value specifies that the Hybrid GPU DSM subfunction POWERCONTROL
1050  *       API is to be invoked.
1051  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_PLATPOLICY
1052  *       This value specifies that the Hybrid GPU DSM subfunction PLATPOLICY
1053  *       API is to be invoked.
1054  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_DISPLAYSTATUS
1055  *       This value specifies that the Hybrid GPU DSM subfunction DISPLAYSTATUS
1056  *       API is to be invoked.
1057  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MDTL
1058  *       This value specifies that the Hybrid GPU DSM subfunction MDTL
1059  *       API is to be invoked.
1060  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCSMBLIST
1061  *       This value specifies that the Hybrid GPU DSM subfunction HCSMBLIST
1062  *       API is to be invoked.
1063  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCSMBADDR
1064  *       This value specifies that the Hybrid GPU DSM subfunction HCSMBADDR
1065  *       API is to be invoked.
1066  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCREADBYTE
1067  *       This value specifies that the Hybrid GPU DSM subfunction HCREADBYTE
1068  *       API is to be invoked.
1069  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCSENDBYTE
1070  *       This value specifies that the Hybrid GPU DSM subfunction HCSENDBYTES
1071  *       API is to be invoked.
1072  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCGETSTATUS
1073  *       This value specifies that the Hybrid GPU DSM subfunction HCGETSTATUS
1074  *       API is to be invoked.
1075  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCTRIGDDC
1076  *       This value specifies that the Hybrid GPU DSM subfunction HCTRIGDDC
1077  *       API is to be invoked.
1078  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCGETDDC
1079  *       This value specifies that the Hybrid GPU DSM subfunction HCGETDDC
1080  *       API is to be invoked.
1081  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DCS
1082  *       This value specifies that the Hybrid GPU DCS API is to be invoked.
1083  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXSS
1084  *       This value specifies that the DSM MXM subfunction MXSS
1085  *       API is to be invoked.
1086  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXMI
1087  *       This value specifies that the DSM MXM subfunction MXMI
1088  *       API is to be invoked.
1089  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXMS
1090  *       This value specifies that the DSM MXM subfunction MXMS
1091  *       API is to be invoked.
1092  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXPP
1093  *       This value specifies that the DSM MXM subfunction MXPP
1094  *       API is to be invoked.
1095  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXDP
1096  *       This value specifies that the DSM MXM subfunction MXDP
1097  *       API is to be invoked.
1098  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MDTL
1099  *       This value specifies that the DSM MXM subfunction MDTL
1100  *       API is to be invoked.
1101  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXCB
1102  *       This value specifies that the DSM MXM subfunction MXCB
1103  *       API is to be invoked.
1104  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_CTL_REMAPFUNC
1105  *       This value specifies the DSM generic remapping should return function
1106  *       and subfunction when this API is to be invoked.
1107  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_HYBRIDCAPS
1108  *       This value specifies that the generic DSM subfunction HYBRIDCAPS
1109  *       API is to be invoked.
1110  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_POLICYSELECT
1111  *       This value specifies that the generic DSM subfunction POLICYSELECT
1112  *       API is to be invoked.
1113  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_PLATPOLICY
1114  *       This value specifies that the generic DSM subfunction PLATPOLICY
1115  *       API is to be invoked.
1116  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_DISPLAYSTATUS
1117  *       This value specifies that the generic DSM subfunction DISPLAYSTATUS
1118  *       API is to be invoked.
1119  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_MDTL
1120  *       This value specifies that the generic DSM subfunction MDTL
1121  *       API is to be invoked.
1122  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_GETOBJBYTYPE
1123  *       This value specifies that the generic DSM subfunction GETOBJBYTYPE
1124  *       API is to be invoked.
1125  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_GETALLOBJS
1126  *       This value specifies that the generic DSM subfunction GETALLOBJS
1127  *       API is to be invoked.
1128  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_GETEVENTLIST
1129  *       This value specifies that the generic DSM subfunction GETEVENTLIST
1130  *       API is to be invoked.
1131  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_GETBACKLIGHT
1132  *       This value specifies that the generic DSM subfunction GETBACKLIGHT
1133  *       API is to be invoked.
1134  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_CTL_TESTSUBFUNCENABLED
1135  *       This value specifies the testIfDsmSubFunctionEnabled test should
1136  *       be done for the func/subfunction when this API is to be invoked.
1137  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_CTL_GETSUPPORTEDFUNC
1138  *       This value specifies the list of supported generic dsm functions
1139  *       should be returned.
1140  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NVOP_OPTIMUSCAPS
1141  *       This value specifies that the DSM NVOP subfunction OPTIMUSCAPS
1142  *       API is to be invoked.
1143  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NVOP_OPTIMUSFLAG
1144  *       This value specifies that the DSM NVOP subfunction OPTIMUSFLAG
1145  *       API is to be invoked. This API will set a Flag in sbios to Indicate
1146  *       that HD Audio Controller is disable/Enabled from GPU Config space.
1147  *       This flag will be used by sbios to restore Audio state after resuming
1148  *       from s3/s4.
1149  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_WMMX_NVOP_GPUON
1150  *      This value specifies that the WMMX (WMI-ACPI) GPON methods has to be invoked
1151  *      this call should happen below DPC level from any client.
1152  * inData
1153  *   This parameter specifies the method-specific input buffer.  Data is
1154  *   passed to the specified API using this buffer.  For display related
1155  *   APIs the associated display mask can be found at a byte offset within
1156  *   the inData buffer using the following method-specific values:
1157  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_MXMX_DISP_MASK_OFFSET
1158  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_MXDS_DISP_MASK_OFFSET
1159  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NVHG_MXMX_DISP_MASK_OFFSET
1160  *     NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DOS_DISP_MASK_OFFSET
1161  * inDataSize
1162  *   This parameter specifies the size of the inData buffer in bytes.
1163  * outStatus
1164  *   This parameter returns the status code from the associated ACPI call.
1165  * outData
1166  *   This parameter specifies the method-specific output buffer.  Data
1167  *   is returned by the specified API using this buffer.
1168  * outDataSize
1169  *   This parameter specifies the size of the outData buffer in bytes.
1170  *
1171  * Possible status values returned are:
1172  *   NV_OK
1173  *   NV_ERR_INVALID_PARAM_STRUCT
1174  *   NV_ERR_INVALID_ARGUMENT
1175  */
1176 
1177 #define NV0073_CTRL_CMD_SYSTEM_EXECUTE_ACPI_METHOD (0x730168U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_PARAMS_MESSAGE_ID" */
1178 
1179 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_PARAMS_MESSAGE_ID (0x68U)
1180 
1181 typedef struct NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_PARAMS {
1182     NvU32 method;
1183     NV_DECLARE_ALIGNED(NvP64 inData, 8);
1184     NvU16 inDataSize;
1185     NvU32 outStatus;
1186     NV_DECLARE_ALIGNED(NvP64 outData, 8);
1187     NvU16 outDataSize;
1188 } NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_PARAMS;
1189 
1190 
1191 /* valid method parameter values */
1192 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_MXMX                               (0x00000002U)
1193 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_MXMX_DISP_MASK_OFFSET              (0x00000001U)
1194 
1195 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_GPUON                              (0x00000003U)
1196 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_GPUOFF                             (0x00000004U)
1197 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_GPUSTA                             (0x00000005U)
1198 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_MXDS                               (0x00000006U)
1199 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NVHG_MXMX                          (0x00000007U)
1200 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DOS                                (0x00000008U)
1201 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_ROM                                (0x00000009U)
1202 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DOD                                (0x0000000aU)
1203 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_SUPPORT                        (0x0000000bU)
1204 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HYBRIDCAPS                     (0x0000000cU)
1205 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_POLICYSELECT                   (0x0000000dU)
1206 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_POWERCONTROL                   (0x0000000eU)
1207 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_PLATPOLICY                     (0x0000000fU)
1208 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_DISPLAYSTATUS                  (0x00000010U)
1209 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MDTL                           (0x00000011U)
1210 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCSMBLIST                      (0x00000012U)
1211 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCSMBADDR                      (0x00000013U)
1212 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCREADBYTE                     (0x00000014U)
1213 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCSENDBYTE                     (0x00000015U)
1214 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCGETSTATUS                    (0x00000016U)
1215 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCTRIGDDC                      (0x00000017U)
1216 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_HCGETDDC                       (0x00000018U)
1217 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DCS                                (0x00000019U)
1218 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXSS                       (0x0000001aU)
1219 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXMI                       (0x0000001bU)
1220 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXMS                       (0x0000001cU)
1221 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXPP                       (0x0000001dU)
1222 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXDP                       (0x0000001eU)
1223 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MDTL                       (0x0000001fU)
1224 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_MXCB                       (0x00000020U)
1225 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_MXM_GETEVENTLIST               (0x00000021U)
1226 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GETMEMTABLE                    (0x00000022U)
1227 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GETMEMCFG                      (0x00000023U)
1228 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GETOBJBYTYPE                   (0x00000024U)
1229 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GETALLOBJS                     (0x00000025U)
1230 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_CTL_REMAPFUNC          (0x00000026U)
1231 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_DISPLAYSTATUS          (0x0000002aU)
1232 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_MDTL                   (0x0000002bU)
1233 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_GETOBJBYTYPE           (0x0000002cU)
1234 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_GETALLOBJS             (0x0000002dU)
1235 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_GETEVENTLIST           (0x0000002eU)
1236 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_GETBACKLIGHT           (0x0000002fU)
1237 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_CTL_TESTSUBFUNCENABLED (0x00000030U)
1238 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_CTL_GETSUPPORTEDFUNC   (0x00000031U)
1239 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NVOP_OPTIMUSCAPS               (0x00000032U)
1240 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_WMMX_NVOP_GPUON                    (0x00000033U)
1241 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NVOP_OPTIMUSFLAG               (0x00000034U)
1242 
1243 
1244 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_GETCALLBACKS           (0x00000036U)
1245 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NBCI_SUPPORTFUNCS              (0x00000037U)
1246 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NBCI_PLATCAPS                  (0x00000038U)
1247 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NBCI_PLATPOLICY                (0x00000039U)
1248 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_GENERIC_MSTL                   (0x0000003aU)
1249 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DSM_NVGPS_FUNC_SUPPORT             (0x0000003bU)
1250 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NBCI_MXDS                          (0x0000003cU)
1251 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NBCI_MXDM                          (0x0000003dU)
1252 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NBCI_MXID                          (0x0000003eU)
1253 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NBCI_LRST                          (0x0000003fU)
1254 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DDC_EDID                           (0x00000040U)
1255 
1256 /* valid input buffer offset values */
1257 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_MXDS_DISP_MASK_OFFSET              (0x00000004U)
1258 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NVHG_MXMX_DISP_MASK_OFFSET         (0x00000004U)
1259 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DOS_DISP_MASK_OFFSET               (0x00000004U)
1260 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NBCI_MXDS_DISP_MASK_OFFSET         (0x00000004U)
1261 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NBCI_MXDM_DISP_MASK_OFFSET         (0x00000004U)
1262 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NBCI_MXID_DISP_MASK_OFFSET         (0x00000004U)
1263 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_NBCI_LRST_DISP_MASK_OFFSET         (0x00000004U)
1264 #define NV0073_CTRL_SYSTEM_EXECUTE_ACPI_METHOD_DDC_EDID_DISP_MASK_OFFSET          (0x00000004U)
1265 
1266 
1267 
1268 /*
1269 * NV0073_CTRL_SYSTEM_VRR_DISPLAY_INFO_PARAMS
1270 *
1271 * This command is used to update information about VRR capable monitors
1272 *   subDeviceInstance
1273 *     This parameter specifies the subdevice instance within the
1274 *     NV04_DISPLAY_COMMON parent device to which the operation should be
1275 *     directed.This parameter must specify a value between zero and the
1276 *     total number of subdevices within the parent device.This parameter
1277 *     should be set to zero for default behavior.
1278 *
1279 *   displayId
1280 *     DisplayId of the panel for which client wants to add or remove from VRR
1281 *     capable monitor list
1282 *
1283 *   bAddition
1284 *     When set to NV_TRUE, signifies that the vrr monitor is to be added.
1285 *     When set to NV_FALSE, signifies that the vrr monitor is to be removed.
1286 *
1287 */
1288 #define NV0073_CTRL_CMD_SYSTEM_VRR_DISPLAY_INFO (0x730185U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_VRR_DISPLAY_INFO_PARAMS_MESSAGE_ID" */
1289 
1290 #define NV0073_CTRL_SYSTEM_VRR_DISPLAY_INFO_PARAMS_MESSAGE_ID (0x85U)
1291 
1292 typedef struct NV0073_CTRL_SYSTEM_VRR_DISPLAY_INFO_PARAMS {
1293     NvU32  subDeviceInstance;
1294     NvU32  displayId;
1295     NvBool bAddition;
1296 } NV0073_CTRL_SYSTEM_VRR_DISPLAY_INFO_PARAMS;
1297 
1298 /*
1299  * NV0073_CTRL_CMD_SYSTEM_GET_HOTPLUG_UNPLUG_STATE
1300  *
1301  * This command can be used to retrieve hotplug and unplug state
1302  * information that are currently recorded by the RM. This information is
1303  * used by the client to determine which displays to detect after a
1304  * hotplug event occurs. Or if  the client knows that this device generates
1305  * a hot plug/unplug signal on all connectors, then this can be used to call
1306  * displays from detection. The displayIds on which hotplug/unplug has
1307  * happened will be reported only ONCE to the client. That is if the call
1308  * is done multiple times for the same event update, then for consequent
1309  * calls the display mask will be reported as 0.
1310  *
1311  *   subDeviceInstance
1312  *     This parameter specifies the subdevice instance within the
1313  *     NV04_DISPLAY_COMMON parent device to which the operation should be
1314  *     directed.  This parameter must specify a value between zero and the
1315  *     total number of subdevices within the parent device.  This parameter
1316  *     should be set to zero for default behavior.
1317  *   flags
1318  *     This parameter specifies optional flags to be used while retrieving
1319  *     the hotplug state information.
1320  *     Here are the current defined fields:
1321  *       NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_FLAGS_LID
1322  *         A client uses this field to determine the lid state.
1323  *         Possible values are:
1324  *       NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_FLAGS_LID_OPEN
1325  *              The lid is open.
1326  *       NV0073_CTRL_SYSTEM_GET_HOTPLUG_STATE_FLAGS_LID_CLOSED
1327  *              The lid is closed.  The client should remove devices a
1328  *              reported inside the
1329  *              NV0073_CTRL_SYSTEM_GET_CONNECT_POLICY_PARAMS.lidClosedMask.
1330  *   hotPlugMask
1331  *     This display mask specifies an NV0073_DISPLAY_MASK value describing
1332  *     the set of displays that have seen a hotplug.
1333  *   hotUnplugMask
1334  *     This display mask specifies an NV0073_DISPLAY_MASK value describing
1335  *     the set of displays that have seen a hot unplug
1336  *
1337  * Possible status values returned are:
1338  *   NV_OK
1339  *   NV_ERR_INVALID_PARAM_STRUCT
1340  *   NV_ERR_INVALID_ARGUMENT
1341  */
1342 
1343 #define NV0073_CTRL_CMD_SYSTEM_GET_HOTPLUG_UNPLUG_STATE (0x73017bU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_HOTPLUG_UNPLUG_STATE_PARAMS_MESSAGE_ID" */
1344 
1345 #define NV0073_CTRL_SYSTEM_GET_HOTPLUG_UNPLUG_STATE_PARAMS_MESSAGE_ID (0x7BU)
1346 
1347 typedef struct NV0073_CTRL_SYSTEM_GET_HOTPLUG_UNPLUG_STATE_PARAMS {
1348     NvU32 subDeviceInstance;
1349     NvU32 flags;
1350     NvU32 hotPlugMask;
1351     NvU32 hotUnplugMask;
1352 } NV0073_CTRL_SYSTEM_GET_HOTPLUG_UNPLUG_STATE_PARAMS;
1353 
1354 /* valid get hoplug state flags */
1355 #define NV0073_CTRL_SYSTEM_GET_HOTPLUG_UNPLUG_STATE_FLAGS_LID                   0:0
1356 #define NV0073_CTRL_SYSTEM_GET_HOTPLUG_UNPLUG_STATE_FLAGS_LID_OPEN   (0x00000000U)
1357 #define NV0073_CTRL_SYSTEM_GET_HOTPLUG_UNPLUG_STATE_FLAGS_LID_CLOSED (0x00000001U)
1358 
1359 /*
1360  * NV0073_CTRL_CMD_SYSTEM_CLEAR_ELV_BLOCK
1361  *
1362  * This command instructs the RM to explicitly clear any
1363  * ELV block.  Clients should call this before attempting core-channel
1364  * updates when in VRR one-shot mode.  ELV block mode will be
1365  * properly restored to its appropriate setting based on the stall-lock
1366  * in Supervisor3 after the core channel update
1367  *
1368  *   subDeviceInstance
1369  *     This parameter specifies the subdevice instance within the
1370  *     NV04_DISPLAY_COMMON parent device to which the operation should be
1371  *     directed.  This parameter must specify a value between zero and the
1372  *     total number of subdevices within the parent device.  This parameter
1373  *     should be set to zero for default behavior.
1374  *
1375  *   displayId
1376  *     The public ID of the Output Display which is to be used for VRR.
1377  *
1378  * Possible status values returned are:
1379  *    NV_OK
1380  *    NV_ERR_INVALID_ARGUMENT
1381  *    NV_ERR_INVALID_STATE
1382  */
1383 
1384 #define NV0073_CTRL_CMD_SYSTEM_CLEAR_ELV_BLOCK                       (0x73017dU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_CLEAR_ELV_BLOCK_PARAMS_MESSAGE_ID" */
1385 
1386 #define NV0073_CTRL_SYSTEM_CLEAR_ELV_BLOCK_PARAMS_MESSAGE_ID (0x7DU)
1387 
1388 typedef struct NV0073_CTRL_SYSTEM_CLEAR_ELV_BLOCK_PARAMS {
1389     NvU32 subDeviceInstance;
1390     NvU32 displayId;
1391 } NV0073_CTRL_SYSTEM_CLEAR_ELV_BLOCK_PARAMS;
1392 
1393 /*
1394  * NV0073_CTRL_CMD_SYSTEM_ARM_LIGHTWEIGHT_SUPERVISOR
1395  *
1396  * This command arms the display modeset supervisor to operate in
1397  * a lightweight mode.  By calling this, the client is implicitly
1398  * promising not to make any changes in the next modeset that require
1399  * the full supervisor.  After SV3, the LWSV will disarm and any subsequent
1400  * modesets will revert to full supervisors.  This must be called separately
1401  * for every display that will be part of the modeset.
1402  * It is recommended that the client explicitly disarm the lightweight
1403  * supervisor after every modeset as null modesets will not trigger the
1404  * supervisor interrupts and the RM will not be able to disarm automatically
1405  *
1406  *   subDeviceInstance
1407  *     This parameter specifies the subdevice instance within the
1408  *     NV04_DISPLAY_COMMON parent device to which the operation should be
1409  *     directed.  This parameter must specify a value between zero and the
1410  *     total number of subdevices within the parent device.  This parameter
1411  *     should be set to zero for default behavior.
1412  *
1413  *   displayId
1414  *     The public ID of the Output Display which is to be used for VRR.
1415  *
1416  *   bArmLWSV
1417  *     If this is set to NV_TRUE, the RM will arm the lightweight supervisor
1418  *     for the next modeset.
1419  *     If this is set to NV_FALSE, the RM will disarm the lightweight supervisor
1420  *
1421  *   bVrrState
1422  *     VRR state to be changed.
1423  *
1424  *   vActive
1425  *      GPU-SRC vertical active value
1426  *
1427  *   vfp
1428  *      GPU-SRC vertical front porch
1429  *
1430  * Possible status values returned are:
1431  *    NV_OK
1432  *    NV_ERR_INVALID_ARGUMENT
1433  *    NV_ERR_INVALID_STATE
1434  */
1435 
1436 #define NV0073_CTRL_CMD_SYSTEM_ARM_LIGHTWEIGHT_SUPERVISOR (0x73017eU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_ARM_LIGHTWEIGHT_SUPERVISOR_PARAMS_MESSAGE_ID" */
1437 
1438 #define NV0073_CTRL_SYSTEM_ARM_LIGHTWEIGHT_SUPERVISOR_PARAMS_MESSAGE_ID (0x7EU)
1439 
1440 typedef struct NV0073_CTRL_SYSTEM_ARM_LIGHTWEIGHT_SUPERVISOR_PARAMS {
1441     NvU32  subDeviceInstance;
1442     NvU32  displayId;
1443     NvBool bArmLWSV;
1444     NvBool bVrrState;
1445     NvU32  vActive;
1446     NvU32  vfp;
1447 } NV0073_CTRL_SYSTEM_ARM_LIGHTWEIGHT_SUPERVISOR_PARAMS;
1448 
1449 
1450 
1451 /*
1452 * NV0073_CTRL_SYSTEM_CONFIG_VRR_PSTATE_SWITCH_PARAMS
1453 *
1454 * This command is used to configure pstate switch parameters on VRR monitors
1455 *   subDeviceInstance
1456 *     This parameter specifies the subdevice instance within the
1457 *     NV04_DISPLAY_COMMON parent device to which the operation should be
1458 *     directed.This parameter must specify a value between zero and the
1459 *     total number of subdevices within the parent device.This parameter
1460 *     should be set to zero for default behavior.
1461 *
1462 *   displayId
1463 *     DisplayId of the monitor being vrr configured
1464 *
1465 *   bVrrState
1466 *     When set to NV_TRUE, signifies that the vrr is about to become active.
1467 *     When set to NV_FALSE, signifies that the vrr is about to become suspended.
1468 *
1469 *   bVrrDirty
1470 *     When set to NV_TRUE, indicates that vrr configuration has been changed
1471 *     When set to NV_FALSE, this will indicate transitions from One shot mode to
1472 *     Continuous mode and vice versa
1473 *
1474 *   bVrrEnabled
1475 *     When set to NV_TRUE, indicates that vrr has been enabled, i.e. vBp extended by 2 lines
1476 *
1477 *   maxVblankExtension
1478 *     When VRR is enabled, this is the maximum amount of lines that the vblank can be extended.
1479 *     Only updated when bVrrDirty = true
1480 *
1481 *   internalVRRHeadVblankStretch
1482 *     When VRR is enabled, this is the maximum amount of lines that the vblank can be extended.
1483 *     On NVSR and DD panels . Only updated when bVrrDirty = true
1484 *
1485 *   minVblankExtension
1486 *     When VRR is enabled, this is the minimum amount of lines that should be present in the Vblank. The purpose is to cap the maximum refresh (currently only for HDMI 2.1 VRR compliance)
1487 */
1488 #define NV0073_CTRL_CMD_SYSTEM_CONFIG_VRR_PSTATE_SWITCH (0x730184U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_CONFIG_VRR_PSTATE_SWITCH_PARAMS_MESSAGE_ID" */
1489 
1490 #define NV0073_CTRL_SYSTEM_CONFIG_VRR_PSTATE_SWITCH_PARAMS_MESSAGE_ID (0x84U)
1491 
1492 typedef struct NV0073_CTRL_SYSTEM_CONFIG_VRR_PSTATE_SWITCH_PARAMS {
1493     NvU32  subDeviceInstance;
1494     NvU32  displayId;
1495     NvBool bVrrState;
1496     NvBool bVrrDirty;
1497     NvBool bVrrEnabled;
1498     NvU32  maxVblankExtension;
1499     NvU32  internalVRRHeadVblankStretch;
1500     NvU32  minVblankExtension;
1501 } NV0073_CTRL_SYSTEM_CONFIG_VRR_PSTATE_SWITCH_PARAMS;
1502 
1503 
1504 
1505 /*
1506  * NV0073_CTRL_CMD_SYSTEM_QUERY_DISPLAY_IDS_WITH_MUX
1507  *
1508  * This command is used to query the display mask of all displays
1509  * that support dynamic display MUX.
1510  *
1511  *   subDeviceInstance
1512  *     This parameter specifies the subdevice instance within the
1513  *     NV04_DISPLAY_COMMON parent device to which the operation should be
1514  *     directed.
1515  *   displayMask (out)
1516  *     Mask of all displays that support dynamic display MUX
1517  *
1518  * Possible status values returned are:
1519  *   NV_OK
1520  *   NV_ERR_INVALID_PARAM_STRUCT
1521  *   NV_ERR_INVALID_ARGUMENT
1522  *   NV_ERR_NOT_SUPPORTED
1523  */
1524 
1525 #define NV0073_CTRL_CMD_SYSTEM_QUERY_DISPLAY_IDS_WITH_MUX (0x730190U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_CMD_SYSTEM_QUERY_DISPLAY_IDS_WITH_MUX_PARAMS_MESSAGE_ID" */
1526 
1527 #define NV0073_CTRL_CMD_SYSTEM_QUERY_DISPLAY_IDS_WITH_MUX_PARAMS_MESSAGE_ID (0x90U)
1528 
1529 typedef struct NV0073_CTRL_CMD_SYSTEM_QUERY_DISPLAY_IDS_WITH_MUX_PARAMS {
1530     NvU32 subDeviceInstance;
1531     NvU32 muxDisplayMask;
1532 } NV0073_CTRL_CMD_SYSTEM_QUERY_DISPLAY_IDS_WITH_MUX_PARAMS;
1533 
1534 
1535 
1536 /*
1537  * NV0073_CTRL_CMD_SYSTEM_ALLOCATE_DISPLAY_BANDWIDTH
1538  *
1539  * This command allocates a specified amount of ISO memory bandwidth for
1540  * display.  If the requested amount of bandwidth cannot be allocated (either
1541  * because it exceeds the total bandwidth available to the system, or because
1542  * too much bandwidth is already allocated to other clients), the call will
1543  * fail and NV_ERR_INSUFFICIENT_RESOURCES will be returned.
1544  *
1545  * If bandwidth has already been allocated via a prior call, and a new
1546  * allocation is requested, the new allocation will replace the old one.  (If
1547  * the new allocation fails, the old allocation remains in effect.)
1548  *
1549  *   subDeviceInstance
1550  *     This parameter specifies the subdevice instance within the
1551  *     NV04_DISPLAY_COMMON parent device to which the operation should be
1552  *     directed.
1553  *   averageBandwidthKBPS
1554  *     This parameter specifies the amount of ISO memory bandwidth requested.
1555  *   floorBandwidthKBPS
1556  *     This parameter specifies the minimum required (i.e., floor) dramclk
1557  *     frequency, multiplied by the width of the pipe over which the display
1558  *     data will travel.  (It is understood that the bandwidth calculated by
1559  *     multiplying the clock frequency by the pipe width will not be
1560  *     realistically achievable, due to overhead in the memory subsystem.  The
1561  *     API will not actually use the bandwidth value, except to reverse the
1562  *     calculation to get the required dramclk frequency.)
1563  *
1564  * Possible status values returned are:
1565  *   NV_OK
1566  *   NV_ERR_INSUFFICIENT_RESOURCES
1567  *   NV_ERR_NOT_SUPPORTED
1568  *   NV_ERR_GENERIC
1569  */
1570 
1571 #define NV0073_CTRL_CMD_SYSTEM_ALLOCATE_DISPLAY_BANDWIDTH (0x730196U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_ALLOCATE_DISPLAY_BANDWIDTH_PARAMS_MESSAGE_ID" */
1572 
1573 #define NV0073_CTRL_SYSTEM_ALLOCATE_DISPLAY_BANDWIDTH_PARAMS_MESSAGE_ID (0x96U)
1574 
1575 typedef struct NV0073_CTRL_SYSTEM_ALLOCATE_DISPLAY_BANDWIDTH_PARAMS {
1576     NvU32 subDeviceInstance;
1577     NvU32 averageBandwidthKBPS;
1578     NvU32 floorBandwidthKBPS;
1579 } NV0073_CTRL_SYSTEM_ALLOCATE_DISPLAY_BANDWIDTH_PARAMS;
1580 
1581 /*
1582  * NV0073_CTRL_SYSTEM_HOTPLUG_EVENT_CONFIG_PARAMS
1583  *
1584  * This structure represents the hotplug event config control parameters.
1585  *
1586  *   subDeviceInstance
1587  *     This parameter should specify the subdevice instance within the
1588  *     NV04_DISPLAY_COMMON parent device to which the operation should be
1589  *     directed.
1590  *
1591  *   deviceMapFilter
1592  *     This parameter returns (in GET) or should specify (in SET) a device map
1593  *     indicating device(s) to sense.
1594  *
1595  *   hotPluginSense
1596  *     This parameter returns (in GET) or should specify (in SET) a device map
1597  *     indicating device(s) plugged in that caused the most recent hotplug
1598  *     event.
1599  *
1600  *   hotUnplugSense
1601  *     This parameter returns (in GET) or should specify (in SET) a device map
1602  *     indicating device(s) un plugged that caused the most recent hotplug
1603  *     event.
1604  */
1605 
1606 typedef struct NV0073_CTRL_SYSTEM_HOTPLUG_EVENT_CONFIG_PARAMS {
1607     NvU32 subDeviceInstance;
1608     NvU32 deviceMapFilter;
1609     NvU32 hotPluginSense;
1610     NvU32 hotUnplugSense;
1611 } NV0073_CTRL_SYSTEM_HOTPLUG_EVENT_CONFIG_PARAMS;
1612 
1613 /*
1614  * NV0073_CTRL_CMD_SYSTEM_GET_HOTPLUG_EVENT_CONFIG
1615  *
1616  * This command fetches the hotplug event configuration.
1617  *
1618  * See @ref NV0073_CTRL_SYSTEM_HOTPLUG_EVENT_CONFIG_PARAMS for documentation on
1619  * the parameters.
1620  */
1621 
1622 #define NV0073_CTRL_CMD_SYSTEM_GET_HOTPLUG_EVENT_CONFIG (0x730197U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_GET_HOTPLUG_EVENT_CONFIG_PARAMS_MESSAGE_ID" */
1623 
1624 #define NV0073_CTRL_SYSTEM_GET_HOTPLUG_EVENT_CONFIG_PARAMS_MESSAGE_ID (0x97U)
1625 
1626 typedef NV0073_CTRL_SYSTEM_HOTPLUG_EVENT_CONFIG_PARAMS NV0073_CTRL_SYSTEM_GET_HOTPLUG_EVENT_CONFIG_PARAMS;
1627 
1628 /*
1629  * NV0073_CTRL_CMD_SYSTEM_SET_HOTPLUG_EVENT_CONFIG
1630  *
1631  * This command sets the hotplug event configuration.
1632  *
1633  * See @ref NV0073_CTRL_SYSTEM_HOTPLUG_EVENT_CONFIG_PARAMS for documentation on
1634  * the parameters.
1635  */
1636 
1637 #define NV0073_CTRL_CMD_SYSTEM_SET_HOTPLUG_EVENT_CONFIG (0x730198U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_SYSTEM_SET_HOTPLUG_EVENT_CONFIG_PARAMS_MESSAGE_ID" */
1638 
1639 #define NV0073_CTRL_SYSTEM_SET_HOTPLUG_EVENT_CONFIG_PARAMS_MESSAGE_ID (0x98U)
1640 
1641 typedef NV0073_CTRL_SYSTEM_HOTPLUG_EVENT_CONFIG_PARAMS NV0073_CTRL_SYSTEM_SET_HOTPLUG_EVENT_CONFIG_PARAMS;
1642 
1643 
1644 
1645 /*
1646 *  NV0073_CTRL_CMD_SYSTEM_RECORD_CHANNEL_REGS
1647 *
1648 *  This command is used to read Core channel, Cursor channel, Window channel, and Head register values and encode these values with ProtoDmp.
1649 *
1650 *  subDeviceInstance (in)
1651 *    This parameter specifies the subdevice instance within the
1652 *    NV04_DISPLAY_COMMON parent device to which the operation should be
1653 *    directed.
1654 *  headMask (in)
1655 *    Head mask representing which register values should be encoded
1656 *  windowMask (in)
1657 *    Window channel mask whose register values should be encoded
1658 *  bRecordCoreChannel (in)
1659 *    Indicates whether or not to encode core channel register values
1660 *  bRecordCursorChannel (in)
1661 *    Indicates whether or not to encode cursor channel register values
1662 *
1663 *  Possible status values returned are:
1664 *    NV_OK
1665 *    NV_ERR_INVALID_ARGUMENT
1666 *    NV_ERR_NOT_SUPPORTED
1667 */
1668 #define NV0073_CTRL_CMD_SYSTEM_RECORD_CHANNEL_REGS (0x73019bU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_CMD_SYSTEM_RECORD_CHANNEL_REGS_PARAMS_MESSAGE_ID" */
1669 
1670 #define NV0073_CTRL_CMD_SYSTEM_RECORD_CHANNEL_REGS_PARAMS_MESSAGE_ID (0x9BU)
1671 
1672 typedef struct NV0073_CTRL_CMD_SYSTEM_RECORD_CHANNEL_REGS_PARAMS {
1673     NvU32  subDeviceInstance;
1674     NvU32  headMask;
1675     NvU32  windowMask;
1676     NvBool bRecordCoreChannel;
1677     NvBool bRecordCursorChannel;
1678 } NV0073_CTRL_CMD_SYSTEM_RECORD_CHANNEL_REGS_PARAMS;
1679 
1680 /*
1681  * NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_I2C_SUPPORT
1682  *
1683  * This command is used to query the display mux status for the given
1684  * display device
1685  *
1686  *   subDeviceInstance (in)
1687  *     This parameter specifies the subdevice instance within the
1688  *     NV04_DISPLAY_COMMON parent device to which the operation should be
1689  *     directed.
1690  *
1691  * Possible status values returned are:
1692  *   NV_OK
1693  *   NV_ERR_INVALID_PARAM_STRUCT
1694  *   NV_ERR_INVALID_ARGUMENT
1695  *   NV_ERR_NOT_SUPPORTED
1696  */
1697 #define NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_I2C_SUPPORT (0x73019cU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_I2C_SUPPORT_PARAMS_MESSAGE_ID" */
1698 
1699 #define NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_I2C_SUPPORT_PARAMS_MESSAGE_ID (0x9CU)
1700 
1701 typedef struct NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_I2C_SUPPORT_PARAMS {
1702     NvU32  subDeviceInstance;
1703     NvBool bIsSidebandI2cSupported;
1704 } NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_I2C_SUPPORT_PARAMS;
1705 
1706 /*
1707  * NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_SR_SUPPORT
1708  *
1709  * This command is used to query if SIDEBAND SR can be used with the
1710  * given display device. If PSR API is supported on the system,
1711  * then sideband SR support is set to false.
1712  *
1713  *    subDeviceInstance (in)
1714  *        This parameter specifies the subdevice instance within the
1715  *        NV04_DISPLAY_COMMON parent device to which the operation
1716  *        should be directed.
1717  *    displayId (in)
1718  *        This parameter inputs the displayId of the active display. A value
1719  *        of zero indicates no display is active.
1720  *    bIsSidebandSrSupported
1721  *        If it is true, it means that sideband is supported and not PSR API.
1722  *
1723  * Possible status values returned are:
1724  *    NV_OK
1725  *    NV_ERR_INVALID_PARAM_STRUCT
1726  *    NV_ERR_INVALID_ARGUMENT
1727  *    NV_ERR_NOT_SUPPORTED
1728  */
1729 #define NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_SR_SUPPORT (0x73019dU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_SR_SUPPORT_PARAMS_MESSAGE_ID" */
1730 
1731 #define NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_SR_SUPPORT_PARAMS_MESSAGE_ID (0x9DU)
1732 
1733 typedef struct NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_SR_SUPPORT_PARAMS {
1734     NvU32  subDeviceInstance;
1735     NvU32  displayId;
1736     NvBool bIsSidebandSrSupported;
1737 } NV0073_CTRL_CMD_SYSTEM_CHECK_SIDEBAND_SR_SUPPORT_PARAMS;
1738 
1739 /*
1740  * NV0073_CTRL_CMD_SYSTEM_VRR_SET_RGLINE_ACTIVE
1741  *
1742  * This command is used by client like nvkms to set up the VRR specific
1743  * memory operation in RM such as mapping the client created shared memory
1744  * into RM and reserving a RGline for processing of self-refresh timeout
1745  * related calculations.
1746  *
1747  * Also the expectation is that the client which calls this command with parameter
1748  * bEnable = TRUE, should also call this command with bEnable = FALSE on the
1749  * same head when VRR needs to be disabled.
1750  *
1751  * Possible status values returned are:
1752  *    NV_OK
1753  *    NV_ERR_INVALID_ARGUMENT
1754  *    NV_ERR_OBJECT_NOT_FOUND
1755  *    NV_ERR_GENERIC
1756  */
1757 
1758 /*
1759  * This is the shared structure that will be used to communicate between
1760  * Physical RM and clients. As of now the access relies on single source of
1761  * truth operation, i.e. only Physical RM writes into the shared location
1762  * and client (nvkms) reads from the same location.
1763  *
1764  * "dataTimeStamp" field is added to capture the timestamp before and after
1765  * updating the flip delay related data fields(all fields except "timeout").
1766  * This timestamp will be used by clients to determine if the data got updated
1767  * in between by RM while clients were reading it.
1768  * As of now "timeout" field does not have such protection, as access to
1769  * this field is only in response to notification from RM.
1770  */
1771 typedef struct NV0073_CTRL_RM_VRR_SHARED_DATA {
1772     NvU32  expectedFrameNum;
1773     NvU32  timeout;
1774     NV_DECLARE_ALIGNED(NvU64 flipTimeStamp, 8);
1775     NvBool bCheckFlipTime;
1776     NvBool bFlipTimeAdjustment;
1777     NV_DECLARE_ALIGNED(NvU64 dataTimeStamp, 8);
1778 } NV0073_CTRL_RM_VRR_SHARED_DATA;
1779 
1780 #define NV0073_CTRL_CMD_SYSTEM_VRR_SET_RGLINE_ACTIVE (0x73019eU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_CMD_SYSTEM_VRR_SET_RGLINE_ACTIVE_PARAMS_MESSAGE_ID" */
1781 
1782 #define NV0073_CTRL_CMD_SYSTEM_VRR_SET_RGLINE_ACTIVE_PARAMS_MESSAGE_ID (0x9EU)
1783 
1784 typedef struct NV0073_CTRL_CMD_SYSTEM_VRR_SET_RGLINE_ACTIVE_PARAMS {
1785     NvU32    subDeviceInstance;
1786     NvBool   bEnable;
1787     NvU32    head;
1788     NvU32    height;
1789     NvU32    maxFrameTime;
1790     NvU32    minFrameTime;
1791     NvHandle hMemory;
1792 } NV0073_CTRL_CMD_SYSTEM_VRR_SET_RGLINE_ACTIVE_PARAMS;
1793 
1794 /*
1795  * NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL
1796  *
1797  * The VBlank Semaphore Control API ("VBlank Sem Control") allows clients to
1798  * register for a semaphore release to be performed on the specified memory.
1799  *
1800  * One or more clients may register a memory allocation + offset by specifying
1801  * _PARAMS::bEnabled = NV_TRUE and describing a video memory object with
1802  * _PARAMS::hMemory and an offset within that memory object
1803  * (_PARAMS::memoryOffset).  Until the hMemory + memoryOffset combination is
1804  * disabled by a subsequent call with bEnabled = NV_FALSE, during each vblank on
1805  * the specified head, RM will interpret the specified memory location as an
1806  * NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL_DATA data structure.
1807  *
1808  * _PARAMS::memoryOffset must be a multiple of 8, so that GPU semaphore releases
1809  * and GSP can write to 8-byte fields within
1810  * NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL_DATA with natural alignment.
1811  *
1812  * During vblank, the _CONTROL_DATA::control field will be read, and the
1813  * following pseudocode will be performed:
1814  *
1815  *   swapInterval      = DRF_VAL(data->flags)
1816  *   useMinimumGpuTime = DRV_VAL(data->flags)
1817  *
1818  *   if (data->requestCounter == prevRequestCounter)
1819  *       return
1820  *
1821  *   if (currentVblankCount < (prevVBlankCount + swapInterval))
1822  *       return
1823  *
1824  *   if (useMinimumGpuTime && (data->minimumGpuTime < currentGpuTime))
1825  *       return
1826  *
1827  *   data->vblankCount    = currentVblankCount
1828  *   data->releaseGpuTime = currentGpuTime
1829  *   data->semaphore      = data->requestCounter
1830  *
1831  *   prevRequestCounter   = data->requestCounter
1832  *   previousVblankCount  = currentVblankCount
1833  *
1834  * I.e., if the client-described conditions are met, the RM will write
1835  * _CONTROL_DATA::semaphore to the client-requested 'requestCounter' along with
1836  * several informational fields (vblankCount, releaseGpuTime).
1837  *
1838  * The intent is for clients to use semaphore releases to write:
1839  *
1840  *   _CONTROL_DATA::minimumGpuTime (if desired)
1841  *   _CONTROL_DATA::swapInterval
1842  *   _CONTROL_DATA::requestCounter
1843  *
1844  * and then perform a semaphore acquire on _CONTROL_DATA::semaphore >=
1845  * requestCounter (using the ACQ_GEQ semaphore operation).  This will block any
1846  * following methods in the client's channel (e.g., a blit) until the requested
1847  * conditions are met.  Note the ::requestCounter should be written last,
1848  * because the change in value of ::requestCounter is what causes RM, during a
1849  * vblank callback, to inspect the other fields.
1850  *
1851  * Additionally, clients should use the CPU (not semaphore releases in their
1852  * channel) to write the field _CONTROL_DATA::requestCounterAccel at the same
1853  * time that they enqueue the semaphore release to write to
1854  * _CONTROL_DATA::requestCounter.  ::requestCounterAccel will be used by resman
1855  * to "accelerate" the vblank sem control by copying the value from
1856  * ::requestCounterAccel to ::semaphore.  This will be done when the vblank sem
1857  * control is disabled, and when a client calls
1858  * NV0073_CTRL_CMD_SYSTEM_ACCEL_VBLANK_SEM_CONTROLS.  It is important for resman
1859  * to have access to the value in ::requestCounterAccel, and not just
1860  * ::requestCounter.  The latter is only the last value released so far by the
1861  * client's channel (further releases to ::requestCounter may still be inflight,
1862  * perhaps blocked on pending semaphore acquires).  The former should be the
1863  * most recent value enqueued in the channel.  This is also why it is important
1864  * for clients to acquire with ACQ_GEQ (greater-than-or-equal-to), rather than
1865  * just ACQUIRE.
1866  *
1867  * The same hMemory (with difference memoryOffsets) may be used by multiple
1868  * VBlank Sem Controls.
1869  */
1870 
1871 /* Fields within NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL_DATA::flags */
1872 #define NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL_SWAP_INTERVAL          15:0
1873 #define NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL_USE_MINIMUM_GPU_TIME   16:16
1874 
1875 typedef struct NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL_DATA {
1876     NvU32 requestCounterAccel;
1877     NvU32 requestCounter;
1878     NvU32 flags;
1879     NV_DECLARE_ALIGNED(NvU64 minimumGpuTime, 8);
1880 
1881     NvU32 semaphore;
1882     NV_DECLARE_ALIGNED(NvU64 vblankCount, 8);
1883     NV_DECLARE_ALIGNED(NvU64 releaseGpuTime, 8);
1884 } NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL_DATA;
1885 
1886 #define NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL (0x73019fU) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL_PARAMS_MESSAGE_ID" */
1887 
1888 #define NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL_PARAMS_MESSAGE_ID (0x9FU)
1889 
1890 typedef struct NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL_PARAMS {
1891     NvU32    subDeviceInstance;
1892     NvBool   bEnable;
1893     NvU32    head;
1894     NvHandle hMemory;
1895     NV_DECLARE_ALIGNED(NvU64 memoryOffset, 8);
1896 } NV0073_CTRL_CMD_SYSTEM_VBLANK_SEM_CONTROL_PARAMS;
1897 
1898 /*
1899  * Accelerate all VBlank Sem Controls on the specified heads.
1900  *
1901  * For all enabled vblank sem controls on the specified heads, immediate set
1902  * their pending ::semaphore fields to the value in their ::requestCounterAccel
1903  * field.
1904  */
1905 #define NV0073_CTRL_CMD_SYSTEM_ACCEL_VBLANK_SEM_CONTROLS (0x7301a2U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_CMD_SYSTEM_ACCEL_VBLANK_SEM_CONTROLS_PARAMS_MESSAGE_ID" */
1906 
1907 #define NV0073_CTRL_CMD_SYSTEM_ACCEL_VBLANK_SEM_CONTROLS_PARAMS_MESSAGE_ID (0xA2U)
1908 
1909 typedef struct NV0073_CTRL_CMD_SYSTEM_ACCEL_VBLANK_SEM_CONTROLS_PARAMS {
1910     NvU32 subDeviceInstance;
1911     NvU32 headMask;
1912 } NV0073_CTRL_CMD_SYSTEM_ACCEL_VBLANK_SEM_CONTROLS_PARAMS;
1913 
1914 /*
1915  * Maps the memory allocated in Kernel RM into Physical RM using the
1916  * memory descriptor information provided.
1917  *
1918  * Possible status values returned are:
1919  *    NV_OK
1920  *    NV_ERR_INVALID_ARGUMENT
1921  *    NV_ERR_NOT_SUPPORTED
1922  */
1923 
1924 typedef struct NV0073_CTRL_SHARED_MEMDESC_INFO {
1925     NV_DECLARE_ALIGNED(NvU64 base, 8);
1926     NV_DECLARE_ALIGNED(NvU64 size, 8);
1927     NV_DECLARE_ALIGNED(NvU64 alignment, 8);
1928     NvU32 addressSpace;
1929     NvU32 cpuCacheAttrib;
1930 } NV0073_CTRL_SHARED_MEMDESC_INFO;
1931 
1932 #define NV0073_CTRL_CMD_SYSTEM_MAP_SHARED_DATA (0x7301a3U) /* finn: Evaluated from "(FINN_NV04_DISPLAY_COMMON_SYSTEM_INTERFACE_ID << 8) | NV0073_CTRL_CMD_SYSTEM_MAP_SHARED_DATA_PARAMS_MESSAGE_ID" */
1933 
1934 #define NV0073_CTRL_CMD_SYSTEM_MAP_SHARED_DATA_PARAMS_MESSAGE_ID (0xA3U)
1935 
1936 typedef struct NV0073_CTRL_CMD_SYSTEM_MAP_SHARED_DATA_PARAMS {
1937     NV_DECLARE_ALIGNED(NV0073_CTRL_SHARED_MEMDESC_INFO memDescInfo, 8);
1938     NvU32  subDeviceInstance;
1939     NvBool bMap;
1940 } NV0073_CTRL_CMD_SYSTEM_MAP_SHARED_DATA_PARAMS;
1941 
1942 /* _ctrl0073system_h_ */
1943 
1944