1*1739a20eSAndy Ritger //***************************************************************************** 2*1739a20eSAndy Ritger // 3*1739a20eSAndy Ritger // SPDX-FileCopyrightText: Copyright (c) 2021 NVIDIA CORPORATION & AFFILIATES. All rights reserved. 4*1739a20eSAndy Ritger // SPDX-License-Identifier: MIT 5*1739a20eSAndy Ritger // 6*1739a20eSAndy Ritger // Permission is hereby granted, free of charge, to any person obtaining a 7*1739a20eSAndy Ritger // copy of this software and associated documentation files (the "Software"), 8*1739a20eSAndy Ritger // to deal in the Software without restriction, including without limitation 9*1739a20eSAndy Ritger // the rights to use, copy, modify, merge, publish, distribute, sublicense, 10*1739a20eSAndy Ritger // and/or sell copies of the Software, and to permit persons to whom the 11*1739a20eSAndy Ritger // Software is furnished to do so, subject to the following conditions: 12*1739a20eSAndy Ritger // 13*1739a20eSAndy Ritger // The above copyright notice and this permission notice shall be included in 14*1739a20eSAndy Ritger // all copies or substantial portions of the Software. 15*1739a20eSAndy Ritger // 16*1739a20eSAndy Ritger // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17*1739a20eSAndy Ritger // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18*1739a20eSAndy Ritger // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 19*1739a20eSAndy Ritger // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20*1739a20eSAndy Ritger // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21*1739a20eSAndy Ritger // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 22*1739a20eSAndy Ritger // DEALINGS IN THE SOFTWARE. 23*1739a20eSAndy Ritger // 24*1739a20eSAndy Ritger // File: displayid.h 25*1739a20eSAndy Ritger // 26*1739a20eSAndy Ritger // Purpose: the template for DisplayID parsing (future replacement for EDID) 27*1739a20eSAndy Ritger // 28*1739a20eSAndy Ritger //***************************************************************************** 29*1739a20eSAndy Ritger 30*1739a20eSAndy Ritger 31*1739a20eSAndy Ritger #ifndef __DISPLAYID_H_ 32*1739a20eSAndy Ritger #define __DISPLAYID_H_ 33*1739a20eSAndy Ritger 34*1739a20eSAndy Ritger #include "nvtiming.h" 35*1739a20eSAndy Ritger 36*1739a20eSAndy Ritger // The structures below must be tightly packed, in order to correctly 37*1739a20eSAndy Ritger // overlay on the EDID DisplayID extension block bytes. Both MSVC and 38*1739a20eSAndy Ritger // gcc support the pack() pragma for this. 39*1739a20eSAndy Ritger 40*1739a20eSAndy Ritger #if defined(__GNUC__) || defined(_MSC_VER) 41*1739a20eSAndy Ritger # define __SUPPORTS_PACK_PRAGMA 1 42*1739a20eSAndy Ritger #else 43*1739a20eSAndy Ritger # error "unrecognized compiler: displayid structures must be tightly packed" 44*1739a20eSAndy Ritger #endif 45*1739a20eSAndy Ritger 46*1739a20eSAndy Ritger #ifdef __SUPPORTS_PACK_PRAGMA 47*1739a20eSAndy Ritger #pragma pack(1) 48*1739a20eSAndy Ritger #endif 49*1739a20eSAndy Ritger 50*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_SECTION 51*1739a20eSAndy Ritger { 52*1739a20eSAndy Ritger NvU8 version; // displayid version 53*1739a20eSAndy Ritger NvU8 section_bytes; // length of this displayID section excluding mandatory bytes [0, 251] 54*1739a20eSAndy Ritger 55*1739a20eSAndy Ritger NvU8 product_type; // NVT_DISPLAYID_PROD_X 56*1739a20eSAndy Ritger NvU8 extension_count; 57*1739a20eSAndy Ritger 58*1739a20eSAndy Ritger NvU8 data[NVT_DISPLAYID_SECTION_MAX_SIZE]; // data blocks. Note, the length of this structure may 59*1739a20eSAndy Ritger // exceed valid memory, as DisplayID has variable length 60*1739a20eSAndy Ritger 61*1739a20eSAndy Ritger } DISPLAYID_SECTION; 62*1739a20eSAndy Ritger 63*1739a20eSAndy Ritger #define NVT_DISPLAYID_VER_1_1 0x101 64*1739a20eSAndy Ritger 65*1739a20eSAndy Ritger #define NVT_DISPLAYID_PROD_EXTENSION 0 // Extension (product type not declared) 66*1739a20eSAndy Ritger #define NVT_DISPLAYID_PROD_TEST 1 // Test Structure/Test Equipment 67*1739a20eSAndy Ritger #define NVT_DISPLAYID_PROD_DISPLAY_PANEL 2 // Display Panel, LCD, or PDP module, etc. 68*1739a20eSAndy Ritger #define NVT_DISPLAYID_PROD_STANDALONE_MONITOR 3 // Standalone display device, desktop monitor, TV monitor 69*1739a20eSAndy Ritger #define NVT_DISPLAYID_PROD_RECEIVER 4 // Television receiver or display product capable of RF signals 70*1739a20eSAndy Ritger #define NVT_DISPLAYID_PROD_REPEATER 5 // Repeater/translator that is not intended as display device 71*1739a20eSAndy Ritger #define NVT_DISPLAYID_PROD_DIRECT_DRIVE 6 // Direct Drive monitor 72*1739a20eSAndy Ritger #define NVT_DISPLAYID_PROD_MAX_NUMBER 6 // max product number 73*1739a20eSAndy Ritger 74*1739a20eSAndy Ritger 75*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_DATA_BLOCK_HEADER 76*1739a20eSAndy Ritger { 77*1739a20eSAndy Ritger NvU8 type; // identification 78*1739a20eSAndy Ritger NvU8 revision; 79*1739a20eSAndy Ritger NvU8 data_bytes; // number of payload bytes [0, 248] 80*1739a20eSAndy Ritger 81*1739a20eSAndy Ritger } DISPLAYID_DATA_BLOCK_HEADER; 82*1739a20eSAndy Ritger 83*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_PRODUCT_IDENTITY 0 // Product Identification block 84*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_DISPLAY_PARAM 1 // Display Parameters block 85*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_COLOR_CHAR 2 // Color Characteristics block 86*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_TIMING_1 3 // Type 1 Detailed Timing block 87*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_TIMING_2 4 // Type 2 Detailed Timing block 88*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_TIMING_3 5 // Type 3 Short Timing block 89*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_TIMING_4 6 // Type 4 DMT ID Timing block 90*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_TIMING_VESA 7 // VESA Standard Timing block 91*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_TIMING_CEA 8 // CEA Standard Timing block 92*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_RANGE_LIMITS 9 // Video Timing Range Limits block 93*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_SERIAL_NUMBER 10 // Product Serial Number block 94*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_ASCII_STRING 11 // General Purpose ASCII String block 95*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_DEVICE_DATA 12 // Display Device Data block 96*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_INTERFACE_POWER 13 // Interface Power Sequencing block 97*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_TRANSFER_CHAR 14 // Transfer Characteristics block 98*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_DISPLAY_INTERFACE 15 // Display Interface Data Block 99*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_STEREO 16 // Stereo Data Block 100*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_TIMING_5 17 // Type V Timing Short Descriptor 101*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_TILEDDISPLAY 18 // Tiled Display Data Block 102*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_DISPLAY_INTERFACE_FEATURES 0X26 // DisplayID2.0 Display Interface Features Data Block // 103*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_CTA_DATA 0x81 // DIsplay ID data block 104*1739a20eSAndy Ritger #define NVT_DISPLAYID_BLOCK_TYPE_VENDOR_SPEC 0x7F // Vendor Specific Data Block 105*1739a20eSAndy Ritger 106*1739a20eSAndy Ritger #define NVT_DISPLAYID_PRODUCT_IDENTITY_MIN_LEN 12 107*1739a20eSAndy Ritger #define NVT_DISPLAYID_PRODUCT_IDENTITY_MAX_STRING_LEN 0xE9 108*1739a20eSAndy Ritger 109*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_PROD_IDENTIFICATION_BLOCK 110*1739a20eSAndy Ritger { 111*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 112*1739a20eSAndy Ritger 113*1739a20eSAndy Ritger NvU8 vendor[3]; 114*1739a20eSAndy Ritger NvU16 product_code; 115*1739a20eSAndy Ritger NvU32 serial_number; 116*1739a20eSAndy Ritger NvU8 model_tag; 117*1739a20eSAndy Ritger NvU8 model_year; 118*1739a20eSAndy Ritger NvU8 productid_string_size; 119*1739a20eSAndy Ritger 120*1739a20eSAndy Ritger NvU8 productid_string[NVT_DISPLAYID_PRODUCT_IDENTITY_MAX_STRING_LEN]; 121*1739a20eSAndy Ritger } DISPLAYID_PROD_IDENTIFICATION_BLOCK; 122*1739a20eSAndy Ritger 123*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_DISPLAY_PARAM_BLOCK 124*1739a20eSAndy Ritger { 125*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 126*1739a20eSAndy Ritger NvU16 horizontal_image_size; 127*1739a20eSAndy Ritger NvU16 vertical_image_size; 128*1739a20eSAndy Ritger NvU16 horizontal_pixel_count; 129*1739a20eSAndy Ritger NvU16 vertical_pixel_count; 130*1739a20eSAndy Ritger 131*1739a20eSAndy Ritger NvU8 feature; 132*1739a20eSAndy Ritger 133*1739a20eSAndy Ritger NvU8 transfer_char_gamma; 134*1739a20eSAndy Ritger NvU8 aspect_ratio; 135*1739a20eSAndy Ritger NvU8 color_bit_depth; 136*1739a20eSAndy Ritger } DISPLAYID_DISPLAY_PARAM_BLOCK; 137*1739a20eSAndy Ritger 138*1739a20eSAndy Ritger #define NVT_DISPLAYID_DISPLAY_PARAM_BLOCK_LEN 0x0C 139*1739a20eSAndy Ritger 140*1739a20eSAndy Ritger #define NVT_DISPLAYID_DISPLAY_PARAM_SUPPORT_AUDIO 7:7 141*1739a20eSAndy Ritger #define NVT_DISPLAYID_DISPLAY_PARAM_SEPARATE_AUDIO 6:6 142*1739a20eSAndy Ritger #define NVT_DISPLAYID_DISPLAY_PARAM_AUDIO_INPUT_OVERRIDE 5:5 143*1739a20eSAndy Ritger #define NVT_DISPLAYID_DISPLAY_PARAM_POWER_MANAGEMENT 4:4 144*1739a20eSAndy Ritger #define NVT_DISPLAYID_DISPLAY_PARAM_FIXED_TIMING 3:3 145*1739a20eSAndy Ritger #define NVT_DISPLAYID_DISPLAY_PARAM_FIXED_PIXEL_FORMAT 2:2 146*1739a20eSAndy Ritger #define NVT_DISPLAYID_DISPLAY_PARAM_DEINTERLACING 0:0 147*1739a20eSAndy Ritger 148*1739a20eSAndy Ritger #define NVT_DISPLAYID_DISPLAY_PARAM_DEPTH_OVERALL 7:4 149*1739a20eSAndy Ritger #define NVT_DISPLAYID_DISPLAY_PARAM_DEPTH_NATIVE 3:0 150*1739a20eSAndy Ritger 151*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_COLOR_POINT 152*1739a20eSAndy Ritger { 153*1739a20eSAndy Ritger NvU8 color_x_bits_low; 154*1739a20eSAndy Ritger NvU8 color_bits_mid; 155*1739a20eSAndy Ritger NvU8 color_y_bits_high; 156*1739a20eSAndy Ritger } DISPLAYID_COLOR_POINT; 157*1739a20eSAndy Ritger 158*1739a20eSAndy Ritger #define NVT_DISPLAYID_COLOR_POINT_Y 7:4 159*1739a20eSAndy Ritger #define NVT_DISPLAYID_COLOR_POINT_X 3:0 160*1739a20eSAndy Ritger 161*1739a20eSAndy Ritger #define NVT_DISPLAYID_COLOR_MAX_POINTS 22 162*1739a20eSAndy Ritger 163*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_COLOR_CHAR_BLOCK 164*1739a20eSAndy Ritger { 165*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 166*1739a20eSAndy Ritger 167*1739a20eSAndy Ritger // Color Characteristics Information 168*1739a20eSAndy Ritger NvU8 point_info; 169*1739a20eSAndy Ritger 170*1739a20eSAndy Ritger DISPLAYID_COLOR_POINT points[NVT_DISPLAYID_COLOR_MAX_POINTS]; 171*1739a20eSAndy Ritger } DISPLAYID_COLOR_CHAR_BLOCK; 172*1739a20eSAndy Ritger 173*1739a20eSAndy Ritger #define NVT_DISPLAYID_COLOR_PRIMARIES 6:4 174*1739a20eSAndy Ritger #define NVT_DISPLAYID_COLOR_WHITE_POINTS 3:0 175*1739a20eSAndy Ritger #define NVT_DISPLAYID_COLOR_TEMPORAL 7:7 176*1739a20eSAndy Ritger 177*1739a20eSAndy Ritger // the following fields apply to Timing Descriptors 1-3 (Not all of them are 178*1739a20eSAndy Ritger // used per descriptor, but the format is the same 179*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_PREFERRED 7:7 180*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3D_STEREO 6:5 181*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3D_STEREO_MONO 0 182*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3D_STEREO_STEREO 1 183*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3D_STEREO_EITHER 2 184*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_INTERLACE 4:4 185*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_ASPECT_RATIO 2:0 186*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_ASPECT_RATIO_1_1 0 187*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_ASPECT_RATIO_5_4 1 188*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_ASPECT_RATIO_4_3 2 189*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_ASPECT_RATIO_15_9 3 190*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_ASPECT_RATIO_16_9 4 191*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_ASPECT_RATIO_16_10 5 192*1739a20eSAndy Ritger 193*1739a20eSAndy Ritger typedef struct _tag_DISPLAYID_TIMING_1_DESCRIPTOR 194*1739a20eSAndy Ritger { 195*1739a20eSAndy Ritger NvU8 pixel_clock_low_minus_0_01MHz; 196*1739a20eSAndy Ritger NvU8 pixel_clock_mid; 197*1739a20eSAndy Ritger NvU8 pixel_clock_high; 198*1739a20eSAndy Ritger 199*1739a20eSAndy Ritger struct 200*1739a20eSAndy Ritger { 201*1739a20eSAndy Ritger NvU8 aspect_ratio : 3; 202*1739a20eSAndy Ritger NvU8 rsvd : 1; 203*1739a20eSAndy Ritger NvU8 interface_frame_scanning_type : 1; 204*1739a20eSAndy Ritger NvU8 stereo_support : 2; 205*1739a20eSAndy Ritger NvU8 is_preferred_detailed_timing : 1; 206*1739a20eSAndy Ritger }options; 207*1739a20eSAndy Ritger 208*1739a20eSAndy Ritger struct 209*1739a20eSAndy Ritger { 210*1739a20eSAndy Ritger NvU8 active_image_pixels_low_minus_1; 211*1739a20eSAndy Ritger NvU8 active_image_pixels_high; 212*1739a20eSAndy Ritger NvU8 blank_pixels_low_minus_1; 213*1739a20eSAndy Ritger NvU8 blank_pixels_high; 214*1739a20eSAndy Ritger NvU8 front_porch_low_minus_1; 215*1739a20eSAndy Ritger NvU8 front_porch_high : 7; 216*1739a20eSAndy Ritger NvU8 sync_polarity : 1; 217*1739a20eSAndy Ritger NvU8 sync_width_low_minus_1; 218*1739a20eSAndy Ritger NvU8 sync_width_high; 219*1739a20eSAndy Ritger }horizontal; 220*1739a20eSAndy Ritger 221*1739a20eSAndy Ritger struct 222*1739a20eSAndy Ritger { 223*1739a20eSAndy Ritger NvU8 active_image_lines_low_minus_1; 224*1739a20eSAndy Ritger NvU8 active_image_lines_high; 225*1739a20eSAndy Ritger NvU8 blank_lines_low_minus_1; 226*1739a20eSAndy Ritger NvU8 blank_lines_high; 227*1739a20eSAndy Ritger NvU8 front_porch_lines_low_minus_1; 228*1739a20eSAndy Ritger NvU8 front_porch_lines_high : 7; 229*1739a20eSAndy Ritger NvU8 sync_polarity : 1; 230*1739a20eSAndy Ritger NvU8 sync_width_lines_low_minus_1; 231*1739a20eSAndy Ritger NvU8 sync_width_lines_high; 232*1739a20eSAndy Ritger }vertical; 233*1739a20eSAndy Ritger 234*1739a20eSAndy Ritger } DISPLAYID_TIMING_1_DESCRIPTOR; 235*1739a20eSAndy Ritger 236*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_1_MAX_DESCRIPTORS 12 237*1739a20eSAndy Ritger 238*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_TIMING_1_BLOCK 239*1739a20eSAndy Ritger { 240*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 241*1739a20eSAndy Ritger DISPLAYID_TIMING_1_DESCRIPTOR descriptors[NVT_DISPLAYID_TIMING_1_MAX_DESCRIPTORS]; 242*1739a20eSAndy Ritger } DISPLAYID_TIMING_1_BLOCK; 243*1739a20eSAndy Ritger 244*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_1_POLARITY_SHIFT 15 245*1739a20eSAndy Ritger #define NVT_DISPLAYID_CHAR_WIDTH_IN_PIXELS 8 246*1739a20eSAndy Ritger 247*1739a20eSAndy Ritger typedef struct _tag_DISPLAYID_TIMING_2_DESCRIPTOR 248*1739a20eSAndy Ritger { 249*1739a20eSAndy Ritger NvU8 pixel_clock_low_minus_0_01MHz; 250*1739a20eSAndy Ritger NvU8 pixel_clock_mid; 251*1739a20eSAndy Ritger NvU8 pixel_clock_high; 252*1739a20eSAndy Ritger 253*1739a20eSAndy Ritger struct 254*1739a20eSAndy Ritger { 255*1739a20eSAndy Ritger NvU8 rsvd : 2; 256*1739a20eSAndy Ritger NvU8 vsync_polarity : 1; 257*1739a20eSAndy Ritger NvU8 hsync_polarity : 1; 258*1739a20eSAndy Ritger NvU8 interface_frame_scanning_type : 1; 259*1739a20eSAndy Ritger NvU8 stereo_support : 2; 260*1739a20eSAndy Ritger NvU8 is_preferred_detailed_timing : 1; 261*1739a20eSAndy Ritger }options; 262*1739a20eSAndy Ritger 263*1739a20eSAndy Ritger struct 264*1739a20eSAndy Ritger { 265*1739a20eSAndy Ritger NvU8 active_image_in_char_minus_1; 266*1739a20eSAndy Ritger NvU8 active_image_in_char_high : 1; 267*1739a20eSAndy Ritger NvU8 blank_in_char_minus_1 : 7; 268*1739a20eSAndy Ritger NvU8 sync_width_in_char_minus_1 : 4; 269*1739a20eSAndy Ritger NvU8 front_porch_in_char_minus_1 : 4; 270*1739a20eSAndy Ritger }horizontal; 271*1739a20eSAndy Ritger 272*1739a20eSAndy Ritger struct 273*1739a20eSAndy Ritger { 274*1739a20eSAndy Ritger NvU8 active_image_lines_low_minus_1; 275*1739a20eSAndy Ritger NvU8 active_image_lines_high : 4; 276*1739a20eSAndy Ritger NvU8 reserved : 4; 277*1739a20eSAndy Ritger NvU8 blank_lines_minus_1; 278*1739a20eSAndy Ritger NvU8 sync_width_lines_minus_1 : 4; 279*1739a20eSAndy Ritger NvU8 front_porch_lines_minus_1 : 4; 280*1739a20eSAndy Ritger }vertical; 281*1739a20eSAndy Ritger 282*1739a20eSAndy Ritger } DISPLAYID_TIMING_2_DESCRIPTOR; 283*1739a20eSAndy Ritger 284*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_2_HORIZ_BLANK_PIXEL 7:1 285*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_2_HORIZ_ACTIVE_PIXEL_HIGH 0:0 286*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_2_HORIZ_OFFSET 7:4 287*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_2_HORIZ_SYNC 3:0 288*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_2_VERT_ACTIVE_PIXEL_HIGH 3:0 289*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_2_VERT_OFFSET 7:4 290*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_2_VERT_SYNC 3:0 291*1739a20eSAndy Ritger 292*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_2_MAX_DESCRIPTORS 22 293*1739a20eSAndy Ritger 294*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_TIMING_2_BLOCK 295*1739a20eSAndy Ritger { 296*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 297*1739a20eSAndy Ritger DISPLAYID_TIMING_2_DESCRIPTOR descriptors[NVT_DISPLAYID_TIMING_2_MAX_DESCRIPTORS]; 298*1739a20eSAndy Ritger } DISPLAYID_TIMING_2_BLOCK; 299*1739a20eSAndy Ritger 300*1739a20eSAndy Ritger typedef struct _TAG_DISPLAYID_TIMING_3_DESCRIPTOR 301*1739a20eSAndy Ritger { 302*1739a20eSAndy Ritger NvU8 optns; 303*1739a20eSAndy Ritger NvU8 horizontal_active_pixels; 304*1739a20eSAndy Ritger NvU8 transfer; 305*1739a20eSAndy Ritger } DISPLAYID_TIMING_3_DESCRIPTOR; 306*1739a20eSAndy Ritger 307*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_FORMULA 6:4 308*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_FORMULA_STANDARD 0 309*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_FORMULA_REDUCED_BLANKING 1 310*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_ASPECT_RATIO 3:0 311*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_ASPECT_RATIO_1_1 0 312*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_ASPECT_RATIO_5_4 1 313*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_ASPECT_RATIO_4_3 2 314*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_ASPECT_RATIO_15_9 3 315*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_ASPECT_RATIO_16_9 4 316*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_ASPECT_RATIO_16_10 5 317*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_INTERLACE 7:7 318*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_REFRESH_RATE 6:0 319*1739a20eSAndy Ritger 320*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_3_MAX_DESCRIPTORS 82 321*1739a20eSAndy Ritger 322*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_TIMING_3_BLOCK 323*1739a20eSAndy Ritger { 324*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 325*1739a20eSAndy Ritger DISPLAYID_TIMING_3_DESCRIPTOR descriptors[NVT_DISPLAYID_TIMING_3_MAX_DESCRIPTORS]; 326*1739a20eSAndy Ritger } DISPLAYID_TIMING_3_BLOCK; 327*1739a20eSAndy Ritger 328*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_4_MAX_CODES NVT_DISPLAYID_DATABLOCK_MAX_PAYLOAD_LEN 329*1739a20eSAndy Ritger 330*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_TIMING_4_BLOCK 331*1739a20eSAndy Ritger { 332*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 333*1739a20eSAndy Ritger NvU8 timing_codes[NVT_DISPLAYID_TIMING_4_MAX_CODES]; 334*1739a20eSAndy Ritger } DISPLAYID_TIMING_4_BLOCK; 335*1739a20eSAndy Ritger 336*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_5_STEREO_SUPPORT_MASK 0x60 337*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_5_FRACTIONAL_RR_SUPPORT_MASK 0x10 338*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_5_FORMULA_SUPPORT_MASK 3 339*1739a20eSAndy Ritger 340*1739a20eSAndy Ritger typedef struct _TAG_DISPLAYID_TIMING_5_DESCRIPTOR 341*1739a20eSAndy Ritger { 342*1739a20eSAndy Ritger NvU8 optns; 343*1739a20eSAndy Ritger NvU8 rsvd; 344*1739a20eSAndy Ritger NvU8 horizontal_active_pixels_low; 345*1739a20eSAndy Ritger NvU8 horizontal_active_pixels_high; 346*1739a20eSAndy Ritger NvU8 vertical_active_pixels_low; 347*1739a20eSAndy Ritger NvU8 vertical_active_pixels_high; 348*1739a20eSAndy Ritger NvU8 refresh_rate; 349*1739a20eSAndy Ritger } DISPLAYID_TIMING_5_DESCRIPTOR; 350*1739a20eSAndy Ritger 351*1739a20eSAndy Ritger #define NVT_DISPLAYID_TIMING_5_MAX_DESCRIPTORS 53 352*1739a20eSAndy Ritger 353*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_TIMING_5_BLOCK 354*1739a20eSAndy Ritger { 355*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 356*1739a20eSAndy Ritger DISPLAYID_TIMING_5_DESCRIPTOR descriptors[NVT_DISPLAYID_TIMING_5_MAX_DESCRIPTORS]; 357*1739a20eSAndy Ritger } DISPLAYID_TIMING_5_BLOCK; 358*1739a20eSAndy Ritger 359*1739a20eSAndy Ritger #define DISPLAYID_TIMING_VESA_BLOCK_SIZE 0x0A 360*1739a20eSAndy Ritger #define DISPLAYID_TIMING_CEA_BLOCK_SIZE 0x08 361*1739a20eSAndy Ritger 362*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_TIMING_MODE_BLOCK 363*1739a20eSAndy Ritger { 364*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 365*1739a20eSAndy Ritger NvU8 timing_modes[DISPLAYID_TIMING_VESA_BLOCK_SIZE]; 366*1739a20eSAndy Ritger } DISPLAYID_TIMING_MODE_BLOCK; 367*1739a20eSAndy Ritger 368*1739a20eSAndy Ritger 369*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_RANGE_LIMITS_BLOCK 370*1739a20eSAndy Ritger { 371*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 372*1739a20eSAndy Ritger NvU8 pixel_clock_min[3]; 373*1739a20eSAndy Ritger NvU8 pixel_clock_max[3]; 374*1739a20eSAndy Ritger NvU8 horizontal_frequency_min; 375*1739a20eSAndy Ritger NvU8 horizontal_frequency_max; 376*1739a20eSAndy Ritger NvU16 horizontal_blanking_min; 377*1739a20eSAndy Ritger NvU8 vertical_refresh_rate_min; 378*1739a20eSAndy Ritger NvU8 vertical_refresh_rate_max; 379*1739a20eSAndy Ritger NvU16 vertical_blanking_min; 380*1739a20eSAndy Ritger 381*1739a20eSAndy Ritger NvU8 optns; 382*1739a20eSAndy Ritger } DISPLAYID_RANGE_LIMITS_BLOCK; 383*1739a20eSAndy Ritger 384*1739a20eSAndy Ritger #define DISPLAYID_RANGE_LIMITS_BLOCK_LEN 0xF 385*1739a20eSAndy Ritger 386*1739a20eSAndy Ritger #define NVT_DISPLAYID_RANGE_LIMITS_INTERLACE 7:7 387*1739a20eSAndy Ritger #define NVT_DISPLAYID_RANGE_LIMITS_CVT_STANDARD 6:6 388*1739a20eSAndy Ritger #define NVT_DISPLAYID_RANGE_LIMITS_CVT_REDUCED 5:5 389*1739a20eSAndy Ritger #define NVT_DISPLAYID_RANGE_LIMITS_DFD 4:4 390*1739a20eSAndy Ritger 391*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_ASCII_STRING_BLOCK 392*1739a20eSAndy Ritger { 393*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 394*1739a20eSAndy Ritger NvU8 data[NVT_DISPLAYID_DATABLOCK_MAX_PAYLOAD_LEN]; 395*1739a20eSAndy Ritger } DISPLAYID_ASCII_STRING_BLOCK; 396*1739a20eSAndy Ritger 397*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_DEVICE_DATA_BLOCK 398*1739a20eSAndy Ritger { 399*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 400*1739a20eSAndy Ritger 401*1739a20eSAndy Ritger NvU8 technology; 402*1739a20eSAndy Ritger NvU8 operating_mode; 403*1739a20eSAndy Ritger NvU16 horizontal_pixel_count; 404*1739a20eSAndy Ritger NvU16 vertical_pixel_count; 405*1739a20eSAndy Ritger NvU8 aspect_ratio; 406*1739a20eSAndy Ritger NvU8 orientation; 407*1739a20eSAndy Ritger 408*1739a20eSAndy Ritger NvU8 subpixel_info; 409*1739a20eSAndy Ritger NvU8 horizontal_pitch; 410*1739a20eSAndy Ritger NvU8 vertical_pitch; 411*1739a20eSAndy Ritger 412*1739a20eSAndy Ritger NvU8 color_bit_depth; 413*1739a20eSAndy Ritger NvU8 response_time; 414*1739a20eSAndy Ritger 415*1739a20eSAndy Ritger } DISPLAYID_DEVICE_DATA_BLOCK; 416*1739a20eSAndy Ritger 417*1739a20eSAndy Ritger #define DISPLAYID_DEVICE_DATA_BLOCK_LEN 0xD 418*1739a20eSAndy Ritger 419*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_CRT_MONOCHROME 0x00 420*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_CRT_STANDARD 0x01 421*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_CRT_OTHER 0x02 422*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_LCD_PASSIVE_MATRIX_TN 0x10 423*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_LCD_PASSIVE_MATRIX_CHOL_LC 0x11 424*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_LCD_PASSIVE_MATRIX_FERRO_LC 0x12 425*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_LCD_PASSIVE_MATRIX_OTHER 0x13 426*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_LCD_ACTIVE_MATRIX_TN 0x14 427*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_LCD_ACTIVE_MATRIX_IPS 0x15 428*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_LCD_ACTIVE_MATRIX_VA 0x16 429*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_LCD_ACTIVE_MATRIX_OCB 0x17 430*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_LCD_ACTIVE_MATRIX_FERRO 0x18 431*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_LCD_OTHER 0x1F 432*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_PLASMA_DC 0x20 433*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_PLASMA_AC 0x21 434*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_ELECTROLUM 0x30 435*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_INORGANIC_LED 0x40 436*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_ORGANIC_LED 0x50 437*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_FED 0x60 438*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_ELECTROPHORETIC 0x70 439*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_ELECTROCHROMIC 0x80 440*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_ELECTROMECHANICAL 0x90 441*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_ELECTROWETTING 0xA0 442*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_TECHNOLOGY_OTHER 0xF0 443*1739a20eSAndy Ritger 444*1739a20eSAndy Ritger // Display Device operating mode info 445*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE 7:4 446*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_REFLECTIVE_NO_ILLUM 0x0 447*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_REFLECTIVE_ILLUM 0x1 448*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_REFLECTIVE_ILLUM_DEF 0x2 449*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_TRANSMISSIVE_NO_ILLUM 0x3 450*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_TRANSMISSIVE_ILLUM 0x4 451*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_TRANSMISSIVE_ILLUM_DEF 0x5 452*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_EMISSIVE 0x6 453*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_TRANSFLECTIVE_REF 0x7 454*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_TRANSFLECTIVE_TRANS 0x8 455*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_TRANSPARENT_AMB 0x9 456*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_TRANSPARENT_EMIS 0xA 457*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_PROJECTION_REF 0xB 458*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_PROJECTION_TRANS 0xC 459*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_OPERATING_MODE_PROJECTION_EMIS 0xD 460*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_BACKLIGHT 3:3 461*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_INTENSITY 2:2 462*1739a20eSAndy Ritger 463*1739a20eSAndy Ritger // Display Device aspect ratio/orientation info 464*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ORIENTATION 7:6 465*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ORIENTATION_LANDSCAPE 0 466*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ORIENTATION_PORTRAIT 1 467*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ORIENTATION_NOT_FIXED 2 468*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ORIENTATION_UNDEFINED 3 469*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ROTATION 5:4 470*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ROTATION_NONE 0 471*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ROTATION_CLOCKWISE 1 472*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ROTATION_COUNTERCLOCKWISE 2 473*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ROTATION_BOTH 3 474*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ZERO_PIXEL 3:2 475*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ZERO_PIXEL_UPPER_LEFT 0 476*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ZERO_PIXEL_UPPER_RIGHT 1 477*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ZERO_PIXEL_LOWER_LEFT 2 478*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_ZERO_PIXEL_LOWER RIGHT 3 479*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_SCAN 1:0 480*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_SCAN_UNDEFINED 0 481*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_SCAN_FAST_LONG 1 482*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_SCAN_FAST_SHORT 2 483*1739a20eSAndy Ritger 484*1739a20eSAndy Ritger // Display Device Color Depth information 485*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_COLOR_DEPTH 3:0 486*1739a20eSAndy Ritger 487*1739a20eSAndy Ritger // Display Device Response Time information 488*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_WHITE_BLACK 7:7 489*1739a20eSAndy Ritger #define NVT_DISPLAYID_DEVICE_RESPONSE_TIME 6:0 490*1739a20eSAndy Ritger 491*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_UNDEFINED 0 492*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_RGB_VERTICAL 1 493*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_RGB_HORIZONTAL 2 494*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_VERTICAL_STR 3 495*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_HORIZONTAL_STR 4 496*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_QUAD_RED_TOP_LEFT 5 497*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_QUAD_RED_BOTTOM_LEFT 6 498*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_DELTA_RGB 7 499*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_MOSAIC 8 500*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_QUAD_INC_WHITE 9 501*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_FIVE 10 502*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_SIX 11 503*1739a20eSAndy Ritger #define NVT_DISPLAYID_SUBPIXEL_PENTILE 12 504*1739a20eSAndy Ritger 505*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_INTERFACE_POWER_BLOCK 506*1739a20eSAndy Ritger { 507*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 508*1739a20eSAndy Ritger NvU8 power_sequence_T1; 509*1739a20eSAndy Ritger NvU8 power_sequence_T2; 510*1739a20eSAndy Ritger NvU8 power_sequence_T3; 511*1739a20eSAndy Ritger NvU8 power_sequence_T4_min; 512*1739a20eSAndy Ritger NvU8 power_sequence_T5_min; 513*1739a20eSAndy Ritger NvU8 power_sequence_T6_min; 514*1739a20eSAndy Ritger } DISPLAYID_INTERFACE_POWER_BLOCK; 515*1739a20eSAndy Ritger 516*1739a20eSAndy Ritger #define DISPLAYID_INTERFACE_POWER_BLOCK_LEN 0x6 517*1739a20eSAndy Ritger 518*1739a20eSAndy Ritger #define NVT_DISPLAYID_POWER_T1_MIN 7:4 519*1739a20eSAndy Ritger #define NVT_DISPLAYID_POWER_T1_MAX 3:0 520*1739a20eSAndy Ritger #define NVT_DISPLAYID_POWER_T2 5:0 521*1739a20eSAndy Ritger #define NVT_DISPLAYID_POWER_T3 5:0 522*1739a20eSAndy Ritger #define NVT_DISPLAYID_POWER_T4_MIN 6:0 523*1739a20eSAndy Ritger #define NVT_DISPLAYID_POWER_T5_MIN 5:0 524*1739a20eSAndy Ritger #define NVT_DISPLAYID_POWER_T6_MIN 5:0 525*1739a20eSAndy Ritger 526*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_TRANSFER_CHAR_BLOCK 527*1739a20eSAndy Ritger { 528*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 529*1739a20eSAndy Ritger NvU8 info; 530*1739a20eSAndy Ritger NvU8 samples; 531*1739a20eSAndy Ritger NvU8 curve_data[NVT_DISPLAYID_DATABLOCK_MAX_PAYLOAD_LEN - 2]; 532*1739a20eSAndy Ritger } DISPLAYID_TRANSFER_CHAR_BLOCK; 533*1739a20eSAndy Ritger 534*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_INTERFACE_DATA_BLOCK 535*1739a20eSAndy Ritger { 536*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 537*1739a20eSAndy Ritger NvU8 info; 538*1739a20eSAndy Ritger 539*1739a20eSAndy Ritger NvU8 version; 540*1739a20eSAndy Ritger NvU8 color_depth_rgb; 541*1739a20eSAndy Ritger NvU8 color_depth_ycbcr444; 542*1739a20eSAndy Ritger NvU8 color_depth_ycbcr422; 543*1739a20eSAndy Ritger NvU8 content_protection; 544*1739a20eSAndy Ritger NvU8 content_protection_version; 545*1739a20eSAndy Ritger 546*1739a20eSAndy Ritger NvU8 spread; 547*1739a20eSAndy Ritger 548*1739a20eSAndy Ritger NvU8 interface_attribute_1; 549*1739a20eSAndy Ritger NvU8 interface_attribute_2; 550*1739a20eSAndy Ritger } DISPLAYID_INTERFACE_DATA_BLOCK; 551*1739a20eSAndy Ritger 552*1739a20eSAndy Ritger #define DISPLAYID_INTERFACE_DATA_BLOCK_LEN 0xA 553*1739a20eSAndy Ritger 554*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE 7:4 555*1739a20eSAndy Ritger 556*1739a20eSAndy Ritger // Interface Codes (note exception for Analog Interface) 557*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_ANALOG 0 558*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_LVDS 1 559*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_TMDS 2 560*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_RSDS 3 561*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_DVI_D 4 562*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_DVI_I_ANALOG 5 563*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_DVI_I_DIGITAL 6 564*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_HDMI_A 7 565*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_HDMI_B 8 566*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_MDDI 9 567*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_DISPLAYPORT 10 568*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_PROPRIETARY 11 569*1739a20eSAndy Ritger 570*1739a20eSAndy Ritger // Analog Interface Subtype codes 571*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_ANALOG_VGA 0 572*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_ANALOG_VESA_NAVI_V 1 573*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_TYPE_ANALOG_VESA_NAVI_D 2 574*1739a20eSAndy Ritger 575*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_NUMLINKS 3:0 576*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_CONTENT 2:0 577*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_CONTENT_NONE 0 578*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_CONTENT_HDCP 1 579*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_CONTENT_DTCP 2 580*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_CONTENT_DPCP 3 581*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_SPREAD_TYPE 7:6 582*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_SPREAD_TYPE_NONE 0 583*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_SPREAD_TYPE_DOWN 1 584*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_SPREAD_TYPE_CENTER 2 585*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_SPREAD_PER 3:0 586*1739a20eSAndy Ritger 587*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_RGB16 5:5 588*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_RGB14 4:4 589*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_RGB12 3:3 590*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_RGB10 2:2 591*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_RGB8 1:1 592*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_RGB6 0:0 593*1739a20eSAndy Ritger 594*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_YCBCR444_16 5:5 595*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_YCBCR444_14 4:4 596*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_YCBCR444_12 3:3 597*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_YCBCR444_10 2:2 598*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_YCBCR444_8 1:1 599*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_YCBCR444_6 0:0 600*1739a20eSAndy Ritger 601*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_YCBCR422_16 4:4 602*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_YCBCR422_14 3:3 603*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_YCBCR422_12 2:2 604*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_YCBCR422_10 1:1 605*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_YCBCR422_8 0:0 606*1739a20eSAndy Ritger 607*1739a20eSAndy Ritger // LVDS specific settings 608*1739a20eSAndy Ritger #define NVT_DISPLAYID_LVDS_COLOR 4:4 609*1739a20eSAndy Ritger #define NVT_DISPLAYID_LVDS_2_8 3:3 610*1739a20eSAndy Ritger #define NVT_DISPLAYID_LVDS_12 2:2 611*1739a20eSAndy Ritger #define NVT_DISPLAYID_LVDS_5 1:1 612*1739a20eSAndy Ritger #define NVT_DISPLAYID_LVDS_3_3 0:0 613*1739a20eSAndy Ritger 614*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_DE 2:2 615*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_POLARITY 1:1 616*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_STROBE 0:0 617*1739a20eSAndy Ritger 618*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_STEREO_INTERFACE_METHOD_BLOCK 619*1739a20eSAndy Ritger { 620*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 621*1739a20eSAndy Ritger NvU8 stereo_bytes; 622*1739a20eSAndy Ritger NvU8 stereo_code; 623*1739a20eSAndy Ritger NvU8 timing_sub_block[NVT_DISPLAYID_DATABLOCK_MAX_PAYLOAD_LEN]; 624*1739a20eSAndy Ritger } DISPLAYID_STEREO_INTERFACE_METHOD_BLOCK; 625*1739a20eSAndy Ritger 626*1739a20eSAndy Ritger #define NVT_DISPLAYID_STEREO_FIELD_SEQUENTIAL 0x0 627*1739a20eSAndy Ritger #define NVT_DISPLAYID_STEREO_SIDE_BY_SIDE 0x1 628*1739a20eSAndy Ritger #define NVT_DISPLAYID_STEREO_PIXEL_INTERLEAVED 0x2 629*1739a20eSAndy Ritger #define NVT_DISPLAYID_STEREO_DUAL_INTERFACE 0x3 630*1739a20eSAndy Ritger #define NVT_DISPLAYID_STEREO_MULTIVIEW 0x4 631*1739a20eSAndy Ritger #define NVT_DISPLAYID_STEREO_PROPRIETARY 0xFF 632*1739a20eSAndy Ritger 633*1739a20eSAndy Ritger #define NVT_DISPLAYID_STEREO_MIRRORING 2:1 634*1739a20eSAndy Ritger #define NVT_DISPLAYID_STEREO_POLARITY 0:0 635*1739a20eSAndy Ritger 636*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_TILED_DISPLAY_BLOCK 637*1739a20eSAndy Ritger { 638*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 639*1739a20eSAndy Ritger struct 640*1739a20eSAndy Ritger { 641*1739a20eSAndy Ritger NvU8 single_tile_behavior:3; // 0x03 642*1739a20eSAndy Ritger NvU8 multi_tile_behavior:2; // 0x03 643*1739a20eSAndy Ritger NvU8 rsvd :1; // 0x03 644*1739a20eSAndy Ritger NvU8 has_bezel_info :1; // 0x03 645*1739a20eSAndy Ritger NvU8 single_enclosure :1; // 0x03 646*1739a20eSAndy Ritger } capability; 647*1739a20eSAndy Ritger struct 648*1739a20eSAndy Ritger { 649*1739a20eSAndy Ritger NvU8 row :4; // 0x04 650*1739a20eSAndy Ritger NvU8 col :4; // 0x04 651*1739a20eSAndy Ritger } topology_low; 652*1739a20eSAndy Ritger struct 653*1739a20eSAndy Ritger { 654*1739a20eSAndy Ritger NvU8 y :4; // 0x05 655*1739a20eSAndy Ritger NvU8 x :4; // 0x05 656*1739a20eSAndy Ritger } location_low; 657*1739a20eSAndy Ritger struct 658*1739a20eSAndy Ritger { 659*1739a20eSAndy Ritger NvU8 y :1; // 0x06 660*1739a20eSAndy Ritger NvU8 reserved1 :1; // 0x06 661*1739a20eSAndy Ritger NvU8 x :1; // 0x06 662*1739a20eSAndy Ritger NvU8 reserved2 :1; // 0x06 663*1739a20eSAndy Ritger NvU8 row :1; // 0x06 664*1739a20eSAndy Ritger NvU8 reserved3 :1; // 0x06 665*1739a20eSAndy Ritger NvU8 col :1; // 0x06 666*1739a20eSAndy Ritger NvU8 reserved4 :1; // 0x06 667*1739a20eSAndy Ritger } topo_loc_high; 668*1739a20eSAndy Ritger struct 669*1739a20eSAndy Ritger { 670*1739a20eSAndy Ritger NvU8 width_low; // 0x07 671*1739a20eSAndy Ritger NvU8 width_high; // 0x08 672*1739a20eSAndy Ritger NvU8 height_low; // 0x09 673*1739a20eSAndy Ritger NvU8 height_high; // 0X0A 674*1739a20eSAndy Ritger } native_resolution; 675*1739a20eSAndy Ritger struct 676*1739a20eSAndy Ritger { 677*1739a20eSAndy Ritger NvU8 pixel_density; // 0x0B 678*1739a20eSAndy Ritger NvU8 top; // 0x0C 679*1739a20eSAndy Ritger NvU8 bottom; // 0x0D 680*1739a20eSAndy Ritger NvU8 right; // 0x0E 681*1739a20eSAndy Ritger NvU8 left; // 0x0F 682*1739a20eSAndy Ritger } bezel_info; 683*1739a20eSAndy Ritger struct 684*1739a20eSAndy Ritger { 685*1739a20eSAndy Ritger NvU8 vendor_id[3]; // 0x10 ~ 0x12 686*1739a20eSAndy Ritger NvU8 product_id[2]; // 0x13 ~ 0x14 687*1739a20eSAndy Ritger NvU8 serial_number[4]; // 0x15 ~ 0x18 688*1739a20eSAndy Ritger } topology_id; 689*1739a20eSAndy Ritger } DISPLAYID_TILED_DISPLAY_BLOCK; 690*1739a20eSAndy Ritger 691*1739a20eSAndy Ritger typedef struct _tagDISPLAYID_INTERFACE_FEATURES_DATA_BLOCK 692*1739a20eSAndy Ritger { 693*1739a20eSAndy Ritger DISPLAYID_DATA_BLOCK_HEADER header; 694*1739a20eSAndy Ritger NvU8 supported_color_depth_rgb; 695*1739a20eSAndy Ritger NvU8 supported_color_depth_ycbcr444; 696*1739a20eSAndy Ritger NvU8 supported_color_depth_ycbcr422; 697*1739a20eSAndy Ritger NvU8 supported_color_depth_ycbcr420; 698*1739a20eSAndy Ritger NvU8 minimum_pixel_rate_ycbcr420; 699*1739a20eSAndy Ritger NvU8 supported_audio_capability; 700*1739a20eSAndy Ritger NvU8 supported_colorspace_eotf_combination_1; 701*1739a20eSAndy Ritger NvU8 supported_colorspace_eotf_combination_2; 702*1739a20eSAndy Ritger NvU8 additional_supported_colorspace_eotf_total; 703*1739a20eSAndy Ritger NvU8 additional_supported_colorspace_eotf[NVT_DISPLAYID_DISPLAY_INTERFACE_FEATURES_MAX_ADDITIONAL_SUPPORTED_COLORSPACE_EOTF]; 704*1739a20eSAndy Ritger } DISPLAYID_INTERFACE_FEATURES_DATA_BLOCK; 705*1739a20eSAndy Ritger 706*1739a20eSAndy Ritger #define DISPLAYID_INTERFACE_FEATURES_DATA_BLOCK_MAX_LEN sizeof(DISPLAYID_INTERFACE_FEATURES_DATA_BLOCK) 707*1739a20eSAndy Ritger 708*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_RGB16 5:5 709*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_RGB14 4:4 710*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_RGB12 3:3 711*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_RGB10 2:2 712*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_RGB8 1:1 713*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_RGB6 0:0 714*1739a20eSAndy Ritger 715*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR444_16 5:5 716*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR444_14 4:4 717*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR444_12 3:3 718*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR444_10 2:2 719*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR444_8 1:1 720*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR444_6 0:0 721*1739a20eSAndy Ritger 722*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR422_16 4:4 723*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR422_14 3:3 724*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR422_12 2:2 725*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR422_10 1:1 726*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR422_8 0:0 727*1739a20eSAndy Ritger 728*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR420_16 4:4 729*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR420_14 3:3 730*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR420_12 2:2 731*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR420_10 1:1 732*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_YCBCR420_8 0:0 733*1739a20eSAndy Ritger 734*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_AUDIO_SUPPORTED_32KHZ 7:7 735*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_AUDIO_SUPPORTED_44_1KHZ 6:6 736*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_AUDIO_SUPPORTED_48KHZ 5:5 737*1739a20eSAndy Ritger 738*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_COLORSPACE_BT2020_EOTF_SMPTE_ST2084 6:6 739*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_COLORSPACE_BT2020_EOTF_BT2020 5:5 740*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_COLORSPACE_DCI_P3_EOTF_DCI_P3 4:4 741*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_COLORSPACE_ADOBE_RGB_EOTF_ADOBE_RGB 3:3 742*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_COLORSPACE_BT709_EOTF_BT1886 2:2 743*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_COLORSPACE_BT601_EOTF_BT601 1:1 744*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_COLORSPACE_SRGB_EOTF_SRGB 0:0 745*1739a20eSAndy Ritger 746*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_COLORSPACE_EOTF_TOTAL 2:0 747*1739a20eSAndy Ritger 748*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_COLORSPACE 7:4 749*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_COLORSPACE_NOT_DEFINED 0 750*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_COLORSPACE_SRGB 1 751*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_COLORSPACE_BT601 2 752*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_COLORSPACE_BT709 3 753*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_COLORSPACE_ADOBE_RGB 4 754*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_COLORSPACE_DCI_P3 5 755*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_COLORSPACE_BT2020 6 756*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_COLORSPACE_CUSTOM 7 757*1739a20eSAndy Ritger 758*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF 3:0 759*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF_NOT_DEFINED 0 760*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF_SRGB 1 761*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF_BT601 2 762*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF_BT709 3 763*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF_ADOBE_RGB 4 764*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF_DCI_P3 5 765*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF_BT2020 6 766*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF_GAMMA 7 767*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF_SMPTE_ST2084 8 768*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF_HYBRID_LOG 9 769*1739a20eSAndy Ritger #define NVT_DISPLAYID_INTERFACE_FEATURES_ADDITIONAL_SUPPORTED_EOTF_CUSTOM 10 770*1739a20eSAndy Ritger 771*1739a20eSAndy Ritger 772*1739a20eSAndy Ritger #ifdef __SUPPORTS_PACK_PRAGMA 773*1739a20eSAndy Ritger #pragma pack() 774*1739a20eSAndy Ritger #endif 775*1739a20eSAndy Ritger 776*1739a20eSAndy Ritger #endif // __DISPLAYID_H_ 777