/*
 * Copyright (c) 2010 NVIDIA, Corporation
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */

#ifndef __NVCTRL_H
#define __NVCTRL_H

#include <stdint.h>

/**************************************************************************/

/*
 * Attribute Targets
 *
 * Targets define attribute groups.  For example, some attributes are only
 * valid to set on a GPU, others are only valid when talking about an
 * X Screen.  Target types are then what is used to identify the target
 * group of the attribute you wish to set/query.
 *
 * Here are the supported target types:
 */

#define NV_CTRL_TARGET_TYPE_X_SCREEN 0
#define NV_CTRL_TARGET_TYPE_GPU 1
#define NV_CTRL_TARGET_TYPE_FRAMELOCK 2
#define NV_CTRL_TARGET_TYPE_VCSC 3 /* Visual Computing System */
#define NV_CTRL_TARGET_TYPE_GVI 4
#define NV_CTRL_TARGET_TYPE_COOLER 5 /* e.g., fan */
#define NV_CTRL_TARGET_TYPE_THERMAL_SENSOR 6
#define NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER 7
#define NV_CTRL_TARGET_TYPE_DISPLAY 8

/**************************************************************************/

/*
 * Attributes
 *
 * Some attributes may only be read; some may require a display_mask
 * argument and others may be valid only for specific target types.
 * This information is encoded in the "permission" comment after each
 * attribute #define, and can be queried at run time with
 * XNVCTRLQueryValidAttributeValues() and/or
 * XNVCTRLQueryValidTargetAttributeValues()
 *
 * Key to Integer Attribute "Permissions":
 *
 * R: The attribute is readable (in general, all attributes will be
 *    readable)
 *
 * W: The attribute is writable (attributes may not be writable for
 *    various reasons: they represent static system information, they
 *    can only be changed by changing an XF86Config option, etc).
 *
 * D: The attribute requires the display mask argument.  The
 *    attributes NV_CTRL_CONNECTED_DISPLAYS and NV_CTRL_ENABLED_DISPLAYS
 *    will be a bitmask of what display devices are connected and what
 *    display devices are enabled for use in X, respectively.  Each bit
 *    in the bitmask represents a display device; it is these bits which
 *    should be used as the display_mask when dealing with attributes
 *    designated with "D" below.  For attributes that do not require the
 *    display mask, the argument is ignored.
 *
 *    Alternatively, NV-CONTROL versions 1.27 and greater allow these
 *    attributes to be accessed via display target types, in which case
 *    the display_mask is ignored.
 *
 * G: The attribute may be queried using an NV_CTRL_TARGET_TYPE_GPU
 *    target type via XNVCTRLQueryTargetAttribute().
 *
 * F: The attribute may be queried using an NV_CTRL_TARGET_TYPE_FRAMELOCK
 *    target type via XNVCTRLQueryTargetAttribute().
 *
 * X: When Xinerama is enabled, this attribute is kept consistent across
 *    all Physical X Screens;  assignment of this attribute will be
 *    broadcast by the NVIDIA X Driver to all X Screens.
 *
 * V: The attribute may be queried using an NV_CTRL_TARGET_TYPE_VCSC
 *    target type via XNVCTRLQueryTargetAttribute().
 *
 * I: The attribute may be queried using an NV_CTRL_TARGET_TYPE_GVI target type
 *    via XNVCTRLQueryTargetAttribute().
 *
 * Q: The attribute is a 64-bit integer attribute;  use the 64-bit versions
 *    of the appropriate query interfaces.
 *
 * C: The attribute may be queried using an NV_CTRL_TARGET_TYPE_COOLER target
 *    type via XNVCTRLQueryTargetAttribute().
 *
 * S: The attribute may be queried using an NV_CTRL_TARGET_TYPE_THERMAL_SENSOR
 *    target type via XNVCTRLQueryTargetAttribute().
 *
 * T: The attribute may be queried using an
 *    NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER target type
 *    via XNVCTRLQueryTargetAttribute().
 *
 * NOTE: Unless mentioned otherwise, all attributes may be queried using
 *       an NV_CTRL_TARGET_TYPE_X_SCREEN target type via
 *       XNVCTRLQueryTargetAttribute().
 */

/**************************************************************************/

/*
 * Integer attributes:
 *
 * Integer attributes can be queried through the XNVCTRLQueryAttribute() and
 * XNVCTRLQueryTargetAttribute() function calls.
 *
 * Integer attributes can be set through the XNVCTRLSetAttribute() and
 * XNVCTRLSetTargetAttribute() function calls.
 *
 * Unless otherwise noted, all integer attributes can be queried/set
 * using an NV_CTRL_TARGET_TYPE_X_SCREEN target.  Attributes that cannot
 * take an NV_CTRL_TARGET_TYPE_X_SCREEN also cannot be queried/set through
 * XNVCTRLQueryAttribute()/XNVCTRLSetAttribute() (Since these assume
 * an X Screen target).
 */

/*
 * NV_CTRL_FLATPANEL_SCALING - not supported
 */

#define NV_CTRL_FLATPANEL_SCALING 2 /* RWDG */
#define NV_CTRL_FLATPANEL_SCALING_DEFAULT 0
#define NV_CTRL_FLATPANEL_SCALING_NATIVE 1
#define NV_CTRL_FLATPANEL_SCALING_SCALED 2
#define NV_CTRL_FLATPANEL_SCALING_CENTERED 3
#define NV_CTRL_FLATPANEL_SCALING_ASPECT_SCALED 4

/*
 * NV_CTRL_FLATPANEL_DITHERING is deprecated; NV_CTRL_DITHERING should
 * be used instead.
 */

#define NV_CTRL_FLATPANEL_DITHERING 3 /* RWDG */
#define NV_CTRL_FLATPANEL_DITHERING_DEFAULT 0
#define NV_CTRL_FLATPANEL_DITHERING_ENABLED 1
#define NV_CTRL_FLATPANEL_DITHERING_DISABLED 2

/*
 * NV_CTRL_DITHERING - the requested dithering configuration;
 * possible values are:
 *
 * 0: auto     (the driver will decide when to dither)
 * 1: enabled  (the driver will always dither when possible)
 * 2: disabled (the driver will never dither)
 */

#define NV_CTRL_DITHERING 3 /* RWDG */
#define NV_CTRL_DITHERING_AUTO 0
#define NV_CTRL_DITHERING_ENABLED 1
#define NV_CTRL_DITHERING_DISABLED 2

/*
 * NV_CTRL_DIGITAL_VIBRANCE - sets the digital vibrance level for the
 * specified display device.
 */

#define NV_CTRL_DIGITAL_VIBRANCE 4 /* RWDG */

/*
 * NV_CTRL_BUS_TYPE - returns the bus type through which the specified device
 * is connected to the computer.
 * When this attribute is queried on an X screen target, the bus type of the
 * GPU driving the X screen is returned.
 */

#define NV_CTRL_BUS_TYPE 5 /* R--GI */
#define NV_CTRL_BUS_TYPE_AGP 0
#define NV_CTRL_BUS_TYPE_PCI 1
#define NV_CTRL_BUS_TYPE_PCI_EXPRESS 2
#define NV_CTRL_BUS_TYPE_INTEGRATED 3

/*
 * NV_CTRL_VIDEO_RAM - returns the total amount of memory available
 * to the specified GPU (or the GPU driving the specified X
 * screen).  Note: if the GPU supports TurboCache(TM), the value
 * reported may exceed the amount of video memory installed on the
 * GPU.  The value reported for integrated GPUs may likewise exceed
 * the amount of dedicated system memory set aside by the system
 * BIOS for use by the integrated GPU.
 */

#define NV_CTRL_VIDEO_RAM 6 /* R--G */

/*
 * NV_CTRL_IRQ - returns the interrupt request line used by the specified
 * device.
 * When this attribute is queried on an X screen target, the IRQ of the GPU
 * driving the X screen is returned.
 */

#define NV_CTRL_IRQ 7 /* R--GI */

/*
 * NV_CTRL_OPERATING_SYSTEM - returns the operating system on which
 * the X server is running.
 */

#define NV_CTRL_OPERATING_SYSTEM 8 /* R--G */
#define NV_CTRL_OPERATING_SYSTEM_LINUX 0
#define NV_CTRL_OPERATING_SYSTEM_FREEBSD 1
#define NV_CTRL_OPERATING_SYSTEM_SUNOS 2

/*
 * NV_CTRL_SYNC_TO_VBLANK - enables sync to vblank for OpenGL clients.
 * This setting is only applied to OpenGL clients that are started
 * after this setting is applied.
 */

#define NV_CTRL_SYNC_TO_VBLANK 9 /* RW-X */
#define NV_CTRL_SYNC_TO_VBLANK_OFF 0
#define NV_CTRL_SYNC_TO_VBLANK_ON 1

/*
 * NV_CTRL_LOG_ANISO - enables anisotropic filtering for OpenGL
 * clients; on some NVIDIA hardware, this can only be enabled or
 * disabled; on other hardware different levels of anisotropic
 * filtering can be specified.  This setting is only applied to OpenGL
 * clients that are started after this setting is applied.
 */

#define NV_CTRL_LOG_ANISO 10 /* RW-X */

/*
 * NV_CTRL_FSAA_MODE - the FSAA setting for OpenGL clients; possible
 * FSAA modes:
 *
 * NV_CTRL_FSAA_MODE_2x     "2x Bilinear Multisampling"
 * NV_CTRL_FSAA_MODE_2x_5t  "2x Quincunx Multisampling"
 * NV_CTRL_FSAA_MODE_15x15  "1.5 x 1.5 Supersampling"
 * NV_CTRL_FSAA_MODE_2x2    "2 x 2 Supersampling"
 * NV_CTRL_FSAA_MODE_4x     "4x Bilinear Multisampling"
 * NV_CTRL_FSAA_MODE_4x_9t  "4x Gaussian Multisampling"
 * NV_CTRL_FSAA_MODE_8x     "2x Bilinear Multisampling by 4x Supersampling"
 * NV_CTRL_FSAA_MODE_16x    "4x Bilinear Multisampling by 4x Supersampling"
 * NV_CTRL_FSAA_MODE_8xS    "4x Multisampling by 2x Supersampling"
 *
 * This setting is only applied to OpenGL clients that are started
 * after this setting is applied.
 */

#define NV_CTRL_FSAA_MODE 11 /* RW-X */
#define NV_CTRL_FSAA_MODE_NONE 0
#define NV_CTRL_FSAA_MODE_2x 1
#define NV_CTRL_FSAA_MODE_2x_5t 2
#define NV_CTRL_FSAA_MODE_15x15 3
#define NV_CTRL_FSAA_MODE_2x2 4
#define NV_CTRL_FSAA_MODE_4x 5
#define NV_CTRL_FSAA_MODE_4x_9t 6
#define NV_CTRL_FSAA_MODE_8x 7
#define NV_CTRL_FSAA_MODE_16x 8
#define NV_CTRL_FSAA_MODE_8xS 9
#define NV_CTRL_FSAA_MODE_8xQ 10
#define NV_CTRL_FSAA_MODE_16xS 11
#define NV_CTRL_FSAA_MODE_16xQ 12
#define NV_CTRL_FSAA_MODE_32xS 13
#define NV_CTRL_FSAA_MODE_32x 14
#define NV_CTRL_FSAA_MODE_64xS 15
#define NV_CTRL_FSAA_MODE_MAX NV_CTRL_FSAA_MODE_64xS

/*
 * NV_CTRL_TEXTURE_SHARPEN - enables texture sharpening for OpenGL
 * clients.  This setting is only applied to OpenGL clients that are
 * started after this setting is applied.
 */

#define NV_CTRL_TEXTURE_SHARPEN 12 /* RW-X */
#define NV_CTRL_TEXTURE_SHARPEN_OFF 0
#define NV_CTRL_TEXTURE_SHARPEN_ON 1

/*
 * NV_CTRL_UBB - returns whether UBB is enabled for the specified X
 * screen.
 */

#define NV_CTRL_UBB 13 /* R-- */
#define NV_CTRL_UBB_OFF 0
#define NV_CTRL_UBB_ON 1

/*
 * NV_CTRL_OVERLAY - returns whether the RGB overlay is enabled for
 * the specified X screen.
 */

#define NV_CTRL_OVERLAY 14 /* R-- */
#define NV_CTRL_OVERLAY_OFF 0
#define NV_CTRL_OVERLAY_ON 1

/*
 * NV_CTRL_STEREO - returns whether stereo (and what type) is enabled
 * for the specified X screen.
 */

#define NV_CTRL_STEREO 16 /* R-- */
#define NV_CTRL_STEREO_OFF 0
#define NV_CTRL_STEREO_DDC 1
#define NV_CTRL_STEREO_BLUELINE 2
#define NV_CTRL_STEREO_DIN 3
#define NV_CTRL_STEREO_PASSIVE_EYE_PER_DPY 4
#define NV_CTRL_STEREO_VERTICAL_INTERLACED 5
#define NV_CTRL_STEREO_COLOR_INTERLACED 6
#define NV_CTRL_STEREO_HORIZONTAL_INTERLACED 7
#define NV_CTRL_STEREO_CHECKERBOARD_PATTERN 8
#define NV_CTRL_STEREO_INVERSE_CHECKERBOARD_PATTERN 9
#define NV_CTRL_STEREO_3D_VISION 10
#define NV_CTRL_STEREO_3D_VISION_PRO 11

/*
 * NV_CTRL_EMULATE - controls OpenGL software emulation of future
 * NVIDIA GPUs.
 */

#define NV_CTRL_EMULATE 17 /* RW- */
#define NV_CTRL_EMULATE_NONE 0

/*
 * NV_CTRL_TWINVIEW - returns whether TwinView is enabled for the
 * specified X screen.
 */

#define NV_CTRL_TWINVIEW 18 /* R-- */
#define NV_CTRL_TWINVIEW_NOT_ENABLED 0
#define NV_CTRL_TWINVIEW_ENABLED 1

/*
 * NV_CTRL_CONNECTED_DISPLAYS - returns a display mask indicating the last
 * cached state of the display devices connected to the GPU or GPU driving
 * the specified X screen.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_CONNECTED_DISPLAYS 19 /* R--G */

/*
 * NV_CTRL_ENABLED_DISPLAYS - returns a display mask indicating what
 * display devices are enabled for use on the specified X screen or
 * GPU.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_ENABLED_DISPLAYS 20 /* R--G */

/**************************************************************************/
/*
 * Integer attributes specific to configuring Frame Lock on boards that
 * support it.
 */

/*
 * NV_CTRL_FRAMELOCK - returns whether the underlying GPU supports
 * Frame Lock.  All of the other frame lock attributes are only
 * applicable if NV_CTRL_FRAMELOCK is _SUPPORTED.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_FRAMELOCK 21 /* R--G */
#define NV_CTRL_FRAMELOCK_NOT_SUPPORTED 0
#define NV_CTRL_FRAMELOCK_SUPPORTED 1

/*
 * NV_CTRL_FRAMELOCK_MASTER - get/set which display device to use
 * as the frame lock master for the entire sync group.  Note that only
 * one node in the sync group should be configured as the master.
 *
 * This attribute can only be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU target.  This attribute cannot be
 * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN.
 */

#define NV_CTRL_FRAMELOCK_MASTER 22 /* RW-G */

/* These are deprecated.  NV_CTRL_FRAMELOCK_MASTER now takes and
   returns a display mask as value. */
#define NV_CTRL_FRAMELOCK_MASTER_FALSE 0
#define NV_CTRL_FRAMELOCK_MASTER_TRUE 1

/*
 * NV_CTRL_FRAMELOCK_POLARITY - sync either to the rising edge of the
 * frame lock pulse, the falling edge of the frame lock pulse or both.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_FRAMELOCK_POLARITY 23 /* RW-F */
#define NV_CTRL_FRAMELOCK_POLARITY_RISING_EDGE 0x1
#define NV_CTRL_FRAMELOCK_POLARITY_FALLING_EDGE 0x2
#define NV_CTRL_FRAMELOCK_POLARITY_BOTH_EDGES 0x3

/*
 * NV_CTRL_FRAMELOCK_SYNC_DELAY - delay between the frame lock pulse
 * and the GPU sync.  This value must be multiplied by
 * NV_CTRL_FRAMELOCK_SYNC_DELAY_RESOLUTION to determine the sync delay in
 * nanoseconds.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 *
 * USAGE NODE: NV_CTRL_FRAMELOCK_SYNC_DELAY_MAX and
 *             NV_CTRL_FRAMELOCK_SYNC_DELAY_FACTOR are deprecated.
 *             The Sync Delay _MAX and _FACTOR are different for different
 *             GSync products and so, to be correct, the valid values for
 *             NV_CTRL_FRAMELOCK_SYNC_DELAY must be queried to get the range
 *             of acceptable sync delay values, and
 *             NV_CTRL_FRAMELOCK_SYNC_DELAY_RESOLUTION must be queried to
 *             obtain the correct factor.
 */

#define NV_CTRL_FRAMELOCK_SYNC_DELAY 24           /* RW-F */
#define NV_CTRL_FRAMELOCK_SYNC_DELAY_MAX 2047     // deprecated
#define NV_CTRL_FRAMELOCK_SYNC_DELAY_FACTOR 7.81  // deprecated

/*
 * NV_CTRL_FRAMELOCK_SYNC_INTERVAL - how many house sync pulses
 * between the frame lock sync generation (0 == sync every house sync);
 * this only applies to the master when receiving house sync.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_FRAMELOCK_SYNC_INTERVAL 25 /* RW-F */

/*
 * NV_CTRL_FRAMELOCK_PORT0_STATUS - status of the rj45 port0.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_FRAMELOCK_PORT0_STATUS 26 /* R--F */
#define NV_CTRL_FRAMELOCK_PORT0_STATUS_INPUT 0
#define NV_CTRL_FRAMELOCK_PORT0_STATUS_OUTPUT 1

/*
 * NV_CTRL_FRAMELOCK_PORT1_STATUS - status of the rj45 port1.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_FRAMELOCK_PORT1_STATUS 27 /* R--F */
#define NV_CTRL_FRAMELOCK_PORT1_STATUS_INPUT 0
#define NV_CTRL_FRAMELOCK_PORT1_STATUS_OUTPUT 1

/*
 * NV_CTRL_FRAMELOCK_HOUSE_STATUS - returns whether or not the house
 * sync signal was detected on the BNC connector of the frame lock
 * board.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_FRAMELOCK_HOUSE_STATUS 28 /* R--F */
#define NV_CTRL_FRAMELOCK_HOUSE_STATUS_NOT_DETECTED 0
#define NV_CTRL_FRAMELOCK_HOUSE_STATUS_DETECTED 1

/*
 * NV_CTRL_FRAMELOCK_SYNC - enable/disable the syncing of display
 * devices to the frame lock pulse as specified by previous calls to
 * NV_CTRL_FRAMELOCK_MASTER and NV_CTRL_FRAMELOCK_SLAVES.
 *
 * This attribute can only be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU target.  This attribute cannot be
 * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN.
 */

#define NV_CTRL_FRAMELOCK_SYNC 29 /* RW-G */
#define NV_CTRL_FRAMELOCK_SYNC_DISABLE 0
#define NV_CTRL_FRAMELOCK_SYNC_ENABLE 1

/*
 * NV_CTRL_FRAMELOCK_SYNC_READY - reports whether a frame lock
 * board is receiving sync (regardless of whether or not any display
 * devices are using the sync).
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_FRAMELOCK_SYNC_READY 30 /* R--F */
#define NV_CTRL_FRAMELOCK_SYNC_READY_FALSE 0
#define NV_CTRL_FRAMELOCK_SYNC_READY_TRUE 1

/*
 * NV_CTRL_FRAMELOCK_STEREO_SYNC - this indicates that the GPU stereo
 * signal is in sync with the frame lock stereo signal.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_FRAMELOCK_STEREO_SYNC 31 /* R--G */
#define NV_CTRL_FRAMELOCK_STEREO_SYNC_FALSE 0
#define NV_CTRL_FRAMELOCK_STEREO_SYNC_TRUE 1

/*
 * NV_CTRL_FRAMELOCK_TEST_SIGNAL - to test the connections in the sync
 * group, tell the master to enable a test signal, then query port[01]
 * status and sync_ready on all slaves.  When done, tell the master to
 * disable the test signal.  Test signal should only be manipulated
 * while NV_CTRL_FRAMELOCK_SYNC is enabled.
 *
 * The TEST_SIGNAL is also used to reset the Universal Frame Count (as
 * returned by the glXQueryFrameCountNV() function in the
 * GLX_NV_swap_group extension).  Note: for best accuracy of the
 * Universal Frame Count, it is recommended to toggle the TEST_SIGNAL
 * on and off after enabling frame lock.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_FRAMELOCK_TEST_SIGNAL 32 /* RW-G */
#define NV_CTRL_FRAMELOCK_TEST_SIGNAL_DISABLE 0
#define NV_CTRL_FRAMELOCK_TEST_SIGNAL_ENABLE 1

/*
 * NV_CTRL_FRAMELOCK_ETHERNET_DETECTED - The frame lock boards are
 * cabled together using regular cat5 cable, connecting to rj45 ports
 * on the backplane of the card.  There is some concern that users may
 * think these are ethernet ports and connect them to a
 * router/hub/etc.  The hardware can detect this and will shut off to
 * prevent damage (either to itself or to the router).
 * NV_CTRL_FRAMELOCK_ETHERNET_DETECTED may be called to find out if
 * ethernet is connected to one of the rj45 ports.  An appropriate
 * error message should then be displayed.  The _PORT0 and _PORT1
 * values may be or'ed together.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_FRAMELOCK_ETHERNET_DETECTED 33 /* R--F */
#define NV_CTRL_FRAMELOCK_ETHERNET_DETECTED_NONE 0
#define NV_CTRL_FRAMELOCK_ETHERNET_DETECTED_PORT0 0x1
#define NV_CTRL_FRAMELOCK_ETHERNET_DETECTED_PORT1 0x2

/*
 * NV_CTRL_FRAMELOCK_VIDEO_MODE - get/set what video mode is used
 * to interperate the house sync signal.  This should only be set
 * on the master.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_FRAMELOCK_VIDEO_MODE 34 /* RW-F */
#define NV_CTRL_FRAMELOCK_VIDEO_MODE_NONE 0
#define NV_CTRL_FRAMELOCK_VIDEO_MODE_TTL 1
#define NV_CTRL_FRAMELOCK_VIDEO_MODE_NTSCPALSECAM 2
#define NV_CTRL_FRAMELOCK_VIDEO_MODE_HDTV 3

/*
 * During FRAMELOCK bring-up, the above values were redefined to
 * these:
 */

#define NV_CTRL_FRAMELOCK_VIDEO_MODE_COMPOSITE_AUTO 0
#define NV_CTRL_FRAMELOCK_VIDEO_MODE_TTL 1
#define NV_CTRL_FRAMELOCK_VIDEO_MODE_COMPOSITE_BI_LEVEL 2
#define NV_CTRL_FRAMELOCK_VIDEO_MODE_COMPOSITE_TRI_LEVEL 3

/*
 * NV_CTRL_FRAMELOCK_SYNC_RATE - this is the refresh rate that the
 * frame lock board is sending to the GPU, in milliHz.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_FRAMELOCK_SYNC_RATE 35 /* R--F */

/**************************************************************************/

/*
 * NV_CTRL_FORCE_GENERIC_CPU - inhibit the use of CPU specific
 * features such as MMX, SSE, or 3DNOW! for OpenGL clients; this
 * option may result in performance loss, but may be useful in
 * conjunction with software such as the Valgrind memory debugger.
 * This setting is only applied to OpenGL clients that are started
 * after this setting is applied.
 *
 * USAGE NOTE: This attribute is deprecated. CPU compatibility is now
 *             checked each time during initialization.
 */

#define NV_CTRL_FORCE_GENERIC_CPU 37 /* RW-X */
#define NV_CTRL_FORCE_GENERIC_CPU_DISABLE 0
#define NV_CTRL_FORCE_GENERIC_CPU_ENABLE 1

/*
 * NV_CTRL_OPENGL_AA_LINE_GAMMA - for OpenGL clients, allow
 * Gamma-corrected antialiased lines to consider variances in the
 * color display capabilities of output devices when rendering smooth
 * lines.  Only available on recent Quadro GPUs.  This setting is only
 * applied to OpenGL clients that are started after this setting is
 * applied.
 */

#define NV_CTRL_OPENGL_AA_LINE_GAMMA 38 /* RW-X */
#define NV_CTRL_OPENGL_AA_LINE_GAMMA_DISABLE 0
#define NV_CTRL_OPENGL_AA_LINE_GAMMA_ENABLE 1

/*
 * NV_CTRL_FRAMELOCK_TIMING - this is TRUE when the gpu is both receiving
 * and locked to an input timing signal. Timing information may come from
 * the following places: Another frame lock device that is set to master,
 * the house sync signal, or the GPU's internal timing from a display
 * device.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_FRAMELOCK_TIMING 39 /* R--G */
#define NV_CTRL_FRAMELOCK_TIMING_FALSE 0
#define NV_CTRL_FRAMELOCK_TIMING_TRUE 1

/*
 * NV_CTRL_FLIPPING_ALLOWED - when TRUE, OpenGL will swap by flipping
 * when possible; when FALSE, OpenGL will alway swap by blitting.
 */

#define NV_CTRL_FLIPPING_ALLOWED 40 /* RW-X */
#define NV_CTRL_FLIPPING_ALLOWED_FALSE 0
#define NV_CTRL_FLIPPING_ALLOWED_TRUE 1

/*
 * NV_CTRL_ARCHITECTURE - returns the architecture on which the X server is
 * running.
 */

#define NV_CTRL_ARCHITECTURE 41 /* R-- */
#define NV_CTRL_ARCHITECTURE_X86 0
#define NV_CTRL_ARCHITECTURE_X86_64 1
#define NV_CTRL_ARCHITECTURE_IA64 2

/*
 * NV_CTRL_TEXTURE_CLAMPING - texture clamping mode in OpenGL.  By
 * default, _SPEC is used, which forces OpenGL texture clamping to
 * conform with the OpenGL specification.  _EDGE forces NVIDIA's
 * OpenGL implementation to remap GL_CLAMP to GL_CLAMP_TO_EDGE,
 * which is not strictly conformant, but some applications rely on
 * the non-conformant behavior.
 */

#define NV_CTRL_TEXTURE_CLAMPING 42 /* RW-X */
#define NV_CTRL_TEXTURE_CLAMPING_EDGE 0
#define NV_CTRL_TEXTURE_CLAMPING_SPEC 1

#define NV_CTRL_CURSOR_SHADOW 43 /* RW- */
#define NV_CTRL_CURSOR_SHADOW_DISABLE 0
#define NV_CTRL_CURSOR_SHADOW_ENABLE 1

#define NV_CTRL_CURSOR_SHADOW_ALPHA 44 /* RW- */
#define NV_CTRL_CURSOR_SHADOW_RED 45   /* RW- */
#define NV_CTRL_CURSOR_SHADOW_GREEN 46 /* RW- */
#define NV_CTRL_CURSOR_SHADOW_BLUE 47  /* RW- */

#define NV_CTRL_CURSOR_SHADOW_X_OFFSET 48 /* RW- */
#define NV_CTRL_CURSOR_SHADOW_Y_OFFSET 49 /* RW- */

/*
 * When Application Control for FSAA is enabled, then what the
 * application requests is used, and NV_CTRL_FSAA_MODE is ignored.  If
 * this is disabled, then any application setting is overridden with
 * NV_CTRL_FSAA_MODE
 */

#define NV_CTRL_FSAA_APPLICATION_CONTROLLED 50 /* RW-X */
#define NV_CTRL_FSAA_APPLICATION_CONTROLLED_ENABLED 1
#define NV_CTRL_FSAA_APPLICATION_CONTROLLED_DISABLED 0

/*
 * When Application Control for LogAniso is enabled, then what the
 * application requests is used, and NV_CTRL_LOG_ANISO is ignored.  If
 * this is disabled, then any application setting is overridden with
 * NV_CTRL_LOG_ANISO
 */

#define NV_CTRL_LOG_ANISO_APPLICATION_CONTROLLED 51 /* RW-X */
#define NV_CTRL_LOG_ANISO_APPLICATION_CONTROLLED_ENABLED 1
#define NV_CTRL_LOG_ANISO_APPLICATION_CONTROLLED_DISABLED 0

/*
 * IMAGE_SHARPENING adjusts the sharpness of the display's image
 * quality by amplifying high frequency content.  Valid values will
 * normally be in the range [0,32).  Only available on GeForceFX or
 * newer.
 */

#define NV_CTRL_IMAGE_SHARPENING 52 /* RWDG */

/*
 * NV_CTRL_TV_OVERSCAN adjusts the amount of overscan on the specified
 * display device.
 */

#define NV_CTRL_TV_OVERSCAN 53 /* RWDG */

/*
 * NV_CTRL_TV_FLICKER_FILTER adjusts the amount of flicker filter on
 * the specified display device.
 */

#define NV_CTRL_TV_FLICKER_FILTER 54 /* RWDG */

/*
 * NV_CTRL_TV_BRIGHTNESS adjusts the amount of brightness on the
 * specified display device.
 */

#define NV_CTRL_TV_BRIGHTNESS 55 /* RWDG */

/*
 * NV_CTRL_TV_HUE adjusts the amount of hue on the specified display
 * device.
 */

#define NV_CTRL_TV_HUE 56 /* RWDG */

/*
 * NV_CTRL_TV_CONTRAST adjusts the amount of contrast on the specified
 * display device.
 */

#define NV_CTRL_TV_CONTRAST 57 /* RWDG */

/*
 * NV_CTRL_TV_SATURATION adjusts the amount of saturation on the
 * specified display device.
 */

#define NV_CTRL_TV_SATURATION 58 /* RWDG */

/*
 * NV_CTRL_TV_RESET_SETTINGS - this write-only attribute can be used
 * to request that all TV Settings be reset to their default values;
 * typical usage would be that this attribute be sent, and then all
 * the TV attributes be queried to retrieve their new values.
 */

#define NV_CTRL_TV_RESET_SETTINGS 59 /* -WDG */

/*
 * NV_CTRL_GPU_CORE_TEMPERATURE reports the current core temperature
 * of the GPU driving the X screen.
 */

#define NV_CTRL_GPU_CORE_TEMPERATURE 60 /* R--G */

/*
 * NV_CTRL_GPU_CORE_THRESHOLD reports the current GPU core slowdown
 * threshold temperature, NV_CTRL_GPU_DEFAULT_CORE_THRESHOLD and
 * NV_CTRL_GPU_MAX_CORE_THRESHOLD report the default and MAX core
 * slowdown threshold temperatures.
 *
 * NV_CTRL_GPU_CORE_THRESHOLD reflects the temperature at which the
 * GPU is throttled to prevent overheating.
 */

#define NV_CTRL_GPU_CORE_THRESHOLD 61         /* R--G */
#define NV_CTRL_GPU_DEFAULT_CORE_THRESHOLD 62 /* R--G */
#define NV_CTRL_GPU_MAX_CORE_THRESHOLD 63     /* R--G */

/*
 * NV_CTRL_AMBIENT_TEMPERATURE reports the current temperature in the
 * immediate neighbourhood of the GPU driving the X screen.
 */

#define NV_CTRL_AMBIENT_TEMPERATURE 64 /* R--G */

/*
 * NV_CTRL_PBUFFER_SCANOUT_SUPPORTED - returns whether this X screen
 * supports scanout of FP pbuffers;
 *
 * if this screen does not support PBUFFER_SCANOUT, then all other
 * PBUFFER_SCANOUT attributes are unavailable.
 *
 * PBUFFER_SCANOUT is supported if and only if:
 * - Twinview is configured with clone mode.  The secondary screen is used to
 *   scanout the pbuffer.
 * - The desktop is running in with 16 bits per pixel.
 */
#define NV_CTRL_PBUFFER_SCANOUT_SUPPORTED 65 /* R-- */
#define NV_CTRL_PBUFFER_SCANOUT_FALSE 0
#define NV_CTRL_PBUFFER_SCANOUT_TRUE 1

/*
 * NV_CTRL_PBUFFER_SCANOUT_XID indicates the XID of the pbuffer used for
 * scanout.
 */
#define NV_CTRL_PBUFFER_SCANOUT_XID 66 /* RW- */

/**************************************************************************/
/*
 * The NV_CTRL_GVO_* integer attributes are used to configure GVO
 * (Graphics to Video Out).  This functionality is available, for
 * example, on the Quadro FX 4000 SDI graphics board.
 *
 * The following is a typical usage pattern for the GVO attributes:
 *
 * - query NV_CTRL_GVO_SUPPORTED to determine if the X screen supports GV0.
 *
 * - specify NV_CTRL_GVO_SYNC_MODE (one of FREE_RUNNING, GENLOCK, or
 * FRAMELOCK); if you specify GENLOCK or FRAMELOCK, you should also
 * specify NV_CTRL_GVO_SYNC_SOURCE.
 *
 * - Use NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECTED and
 * NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED to detect what input syncs are
 * present.
 *
 * (If no analog sync is detected but it is known that a valid
 * bi-level or tri-level sync is connected set
 * NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECT_MODE appropriately and
 * retest with NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECTED).
 *
 * - if syncing to input sync, query the
 * NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT attribute; note that Input video
 * format can only be queried after SYNC_SOURCE is specified.
 *
 * - specify the NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT
 *
 * - specify the NV_CTRL_GVO_DATA_FORMAT
 *
 * - specify any custom Color Space Conversion (CSC) matrix, offset,
 * and scale with XNVCTRLSetGvoColorConversion().
 *
 * - if using the GLX_NV_video_out extension to display one or more
 * pbuffers, call glXGetVideoDeviceNV() to lock the GVO output for use
 * by the GLX client; then bind the pbuffer(s) to the GVO output with
 * glXBindVideoImageNV() and send pbuffers to the GVO output with
 * glXSendPbufferToVideoNV(); see the GLX_NV_video_out spec for more
 * details.
 *
 * - if using the GLX_NV_present_video extension, call
 * glXBindVideoDeviceNV() to bind the GVO video device to current
 * OpenGL context.
 *
 * Note that setting most GVO attributes only causes the value to be
 * cached in the X server.  The values will be flushed to the hardware
 * either when the next MetaMode is set that uses the GVO display
 * device, or when a GLX pbuffer is bound to the GVO output (with
 * glXBindVideoImageNV()).
 *
 * Note that GLX_NV_video_out/GLX_NV_present_video and X screen use
 * are mutually exclusive.  If a MetaMode is currently using the GVO
 * device, then glXGetVideoDeviceNV and glXBindVideoImageNV() will
 * fail.  Similarly, if a GLX client has locked the GVO output (via
 * glXGetVideoDeviceNV or glXBindVideoImageNV), then setting a
 * MetaMode that uses the GVO device will fail.  The
 * NV_CTRL_GVO_GLX_LOCKED event will be sent when a GLX client locks
 * the GVO output.
 *
 */

/*
 * NV_CTRL_GVO_SUPPORTED - returns whether this X screen supports GVO;
 * if this screen does not support GVO output, then all other GVO
 * attributes are unavailable.
 */

#define NV_CTRL_GVO_SUPPORTED 67 /* R-- */
#define NV_CTRL_GVO_SUPPORTED_FALSE 0
#define NV_CTRL_GVO_SUPPORTED_TRUE 1

/*
 * NV_CTRL_GVO_SYNC_MODE - selects the GVO sync mode; possible values
 * are:
 *
 * FREE_RUNNING - GVO does not sync to any external signal
 *
 * GENLOCK - the GVO output is genlocked to an incoming sync signal;
 * genlocking locks at hsync.  This requires that the output video
 * format exactly match the incoming sync video format.
 *
 * FRAMELOCK - the GVO output is frame locked to an incoming sync
 * signal; frame locking locks at vsync.  This requires that the output
 * video format have the same refresh rate as the incoming sync video
 * format.
 */

#define NV_CTRL_GVO_SYNC_MODE 68 /* RW- */
#define NV_CTRL_GVO_SYNC_MODE_FREE_RUNNING 0
#define NV_CTRL_GVO_SYNC_MODE_GENLOCK 1
#define NV_CTRL_GVO_SYNC_MODE_FRAMELOCK 2

/*
 * NV_CTRL_GVO_SYNC_SOURCE - if NV_CTRL_GVO_SYNC_MODE is set to either
 * GENLOCK or FRAMELOCK, this controls which sync source is used as
 * the incoming sync signal (either Composite or SDI).  If
 * NV_CTRL_GVO_SYNC_MODE is FREE_RUNNING, this attribute has no
 * effect.
 */

#define NV_CTRL_GVO_SYNC_SOURCE 69 /* RW- */
#define NV_CTRL_GVO_SYNC_SOURCE_COMPOSITE 0
#define NV_CTRL_GVO_SYNC_SOURCE_SDI 1

/*
 * NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT - specifies the desired output video
 * format for GVO devices or the desired input video format for GVI devices.
 *
 * Note that for GVO, the valid video formats may vary depending on
 * the NV_CTRL_GVO_SYNC_MODE and the incoming sync video format.  See
 * the definition of NV_CTRL_GVO_SYNC_MODE.
 *
 * Note that when querying the ValidValues for this data type, the
 * values are reported as bits within a bitmask
 * (ATTRIBUTE_TYPE_INT_BITS); unfortunately, there are more valid
 * value bits than will fit in a single 32-bit value.  To solve this,
 * query the ValidValues for NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT to
 * check which of the first 31 VIDEO_FORMATS are valid, query the
 * ValidValues for NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT2 to check which
 * of the 32-63 VIDEO_FORMATS are valid, and query the ValidValues of
 * NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT3 to check which of the 64-95
 * VIDEO_FORMATS are valid.
 *
 * Note: Setting this attribute on a GVI device may also result in the
 *       following NV-CONTROL attributes being reset on that device (to
 *       ensure the configuration remains valid):
 *           NV_CTRL_GVI_REQUESTED_STREAM_BITS_PER_COMPONENT
 *           NV_CTRL_GVI_REQUESTED_STREAM_COMPONENT_SAMPLING
 */

#define NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT 70 /* RW--I */

#define NV_CTRL_GVIO_VIDEO_FORMAT_NONE 0
#define NV_CTRL_GVIO_VIDEO_FORMAT_487I_59_94_SMPTE259_NTSC 1
#define NV_CTRL_GVIO_VIDEO_FORMAT_576I_50_00_SMPTE259_PAL 2
#define NV_CTRL_GVIO_VIDEO_FORMAT_720P_59_94_SMPTE296 3
#define NV_CTRL_GVIO_VIDEO_FORMAT_720P_60_00_SMPTE296 4
#define NV_CTRL_GVIO_VIDEO_FORMAT_1035I_59_94_SMPTE260 5
#define NV_CTRL_GVIO_VIDEO_FORMAT_1035I_60_00_SMPTE260 6
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080I_50_00_SMPTE295 7
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080I_50_00_SMPTE274 8
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080I_59_94_SMPTE274 9
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080I_60_00_SMPTE274 10
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_23_976_SMPTE274 11
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_24_00_SMPTE274 12
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_25_00_SMPTE274 13
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_29_97_SMPTE274 14
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_30_00_SMPTE274 15
#define NV_CTRL_GVIO_VIDEO_FORMAT_720P_50_00_SMPTE296 16
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080I_48_00_SMPTE274 17
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080I_47_96_SMPTE274 18
#define NV_CTRL_GVIO_VIDEO_FORMAT_720P_30_00_SMPTE296 19
#define NV_CTRL_GVIO_VIDEO_FORMAT_720P_29_97_SMPTE296 20
#define NV_CTRL_GVIO_VIDEO_FORMAT_720P_25_00_SMPTE296 21
#define NV_CTRL_GVIO_VIDEO_FORMAT_720P_24_00_SMPTE296 22
#define NV_CTRL_GVIO_VIDEO_FORMAT_720P_23_98_SMPTE296 23
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080PSF_25_00_SMPTE274 24
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080PSF_29_97_SMPTE274 25
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080PSF_30_00_SMPTE274 26
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080PSF_24_00_SMPTE274 27
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080PSF_23_98_SMPTE274 28
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048P_30_00_SMPTE372 29
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048P_29_97_SMPTE372 30
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048I_60_00_SMPTE372 31
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048I_59_94_SMPTE372 32
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048P_25_00_SMPTE372 33
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048I_50_00_SMPTE372 34
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048P_24_00_SMPTE372 35
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048P_23_98_SMPTE372 36
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048I_48_00_SMPTE372 37
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048I_47_96_SMPTE372 38
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_50_00_3G_LEVEL_A_SMPTE274 39
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_59_94_3G_LEVEL_A_SMPTE274 40
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_60_00_3G_LEVEL_A_SMPTE274 41
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_60_00_3G_LEVEL_B_SMPTE274 42
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080I_60_00_3G_LEVEL_B_SMPTE274 43
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048I_60_00_3G_LEVEL_B_SMPTE372 44
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_50_00_3G_LEVEL_B_SMPTE274 45
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080I_50_00_3G_LEVEL_B_SMPTE274 46
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048I_50_00_3G_LEVEL_B_SMPTE372 47
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_30_00_3G_LEVEL_B_SMPTE274 48
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048P_30_00_3G_LEVEL_B_SMPTE372 49
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_25_00_3G_LEVEL_B_SMPTE274 50
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048P_25_00_3G_LEVEL_B_SMPTE372 51
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_24_00_3G_LEVEL_B_SMPTE274 52
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048P_24_00_3G_LEVEL_B_SMPTE372 53
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080I_48_00_3G_LEVEL_B_SMPTE274 54
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048I_48_00_3G_LEVEL_B_SMPTE372 55
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_59_94_3G_LEVEL_B_SMPTE274 56
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080I_59_94_3G_LEVEL_B_SMPTE274 57
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048I_59_94_3G_LEVEL_B_SMPTE372 58
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_29_97_3G_LEVEL_B_SMPTE274 59
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048P_29_97_3G_LEVEL_B_SMPTE372 60
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080P_23_98_3G_LEVEL_B_SMPTE274 61
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048P_23_98_3G_LEVEL_B_SMPTE372 62
#define NV_CTRL_GVIO_VIDEO_FORMAT_1080I_47_96_3G_LEVEL_B_SMPTE274 63
#define NV_CTRL_GVIO_VIDEO_FORMAT_2048I_47_96_3G_LEVEL_B_SMPTE372 64

/*
 * The following are deprecated; NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT and the
 * corresponding NV_CTRL_GVIO_* formats should be used instead.
 */
#define NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT 70 /* RW- */

#define NV_CTRL_GVO_VIDEO_FORMAT_NONE 0
#define NV_CTRL_GVO_VIDEO_FORMAT_487I_59_94_SMPTE259_NTSC 1
#define NV_CTRL_GVO_VIDEO_FORMAT_576I_50_00_SMPTE259_PAL 2
#define NV_CTRL_GVO_VIDEO_FORMAT_720P_59_94_SMPTE296 3
#define NV_CTRL_GVO_VIDEO_FORMAT_720P_60_00_SMPTE296 4
#define NV_CTRL_GVO_VIDEO_FORMAT_1035I_59_94_SMPTE260 5
#define NV_CTRL_GVO_VIDEO_FORMAT_1035I_60_00_SMPTE260 6
#define NV_CTRL_GVO_VIDEO_FORMAT_1080I_50_00_SMPTE295 7
#define NV_CTRL_GVO_VIDEO_FORMAT_1080I_50_00_SMPTE274 8
#define NV_CTRL_GVO_VIDEO_FORMAT_1080I_59_94_SMPTE274 9
#define NV_CTRL_GVO_VIDEO_FORMAT_1080I_60_00_SMPTE274 10
#define NV_CTRL_GVO_VIDEO_FORMAT_1080P_23_976_SMPTE274 11
#define NV_CTRL_GVO_VIDEO_FORMAT_1080P_24_00_SMPTE274 12
#define NV_CTRL_GVO_VIDEO_FORMAT_1080P_25_00_SMPTE274 13
#define NV_CTRL_GVO_VIDEO_FORMAT_1080P_29_97_SMPTE274 14
#define NV_CTRL_GVO_VIDEO_FORMAT_1080P_30_00_SMPTE274 15
#define NV_CTRL_GVO_VIDEO_FORMAT_720P_50_00_SMPTE296 16
#define NV_CTRL_GVO_VIDEO_FORMAT_1080I_48_00_SMPTE274 17
#define NV_CTRL_GVO_VIDEO_FORMAT_1080I_47_96_SMPTE274 18
#define NV_CTRL_GVO_VIDEO_FORMAT_720P_30_00_SMPTE296 19
#define NV_CTRL_GVO_VIDEO_FORMAT_720P_29_97_SMPTE296 20
#define NV_CTRL_GVO_VIDEO_FORMAT_720P_25_00_SMPTE296 21
#define NV_CTRL_GVO_VIDEO_FORMAT_720P_24_00_SMPTE296 22
#define NV_CTRL_GVO_VIDEO_FORMAT_720P_23_98_SMPTE296 23
#define NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_25_00_SMPTE274 24
#define NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_29_97_SMPTE274 25
#define NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_30_00_SMPTE274 26
#define NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_24_00_SMPTE274 27
#define NV_CTRL_GVO_VIDEO_FORMAT_1080PSF_23_98_SMPTE274 28
#define NV_CTRL_GVO_VIDEO_FORMAT_2048P_30_00_SMPTE372 29
#define NV_CTRL_GVO_VIDEO_FORMAT_2048P_29_97_SMPTE372 30
#define NV_CTRL_GVO_VIDEO_FORMAT_2048I_60_00_SMPTE372 31
#define NV_CTRL_GVO_VIDEO_FORMAT_2048I_59_94_SMPTE372 32
#define NV_CTRL_GVO_VIDEO_FORMAT_2048P_25_00_SMPTE372 33
#define NV_CTRL_GVO_VIDEO_FORMAT_2048I_50_00_SMPTE372 34
#define NV_CTRL_GVO_VIDEO_FORMAT_2048P_24_00_SMPTE372 35
#define NV_CTRL_GVO_VIDEO_FORMAT_2048P_23_98_SMPTE372 36
#define NV_CTRL_GVO_VIDEO_FORMAT_2048I_48_00_SMPTE372 37
#define NV_CTRL_GVO_VIDEO_FORMAT_2048I_47_96_SMPTE372 38

/*
 * NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT - indicates the input video format
 * detected for GVO or GVI devices; the possible values are the
 * NV_CTRL_GVIO_VIDEO_FORMAT constants.
 *
 * For GVI devices, the jack number should be specified in the lower
 * 16 bits of the "display_mask" parameter, while the channel number should be
 * specified in the upper 16 bits.
 */

#define NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT 71 /* R--I */

/*
 * The following is deprecated.  Use NV_CTRL_GVIO_DETECTED_VIDEO_FORMAT,
 * instead.
 */
#define NV_CTRL_GVO_INPUT_VIDEO_FORMAT 71 /* R-- */

/*
 * NV_CTRL_GVO_DATA_FORMAT - This controls how the data in the source
 * (either the X screen or the GLX pbuffer) is interpretted and
 * displayed.
 *
 * Note: some of the below DATA_FORMATS have been renamed.  For
 * example, R8G8B8_TO_RGB444 has been renamed to X8X8X8_444_PASSTHRU.
 * This is to more accurately reflect DATA_FORMATS where the
 * per-channel data could be either RGB or YCrCb -- the point is that
 * the driver and GVO hardware do not perform any implicit color space
 * conversion on the data; it is passed through to the SDI out.
 */

#define NV_CTRL_GVO_DATA_FORMAT 72 /* RW- */
#define NV_CTRL_GVO_DATA_FORMAT_R8G8B8_TO_YCRCB444 0
#define NV_CTRL_GVO_DATA_FORMAT_R8G8B8A8_TO_YCRCBA4444 1
#define NV_CTRL_GVO_DATA_FORMAT_R8G8B8Z10_TO_YCRCBZ4444 2
#define NV_CTRL_GVO_DATA_FORMAT_R8G8B8_TO_YCRCB422 3
#define NV_CTRL_GVO_DATA_FORMAT_R8G8B8A8_TO_YCRCBA4224 4
#define NV_CTRL_GVO_DATA_FORMAT_R8G8B8Z10_TO_YCRCBZ4224 5
#define NV_CTRL_GVO_DATA_FORMAT_R8G8B8_TO_RGB444 6  // renamed
#define NV_CTRL_GVO_DATA_FORMAT_X8X8X8_444_PASSTHRU 6
#define NV_CTRL_GVO_DATA_FORMAT_R8G8B8A8_TO_RGBA4444 7  // renamed
#define NV_CTRL_GVO_DATA_FORMAT_X8X8X8A8_4444_PASSTHRU 7
#define NV_CTRL_GVO_DATA_FORMAT_R8G8B8Z10_TO_RGBZ4444 8  // renamed
#define NV_CTRL_GVO_DATA_FORMAT_X8X8X8Z8_4444_PASSTHRU 8
#define NV_CTRL_GVO_DATA_FORMAT_Y10CR10CB10_TO_YCRCB444 9  // renamed
#define NV_CTRL_GVO_DATA_FORMAT_X10X10X10_444_PASSTHRU 9
#define NV_CTRL_GVO_DATA_FORMAT_Y10CR8CB8_TO_YCRCB444 10  // renamed
#define NV_CTRL_GVO_DATA_FORMAT_X10X8X8_444_PASSTHRU 10
#define NV_CTRL_GVO_DATA_FORMAT_Y10CR8CB8A10_TO_YCRCBA4444 11  // renamed
#define NV_CTRL_GVO_DATA_FORMAT_X10X8X8A10_4444_PASSTHRU 11
#define NV_CTRL_GVO_DATA_FORMAT_Y10CR8CB8Z10_TO_YCRCBZ4444 12  // renamed
#define NV_CTRL_GVO_DATA_FORMAT_X10X8X8Z10_4444_PASSTHRU 12
#define NV_CTRL_GVO_DATA_FORMAT_DUAL_R8G8B8_TO_DUAL_YCRCB422 13
#define NV_CTRL_GVO_DATA_FORMAT_DUAL_Y8CR8CB8_TO_DUAL_YCRCB422 14  // renamed
#define NV_CTRL_GVO_DATA_FORMAT_DUAL_X8X8X8_TO_DUAL_422_PASSTHRU 14
#define NV_CTRL_GVO_DATA_FORMAT_R10G10B10_TO_YCRCB422 15
#define NV_CTRL_GVO_DATA_FORMAT_R10G10B10_TO_YCRCB444 16
#define NV_CTRL_GVO_DATA_FORMAT_Y12CR12CB12_TO_YCRCB444 17  // renamed
#define NV_CTRL_GVO_DATA_FORMAT_X12X12X12_444_PASSTHRU 17
#define NV_CTRL_GVO_DATA_FORMAT_R12G12B12_TO_YCRCB444 18
#define NV_CTRL_GVO_DATA_FORMAT_X8X8X8_422_PASSTHRU 19
#define NV_CTRL_GVO_DATA_FORMAT_X8X8X8A8_4224_PASSTHRU 20
#define NV_CTRL_GVO_DATA_FORMAT_X8X8X8Z8_4224_PASSTHRU 21
#define NV_CTRL_GVO_DATA_FORMAT_X10X10X10_422_PASSTHRU 22
#define NV_CTRL_GVO_DATA_FORMAT_X10X8X8_422_PASSTHRU 23
#define NV_CTRL_GVO_DATA_FORMAT_X10X8X8A10_4224_PASSTHRU 24
#define NV_CTRL_GVO_DATA_FORMAT_X10X8X8Z10_4224_PASSTHRU 25
#define NV_CTRL_GVO_DATA_FORMAT_X12X12X12_422_PASSTHRU 26
#define NV_CTRL_GVO_DATA_FORMAT_R12G12B12_TO_YCRCB422 27

/*
 * NV_CTRL_GVO_DISPLAY_X_SCREEN - no longer supported
 */

#define NV_CTRL_GVO_DISPLAY_X_SCREEN 73 /* RW- */
#define NV_CTRL_GVO_DISPLAY_X_SCREEN_ENABLE 1
#define NV_CTRL_GVO_DISPLAY_X_SCREEN_DISABLE 0

/*
 * NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECTED - indicates whether
 * Composite Sync input is detected.
 */

#define NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECTED 74 /* R-- */
#define NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECTED_FALSE 0
#define NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECTED_TRUE 1

/*
 * NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECT_MODE - get/set the
 * Composite Sync input detect mode.
 */

#define NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECT_MODE 75 /* RW- */
#define NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECT_MODE_AUTO 0
#define NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECT_MODE_BI_LEVEL 1
#define NV_CTRL_GVO_COMPOSITE_SYNC_INPUT_DETECT_MODE_TRI_LEVEL 2

/*
 * NV_CTRL_GVO_SYNC_INPUT_DETECTED - indicates whether SDI Sync input
 * is detected, and what type.
 */

#define NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED 76 /* R-- */
#define NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED_NONE 0
#define NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED_HD 1
#define NV_CTRL_GVO_SDI_SYNC_INPUT_DETECTED_SD 2

/*
 * NV_CTRL_GVO_VIDEO_OUTPUTS - indicates which GVO video output
 * connectors are currently outputing data.
 */

#define NV_CTRL_GVO_VIDEO_OUTPUTS 77 /* R-- */
#define NV_CTRL_GVO_VIDEO_OUTPUTS_NONE 0
#define NV_CTRL_GVO_VIDEO_OUTPUTS_VIDEO1 1
#define NV_CTRL_GVO_VIDEO_OUTPUTS_VIDEO2 2
#define NV_CTRL_GVO_VIDEO_OUTPUTS_VIDEO_BOTH 3

/*
 * NV_CTRL_GVO_FPGA_VERSION - indicates the version of the Firmware on
 * the GVO device.  Deprecated; use
 * NV_CTRL_STRING_GVIO_FIRMWARE_VERSION instead.
 */

#define NV_CTRL_GVO_FIRMWARE_VERSION 78 /* R-- */

/*
 * NV_CTRL_GVO_SYNC_DELAY_PIXELS - controls the delay between the
 * input sync and the output sync in numbers of pixels from hsync;
 * this is a 12 bit value.
 *
 * If the NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW bit is set,
 * then setting this value will set an advance instead of a delay.
 */

#define NV_CTRL_GVO_SYNC_DELAY_PIXELS 79 /* RW- */

/*
 * NV_CTRL_GVO_SYNC_DELAY_LINES - controls the delay between the input
 * sync and the output sync in numbers of lines from vsync; this is a
 * 12 bit value.
 *
 * If the NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW bit is set,
 * then setting this value will set an advance instead of a delay.
 */

#define NV_CTRL_GVO_SYNC_DELAY_LINES 80 /* RW- */

/*
 * NV_CTRL_GVO_INPUT_VIDEO_FORMAT_REACQUIRE - must be set for a period
 * of about 2 seconds for the new InputVideoFormat to be properly
 * locked to.  In nvidia-settings, we do a reacquire whenever genlock
 * or frame lock mode is entered into, when the user clicks the
 * "detect" button.  This value can be written, but always reads back
 * _FALSE.
 */

#define NV_CTRL_GVO_INPUT_VIDEO_FORMAT_REACQUIRE 81 /* -W- */
#define NV_CTRL_GVO_INPUT_VIDEO_FORMAT_REACQUIRE_FALSE 0
#define NV_CTRL_GVO_INPUT_VIDEO_FORMAT_REACQUIRE_TRUE 1

/*
 * NV_CTRL_GVO_GLX_LOCKED - indicates that GVO configurability is
 * locked by GLX; this occurs when either glXGetVideoDeviceNV (part of
 * GLX_NV_video_out) or glXBindVideoDeviceNV (part of
 * GLX_NV_present_video) is called.  All GVO output resources are
 * locked until released by the GLX_NV_video_out/GLX_NV_present_video
 * client.
 *
 * When GVO is locked, setting of the following GVO NV-CONTROL attributes will
 * not happen immediately and will instead be cached.  The GVO resource will
 * need to be disabled/released and re-enabled/claimed for the values to be
 * flushed. These attributes are:
 *    NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT
 *    NV_CTRL_GVO_DATA_FORMAT
 *    NV_CTRL_GVO_FLIP_QUEUE_SIZE
 *
 * This attribute is deprecated and may be removed in a future release.  Its
 * functionality has been replaced by NV_CTRL_GVO_LOCK_OWNER.
 */

#define NV_CTRL_GVO_GLX_LOCKED 82 /* R-- */
#define NV_CTRL_GVO_GLX_LOCKED_FALSE 0
#define NV_CTRL_GVO_GLX_LOCKED_TRUE 1

/*
 * NV_CTRL_GVIO_VIDEO_FORMAT_{WIDTH,HEIGHT,REFRESH_RATE} - query the
 * width, height, and refresh rate for the specified
 * NV_CTRL_GVIO_VIDEO_FORMAT_*.  So that this can be queried with
 * existing interfaces, XNVCTRLQueryAttribute() should be used, and
 * the video format specified in the display_mask field; eg:
 *
 * XNVCTRLQueryAttribute (dpy,
 *                        screen,
 *                        NV_CTRL_GVIO_VIDEO_FORMAT_487I_59_94_SMPTE259_NTSC,
 *                        NV_CTRL_GVIO_VIDEO_FORMAT_WIDTH,
 *                        &value);
 *
 * Note that Refresh Rate is in milliHertz values
 */

#define NV_CTRL_GVIO_VIDEO_FORMAT_WIDTH 83        /* R--I */
#define NV_CTRL_GVIO_VIDEO_FORMAT_HEIGHT 84       /* R--I */
#define NV_CTRL_GVIO_VIDEO_FORMAT_REFRESH_RATE 85 /* R--I */

/* The following are deprecated; use the NV_CTRL_GVIO_* versions, instead */
#define NV_CTRL_GVO_VIDEO_FORMAT_WIDTH 83        /* R-- */
#define NV_CTRL_GVO_VIDEO_FORMAT_HEIGHT 84       /* R-- */
#define NV_CTRL_GVO_VIDEO_FORMAT_REFRESH_RATE 85 /* R-- */

/*
 * NV_CTRL_GVO_X_SCREEN_PAN_[XY] - no longer supported
 */

#define NV_CTRL_GVO_X_SCREEN_PAN_X 86 /* RW- */
#define NV_CTRL_GVO_X_SCREEN_PAN_Y 87 /* RW- */

/*
 * NV_CTRL_GPU_OVERCLOCKING_STATE - query the current or set a new
 * overclocking state; the value of this attribute controls the
 * availability of additional overclocking attributes (see below).
 *
 * Note: this attribute is unavailable unless overclocking support
 * has been enabled in the X server (by the user).
 */

#define NV_CTRL_GPU_OVERCLOCKING_STATE 88 /* RW-G */
#define NV_CTRL_GPU_OVERCLOCKING_STATE_NONE 0
#define NV_CTRL_GPU_OVERCLOCKING_STATE_MANUAL 1

/*
 * NV_CTRL_GPU_{2,3}D_CLOCK_FREQS - query or set the GPU and memory
 * clocks of the device driving the X screen.  New clock frequencies
 * are tested before being applied, and may be rejected.
 *
 * Note: if the target clocks are too aggressive, their testing may
 * render the system unresponsive.
 *
 * Note: while this attribute can always be queried, it can't be set
 * unless NV_CTRL_GPU_OVERCLOCKING_STATE is set to _MANUAL.  Since
 * the target clocks may be rejected, the requester should read this
 * attribute after the set to determine success or failure.
 *
 * NV_CTRL_GPU_{2,3}D_CLOCK_FREQS are "packed" integer attributes; the
 * GPU clock is stored in the upper 16 bits of the integer, and the
 * memory clock is stored in the lower 16 bits of the integer.  All
 * clock values are in MHz.
 */

#define NV_CTRL_GPU_2D_CLOCK_FREQS 89 /* RW-G */
#define NV_CTRL_GPU_3D_CLOCK_FREQS 90 /* RW-G */

/*
 * NV_CTRL_GPU_DEFAULT_{2,3}D_CLOCK_FREQS - query the default memory
 * and GPU core clocks of the device driving the X screen.
 *
 * NV_CTRL_GPU_DEFAULT_{2,3}D_CLOCK_FREQS are "packed" integer
 * attributes; the GPU clock is stored in the upper 16 bits of the
 * integer, and the memory clock is stored in the lower 16 bits of the
 * integer.  All clock values are in MHz.
 */

#define NV_CTRL_GPU_DEFAULT_2D_CLOCK_FREQS 91 /* R--G */
#define NV_CTRL_GPU_DEFAULT_3D_CLOCK_FREQS 92 /* R--G */

/*
 * NV_CTRL_GPU_CURRENT_CLOCK_FREQS - query the current GPU and memory
 * clocks of the graphics device driving the X screen.
 *
 * NV_CTRL_GPU_CURRENT_CLOCK_FREQS is a "packed" integer attribute;
 * the GPU clock is stored in the upper 16 bits of the integer, and
 * the memory clock is stored in the lower 16 bits of the integer.
 * All clock values are in MHz.  All clock values are in MHz.
 */

#define NV_CTRL_GPU_CURRENT_CLOCK_FREQS 93 /* R--G */

/*
 * NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS - Holds the last calculated
 * optimal 3D clock frequencies found by the
 * NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION process.  Querying this
 * attribute before having probed for the optimal clocks will return
 * NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_INVALID
 *
 * Note: unless NV_CTRL_GPU_OVERCLOCKING_STATE is set to _MANUAL, the
 * optimal clock detection process is unavailable.
 */

#define NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS 94 /* R--G */
#define NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_INVALID 0

/*
 * NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION - set to _START to
 * initiate testing for the optimal 3D clock frequencies.  Once
 * found, the optimal clock frequencies will be returned by the
 * NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS attribute asynchronously
 * (using an X event, see XNVCtrlSelectNotify).
 *
 * To cancel an ongoing test for the optimal clocks, set the
 * NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION attribute to _CANCEL
 *
 * Note: unless NV_CTRL_GPU_OVERCLOCKING_STATE is set to _MANUAL, the
 * optimal clock detection process is unavailable.
 */

#define NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION 95 /* -W-G */
#define NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION_START 0
#define NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION_CANCEL 1

/*
 * NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION_STATE - query this
 * variable to know if a test is currently being run to
 * determine the optimal 3D clock frequencies.  _BUSY means a
 * test is currently running, _IDLE means the test is not running.
 *
 * Note: unless NV_CTRL_GPU_OVERCLOCKING_STATE is set to _MANUAL, the
 * optimal clock detection process is unavailable.
 */

#define NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION_STATE 96 /* R--G */
#define NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION_STATE_IDLE 0
#define NV_CTRL_GPU_OPTIMAL_CLOCK_FREQS_DETECTION_STATE_BUSY 1

/*
 * NV_CTRL_FLATPANEL_CHIP_LOCATION - for the specified display device,
 * report whether the flat panel is driven by the on-chip controller,
 * or a separate controller chip elsewhere on the graphics board.
 * This attribute is only available for flat panels.
 */

#define NV_CTRL_FLATPANEL_CHIP_LOCATION 215 /* R-DG */
#define NV_CTRL_FLATPANEL_CHIP_LOCATION_INTERNAL 0
#define NV_CTRL_FLATPANEL_CHIP_LOCATION_EXTERNAL 1

/*
 * NV_CTRL_FLATPANEL_LINK - report the number of links for a DVI connection, or
 * the main link's active lane count for DisplayPort.
 * This attribute is only available for flat panels.
 */

#define NV_CTRL_FLATPANEL_LINK 216 /* R-DG */
#define NV_CTRL_FLATPANEL_LINK_SINGLE 0
#define NV_CTRL_FLATPANEL_LINK_DUAL 1
#define NV_CTRL_FLATPANEL_LINK_QUAD 3

/*
 * NV_CTRL_FLATPANEL_SIGNAL - for the specified display device, report
 * whether the flat panel is driven by an LVDS, TMDS, or DisplayPort signal.
 * This attribute is only available for flat panels.
 */

#define NV_CTRL_FLATPANEL_SIGNAL 217 /* R-DG */
#define NV_CTRL_FLATPANEL_SIGNAL_LVDS 0
#define NV_CTRL_FLATPANEL_SIGNAL_TMDS 1
#define NV_CTRL_FLATPANEL_SIGNAL_DISPLAYPORT 2

/*
 * NV_CTRL_USE_HOUSE_SYNC - when TRUE, the server (master) frame lock
 * device will propagate the incoming house sync signal as the outgoing
 * frame lock sync signal.  If the frame lock device cannot detect a
 * frame lock sync signal, it will default to using the internal timings
 * from the GPU connected to the primary connector.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_USE_HOUSE_SYNC 218 /* RW-F */
#define NV_CTRL_USE_HOUSE_SYNC_FALSE 0
#define NV_CTRL_USE_HOUSE_SYNC_TRUE 1

/*
 * NV_CTRL_EDID_AVAILABLE - report if an EDID is available for the
 * specified display device.
 *
 * This attribute may also be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN
 * target.
 */

#define NV_CTRL_EDID_AVAILABLE 219 /* R-DG */
#define NV_CTRL_EDID_AVAILABLE_FALSE 0
#define NV_CTRL_EDID_AVAILABLE_TRUE 1

/*
 * NV_CTRL_FORCE_STEREO - when TRUE, OpenGL will force stereo flipping
 * even when no stereo drawables are visible (if the device is configured
 * to support it, see the "Stereo" X config option).
 * When false, fall back to the default behavior of only flipping when a
 * stereo drawable is visible.
 */

#define NV_CTRL_FORCE_STEREO 220 /* RW- */
#define NV_CTRL_FORCE_STEREO_FALSE 0
#define NV_CTRL_FORCE_STEREO_TRUE 1

/*
 * NV_CTRL_IMAGE_SETTINGS - the image quality setting for OpenGL clients.
 *
 * This setting is only applied to OpenGL clients that are started
 * after this setting is applied.
 */

#define NV_CTRL_IMAGE_SETTINGS 221 /* RW-X */
#define NV_CTRL_IMAGE_SETTINGS_HIGH_QUALITY 0
#define NV_CTRL_IMAGE_SETTINGS_QUALITY 1
#define NV_CTRL_IMAGE_SETTINGS_PERFORMANCE 2
#define NV_CTRL_IMAGE_SETTINGS_HIGH_PERFORMANCE 3

/*
 * NV_CTRL_XINERAMA - return whether xinerama is enabled
 */

#define NV_CTRL_XINERAMA 222 /* R--G */
#define NV_CTRL_XINERAMA_OFF 0
#define NV_CTRL_XINERAMA_ON 1

/*
 * NV_CTRL_XINERAMA_STEREO - when TRUE, OpenGL will allow stereo flipping
 * on multiple X screens configured with Xinerama.
 * When FALSE, flipping is allowed only on one X screen at a time.
 */

#define NV_CTRL_XINERAMA_STEREO 223 /* RW- */
#define NV_CTRL_XINERAMA_STEREO_FALSE 0
#define NV_CTRL_XINERAMA_STEREO_TRUE 1

/*
 * NV_CTRL_BUS_RATE - if the bus type of the specified device is AGP, then
 * NV_CTRL_BUS_RATE returns the configured AGP transfer rate.  If the bus type
 * is PCI Express, then this attribute returns the maximum link width.
 * When this attribute is queried on an X screen target, the bus rate of the
 * GPU driving the X screen is returned.
 */

#define NV_CTRL_BUS_RATE 224 /* R--GI */

/*
 * NV_CTRL_GPU_PCIE_MAX_LINK_WIDTH - returns the maximum
 * PCIe link width, in number of lanes.
 */
#define NV_CTRL_GPU_PCIE_MAX_LINK_WIDTH NV_CTRL_BUS_RATE

/*
 * NV_CTRL_SHOW_SLI_HUD - when TRUE, OpenGL will draw information about the
 * current SLI mode.
 * Renamed this attribute to NV_CTRL_SHOW_SLI_VISUAL_INDICATOR
 */

#define NV_CTRL_SHOW_SLI_HUD NV_CTRL_SHOW_SLI_VISUAL_INDICATOR
#define NV_CTRL_SHOW_SLI_HUD_FALSE NV_CTRL_SHOW_SLI_VISUAL_INDICATOR_FALSE
#define NV_CTRL_SHOW_SLI_HUD_TRUE NV_CTRL_SHOW_SLI_VISUAL_INDICATOR_TRUE

/*
 * NV_CTRL_SHOW_SLI_VISUAL_INDICATOR - when TRUE, OpenGL will draw information
 * about the current SLI mode.
 */

#define NV_CTRL_SHOW_SLI_VISUAL_INDICATOR 225 /* RW-X */
#define NV_CTRL_SHOW_SLI_VISUAL_INDICATOR_FALSE 0
#define NV_CTRL_SHOW_SLI_VISUAL_INDICATOR_TRUE 1

/*
 * NV_CTRL_XV_SYNC_TO_DISPLAY - this control is valid when TwinView and
 * XVideo Sync To VBlank are enabled.
 * It controls which display device will be synched to.
 */

#define NV_CTRL_XV_SYNC_TO_DISPLAY 226 /* RW- */

/*
 * NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT2 - this attribute is only
 * intended to be used to query the ValidValues for
 * NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT for VIDEO_FORMAT values between
 * 31 and 63.  See NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT for details.
 */

#define NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT2 227 /* ---GI */

/*
 * The following is deprecated; use NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT2,
 * instead
 */
#define NV_CTRL_GVO_OUTPUT_VIDEO_FORMAT2 227 /* --- */

/*
 * NV_CTRL_GVO_OVERRIDE_HW_CSC - Override the SDI hardware's Color Space
 * Conversion with the values controlled through
 * XNVCTRLSetGvoColorConversion() and XNVCTRLGetGvoColorConversion().  If
 * this attribute is FALSE, then the values specified through
 * XNVCTRLSetGvoColorConversion() are ignored.
 */

#define NV_CTRL_GVO_OVERRIDE_HW_CSC 228 /* RW- */
#define NV_CTRL_GVO_OVERRIDE_HW_CSC_FALSE 0
#define NV_CTRL_GVO_OVERRIDE_HW_CSC_TRUE 1

/*
 * NV_CTRL_GVO_CAPABILITIES - this read-only attribute describes GVO
 * capabilities that differ between NVIDIA SDI products.  This value
 * is a bitmask where each bit indicates whether that capability is
 * available.
 *
 * APPLY_CSC_IMMEDIATELY - whether the CSC matrix, offset, and scale
 * specified through XNVCTRLSetGvoColorConversion() will take affect
 * immediately, or only after SDI output is disabled and enabled
 * again.
 *
 * APPLY_CSC_TO_X_SCREEN - whether the CSC matrix, offset, and scale
 * specified through XNVCTRLSetGvoColorConversion() will also apply
 * to GVO output of an X screen, or only to OpenGL GVO output, as
 * enabled through the GLX_NV_video_out extension.
 *
 * COMPOSITE_TERMINATION - whether the 75 ohm termination of the
 * SDI composite input signal can be programmed through the
 * NV_CTRL_GVO_COMPOSITE_TERMINATION attribute.
 *
 * SHARED_SYNC_BNC - whether the SDI device has a single BNC
 * connector used for both (SDI & Composite) incoming signals.
 *
 * MULTIRATE_SYNC - whether the SDI device supports synchronization
 * of input and output video modes that match in being odd or even
 * modes (ie, AA.00 Hz modes can be synched to other BB.00 Hz modes and
 * AA.XX Hz can match to BB.YY Hz where .XX and .YY are not .00)
 */

#define NV_CTRL_GVO_CAPABILITIES 229 /* R-- */
#define NV_CTRL_GVO_CAPABILITIES_APPLY_CSC_IMMEDIATELY 0x00000001
#define NV_CTRL_GVO_CAPABILITIES_APPLY_CSC_TO_X_SCREEN 0x00000002
#define NV_CTRL_GVO_CAPABILITIES_COMPOSITE_TERMINATION 0x00000004
#define NV_CTRL_GVO_CAPABILITIES_SHARED_SYNC_BNC 0x00000008
#define NV_CTRL_GVO_CAPABILITIES_MULTIRATE_SYNC 0x00000010
#define NV_CTRL_GVO_CAPABILITIES_ADVANCE_SYNC_SKEW 0x00000020

/*
 * NV_CTRL_GVO_COMPOSITE_TERMINATION - enable or disable 75 ohm
 * termination of the SDI composite input signal.
 */

#define NV_CTRL_GVO_COMPOSITE_TERMINATION 230 /* RW- */
#define NV_CTRL_GVO_COMPOSITE_TERMINATION_ENABLE 1
#define NV_CTRL_GVO_COMPOSITE_TERMINATION_DISABLE 0

/*
 * NV_CTRL_ASSOCIATED_DISPLAY_DEVICES - display device mask indicating
 * which display devices are "associated" with the specified X screen
 * (ie: are available to the X screen for displaying the X screen).
 */

#define NV_CTRL_ASSOCIATED_DISPLAY_DEVICES 231 /* RW- */

/*
 * NV_CTRL_FRAMELOCK_SLAVES - get/set whether the display device(s)
 * given should listen or ignore the master's sync signal.
 *
 * This attribute can only be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU target.  This attribute cannot be
 * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN.
 */

#define NV_CTRL_FRAMELOCK_SLAVES 232 /* RW-G */

/*
 * NV_CTRL_FRAMELOCK_MASTERABLE - Can any of the given display devices
 * be set as master of the frame lock group.  Returns a bitmask of the
 * corresponding display devices that can be set as master.
 *
 * This attribute can only be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU target.  This attribute cannot be
 * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN.
 */

#define NV_CTRL_FRAMELOCK_MASTERABLE 233 /* R-DG */

/*
 * NV_CTRL_PROBE_DISPLAYS - re-probes the hardware to detect what
 * display devices are connected to the GPU or GPU driving the
 * specified X screen.  Returns a display mask.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_PROBE_DISPLAYS 234 /* R--G */

/*
 * NV_CTRL_REFRESH_RATE - Returns the refresh rate of the specified
 * display device in 100 * Hz (ie. to get the refresh rate in Hz, divide
 * the returned value by 100.)
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_REFRESH_RATE 235 /* R-DG */

/*
 * NV_CTRL_GVO_FLIP_QUEUE_SIZE - The Graphics to Video Out interface
 * exposed through NV-CONTROL and the GLX_NV_video_out extension uses
 * an internal flip queue when pbuffers are sent to the video device
 * (via glXSendPbufferToVideoNV()).  The NV_CTRL_GVO_FLIP_QUEUE_SIZE
 * can be used to query and assign the flip queue size.  This
 * attribute is applied to GLX when glXGetVideoDeviceNV() is called by
 * the application.
 */

#define NV_CTRL_GVO_FLIP_QUEUE_SIZE 236 /* RW- */

/*
 * NV_CTRL_CURRENT_SCANLINE - query the current scanline for the
 * specified display device.
 */

#define NV_CTRL_CURRENT_SCANLINE 237 /* R-DG */

/*
 * NV_CTRL_INITIAL_PIXMAP_PLACEMENT - Controls where X pixmaps are initially
 * created.
 *
 * NV_CTRL_INITIAL_PIXMAP_PLACEMENT_FORCE_SYSMEM causes pixmaps to stay in
 * system memory. These pixmaps can't be accelerated by the NVIDIA driver; this
 * will cause blank windows if used with an OpenGL compositing manager.
 * NV_CTRL_INITIAL_PIXMAP_PLACEMENT_SYSMEM creates pixmaps in system memory
 * initially, but allows them to migrate to video memory.
 * NV_CTRL_INITIAL_PIXMAP_PLACEMENT_VIDMEM creates pixmaps in video memory
 * when enough resources are available.
 * NV_CTRL_INITIAL_PIXMAP_PLACEMENT_RESERVED is currently reserved for future
 * use.  Behavior is undefined.
 * NV_CTRL_INITIAL_PIXMAP_PLACEMENT_GPU_SYSMEM creates pixmaps in GPU accessible
 * system memory when enough resources are available.
 */

#define NV_CTRL_INITIAL_PIXMAP_PLACEMENT 238 /* RW- */
#define NV_CTRL_INITIAL_PIXMAP_PLACEMENT_FORCE_SYSMEM 0
#define NV_CTRL_INITIAL_PIXMAP_PLACEMENT_SYSMEM 1
#define NV_CTRL_INITIAL_PIXMAP_PLACEMENT_VIDMEM 2
#define NV_CTRL_INITIAL_PIXMAP_PLACEMENT_RESERVED 3
#define NV_CTRL_INITIAL_PIXMAP_PLACEMENT_GPU_SYSMEM 4

/*
 * NV_CTRL_PCI_BUS - Returns the PCI bus number the specified device is using.
 */

#define NV_CTRL_PCI_BUS 239 /* R--GI */

/*
 * NV_CTRL_PCI_DEVICE - Returns the PCI device number the specified device is
 * using.
 */

#define NV_CTRL_PCI_DEVICE 240 /* R--GI */

/*
 * NV_CTRL_PCI_FUNCTION - Returns the PCI function number the specified device
 * is using.
 */

#define NV_CTRL_PCI_FUNCTION 241 /* R--GI */

/*
 * NV_CTRL_FRAMELOCK_FPGA_REVISION - Querys the FPGA revision of the
 * Frame Lock device.
 *
 * This attribute must be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK target.
 */

#define NV_CTRL_FRAMELOCK_FPGA_REVISION 242 /* R--F */

/*
 * NV_CTRL_MAX_SCREEN_{WIDTH,HEIGHT} - the maximum allowable size, in
 * pixels, of either the specified X screen (if the target_type of the
 * query is an X screen), or any X screen on the specified GPU (if the
 * target_type of the query is a GPU).
 */

#define NV_CTRL_MAX_SCREEN_WIDTH 243  /* R--G */
#define NV_CTRL_MAX_SCREEN_HEIGHT 244 /* R--G */

/*
 * NV_CTRL_MAX_DISPLAYS - the maximum number of display devices that
 * can be driven simultaneously on a GPU (e.g., that can be used in a
 * MetaMode at once).  Note that this does not indicate the maximum
 * number of bits that can be set in NV_CTRL_CONNECTED_DISPLAYS,
 * because more display devices can be connected than are actively in
 * use.
 */

#define NV_CTRL_MAX_DISPLAYS 245 /* R--G */

/*
 * NV_CTRL_DYNAMIC_TWINVIEW - Returns whether or not the screen
 * supports dynamic twinview.
 */

#define NV_CTRL_DYNAMIC_TWINVIEW 246 /* R-- */

/*
 * NV_CTRL_MULTIGPU_DISPLAY_OWNER - Returns the (NV-CONTROL) GPU ID of
 * the GPU that has the display device(s) used for showing the X Screen.
 */

#define NV_CTRL_MULTIGPU_DISPLAY_OWNER 247 /* R-- */

/*
 * NV_CTRL_GPU_SCALING - not supported
 */

#define NV_CTRL_GPU_SCALING 248 /* RWDG */

#define NV_CTRL_GPU_SCALING_TARGET_INVALID 0
#define NV_CTRL_GPU_SCALING_TARGET_FLATPANEL_BEST_FIT 1
#define NV_CTRL_GPU_SCALING_TARGET_FLATPANEL_NATIVE 2

#define NV_CTRL_GPU_SCALING_METHOD_INVALID 0
#define NV_CTRL_GPU_SCALING_METHOD_STRETCHED 1
#define NV_CTRL_GPU_SCALING_METHOD_CENTERED 2
#define NV_CTRL_GPU_SCALING_METHOD_ASPECT_SCALED 3

/*
 * NV_CTRL_FRONTEND_RESOLUTION - not supported
 */

#define NV_CTRL_FRONTEND_RESOLUTION 249 /* R-DG */

/*
 * NV_CTRL_BACKEND_RESOLUTION - not supported
 */

#define NV_CTRL_BACKEND_RESOLUTION 250 /* R-DG */

/*
 * NV_CTRL_FLATPANEL_NATIVE_RESOLUTION - Returns the dimensions of the
 * native resolution of the flat panel as determined by the
 * NVIDIA X Driver.
 *
 * The native resolution is the resolution at which a flat panel
 * must display any image.  All other resolutions must be scaled to this
 * resolution through GPU scaling or the DFP's native scaling capabilities
 * in order to be displayed.
 *
 * This attribute is only valid for flat panel (DFP) display devices.
 *
 * This attribute is a packed integer; the width is packed in the upper
 * 16-bits and the height is packed in the lower 16-bits.
 */

#define NV_CTRL_FLATPANEL_NATIVE_RESOLUTION 251 /* R-DG */

/*
 * NV_CTRL_FLATPANEL_BEST_FIT_RESOLUTION - not supported
 */

#define NV_CTRL_FLATPANEL_BEST_FIT_RESOLUTION 252 /* R-DG */

/*
 * NV_CTRL_GPU_SCALING_ACTIVE - not supported
 */

#define NV_CTRL_GPU_SCALING_ACTIVE 253 /* R-DG */

/*
 * NV_CTRL_DFP_SCALING_ACTIVE - not supported
 */

#define NV_CTRL_DFP_SCALING_ACTIVE 254 /* R-DG */

/*
 * NV_CTRL_FSAA_APPLICATION_ENHANCED - Controls how the NV_CTRL_FSAA_MODE
 * is applied when NV_CTRL_FSAA_APPLICATION_CONTROLLED is set to
 * NV_CTRL_APPLICATION_CONTROLLED_DISABLED.  When
 * NV_CTRL_FSAA_APPLICATION_ENHANCED is _DISABLED, OpenGL applications will
 * be forced to use the FSAA mode specified by NV_CTRL_FSAA_MODE.  when set
 * to _ENABLED, only those applications that have selected a multisample
 * FBConfig will be made to use the NV_CTRL_FSAA_MODE specified.
 *
 * This attribute is ignored when NV_CTRL_FSAA_APPLICATION_CONTROLLED is
 * set to NV_CTRL_FSAA_APPLICATION_CONTROLLED_ENABLED.
 */

#define NV_CTRL_FSAA_APPLICATION_ENHANCED 255 /* RW-X */
#define NV_CTRL_FSAA_APPLICATION_ENHANCED_ENABLED 1
#define NV_CTRL_FSAA_APPLICATION_ENHANCED_DISABLED 0

/*
 * NV_CTRL_FRAMELOCK_SYNC_RATE_4 - This is the refresh rate that the
 * frame lock board is sending to the GPU with 4 digits of precision.
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK.
 */

#define NV_CTRL_FRAMELOCK_SYNC_RATE_4 256 /* R--F */

/*
 * NV_CTRL_GVO_LOCK_OWNER - indicates that the GVO device is available
 * or in use (by GLX or an X screen).
 *
 * The GVO device is locked by GLX when either glXGetVideoDeviceNV
 * (part of GLX_NV_video_out) or glXBindVideoDeviceNV (part of
 * GLX_NV_present_video) is called.  All GVO output resources are
 * locked until released by the GLX_NV_video_out/GLX_NV_present_video
 * client.
 *
 * The GVO device is locked/unlocked by an X screen, when the GVO device is
 * used in a MetaMode on an X screen.
 *
 * When the GVO device is locked, setting of the following GVO NV-CONTROL
 * attributes will not happen immediately and will instead be cached.  The
 * GVO resource will need to be disabled/released and re-enabled/claimed for
 * the values to be flushed. These attributes are:
 *
 *    NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT
 *    NV_CTRL_GVO_DATA_FORMAT
 *    NV_CTRL_GVO_FLIP_QUEUE_SIZE
 */

#define NV_CTRL_GVO_LOCK_OWNER 257 /* R-- */
#define NV_CTRL_GVO_LOCK_OWNER_NONE 0
#define NV_CTRL_GVO_LOCK_OWNER_GLX 1
#define NV_CTRL_GVO_LOCK_OWNER_CLONE /* no longer supported */ 2
#define NV_CTRL_GVO_LOCK_OWNER_X_SCREEN 3

/*
 * NV_CTRL_HWOVERLAY - when a workstation overlay is in use, reports
 * whether the hardware overlay is used, or if the overlay is emulated.
 */

#define NV_CTRL_HWOVERLAY 258 /* R-- */
#define NV_CTRL_HWOVERLAY_FALSE 0
#define NV_CTRL_HWOVERLAY_TRUE 1

/*
 * NV_CTRL_NUM_GPU_ERRORS_RECOVERED - Returns the number of GPU errors
 * occured. This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_NUM_GPU_ERRORS_RECOVERED 259 /* R--- */

/*
 * NV_CTRL_REFRESH_RATE_3 - Returns the refresh rate of the specified
 * display device in 1000 * Hz (ie. to get the refresh rate in Hz, divide
 * the returned value by 1000.)
 *
 * This attribute may be queried through XNVCTRLQueryTargetAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_REFRESH_RATE_3 260 /* R-DG */

/*
 * NV_CTRL_ONDEMAND_VBLANK_INTERRUPTS - if the OnDemandVBlankInterrupts
 * X driver option is set to true, this attribute can be used to
 * determine if on-demand VBlank interrupt control is enabled on the
 * specified GPU, as well as to enable or disable this feature.
 */

#define NV_CTRL_ONDEMAND_VBLANK_INTERRUPTS 261 /* RW-G */
#define NV_CTRL_ONDEMAND_VBLANK_INTERRUPTS_OFF 0
#define NV_CTRL_ONDEMAND_VBLANK_INTERRUPTS_ON 1

/*
 * NV_CTRL_GPU_POWER_SOURCE reports the type of power source
 * of the GPU driving the X screen.
 */

#define NV_CTRL_GPU_POWER_SOURCE 262 /* R--G */
#define NV_CTRL_GPU_POWER_SOURCE_AC 0
#define NV_CTRL_GPU_POWER_SOURCE_BATTERY 1

/*
 * NV_CTRL_GPU_CURRENT_PERFORMANCE_MODE is deprecated
 */

#define NV_CTRL_GPU_CURRENT_PERFORMANCE_MODE 263 /* R--G */
#define NV_CTRL_GPU_CURRENT_PERFORMANCE_MODE_DESKTOP 0
#define NV_CTRL_GPU_CURRENT_PERFORMANCE_MODE_MAXPERF 1

/* NV_CTRL_GLYPH_CACHE - Enables RENDER Glyph Caching to VRAM */

#define NV_CTRL_GLYPH_CACHE 264 /* RW- */
#define NV_CTRL_GLYPH_CACHE_DISABLED 0
#define NV_CTRL_GLYPH_CACHE_ENABLED 1

/*
 * NV_CTRL_GPU_CURRENT_PERFORMANCE_LEVEL reports the current
 * Performance level of the GPU driving the X screen.  Each
 * Performance level has associated NVClock and Mem Clock values.
 */

#define NV_CTRL_GPU_CURRENT_PERFORMANCE_LEVEL 265 /* R--G */

/*
 * NV_CTRL_GPU_ADAPTIVE_CLOCK_STATE reports if Adaptive Clocking
 * is Enabled on the GPU driving the X screen.
 */

#define NV_CTRL_GPU_ADAPTIVE_CLOCK_STATE 266 /* R--G */
#define NV_CTRL_GPU_ADAPTIVE_CLOCK_STATE_DISABLED 0
#define NV_CTRL_GPU_ADAPTIVE_CLOCK_STATE_ENABLED 1

/*
 * NV_CTRL_GVO_OUTPUT_VIDEO_LOCKED - Returns whether or not the GVO output
 * video is locked to the GPU.
 */

#define NV_CTRL_GVO_OUTPUT_VIDEO_LOCKED 267 /* R--- */
#define NV_CTRL_GVO_OUTPUT_VIDEO_LOCKED_FALSE 0
#define NV_CTRL_GVO_OUTPUT_VIDEO_LOCKED_TRUE 1

/*
 * NV_CTRL_GVO_SYNC_LOCK_STATUS - Returns whether or not the GVO device
 * is locked to the input ref signal.  If the sync mode is set to
 * NV_CTRL_GVO_SYNC_MODE_GENLOCK, then this returns the genlock
 * sync status, and if the sync mode is set to NV_CTRL_GVO_SYNC_MODE_FRAMELOCK,
 * then this reports the frame lock status.
 */

#define NV_CTRL_GVO_SYNC_LOCK_STATUS 268 /* R--- */
#define NV_CTRL_GVO_SYNC_LOCK_STATUS_UNLOCKED 0
#define NV_CTRL_GVO_SYNC_LOCK_STATUS_LOCKED 1

/*
 * NV_CTRL_GVO_ANC_TIME_CODE_GENERATION - Allows SDI device to generate
 * time codes in the ANC region of the SDI video output stream.
 */

#define NV_CTRL_GVO_ANC_TIME_CODE_GENERATION 269 /* RW-- */
#define NV_CTRL_GVO_ANC_TIME_CODE_GENERATION_DISABLE 0
#define NV_CTRL_GVO_ANC_TIME_CODE_GENERATION_ENABLE 1

/*
 * NV_CTRL_GVO_COMPOSITE - Enables/Disables SDI compositing.  This attribute
 * is only available when an SDI input source is detected and is in genlock
 * mode.
 */

#define NV_CTRL_GVO_COMPOSITE 270 /* RW-- */
#define NV_CTRL_GVO_COMPOSITE_DISABLE 0
#define NV_CTRL_GVO_COMPOSITE_ENABLE 1

/*
 * NV_CTRL_GVO_COMPOSITE_ALPHA_KEY - When compositing is enabled, this
 * enables/disables alpha blending.
 */

#define NV_CTRL_GVO_COMPOSITE_ALPHA_KEY 271 /* RW-- */
#define NV_CTRL_GVO_COMPOSITE_ALPHA_KEY_DISABLE 0
#define NV_CTRL_GVO_COMPOSITE_ALPHA_KEY_ENABLE 1

/*
 * NV_CTRL_GVO_COMPOSITE_LUMA_KEY_RANGE - Set the values of a luma
 * channel range.  This is a packed int that has the following format
 * (in order of high-bits to low bits):
 *
 * Range # (11 bits), (Enabled 1 bit), min value (10 bits), max value (10 bits)
 *
 * To query the current values, pass the range # throught the display_mask
 * variable.
 */

#define NV_CTRL_GVO_COMPOSITE_LUMA_KEY_RANGE 272 /* RW-- */

#define NV_CTRL_GVO_COMPOSITE_MAKE_RANGE(range, enable, min, max)            \
    ((((min)&0x3FF) << 0) | (((max)&0x3FF) << 10) | (((enable)&0x1) << 20) | \
     (((range)&0x7FF) << 21))

#define NV_CTRL_GVO_COMPOSITE_GET_RANGE(val, range, enable, min, max) \
    (min)    = ((val) >> 0) & 0x3FF;                                  \
    (max)    = ((val) >> 10) & 0x3FF;                                 \
    (enable) = ((val) >> 20) & 0x1;                                   \
    (range)  = ((val) >> 21) & 0x7FF;

/*
 * NV_CTRL_GVO_COMPOSITE_CR_KEY_RANGE - Set the values of a CR
 * channel range.  This is a packed int that has the following format
 * (in order of high-bits to low bits):
 *
 * Range # (11 bits), (Enabled 1 bit), min value (10 bits), max value (10 bits)
 *
 * To query the current values, pass the range # throught he display_mask
 * variable.
 */

#define NV_CTRL_GVO_COMPOSITE_CR_KEY_RANGE 273 /* RW-- */

/*
 * NV_CTRL_GVO_COMPOSITE_CB_KEY_RANGE - Set the values of a CB
 * channel range.  This is a packed int that has the following format
 * (in order of high-bits to low bits):
 *
 * Range # (11 bits), (Enabled 1 bit), min value (10 bits), max value (10 bits)
 *
 * To query the current values, pass the range # throught he display_mask
 * variable.
 */

#define NV_CTRL_GVO_COMPOSITE_CB_KEY_RANGE 274 /* RW-- */

/*
 * NV_CTRL_GVO_COMPOSITE_NUM_KEY_RANGES - Returns the number of ranges
 * available for each channel (Y/Luma, Cr, and Cb.)
 */

#define NV_CTRL_GVO_COMPOSITE_NUM_KEY_RANGES 275 /* R--- */

/*
 * NV_CTRL_SWITCH_TO_DISPLAYS - Can be used to select which displays
 * to switch to (as a hotkey event).
 */

#define NV_CTRL_SWITCH_TO_DISPLAYS 276 /* -W- */

/*
 * NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT - Event that notifies
 * when a notebook lid change occurs (i.e. when the lid is opened or
 * closed.)  This attribute can be queried to retrieve the current
 * notebook lid status (opened/closed.)
 */

#define NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT 277 /* RW- */
#define NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT_CLOSE 0
#define NV_CTRL_NOTEBOOK_DISPLAY_CHANGE_LID_EVENT_OPEN 1

/*
 * NV_CTRL_NOTEBOOK_INTERNAL_LCD - Returns the display device mask of
 * the intenal LCD of a notebook.
 */

#define NV_CTRL_NOTEBOOK_INTERNAL_LCD 278 /* R-- */

/*
 * NV_CTRL_DEPTH_30_ALLOWED - returns whether the NVIDIA X driver supports
 * depth 30 on the specified X screen or GPU.
 */

#define NV_CTRL_DEPTH_30_ALLOWED 279 /* R--G */

/*
 * NV_CTRL_MODE_SET_EVENT This attribute is sent as an event
 * when hotkey, ctrl-alt-+/- or randr event occurs.  Note that
 * This attribute cannot be set or queried and is meant to
 * be received by clients that wish to be notified of when
 * mode set events occur.
 */

#define NV_CTRL_MODE_SET_EVENT 280 /* --- */

/*
 * NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE - the gamma value used by
 * OpenGL when NV_CTRL_OPENGL_AA_LINE_GAMMA is enabled
 */

#define NV_CTRL_OPENGL_AA_LINE_GAMMA_VALUE 281 /* RW-X */

/*
 * NV_CTRL_VCSC_HIGH_PERF_MODE - Is used to both query High Performance Mode
 * status on the Visual Computing System, and also to enable or disable High
 * Performance Mode.
 */

#define NV_CTRL_VCSC_HIGH_PERF_MODE 282 /* RW-V */
#define NV_CTRL_VCSC_HIGH_PERF_MODE_DISABLE 0
#define NV_CTRL_VCSC_HIGH_PERF_MODE_ENABLE 1

/*
 * NV_CTRL_DISPLAYPORT_LINK_RATE - returns the negotiated lane bandwidth of the
 * DisplayPort main link.
 * This attribute is only available for DisplayPort flat panels.
 */

#define NV_CTRL_DISPLAYPORT_LINK_RATE 291 /* R-DG */
#define NV_CTRL_DISPLAYPORT_LINK_RATE_DISABLED 0x0
#define NV_CTRL_DISPLAYPORT_LINK_RATE_1_62GBPS 0x6
#define NV_CTRL_DISPLAYPORT_LINK_RATE_2_70GBPS 0xA

/*
 * NV_CTRL_STEREO_EYES_EXCHANGE - Controls whether or not the left and right
 * eyes of a stereo image are flipped.
 */

#define NV_CTRL_STEREO_EYES_EXCHANGE 292 /* RW-X */
#define NV_CTRL_STEREO_EYES_EXCHANGE_OFF 0
#define NV_CTRL_STEREO_EYES_EXCHANGE_ON 1

/*
 * NV_CTRL_NO_SCANOUT - returns whether the special "NoScanout" mode is
 * enabled on the specified X screen or GPU; for details on this mode,
 * see the description of the "none" value for the "UseDisplayDevice"
 * X configuration option in the NVIDIA driver README.
 */

#define NV_CTRL_NO_SCANOUT 293 /* R--G */
#define NV_CTRL_NO_SCANOUT_DISABLED 0
#define NV_CTRL_NO_SCANOUT_ENABLED 1

/*
 * NV_CTRL_GVO_CSC_CHANGED_EVENT This attribute is sent as an event
 * when the color space conversion matrix has been altered by another
 * client.
 */

#define NV_CTRL_GVO_CSC_CHANGED_EVENT 294 /* --- */

/*
 * NV_CTRL_FRAMELOCK_SLAVEABLE - Returns a bitmask of the display devices
 * that are (currently) allowed to be selected as slave devices for the
 * given GPU
 */

#define NV_CTRL_FRAMELOCK_SLAVEABLE 295 /* R-DG */

/*
 * NV_CTRL_GVO_SYNC_TO_DISPLAY This attribute controls whether or not
 * the non-SDI display device will be sync'ed to the SDI display device
 * (when configured in TwinView, Clone Mode or when using the SDI device
 * with OpenGL).
 */

#define NV_CTRL_GVO_SYNC_TO_DISPLAY 296 /* --- */
#define NV_CTRL_GVO_SYNC_TO_DISPLAY_DISABLE 0
#define NV_CTRL_GVO_SYNC_TO_DISPLAY_ENABLE 1

/*
 * NV_CTRL_X_SERVER_UNIQUE_ID - returns a pseudo-unique identifier for this
 * X server. Intended for use in cases where an NV-CONTROL client communicates
 * with multiple X servers, and wants some level of confidence that two
 * X Display connections correspond to the same or different X servers.
 */

#define NV_CTRL_X_SERVER_UNIQUE_ID 297 /* R--- */

/*
 * NV_CTRL_PIXMAP_CACHE - This attribute controls whether the driver attempts to
 * store video memory pixmaps in a cache.  The cache speeds up allocation and
 * deallocation of pixmaps, but could use more memory than when the cache is
 * disabled.
 */

#define NV_CTRL_PIXMAP_CACHE 298 /* RW-X */
#define NV_CTRL_PIXMAP_CACHE_DISABLE 0
#define NV_CTRL_PIXMAP_CACHE_ENABLE 1

/*
 * NV_CTRL_PIXMAP_CACHE_ROUNDING_SIZE_KB - When the pixmap cache is enabled and
 * there is not enough free space in the cache to fit a new pixmap, the driver
 * will round up to the next multiple of this number of kilobytes when
 * allocating more memory for the cache.
 */

#define NV_CTRL_PIXMAP_CACHE_ROUNDING_SIZE_KB 299 /* RW-X */

/*
 * NV_CTRL_IS_GVO_DISPLAY - returns whether or not a given display is an
 * SDI device.
 */

#define NV_CTRL_IS_GVO_DISPLAY 300 /* R-D */
#define NV_CTRL_IS_GVO_DISPLAY_FALSE 0
#define NV_CTRL_IS_GVO_DISPLAY_TRUE 1

/*
 * NV_CTRL_PCI_ID - Returns the PCI vendor and device ID of the specified
 * device.
 *
 * NV_CTRL_PCI_ID is a "packed" integer attribute; the PCI vendor ID is stored
 * in the upper 16 bits of the integer, and the PCI device ID is stored in the
 * lower 16 bits of the integer.
 */

#define NV_CTRL_PCI_ID 301 /* R--GI */

/*
 * NV_CTRL_GVO_FULL_RANGE_COLOR - Allow full range color data [4-1019]
 * without clamping to [64-940].
 */

#define NV_CTRL_GVO_FULL_RANGE_COLOR 302 /* RW- */
#define NV_CTRL_GVO_FULL_RANGE_COLOR_DISABLED 0
#define NV_CTRL_GVO_FULL_RANGE_COLOR_ENABLED 1

/*
 * NV_CTRL_SLI_MOSAIC_MODE_AVAILABLE - Returns whether or not
 * SLI Mosaic Mode supported.
 */

#define NV_CTRL_SLI_MOSAIC_MODE_AVAILABLE 303 /* R-- */
#define NV_CTRL_SLI_MOSAIC_MODE_AVAILABLE_FALSE 0
#define NV_CTRL_SLI_MOSAIC_MODE_AVAILABLE_TRUE 1

/*
 * NV_CTRL_GVO_ENABLE_RGB_DATA - Allows clients to specify when
 * the GVO board should process colors as RGB when the output data
 * format is one of the NV_CTRL_GVO_DATA_FORMAT_???_PASSTRHU modes.
 */

#define NV_CTRL_GVO_ENABLE_RGB_DATA 304 /* RW- */
#define NV_CTRL_GVO_ENABLE_RGB_DATA_DISABLE 0
#define NV_CTRL_GVO_ENABLE_RGB_DATA_ENABLE 1

/*
 * NV_CTRL_IMAGE_SHARPENING_DEFAULT - Returns default value of
 * Image Sharpening.
 */

#define NV_CTRL_IMAGE_SHARPENING_DEFAULT 305 /* R-- */

/*
 * NV_CTRL_PCI_DOMAIN - Returns the PCI domain number the specified device is
 * using.
 */

#define NV_CTRL_PCI_DOMAIN 306 /* R--GI */

/*
 * NV_CTRL_GVI_NUM_JACKS - Returns the number of input BNC jacks available
 * on a GVI device.
 */

#define NV_CTRL_GVI_NUM_JACKS 307 /* R--I */

/*
 * NV_CTRL_GVI_MAX_LINKS_PER_STREAM - Returns the maximum supported number of
 * links that can be tied to one stream.
 */

#define NV_CTRL_GVI_MAX_LINKS_PER_STREAM 308 /* R--I */

/*
 * NV_CTRL_GVI_DETECTED_CHANNEL_BITS_PER_COMPONENT - Returns the detected
 * number of bits per component (BPC) of data on the given input jack+
 * channel.
 *
 * The jack number should be specified in the lower 16 bits of the
 * "display_mask" parameter, while the channel number should be specified in
 * the upper 16 bits.
 */

#define NV_CTRL_GVI_DETECTED_CHANNEL_BITS_PER_COMPONENT 309 /* R--I */
#define NV_CTRL_GVI_BITS_PER_COMPONENT_UNKNOWN 0
#define NV_CTRL_GVI_BITS_PER_COMPONENT_8 1
#define NV_CTRL_GVI_BITS_PER_COMPONENT_10 2
#define NV_CTRL_GVI_BITS_PER_COMPONENT_12 3

/*
 * NV_CTRL_GVI_REQUESTED_STREAM_BITS_PER_COMPONENT - Specify the number of
 * bits per component (BPC) of data for the captured stream.
 * The stream number should be specified in the "display_mask" parameter.
 *
 * Note: Setting this attribute may also result in the following
 *       NV-CONTROL attributes being reset on the GVI device (to ensure
 *       the configuration remains valid):
 *           NV_CTRL_GVI_REQUESTED_STREAM_COMPONENT_SAMPLING
 */

#define NV_CTRL_GVI_REQUESTED_STREAM_BITS_PER_COMPONENT 310 /* RW-I */

/*
 * NV_CTRL_GVI_DETECTED_CHANNEL_COMPONENT_SAMPLING - Returns the detected
 * sampling format for the input jack+channel.
 *
 * The jack number should be specified in the lower 16 bits of the
 * "display_mask" parameter, while the channel number should be specified in
 * the upper 16 bits.
 */

#define NV_CTRL_GVI_DETECTED_CHANNEL_COMPONENT_SAMPLING 311 /* R--I */
#define NV_CTRL_GVI_COMPONENT_SAMPLING_UNKNOWN 0
#define NV_CTRL_GVI_COMPONENT_SAMPLING_4444 1
#define NV_CTRL_GVI_COMPONENT_SAMPLING_4224 2
#define NV_CTRL_GVI_COMPONENT_SAMPLING_444 3
#define NV_CTRL_GVI_COMPONENT_SAMPLING_422 4
#define NV_CTRL_GVI_COMPONENT_SAMPLING_420 5

/*
 * NV_CTRL_GVI_REQUESTED_COMPONENT_SAMPLING - Specify the sampling format for
 * the captured stream.
 * The possible values are the NV_CTRL_GVI_DETECTED_COMPONENT_SAMPLING
 * constants.
 * The stream number should be specified in the "display_mask" parameter.
 */

#define NV_CTRL_GVI_REQUESTED_STREAM_COMPONENT_SAMPLING 312 /* RW-I */

/*
 * NV_CTRL_GVI_CHROMA_EXPAND - Enable or disable 4:2:2 -> 4:4:4 chroma
 * expansion for the captured stream.  This value is ignored when a
 * COMPONENT_SAMPLING format is selected that does not use chroma subsampling,
 * or if a BITS_PER_COMPONENT value is selected that is not supported.
 * The stream number should be specified in the "display_mask" parameter.
 */

#define NV_CTRL_GVI_REQUESTED_STREAM_CHROMA_EXPAND 313 /* RW-I */
#define NV_CTRL_GVI_CHROMA_EXPAND_FALSE 0
#define NV_CTRL_GVI_CHROMA_EXPAND_TRUE 1

/*
 * NV_CTRL_GVI_DETECTED_CHANNEL_COLOR_SPACE - Returns the detected color space
 * of the input jack+channel.
 *
 * The jack number should be specified in the lower 16 bits of the
 * "display_mask" parameter, while the channel number should be specified in
 * the upper 16 bits.
 */

#define NV_CTRL_GVI_DETECTED_CHANNEL_COLOR_SPACE 314 /* R--I */
#define NV_CTRL_GVI_COLOR_SPACE_UNKNOWN 0
#define NV_CTRL_GVI_COLOR_SPACE_GBR 1
#define NV_CTRL_GVI_COLOR_SPACE_GBRA 2
#define NV_CTRL_GVI_COLOR_SPACE_GBRD 3
#define NV_CTRL_GVI_COLOR_SPACE_YCBCR 4
#define NV_CTRL_GVI_COLOR_SPACE_YCBCRA 5
#define NV_CTRL_GVI_COLOR_SPACE_YCBCRD 6

/*
 * NV_CTRL_GVI_DETECTED_CHANNEL_LINK_ID - Returns the detected link identifier
 * for the given input jack+channel.
 *
 * The jack number should be specified in the lower 16 bits of the
 * "display_mask" parameter, while the channel number should be specified in
 * the upper 16 bits.
 */

#define NV_CTRL_GVI_DETECTED_CHANNEL_LINK_ID 315 /* R--I */
#define NV_CTRL_GVI_LINK_ID_UNKNOWN 0xFFFF

/*
 * NV_CTRL_GVI_DETECTED_CHANNEL_SMPTE352_IDENTIFIER - Returns the 4-byte
 * SMPTE 352 identifier from the given input jack+channel.
 *
 * The jack number should be specified in the lower 16 bits of the
 * "display_mask" parameter, while the channel number should be specified in
 * the upper 16 bits.
 */

#define NV_CTRL_GVI_DETECTED_CHANNEL_SMPTE352_IDENTIFIER 316 /* R--I */

/*
 * NV_CTRL_GVI_GLOBAL_IDENTIFIER - Returns a global identifier for the
 * GVI device.  This identifier can be used to relate GVI devices named
 * in NV-CONTROL with those enumerated in OpenGL.
 */

#define NV_CTRL_GVI_GLOBAL_IDENTIFIER 317 /* R--I */

/*
 * NV_CTRL_FRAMELOCK_SYNC_DELAY_RESOLUTION - Returns the number of nanoseconds
 * that one unit of NV_CTRL_FRAMELOCK_SYNC_DELAY corresponds to.
 */
#define NV_CTRL_FRAMELOCK_SYNC_DELAY_RESOLUTION 318 /* R-- */

/*
 * NV_CTRL_GPU_COOLER_MANUAL_CONTROL - Query the current or set a new
 * cooler control state; the value of this attribute controls the
 * availability of additional cooler control attributes (see below).
 *
 * Note: this attribute is unavailable unless cooler control support
 * has been enabled in the X server (by the user).
 */

#define NV_CTRL_GPU_COOLER_MANUAL_CONTROL 319 /* RW-G */
#define NV_CTRL_GPU_COOLER_MANUAL_CONTROL_FALSE 0
#define NV_CTRL_GPU_COOLER_MANUAL_CONTROL_TRUE 1

/*
 * NV_CTRL_THERMAL_COOLER_LEVEL - Returns cooler's current operating
 * level.
 */

#define NV_CTRL_THERMAL_COOLER_LEVEL 320 /* RW-C */

/* NV_CTRL_THERMAL_COOLER_LEVEL_SET_DEFAULT - Sets default values of
 * cooler.
 */

#define NV_CTRL_THERMAL_COOLER_LEVEL_SET_DEFAULT 321 /* -W-C */

/*
 * NV_CTRL_THERMAL_COOLER_CONTROL_TYPE -
 * Returns a cooler's control signal characteristics.
 * The possible types are restricted, Variable and Toggle.
 */

#define NV_CTRL_THERMAL_COOLER_CONTROL_TYPE 322 /* R--C */
#define NV_CTRL_THERMAL_COOLER_CONTROL_TYPE_NONE 0
#define NV_CTRL_THERMAL_COOLER_CONTROL_TYPE_TOGGLE 1
#define NV_CTRL_THERMAL_COOLER_CONTROL_TYPE_VARIABLE 2

/*
 * NV_CTRL_THERMAL_COOLER_TARGET - Returns objects that cooler cools.
 * Targets may be GPU, Memory, Power Supply or All of these.
 * GPU_RELATED = GPU | MEMORY | POWER_SUPPLY
 *
 */

#define NV_CTRL_THERMAL_COOLER_TARGET 323 /* R--C */
#define NV_CTRL_THERMAL_COOLER_TARGET_NONE 0
#define NV_CTRL_THERMAL_COOLER_TARGET_GPU 1
#define NV_CTRL_THERMAL_COOLER_TARGET_MEMORY 2
#define NV_CTRL_THERMAL_COOLER_TARGET_POWER_SUPPLY 4
#define NV_CTRL_THERMAL_COOLER_TARGET_GPU_RELATED                               \
    (NV_CTRL_THERMAL_COOLER_TARGET_GPU | NV_CTRL_THERMAL_COOLER_TARGET_MEMORY | \
     NV_CTRL_THERMAL_COOLER_TARGET_POWER_SUPPLY)

/*
 * NV_CTRL_GPU_ECC_SUPPORTED - Reports whether ECC is supported by the
 * targeted GPU.
 */
#define NV_CTRL_GPU_ECC_SUPPORTED 324 /* R--G */
#define NV_CTRL_GPU_ECC_SUPPORTED_FALSE 0
#define NV_CTRL_GPU_ECC_SUPPORTED_TRUE 1

/*
 * NV_CTRL_GPU_ECC_STATUS - Returns the current hardware ECC setting
 * for the targeted GPU.
 */
#define NV_CTRL_GPU_ECC_STATUS 325 /* R--G */
#define NV_CTRL_GPU_ECC_STATUS_DISABLED 0
#define NV_CTRL_GPU_ECC_STATUS_ENABLED 1

/*
 * NV_CTRL_GPU_ECC_CONFIGURATION - Reports whether ECC can be configured
 * dynamically for the GPU in question.
 */
#define NV_CTRL_GPU_ECC_CONFIGURATION_SUPPORTED 326 /* R--G */
#define NV_CTRL_GPU_ECC_CONFIGURATION_SUPPORTED_FALSE 0
#define NV_CTRL_GPU_ECC_CONFIGURATION_SUPPORTED_TRUE 1

/*
 * NV_CTRL_GPU_ECC_CONFIGURATION_SETTING - Returns the current ECC
 * configuration setting or specifies new settings.  New settings do not
 * take effect until the next POST.
 */
#define NV_CTRL_GPU_ECC_CONFIGURATION 327 /* RW-G */
#define NV_CTRL_GPU_ECC_CONFIGURATION_DISABLED 0
#define NV_CTRL_GPU_ECC_CONFIGURATION_ENABLED 1

/*
 * NV_CTRL_GPU_ECC_DEFAULT_CONFIGURATION_SETTING - Returns the default
 * ECC configuration setting.
 */
#define NV_CTRL_GPU_ECC_DEFAULT_CONFIGURATION 328 /* R--G */
#define NV_CTRL_GPU_ECC_DEFAULT_CONFIGURATION_DISABLED 0
#define NV_CTRL_GPU_ECC_DEFAULT_CONFIGURATION_ENABLED 1

/*
 * NV_CTRL_GPU_ECC_SINGLE_BIT_ERRORS - Returns the number of single-bit
 * ECC errors detected by the targeted GPU since the last POST.
 * Note: this attribute is a 64-bit integer attribute.
 */
#define NV_CTRL_GPU_ECC_SINGLE_BIT_ERRORS 329 /* R--GQ */

/*
 * NV_CTRL_GPU_ECC_DOUBLE_BIT_ERRORS - Returns the number of double-bit
 * ECC errors detected by the targeted GPU since the last POST.
 * Note: this attribute is a 64-bit integer attribute.
 */
#define NV_CTRL_GPU_ECC_DOUBLE_BIT_ERRORS 330 /* R--GQ */

/*
 * NV_CTRL_GPU_ECC_AGGREGATE_SINGLE_BIT_ERRORS - Returns the number of
 * single-bit ECC errors detected by the targeted GPU since the
 * last counter reset.
 * Note: this attribute is a 64-bit integer attribute.
 */
#define NV_CTRL_GPU_ECC_AGGREGATE_SINGLE_BIT_ERRORS 331 /* R--GQ */

/*
 * NV_CTRL_GPU_ECC_AGGREGATE_DOUBLE_BIT_ERRORS - Returns the number of
 * double-bit ECC errors detected by the targeted GPU since the
 * last counter reset.
 * Note: this attribute is a 64-bit integer attribute.
 */
#define NV_CTRL_GPU_ECC_AGGREGATE_DOUBLE_BIT_ERRORS 332 /* R--GQ */

/*
 * NV_CTRL_GPU_ECC_RESET_ERROR_STATUS - Resets the volatile/aggregate
 * single-bit and double-bit error counters.  This attribute is a
 * bitmask attribute.
 */
#define NV_CTRL_GPU_ECC_RESET_ERROR_STATUS 333 /* -W-G */
#define NV_CTRL_GPU_ECC_RESET_ERROR_STATUS_VOLATILE 0x00000001
#define NV_CTRL_GPU_ECC_RESET_ERROR_STATUS_AGGREGATE 0x00000002

/*
 * NV_CTRL_GPU_POWER_MIZER_MODE - Provides a hint to the driver
 * as to how to manage the performance of the GPU.
 *
 * ADAPTIVE                     - adjust GPU clocks based on GPU
 *                                utilization
 * PREFER_MAXIMUM_PERFORMANCE   - raise GPU clocks to favor
 *                                maximum performance, to the extent
 *                                that thermal and other constraints
 *                                allow
 */
#define NV_CTRL_GPU_POWER_MIZER_MODE 334 /* RW-G */
#define NV_CTRL_GPU_POWER_MIZER_MODE_ADAPTIVE 0
#define NV_CTRL_GPU_POWER_MIZER_MODE_PREFER_MAXIMUM_PERFORMANCE 1

/*
 * NV_CTRL_GVI_SYNC_OUTPUT_FORMAT - Returns the output sync signal
 * from the GVI device.
 */

#define NV_CTRL_GVI_SYNC_OUTPUT_FORMAT 335 /* R--I */

/*
 * NV_CTRL_GVI_MAX_CHANNELS_PER_JACK  - Returns the maximum
 * supported number of (logical) channels within a single physical jack of
 * a GVI device.  For most SDI video formats, there is only one channel
 * (channel 0).  But for 3G video formats (as specified in SMPTE 425),
 * as an example, there are two channels (channel 0 and channel 1) per
 * physical jack.
 */

#define NV_CTRL_GVI_MAX_CHANNELS_PER_JACK 336 /* R--I */

/*
 * NV_CTRL_GVI_MAX_STREAMS  - Returns the maximum number of streams
 * that can be configured on the GVI device.
 */

#define NV_CTRL_GVI_MAX_STREAMS 337 /* R--I */

/*
 * NV_CTRL_GVI_NUM_CAPTURE_SURFACES - The GVI interface exposed through
 * NV-CONTROL and the GLX_NV_video_input extension uses internal capture
 * surfaces when frames are read from the GVI device.  The
 * NV_CTRL_GVI_NUM_CAPTURE_SURFACES can be used to query and assign the
 * number of capture surfaces.  This attribute is applied when
 * glXBindVideoCaptureDeviceNV() is called by the application.
 *
 * A lower number of capture surfaces will mean less video memory is used,
 * but can result in frames being dropped if the application cannot keep up
 * with the capture device.  A higher number will prevent frames from being
 * dropped, making capture more reliable but will consume move video memory.
 */
#define NV_CTRL_GVI_NUM_CAPTURE_SURFACES 338 /* RW-I */

/*
 * NV_CTRL_OVERSCAN_COMPENSATION - not supported
 */
#define NV_CTRL_OVERSCAN_COMPENSATION 339 /* RWDG */

/*
 * NV_CTRL_GPU_PCIE_GENERATION - Reports the current PCIe generation.
 */
#define NV_CTRL_GPU_PCIE_GENERATION 341 /* R--GI */
#define NV_CTRL_GPU_PCIE_GENERATION1 0x00000001
#define NV_CTRL_GPU_PCIE_GENERATION2 0x00000002
#define NV_CTRL_GPU_PCIE_GENERATION3 0x00000003

/*
 * NV_CTRL_GVI_BOUND_GPU - Returns the NV_CTRL_TARGET_TYPE_GPU target_id of
 * the GPU currently bound to the GVI device.  Returns -1 if no GPU is
 * currently bound to the GVI device.
 */
#define NV_CTRL_GVI_BOUND_GPU 342 /* R--I */

/*
 * NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT3 - this attribute is only
 * intended to be used to query the ValidValues for
 * NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT for VIDEO_FORMAT values between
 * 64 and 95.  See NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT for details.
 */

#define NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT3 343 /* ---GI */

/*
 * NV_CTRL_ACCELERATE_TRAPEZOIDS - Toggles RENDER Trapezoid acceleration
 */

#define NV_CTRL_ACCELERATE_TRAPEZOIDS 344 /* RW- */
#define NV_CTRL_ACCELERATE_TRAPEZOIDS_DISABLE 0
#define NV_CTRL_ACCELERATE_TRAPEZOIDS_ENABLE 1

/*
 * NV_CTRL_GPU_CORES - Returns number of GPU cores supported by the graphics
 * pipeline.
 */

#define NV_CTRL_GPU_CORES 345 /* R--G */

/*
 * NV_CTRL_GPU_MEMORY_BUS_WIDTH - Returns memory bus bandwidth on the associated
 * subdevice.
 */

#define NV_CTRL_GPU_MEMORY_BUS_WIDTH 346 /* R--G */

/*
 * NV_CTRL_GVI_TEST_MODE - This attribute controls the GVI test mode.  When
 * enabled, the GVI device will generate fake data as quickly as possible.  All
 * GVI settings are still valid when this is enabled (e.g., the requested video
 * format is honored and sets the video size).
 * This may be used to test the pipeline.
 */

#define NV_CTRL_GVI_TEST_MODE 347 /* R--I */
#define NV_CTRL_GVI_TEST_MODE_DISABLE 0
#define NV_CTRL_GVI_TEST_MODE_ENABLE 1

/*
 * NV_CTRL_COLOR_SPACE - This option sets color space of the video
 * signal.
 */
#define NV_CTRL_COLOR_SPACE 348 /* RWDG */
#define NV_CTRL_COLOR_SPACE_RGB 0
#define NV_CTRL_COLOR_SPACE_YCbCr422 1
#define NV_CTRL_COLOR_SPACE_YCbCr444 2

/*
 * NV_CTRL_COLOR_RANGE - This option sets color range of the video
 * signal.
 */
#define NV_CTRL_COLOR_RANGE 349 /* RWDG */
#define NV_CTRL_COLOR_RANGE_FULL 0
#define NV_CTRL_COLOR_RANGE_LIMITED 1

/*
 * NV_CTRL_GPU_SCALING_DEFAULT_TARGET - not supported
 *
 * NV_CTRL_GPU_SCALING_DEFAULT_METHOD - not supported
 */
#define NV_CTRL_GPU_SCALING_DEFAULT_TARGET 350 /* R-DG */
#define NV_CTRL_GPU_SCALING_DEFAULT_METHOD 351 /* R-DG */

/*
 * NV_CTRL_DITHERING_MODE - Controls the dithering mode, when
 * NV_CTRL_CURRENT_DITHERING is Enabled.
 *
 * AUTO: allow the driver to choose the dithering mode automatically.
 *
 * DYNAMIC_2X2: use a 2x2 matrix to dither from the GPU's pixel
 * pipeline to the bit depth of the flat panel.  The matrix values
 * are changed from frame to frame.
 *
 * STATIC_2X2: use a 2x2 matrix to dither from the GPU's pixel
 * pipeline to the bit depth of the flat panel.  The matrix values
 * do not change from frame to frame.
 *
 * TEMPORAL: use a pseudorandom value from a uniform distribution calculated at
 * every pixel to achieve stochastic dithering.  This method produces a better
 * visual result than 2x2 matrix approaches.
 */
#define NV_CTRL_DITHERING_MODE 352 /* RWDG */
#define NV_CTRL_DITHERING_MODE_AUTO 0
#define NV_CTRL_DITHERING_MODE_DYNAMIC_2X2 1
#define NV_CTRL_DITHERING_MODE_STATIC_2X2 2
#define NV_CTRL_DITHERING_MODE_TEMPORAL 3

/*
 * NV_CTRL_CURRENT_DITHERING - Returns the current dithering state.
 */
#define NV_CTRL_CURRENT_DITHERING 353 /* R-DG */
#define NV_CTRL_CURRENT_DITHERING_DISABLED 0
#define NV_CTRL_CURRENT_DITHERING_ENABLED 1

/*
 * NV_CTRL_CURRENT_DITHERING_MODE - Returns the current dithering
 * mode.
 */
#define NV_CTRL_CURRENT_DITHERING_MODE 354 /* R-DG */
#define NV_CTRL_CURRENT_DITHERING_MODE_NONE 0
#define NV_CTRL_CURRENT_DITHERING_MODE_DYNAMIC_2X2 1
#define NV_CTRL_CURRENT_DITHERING_MODE_STATIC_2X2 2
#define NV_CTRL_CURRENT_DITHERING_MODE_TEMPORAL 3

/*
 * NV_CTRL_THERMAL_SENSOR_READING - Returns the thermal sensor's current
 * reading.
 */
#define NV_CTRL_THERMAL_SENSOR_READING 355 /* R--S */

/*
 * NV_CTRL_THERMAL_SENSOR_PROVIDER - Returns the hardware device that
 * provides the thermal sensor.
 */
#define NV_CTRL_THERMAL_SENSOR_PROVIDER 356 /* R--S */
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_NONE 0
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_GPU_INTERNAL 1
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_ADM1032 2
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_ADT7461 3
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_MAX6649 4
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_MAX1617 5
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_LM99 6
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_LM89 7
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_LM64 8
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_G781 9
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_ADT7473 10
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_SBMAX6649 11
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_VBIOSEVT 12
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_OS 13
#define NV_CTRL_THERMAL_SENSOR_PROVIDER_UNKNOWN 0xFFFFFFFF

/*
 * NV_CTRL_THERMAL_SENSOR_TARGET - Returns what hardware component
 * the thermal sensor is measuring.
 */
#define NV_CTRL_THERMAL_SENSOR_TARGET 357 /* R--S */
#define NV_CTRL_THERMAL_SENSOR_TARGET_NONE 0
#define NV_CTRL_THERMAL_SENSOR_TARGET_GPU 1
#define NV_CTRL_THERMAL_SENSOR_TARGET_MEMORY 2
#define NV_CTRL_THERMAL_SENSOR_TARGET_POWER_SUPPLY 4
#define NV_CTRL_THERMAL_SENSOR_TARGET_BOARD 8
#define NV_CTRL_THERMAL_SENSOR_TARGET_UNKNOWN 0xFFFFFFFF

/*
 * NV_CTRL_SHOW_MULTIGPU_VISUAL_INDICATOR - when TRUE, OpenGL will
 * draw information about the current MULTIGPU mode.
 */
#define NV_CTRL_SHOW_MULTIGPU_VISUAL_INDICATOR 358 /* RW-X */
#define NV_CTRL_SHOW_MULTIGPU_VISUAL_INDICATOR_FALSE 0
#define NV_CTRL_SHOW_MULTIGPU_VISUAL_INDICATOR_TRUE 1

/*
 * NV_CTRL_GPU_CURRENT_PROCESSOR_CLOCK_FREQS - Returns GPU's processor
 * clock freqs.
 */
#define NV_CTRL_GPU_CURRENT_PROCESSOR_CLOCK_FREQS 359 /* RW-G */

/*
 * NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS - query the flags (various information
 * for the specified NV_CTRL_GVIO_VIDEO_FORMAT_*.  So that this can be
 * queried with existing interfaces, the video format should be specified
 * in the display_mask field; eg:
 *
 * XNVCTRLQueryTargetAttribute(dpy,
 *                             NV_CTRL_TARGET_TYPE_GVI,
 *                             gvi,
 *                             NV_CTRL_GVIO_VIDEO_FORMAT_720P_60_00_SMPTE296,
 *                             NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS,
 *                             &flags);
 *
 * Note: The NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_3G_1080P_NO_12BPC flag is set
 *       for those 1080P 3G modes (level A and B) that do not support
 *       12 bits per component (when configuring a GVI stream.)
 */

#define NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS 360 /* R--I */
#define NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_NONE 0x00000000
#define NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_INTERLACED 0x00000001
#define NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_PROGRESSIVE 0x00000002
#define NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_PSF 0x00000004
#define NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_3G_LEVEL_A 0x00000008
#define NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_3G_LEVEL_B 0x00000010
#define NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_3G \
    ((NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_3G_LEVEL_A) | (NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_3G_LEVEL_B))
#define NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS_3G_1080P_NO_12BPC 0x00000020

/*
 * NV_CTRL_GPU_PCIE_MAX_LINK_SPEED - returns maximum PCIe link speed,
 * in gigatransfers per second (GT/s).
 */

#define NV_CTRL_GPU_PCIE_MAX_LINK_SPEED 361 /* R--GI */

/*
 * NV_CTRL_3D_VISION_PRO_RESET_TRANSCEIVER_TO_FACTORY_SETTINGS - Resets the
 * 3D Vision Pro transceiver to its factory settings.
 */
#define NV_CTRL_3D_VISION_PRO_RESET_TRANSCEIVER_TO_FACTORY_SETTINGS 363 /* -W-T */

/*
 * NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL - Controls the channel that is
 * currently used by the 3D Vision Pro transceiver.
 */
#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL 364 /* RW-T */

/*
 * NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE - Controls the mode in which the
 * 3D Vision Pro transceiver operates.
 * NV_CTRL_3D_VISION_PRO_TM_LOW_RANGE is bidirectional
 * NV_CTRL_3D_VISION_PRO_TM_MEDIUM_RANGE is bidirectional
 * NV_CTRL_3D_VISION_PRO_TM_HIGH_RANGE may be bidirectional just up to a
 *     given range, and unidirectional beyond it
 * NV_CTRL_3D_VISION_PRO_TM_COUNT is the total number of
 *     3D Vision Pro transceiver modes
 */
#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE 365 /* RW-T */
#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE_INVALID 0
#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE_LOW_RANGE 1
#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE_MEDIUM_RANGE 2
#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE_HIGH_RANGE 3
#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE_COUNT 4

/*
 * NV_CTRL_SYNCHRONOUS_PALETTE_UPDATES - controls whether updates to the color
 * lookup table (LUT) are synchronous with respect to X rendering.  For example,
 * if an X client sends XStoreColors followed by XFillRectangle, the driver will
 * guarantee that the FillRectangle request is not processed until after the
 * updated LUT colors are actually visible on the screen if
 * NV_CTRL_SYNCHRONOUS_PALETTE_UPDATES is enabled.  Otherwise, the rendering may
 * occur first.
 *
 * This makes a difference for applications that use the LUT to animate, such as
 * XPilot.  If you experience flickering in applications that use LUT
 * animations, try enabling this attribute.
 *
 * When synchronous updates are enabled, XStoreColors requests will be processed
 * at your screen's refresh rate.
 */

#define NV_CTRL_SYNCHRONOUS_PALETTE_UPDATES 367 /* RWDG */
#define NV_CTRL_SYNCHRONOUS_PALETTE_UPDATES_DISABLE 0
#define NV_CTRL_SYNCHRONOUS_PALETTE_UPDATES_ENABLE 1

/*
 * NV_CTRL_DITHERING_DEPTH - Controls the dithering depth when
 * NV_CTRL_CURRENT_DITHERING is ENABLED.  Some displays connected
 * to the GPU via the DVI or LVDS interfaces cannot display the
 * full color range of ten bits per channel, so the GPU will
 * dither to either 6 or 8 bits per channel.
 */
#define NV_CTRL_DITHERING_DEPTH 368 /* RWDG */
#define NV_CTRL_DITHERING_DEPTH_AUTO 0
#define NV_CTRL_DITHERING_DEPTH_6_BITS 1
#define NV_CTRL_DITHERING_DEPTH_8_BITS 2

/*
 * NV_CTRL_CURRENT_DITHERING_DEPTH - Returns the current dithering
 * depth value.
 */
#define NV_CTRL_CURRENT_DITHERING_DEPTH 369 /* R-DG */
#define NV_CTRL_CURRENT_DITHERING_DEPTH_NONE 0
#define NV_CTRL_CURRENT_DITHERING_DEPTH_6_BITS 1
#define NV_CTRL_CURRENT_DITHERING_DEPTH_8_BITS 2

/*
 * NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_FREQUENCY - Returns the
 * frequency of the channel(in kHz) of the 3D Vision Pro transceiver.
 * Use the display_mask parameter to specify the channel number.
 */
#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_FREQUENCY 370 /* R--T */

/*
 * NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_QUALITY - Returns the
 * quality of the channel(in percentage) of the 3D Vision Pro transceiver.
 * Use the display_mask parameter to specify the channel number.
 */
#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_QUALITY 371 /* R--T */

/*
 * NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_COUNT - Returns the number of
 * channels on the 3D Vision Pro transceiver.
 */
#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_COUNT 372 /* R--T */

/*
 * NV_CTRL_3D_VISION_PRO_PAIR_GLASSES - Puts the 3D Vision Pro
 * transceiver into pairing mode to gather additional glasses.
 * NV_CTRL_3D_VISION_PRO_PAIR_GLASSES_STOP - stops any pairing
 * NV_CTRL_3D_VISION_PRO_PAIR_GLASSES_BEACON - starts continuous
 *     pairing via beacon mode
 * Any other value, N - Puts the 3D Vision Pro transceiver into
 *     authenticated pairing mode for N seconds.
 */
#define NV_CTRL_3D_VISION_PRO_PAIR_GLASSES 373 /* -W-T */
#define NV_CTRL_3D_VISION_PRO_PAIR_GLASSES_STOP 0
#define NV_CTRL_3D_VISION_PRO_PAIR_GLASSES_BEACON 0xFFFFFFFF

/*
 * NV_CTRL_3D_VISION_PRO_UNPAIR_GLASSES - Tells a specific pair
 * of glasses to unpair. The glasses will "forget" the address
 * of the 3D Vision Pro transceiver to which they have been paired.
 * To unpair all the currently paired glasses, specify
 * the glasses id as 0.
 */
#define NV_CTRL_3D_VISION_PRO_UNPAIR_GLASSES 374 /* -W-T */

/*
 * NV_CTRL_3D_VISION_PRO_DISCOVER_GLASSES - Tells the 3D Vision Pro
 * transceiver about the glasses that have been paired using
 * NV_CTRL_3D_VISION_PRO_PAIR_GLASSES_BEACON. Unless this is done,
 * the 3D Vision Pro transceiver will not know about glasses paired in
 * beacon mode.
 */
#define NV_CTRL_3D_VISION_PRO_DISCOVER_GLASSES 375 /* -W-T */

/*
 * NV_CTRL_3D_VISION_PRO_IDENTIFY_GLASSES - Causes glasses LEDs to
 * flash for a short period of time.
 */
#define NV_CTRL_3D_VISION_PRO_IDENTIFY_GLASSES 376 /* -W-T */

/*
 * NV_CTRL_3D_VISION_PRO_GLASSES_SYNC_CYCLE - Controls the
 * sync cycle duration(in milliseconds) of the glasses.
 * Use the display_mask parameter to specify the glasses id.
 */
#define NV_CTRL_3D_VISION_PRO_GLASSES_SYNC_CYCLE 378 /* RW-T */

/*
 * NV_CTRL_3D_VISION_PRO_GLASSES_MISSED_SYNC_CYCLES - Returns the
 * number of state sync cycles recently missed by the glasses.
 * Use the display_mask parameter to specify the glasses id.
 */
#define NV_CTRL_3D_VISION_PRO_GLASSES_MISSED_SYNC_CYCLES 379 /* R--T */

/*
 * NV_CTRL_3D_VISION_PRO_GLASSES_BATTERY_LEVEL - Returns the
 * battery level(in percentage) of the glasses.
 * Use the display_mask parameter to specify the glasses id.
 */
#define NV_CTRL_3D_VISION_PRO_GLASSES_BATTERY_LEVEL 380 /* R--T */

/*
 * NV_CTRL_GVO_ANC_PARITY_COMPUTATION - Controls the SDI device's computation
 * of the parity bit (bit 8) for ANC data words.
 */

#define NV_CTRL_GVO_ANC_PARITY_COMPUTATION 381 /* RW--- */
#define NV_CTRL_GVO_ANC_PARITY_COMPUTATION_AUTO 0
#define NV_CTRL_GVO_ANC_PARITY_COMPUTATION_ON 1
#define NV_CTRL_GVO_ANC_PARITY_COMPUTATION_OFF 2

/*
 * NV_CTRL_3D_VISION_PRO_GLASSES_PAIR_EVENT - This attribute is sent
 * as an event when glasses get paired in response to pair command
 * from any of the clients.
 */
#define NV_CTRL_3D_VISION_PRO_GLASSES_PAIR_EVENT 382 /* ---T */

/*
 * NV_CTRL_3D_VISION_PRO_GLASSES_UNPAIR_EVENT - This attribute is sent
 * as an event when glasses get unpaired in response to unpair command
 * from any of the clients.
 */
#define NV_CTRL_3D_VISION_PRO_GLASSES_UNPAIR_EVENT 383 /* ---T */

/*
 * NV_CTRL_GPU_PCIE_CURRENT_LINK_WIDTH - returns the current
 * PCIe link width, in number of lanes.
 */
#define NV_CTRL_GPU_PCIE_CURRENT_LINK_WIDTH 384 /* R--GI */

/*
 * NV_CTRL_GPU_PCIE_CURRENT_LINK_SPEED - returns the current
 * PCIe link speed, in megatransfers per second (GT/s).
 */
#define NV_CTRL_GPU_PCIE_CURRENT_LINK_SPEED 385 /* R--GI */

/*
 * NV_CTRL_GVO_AUDIO_BLANKING - specifies whether the GVO device should delete
 * audio ancillary data packets when frames are repeated.
 *
 * When a new frame is not ready in time, the current frame, including all
 * ancillary data packets, is repeated.  When this data includes audio packets,
 * this can result in stutters or clicks.  When this option is enabled, the GVO
 * device will detect when frames are repeated, identify audio ancillary data
 * packets, and mark them for deletion.
 *
 * This option is applied when the GVO device is bound.
 */
#define NV_CTRL_GVO_AUDIO_BLANKING 386 /* RW- */
#define NV_CTRL_GVO_AUDIO_BLANKING_DISABLE 0
#define NV_CTRL_GVO_AUDIO_BLANKING_ENABLE 1

/*
 * NV_CTRL_CURRENT_METAMODE_ID - switch modes to the MetaMode with
 * the specified ID.
 */
#define NV_CTRL_CURRENT_METAMODE_ID 387 /* RW- */

/*
 * NV_CTRL_DISPLAY_ENABLED - Returns whether or not the display device
 * is currently enabled.
 */
#define NV_CTRL_DISPLAY_ENABLED 388 /* R-D */
#define NV_CTRL_DISPLAY_ENABLED_TRUE 1
#define NV_CTRL_DISPLAY_ENABLED_FALSE 0

#define NV_CTRL_LAST_ATTRIBUTE NV_CTRL_DISPLAY_ENABLED

/**************************************************************************/

/*
 * String Attributes:
 *
 * String attributes can be queryied through the XNVCTRLQueryStringAttribute()
 * and XNVCTRLQueryTargetStringAttribute() function calls.
 *
 * String attributes can be set through the XNVCTRLSetStringAttribute()
 * function call.  (There are currently no string attributes that can be
 * set on non-X Screen targets.)
 *
 * Unless otherwise noted, all string attributes can be queried/set using an
 * NV_CTRL_TARGET_TYPE_X_SCREEN target.  Attributes that cannot take an
 * NV_CTRL_TARGET_TYPE_X_SCREEN target also cannot be queried/set through
 * XNVCTRLQueryStringAttribute()/XNVCTRLSetStringAttribute() (Since
 * these assume an X Screen target).
 */

/*
 * NV_CTRL_STRING_PRODUCT_NAME - the GPU product name on which the
 * specified X screen is running.
 *
 * This attribute may be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_STRING_PRODUCT_NAME 0 /* R--G */

/*
 * NV_CTRL_STRING_VBIOS_VERSION - the video bios version on the GPU on
 * which the specified X screen is running.
 */

#define NV_CTRL_STRING_VBIOS_VERSION 1 /* R--G */

/*
 * NV_CTRL_STRING_NVIDIA_DRIVER_VERSION - string representation of the
 * NVIDIA driver version number for the NVIDIA X driver in use.
 */

#define NV_CTRL_STRING_NVIDIA_DRIVER_VERSION 3 /* R--G */

/*
 * NV_CTRL_STRING_DISPLAY_DEVICE_NAME - name of the display device
 * specified in the display_mask argument.
 *
 * This attribute may be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_STRING_DISPLAY_DEVICE_NAME 4 /* R-DG */

/*
 * NV_CTRL_STRING_TV_ENCODER_NAME - name of the TV encoder used by the
 * specified display device; only valid if the display device is a TV.
 */

#define NV_CTRL_STRING_TV_ENCODER_NAME 5 /* R-DG */

/*
 * NV_CTRL_STRING_GVIO_FIRMWARE_VERSION - indicates the version of the
 * Firmware on the GVIO device.
 */

#define NV_CTRL_STRING_GVIO_FIRMWARE_VERSION 8 /* R--I */

/*
 * The following is deprecated; use NV_CTRL_STRING_GVIO_FIRMWARE_VERSION,
 * instead
 */
#define NV_CTRL_STRING_GVO_FIRMWARE_VERSION 8 /* R-- */

/*
 * NV_CTRL_STRING_CURRENT_MODELINE - Return the ModeLine currently
 * being used by the specified display device.
 *
 * This attribute may be queried through XNVCTRLQueryTargetStringAttribute()
 * using an NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 *
 * The ModeLine string may be prepended with a comma-separated list of
 * "token=value" pairs, separated from the ModeLine string by "::".
 * This "token=value" syntax is the same as that used in
 * NV_CTRL_BINARY_DATA_MODELINES
 */

#define NV_CTRL_STRING_CURRENT_MODELINE 9 /* R-DG */

/*
 * NV_CTRL_STRING_ADD_MODELINE - Adds a ModeLine to the specified
 * display device.  The ModeLine is not added if validation fails.
 *
 * The ModeLine string should have the same syntax as a ModeLine in
 * the X configuration file; e.g.,
 *
 * "1600x1200"  229.5  1600 1664 1856 2160  1200 1201 1204 1250  +HSync +VSync
 */

#define NV_CTRL_STRING_ADD_MODELINE 10 /* -WDG */

/*
 * NV_CTRL_STRING_DELETE_MODELINE - Deletes an existing ModeLine
 * from the specified display device.  The currently selected
 * ModeLine cannot be deleted.  (This also means you cannot delete
 * the last ModeLine.)
 *
 * The ModeLine string should have the same syntax as a ModeLine in
 * the X configuration file; e.g.,
 *
 * "1600x1200"  229.5  1600 1664 1856 2160  1200 1201 1204 1250  +HSync +VSync
 */

#define NV_CTRL_STRING_DELETE_MODELINE 11 /* -WDG */

/*
 * NV_CTRL_STRING_CURRENT_METAMODE - Returns the metamode currently
 * being used by the specified X screen.  The MetaMode string has the
 * same syntax as the MetaMode X configuration option, as documented
 * in the NVIDIA driver README.
 *
 * The returned string may be prepended with a comma-separated list of
 * "token=value" pairs, separated from the MetaMode string by "::".
 * This "token=value" syntax is the same as that used in
 * NV_CTRL_BINARY_DATA_METAMODES.
 */

#define NV_CTRL_STRING_CURRENT_METAMODE 12 /* RW-- */
#define NV_CTRL_STRING_CURRENT_METAMODE_VERSION_1 NV_CTRL_STRING_CURRENT_METAMODE

/*
 * NV_CTRL_STRING_ADD_METAMODE - Adds a MetaMode to the specified
 * X Screen.
 *
 * It is recommended to not use this attribute, but instead use
 * NV_CTRL_STRING_OPERATION_ADD_METAMODE.
 */

#define NV_CTRL_STRING_ADD_METAMODE 13 /* -W-- */

/*
 * NV_CTRL_STRING_DELETE_METAMODE - Deletes an existing MetaMode from
 * the specified X Screen.  The currently selected MetaMode cannot be
 * deleted.  (This also means you cannot delete the last MetaMode).
 * The MetaMode string should have the same syntax as the MetaMode X
 * configuration option, as documented in the NVIDIA driver README.
 */

#define NV_CTRL_STRING_DELETE_METAMODE 14 /* -WD-- */

/*
 * NV_CTRL_STRING_VCSC_PRODUCT_NAME - Querys the product name of the
 * VCSC device.
 *
 * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_VCSC target.
 */

#define NV_CTRL_STRING_VCSC_PRODUCT_NAME 15 /* R---V */

/*
 * NV_CTRL_STRING_VCSC_PRODUCT_ID - Querys the product ID of the VCSC device.
 *
 * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_VCSC target.
 */

#define NV_CTRL_STRING_VCSC_PRODUCT_ID 16 /* R---V */

/*
 * NV_CTRL_STRING_VCSC_SERIAL_NUMBER - Querys the unique serial number
 * of the VCS device.
 *
 * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_VCSC target.
 */

#define NV_CTRL_STRING_VCSC_SERIAL_NUMBER 17 /* R---V */

/*
 * NV_CTRL_STRING_VCSC_BUILD_DATE - Querys the date of the VCS device.
 * the returned string is in the following format: "Week.Year"
 *
 * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_VCSC target.
 */

#define NV_CTRL_STRING_VCSC_BUILD_DATE 18 /* R---V */

/*
 * NV_CTRL_STRING_VCSC_FIRMWARE_VERSION - Querys the firmware version
 * of the VCS device.
 *
 * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_VCSC target.
 */

#define NV_CTRL_STRING_VCSC_FIRMWARE_VERSION 19 /* R---V */

/*
 * NV_CTRL_STRING_VCSC_FIRMWARE_REVISION - Querys the firmware revision
 * of the VCS device.
 *
 * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_VCS target.
 */

#define NV_CTRL_STRING_VCSC_FIRMWARE_REVISION 20 /* R---V */

/*
 * NV_CTRL_STRING_VCSC_HARDWARE_VERSION - Querys the hardware version
 * of the VCS device.
 *
 * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_VCSC target.
 */

#define NV_CTRL_STRING_VCSC_HARDWARE_VERSION 21 /* R---V */

/*
 * NV_CTRL_STRING_VCSC_HARDWARE_REVISION - Querys the hardware revision
 * of the VCS device.
 *
 * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_VCSC target.
 */

#define NV_CTRL_STRING_VCSC_HARDWARE_REVISION 22 /* R---V */

/*
 * NV_CTRL_STRING_MOVE_METAMODE - Moves a MetaMode to the specified
 * index location.  The MetaMode must already exist in the X Screen's
 * list of MetaModes (as returned by the NV_CTRL_BINARY_DATA_METAMODES
 * attribute).  If the index is larger than the number of MetaModes in
 * the list, the MetaMode is moved to the end of the list.  The
 * MetaMode string should have the same syntax as the MetaMode X
 * configuration option, as documented in the NVIDIA driver README.

 * The MetaMode string must be prepended with a comma-separated list
 * of "token=value" pairs, separated from the MetaMode string by "::".
 * Currently, the only valid token is "index", which indicates where
 * in the MetaMode list the MetaMode should be moved to.
 *
 * Other tokens may be added in the future.
 *
 * E.g.,
 *  "index=5 :: CRT-0: 1024x768 @1024x768 +0+0"
 */

#define NV_CTRL_STRING_MOVE_METAMODE 23 /* -W-- */

/*
 * NV_CTRL_STRING_VALID_HORIZ_SYNC_RANGES - returns the valid
 * horizontal sync ranges used to perform mode validation for the
 * specified display device.  The ranges are in the same format as the
 * "HorizSync" X config option:
 *
 *   "horizsync-range may be a comma separated list of either discrete
 *   values or ranges of values.  A range of values is two values
 *   separated by a dash."
 *
 * The values are in kHz.
 *
 * Additionally, the string may be prepended with a comma-separated
 * list of "token=value" pairs, separated from the HorizSync string by
 * "::".  Valid tokens:
 *
 *    Token     Value
 *   "source"  "edid"     - HorizSync is from the display device's EDID
 *             "xconfig"  - HorizSync is from the "HorizSync" entry in
 *                          the Monitor section of the X config file
 *             "option"   - HorizSync is from the "HorizSync" NVIDIA X
 *                          config option
 *             "twinview" - HorizSync is from the "SecondMonitorHorizSync"
 *                          NVIDIA X config option
 *             "builtin"  - HorizSync is from NVIDIA X driver builtin
 *                          default values
 *
 * Additional tokens and/or values may be added in the future.
 *
 * Example: "source=edid :: 30.000-62.000"
 */

#define NV_CTRL_STRING_VALID_HORIZ_SYNC_RANGES 24 /* R-DG */

/*
 * NV_CTRL_STRING_VALID_VERT_REFRESH_RANGES - returns the valid
 * vertical refresh ranges used to perform mode validation for the
 * specified display device.  The ranges are in the same format as the
 * "VertRefresh" X config option:
 *
 *   "vertrefresh-range may be a comma separated list of either discrete
 *    values or ranges of values.  A range of values is two values
 *    separated by a dash."
 *
 * The values are in Hz.
 *
 * Additionally, the string may be prepended with a comma-separated
 * list of "token=value" pairs, separated from the VertRefresh string by
 * "::".  Valid tokens:
 *
 *    Token     Value
 *   "source"  "edid"     - VertRefresh is from the display device's EDID
 *             "xconfig"  - VertRefresh is from the "VertRefresh" entry in
 *                          the Monitor section of the X config file
 *             "option"   - VertRefresh is from the "VertRefresh" NVIDIA X
 *                          config option
 *             "twinview" - VertRefresh is from the "SecondMonitorVertRefresh"
 *                          NVIDIA X config option
 *             "builtin"  - VertRefresh is from NVIDIA X driver builtin
 *                          default values
 *
 * Additional tokens and/or values may be added in the future.
 *
 * Example: "source=edid :: 50.000-75.000"
 */

#define NV_CTRL_STRING_VALID_VERT_REFRESH_RANGES 25 /* R-DG */

/*
 * NV_CTRL_STRING_XINERAMA_SCREEN_INFO - returns the physical X Screen's
 * initial position and size (in absolute coordinates) within the Xinerama
 * desktop as the "token=value" string:  "x=#, y=#, width=#, height=#"
 *
 * Querying this attribute returns FALSE if NV_CTRL_XINERAMA is not
 * NV_CTRL_XINERAMA_ON.
 */

#define NV_CTRL_STRING_XINERAMA_SCREEN_INFO 26 /* R--- */

/*
 * NV_CTRL_STRING_TWINVIEW_XINERAMA_INFO_ORDER - used to specify the
 * order that display devices will be returned via Xinerama when
 * nvidiaXineramaInfo is enabled.  Follows the same syntax as the
 * nvidiaXineramaInfoOrder X config option.
 */

#define NV_CTRL_STRING_NVIDIA_XINERAMA_INFO_ORDER 27 /* RW-- */

#define NV_CTRL_STRING_TWINVIEW_XINERAMA_INFO_ORDER \
    NV_CTRL_STRING_NVIDIA_XINERAMA_INFO_ORDER /* for backwards compatibility: */

/*
 * NV_CTRL_STRING_SLI_MODE - returns a string describing the current
 * SLI mode, if any, or FALSE if SLI is not currently enabled.
 *
 * This string should be used for informational purposes only, and
 * should not be used to distinguish between SLI modes, other than to
 * recognize when SLI is disabled (FALSE is returned) or
 * enabled (the returned string is non-NULL and describes the current
 * SLI configuration).
 */

#define NV_CTRL_STRING_SLI_MODE 28 /* R---*/

/*
 * NV_CTRL_STRING_PERFORMANCE_MODES - returns a string with all the
 * performance modes defined for this GPU along with their associated
 * NV Clock and Memory Clock values.
 *
 * Each performance modes are returned as a comma-separated list of
 * "token=value" pairs.  Each set of performance mode tokens are separated
 * by a ";".  Valid tokens:
 *
 *    Token      Value
 *   "perf"      integer   - the Performance level
 *   "nvclock"   integer   - the GPU clocks (in MHz) for the perf level
 *   "memclock"  integer   - the memory clocks (in MHz) for the perf level
 *
 *
 * Example:
 *
 *   perf=0, nvclock=500, memclock=505 ; perf=1, nvclock=650, memclock=505
 *
 * This attribute may be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_STRING_PERFORMANCE_MODES 29 /* R--G */

/*
 * NV_CTRL_STRING_VCSC_FAN_STATUS - returns a string with status of all the
 * fans in the Visual Computing System, if such a query is supported.  Fan
 * information is reported along with its tachometer reading (in RPM) and a
 * flag indicating whether the fan has failed or not.
 *
 * Valid tokens:
 *
 *    Token      Value
 *   "fan"       integer   - the Fan index
 *   "speed"     integer   - the tachometer reading of the fan in rpm
 *   "fail"      integer   - flag to indicate whether the fan has failed
 *
 * Example:
 *
 *   fan=0, speed=694, fail=0 ; fan=1, speed=693, fail=0
 *
 * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_VCSC target.
 *
 */

#define NV_CTRL_STRING_VCSC_FAN_STATUS 30 /* R---V */

/*
 * NV_CTRL_STRING_VCSC_TEMPERATURES - returns a string with all Temperature
 * readings in the Visual Computing System, if such a query is supported.
 * Intake, Exhaust and Board Temperature values are reported in Celcius.
 *
 * Valid tokens:
 *
 *    Token      Value
 *   "intake"    integer   - the intake temperature for the VCS
 *   "exhaust"   integer   - the exhaust temperature for the VCS
 *   "board"     integer   - the board temperature of the VCS
 *
 * Example:
 *
 *   intake=29, exhaust=46, board=41
 *
 * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_VCSC target.
 *
 */

#define NV_CTRL_STRING_VCSC_TEMPERATURES 31 /* R---V */

/*
 * NV_CTRL_STRING_VCSC_PSU_INFO - returns a string with all Power Supply Unit
 * related readings in the Visual Computing System, if such a query is
 * supported.  Current in amperes, Power in watts, Voltage in volts and PSU
 * state may be reported.  Not all PSU types support all of these values, and
 * therefore some readings may be unknown.
 *
 * Valid tokens:
 *
 *    Token      Value
 *   "current"   integer   - the current drawn in amperes by the VCS
 *   "power"     integer   - the power drawn in watts by the VCS
 *   "voltage"   integer   - the voltage reading of the VCS
 *   "state"     integer   - flag to indicate whether PSU is operating normally
 *
 * Example:
 *
 *   current=10, power=15, voltage=unknown, state=normal
 *
 * This attribute must be queried through XNVCTRLQueryTargetStringAttribute()
 * using a NV_CTRL_TARGET_TYPE_VCSC target.
 *
 */

#define NV_CTRL_STRING_VCSC_PSU_INFO 32 /* R---V */

/*
 * NV_CTRL_STRING_GVIO_VIDEO_FORMAT_NAME - query the name for the specified
 * NV_CTRL_GVIO_VIDEO_FORMAT_*.  So that this can be queried with existing
 * interfaces, XNVCTRLQueryStringAttribute() should be used, and the video
 * format specified in the display_mask field; eg:
 *
 * XNVCTRLQueryStringAttribute(dpy,
 *                             screen,
 *                             NV_CTRL_GVIO_VIDEO_FORMAT_720P_60_00_SMPTE296,
 *                             NV_CTRL_GVIO_VIDEO_FORMAT_NAME,
 *                             &name);
 */

#define NV_CTRL_STRING_GVIO_VIDEO_FORMAT_NAME 33 /* R--GI */

/*
 * The following is deprecated; use NV_CTRL_STRING_GVIO_VIDEO_FORMAT_NAME,
 * instead
 */
#define NV_CTRL_STRING_GVO_VIDEO_FORMAT_NAME 33 /* R--- */

/*
 * NV_CTRL_STRING_GPU_CURRENT_CLOCK_FREQS - returns a string with the
 * associated NV Clock, Memory Clock and Processor Clock values.
 *
 * Current valid tokens are "nvclock", "memclock", and "processorclock".
 * Not all tokens will be reported on all GPUs, and additional tokens
 * may be added in the future.
 *
 * Clock values are returned as a comma-separated list of
 * "token=value" pairs.
 * Valid tokens:
 *
 *    Token           Value
 *   "nvclock"        integer - the GPU clocks (in MHz) for the current
 *                              perf level
 *   "memclock"       integer - the memory clocks (in MHz) for the current
 *                              perf level
 *   "processorclock" integer - the processor clocks (in MHz) for the perf level
 *
 *
 * Example:
 *
 *    nvclock=459, memclock=400, processorclock=918
 *
 * This attribute may be queried through XNVCTRLQueryTargetStringAttribute()
 * using an NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_STRING_GPU_CURRENT_CLOCK_FREQS 34 /* RW-G */

/*
 * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_HARDWARE_REVISION - Returns the
 * hardware revision of the 3D Vision Pro transceiver.
 */
#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_HARDWARE_REVISION 35 /* R--T */

/*
 * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_VERSION_A - Returns the
 * firmware version of chip A of the 3D Vision Pro transceiver.
 */
#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_VERSION_A 36 /* R--T */

/*
 * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_DATE_A - Returns the
 * date of the firmware of chip A of the 3D Vision Pro transceiver.
 */
#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_DATE_A 37 /* R--T */

/*
 * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_VERSION_B - Returns the
 * firmware version of chip B of the 3D Vision Pro transceiver.
 */
#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_VERSION_B 38 /* R--T */

/*
 * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_DATE_B - Returns the
 * date of the firmware of chip B of the 3D Vision Pro transceiver.
 */
#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_DATE_B 39 /* R--T */

/*
 * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_ADDRESS - Returns the RF address
 * of the 3D Vision Pro transceiver.
 */
#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_ADDRESS 40 /* R--T */

/*
 * NV_CTRL_STRING_3D_VISION_PRO_GLASSES_FIRMWARE_VERSION_A - Returns the
 * firmware version of chip A of the glasses.
 * Use the display_mask parameter to specify the glasses id.
 */
#define NV_CTRL_STRING_3D_VISION_PRO_GLASSES_FIRMWARE_VERSION_A 41 /* R--T */

/*
 * NV_CTRL_STRING_3D_VISION_PRO_GLASSES_FIRMWARE_DATE_A - Returns the
 * date of the firmware of chip A of the glasses.
 * Use the display_mask parameter to specify the glasses id.
 */
#define NV_CTRL_STRING_3D_VISION_PRO_GLASSES_FIRMWARE_DATE_A 42 /* R--T */

/*
 * NV_CTRL_STRING_3D_VISION_PRO_GLASSES_ADDRESS - Returns the RF address
 * of the glasses.
 * Use the display_mask parameter to specify the glasses id.
 */
#define NV_CTRL_STRING_3D_VISION_PRO_GLASSES_ADDRESS 43 /* R--T */

/*
 * NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME - Controls the name the
 * glasses should use.
 * Use the display_mask parameter to specify the glasses id.
 * Glasses' name should start and end with an alpha-numeric character.
 */
#define NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME 44 /* RW-T */

/*
 * NV_CTRL_STRING_CURRENT_METAMODE_VERSION_2 - Returns the metamode currently
 * being used by the specified X screen.  The MetaMode string has the same
 * syntax as the MetaMode X configuration option, as documented in the NVIDIA
 * driver README.  Also, see NV_CTRL_BINARY_DATA_METAMODES_VERSION_2 for more
 * details on the base syntax.
 *
 * The returned string may also be prepended with a comma-separated list of
 * "token=value" pairs, separated from the MetaMode string by "::".
 */
#define NV_CTRL_STRING_CURRENT_METAMODE_VERSION_2 45 /* RW-- */

/*
 * NV_CTRL_STRING_DISPLAY_NAME_TYPE_BASENAME - Returns a type name for the
 * display device ("CRT", "DFP", or "TV").  However, note that the determination
 * of the name is based on the protocol through which the X driver communicates
 * to the display device.  E.g., if the driver communicates using VGA ,then the
 * basename is "CRT"; if the driver communicates using TMDS, LVDS, or DP, then
 * the name is "DFP".
 */
#define NV_CTRL_STRING_DISPLAY_NAME_TYPE_BASENAME 46 /* R-D- */

/*
 * NV_CTRL_STRING_DISPLAY_NAME_TYPE_ID - Returns the type-based name + ID for
 * the display device, e.g. "CRT-0", "DFP-1", "TV-2".  If this device is a
 * DisplayPort 1.2 device, then this name will also be prepended with the
 * device's port address like so: "DFP-1.0.1.2.3".  See
 * NV_CTRL_STRING_DISPLAY_NAME_TYPE_BASENAME for more information about the
 * construction of type-based names.
 */
#define NV_CTRL_STRING_DISPLAY_NAME_TYPE_ID 47 /* R-D- */

/*
 * NV_CTRL_STRING_DISPLAY_NAME_DP_GUID - Returns the GUID of the DisplayPort
 * display device.  e.g. "DP-GUID-f16a5bde-79f3-11e1-b2ae-8b5a8969ba9c"
 *
 * The display device must be a DisplayPort 1.2 device.
 */
#define NV_CTRL_STRING_DISPLAY_NAME_DP_GUID 48 /* R-D- */

/*
 * NV_CTRL_STRING_DISPLAY_NAME_EDID_HASH - Returns the SHA-1 hash of the
 * display device's EDID in 8-4-4-4-12 UID format. e.g.
 * "DPY-EDID-f16a5bde-79f3-11e1-b2ae-8b5a8969ba9c"
 *
 * The display device must have a valid EDID.
 */
#define NV_CTRL_STRING_DISPLAY_NAME_EDID_HASH 49 /* R-D- */

/*
 * NV_CTRL_STRING_DISPLAY_NAME_TARGET_INDEX - Returns the current NV-CONTROL
 * target ID (name) of the display device.  e.g. "DPY-1", "DPY-4"
 *
 * This name for the display device is not guarenteed to be the same between
 * different runs of the X server.
 */
#define NV_CTRL_STRING_DISPLAY_NAME_TARGET_INDEX 50 /* R-D- */

/*
 * NV_CTRL_STRING_DISPLAY_NAME_RANDR - Returns the RandR output name for the
 * display device.  e.g.  "VGA-1", "DVI-I-0", "DVI-D-3", "LVDS-1", "DP-2",
 * "HDMI-3", "eDP-6".  This name should match  If this device is a DisplayPort
 * 1.2 device, then this name will also be prepended with the device's port
 * address like so: "DVI-I-3.0.1.2.3"
 */
#define NV_CTRL_STRING_DISPLAY_NAME_RANDR 51 /* R-D- */

#define NV_CTRL_STRING_LAST_ATTRIBUTE NV_CTRL_STRING_DISPLAY_NAME_RANDR

/**************************************************************************/

/*
 * Binary Data Attributes:
 *
 * Binary data attributes can be queryied through the XNVCTRLQueryBinaryData()
 * and XNVCTRLQueryTargetBinaryData() function calls.
 *
 * There are currently no binary data attributes that can be set.
 *
 * Unless otherwise noted, all Binary data attributes can be queried
 * using an NV_CTRL_TARGET_TYPE_X_SCREEN target.  Attributes that cannot take
 * an NV_CTRL_TARGET_TYPE_X_SCREEN target also cannot be queried through
 * XNVCTRLQueryBinaryData() (Since an X Screen target is assumed).
 */

/*
 * NV_CTRL_BINARY_DATA_EDID - Returns a display device's EDID information
 * data.
 *
 * This attribute may be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_BINARY_DATA_EDID 0 /* R-DG */

/*
 * NV_CTRL_BINARY_DATA_MODELINES - Returns a display device's supported
 * ModeLines.  ModeLines are returned in a buffer, separated by a single
 * '\0' and terminated by two consecutive '\0' s like so:
 *
 *  "ModeLine 1\0ModeLine 2\0ModeLine 3\0Last ModeLine\0\0"
 *
 * This attribute may be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_GPU or NV_CTRL_TARGET_TYPE_X_SCREEN target.
 *
 * Each ModeLine string may be prepended with a comma-separated list
 * of "token=value" pairs, separated from the ModeLine string with a
 * "::".  Valid tokens:
 *
 *    Token    Value
 *   "source" "xserver"    - the ModeLine is from the core X server
 *            "xconfig"    - the ModeLine was specified in the X config file
 *            "builtin"    - the NVIDIA driver provided this builtin ModeLine
 *            "vesa"       - this is a VESA standard ModeLine
 *            "edid"       - the ModeLine was in the display device's EDID
 *            "nv-control" - the ModeLine was specified via NV-CONTROL
 *
 *   "xconfig-name"        - for ModeLines that were specified in the X config
 *                           file, this is the name the X config file
 *                           gave for the ModeLine.
 *
 * Note that a ModeLine can have several sources; the "source" token
 * can appear multiple times in the "token=value" pairs list.
 * Additional source values may be specified in the future.
 *
 * Additional tokens may be added in the future, so it is recommended
 * that any token parser processing the returned string from
 * NV_CTRL_BINARY_DATA_MODELINES be implemented to gracefully ignore
 * unrecognized tokens.
 *
 * E.g.,
 *
 * "source=xserver, source=vesa, source=edid :: "1024x768_70"  75.0  1024 1048 1184 1328  768 771
 * 777 806  -HSync -VSync"
 * "source=xconfig, xconfig-name=1600x1200_60.00 :: "1600x1200_60_0"  161.0  1600 1704 1880 2160
 * 1200 1201 1204 1242  -HSync +VSync"
 */

#define NV_CTRL_BINARY_DATA_MODELINES 1 /* R-DG */

/*
 * NV_CTRL_BINARY_DATA_METAMODES - Returns an X Screen's supported
 * MetaModes.  MetaModes are returned in a buffer separated by a
 * single '\0' and terminated by two consecutive '\0' s like so:
 *
 *  "MetaMode 1\0MetaMode 2\0MetaMode 3\0Last MetaMode\0\0"
 *
 * The MetaMode string should have the same syntax as the MetaMode X
 * configuration option, as documented in the NVIDIA driver README.

 * Each MetaMode string may be prepended with a comma-separated list
 * of "token=value" pairs, separated from the MetaMode string with
 * "::".  Currently, valid tokens are:
 *
 *    Token        Value
 *   "id"         <number>     - the id of this MetaMode; this is stored in
 *                               the Vertical Refresh field, as viewed
 *                               by the XRandR and XF86VidMode X *
 *                               extensions.
 *
 *   "switchable" "yes"/"no"   - whether this MetaMode may be switched to via
 *                               ctrl-alt-+/-; Implicit MetaModes (see
 *                               the "IncludeImplicitMetaModes" X
 *                               config option), for example, are not
 *                               normally made available through
 *                               ctrl-alt-+/-.
 *
 *   "source"     "xconfig"    - the MetaMode was specified in the X
 *                               config file.
 *                "implicit"   - the MetaMode was implicitly added; see the
 *                               "IncludeImplicitMetaModes" X config option
 *                               for details.
 *                "nv-control" - the MetaMode was added via the NV-CONTROL X
 *                               extension to the currently running X server.
 *                "RandR"      - the MetaMode was modified in response to an
 *                               RandR RRSetCrtcConfig request.
 *
 * Additional tokens may be added in the future, so it is recommended
 * that any token parser processing the returned string from
 * NV_CTRL_BINARY_DATA_METAMODES be implemented to gracefully ignore
 * unrecognized tokens.
 *
 * E.g.,
 *
 *   "id=50, switchable=yes, source=xconfig :: CRT-0: 1024x768 @1024x768 +0+0"
 */

#define NV_CTRL_BINARY_DATA_METAMODES 2 /* R-D- */
#define NV_CTRL_BINARY_DATA_METAMODES_VERSION_1 NV_CTRL_BINARY_DATA_METAMODES

/*
 * NV_CTRL_BINARY_DATA_XSCREENS_USING_GPU - Returns the list of X
 * screens currently driven by the given GPU.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of screens
 *     4 * n   CARD32 screen indices
 *
 * This attribute can only be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_GPU target.  This attribute cannot be
 * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN.
 */

#define NV_CTRL_BINARY_DATA_XSCREENS_USING_GPU 3 /* R-DG */

/*
 * NV_CTRL_BINARY_DATA_GPUS_USED_BY_XSCREEN - Returns the list of GPUs
 * currently in use by the given X screen.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of GPUs
 *     4 * n   CARD32 GPU indices
 */

#define NV_CTRL_BINARY_DATA_GPUS_USED_BY_XSCREEN 4 /* R--- */

/*
 * NV_CTRL_BINARY_DATA_GPUS_USING_FRAMELOCK - Returns the list of
 * GPUs currently connected to the given frame lock board.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of GPUs
 *     4 * n   CARD32 GPU indices
 *
 * This attribute can only be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_FRAMELOCK target.  This attribute cannot be
 * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN.
 */

#define NV_CTRL_BINARY_DATA_GPUS_USING_FRAMELOCK 5 /* R-DF */

/*
 * NV_CTRL_BINARY_DATA_DISPLAY_VIEWPORT - Returns the Display Device's
 * viewport box into the given X Screen (in X Screen coordinates.)
 *
 * The format of the returned data is:
 *
 *     4       CARD32 Offset X
 *     4       CARD32 Offset Y
 *     4       CARD32 Width
 *     4       CARD32 Height
 */

#define NV_CTRL_BINARY_DATA_DISPLAY_VIEWPORT 6 /* R-DG */

/*
 * NV_CTRL_BINARY_DATA_FRAMELOCKS_USED_BY_GPU - Returns the list of
 * Framelock devices currently connected to the given GPU.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of Framelocks
 *     4 * n   CARD32 Framelock indices
 *
 * This attribute can only be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_GPU target.  This attribute cannot be
 * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN.
 */

#define NV_CTRL_BINARY_DATA_FRAMELOCKS_USED_BY_GPU 7 /* R-DG */

/*
 * NV_CTRL_BINARY_DATA_GPUS_USING_VCSC - Returns the list of
 * GPU devices connected to the given VCS.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of GPUs
 *     4 * n   CARD32 GPU indices
 *
 * This attribute can only be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_VCSC target.  This attribute cannot be
 * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN and cannot be queried using
 * a  NV_CTRL_TARGET_TYPE_X_GPU
 */

#define NV_CTRL_BINARY_DATA_GPUS_USING_VCSC 8 /* R-DV */

/*
 * NV_CTRL_BINARY_DATA_VCSCS_USED_BY_GPU - Returns the VCSC device
 * that is controlling the given GPU.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of VCS (always 1)
 *     4 * n   CARD32 VCS indices
 *
 * This attribute can only be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_GPU target.  This attribute cannot be
 * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN
 */

#define NV_CTRL_BINARY_DATA_VCSCS_USED_BY_GPU 9 /* R-DG */

/*
 * NV_CTRL_BINARY_DATA_COOLERS_USED_BY_GPU - Returns the coolers that
 * are cooling the given GPU.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of COOLER
 *     4 * n   CARD32 COOLER indices
 *
 * This attribute can only be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_GPU target.  This attribute cannot be
 * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN
 */

#define NV_CTRL_BINARY_DATA_COOLERS_USED_BY_GPU 10 /* R-DG */

/*
 * NV_CTRL_BINARY_DATA_GPUS_USED_BY_LOGICAL_XSCREEN - Returns the list of
 * GPUs currently driving the given X screen.  If Xinerama is enabled, this
 * will return all GPUs that are driving any X screen.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of GPUs
 *     4 * n   CARD32 GPU indices
 */

#define NV_CTRL_BINARY_DATA_GPUS_USED_BY_LOGICAL_XSCREEN 11 /* R--- */

/*
 * NV_CTRL_BINARY_DATA_THERMAL_SENSORS_USED_BY_GPU - Returns the sensors that
 * are attached to the given GPU.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of SENSOR
 *     4 * n   CARD32 SENSOR indices
 *
 * This attribute can only be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_GPU target.  This attribute cannot be
 * queried using a NV_CTRL_TARGET_TYPE_X_SCREEN
 */

#define NV_CTRL_BINARY_DATA_THERMAL_SENSORS_USED_BY_GPU 12 /* R--G */

/*
 * NV_CTRL_BINARY_DATA_GLASSES_PAIRED_TO_3D_VISION_PRO_TRANSCEIVER - Returns
 * the id of the glasses that are currently paired to the given
 * 3D Vision Pro transceiver.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of glasses
 *     4 * n   CARD32 id of glasses
 *
 * This attribute can only be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER target.
 */
#define NV_CTRL_BINARY_DATA_GLASSES_PAIRED_TO_3D_VISION_PRO_TRANSCEIVER 13 /* R--T */

/*
 * NV_CTRL_BINARY_DATA_DISPLAY_TARGETS - Returns all the display devices
 * currently connected to any GPU on the X server.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of display devices
 *     4 * n   CARD32 display device indices
 *
 * This attribute can only be queried through XNVCTRLQueryTargetBinaryData().
 */

#define NV_CTRL_BINARY_DATA_DISPLAY_TARGETS 14 /* R--- */

/*
 * NV_CTRL_BINARY_DATA_DISPLAYS_CONNECTED_TO_GPU - Returns the list of
 * display devices that are connected to the GPU target.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of display devices
 *     4 * n   CARD32 display device indices
 *
 * This attribute can only be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_GPU target.
 */

#define NV_CTRL_BINARY_DATA_DISPLAYS_CONNECTED_TO_GPU 15 /* R--G */

/*
 * NV_CTRL_BINARY_DATA_METAMODES_VERSION_2  - Returns values similar to
 * NV_CTRL_BINARY_DATA_METAMODES(_VERSION_1) but also returns extended syntax
 * information to indicate a specific display device, as well as other per-
 * display deviceflags as "token=value" pairs.  For example:
 *
 *   "DPY-1: 1280x1024 {Stereo=PassiveLeft},
 *    DPY-2: 1280x1024 {Stereo=PassiveRight},"
 *
 * The display device names have the form "DPY-%d", where the integer
 * part of the name is the NV-CONTROL target ID for that display device
 * for this instance of the X server.  Note that display device NV-CONTROL
 * target IDs are not guaranteed to be the same from one run of the X
 * server to the next.
 */

#define NV_CTRL_BINARY_DATA_METAMODES_VERSION_2 16 /* R-D- */

/*
 * NV_CTRL_BINARY_DATA_DISPLAYS_ENABLED_ON_XSCREEN - Returns the list of
 * display devices that are currently scanning out the X screen target.
 *
 * The format of the returned data is:
 *
 *     4       CARD32 number of display devices
 *     4 * n   CARD32 display device indices
 *
 * This attribute can only be queried through XNVCTRLQueryTargetBinaryData()
 * using a NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

#define NV_CTRL_BINARY_DATA_DISPLAYS_ENABLED_ON_XSCREEN 17 /* R--- */

#define NV_CTRL_BINARY_DATA_LAST_ATTRIBUTE NV_CTRL_BINARY_DATA_DISPLAYS_ENABLED_ON_XSCREEN

/**************************************************************************/

/*
 * String Operation Attributes:
 *
 * These attributes are used with the XNVCTRLStringOperation()
 * function; a string is specified as input, and a string is returned
 * as output.
 *
 * Unless otherwise noted, all attributes can be operated upon using
 * an NV_CTRL_TARGET_TYPE_X_SCREEN target.
 */

/*
 * NV_CTRL_STRING_OPERATION_ADD_METAMODE - provide a MetaMode string
 * as input, and returns a string containing comma-separated list of
 * "token=value" pairs as output.  Currently, the only output token is
 * "id", which indicates the id that was assigned to the MetaMode.
 *
 * All ModeLines referenced in the MetaMode must already exist for
 * each display device (as returned by the
 * NV_CTRL_BINARY_DATA_MODELINES attribute).
 *
 * The MetaMode string should have the same syntax as the MetaMode X
 * configuration option, as documented in the NVIDIA driver README.
 *
 * The input string can optionally be prepended with a string of
 * comma-separated "token=value" pairs, separated from the MetaMode
 * string by "::".  Currently, the only valid token is "index" which
 * indicates the insertion index for the MetaMode.
 *
 * E.g.,
 *
 * Input: "index=5 :: 1600x1200+0+0, 1600x1200+1600+0"
 * Output: "id=58"
 *
 * which causes the MetaMode to be inserted at position 5 in the
 * MetaMode list (all entries after 5 will be shifted down one slot in
 * the list), and the X server's containing mode stores 58 as the
 * VRefresh, so that the MetaMode can be uniquely identifed through
 * XRandR and XF86VidMode.
 */

#define NV_CTRL_STRING_OPERATION_ADD_METAMODE 0

/*
 * NV_CTRL_STRING_OPERATION_GTF_MODELINE - provide as input a string
 * of comma-separated "token=value" pairs, and returns a ModeLine
 * string, computed using the GTF formula using the parameters from
 * the input string.  Valid tokens for the input string are "width",
 * "height", and "refreshrate".
 *
 * E.g.,
 *
 * Input: "width=1600, height=1200, refreshrate=60"
 * Output: "160.96  1600 1704 1880 2160  1200 1201 1204 1242  -HSync +VSync"
 *
 * This operation does not have any impact on any display device's
 * modePool, and the ModeLine is not validated; it is simply intended
 * for generating ModeLines.
 */

#define NV_CTRL_STRING_OPERATION_GTF_MODELINE 1

/*
 * NV_CTRL_STRING_OPERATION_CVT_MODELINE - provide as input a string
 * of comma-separated "token=value" pairs, and returns a ModeLine
 * string, computed using the CVT formula using the parameters from
 * the input string.  Valid tokens for the input string are "width",
 * "height", "refreshrate", and "reduced-blanking".  The
 * "reduced-blanking" argument can be "0" or "1", to enable or disable
 * use of reduced blanking for the CVT formula.
 *
 * E.g.,
 *
 * Input: "width=1600, height=1200, refreshrate=60, reduced-blanking=1"
 * Output: "130.25  1600 1648 1680 1760  1200 1203 1207 1235  +HSync -VSync"
 *
 * This operation does not have any impact on any display device's
 * modePool, and the ModeLine is not validated; it is simply intended
 * for generating ModeLines.
 */

#define NV_CTRL_STRING_OPERATION_CVT_MODELINE 2

/*
 * NV_CTRL_STRING_OPERATION_BUILD_MODEPOOL - build a ModePool for the
 * specified display device on the specified target (either an X
 * screen or a GPU).  This is typically used to generate a ModePool
 * for a display device on a GPU on which no X screens are present.
 *
 * Currently, a display device's ModePool is static for the life of
 * the X server, so XNVCTRLStringOperation will return FALSE if
 * requested to build a ModePool on a display device that already has
 * a ModePool.
 *
 * The string input to BUILD_MODEPOOL may be NULL.  If it is not NULL,
 * then it is interpreted as a double-colon ("::") separated list
 * of "option=value" pairs, where the options and the syntax of their
 * values are the X configuration options that impact the behavior of
 * modePool construction; namely:
 *
 *    "ModeValidation"
 *    "HorizSync"
 *    "VertRefresh"
 *    "FlatPanelProperties"
 *    "TVStandard"
 *    "ExactModeTimingsDVI"
 *    "UseEdidFreqs"
 *
 * An example input string might look like:
 *
 *   "ModeValidation=NoVesaModes :: HorizSync=50-110 :: VertRefresh=50-150"
 *
 * This request currently does not return a string.
 */

#define NV_CTRL_STRING_OPERATION_BUILD_MODEPOOL 3 /* DG */

/*
 * NV_CTRL_STRING_OPERATION_GVI_CONFIGURE_STREAMS - Configure the streams-
 * to-jack+channel topology for a GVI (Graphics capture board).
 *
 * The string input to GVI_CONFIGURE_STREAMS may be NULL.  If this is the
 * case, then the current topology is returned.
 *
 * If the input string to GVI_CONFIGURE_STREAMS is not NULL, the string
 * is interpreted as a semicolon (";") separated list of comma-separated
 * lists of "option=value" pairs that define a stream's composition.  The
 * available options and their values are:
 *
 *   "stream": Defines which stream this comma-separated list describes.
 *             Valid values are the integers between 0 and
 *             NV_CTRL_GVI_NUM_STREAMS-1 (inclusive).
 *
 *   "linkN":  Defines a jack+channel pair to use for the given link N.
 *             Valid options are the string "linkN", where N is an integer
 *             between 0 and NV_CTRL_GVI_MAX_LINKS_PER_STREAM-1 (inclusive).
 *             Valid values for these options are strings of the form
 *             "jackX" and/or "jackX.Y", where X is an integer between 0 and
 *             NV_CTRL_GVI_NUM_JACKS-1 (inclusive), and Y (optional) is an
 *             integer between 0 and NV_CTRL_GVI_MAX_CHANNELS_PER_JACK-1
 *             (inclusive).
 *
 * An example input string might look like:
 *
 *   "stream=0, link0=jack0, link1=jack1; stream=1, link0=jack2.1"
 *
 *   This example specifies two streams, stream 0 and stream 1.  Stream 0
 *   is defined to capture link0 data from the first channel (channel 0) of
 *   BNC jack 0 and link1 data from the first channel of BNC jack 1.  The
 *   second stream (Stream 1) is defined to capture link0 data from channel 1
 *   (second channel) of BNC jack 2.
 *
 * This example shows a possible configuration for capturing 3G input:
 *
 *   "stream=0, link0=jack0.0, link1=jack0.1"
 *
 * Applications should query the following attributes to determine
 * possible combinations:
 *
 *   NV_CTRL_GVI_MAX_STREAMS
 *   NV_CTRL_GVI_MAX_LINKS_PER_STREAM
 *   NV_CTRL_GVI_NUM_JACKS
 *   NV_CTRL_GVI_MAX_CHANNELS_PER_JACK
 *
 * Note: A jack+channel pair can only be tied to one link/stream.
 *
 * Upon successful configuration or querying of this attribute, a string
 * representing the current topology for all known streams on the device
 * will be returned.  On failure, NULL is returned.
 *
 * Note: Setting this attribute may also result in the following
 *       NV-CONTROL attributes being reset on the GVI device (to ensure
 *       the configuration remains valid):
 *           NV_CTRL_GVIO_REQUESTED_VIDEO_FORMAT
 *           NV_CTRL_GVI_REQUESTED_STREAM_BITS_PER_COMPONENT
 *           NV_CTRL_GVI_REQUESTED_STREAM_COMPONENT_SAMPLING
 */

#define NV_CTRL_STRING_OPERATION_GVI_CONFIGURE_STREAMS 4 /* RW-I */

#define NV_CTRL_STRING_OPERATION_LAST_ATTRIBUTE NV_CTRL_STRING_OPERATION_GVI_CONFIGURE_STREAMS

/**************************************************************************/

/*
 * CTRLAttributeValidValuesRec -
 *
 * structure and related defines used by
 * XNVCTRLQueryValidAttributeValues() to describe the valid values of
 * a particular attribute.  The type field will be one of:
 *
 * ATTRIBUTE_TYPE_INTEGER : the attribute is an integer value; there
 * is no fixed range of valid values.
 *
 * ATTRIBUTE_TYPE_BITMASK : the attribute is an integer value,
 * interpretted as a bitmask.
 *
 * ATTRIBUTE_TYPE_BOOL : the attribute is a boolean, valid values are
 * either 1 (on/true) or 0 (off/false).
 *
 * ATTRIBUTE_TYPE_RANGE : the attribute can have any integer value
 * between NVCTRLAttributeValidValues.u.range.min and
 * NVCTRLAttributeValidValues.u.range.max (inclusive).
 *
 * ATTRIBUTE_TYPE_INT_BITS : the attribute can only have certain
 * integer values, indicated by which bits in
 * NVCTRLAttributeValidValues.u.bits.ints are on (for example: if bit
 * 0 is on, then 0 is a valid value; if bit 5 is on, then 5 is a valid
 * value, etc).  This is useful for attributes like NV_CTRL_FSAA_MODE,
 * which can only have certain values, depending on GPU.
 *
 * ATTRIBUTE_TYPE_64BIT_INTEGER : the attribute is a 64 bit integer value;
 * there is no fixed range of valid values.
 *
 * ATTRIBUTE_TYPE_STRING : the attribute is a string value; there is no fixed
 * range of valid values.
 *
 * ATTRIBUTE_TYPE_BINARY_DATA : the attribute is binary data; there is
 * no fixed range of valid values.
 *
 * ATTRIBUTE_TYPE_STRING_OPERATION : the attribute is a string; there is
 * no fixed range of valid values.
 *
 *
 * The permissions field of NVCTRLAttributeValidValuesRec is a bitmask
 * that may contain:
 *
 * ATTRIBUTE_TYPE_READ      - Attribute may be read (queried.)
 * ATTRIBUTE_TYPE_WRITE     - Attribute may be written to (set.)
 * ATTRIBUTE_TYPE_DISPLAY   - Attribute is valid for display target types
 *                            (requires a display_mask if queried via
 *                            a GPU or X screen.)
 * ATTRIBUTE_TYPE_GPU       - Attribute is valid for GPU target types.
 * ATTRIBUTE_TYPE_FRAMELOCK - Attribute is valid for Frame Lock target types.
 * ATTRIBUTE_TYPE_X_SCREEN  - Attribute is valid for X Screen target types.
 * ATTRIBUTE_TYPE_XINERAMA  - Attribute will be made consistent for all
 *                            X Screens when the Xinerama extension is enabled.
 * ATTRIBUTE_TYPE_VCSC      - Attribute is valid for Visual Computing System
 *                            target types.
 * ATTRIBUTE_TYPE_GVI       - Attribute is valid for Graphics Video In target
 *                            types.
 * ATTRIBUTE_TYPE_COOLER    - Attribute is valid for Cooler target types.
 * ATTRIBUTE_TYPE_3D_VISION_PRO_TRANSCEIVER - Attribute is valid for 3D Vision
 *                                            Pro Transceiver target types.
 *
 * See 'Key to Integer Attribute "Permissions"' at the top of this
 * file for a description of what these permission bits mean.
 */

#define ATTRIBUTE_TYPE_UNKNOWN 0
#define ATTRIBUTE_TYPE_INTEGER 1
#define ATTRIBUTE_TYPE_BITMASK 2
#define ATTRIBUTE_TYPE_BOOL 3
#define ATTRIBUTE_TYPE_RANGE 4
#define ATTRIBUTE_TYPE_INT_BITS 5
#define ATTRIBUTE_TYPE_64BIT_INTEGER 6
#define ATTRIBUTE_TYPE_STRING 7
#define ATTRIBUTE_TYPE_BINARY_DATA 8
#define ATTRIBUTE_TYPE_STRING_OPERATION 9

#define ATTRIBUTE_TYPE_READ 0x001
#define ATTRIBUTE_TYPE_WRITE 0x002
#define ATTRIBUTE_TYPE_DISPLAY 0x004
#define ATTRIBUTE_TYPE_GPU 0x008
#define ATTRIBUTE_TYPE_FRAMELOCK 0x010
#define ATTRIBUTE_TYPE_X_SCREEN 0x020
#define ATTRIBUTE_TYPE_XINERAMA 0x040
#define ATTRIBUTE_TYPE_VCSC 0x080
#define ATTRIBUTE_TYPE_GVI 0x100
#define ATTRIBUTE_TYPE_COOLER 0x200
#define ATTRIBUTE_TYPE_THERMAL_SENSOR 0x400
#define ATTRIBUTE_TYPE_3D_VISION_PRO_TRANSCEIVER 0x800

#define ATTRIBUTE_TYPE_ALL_TARGETS                                                  \
    ((ATTRIBUTE_TYPE_DISPLAY) | (ATTRIBUTE_TYPE_GPU) | (ATTRIBUTE_TYPE_FRAMELOCK) | \
     (ATTRIBUTE_TYPE_X_SCREEN) | (ATTRIBUTE_TYPE_VCSC) | (ATTRIBUTE_TYPE_GVI) |     \
     (ATTRIBUTE_TYPE_COOLER) | (ATTRIBUTE_TYPE_THERMAL_SENSOR) |                    \
     (ATTRIBUTE_TYPE_3D_VISION_PRO_TRANSCEIVER))

typedef struct _NVCTRLAttributeValidValues
{
    int type;
    union
    {
        struct
        {
            int64_t min;
            int64_t max;
        } range;
        struct
        {
            unsigned int ints;
        } bits;
    } u;
    unsigned int permissions;
} NVCTRLAttributeValidValuesRec;

typedef struct _NVCTRLAttributePermissions
{
    int type;
    unsigned int permissions;
} NVCTRLAttributePermissionsRec;

/**************************************************************************/

/*
 * NV-CONTROL X event notification.
 *
 * To receive X event notifications dealing with NV-CONTROL, you should
 * call XNVCtrlSelectNotify() with one of the following set as the type
 * of event to receive (see NVCtrlLib.h for more information):
 */

#define ATTRIBUTE_CHANGED_EVENT 0
#define TARGET_ATTRIBUTE_CHANGED_EVENT 1
#define TARGET_ATTRIBUTE_AVAILABILITY_CHANGED_EVENT 2
#define TARGET_STRING_ATTRIBUTE_CHANGED_EVENT 3
#define TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT 4

#endif /* __NVCTRL_H */
