1 //****************************************************************************
2 //
3 // SPDX-FileCopyrightText: Copyright (c) 2023 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
4 // SPDX-License-Identifier: MIT
5 //
6 // Permission is hereby granted, free of charge, to any person obtaining a
7 // copy of this software and associated documentation files (the "Software"),
8 // to deal in the Software without restriction, including without limitation
9 // the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 // and/or sell copies of the Software, and to permit persons to whom the
11 // Software is furnished to do so, subject to the following conditions:
12 //
13 // The above copyright notice and this permission notice shall be included in
14 // all copies or substantial portions of the Software.
15 //
16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 // THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20 // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22 // DEALINGS IN THE SOFTWARE.
23 //
24 // File: nvtiming.h
25 //
26 // Purpose: This file is the common header all nv timing library clients.
27 //
28 //*****************************************************************************
29
30 #ifndef __NVTIMING_H__
31 #define __NVTIMING_H__
32
33 #include "nvtypes.h"
34
35
36 #define abs_delta(a,b) ((a)>(b)?((a)-(b)):((b)-(a)))
37
38 //***********************
39 // The Timing Structure
40 //***********************
41 //
42 // Nvidia specific timing extras
43 typedef struct tagNVT_HDMIEXT
44 {
45 // in the case of stereo, the NVT_TIMING structure will hold the 2D
46 // instance of the timing parameters, and the stereo extension will
47 // contain the variants required to produce the stereo frame.
48 NvU8 StereoStructureType;
49 NvU8 SideBySideHalfDetail;
50 NvU16 VActiveSpace[2];
51 } NVT_HDMIEXT;
52 #define NVT_HDMI_3D_SUPPORTED_STRUCT_MASK(x) (1 << (x))
53 #define NVT_HDMI_3D_SUPPORTED_FRAMEPACK_MASK NVT_HDMI_3D_SUPPORTED_STRUCT_MASK(NVT_HDMI_VS_BYTE5_HDMI_3DS_FRAMEPACK)
54 #define NVT_HDMI_3D_SUPPORTED_FIELD_ALT_MASK NVT_HDMI_3D_SUPPORTED_STRUCT_MASK(NVT_HDMI_VS_BYTE5_HDMI_3DS_FIELD_ALT)
55 #define NVT_HDMI_3D_SUPPORTED_LINE_ALT_MASK NVT_HDMI_3D_SUPPORTED_STRUCT_MASK(NVT_HDMI_VS_BYTE5_HDMI_3DS_LINE_ALT)
56 #define NVT_HDMI_3D_SUPPORTED_SIDEBYSIDEFULL_MASK NVT_HDMI_3D_SUPPORTED_STRUCT_MASK(NVT_HDMI_VS_BYTE5_HDMI_3DS_SIDEBYSIDEFULL)
57 #define NVT_HDMI_3D_SUPPORTED_LDEPTH_MASK NVT_HDMI_3D_SUPPORTED_STRUCT_MASK(NVT_HDMI_VS_BYTE5_HDMI_3DS_LDEPTH)
58 #define NVT_HDMI_3D_SUPPORTED_LDEPTHGFX_MASK NVT_HDMI_3D_SUPPORTED_STRUCT_MASK(NVT_HDMI_VS_BYTE5_HDMI_3DS_LDEPTHGFX)
59 #define NVT_HDMI_3D_SUPPORTED_TOPBOTTOM_MASK NVT_HDMI_3D_SUPPORTED_STRUCT_MASK(NVT_HDMI_VS_BYTE5_HDMI_3DS_TOPBOTTOM)
60 #define NVT_HDMI_3D_SUPPORTED_SIDEBYSIDEHALF_MASK NVT_HDMI_3D_SUPPORTED_STRUCT_MASK(NVT_HDMI_VS_BYTE5_HDMI_3DS_SIDEBYSIDEHALF)
61 #define NVT_ALL_HDMI_3D_STRUCT_SUPPORTED_MASK (NVT_HDMI_3D_SUPPORTED_FRAMEPACK_MASK | NVT_HDMI_3D_SUPPORTED_TOPBOTTOM_MASK | NVT_HDMI_3D_SUPPORTED_SIDEBYSIDEHALF_MASK)
62
63 typedef union tagNVT_COLORDEPTH
64 {
65 NvU8 bpcs;
66 struct
67 {
68 NvU8 bpc6 : 1;
69 NvU8 bpc8 : 1;
70 NvU8 bpc10 : 1;
71 NvU8 bpc12 : 1;
72 NvU8 bpc14 : 1;
73 NvU8 bpc16 : 1;
74 NvU8 rsrvd1 : 1; // must be 0
75 NvU8 rsrvd2 : 1; // must be 0
76 } bpc;
77 } NVT_COLORDEPTH;
78
79 #define IS_BPC_SUPPORTED_COLORFORMAT(colorDepth) (!!((NvU8)(colorDepth)))
80 #define UPDATE_BPC_FOR_COLORFORMAT(colorFormat, b6bpc, b8bpc, b10bpc, b12bpc, b14bpc, b16bpc) \
81 if ((b6bpc)) ((colorFormat).bpc.bpc6 = 1); \
82 if ((b8bpc)) ((colorFormat).bpc.bpc8 = 1); \
83 if ((b10bpc)) ((colorFormat).bpc.bpc10 = 1); \
84 if ((b12bpc)) ((colorFormat).bpc.bpc12 = 1); \
85 if ((b14bpc)) ((colorFormat).bpc.bpc14 = 1); \
86 if ((b16bpc)) ((colorFormat).bpc.bpc16 = 1);
87
88 #define SET_BPC_FOR_COLORFORMAT(_colorFormat, _bpc) \
89 if ((_bpc) == NVT_EDID_VIDEOSIGNAL_BPC_6) \
90 ((_colorFormat).bpc.bpc6 = 1); \
91 else if ((_bpc) == NVT_EDID_VIDEOSIGNAL_BPC_8) \
92 ((_colorFormat).bpc.bpc8 = 1); \
93 else if ((_bpc) == NVT_EDID_VIDEOSIGNAL_BPC_10) \
94 ((_colorFormat).bpc.bpc10 = 1); \
95 else if ((_bpc) == NVT_EDID_VIDEOSIGNAL_BPC_12) \
96 ((_colorFormat).bpc.bpc12 = 1); \
97 else if ((_bpc) == NVT_EDID_VIDEOSIGNAL_BPC_16) ((_colorFormat).bpc.bpc16 = 1);
98
99 #define CLEAR_BPC_FOR_COLORFORMAT(_colorFormat, _bpc) \
100 if ((_bpc) == NVT_EDID_VIDEOSIGNAL_BPC_6) \
101 ((_colorFormat).bpc.bpc6 = 0); \
102 else if ((_bpc) == NVT_EDID_VIDEOSIGNAL_BPC_8) \
103 ((_colorFormat).bpc.bpc8 = 0); \
104 else if ((_bpc) == NVT_EDID_VIDEOSIGNAL_BPC_10) \
105 ((_colorFormat).bpc.bpc10 = 0); \
106 else if ((_bpc) == NVT_EDID_VIDEOSIGNAL_BPC_12) \
107 ((_colorFormat).bpc.bpc12 = 0); \
108 else if ((_bpc) == NVT_EDID_VIDEOSIGNAL_BPC_16) ((_colorFormat).bpc.bpc16 = 0);
109
110 #define NVT_COLORDEPTH_HIGHEST_BPC(_colorFormat) \
111 (_colorFormat).bpc.bpc16 ? NVT_EDID_VIDEOSIGNAL_BPC_16 : \
112 (_colorFormat).bpc.bpc12 ? NVT_EDID_VIDEOSIGNAL_BPC_12 : \
113 (_colorFormat).bpc.bpc10 ? NVT_EDID_VIDEOSIGNAL_BPC_10 : \
114 (_colorFormat).bpc.bpc8 ? NVT_EDID_VIDEOSIGNAL_BPC_8 : \
115 (_colorFormat).bpc.bpc6 ? NVT_EDID_VIDEOSIGNAL_BPC_6 : NVT_EDID_VIDEOSIGNAL_BPC_NOT_DEFINED
116
117 #define NVT_COLORDEPTH_LOWEREST_BPC(_colorFormat) \
118 (_colorFormat).bpc.bpc6 ? NVT_EDID_VIDEOSIGNAL_BPC_6 : \
119 (_colorFormat).bpc.bpc8 ? NVT_EDID_VIDEOSIGNAL_BPC_8 : \
120 (_colorFormat).bpc.bpc10 ? NVT_EDID_VIDEOSIGNAL_BPC_10 : \
121 (_colorFormat).bpc.bpc12 ? NVT_EDID_VIDEOSIGNAL_BPC_12 : \
122 (_colorFormat).bpc.bpc16 ? NVT_EDID_VIDEOSIGNAL_BPC_16 : NVT_EDID_VIDEOSIGNAL_BPC_NOT_DEFINED
123
124 typedef struct tagNVT_TIMINGEXT
125 {
126 NvU32 flag; // reserve for NV h/w based enhancement like double-scan.
127 NvU16 rr; // the logical refresh rate to present
128 NvU32 rrx1k; // the physical vertical refresh rate in 0.001Hz
129 NvU32 aspect; // the display aspect ratio Hi(aspect):horizontal-aspect, Low(aspect):vertical-aspect
130 //
131 // Bitmask of one-hot encoded possible pixel repetitions:
132 // 0x1: no pixel repetition (i.e., display each pixel once)
133 // 0x2: each pixel is displayed twice horizontally;
134 // 0x3: use either no pixel repetition or display each pixel twice
135 // ...
136 //
137 NvU16 rep;
138 NVT_COLORDEPTH rgb444; // each bit within is set if rgb444 supported on that bpc
139 NVT_COLORDEPTH yuv444; // each bit within is set if yuv444 supported on that bpc
140 NVT_COLORDEPTH yuv422; // each bit within is set if yuv422 supported on that bpc
141 NVT_COLORDEPTH yuv420; // each bit within is set if yuv420 supported on that bpc
142 NvU32 status; // the timing standard being used
143 NvU8 name[51]; // the name of the timing
144 }NVT_TIMINGEXT;
145 //
146 //
147 //The very basic timing structure based on the VESA standard:
148 //
149 // |<----------------------------htotal--------------------------->|
150 // ---------"active" video-------->|<-------blanking------>|<-----
151 // |<-------hvisible-------->|<-hb->|<-hfp->|<-hsw->|<-hbp->|<-hb->|
152 // ----------+-------------------------+ | | | | |
153 // A A | | | | | | |
154 // : : | | | | | | |
155 // : : | | | | | | |
156 // :verical| addressable video | | | | | |
157 // :visible| | | | | | |
158 // : : | | | | | | |
159 // : : | | | | | | |
160 // verical V | | | | | | |
161 // total --+-------------------------+ | | | | |
162 // : vb border | | | | |
163 // : -----------------------------------+ | | | |
164 // : vfp front porch | | | |
165 // : -------------------------------------------+ | | |
166 // : vsw sync width | | |
167 // : ---------------------------------------------------+ | |
168 // : vbp back porch | |
169 // : -----------------------------------------------------------+ |
170 // V vb border |
171 // --------------------------------------------------------------------------+
172 //
173 typedef struct tagNVT_TIMING
174 {
175 // VESA scan out timing parameters:
176 NvU16 HVisible; //horizontal visible
177 NvU16 HBorder; //horizontal border
178 NvU16 HFrontPorch; //horizontal front porch
179 NvU16 HSyncWidth; //horizontal sync width
180 NvU16 HTotal; //horizontal total
181 NvU8 HSyncPol; //horizontal sync polarity: 1-negative, 0-positive
182
183 NvU16 VVisible; //vertical visible
184 NvU16 VBorder; //vertical border
185 NvU16 VFrontPorch; //vertical front porch
186 NvU16 VSyncWidth; //vertical sync width
187 NvU16 VTotal; //vertical total
188 NvU8 VSyncPol; //vertical sync polarity: 1-negative, 0-positive
189
190 NvU16 interlaced; //1-interlaced, 0-progressive
191 NvU32 pclk; //pixel clock in 10KHz
192
193 //other timing related extras
194 NVT_TIMINGEXT etc;
195 }NVT_TIMING;
196
197 #define NVT_MAX_TOTAL_TIMING 128
198
199 //
200 // The below VSync/HSync Polarity definition have been inverted to match
201 // HW Display Class definition.
202 // timing related constants:
203 #define NVT_H_SYNC_POSITIVE 0
204 #define NVT_H_SYNC_NEGATIVE 1
205 #define NVT_H_SYNC_DEFAULT NVT_H_SYNC_NEGATIVE
206 //
207 #define NVT_V_SYNC_POSITIVE 0
208 #define NVT_V_SYNC_NEGATIVE 1
209 #define NVT_V_SYNC_DEFAULT NVT_V_SYNC_POSITIVE
210 //
211 #define NVT_PROGRESSIVE 0
212 #define NVT_INTERLACED 1
213 #define NVT_INTERLACED_EXTRA_VBLANK_ON_FIELD2 1
214 #define NVT_INTERLACED_NO_EXTRA_VBLANK_ON_FIELD2 2
215
216 // timing related macros:
217 #define NVT_FRAME_HEIGHT(_vvisible_, _interlaced_) ((_vvisible_) * ((_interlaced_ != 0) ? 2 : 1))
218
219 //*************************************
220 // The Timing Status encoded in
221 // NVT_TIMING::NVT_TIMINGEXT::status
222 //*************************************
223 //
224 // TIMING_STATUS has the following kinds of info:
225 //
226 // NVT_TIMING::NVT_TIMINGEXT::status
227 //
228 // +----+----+---------+----+----+------------------------------+---+---------------+---+----------------+
229 // bit31 bit30 bit29 bit22 bit21 bit20 bit16 bit15 bit8 bit7 bit0
230 // |native|cust|<-cta format->|Dual|<--------mismatch status-------->|<---timing type--->|<---timing seq#--->|
231 //
232 // 1. the monitor preferred timing flag and cust EDID entry flag
233 //
234 #define NVT_STATUS_TIMING_NATIVE_FLAG_MASK 0x80000000
235 #define NVT_STATUS_TIMING_NATIVE_FLAG_SHIFT 31
236 #define NVT_IS_NATIVE_TIMING(n) (((n)&NVT_STATUS_TIMING_NATIVE_FLAG_MASK)>>NVT_STATUS_TIMING_NATIVE_FLAG_SHIFT)
237 #define NVT_SET_NATIVE_TIMING_FLAG(n) ((n)|=1U<< NVT_STATUS_TIMING_NATIVE_FLAG_SHIFT)
238 #define NVT_PREFERRED_TIMING_MODE_MASK 0x2
239 //
240 #define NVT_STATUS_TIMING_CUST_ENTRY_MASK 0x40000000
241 #define NVT_STATUS_TIMING_CUST_ENTRY_SHIFT 30
242 #define NVT_IS_CUST_ENTRY(n) (((n)&NVT_STATUS_TIMING_CUST_ENTRY_MASK)>>NVT_STATUS_TIMING_CUST_ENTRY_SHIFT)
243 #define NVT_SET_CUST_ENTRY_FLAG(n) ((n)|=1<<NVT_STATUS_TIMING_CUST_ENTRY_SHIFT)
244 //
245 #define NVT_STATUS_TIMING_CEA_FORMAT_MASK 0x3FC00000
246 #define NVT_STATUS_TIMING_CEA_FORMAT_SHIFT 22
247 #define NVT_GET_CEA_FORMAT(n) (((n)&NVT_STATUS_TIMING_CEA_FORMAT_MASK)>>NVT_STATUS_TIMING_CEA_FORMAT_SHIFT)
248 #define NVT_SET_CEA_FORMAT(n,index) {(n)&=~NVT_STATUS_TIMING_CEA_FORMAT_MASK;(n)|=(index)<<NVT_STATUS_TIMING_CEA_FORMAT_SHIFT;}
249 //
250 //
251 // 2. CEA/DMT dual standard flag
252 //
253 #define NVT_STATUS_TIMING_CEA_DMT_MASK 0x00200000
254 #define NVT_STATUS_TIMING_CEA_DMT_SHIFT 21
255 #define NVT_IS_CEA_DMT_DUAL_STANDARD(n) (((n)&NVT_STATUS_TIMING_CEA_DMT_MASK)>>NVT_STATUS_TIMING_CEA_DMT_SHIFT)
256 #define NVT_SET_CEA_DMT_DUAL_STANDARD_FLAG(n) ((n)|=NVT_STATUS_TIMING_CEA_DMT_MASK)
257 //
258 //
259 // 3. the mismatch status
260 #define NVT_STATUS_TIMING_MISMATCH_MASK 0x001F0000
261 #define NVT_STATUS_TIMING_MISMATCH_SHIFT 16
262 #define NVT_STATUS_TIMING_MISMATCH_SIZE 0x1 //visible width and height don't match with the asked width/height
263 #define NVT_STATUS_TIMING_MISMATCH_RR 0x2 //the refresh rate doesn't match with the requested
264 #define NVT_STATUS_TIMING_MISMATCH_FORMAT 0x4 //other timing info doesn't match (i.e. progressive/interlaced, double, reduced-blanking etc...)
265 #define NVT_STATUS_TIMING_MISMATCH_ALIGNMENT 0x8 //the asking alignment doesn't match the spec
266 //
267 // macroes to set/get the timing mismatch status
268 #define NVT_SET_TIMING_STATUS_MISMATCH(m,n) ((m)|=(((n)<<NVT_STATUS_TIMING_MISMATCH_SHIFT)&NVT_STATUS_TIMING_MISMATCH_MASK))
269 #define NVT_GET_TIMING_STATUS_MATCH(n) (((n)&NVT_STATUS_TIMING_MISMATCH_MASK)>>NVT_STATUS_TIMING_MISMATCH_SHIFT)
270 //
271 //
272 // 4. the timing type
273 //
274 #define NVT_STATUS_TIMING_TYPE_MASK 0x0000FF00
275 #define NVT_STATUS_TIMING_TYPE_SHIFT 8
276 //
277 typedef enum NVT_TIMING_TYPE
278 {
279 NVT_TYPE_DMT = 1, // DMT
280 NVT_TYPE_GTF, // GTF
281 NVT_TYPE_ASPR, // wide aspect ratio timing, for legacy support only
282 NVT_TYPE_NTSC_TV, // NTSC TV timing. for legacy support only
283 NVT_TYPE_PAL_TV, // PAL TV timing, legacy support only
284 NVT_TYPE_CVT, // CVT timing
285 NVT_TYPE_CVT_RB, // CVT timing with reduced blanking
286 NVT_TYPE_CUST, // Customized timing
287 NVT_TYPE_EDID_DTD, // EDID detailed timing
288 NVT_TYPE_EDID_STD, // = 10 EDID standard timing
289 NVT_TYPE_EDID_EST, // EDID established timing
290 NVT_TYPE_EDID_CVT, // EDID defined CVT timing (EDID 1.4)
291 NVT_TYPE_EDID_861ST, // EDID defined CEA/EIA 861 timing (in the CTA861 extension)
292 NVT_TYPE_NV_PREDEFINED, // NV pre-defined timings (PsF timings)
293 NVT_TYPE_DMT_RB, // DMT timing with reduced blanking
294 NVT_TYPE_EDID_EXT_DTD, // EDID detailed timing in the extension
295 NVT_TYPE_SDTV, // SDTV timing (including NTSC, PAL etc)
296 NVT_TYPE_HDTV, // HDTV timing (480p,480i,720p, 1080i etc)
297 NVT_TYPE_SMPTE, // deprecated ? still used by drivers\unix\nvkms\src\nvkms-dpy.c
298 NVT_TYPE_EDID_VTB_EXT, // = 20 EDID defined VTB extension timing
299 NVT_TYPE_EDID_VTB_EXT_STD, // EDID defined VTB extension standard timing
300 NVT_TYPE_EDID_VTB_EXT_DTD, // EDID defined VTB extension detailed timing
301 NVT_TYPE_EDID_VTB_EXT_CVT, // EDID defined VTB extension cvt timing
302 NVT_TYPE_HDMI_STEREO, // EDID defined HDMI stereo timing
303 NVT_TYPE_DISPLAYID_1, // DisplayID Type 1 timing
304 NVT_TYPE_DISPLAYID_2, // DisplayID Type 2 timing
305 NVT_TYPE_HDMI_EXT, // EDID defined HDMI extended resolution timing (UHDTV - 4k, 8k etc.)
306 NVT_TYPE_CUST_AUTO, // Customized timing generated automatically by NVCPL
307 NVT_TYPE_CUST_MANUAL, // Customized timing entered manually by user
308 NVT_TYPE_CVT_RB_2, // = 30 CVT timing with reduced blanking V2
309 NVT_TYPE_DMT_RB_2, // DMT timing with reduced blanking V2
310 NVT_TYPE_DISPLAYID_7, // DisplayID 2.0 detailed timing - Type VII
311 NVT_TYPE_DISPLAYID_8, // DisplayID 2.0 enumerated timing - Type VIII
312 NVT_TYPE_DISPLAYID_9, // DisplayID 2.0 formula-based timing - Type IX
313 NVT_TYPE_DISPLAYID_10, // DisplayID 2.0 formula-based timing - Type X
314 NVT_TYPE_CVT_RB_3, // CVT timing with reduced blanking V3
315 NVT_TYPE_CTA861_DID_T7, // EDID defined CTA861 DisplayID Type VII timing (in the CTA861 extension)
316 NVT_TYPE_CTA861_DID_T8, // EDID defined CTA861 DisplayID Type VIII timing (in the CTA861 extension)
317 NVT_TYPE_CTA861_DID_T10 // EDID defined CTA861 DisplayID Type X timing (in the CTA861 extension)
318 }NVT_TIMING_TYPE;
319 //
320 // 5. the timing sequence number like the TV format and EIA861B predefined timing format
321 // **the numbers are chosen to match with the NV h/w format**
322 //
323 #define NVT_STATUS_TIMING_SEQ_MASK 0x000000FF
324 //
325 typedef enum NVT_TV_FORMAT
326 {
327 NVT_NTSC = 0,
328 NVT_NTSC_M = 0,
329 NVT_NTSC_J = 1,
330 NVT_PAL = 2,
331 NVT_PAL_M = 2,
332 NVT_PAL_A = 3,
333 NVT_PAL_N = 4,
334 NVT_PAL_NC = 5,
335 NVT_HD576I = 8,
336 NVT_HD480I,
337 NVT_HD480P,
338 NVT_HD576P,
339 NVT_HD720P,
340 NVT_HD1080I,
341 NVT_HD1080P,
342 NVT_HD720P50,
343 NVT_HD1080P24,
344 NVT_HD1080I50,
345 NVT_HD1080P50,
346 NVT_MAX_TV_FORMAT,
347 NVT_AUTO_SDTV_FORMAT = (NvU32)(-2), // Not supported in NvTiming_GetTvTiming
348 NVT_AUTO_HDTV_FORMAT = (NvU32)(-1),
349 }NVT_TV_FORMAT;
350
351 #define NVT_DEFAULT_HDTV_FMT NVT_HD1080I
352 //
353 // macros to set/get the timing type and seq number
354 //
355 #define NVT_DEF_TIMING_STATUS(type, seq) ((((type)<<NVT_STATUS_TIMING_TYPE_SHIFT)&NVT_STATUS_TIMING_TYPE_MASK) | ((seq)&NVT_STATUS_TIMING_SEQ_MASK))
356 #define NVT_SET_TIMING_STATUS_TYPE(n, type) (((n)&(~NVT_STATUS_TIMING_TYPE_MASK)) | ((type)<<NVT_STATUS_TIMING_TYPE_SHIFT))
357 #define NVT_GET_TIMING_STATUS_TYPE(n) ((n)&NVT_STATUS_TIMING_TYPE_MASK)>>NVT_STATUS_TIMING_TYPE_SHIFT
358 #define NVT_GET_TIMING_STATUS_SEQ(n) ((n)&NVT_STATUS_TIMING_SEQ_MASK)
359 //
360 //
361 //
362 // the timing type definitions
363 #define NVT_STATUS_DMT NVT_DEF_TIMING_STATUS(NVT_TYPE_DMT, 0) // DMT
364 #define NVT_STATUS_GTF NVT_DEF_TIMING_STATUS(NVT_TYPE_GTF, 0) // GTF
365 #define NVT_STATUS_ASPR NVT_DEF_TIMING_STATUS(NVT_TYPE_ASPR, 0) // ASPR
366 #define NVT_STATUS_NTSC_TV NVT_DEF_TIMING_STATUS(NVT_TYPE_NTSC_TV, 0) // TVN
367 #define NVT_STATUS_PAL_TV NVT_DEF_TIMING_STATUS(NVT_TYPE_PAL_TV, 0) // TVP
368 #define NVT_STATUS_CVT NVT_DEF_TIMING_STATUS(NVT_TYPE_CVT, 0) // CVT timing with regular blanking
369 #define NVT_STATUS_CVT_RB NVT_DEF_TIMING_STATUS(NVT_TYPE_CVT_RB, 0) // CVT_RB timing V1
370 #define NVT_STATUS_CVT_RB_2 NVT_DEF_TIMING_STATUS(NVT_TYPE_CVT_RB_2, 0) // CVT_RB timing V2
371 #define NVT_STATUS_CVT_RB_3 NVT_DEF_TIMING_STATUS(NVT_TYPE_CVT_RB_3, 0) // CVT_RB timing V3
372 #define NVT_STATUS_CUST NVT_DEF_TIMING_STATUS(NVT_TYPE_CUST, 0) // Customized timing
373 #define NVT_STATUS_EDID_DTD NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_DTD, 0)
374 #define NVT_STATUS_EDID_STD NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_STD, 0)
375 #define NVT_STATUS_EDID_EST NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_EST, 0)
376 #define NVT_STATUS_EDID_CVT NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_CVT, 0)
377 #define NVT_STATUS_EDID_861ST NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_861ST, 0)
378 #define NVT_STATUS_DMT_RB NVT_DEF_TIMING_STATUS(NVT_TYPE_DMT_RB, 0)
379 #define NVT_STATUS_EDID_EXT_DTD NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_EXT_DTD, 0)
380 #define NVT_STATUS_SDTV_NTSC NVT_DEF_TIMING_STATUS(NVT_TYPE_SDTV, NVT_NTSC)
381 #define NVT_STATUS_SDTV_NTSC_M NVT_DEF_TIMING_STATUS(NVT_TYPE_SDTV, NVT_NTSC)
382 #define NVT_STATUS_SDTV_NTSC_J NVT_DEF_TIMING_STATUS(NVT_TYPE_SDTV, NVT_NTSC_J)
383 #define NVT_STATUS_SDTV_PAL NVT_DEF_TIMING_STATUS(NVT_TYPE_SDTV, NVT_PAL)
384 #define NVT_STATUS_SDTV_PAL_M NVT_DEF_TIMING_STATUS(NVT_TYPE_SDTV, NVT_PAL)
385 #define NVT_STATUS_SDTV_PAL_A NVT_DEF_TIMING_STATUS(NVT_TYPE_SDTV, NVT_PAL_A)
386 #define NVT_STATUS_SDTV_PAL_N NVT_DEF_TIMING_STATUS(NVT_TYPE_SDTV, NVT_PAL_N)
387 #define NVT_STATUS_SDTV_PAL_NC NVT_DEF_TIMING_STATUS(NVT_TYPE_SDTV, NVT_PAL_NC)
388 #define NVT_STATUS_HDTV_480I NVT_DEF_TIMING_STATUS(NVT_TYPE_HDTV, NVT_HD480I)
389 #define NVT_STATUS_HDTV_480P NVT_DEF_TIMING_STATUS(NVT_TYPE_HDTV, NVT_HD480P)
390 #define NVT_STATUS_HDTV_576I NVT_DEF_TIMING_STATUS(NVT_TYPE_HDTV, NVT_HD576I)
391 #define NVT_STATUS_HDTV_576P NVT_DEF_TIMING_STATUS(NVT_TYPE_HDTV, NVT_HD576P)
392 #define NVT_STATUS_HDTV_720P NVT_DEF_TIMING_STATUS(NVT_TYPE_HDTV, NVT_HD720P)
393 #define NVT_STATUS_HDTV_1080I NVT_DEF_TIMING_STATUS(NVT_TYPE_HDTV, NVT_HD1080I)
394 #define NVT_STATUS_HDTV_1080P NVT_DEF_TIMING_STATUS(NVT_TYPE_HDTV, NVT_HD1080P)
395 #define NVT_STATUS_HDTV_720P50 NVT_DEF_TIMING_STATUS(NVT_TYPE_HDTV, NVT_HD720P50)
396 #define NVT_STATUS_HDTV_1080P24 NVT_DEF_TIMING_STATUS(NVT_TYPE_HDTV, NVT_HD1080P24)
397 #define NVT_STATUS_HDTV_1080I50 NVT_DEF_TIMING_STATUS(NVT_TYPE_HDTV, NVT_HD1080I50)
398 #define NVT_STATUS_HDTV_1080P50 NVT_DEF_TIMING_STATUS(NVT_TYPE_HDTV, NVT_HD1080P50)
399 #define NVT_STATUS_EDID_VTB_EXT NVT_DEF_TIMING_STATUS(NVT_TYPE_VTB_EXT, 0)
400 #define NVT_STATUS_EDID_VTB_EXT_DTD NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_VTB_EXT_DTD, 0)
401 #define NVT_STATUS_EDID_VTB_EXT_CVT NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_VTB_EXT_CVT, 0)
402 #define NVT_STATUS_EDID_VTB_EXT_STD NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_VTB_EXT_STD, 0)
403 #define NVT_STATUS_HDMI_STEREO NVT_DEF_TIMING_STATUS(NVT_TYPE_HDMI_STEREO, 0)
404 #define NVT_STATUS_DISPLAYID_1 NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_1, 0)
405 #define NVT_STATUS_DISPLAYID_2 NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_2, 0)
406 #define NVT_STATUS_DISPLAYID_7 NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_7, 0)
407 #define NVT_STATUS_DISPLAYID_8 NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_8, 0)
408 #define NVT_STATUS_DISPLAYID_9 NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_9, 0)
409 #define NVT_STATUS_DISPLAYID_10 NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_10, 0)
410 #define NVT_STATUS_HDMI_EXT NVT_DEF_TIMING_STATUS(NVT_TYPE_HDMI_EXT, 0)
411 #define NVT_STATUS_CUST_AUTO NVT_DEF_TIMING_STATUS(NVT_TYPE_CUST_AUTO, 0)
412 #define NVT_STATUS_CUST_MANUAL NVT_DEF_TIMING_STATUS(NVT_TYPE_CUST_MANUAL, 0)
413
414 //
415 // adding the timing sequence (from the EDID) to the modeset status
416 #define NVT_STATUS_DTD1 NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_DTD, 1)
417 #define NVT_STATUS_EDID_DTDn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_DTD, n)
418 #define NVT_STATUS_EDID_STDn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_STD, n)
419 #define NVT_STATUS_EDID_ESTn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_EST, n)
420 #define NVT_STATUS_EDID_CVTn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_CVT, n)
421 #define NVT_STATUS_EDID_861STn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_861ST, n)
422 #define NVT_STATUS_EDID_EXT_DTDn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_EXT_DTD, n)
423 #define NVT_STATUS_CUSTn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_CUST, n)
424 #define NVT_TYPE_NV_PREDEFINEDn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_NV_PREDEFINED, n)
425 #define NVT_STATUS_EDID_VTB_EXTn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_VTB_EXT, n)
426 #define NVT_STATUS_EDID_VTB_EXT_DTDn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_VTB_EXT_DTD, n)
427 #define NVT_STATUS_EDID_VTB_EXT_STDn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_VTB_EXT_STD, n)
428 #define NVT_STATUS_EDID_VTB_EXT_CVTn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_EDID_VTB_EXT_CVT, n)
429 #define NVT_STATUS_HDMI_STEREO_REQn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_HDMI_STEREO_REQ, n)
430 #define NVT_STATUS_DISPLAYID_1N(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_1, n)
431 #define NVT_STATUS_DISPLAYID_2N(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_2, n)
432 #define NVT_STATUS_DISPLAYID_7N(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_7, n)
433 #define NVT_STATUS_DISPLAYID_8N(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_8, n)
434 #define NVT_STATUS_DISPLAYID_9N(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_9, n)
435 #define NVT_STATUS_DISPLAYID_10N(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_DISPLAYID_10, n)
436 #define NVT_STATUS_HDMI_EXTn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_HDMI_EXT, n)
437 #define NVT_STATUS_CTA861_DID_T7N(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_CTA861_DID_T7, n)
438 #define NVT_STATUS_CTA861_DID_T8N(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_CTA861_DID_T8, n)
439 #define NVT_STATUS_CTA861_DID_T10N(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_CTA861_DID_T10, n)
440 #define NVT_STATUS_CTA861_OVT_Tn(n) NVT_DEF_TIMING_STATUS(NVT_TYPE_CTA861_OVT, n)
441
442 //********************************
443 // CEA/EIA 861 related EDID info
444 //********************************
445 #define NVT_CEA861_REV_NONE 0
446 #define NVT_CEA861_REV_ORIGINAL 1
447 #define NVT_CEA861_REV_A 2
448 #define NVT_CEA861_REV_B 3
449 #define NVT_CEA861_REV_C 3
450 #define NVT_CEA861_REV_D 3
451 #define NVT_CEA861_REV_E 3
452 #define NVT_CEA861_REV_F 3
453 #define NVT_CTA861_REV_G 3
454 #define NVT_CTA861_REV_H 3
455 //
456 // max data after misc/basic_caps in EIA861EXTENSION
457 #define NVT_CEA861_MAX_PAYLOAD 123
458 //
459 // the basic info encoded in byte[3]
460 #define NVT_CEA861_CAP_UNDERSCAN 0x80 // DTV monitor supports underscan
461 #define NVT_CEA861_CAP_BASIC_AUDIO 0x40 // DTV monitor supports basic audio
462 #define NVT_CEA861_CAP_YCbCr_444 0x20 // DTV monitor supports YCbCr4:4:4
463 #define NVT_CEA861_CAP_YCbCr_422 0x10 // DTV monitor supports YCbCr4:2:2
464 //
465 #define NVT_CEA861_TOTAL_LT_MASK 0x0F //the max number of 18-byte detailed timing descriptor
466 //
467 //
468 #define NVT_CEA861_SHORT_DESCRIPTOR_SIZE_MASK 0x1F
469 #define NVT_CEA861_SHORT_DESCRIPTOR_TAG_MASK 0xE0
470 #define NVT_CEA861_SHORT_DESCRIPTOR_TAG_SHIFT 5
471 //
472 // the CTA Tag Codes
473 #define NVT_CEA861_TAG_RSVD 0 // reserved block
474 #define NVT_CEA861_TAG_NONE 0 // reserved block
475 #define NVT_CEA861_TAG_AUDIO 1 // Audio Data Block
476 #define NVT_CEA861_TAG_VIDEO 2 // Video Data Block
477 #define NVT_CEA861_TAG_VENDOR 3 // Vendor Specific Data Block
478 #define NVT_CEA861_TAG_SPEAKER_ALLOC 4 // Speaker Allocation Data Block
479 #define NVT_CEA861_TAG_VESA_DTC 5 // VESA DTC data block
480 #define NVT_CTA861_TAG_VIDEO_FORMAT 6 // Video Format Data Block in CTA861.6
481 #define NVT_CEA861_TAG_EXTENDED_FLAG 7 // use Extended Tag
482 //
483 // the extended tag codes when NVT_CEA861_TAG_EXTENDED_FLAG
484 #define NVT_CEA861_EXT_TAG_VIDEO_CAP 0 // Video Capability Data Block
485 #define NVT_CEA861_EXT_TAG_VENDOR_SPECIFIC_VIDEO 1 // Vendor-Specific Video Data Block
486 #define NVT_CEA861_EXT_TAG_VESA_VIDEO_DISPLAY_DEVICE 2 // VESA Video Display Device Information Data Block
487 #define NVT_CEA861_EXT_TAG_VESA_VIDEO 3 // Reserved for VESA Video Data BLock
488 #define NVT_CEA861_EXT_TAG_HDMI_VIDEO 4 // Reserved for HDMI Video Data Block
489 #define NVT_CEA861_EXT_TAG_COLORIMETRY 5 // Colorimetry Data Block
490 #define NVT_CEA861_EXT_TAG_HDR_STATIC_METADATA 6 // HDR Static Metadata Data Block CEA861.3 HDR extension for HDMI 2.0a
491 #define NVT_CTA861_EXT_TAG_HDR_DYNAMIC_METADATA 7 // CTA861-H HDR Dynamic Metadata Data Block
492 #define NVT_CTA861_EXT_TAG_NATIVE_VIDEO_RESOLUTION 8 // CTA861.6 Native Video Resolution Data Block
493 #define NVT_CTA861_EXT_TAG_VIDEO_RSVD_MIN 9 // 9...12 : Reserved for video-related blocks
494 #define NVT_CTA861_EXT_TAG_VIDEO_RSVD_MAX 12
495 #define NVT_CEA861_EXT_TAG_VIDEO_FORMAT_PREFERENCE 13 // CEA861F Video Format Preference Data Block
496 #define NVT_CEA861_EXT_TAG_YCBCR420_VIDEO 14 // CEA861F YCBCR 4:2:0 Video Data Block
497 #define NVT_CEA861_EXT_TAG_YCBCR420_CAP 15 // CEA861F YCBCR 4:2:0 Capability Map Data Block
498 #define NVT_CEA861_EXT_TAG_MISC_AUDIO 16 // CEA Miscellaneous Audio Fields
499 #define NVT_CEA861_EXT_TAG_VENDOR_SPECIFIC_AUDIO 17 // Vendor-Specific Audio Data Block
500 #define NVT_CTA861_EXT_TAG_HDMI_AUDIO 18 // Reserved for HDMI Audio Data Block
501 #define NVT_CTA861_EXT_TAG_ROOM_CONFIGURATION 19 // CTA861-H Room Configuration Data Block
502 #define NVT_CTA861_EXT_TAG_SPEACKER_LOCATION 20 // CTA861-H Speaker Location Data Block
503 #define NVT_CTA861_EXT_TAG_AUDIO_RSVD_MIN 21 // 21...31 : Reserved for audio-related blocks
504 #define NVT_CTA861_EXT_TAG_AUDIO_RSVD_MAX 31
505 #define NVT_CEA861_EXT_TAG_INFOFRAME 32 // Infoframe Data Block
506 #define NVT_CTA861_EXT_TAG_RSVD 33 // Reserved
507 #define NVT_CTA861_EXT_TAG_DID_TYPE_VII 34 // DisplayID Type VII Video Timing Data Block
508 #define NVT_CTA861_EXT_TAG_DID_TYPE_VIII 35 // DisplayID Type VIII Video Timing Data Block
509 #define NVT_CTA861_EXT_TAG_RSVD_MIN_1 36 // 36...41 : Reserved for general
510 #define NVT_CTA861_EXT_TAG_RSVD_MAX_1 41
511 #define NVT_CTA861_EXT_TAG_DID_TYPE_X 42 // DisplayID Type X Video Timing Data Block
512 #define NVT_CTA861_EXT_TAG_RSVD_MIN_2 43 // 43...119 : Reserved for general
513 #define NVT_CTA861_EXT_TAG_RSVD_MAX_2 119
514 #define NVT_CTA861_EXT_TAG_HF_EEODB 120 // HDMI Forum Edid Extension Override Data Block
515 #define NVT_CTA861_EXT_TAG_SCDB 121 // 0x79 == Tag for Sink Capability Data Block
516 #define NVT_CTA861_EXT_TAG_HDMI_RSVD_MIN 122 // 122...127 : Reserved for HDMI
517 #define NVT_CTA861_EXT_TAG_HDMI_RSVD_MAX 127
518 #define NVT_CTA861_EXT_TAG_RSVD_MIN_3 128 // 128...255 : Reserved for general
519 #define NVT_CTA861_EXT_TAG_RSVD_MAX_3 255
520 //
521 //the extended tag payload size; the size includes the extended tag code
522 #define NVT_CEA861_EXT_VIDEO_CAP_SD_SIZE 2
523 #define NVT_CEA861_EXT_COLORIMETRY_SD_SIZE 3
524 #define NVT_CTA861_EXT_HDR_STATIC_METADATA_SIZE 6
525 #define NVT_CTA861_EXT_SCDB_PAYLOAD_MAX_LENGTH NVT_CEA861_VSDB_PAYLOAD_MAX_LENGTH
526 //
527 //
528 #define NVT_CEA861_GET_SHORT_DESCRIPTOR_TAG(a) (((a)&NVT_CEA861_SHORT_DESCRIPTOR_TAG_MASK)>>NVT_CEA861_SHORT_DESCRIPTOR_TAG_SHIFT)
529 #define NVT_CEA861_GET_SHORT_DESCRIPTOR_SIZE(a) ((NvU32)((a)&NVT_CEA861_SHORT_DESCRIPTOR_SIZE_MASK))
530
531
532 //********************************
533 // VTB Extension related info
534 //********************************
535
536 #define NVT_VTB_REV_NONE 0
537 #define NVT_VTB_REV_A 1
538
539 #define NVT_VTB_MAX_PAYLOAD 122
540
541 //*************************
542 // short descriptor
543 //*************************
544 #define NVT_CEA861_SD_HEADER_SIZE 1
545 #define NVT_CEA861_SD_PAYLOAD_SIZE 31
546 #define NVT_CEA861_SD_TOTAL_SIZE (NVT_CEA861_SD_HEADER_SIZE + NVT_CEA861_SD_PAYLOAD_SIZE)
547
548 //*************************
549 // short video descriptor
550 //*************************
551 #define NVT_CEA861_VIDEO_SD_SIZE 1
552 // the max total short video descriptors possible; See CEA-861-E, section 7.5,
553 // "It is also possible to have more than one of a specific type of data block if necessary
554 // to include all of the descriptors needed to describe the sinks capabilities."
555 #define NVT_CEA861_VIDEO_MAX_DESCRIPTOR ((NVT_CEA861_MAX_PAYLOAD / NVT_CEA861_SD_TOTAL_SIZE) * (NVT_CEA861_SD_PAYLOAD_SIZE / NVT_CEA861_VIDEO_SD_SIZE) + \
556 (NVT_CEA861_MAX_PAYLOAD % NVT_CEA861_SD_TOTAL_SIZE - NVT_CEA861_SD_HEADER_SIZE) / NVT_CEA861_VIDEO_SD_SIZE)
557 #define NVT_CTA861_VIDEO_VIC_MASK 0xFF //the VIC mask of the short video descriptor
558 #define NVT_CTA861_7BIT_VIDEO_VIC_MASK 0x7F //the 7 bits VIC mask of the short video descriptor
559 #define NVT_CTA861_VIDEO_NATIVE_MASK 0x80 //the Native mask of the short video descriptor
560 #define NVT_HDMI_YUV_420_PCLK_SUPPORTED_MIN 59000 //the vale shall equal or larger than 590MHz to support YCbCr in HDMI2.1
561
562 // CTA-861G supports more SVDs which is over 0x7F index
563 // All value below 192 will be treated as 7 bit VIC. Value 128~192 shall be forbidden.
564 #define NVT_GET_CTA_8BIT_VIC(vic) (((vic) <= NVT_CTA861_7BIT_8BIT_SEPARATE_VALUE) ? ((vic) & NVT_CTA861_7BIT_VIDEO_VIC_MASK) : ((vic) & NVT_CTA861_VIDEO_VIC_MASK))
565 //
566
567 // According to CEA-861-E Spec.
568 // Note 3. A video timing with a vertical frequency that is an integer multiple
569 // of 6.00 Hz (i.e. 24.00, 30.00, 60.00, 120.00 or 240.00 Hz) is considered to
570 // be the same as a video timing with the equivalent detailed timing
571 // information but where the vertical frequency is adjusted by a factor of
572 // 1000/1001 (i.e., 24/1.001, 30/1.001, 60/1.001, 120/1.001 or 240/1.001).
573 // Excluding ceaIndex 1 640x480 which is a PC Mode.
574 #define NVT_CTA861_TIMING_FRR(_VID_, _RR_) ((_VID_) > 1 && ((_RR_) % 6) == 0)
575 #define NVT_CEA861_640X480P_59940HZ_4X3 1 // Video Identification Code: format 1
576 #define NVT_CEA861_720X480P_59940HZ_4X3 2 // Video Identification Code: format 2
577 #define NVT_CEA861_720X480P_59940HZ_16X9 3 // Video Identification Code: format 3
578 #define NVT_CEA861_1280X720P_59940HZ_16X9 4 // ...
579 #define NVT_CEA861_1920X1080I_59940HZ_16X9 5 // ...
580 #define NVT_CEA861_1440X480I_59940HZ_4X3 6 // ...
581 #define NVT_CEA861_1440X480I_59940HZ_16X9 7 // ...
582 #define NVT_CEA861_1440X240P_59940HZ_4X3 8 // ...
583 #define NVT_CEA861_1440X240P_59940HZ_16X9 9 // ...
584 #define NVT_CEA861_2880X480I_59940HZ_4X3 10 // ...
585 #define NVT_CEA861_2880X480I_59940HZ_16X9 11 // ...
586 #define NVT_CEA861_2880X240P_59940HZ_4X3 12 // ...
587 #define NVT_CEA861_2880X240P_59940HZ_16X9 13 // ...
588 #define NVT_CEA861_1440X480P_59940HZ_4X3 14 // ...
589 #define NVT_CEA861_1440X480P_59940HZ_16X9 15 // ...
590 #define NVT_CEA861_1920X1080P_59940HZ_16X9 16 // ...
591 #define NVT_CEA861_720X576P_50000HZ_4X3 17 // ...
592 #define NVT_CEA861_720X576P_50000HZ_16X9 18 // ...
593 #define NVT_CEA861_1280X720P_50000HZ_16X9 19 // ...
594 #define NVT_CEA861_1920X1080I_50000HZ_16X9 20 // ...
595 #define NVT_CEA861_1440X576I_50000HZ_4X3 21 // ...
596 #define NVT_CEA861_1440X576I_50000HZ_16X9 22 // ...
597 #define NVT_CEA861_1440X288P_50000HZ_4X3 23 // ...
598 #define NVT_CEA861_1440X288P_50000HZ_16X9 24 // ...
599 #define NVT_CEA861_2880X576I_50000HZ_4X3 25 // ...
600 #define NVT_CEA861_2880X576I_50000HZ_16X9 26 // ...
601 #define NVT_CEA861_2880X288P_50000HZ_4X3 27 // ...
602 #define NVT_CEA861_2880X288P_50000HZ_16X9 28 // ...
603 #define NVT_CEA861_1440X576P_50000HZ_4X3 29 // ...
604 #define NVT_CEA861_1440X576P_50000HZ_16X9 30 // ...
605 #define NVT_CEA861_1920X1080P_50000HZ_16X9 31 // ...
606 #define NVT_CEA861_1920X1080P_23976HZ_16X9 32 // ...
607 #define NVT_CEA861_1920X1080P_25000HZ_16X9 33 // ...
608 #define NVT_CEA861_1920X1080P_29970HZ_16X9 34 // ...
609 #define NVT_CEA861_2880X480P_59940HZ_4X3 35 // ...
610 #define NVT_CEA861_2880X480P_59940HZ_16X9 36 // ...
611 #define NVT_CEA861_2880X576P_50000HZ_4X3 37 // ...
612 #define NVT_CEA861_2880X576P_50000HZ_16X9 38 // ...
613 #define NVT_CEA861_1920X1250I_50000HZ_16X9 39 // ...
614 #define NVT_CEA861_1920X1080I_100000HZ_16X9 40 // ...
615 #define NVT_CEA861_1280X720P_100000HZ_16X9 41 // ...
616 #define NVT_CEA861_720X576P_100000HZ_4X3 42 // ...
617 #define NVT_CEA861_720X576P_100000HZ_16X9 43 // ...
618 #define NVT_CEA861_1440X576I_100000HZ_4X3 44 // ...
619 #define NVT_CEA861_1440X576I_100000HZ_16X9 45 // ...
620 #define NVT_CEA861_1920X1080I_119880HZ_16X9 46 // ...
621 #define NVT_CEA861_1280X720P_119880HZ_16X9 47 // ...
622 #define NVT_CEA861_720X480P_119880HZ_4X3 48 // ...
623 #define NVT_CEA861_720X480P_119880HZ_16X9 49 // ...
624 #define NVT_CEA861_1440X480I_119880HZ_4X3 50 // ...
625 #define NVT_CEA861_1440X480I_119880HZ_16X9 51 // ...
626 #define NVT_CEA861_720X576P_200000HZ_4X3 52 // ...
627 #define NVT_CEA861_720X576P_200000HZ_16X9 53 // ...
628 #define NVT_CEA861_1440X576I_200000HZ_4X3 54 // ...
629 #define NVT_CEA861_1440X576I_200000HZ_16X9 55 // ...
630 #define NVT_CEA861_720X480P_239760HZ_4X3 56 // ...
631 #define NVT_CEA861_720X480P_239760HZ_16X9 57 // ...
632 #define NVT_CEA861_1440X480I_239760HZ_4X3 58 // Video Identification Code: format 58
633 #define NVT_CEA861_1440X480I_239760HZ_16X9 59 // Video Identification Code: format 59
634 #define NVT_CEA861_1280X720P_23976HZ_16X9 60 // ...
635 #define NVT_CEA861_1280X720P_25000HZ_16X9 61 // ...
636 #define NVT_CEA861_1280X720P_29970HZ_16X9 62 // ...
637 #define NVT_CEA861_1920X1080P_119880HZ_16X9 63 // ...
638 #define NVT_CEA861_1920X1080P_100000HZ_16X9 64 // ...
639
640 // Following modes are from CEA-861F
641 #define NVT_CEA861_1280X720P_23980HZ_64X27 65 // Video Identification Code: format 65
642 #define NVT_CEA861_1280X720P_25000HZ_64X27 66 // Video Identification Code: format 66
643 #define NVT_CEA861_1280X720P_29970HZ_64X27 67 // Video Identification Code: format 67
644 #define NVT_CEA861_1280X720P_50000HZ_64X27 68
645 #define NVT_CEA861_1280X720P_59940HZ_64X27 69
646 #define NVT_CEA861_1280X720P_100000HZ_64X27 70
647 #define NVT_CEA861_1280X720P_119880HZ_64X27 71
648 #define NVT_CEA861_1920X1080P_23980HZ_64X27 72
649 #define NVT_CEA861_1920X1080P_25000HZ_64X27 73
650 #define NVT_CEA861_1920X1080P_29970HZ_64X27 74
651 #define NVT_CEA861_1920X1080P_50000HZ_64X27 75
652 #define NVT_CEA861_1920X1080P_59940HZ_64X27 76
653 #define NVT_CEA861_1920X1080P_100000HZ_64X27 77
654 #define NVT_CEA861_1920X1080P_119880HZ_64X27 78
655 #define NVT_CEA861_1680X720P_23980HZ_64X27 79
656 #define NVT_CEA861_1680X720P_25000HZ_64X27 80
657 #define NVT_CEA861_1680X720P_29970HZ_64X27 81
658 #define NVT_CEA861_1680X720P_50000HZ_64X27 82
659 #define NVT_CEA861_1680X720P_59940HZ_64X27 83
660 #define NVT_CEA861_1680X720P_100000HZ_64X27 84
661 #define NVT_CEA861_1680X720P_119880HZ_64X27 85
662 #define NVT_CEA861_2560X1080P_23980HZ_64X27 86
663 #define NVT_CEA861_2560X1080P_25000HZ_64X27 87
664 #define NVT_CEA861_2560X1080P_29970HZ_64X27 88
665 #define NVT_CEA861_2560X1080P_50000HZ_64X27 89
666 #define NVT_CEA861_2560X1080P_59940HZ_64X27 90
667 #define NVT_CEA861_2560X1080P_100000HZ_64X27 91
668 #define NVT_CEA861_2560X1080P_119880HZ_64X27 92
669 #define NVT_CEA861_3840X2160P_23980HZ_16X9 93
670 #define NVT_CEA861_3840X2160P_25000HZ_16X9 94
671 #define NVT_CEA861_3840X2160P_29970HZ_16X9 95
672 #define NVT_CEA861_3840X2160P_50000HZ_16X9 96
673 #define NVT_CEA861_3840X2160P_59940HZ_16X9 97
674 #define NVT_CEA861_4096X2160P_23980HZ_256X135 98
675 #define NVT_CEA861_4096X2160P_25000HZ_256X135 99
676 #define NVT_CEA861_4096X2160P_29970HZ_256X135 100
677 #define NVT_CEA861_4096X2160P_50000HZ_256X135 101
678 #define NVT_CEA861_4096X2160P_59940HZ_256X135 102
679 #define NVT_CEA861_4096X2160P_23980HZ_64X27 103
680 #define NVT_CEA861_4096X2160P_25000HZ_64X27 104
681 #define NVT_CEA861_4096X2160P_29970HZ_64X27 105
682 #define NVT_CEA861_4096X2160P_50000HZ_64X27 106
683 #define NVT_CEA861_4096X2160P_59940HZ_64X27 107
684
685 // Following modes are from CTA-861G
686 #define NVT_CTA861_1280X720P_47950HZ_16X9 108
687 #define NVT_CTA861_1280X720P_47950HZ_64x27 109
688 #define NVT_CTA861_1680X720P_47950HZ_64x27 110
689 #define NVT_CTA861_1920X1080P_47950HZ_16X9 111
690 #define NVT_CTA861_1920X1080P_47950HZ_64x27 112
691 #define NVT_CTA861_2560X1080P_47950HZ_64x27 113
692 #define NVT_CTA861_3840X2160P_47950HZ_16X9 114
693 #define NVT_CTA861_4096x2160p_47950HZ_256X135 115
694 #define NVT_CTA861_3840x2160p_47950HZ_64x276 116
695 #define NVT_CTA861_3840x2160p_100000HZ_16X9 117
696 #define NVT_CTA861_3840x2160p_119880HZ_16X9 118
697 #define NVT_CTA861_3840x2160p_100000HZ_64X276 119
698 #define NVT_CTA861_3840x2160p_119880HZ_64X276 120
699 #define NVT_CTA861_5120x2160p_23980HZ_64X276 121
700 #define NVT_CTA861_5120x2160p_25000HZ_64X276 122
701 #define NVT_CTA861_5120x2160p_29970HZ_64X276 123
702 #define NVT_CTA861_5120x2160p_47950Hz_64X276 124
703 #define NVT_CTA861_5120x2160p_50000HZ_64X276 125
704 #define NVT_CTA861_5120x2160p_59940HZ_64X276 126
705 #define NVT_CTA861_5120x2160p_100000HZ_64X276 127
706
707 #define NVT_CTA861_7BIT_8BIT_SEPARATE_VALUE 192
708
709 #define NVT_CTA861_5120x2160p_119880HZ_64X276 193
710 #define NVT_CTA861_7680x4320p_23980HZ_16X9 194
711 #define NVT_CTA861_7680x4320p_25000HZ_16X9 195
712 #define NVT_CTA861_7680x4320p_29970HZ_16X9 196
713 #define NVT_CTA861_7680x4320p_47950HZ_16X9 197
714 #define NVT_CTA861_7680x4320p_50000HZ_16X9 198
715 #define NVT_CTA861_7680x4320p_59940HZ_16X9 199
716 #define NVT_CTA861_7680x4320p_100000HZ_16X9 200
717 #define NVT_CTA861_7680x4320p_119880HZ_16X9 201
718 #define NVT_CTA861_7680x4320p_23980HZ_64X276 202
719 #define NVT_CTA861_7680x4320p_25000HZ_64X276 203
720 #define NVT_CTA861_7680x4320p_29970HZ_64X276 204
721 #define NVT_CTA861_7680x4320p_47950HZ_64X276 205
722 #define NVT_CTA861_7680x4320p_50000HZ_64X276 206
723 #define NVT_CTA861_7680x4320p_59940HZ_64X276 207
724 #define NVT_CTA861_7680x4320p_100000HZ_64X276 208
725 #define NVT_CTA861_7680x4320p_119880HZ_64X276 209
726 #define NVT_CTA861_10240x4320p_23980HZ_64X276 210
727 #define NVT_CTA861_10240x4320p_25000HZ_64X276 211
728 #define NVT_CTA861_10240x4320p_29970HZ_64X276 212
729 #define NVT_CTA861_10240x4320p_47950HZ_64X276 213
730 #define NVT_CTA861_10240x4320p_50000HZ_64X276 214
731 #define NVT_CTA861_10240x4320p_59940HZ_64X276 215
732 #define NVT_CTA861_10240x4320p_100000HZ_64X276 216
733 #define NVT_CTA861_10240x4320p_119880HZ_64X276 217
734 #define NVT_CTA861_4096x2160p_100000HZ_256X135 218
735 #define NVT_CTA861_4096x2160p_119880HZ_256X135 219
736
737 // When defining new CEA861 format:
738 // Search code base to update array of certain category of CEA formats, such as 720p, 1080i, etc...
739 // Ideally, it's better to define these groups in one module. However, they should not reside
740 // in this .h file, thus updating these groups in other file is still needed.
741 // example of the group: 720p: NVT_CEA861_1280X720P_59940HZ_16X9,
742 // NVT_CEA861_1280X720P_100000HZ_16X9,
743 // NVT_CEA861_1280X720P_119880HZ_16X9
744
745 // According to CEA-861-I Spec.
746 // Table 11 - Resoution Identification (RID)
747 #define NVT_CTA861_OVT_TIMING_FRR(_FLAG_, _RR_) (((_FLAG_) & (NVT_FLAG_CTA_OVT_TIMING)) != 0 && ((_RR_) % 6) == 0 && (_RR_) != 300)
748 #define NVT_CTA861_RID_NONE NVT_INFOFRAME_CTRL_DONTCARE
749 #define NVT_CTA861_RID_1280x720p_16x9 1
750 #define NVT_CTA861_RID_1280x720p_64x27 2
751 #define NVT_CTA861_RID_1680x720p_64x27 3
752 #define NVT_CTA861_RID_1920x1080p_16x9 4
753 #define NVT_CTA861_RID_1920x1080p_64x27 5
754 #define NVT_CTA861_RID_2560x1080p_64x27 6
755 #define NVT_CTA861_RID_3840x1080p_32x9 7
756 #define NVT_CTA861_RID_2560x1440p_16x9 8
757 #define NVT_CTA861_RID_3440x1440p_64x27 9
758 #define NVT_CTA861_RID_5120x1440p_32x9 10
759 #define NVT_CTA861_RID_3840x2160p_16x9 11
760 #define NVT_CTA861_RID_3840x2160p_64x27 12
761 #define NVT_CTA861_RID_5120x2160p_64x27 13
762 #define NVT_CTA861_RID_7680x2160p_32x9 14
763 #define NVT_CTA861_RID_5120x2880p_16x9 15
764 #define NVT_CTA861_RID_5120x2880p_64x27 16
765 #define NVT_CTA861_RID_6880x2880p_64x27 17
766 #define NVT_CTA861_RID_10240x2880p_32x9 18
767 #define NVT_CTA861_RID_7680x4320p_16x9 19
768 #define NVT_CTA861_RID_7680x4320p_64x27 20
769 #define NVT_CTA861_RID_10240x4320p_64x27 21
770 #define NVT_CTA861_RID_15360x4320p_32x9 22
771 #define NVT_CTA861_RID_11520x6480p_16x9 23
772 #define NVT_CTA861_RID_11520x6480p_64x27 24
773 #define NVT_CTA861_RID_15360x6480p_64x27 25
774 #define NVT_CTA861_RID_15360x8640p_16x9 26
775 #define NVT_CTA861_RID_15360x8640p_64x27 27
776 #define NVT_CTA861_RID_20480x8640p_64x27 28
777
778 // Table 12 - AVI InfoFrame Video Format Frame Rate
779 #define NVT_CTA861_FR_NO_DATA NVT_INFOFRAME_CTRL_DONTCARE
780 #define NVT_CTA861_FR_2398 1
781 #define NVT_CTA861_FR_2400 2
782 #define NVT_CTA861_FR_2500 3
783 #define NVT_CTA861_FR_2997 4
784 #define NVT_CTA861_FR_3000 5
785 #define NVT_CTA861_FR_4795 6
786 #define NVT_CTA861_FR_4800 7
787 #define NVT_CTA861_FR_5000 8
788 #define NVT_CTA861_FR_5994 9
789 #define NVT_CTA861_FR_6000 10
790 #define NVT_CTA861_FR_10000 11
791 #define NVT_CTA861_FR_11988 12
792 #define NVT_CTA861_FR_12000 13
793 #define NVT_CTA861_FR_14386 14
794 #define NVT_CTA861_FR_14400 15
795 #define NVT_CTA861_FR_20000 16
796 #define NVT_CTA861_FR_23976 17
797 #define NVT_CTA861_FR_24000 18
798 #define NVT_CTA861_FR_30000 19
799 #define NVT_CTA861_FR_35964 20
800 #define NVT_CTA861_FR_36000 21
801 #define NVT_CTA861_FR_40000 22
802 #define NVT_CTA861_FR_47952 23
803 #define NVT_CTA861_FR_48000 24
804
805 //*************************
806 // short audio descriptor
807 //*************************
808 #define NVT_CEA861_AUDIO_SD_SIZE sizeof(NVT_3BYTES)
809 // the max total short audio descriptors possible; See CEA-861-E, section 7.5 on repeated types
810 #define NVT_CEA861_AUDIO_MAX_DESCRIPTOR ((NVT_CEA861_MAX_PAYLOAD / NVT_CEA861_SD_TOTAL_SIZE) * (NVT_CEA861_SD_PAYLOAD_SIZE / NVT_CEA861_AUDIO_SD_SIZE) + \
811 (NVT_CEA861_MAX_PAYLOAD % NVT_CEA861_SD_TOTAL_SIZE - NVT_CEA861_SD_HEADER_SIZE) / NVT_CEA861_AUDIO_SD_SIZE)
812 //
813 // short audio descriptor - byte 1
814 #define NVT_CEA861_AUDIO_FORMAT_MASK 0x78 //the audio format mask of the CEA short
815 #define NVT_CEA861_AUDIO_FORMAT_SHIFT 3 //the audio format data shift
816 //
817 #define NVT_CEA861_AUDIO_FORMAT_RSVD 0 // short audio descriptor format - reserved
818 #define NVT_CEA861_AUDIO_FORMAT_LINEAR_PCM 1 // short audio descriptor format - Linear PCM (uncompressed)
819 #define NVT_CEA861_AUDIO_FORMAT_AC3 2 // short audio descriptor format - AC3
820 #define NVT_CEA861_AUDIO_FORMAT_MPEG1 3 // short audio descriptor format - MPEG1(layer 1&2)
821 #define NVT_CEA861_AUDIO_FORMAT_MP3 4 // short audio descriptor format - MP3(MPEG1 layer 3)
822 #define NVT_CEA861_AUDIO_FORMAT_MPEG2 5 // short audio descriptor format - MPEG2 (multichannel)
823 #define NVT_CEA861_AUDIO_FORMAT_AAC 6 // short audio descriptor format - AAC
824 #define NVT_CEA861_AUDIO_FORMAT_DTS 7 // short audio descriptor format - DTS
825 #define NVT_CEA861_AUDIO_FORMAT_ATRAC 8 // short audio descriptor format - ATRAC
826 #define NVT_CEA861_AUDIO_FORMAT_ONE_BIT 9 // short audio descriptor format - one bit audio
827 #define NVT_CEA861_AUDIO_FORMAT_DDP 10 // short audio descriptor format - dolby digital +
828 #define NVT_CEA861_AUDIO_FORMAT_DTS_HD 11 // short audio descriptor format - DTS_HD
829 #define NVT_CEA861_AUDIO_FORMAT_MAT 12 // short audio descriptor format - MAT(MLP)
830 #define NVT_CEA861_AUDIO_FORMAT_DST 13 // short audio descriptor format - DST
831 #define NVT_CEA861_AUDIO_FORMAT_WMA_PRO 14 // short audio descriptor format - WMA Pro
832 #define NVT_CEA861_AUDIO_FORMAT_RSVD15 15 // short audio descriptor format - reserved
833 //
834 #define NVT_CEA861_AUDIO_MAX_CHANNEL_MASK 7 // short audio descriptor format - Max Number of channels - 1
835 #define NVT_CEA861_AUDIO_MAX_CHANNEL_SHIFT 0 // short audio descriptor format shift
836 //
837 // short audio descriptor - byte 2
838 #define NVT_CEA861_AUDIO_SAMPLE_RATE_MASK 0x7F //the sample rate mask
839 #define NVT_CEA861_AUDIO_SAMPLE_RATE_SHIFT 0 //the sample rate shift
840 //
841 #define NVT_CEA861_AUDIO_SAMPLE_RATE_32KHZ 0x01 // short audio descriptor - sample rate : 32KHz
842 #define NVT_CEA861_AUDIO_SAMPLE_RATE_44KHZ 0x02 // short audio descriptor - sample rate : 44KHz
843 #define NVT_CEA861_AUDIO_SAMPLE_RATE_48KHZ 0x04 // short audio descriptor - sample rate : 48KHz
844 #define NVT_CEA861_AUDIO_SAMPLE_RATE_88KHZ 0x08 // short audio descriptor - sample rate : 88KHz
845 #define NVT_CEA861_AUDIO_SAMPLE_RATE_96KHZ 0x10 // short audio descriptor - sample rate : 96KHz
846 #define NVT_CEA861_AUDIO_SAMPLE_RATE_176KHZ 0x20 // short audio descriptor - sample rate : 176KHz
847 #define NVT_CEA861_AUDIO_SAMPLE_RATE_192KHZ 0x40 // short audio descriptor - sample rate : 192KHz
848 #define NVT_CEA861_AUDIO_SAMPLE_RATE_RSVD 0x80 // short audio descriptor - sample rate : reserved
849 //
850 // short audio descriptor - byte 3
851 #define NVT_CEA861_AUDIO_SAMPLE_DEPTH_MASK 0x07 // the uncompressed audio resolution mask
852 #define NVT_CEA861_AUDIO_SAMPLE_DEPTH_SHIFT 0 // the uncompressed audio resolution shift
853 //
854 #define NVT_CEA861_AUDIO_SAMPLE_SIZE_16BIT 0x01 // uncompressed (Linear PCM) audio A/D resolution - 16bit
855 #define NVT_CEA861_AUDIO_SAMPLE_SIZE_20BIT 0x02 // uncompressed (Linear PCM) audio A/D resolution - 20bit
856 #define NVT_CEA861_AUDIO_SAMPLE_SIZE_24BIT 0x04 // uncompressed (Linear PCM) audio A/D resolution - 24bit
857
858 //**************************
859 // speaker allocation data
860 //**************************
861 #define NVT_CEA861_SPEAKER_SD_SIZE sizeof(NVT_3BYTES)
862 // the max total short speaker descriptors possible; See CEA-861-E, section 7.5 on repeated types
863 #define NVT_CEA861_SPEAKER_MAX_DESCRIPTOR ((NVT_CEA861_MAX_PAYLOAD / NVT_CEA861_SD_TOTAL_SIZE) * (NVT_CEA861_SD_PAYLOAD_SIZE / NVT_CEA861_SPEAKER_SD_SIZE) + \
864 (NVT_CEA861_MAX_PAYLOAD % NVT_CEA861_SD_TOTAL_SIZE - NVT_CEA861_SD_HEADER_SIZE) / NVT_CEA861_SPEAKER_SD_SIZE)
865 #define NVT_CEA861_SPEAKER_ALLOC_MASK 0x7F // the speaker allocation mask
866 #define NVT_CEA861_SPEAKER_ALLOC_SHIFT 0 // the speaker allocation mask shift
867 //
868 #define NVT_CEA861_SPEAKER_ALLOC_FL_FR 0x01 // speaker allocation : Front Left + Front Right
869 #define NVT_CEA861_SPEAKER_ALLOC_LFE 0x02 // speaker allocation : Low Frequency Effect
870 #define NVT_CEA861_SPEAKER_ALLOC_FC 0x04 // speaker allocation : Front Center
871 #define NVT_CEA861_SPEAKER_ALLOC_RL_RR 0x08 // speaker allocation : Rear Left + Rear Right
872 #define NVT_CEA861_SPEAKER_ALLOC_RC 0x10 // speaker allocation : Rear Center
873 #define NVT_CEA861_SPEAKER_ALLOC_FLC_FRC 0x20 // speaker allocation : Front Left Center + Front Right Center
874 #define NVT_CEA861_SPEAKER_ALLOC_RLC_RRC 0x40 // speaker allocation : Rear Left Center + Rear Right Center
875
876 //***********************
877 // vendor specific data block (VSDB)
878 //***********************
879 #define NVT_CEA861_VSDB_HEADER_SIZE 4
880 #define NVT_CEA861_VSDB_PAYLOAD_MAX_LENGTH 28 // max allowed vendor specific data block payload (in byte)
881 #define NVT_CEA861_HDMI_IEEE_ID 0x0C03
882 #define NVT_CEA861_HDMI_LLC_IEEE_ID NVT_CEA861_HDMI_IEEE_ID
883 #define NVT_CEA861_NVDA_IEEE_ID 0x44B
884 #define NVT_CEA861_HDMI_FORUM_IEEE_ID 0xC45DD8
885 #define NVT_CEA861_MSFT_IEEE_ID 0xCA125C
886
887 #define NVT_CEA861_VSDB_MAX_BLOCKS 4 // NOTE: The maximum number of VSDB blocks should be:
888 // (NVT_CEA861_MAX_PAYLOAD / (NVT_CEA861_VSDB_HEADER_SIZE + 1)) (assume at least 1 byte of payload)
889 // As of Sept 2013, there are 3 different VSDBs defined in the spec. Hence allocating space for all 24
890 // is overkill. As a tradeoff, we define this limit as 4 for now. If required, this should be increased later.
891
892 typedef struct VSDB_DATA
893 {
894 NvU32 ieee_id;
895 NvU32 vendor_data_size; // size of data copied to vendor_data (excludes ieee_id from frame)
896 NvU8 vendor_data[NVT_CEA861_VSDB_PAYLOAD_MAX_LENGTH];
897 } VSDB_DATA;
898
899 //*******************************
900 // vendor specific video data block (VSVDB)
901 //*******************************
902 #define NVT_CEA861_VSVDB_MAX_BLOCKS 2 // Dolby Vision, HDR10+ VSVDBs
903 #define NVT_CEA861_DV_IEEE_ID 0x00D046
904 #define NVT_CEA861_HDR10PLUS_IEEE_ID 0x90848B
905 #define NVT_CEA861_VSVDB_PAYLOAD_MAX_LENGTH 25 // max allowed vendor specific video data block payload (in byte)
906 #define NVT_CEA861_VSVDB_VERSION_MASK 0xE0 // vsdb version mask
907 #define NVT_CEA861_VSVDB_VERSION_MASK_SHIFT 5 // vsdb version shift mask
908
909 typedef struct VSVDB_DATA
910 {
911 NvU32 ieee_id;
912 NvU32 vendor_data_size; // size of data copied to vendor_data (excludes ieee_id from frame)
913 NvU8 vendor_data[NVT_CEA861_VSVDB_PAYLOAD_MAX_LENGTH];
914 } VSVDB_DATA;
915
916 //*******************************
917 // Video Format Data Block (VFDB)
918 //*******************************
919
920 #define NVT_CTA861_VF_MAX_BLOCKS 4
921 #define NVT_CTA861_VF_MAX_DESCRIPTORS 30
922
923 #define NVT_CTA861_VF_RID_MASK 0x3F
924
925 typedef struct tagNVT_RID_CODES
926 {
927 NvU16 HVisible; // horizontal visible
928 NvU8 HSyncPol; // horizontal sync polarity: 1-negative, 0-positive
929 NvU16 VVisible; // vertical visible
930 NvU8 VSyncPol; // vertical sync polarity: 1-negative, 0-positive
931 NvU16 interlaced; // 1-interlaced, 0-progressive
932 NvU32 aspect; // the display aspect ratio Hi(aspect):horizontal-aspect, Low(aspect):vertical-aspect
933 NvU8 rid; // Resolution Identification (RID)
934 } NVT_RID_CODES;
935
936 #pragma pack(1)
937 typedef struct tagVFD_ONE_BYTE
938 {
939 NvU8 rid : 6;
940 NvU8 fr24 : 1;
941 NvU8 bfr50 : 1;
942 } VFD_ONE_BYTE;
943
944 typedef struct tagVFD_TWO_BYTE
945 {
946 VFD_ONE_BYTE in_onebyte;
947 NvU8 frRate : 6;
948 NvU8 fr144 : 1;
949 NvU8 bfr60 : 1;
950 } VFD_TWO_BYTE;
951
952 typedef struct tagVFD_THREE_BYTE
953 {
954 VFD_TWO_BYTE in_twobyte;
955 NvU8 fr48 : 1;
956 NvU8 f31_37 : 7;
957 } VFD_THREE_BYTE;
958
959 typedef struct tagVFD_FOUR_BYTE
960 {
961 VFD_THREE_BYTE in_threebyte;
962 NvU8 f40_47;
963 } VFD_FOUR_BYTE;
964
965 typedef struct tagVFDB_DATA
966 {
967 struct {
968 NvU8 vfd_len : 2;
969 NvU8 f22_25 : 4;
970 NvU8 ntsc : 1;
971 NvU8 y420 : 1;
972 } info;
973
974 NvU8 total_vfd;
975 NvU8 video_format_desc[NVT_CTA861_VF_MAX_DESCRIPTORS];
976 } VFDB_DATA;
977
978 typedef struct tagNVT_DV_STATIC_METADATA_TYPE0
979 {
980 // first byte
981 NvU8 supports_YUV422_12bit : 1;
982 NvU8 supports_2160p60hz : 1;
983 NvU8 supports_global_dimming : 1;
984 NvU8 reserved_1 : 2;
985 NvU8 VSVDB_version : 3;
986
987 // second- fourth byte
988 NvU8 cc_red_y_3_0 : 4;
989 NvU8 cc_red_x_3_0 : 4;
990 NvU8 cc_red_x_11_4 : 8;
991 NvU8 cc_red_y_11_4 : 8;
992
993 NvU8 cc_green_y_3_0 : 4;
994 NvU8 cc_green_x_3_0 : 4;
995 NvU8 cc_green_x_11_4 : 8;
996 NvU8 cc_green_y_11_4 : 8;
997
998 NvU8 cc_blue_y_3_0 : 4;
999 NvU8 cc_blue_x_3_0 : 4;
1000 NvU8 cc_blue_x_11_4 : 8;
1001 NvU8 cc_blue_y_11_4 : 8;
1002
1003 NvU8 cc_white_y_3_0 : 4;
1004 NvU8 cc_white_x_3_0 : 4;
1005 NvU8 cc_white_x_11_4 : 8;
1006 NvU8 cc_white_y_11_4 : 8;
1007
1008 NvU8 target_max_pq_3_0 : 4;
1009 NvU8 target_min_pq_3_0 : 4;
1010 NvU8 target_min_pq_11_4 : 8;
1011 NvU8 target_max_pq_11_4 : 8;
1012
1013 NvU8 dm_version_minor : 4;
1014 NvU8 dm_version_major : 4;
1015
1016 NvU8 reserved_2 : 8;
1017 NvU8 reserved_3 : 8;
1018 NvU8 reserved_4 : 8;
1019 NvU8 reserved_5 : 8;
1020 } NVT_DV_STATIC_METADATA_TYPE0;
1021
1022 typedef struct tagNVT_DV_STATIC_METADATA_TYPE1
1023 {
1024 // first byte
1025 NvU8 supports_YUV422_12bit : 1;
1026 NvU8 supports_2160p60hz : 1;
1027 NvU8 dm_version : 3;
1028 NvU8 VSVDB_version : 3;
1029
1030 // second byte
1031 NvU8 supports_global_dimming : 1;
1032 NvU8 target_max_luminance : 7;
1033
1034 // third byte
1035 NvU8 colorimetry : 1;
1036 NvU8 target_min_luminance : 7;
1037
1038 //fourth byte
1039 NvU8 reserved : 8;
1040 //fith to tenth byte
1041 NvU8 cc_red_x : 8;
1042 NvU8 cc_red_y : 8;
1043 NvU8 cc_green_x : 8;
1044 NvU8 cc_green_y : 8;
1045 NvU8 cc_blue_x : 8;
1046 NvU8 cc_blue_y : 8;
1047 } NVT_DV_STATIC_METADATA_TYPE1;
1048
1049 typedef struct tagNVT_DV_STATIC_METADATA_TYPE1_1
1050 {
1051 // first byte
1052 NvU8 supports_YUV422_12bit : 1;
1053 NvU8 supports_2160p60hz : 1;
1054 NvU8 dm_version : 3;
1055 NvU8 VSVDB_version : 3;
1056
1057 // second byte
1058 NvU8 supports_global_dimming : 1;
1059 NvU8 target_max_luminance : 7;
1060
1061 // third byte
1062 NvU8 colorimetry : 1;
1063 NvU8 target_min_luminance : 7;
1064
1065 //fourth byte
1066 NvU8 interface_supported_by_sink : 2;
1067 NvU8 unique_By : 3;
1068 NvU8 unique_Bx : 3;
1069
1070 //fifth byte
1071 NvU8 unique_Ry_bit_0 : 1;
1072 NvU8 unique_Gx : 7;
1073
1074 //sixth byte
1075 NvU8 unique_Ry_bit_1 : 1;
1076 NvU8 unique_Gy : 7;
1077
1078 //seventh byte
1079 NvU8 unique_Rx : 5;
1080 NvU8 unique_Ry_bit_2_to_4 : 3;
1081
1082 } NVT_DV_STATIC_METADATA_TYPE1_1;
1083
1084 typedef struct tagNVT_DV_STATIC_METADATA_TYPE2
1085 {
1086 // first byte
1087 NvU8 supports_YUV422_12bit : 1;
1088 NvU8 supports_backlight_control : 1;
1089 NvU8 dm_version : 3;
1090 NvU8 VSVDB_version : 3;
1091
1092 // second byte
1093 NvU8 reserved : 2;
1094 NvU8 supports_global_dimming : 1;
1095 NvU8 target_min_luminance : 5;
1096
1097 // third byte
1098 NvU8 interface_supported_by_sink : 2;
1099 NvU8 parity : 1;
1100 NvU8 target_max_luminance : 5;
1101
1102 //fourth byte
1103 NvU8 supports_10b_12b_444_bit1 : 1;
1104 NvU8 unique_Gx : 7;
1105
1106 //fifth byte
1107 NvU8 supports_10b_12b_444_bit0 : 1;
1108 NvU8 unique_Gy : 7;
1109
1110 //sixth byte
1111 NvU8 unique_Bx : 3;
1112 NvU8 unique_Rx : 5;
1113
1114 //seventh byte
1115 NvU8 unique_By : 3;
1116 NvU8 unique_Ry : 5;
1117
1118 } NVT_DV_STATIC_METADATA_TYPE2;
1119
1120 typedef struct tagNVT_HDR10PLUS_INFO
1121 {
1122 // first byte
1123 NvU8 application_version : 2;
1124 NvU8 full_frame_peak_luminance_index : 2;
1125 NvU8 peak_luminance_index : 4;
1126 } NVT_HDR10PLUS_INFO;
1127 #pragma pack()
1128
1129 //***************************
1130 // colorimetry data block
1131 //***************************
1132 //
1133 // Colorimetry capabilities - byte 3
1134 #define NVT_CEA861_COLORIMETRY_MASK 0xFF // the colorimetry cap mask
1135 #define NVT_CEA861_COLORIMETRY_SHIFT 0 // the colorimetry cap shift
1136
1137 #define NVT_CEA861_COLORIMETRY_NO_DATA 0x00
1138 #define NVT_CEA861_COLORIMETRY_xvYCC_601 0x01 // xvYCC601 capable
1139 #define NVT_CEA861_COLORIMETRY_xvYCC_709 0x02 // xvYCC709 capable
1140 #define NVT_CEA861_COLORIMETRY_sYCC_601 0x04 // sYCC601 capable
1141 #define NVT_CEA861_COLORIMETRY_AdobeYCC_601 0x08 // AdobeYCC601 capable
1142 #define NVT_CEA861_COLORIMETRY_AdobeRGB 0x10 // AdobeRGB capable
1143 #define NVT_CEA861_COLORIMETRY_BT2020cYCC 0x20 // BT2020 cYCbCr (constant luminance) capable
1144 #define NVT_CEA861_COLORIMETRY_BT2020YCC 0x40 // BT2020 Y'CbCr capable
1145 #define NVT_CEA861_COLORIMETRY_BT2020RGB 0x80 // BT2020 RGB capable
1146 // Colorimetry capabilities - byte 4
1147 #define NVT_CEA861_COLORIMETRY_defaultRGB 0x10 // based on the default chromaticity in Basic Display Parameters and Feature Block
1148 #define NVT_CEA861_COLORIMETRY_sRGB 0x20 // IEC 61966-2-1
1149 #define NVT_CEA861_COLORIMETRY_ICtCp 0x40 // ITU-R BT.2100 ICtCp
1150 #define NVT_CEA861_COLORIMETRY_ST2113RGB 0x80 // SMPTE ST 2113 R'G'B'
1151 //
1152 // gamut-related metadata capabilities - byte 4
1153 #define NVT_CEA861_GAMUT_METADATA_MASK 0x8F // the colorimetry or gamut-related metadata block mask
1154 #define NVT_CEA861_GAMUT_METADATA_SHIFT 0 // the metadata block shift
1155 //
1156 #define NVT_CEA861_GAMUT_METADATA_MD0 0x01 // MD0
1157 #define NVT_CEA861_GAMUT_METADATA_MD1 0x02 // MD1
1158 #define NVT_CEA861_GAMUT_METADATA_MD2 0x04 // MD2
1159 #define NVT_CEA861_GAMUT_METADATA_MD3 0x08 // MD2
1160
1161 //***************************
1162 // HDR static metadata data block
1163 //***************************
1164 //
1165 typedef struct tagNVT_5BYTES
1166 {
1167 NvU8 byte1;
1168 NvU8 byte2;
1169 NvU8 byte3;
1170 NvU8 byte4;
1171 NvU8 byte5;
1172 } NVT_5BYTES;
1173
1174 // Supported Electro-Optical Transfer Function - byte 3
1175 #define NVT_CEA861_EOTF_MASK 0x3F // the EOTF cap mask
1176 #define NVT_CEA861_EOTF_SHIFT 0 // the EOTF cap shift
1177 //
1178 #define NVT_CEA861_EOTF_GAMMA_SDR 0x01 // ET_0 Traditional gamma - SDR Luminance Range
1179 #define NVT_CEA861_EOTF_GAMMA_HDR 0x02 // ET_1 Traditional gamma - HDR Luminance Range
1180 #define NVT_CEA861_EOTF_SMPTE_ST2084 0x04 // ET_2 SMPTE ST2084 EOTF (a.k.a PQ - Perceptual Quantizer EOTF)
1181 #define NVT_CEA861_EOTF_FUTURE 0x08 // ET_3 Future EOTF
1182
1183 //
1184 // Supported Static Metadata Descriptor - byte 4
1185 #define NVT_CEA861_STATIC_METADATA_DESCRIPTOR_MASK 0x01 // the supported static metadata descriptor block mask
1186 #define NVT_CEA861_STATIC_METADATA_SHIFT 0 // the metadata block shift
1187 //
1188 #define NVT_CEA861_STATIC_METADATA_SM0 0x00 // Static Metadata Type 1
1189
1190 //
1191 // Desired Content Max Luminance data - byte 5
1192 #define NVT_CEA861_MAX_CLL_MASK 0xFF // the desired content max luminance level (MaxCLL) data block mask
1193 #define NVT_CEA861_MAX_CLL_SHIFT 0 // the metadata block shift
1194
1195 // Desired Content Max Frame-Average Luminance data - byte 6
1196 #define NVT_CEA861_MAX_FALL_MASK 0xFF // the desired content max frame-average luminance (MaxFALL) data block mask
1197 #define NVT_CEA861_MAX_FALL_SHIFT 0 // the metadata block shift
1198
1199 // Desired Content Min Luminance data - byte 7
1200 #define NVT_CEA861_MIN_CLL_MASK 0xFF // the desired content min luminance level (MinCLL) data block mask
1201 #define NVT_CEA861_MIN_CLL_SHIFT 0 // the metadata block shift
1202
1203 //***************************
1204 // video capability data block
1205 //***************************
1206 //
1207 #define NVT_CEA861_VIDEO_CAPABILITY_MASK 0x7F // the video capability data block mask
1208 #define NVT_CEA861_VIDEO_CAPABILITY_SHIFT 0 // the video capability data block shift
1209 //
1210 #define NVT_CEA861_VIDEO_CAPABILITY_S_CE0 0x01 // S_CE0
1211 #define NVT_CEA861_VIDEO_CAPABILITY_S_CE1 0x02 // S_CE1
1212 #define NVT_CEA861_VIDEO_CAPABILITY_S_IT0 0x04 // S_IT0
1213 #define NVT_CEA861_VIDEO_CAPABILITY_S_IT1 0x08 // S_IT1
1214 #define NVT_CEA861_VIDEO_CAPABILITY_S_PT0 0x10 // S_PT0
1215 #define NVT_CEA861_VIDEO_CAPABILITY_S_PT1 0x20 // S_PT1
1216 #define NVT_CEA861_VIDEO_CAPABILITY_S_QS 0x40 // S_QS
1217
1218 //**************************
1219 // EDID 861 Extension Info
1220 //**************************
1221 typedef struct tagNVT_3BYTES
1222 {
1223 NvU8 byte1;
1224 NvU8 byte2;
1225 NvU8 byte3;
1226 } NVT_3BYTES;
1227
1228 //***********************
1229 // VCDB specific data
1230 //***********************
1231 #define NVT_CEA861_VCDB_QS_MASK 0x40 // quantization range selectable mask
1232 #define NVT_CEA861_VCDB_QS_SHIFT 6 // quantization range selectable shift
1233
1234 #define NVT_CEA861_VCDB_S_PT_MASK 0x30 // PT over/underscan behavior mask
1235 #define NVT_CEA861_VCDB_S_PT_SHIFT 4 // PT over/underscan behavior shift
1236 #define NVT_CEA861_VCDB_S_PT_NO_DATA 0x00
1237 #define NVT_CEA861_VCDB_S_PT_ALWAYS_OVERSCAN 0x01
1238 #define NVT_CEA861_VCDB_S_PT_ALWAYS_UNDERSCAN 0x02
1239 #define NVT_CEA861_VCDB_S_PT_OVER_OR_UNDERSCAN 0x03
1240
1241 #define NVT_CEA861_VCDB_S_IT_MASK 0x0C // IT over/underscan behavior mask
1242 #define NVT_CEA861_VCDB_S_IT_SHIFT 2 // IT over/underscan behavior shift
1243 #define NVT_CEA861_VCDB_S_IT_NOT_SUPPORTED 0x00
1244 #define NVT_CEA861_VCDB_S_IT_ALWAYS_OVERSCAN 0x01
1245 #define NVT_CEA861_VCDB_S_IT_ALWAYS_UNDERSCAN 0x02
1246 #define NVT_CEA861_VCDB_S_IT_OVER_OR_UNDERSCAN 0x03
1247
1248 #define NVT_CEA861_VCDB_S_CE_MASK 0x03 // CE over/underscan behavior mask
1249 #define NVT_CEA861_VCDB_S_CE_SHIFT 0 // CE over/underscan behavior shift
1250 #define NVT_CEA861_VCDB_S_CE_NOT_SUPPORTED 0x00
1251 #define NVT_CEA861_VCDB_S_CE_ALWAYS_OVERSCAN 0x01
1252 #define NVT_CEA861_VCDB_S_CE_ALWAYS_UNDERSCAN 0x02
1253 #define NVT_CEA861_VCDB_S_CE_OVER_OR_UNDERSCAN 0x03
1254
1255 //
1256 typedef struct tagNVT_2BYTES
1257 {
1258 NvU8 byte1;
1259 NvU8 byte2;
1260 } NVT_2BYTES;
1261
1262 #pragma pack(1)
1263 #define NVT_CTA861_DID_MAX_DATA_BLOCK 4
1264 //***********************
1265 // DisplayID VII Video Timing Data Block (T7VDB)
1266 //***********************
1267 #define NVT_CTA861_DID_TYPE7_DESCRIPTORS_MIN 1
1268 #define NVT_CTA861_DID_TYPE7_DESCRIPTORS_MAX 1
1269 #define NVT_CTA861_DID_TYPE7_DESCRIPTORS_LENGTH 20
1270
1271 typedef struct tagDID_TYPE7_DATA
1272 {
1273 struct {
1274 NvU8 revision : 3;
1275 NvU8 dsc_pt : 1;
1276 NvU8 t7_m : 3;
1277 NvU8 F37 : 1;
1278 } version;
1279
1280 NvU8 total_descriptors;
1281 NvU8 payload[29]; // t7_m=0 so only 20byte used
1282 } DID_TYPE7_DATA;
1283
1284 //***********************
1285 // DisplayID VIII Video Timing Data Block (T8VDB)
1286 //***********************
1287 #define NVT_CTA861_DID_TYPE8_ONE_BYTE_DESCRIPTOR 1
1288 #define NVT_CTA861_DID_TYPE8_TWO_BYTE_DESCRIPTOR 2
1289 #define NVT_CTA861_DID_TYPE8_DESCRIPTORS_MIN 1
1290 #define NVT_CTA861_DID_TYPE8_ONE_BYTE_DESCRIPTORS_MAX 28
1291 #define NVT_CTA861_DID_TYPE8_TWO_BYTE_DESCRIPTORS_MAX 14
1292
1293 typedef struct tagDID_TYPE8_DATA
1294 {
1295 struct {
1296 NvU8 revision : 3;
1297 NvU8 tcs : 1;
1298 NvU8 F34 : 1;
1299 NvU8 t8y420 : 1;
1300 NvU8 code_type : 2;
1301 } version;
1302
1303 NvU8 total_descriptors;
1304 NvU8 payload[NVT_CTA861_DID_TYPE8_ONE_BYTE_DESCRIPTORS_MAX]; // used one_byte descriptor length
1305 } DID_TYPE8_DATA;
1306
1307 //***********************
1308 // DisplayID X Video Timing Data Block (T10VDB)
1309 //***********************
1310 #define NVT_CTA861_DID_TYPE10_DESCRIPTORS_MIN 1
1311 #define NVT_CTA861_DID_TYPE10_DESCRIPTORS_MAX 4
1312
1313 typedef struct tagDID_TYPE10_DATA
1314 {
1315 struct {
1316 NvU8 revision : 3;
1317 NvU8 F33 : 1;
1318 NvU8 t10_m : 3;
1319 NvU8 F37 : 1;
1320 } version;
1321
1322 NvU8 total_descriptors;
1323 NvU8 payload[28]; // given the 7bytes * 4 space
1324 } DID_TYPE10_DATA;
1325
1326 //***********************
1327 // Native Video Resolution Data Block (NVRDB)
1328 //***********************
1329 typedef struct tagNATIVE_VIDEO_RESOLUTION_DATA
1330 {
1331 NvU8 native_svr;
1332
1333 struct {
1334 NvU8 img_size : 1;
1335 NvU8 f41 : 1;
1336 NvU8 f42 : 1;
1337 NvU8 f43 : 1;
1338 NvU8 f44 : 1;
1339 NvU8 f45 : 1;
1340 NvU8 f46 : 1;
1341 NvU8 sz_prec : 1;
1342 } option;
1343
1344 NvU8 image_size[4];
1345 } NATIVE_VIDEO_RESOLUTION_DATA;
1346
1347 #pragma pack()
1348
1349 // See CEA-861E, Table 42, 43 Extended Tags; indicates that the corresponding CEA extended data block value is valid,
1350 // e.g. if colorimetry is set, then NVT_EDID_CEA861_INFO::colorimetry is valid
1351 typedef struct tagNVT_VALID_EXTENDED_BLOCKS
1352 {
1353 NvU32 VCDB : 1;
1354 NvU32 VSVD : 1;
1355 NvU32 colorimetry : 1;
1356 NvU32 H14B_VSDB : 1;
1357 NvU32 H20_HF_VSDB : 1;
1358 NvU32 y420cmdb : 1;
1359 NvU32 hdr_static_metadata : 1;
1360 NvU32 dv_static_metadata : 1;
1361 NvU32 hdr10Plus : 1;
1362 NvU32 SCDB : 1;
1363 NvU32 HF_EEODB : 1;
1364 NvU32 nvda_vsdb : 1;
1365 NvU32 msft_vsdb : 1;
1366 NvU32 NVRDB : 1;
1367 } NVT_VALID_EXTENDED_BLOCKS;
1368
1369 //*************************
1370 // extended data blocks
1371 //*************************
1372 #define NVT_CEA861_SD_EXT_HEADER_SIZE 1
1373
1374 #define NVT_CEA861_Y420VDB_SD_SIZE 1
1375
1376 // Max number of YUV420 VDBs for each VDB block is 30 per CTA-861-G spec sec. 7.5.10
1377 // Accomodate 2 blocks
1378 #define NVT_CEA861_Y420VDB_MAX_DESCRIPTOR 60
1379
1380 #define NVT_CEA861_Y420CMDB_SD_SIZE 1
1381
1382 // Max number of YUV420 SVDs for each VDB block is 30 per CTA-861-G spec sec. 7.5.11
1383 // Accomodate 2 blocks
1384 #define NVT_CEA861_Y420CMDB_MAX_DESCRIPTOR 60
1385 #define NVT_CEA861_VFPDB_SD_SIZE 1
1386 #define NVT_CEA861_VFPDB_MAX_DESCRIPTOR 16 // NOTE: Limiting to 16 to not allocate too much space. The maximum descriptor should be:
1387 // ((NVT_CEA861_MAX_PAYLOAD / NVT_CEA861_SD_TOTAL_SIZE) * (NVT_CEA861_SD_PAYLOAD_SIZE / NVT_CEA861_VFPDB_SD_SIZE) +
1388 // (NVT_CEA861_MAX_PAYLOAD % NVT_CEA861_SD_TOTAL_SIZE - NVT_CEA861_SD_HEADER_SIZE - NVT_CEA861_SD_EXT_HEADER_SIZE) / NVT_CEA861_VFPDB_SD_SIZE)
1389
1390 typedef enum tagNVT_CTA861_ORIGIN
1391 {
1392 FROM_CTA861_EXTENSION,
1393 FROM_DISPLAYID_13_DATA_BLOCK,
1394 FROM_DISPLAYID_20_DATA_BLOCK,
1395 } NVT_CTA861_ORIGIN;
1396
1397 //
1398 typedef struct tagEDID_CEA861_INFO
1399 {
1400 NvU8 revision;
1401 NvU8 basic_caps;
1402
1403 // short video descriptor
1404 NvU8 total_svd;
1405 NvU8 video[NVT_CEA861_VIDEO_MAX_DESCRIPTOR];
1406
1407 // short audio descriptor
1408 NvU8 total_sad;
1409 NVT_3BYTES audio[NVT_CEA861_AUDIO_MAX_DESCRIPTOR];
1410
1411 // speaker allocation data
1412 NvU8 total_ssd;
1413 NVT_3BYTES speaker[NVT_CEA861_SPEAKER_MAX_DESCRIPTOR];
1414
1415 // vendor specific data
1416 NvU8 total_vsdb;
1417 VSDB_DATA vsdb[NVT_CEA861_VSDB_MAX_BLOCKS];
1418
1419 // vendor specific video data
1420 NvU8 total_vsvdb;
1421 VSVDB_DATA vsvdb[NVT_CEA861_VSVDB_MAX_BLOCKS];
1422
1423 // video format data
1424 NvU8 total_vfdb;
1425 VFDB_DATA vfdb[NVT_CTA861_VF_MAX_BLOCKS];
1426
1427 // indicates which of the extended data blocks below contain valid data excluding extended blocks with total count
1428 NVT_VALID_EXTENDED_BLOCKS valid;
1429 // extended data blocks
1430 NVT_2BYTES colorimetry; // Colorimetry Data Block
1431 NvU8 video_capability; // Video Capability Block
1432
1433 // HDR Static Metadata Data Block. See CEA-861.3 HDR Static Metadata Extensions, Section 4.2
1434 NVT_5BYTES hdr_static_metadata;
1435
1436 // VFPDB extended block. See CEA861-H, Section 7.5.12 Video Format Preference Data Block
1437 NvU8 total_svr;
1438 NvU8 svr_vfpdb[NVT_CEA861_VFPDB_MAX_DESCRIPTOR]; // svr of preferred video formats
1439
1440 // NVRDB extended block. see CTA861.6, Section 7.5.18 Native Video Resolution Data Block
1441 NATIVE_VIDEO_RESOLUTION_DATA native_video_resolution_db;
1442
1443 // Y420VDB extended block. See CEA861-F, Section 7.5.10 YCBCR 4:2:0 Video Data Block
1444 NvU8 total_y420vdb;
1445 NvU8 svd_y420vdb[NVT_CEA861_Y420VDB_MAX_DESCRIPTOR]; // svd of video formats that only support YCbCr 4:2:0
1446
1447 // Y420CMDB extended block. See CEA861-F, Section 7.5.11 YCBCR 4:2:0 Capability Map Data Block
1448 NvU8 total_y420cmdb;
1449 NvU8 map_y420cmdb[NVT_CEA861_Y420CMDB_MAX_DESCRIPTOR]; // bit map to svd in video[] that also supports YCbCr 4:2:0
1450
1451 // NVT_EDID_CEA861_INFO::vsvdb.SCDB = 1 in case hfscdb is exposed by sink.
1452 NvU32 hfscdbSize;
1453 NvU8 hfscdb[NVT_CTA861_EXT_SCDB_PAYLOAD_MAX_LENGTH];
1454
1455 // DID Type VII Video extended block, see 7.5.17.1 in CTA861-H
1456 NvU8 total_did_type7db;
1457 DID_TYPE7_DATA did_type7_data_block[NVT_CTA861_DID_MAX_DATA_BLOCK];
1458
1459 // DID Type VIII Video extended block, see 7.5.17.2 in CTA861-H
1460 NvU8 total_did_type8db;
1461 DID_TYPE8_DATA did_type8_data_block[NVT_CTA861_DID_MAX_DATA_BLOCK];
1462
1463 // DID Type X Video extended block, see 7.5.17.3 in CTA861-H
1464 NvU8 total_did_type10db;
1465 DID_TYPE10_DATA did_type10_data_block[NVT_CTA861_DID_MAX_DATA_BLOCK];
1466
1467 NvU8 hfeeodb; // HDMI Forum Edid Extension Override Data Block.
1468 } NVT_EDID_CEA861_INFO;
1469
1470
1471 //*******************
1472 // Parsed DisplayID Information
1473 //*******************
1474 #define NVT_DISPLAYID_SECTION_MAX_SIZE 251
1475 #define NVT_DISPLAYID_SECTION_HEADER_LEN 5
1476 #define NVT_DISPLAYID_DATABLOCK_MAX_PAYLOAD_LEN 248
1477 #define NVT_DISPLAYID_DATABLOCK_HEADER_LEN 3
1478
1479 #define NVT_DISPLAYID_PRODUCT_STRING_MAX_LEN 233
1480 #define NVT_DISPLAYID_COLOR_MAX_WHITEPOINTS 5
1481 #define NVT_DISPLAYID_COLOR_MAX_PRIMARIES 3
1482 #define NVT_DISPLAYID_RANGE_LIMITS_MAX_COUNT 2
1483 #define NVT_DISPLAYID_DISPLAY_INTERFACE_FEATURES_MAX_ADDITIONAL_SUPPORTED_COLORSPACE_EOTF 7
1484
1485 typedef enum tagNVT_SINGLE_TILE_BEHAVIOR
1486 {
1487 NVT_SINGLE_TILE_BEHAVIOR_OTHER = 0,
1488 NVT_SINGLE_TILE_BEHAVIOR_SOURCE_DRIVEN,
1489 NVT_SINGLE_TILE_BEHAVIOR_SCALE,
1490 NVT_SINGLE_TILE_BEHAVIOR_CLONE
1491 } NVT_SINGLE_TILE_BEHAVIOR;
1492
1493 typedef enum tagNVT_MULTI_TILE_BEHAVIOR
1494 {
1495 NVT_MULTI_TILE_BEHAVIOR_OTHER = 0,
1496 NVT_MULTI_TILE_BEHAVIOR_SOURCE_DRIVEN
1497 } NVT_MULTI_TILE_BEHAVIOR;
1498
1499 typedef struct _tagNVT_TILEDDISPLAY_TOPOLOGY_ID
1500 {
1501 NvU32 vendor_id;
1502 NvU16 product_id;
1503 NvU32 serial_number;
1504 } NVT_TILEDDISPLAY_TOPOLOGY_ID;
1505
1506 typedef struct _tagNVT_COLOR_POINT
1507 {
1508 NvU16 x;
1509 NvU16 y;
1510 } NVT_COLOR_POINT;
1511
1512 typedef struct _tagNVT_DISPLAYID_RANGE_LIMITS
1513 {
1514 NvU32 revision;
1515 NvU32 pclk_min;
1516 NvU32 pclk_max;
1517 NvU8 hfreq_min;
1518 NvU8 hfreq_max;
1519 NvU16 hblank_min;
1520 NvU8 vfreq_min;
1521 NvU16 vfreq_max;
1522 NvU16 vblank_min;
1523 NvU8 interlaced : 1;
1524 NvU8 cvt : 1;
1525 NvU8 cvt_reduced : 1;
1526 NvU8 dfd : 1;
1527 NvU8 seamless_dynamic_video_timing_change : 1;
1528 } NVT_DISPLAYID_RANGE_LIMITS;
1529
1530 #define NVT_DID_MAX_EXT_PAYLOAD 122
1531
1532 typedef struct _tagNVT_DISPLAYID_INFO
1533 {
1534 // Top Level Header Information
1535 NvU8 version;
1536 NvU8 product_type;
1537
1538 // Product Identification (0 or 1 Blocks Allowed)
1539 NvU32 vendor_id;
1540 NvU16 product_id;
1541 NvU32 serial_number;
1542 NvU8 week;
1543 NvU8 year;
1544 NvU8 product_string[NVT_DISPLAYID_PRODUCT_STRING_MAX_LEN + 1];
1545
1546 // Display Parameters
1547 NvU16 horiz_size;
1548 NvU16 vert_size;
1549 NvU16 horiz_pixels;
1550 NvU16 vert_pixels;
1551 NvU8 support_audio : 1;
1552 NvU8 separate_audio : 1;
1553 NvU8 audio_override : 1;
1554 NvU8 power_management : 1;
1555 NvU8 fixed_timing : 1;
1556 NvU8 fixed_pixel_format : 1;
1557 NvU8 rsvd4 : 1;
1558 NvU8 deinterlace : 1;
1559 NvU16 gamma;
1560 NvU8 aspect_ratio;
1561 NvU8 depth_overall : 4;
1562 NvU8 depth_native : 4;
1563
1564 // Color Characteristics
1565 NvU8 total_white_points;
1566 NvU8 total_primaries : 3;
1567 NvU8 temporal : 1;
1568 NVT_COLOR_POINT white_points[NVT_DISPLAYID_COLOR_MAX_WHITEPOINTS];
1569 NVT_COLOR_POINT primaries[NVT_DISPLAYID_COLOR_MAX_PRIMARIES];
1570
1571 // Range Limits
1572 NvU8 rl_num;
1573 NVT_DISPLAYID_RANGE_LIMITS range_limits[NVT_DISPLAYID_RANGE_LIMITS_MAX_COUNT];
1574
1575 // Display Data
1576 NvU8 tech_type;
1577 NvU8 device_op_mode : 4;
1578 NvU8 support_backlight : 1;
1579 NvU8 support_intensity : 1;
1580 NvU8 rsvd1 : 2;
1581 NvU16 horiz_pixel_count;
1582 NvU16 vert_pixel_count;
1583 NvU8 orientation : 2;
1584 NvU8 rotation : 2;
1585 NvU8 zero_pixel : 2;
1586 NvU8 scan_direction : 2;
1587 NvU8 subpixel_info;
1588 NvU8 horiz_pitch;
1589 NvU8 vert_pitch;
1590 NvU8 rsvd2 : 4;
1591 NvU8 color_bit_depth : 4;
1592 NvU8 white_to_black : 1;
1593 NvU8 response_time : 7;
1594
1595 // Power Settings
1596 NvU8 t1_min : 4;
1597 NvU8 t1_max : 4;
1598 NvU8 t2_max;
1599 NvU8 t3_max;
1600 NvU8 t4_min;
1601 NvU8 t5_min;
1602 NvU8 t6_min;
1603
1604 union
1605 {
1606 struct
1607 {
1608 NvU8 rsvd : 3;
1609 NvU8 color_map : 1;
1610 NvU8 support_2_8v : 1;
1611 NvU8 support_12v : 1;
1612 NvU8 support_5v : 1;
1613 NvU8 support_3_3v : 1;
1614 NvU8 rsvd2 : 5;
1615 NvU8 DE_mode : 1;
1616 NvU8 polarity : 1;
1617 NvU8 data_strobe : 1;
1618 } lvds;
1619
1620 struct
1621 {
1622 NvU8 rsvd : 5;
1623 NvU8 DE_mode : 1;
1624 NvU8 polarity : 1;
1625 NvU8 data_strobe : 1;
1626 } proprietary;
1627 } u2;
1628
1629 // Stereo Interface
1630 NvU8 stereo_code;
1631 union
1632 {
1633 struct
1634 {
1635 NvU8 stereo_polarity;
1636 } field_sequential;
1637
1638 struct
1639 {
1640 NvU8 view_identity;
1641 } side_by_side;
1642
1643 struct
1644 {
1645 NvU8 interleave_pattern[8];
1646 } pixel_interleaved;
1647
1648 struct
1649 {
1650 NvU8 rsvd : 5;
1651 NvU8 mirroring : 2;
1652 NvU8 polarity : 1;
1653 } left_right_separate;
1654
1655 struct
1656 {
1657 NvU8 num_views;
1658 NvU8 code;
1659 } multiview;
1660 } u3;
1661
1662 NvU32 tiled_display_revision;
1663 struct
1664 {
1665 NvBool bSingleEnclosure;
1666 NvBool bHasBezelInfo;
1667 NVT_SINGLE_TILE_BEHAVIOR single_tile_behavior;
1668 NVT_MULTI_TILE_BEHAVIOR multi_tile_behavior;
1669 } tile_capability;
1670
1671 struct
1672 {
1673 NvU32 row;
1674 NvU32 col;
1675 } tile_topology;
1676
1677 struct
1678 {
1679 NvU32 x;
1680 NvU32 y;
1681 } tile_location;
1682
1683 struct
1684 {
1685 NvU32 width;
1686 NvU32 height;
1687 } native_resolution;
1688
1689 struct
1690 {
1691 NvU32 pixel_density;
1692 NvU32 top;
1693 NvU32 bottom;
1694 NvU32 right;
1695 NvU32 left;
1696 } bezel_info;
1697
1698 NVT_TILEDDISPLAY_TOPOLOGY_ID tile_topology_id;
1699 NvU8 cea_data_block_present;
1700
1701 NvU8 supported_displayId2_0;
1702 union
1703 {
1704 // Display Interface
1705 struct
1706 {
1707 NvU8 interface_type : 4;
1708 union
1709 {
1710 NvU8 analog_subtype : 4;
1711 NvU8 digital_num_links : 4;
1712 } u1;
1713
1714 NvU8 interface_version;
1715
1716 struct
1717 {
1718 NvU8 rsvd : 2;
1719 NvU8 support_16b : 1;
1720 NvU8 support_14b : 1;
1721 NvU8 support_12b : 1;
1722 NvU8 support_10b : 1;
1723 NvU8 support_8b : 1;
1724 NvU8 support_6b : 1;
1725 } rgb_depth;
1726
1727 struct
1728 {
1729 NvU8 rsvd : 2;
1730 NvU8 support_16b : 1;
1731 NvU8 support_14b : 1;
1732 NvU8 support_12b : 1;
1733 NvU8 support_10b : 1;
1734 NvU8 support_8b : 1;
1735 NvU8 support_6b : 1;
1736 } ycbcr444_depth;
1737
1738 struct
1739 {
1740 NvU8 rsvd : 3;
1741 NvU8 support_16b : 1;
1742 NvU8 support_14b : 1;
1743 NvU8 support_12b : 1;
1744 NvU8 support_10b : 1;
1745 NvU8 support_8b : 1;
1746 } ycbcr422_depth;
1747
1748 NvU8 content_protection;
1749 NvU8 content_protection_version;
1750 NvU8 spread_spectrum : 2;
1751 NvU8 rsvd3 : 2;
1752 NvU8 spread_percent : 4;
1753
1754 } display_interface;
1755
1756 //display interface features for DID2.0
1757 struct
1758 {
1759 struct
1760 {
1761 NvU8 rsvd : 2;
1762 NvU8 support_16b : 1;
1763 NvU8 support_14b : 1;
1764 NvU8 support_12b : 1;
1765 NvU8 support_10b : 1;
1766 NvU8 support_8b : 1;
1767 NvU8 support_6b : 1;
1768 } rgb_depth;
1769
1770 struct
1771 {
1772 NvU8 rsvd : 2;
1773 NvU8 support_16b : 1;
1774 NvU8 support_14b : 1;
1775 NvU8 support_12b : 1;
1776 NvU8 support_10b : 1;
1777 NvU8 support_8b : 1;
1778 NvU8 support_6b : 1;
1779 } ycbcr444_depth;
1780
1781 struct
1782 {
1783 NvU8 rsvd : 3;
1784 NvU8 support_16b : 1;
1785 NvU8 support_14b : 1;
1786 NvU8 support_12b : 1;
1787 NvU8 support_10b : 1;
1788 NvU8 support_8b : 1;
1789 } ycbcr422_depth;
1790
1791 struct
1792 {
1793 NvU8 rsvd : 3;
1794 NvU8 support_16b : 1;
1795 NvU8 support_14b : 1;
1796 NvU8 support_12b : 1;
1797 NvU8 support_10b : 1;
1798 NvU8 support_8b : 1;
1799 } ycbcr420_depth;
1800
1801 // based on the DID2.0 spec. minimum pixel rate at which the Sink device shall support YCbCr 4:2:0 encoding
1802 NvU8 minimum_pixel_rate_ycbcr420;
1803
1804 struct
1805 {
1806 NvU8 support_32khz : 1;
1807 NvU8 support_44_1khz : 1;
1808 NvU8 support_48khz : 1;
1809 NvU8 rsvd : 5;
1810 } audio_capability;
1811
1812 struct
1813 {
1814 NvU8 rsvd : 1;
1815 NvU8 support_colorspace_bt2020_eotf_smpte_st2084: 1;
1816 NvU8 support_colorspace_bt2020_eotf_bt2020 : 1;
1817 NvU8 support_colorspace_dci_p3_eotf_dci_p3 : 1;
1818 NvU8 support_colorspace_adobe_rgb_eotf_adobe_rgb: 1;
1819 NvU8 support_colorspace_bt709_eotf_bt1886 : 1;
1820 NvU8 support_colorspace_bt601_eotf_bt601 : 1;
1821 NvU8 support_colorspace_srgb_eotf_srgb : 1;
1822 } colorspace_eotf_combination_1;
1823
1824 struct
1825 {
1826 NvU8 rsvd : 8;
1827 } colorspace_eotf_combination_2;
1828
1829 struct
1830 {
1831 NvU8 rsvd : 5;
1832 NvU8 total : 3;
1833 } total_additional_colorspace_eotf;
1834
1835 struct
1836 {
1837 NvU8 support_colorspace : 4;
1838 NvU8 support_eotf : 4;
1839 } additional_colorspace_eotf[NVT_DISPLAYID_DISPLAY_INTERFACE_FEATURES_MAX_ADDITIONAL_SUPPORTED_COLORSPACE_EOTF];
1840 } display_interface_features;
1841 } u4;
1842
1843 } NVT_DISPLAYID_INFO;
1844
1845 //***********************************
1846 // EDID 18-byte display descriptors
1847 //***********************************
1848 //
1849 //
1850 //*** (Tag = 0xFF) ***/
1851 // Display Product Serial Number
1852 #define NVT_EDID_LDD_PAYLOAD_SIZE 13
1853 typedef struct tagNVT_EDID_DD_SERIAL_NUMBER
1854 {
1855 NvU8 str[NVT_EDID_LDD_PAYLOAD_SIZE];
1856 NvU8 padding[16 - NVT_EDID_LDD_PAYLOAD_SIZE];
1857 } NVT_EDID_DD_SERIAL_NUMBER;
1858 //
1859 //
1860 //
1861 //*** (Tag = 0xFE) ***/
1862 // Alphanumeric Data String (ASCII)
1863 typedef struct tagNVT_EDID_DD_DATA_STRING
1864 {
1865 NvU8 str[NVT_EDID_LDD_PAYLOAD_SIZE];
1866 NvU8 padding[16 - NVT_EDID_LDD_PAYLOAD_SIZE];
1867 } NVT_EDID_DD_DATA_STRING;
1868 //
1869 //
1870 //
1871 //*** (Tag = 0xFD) ***/
1872 // Display Range Limit
1873 //
1874 typedef struct tagNVT_EDID_DD_RANGE_GTF2
1875 {
1876 NvU8 C;
1877 NvU8 K;
1878 NvU8 J;
1879 NvU16 M;
1880 } NVT_EDID_DD_RANGE_GTF2;
1881
1882 typedef struct tagNVT_EDID_DD_RANGE_CVT
1883 {
1884 NvU16 max_active_pixels_per_line;
1885
1886 NvU8 pixel_clock_adjustment : 2; // this is in 0.25Hz, subtract from max_pixel_clock
1887 // the whole number part (if existing) gets subtracted
1888 // from max_pclk_MHz right away
1889 NvU8 aspect_supported : 5;
1890
1891 NvU8 aspect_preferred : 3;
1892 NvU8 blanking_support : 2;
1893 NvU8 reserved1 : 3;
1894
1895 NvU8 scaling_support : 4;
1896 NvU8 reserved2 : 4;
1897
1898 NvU8 preferred_refresh_rate;
1899 } NVT_EDID_DD_RANGE_CVT;
1900
1901 typedef struct tagNVT_EDID_DD_RANGE_LIMIT
1902 {
1903 NvU16 min_v_rate;
1904 NvU16 max_v_rate;
1905 NvU16 min_h_rate;
1906 NvU16 max_h_rate;
1907 NvU16 max_pclk_MHz;
1908 NvU8 timing_support; // indicates 2nd GTF / CVT support
1909 union
1910 {
1911 // if timing_support = 0x02
1912 NVT_EDID_DD_RANGE_GTF2 gtf2;
1913
1914 // if timing_support = 0x04
1915 NVT_EDID_DD_RANGE_CVT cvt;
1916 }u;
1917 } NVT_EDID_DD_RANGE_LIMIT;
1918
1919 typedef struct tagNVT_EDID_RANGE_LIMIT
1920 {
1921 NvU32 min_v_rate_hzx1k;
1922 NvU32 max_v_rate_hzx1k;
1923 NvU32 min_h_rate_hz;
1924 NvU32 max_h_rate_hz;
1925 NvU32 max_pclk_10khz;
1926 } NVT_EDID_RANGE_LIMIT;
1927
1928 // timing support
1929 #define NVT_EDID_RANGE_SUPPORT_GTF2 0x02
1930 #define NVT_EDID_RANGE_SUPPORT_CVT 0x04
1931
1932 // supported aspect ratios
1933 #define NVT_EDID_CVT_ASPECT_SUPPORT_MAX 5
1934
1935 #define NVT_EDID_CVT_ASPECT_SUPPORT_4X3 0x10
1936 #define NVT_EDID_CVT_ASPECT_SUPPORT_16X9 0x08
1937 #define NVT_EDID_CVT_ASPECT_SUPPORT_16X10 0x04
1938 #define NVT_EDID_CVT_ASPECT_SUPPORT_5X4 0x02
1939 #define NVT_EDID_CVT_ASPECT_SUPPORT_15X9 0x01
1940
1941 // preferred aspect ratios
1942 #define NVT_EDID_CVT_ASPECT_PREFER_4X3 0x00
1943 #define NVT_EDID_CVT_ASPECT_PREFER_16X9 0x01
1944 #define NVT_EDID_CVT_ASPECT_PREFER_16X10 0x02
1945 #define NVT_EDID_CVT_ASPECT_PREFER_5X4 0x03
1946 #define NVT_EDID_CVT_ASPECT_PREFER_15X9 0x04
1947
1948 // cvt blanking support
1949 #define NVT_EDID_CVT_BLANKING_STANDARD 0x01
1950 #define NVT_EDID_CVT_BLANKING_REDUCED 0x02
1951
1952 // scaling support
1953 #define NVT_EDID_CVT_SCALING_HOR_SHRINK 0x08
1954 #define NVT_EDID_CVT_SCALING_HOR_STRETCH 0x04
1955 #define NVT_EDID_CVT_SCALING_VER_SHRINK 0x02
1956 #define NVT_EDID_CVT_SCALING_VER_STRETCH 0x01
1957
1958 //
1959 //
1960 //
1961 //*** (Tag = 0xFC) ***/
1962 // Display Product Name
1963 typedef struct tagNVT_EDID_DD_PRODUCT_NAME
1964 {
1965 NvU8 str[NVT_EDID_LDD_PAYLOAD_SIZE];
1966 NvU8 padding[16 - NVT_EDID_LDD_PAYLOAD_SIZE];
1967 } NVT_EDID_DD_PRODUCT_NAME;
1968 //
1969 //
1970 //
1971 //*** (Tag = 0xFB) ***/
1972 // the 18-byte display descriptors
1973 // Display Color Point Data
1974 typedef struct tagNVT_EDID_DD_COLOR_POINT
1975 {
1976 NvU8 wp1_index;
1977 NvU16 wp1_x;
1978 NvU16 wp1_y;
1979 NvU16 wp1_gamma;
1980 NvU8 wp2_index;
1981 NvU16 wp2_x;
1982 NvU16 wp2_y;
1983 NvU16 wp2_gamma;
1984 } NVT_EDID_DD_COLOR_POINT;
1985 //
1986 //
1987 //
1988 //*** (Tag = 0xFA) ***/
1989 // Standard Timing Identifications
1990 #define NVT_EDID_DD_STI_NUM 6
1991
1992 typedef struct tagNVT_EDID_DD_STD_TIMING
1993 {
1994 NvU16 descriptor[NVT_EDID_DD_STI_NUM];
1995 } NVT_EDID_DD_STD_TIMING;
1996 //
1997 //
1998 //
1999 //*** (Tag = 0xF9) ***/
2000 // Display Color Management Data (DCM)
2001 typedef struct tagNVT_EDID_DD_COLOR_MANAGEMENT_DATA
2002 {
2003 NvU16 red_a3;
2004 NvU16 red_a2;
2005 NvU16 green_a3;
2006 NvU16 green_a2;
2007 NvU16 blue_a3;
2008 NvU16 blue_a2;
2009 } NVT_EDID_DD_COLOR_MANAGEMENT_DATA;
2010 //
2011 //
2012 //
2013 //*** (Tag = 0xF8) ***/
2014 // CVT 3 Byte Timing Code
2015 #define NVT_EDID_DD_MAX_CVT3_PER_DESCRITPOR 4
2016
2017 typedef struct tagEDID_DD_CVT_3BYTE_BLOCK
2018 {
2019 NvU16 addressable_lines : 14;
2020 NvU8 aspect_ratio : 2;
2021 NvU8 reserved0 : 1;
2022 NvU8 preferred_vert_rates : 2;
2023 NvU8 supported_vert_rates : 5;
2024
2025 } NVT_EDID_DD_CVT_3BYTE_BLOCK;
2026
2027 typedef struct tagNVT_EDID_DD_CVT_3BYTE
2028 {
2029 NVT_EDID_DD_CVT_3BYTE_BLOCK block[NVT_EDID_DD_MAX_CVT3_PER_DESCRITPOR];
2030 } NVT_EDID_DD_CVT_3BYTE;
2031
2032 #define NVT_EDID_CVT3_ASPECT_4X3 0x00
2033 #define NVT_EDID_CVT3_ASPECT_16X9 0x01
2034 #define NVT_EDID_CVT3_ASPECT_16X10 0x02
2035 #define NVT_EDID_CVT3_ASPECT_15X9 0x03
2036
2037 #define NVT_EDID_CVT3_PREFFERED_RATE_50HZ 0x00
2038 #define NVT_EDID_CVT3_PREFFERED_RATE_60HZ 0x01
2039 #define NVT_EDID_CVT3_PREFFERED_RATE_75HZ 0x02
2040 #define NVT_EDID_CVT3_PREFFERED_RATE_85HZ 0x03
2041
2042 #define NVT_EDID_CVT3_SUPPORTED_RATE_50HZ 0x10
2043 #define NVT_EDID_CVT3_SUPPORTED_RATE_60HZ 0x08
2044 #define NVT_EDID_CVT3_SUPPORTED_RATE_75HZ 0x04
2045 #define NVT_EDID_CVT3_SUPPORTED_RATE_85HZ 0x02
2046 #define NVT_EDID_CVT3_SUPPORTED_RATE_60HZ_REDUCED_BLANKING 0x01
2047 //
2048 //
2049 //
2050 //*** (Tag = 0xF7) ***/
2051 // Established Timings III
2052 //
2053 #define NVT_EDID_DD_EST_TIMING3_NUM 6
2054
2055 typedef struct tagNVT_EDID_DD_EST_TIMING3
2056 {
2057 NvU8 revision;
2058 NvU8 data[NVT_EDID_DD_EST_TIMING3_NUM];
2059 } NVT_EDID_DD_EST_TIMING3;
2060 //
2061 //
2062 //
2063 //*** (Tag = 0x10) ***/
2064 // Dummy Descriptor Definition
2065 typedef struct tagNVT_EDID_DD_DUMMY_DESCRIPTOR
2066 {
2067 NvU8 data[13];
2068 } NVT_EDID_DD_DUMMY_DESCRIPTOR;
2069 //
2070 //
2071 //
2072 //*** (Tag = 0x00 to 0x0F) ***/
2073 // Manufacturer Special Data
2074 typedef struct tagNVT_EDID_DD_MANUF_DATA
2075 {
2076 NvU8 data[13];
2077 } NVT_EDID_DD_MANUF_DATA;
2078 //
2079 //
2080 //
2081 // the translated generic 18-byte long descriptor
2082 typedef struct tagNVT_EDID_18BYTE_DESCRIPTOR
2083 {
2084 NvU8 tag;
2085 union
2086 {
2087 NVT_EDID_DD_SERIAL_NUMBER serial_number;
2088 NVT_EDID_DD_DATA_STRING data_str;
2089 NVT_EDID_DD_RANGE_LIMIT range_limit;
2090 NVT_EDID_DD_PRODUCT_NAME product_name;
2091 NVT_EDID_DD_COLOR_POINT color_point;
2092 NVT_EDID_DD_STD_TIMING std_timing;
2093 NVT_EDID_DD_COLOR_MANAGEMENT_DATA color_man;
2094 NVT_EDID_DD_CVT_3BYTE cvt;
2095 NVT_EDID_DD_EST_TIMING3 est3;
2096 NVT_EDID_DD_DUMMY_DESCRIPTOR dummy;
2097 NVT_EDID_DD_MANUF_DATA manuf_data;
2098 } u;
2099 } NVT_EDID_18BYTE_DESCRIPTOR;
2100 //
2101 //
2102 // Display Descriptor Tags
2103 #define NVT_EDID_DISPLAY_DESCRIPTOR_DPSN 0xFF // display product serial number
2104 #define NVT_EDID_DISPLAY_DESCRIPTOR_ADS 0xFE // alphanumeric data string (ASCII)
2105 #define NVT_EDID_DISPLAY_DESCRIPTOR_DRL 0xFD // display range limit
2106 #define NVT_EDID_DISPLAY_DESCRITPOR_DPN 0xFC // display product name
2107 #define NVT_EDID_DISPLAY_DESCRIPTOR_CPD 0xFB // color point data
2108 #define NVT_EDID_DISPLAY_DESCRIPTOR_STI 0xFA // standard timing identification
2109 #define NVT_EDID_DISPLAY_DESCRIPTOR_DCM 0xF9 // display color management
2110 #define NVT_EDID_DISPLAY_DESCRIPTOR_CVT 0xF8 // CVT 3-byte timing code
2111 #define NVT_EDID_DISPLAY_DESCRIPTOR_ESTIII 0xF7 // establishied timing III
2112 #define NVT_EDID_DISPLAY_DESCRIPTOR_DUMMY 0x10 // dummy descriptor
2113
2114 //*******************
2115 // Raw EDID offsets and info
2116 //*******************
2117 //
2118 // Byte 14, video input definition
2119 //
2120 #define NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_MASK 0x0F // dvi/hdmi/dp
2121 #define NVT_EDID_VIDEO_COLOR_BIT_DEPTH_MASK 0x70 // bpc support
2122 #define NVT_EDID_VIDEO_INPUT_DEFINITION_DIGITAL_MASK 0x80 // digital/analog
2123 //
2124 #define NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_SHIFT 0
2125 #define NVT_EDID_VIDEO_COLOR_BIT_DEPTH_SHIFT 4
2126 #define NVT_EDID_VIDEO_INPUT_DEFINITION_DIGITAL_SHIFT 7
2127 //
2128 #define NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_UNDEFINED 0
2129 #define NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_DVI_SUPPORTED 1
2130 #define NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_HDMI_A_SUPPORTED 2
2131 #define NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_HDMI_B_SUPPORTED 3
2132 #define NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_MDDI_SUPPORTED 4
2133 #define NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_DISPLAYPORT_SUPPORTED 5
2134 //#define NVT_EDID_DIGITAL_VIDEO_INTERFACE_STANDARD_RESERVED 6 - 15
2135 #define NVT_EDID_VIDEO_COLOR_BIT_DEPTH_UNDEFINED 0
2136 #define NVT_EDID_VIDEO_COLOR_BIT_DEPTH_6BPC 1
2137 #define NVT_EDID_VIDEO_COLOR_BIT_DEPTH_8BPC 2
2138 #define NVT_EDID_VIDEO_COLOR_BIT_DEPTH_10BPC 3
2139 #define NVT_EDID_VIDEO_COLOR_BIT_DEPTH_12BPC 4
2140 #define NVT_EDID_VIDEO_COLOR_BIT_DEPTH_14BPC 5
2141 #define NVT_EDID_VIDEO_COLOR_BIT_DEPTH_16BPC 6
2142 //#define NVT_EDID_VIDEO_COLOR_BIT_DEPTH_RESERVED 7
2143 #define NVT_EDID_VIDEO_INPUT_DEFINITION_DIGITAL 0x01
2144 //
2145 // Byte 18, feature support
2146 //
2147 #define NVT_EDID_OTHER_FEATURES_MASK 0x07 // sRGB space, preferred timing, continuous freq.
2148 #define NVT_EDID_DISPLAY_COLOR_TYPE_MASK 0x18 // for analog, see byte 14, bit 7
2149 #define NVT_EDID_DISPLAY_COLOR_ENCODING_MASK 0x18 // for digital
2150 #define NVT_EDID_DISPLAY_POWER_MANAGEMENT_MASK 0xE0 // standby/suspend/active off
2151 //
2152 #define NVT_EDID_OTHER_FEATURES_SHIFT 0
2153 #define NVT_EDID_DISPLAY_COLOR_TYPE_SHIFT 3
2154 #define NVT_EDID_DISPLAY_COLOR_ENCODING_SHIFT 3
2155 #define NVT_EDID_DISPLAY_POWER_MANAGEMENT_SHIFT 5
2156 //
2157 #define NVT_EDID_OTHER_FEATURES_USES_CONTINUOUS_FREQ (1 << 0)
2158 #define NVT_EDID_OTHER_FEATURES_PTM_INCLUDE_NATIVE (1 << 1)
2159 #define NVT_EDID_OTHER_FEATURES_SRGB_DEFAULT_COLORSPACE (1 << 2)
2160 //
2161 #define NVT_EDID_DISPLAY_COLOR_TYPE_MONOCHROME 0
2162 #define NVT_EDID_DISPLAY_COLOR_TYPE_RGB 1
2163 #define NVT_EDID_DISPLAY_COLOR_TYPE_NON_RGB 2
2164 #define NVT_EDID_DISPLAY_COLOR_TYPE_UNDEFINED 3
2165 //
2166 #define NVT_EDID_DISPLAY_COLOR_ENCODING_YCBCR_444 (1 << 0) // RGB is always supported
2167 #define NVT_EDID_DISPLAY_COLOR_ENCODING_YCBCR_422 (1 << 1) // RGB is always supported
2168 //
2169 #define NVT_EDID_DISPLAY_POWER_MANAGEMENT_SUPPORTS_ACTIVE_OFF (1 << 0)
2170 #define NVT_EDID_DISPLAY_POWER_MANAGEMENT_SUPPORTS_SUSPENDED_MODE (1 << 1)
2171 #define NVT_EDID_DISPLAY_POWER_MANAGEMENT_SUPPORTS_STANDBY_MODE (1 << 2)
2172 //
2173 // edid offsets
2174 //
2175 #define NVT_EDID_VIDEO_INPUT_DEFINITION 0x14
2176 #define NVT_EDID_FEATURE_SUPPORT 0x18
2177
2178
2179 //*******************
2180 // Parsed EDID info
2181 //*******************
2182 //
2183 #define NVT_EDID_MAX_LONG_DISPLAY_DESCRIPTOR 4
2184 #define NVT_EDID_MAX_STANDARD_TIMINGS 8
2185 #define NVT_EDID_MAX_TOTAL_TIMING NVT_MAX_TOTAL_TIMING
2186 #define NVT_EDID_VER_1_1 0x101
2187 #define NVT_EDID_VER_1_2 0x102
2188 #define NVT_EDID_VER_1_3 0x103
2189 #define NVT_EDID_VER_1_4 0x104
2190 //
2191 // byte 0x14, Digital
2192 // bits 0-3
2193 #define NVT_EDID_VIDEOSIGNAL_INTERFACE_NOT_DEFINED 0x0
2194 #define NVT_EDID_VIDEOSIGNAL_INTERFACE_DVI 0x1
2195 #define NVT_EDID_VIDEOSIGNAL_INTERFACE_HDMI_A 0x2
2196 #define NVT_EDID_VIDEOSIGNAL_INTERFACE_HDMI_B 0x3
2197 #define NVT_EDID_VIDEOSIGNAL_INTERFACE_MDDI 0x4
2198 #define NVT_EDID_VIDEOSIGNAL_INTERFACE_DP 0x5
2199 // bits 4-6; these are translated values. See NvTiming_ParseEDIDInfo()
2200 #define NVT_EDID_VIDEOSIGNAL_BPC_NOT_DEFINED 0
2201 #define NVT_EDID_VIDEOSIGNAL_BPC_6 6
2202 #define NVT_EDID_VIDEOSIGNAL_BPC_8 8
2203 #define NVT_EDID_VIDEOSIGNAL_BPC_10 10
2204 #define NVT_EDID_VIDEOSIGNAL_BPC_12 12
2205 #define NVT_EDID_VIDEOSIGNAL_BPC_14 14
2206 #define NVT_EDID_VIDEOSIGNAL_BPC_16 16
2207 //
2208 // byte 0x18, edid 1.3
2209 // bits 3-4
2210 #define NVT_EDID_FEATURESUPPORT_COLOR_MONOCHROME 0x0 /* Monochrome/grayscale display */
2211 #define NVT_EDID_FEATURESUPPORT_COLOR_RGB 0x1 /* R/G/B color display */
2212 #define NVT_EDID_FEATURESUPPORT_COLOR_MULTICOLOR 0x2 /* non R/G/B multicolor displays e.g. R/G/Y */
2213 #define NVT_EDID_FEATURESUPPORT_COLOR_UNDEFINED 0x3 /* Undefined */
2214 //
2215 // byte 0x18, edid 1.4
2216 // bits 3-4
2217 #define NVT_EDID_FEATURESUPPORT_COLOR_ENCODING_RBG 0x0 /* RGB always supported */
2218 #define NVT_EDID_FEATURESUPPORT_COLOR_ENCODING_YCRCB444 0x1 /* RGB + 444 */
2219 #define NVT_EDID_FEATURESUPPORT_COLOR_ENCODING_YCRCB422 0x2 /* RGB + 422 */
2220 #define NVT_EDID_FEATURESUPPORT_COLOR_ENCODING_YCRCB 0x3 /* RGB + 444 + 422 supported */
2221 //
2222 //
2223 // structure used internally to map support for HDMI 3D modes.
2224 #define MAX_EDID_ADDRESSABLE_3D_VICS 16
2225 #define MAX_3D_VICS_RESERVED_FOR_MANDATORY 8
2226 #define MAX_3D_VICS_SUPPORTED (MAX_EDID_ADDRESSABLE_3D_VICS + MAX_3D_VICS_RESERVED_FOR_MANDATORY)
2227
2228 //Constants given by Dolby to be appended for chromaticity information
2229 #define NVT_DOLBY_CHROMATICITY_MSB_BX 0x20
2230 #define NVT_DOLBY_CHROMATICITY_MSB_BY 0x08
2231 #define NVT_DOLBY_CHROMATICITY_MSB_GX 0x00
2232 #define NVT_DOLBY_CHROMATICITY_MSB_GY 0x80
2233 #define NVT_DOLBY_CHROMATICITY_MSB_RX 0xA0
2234 #define NVT_DOLBY_CHROMATICITY_MSB_RY 0x40
2235
2236 typedef struct _HDMI3DDetails
2237 {
2238 NvU8 Vic;
2239 NvU16 StereoStructureMask;
2240 NvU8 SideBySideHalfDetail;
2241 } HDMI3DDETAILS;
2242
2243 typedef struct _SupportMap
2244 {
2245 HDMI3DDETAILS map[MAX_3D_VICS_SUPPORTED];
2246 NvU32 total;
2247 } HDMI3DSUPPORTMAP;
2248
2249 typedef struct tagNVT_EXT_TIMING
2250 {
2251 NVT_TIMING timing;
2252 NVT_HDMIEXT HDMI3D;
2253 } NVT_EXT_TIMING;
2254
2255 typedef struct _NVDA_VSDB_PARSED_INFO
2256 {
2257 NvBool valid;
2258 NvU8 vsdbVersion;
2259
2260 // these fields are specified in version 1 of the NVDA VSDB
2261 union
2262 {
2263 struct
2264 {
2265 NvBool supportsVrr;
2266 NvU8 minRefreshRate;
2267 } v1;
2268 } vrrData;
2269
2270 } NVDA_VSDB_PARSED_INFO;
2271
2272 typedef enum _MSFT_VSDB_DESKTOP_USAGE
2273 {
2274 MSFT_VSDB_NOT_USABLE_BY_DESKTOP = 0,
2275 MSFT_VSDB_USABLE_BY_DESKTOP = 1
2276 } MSFT_VSDB_DESKTOP_USAGE;
2277
2278 typedef enum _MSFT_VSDB_THIRD_PARTY_USAGE
2279 {
2280 MSFT_VSDB_NOT_USABLE_BY_THIRD_PARTY = 0,
2281 MSFT_VSDB_USABLE_BY_THIRD_PARTY = 1
2282 } MSFT_VSDB_THIRD_PARTY_USAGE;
2283
2284 typedef enum _MSFT_VSDB_PRIMARY_USE_CASE
2285 {
2286 MSFT_VSDB_FOR_UNDEFINED = 0,
2287 MSFT_VSDB_FOR_TEST_EQUIPMENT = 0x1,
2288 MSFT_VSDB_FOR_GENERIC_DISPLAY = 0x2,
2289 MSFT_VSDB_FOR_TELEVISION_DISPLAY = 0x3,
2290 MSFT_VSDB_FOR_DESKTOP_PRODUCTIVITY_DISPLAY = 0x4,
2291 MSFT_VSDB_FOR_DESKTOP_GAMING_DISPLAY = 0x5,
2292 MSFT_VSDB_FOR_PRESENTATION_DISPLAY = 0x6,
2293 MSFT_VSDB_FOR_VIRTUAL_REALITY_HEADSETS = 0x7,
2294 MSFT_VSDB_FOR_AUGMENTED_REALITY = 0x8,
2295 MSFT_VSDB_FOR_VIDEO_WALL_DISPLAY = 0x10,
2296 MSFT_VSDB_FOR_MEDICAL_IMAGING_DISPLAY = 0x11,
2297 MSFT_VSDB_FOR_DEDICATED_GAMING_DISPLAY = 0x12,
2298 MSFT_VSDB_FOR_DEDICATED_VIDEO_MONITOR_DISPLAY = 0x13,
2299 MSFT_VSDB_FOR_ACCESSORY_DISPLAY = 0X14
2300 } MSFT_VSDB_PRIMARY_USE_CASE;
2301
2302 #define MSFT_VSDB_CONTAINER_ID_SIZE (16)
2303 #define MSFT_VSDB_MAX_VERSION_SUPPORT (3)
2304
2305 typedef struct _MSFT_VSDB_PARSED_INFO
2306 {
2307 NvBool valid;
2308 NvU8 version;
2309
2310 MSFT_VSDB_DESKTOP_USAGE desktopUsage;
2311 MSFT_VSDB_THIRD_PARTY_USAGE thirdPartyUsage;
2312 MSFT_VSDB_PRIMARY_USE_CASE primaryUseCase;
2313 NvU8 containerId[MSFT_VSDB_CONTAINER_ID_SIZE];
2314
2315 } MSFT_VSDB_PARSED_INFO;
2316
2317 typedef struct tagNVT_HDMI_LLC_INFO
2318 {
2319 // A.B.C.D address
2320 NvU8 addrA;
2321 NvU8 addrB;
2322 NvU8 addrC;
2323 NvU8 addrD;
2324
2325 NvU8 supports_AI : 1;
2326 NvU8 dc_48_bit : 1;
2327 NvU8 dc_36_bit : 1;
2328 NvU8 dc_30_bit : 1;
2329 NvU8 dc_y444 : 1;
2330 NvU8 dual_dvi : 1;
2331 NvU8 max_tmds_clock;
2332 NvU8 effective_tmds_clock;
2333 NvU8 latency_field_present : 1;
2334 NvU8 i_latency_field_present : 1;
2335 NvU8 hdmi_video_present : 1;
2336 NvU8 cnc3 : 1;
2337 NvU8 cnc2 : 1;
2338 NvU8 cnc1 : 1;
2339 NvU8 cnc0 : 1;
2340 NvU8 video_latency;
2341 NvU8 audio_latency;
2342 NvU8 interlaced_video_latency;
2343 NvU8 interlaced_audio_latency;
2344 NvU8 threeD_present : 1;
2345 NvU8 threeD_multi_present : 2;
2346 NvU8 image_size : 2;
2347 NvU8 hdmi_vic_len : 3;
2348 NvU8 hdmi_3d_len : 5;
2349 // for now ignoring the other extensions
2350 // ....
2351 } NVT_HDMI_LLC_INFO;
2352
2353 typedef struct tagNVT_HDMI_FORUM_INFO
2354 {
2355 NvU8 max_TMDS_char_rate;
2356
2357 NvU8 threeD_Osd_Disparity : 1;
2358 NvU8 dual_view : 1;
2359 NvU8 independent_View : 1;
2360 NvU8 lte_340Mcsc_scramble : 1;
2361 NvU8 ccbpci : 1;
2362 NvU8 cable_status : 1;
2363 NvU8 rr_capable : 1;
2364 NvU8 scdc_present : 1;
2365
2366 NvU8 dc_30bit_420 : 1;
2367 NvU8 dc_36bit_420 : 1;
2368 NvU8 dc_48bit_420 : 1;
2369 NvU8 uhd_vic : 1;
2370 NvU8 max_FRL_Rate : 4;
2371
2372 NvU8 fapa_start_location : 1;
2373 NvU8 allm : 1;
2374 NvU8 fva : 1;
2375 NvU8 cnmvrr : 1;
2376 NvU8 cinemaVrr : 1;
2377 NvU8 m_delta : 1;
2378 NvU8 qms : 1;
2379 NvU8 fapa_end_extended : 1;
2380
2381 NvU16 vrr_min : 6;
2382 NvU16 vrr_max : 10;
2383
2384 NvU8 qms_tfr_min : 1;
2385 NvU8 qms_tfr_max : 1;
2386 NvU16 dsc_MaxSlices : 6;
2387 NvU16 dsc_MaxPclkPerSliceMHz : 10;
2388
2389 NvU8 dsc_10bpc : 1;
2390 NvU8 dsc_12bpc : 1;
2391 NvU8 dsc_16bpc : 1;
2392 NvU8 dsc_All_bpp : 1;
2393 NvU8 dsc_Max_FRL_Rate : 4;
2394
2395 NvU8 dsc_Native_420 : 1;
2396 NvU8 dsc_1p2 : 1;
2397 NvU8 rsvd_2 : 6;
2398
2399 NvU8 dsc_totalChunkKBytes : 7; // = 1 + EDID reported DSC_TotalChunkKBytes
2400 NvU8 rsvd_3 : 1;
2401
2402 } NVT_HDMI_FORUM_INFO;
2403
2404 typedef struct tagNVT_HDR_STATIC_METADATA
2405 {
2406 struct
2407 {
2408 NvU8 trad_gamma_sdr_eotf : 1;
2409 NvU8 trad_gamma_hdr_eotf : 1;
2410 NvU8 smpte_st_2084_eotf : 1;
2411 NvU8 future_eotf : 1;
2412 } supported_eotf;
2413
2414 NvU8 static_metadata_type; // set to 1 if the sink support for static meta data type 1
2415 NvU8 max_cll; // maximum luminance level value
2416 NvU8 max_fall; // maximum fram-average luminance
2417 NvU8 min_cll; // minimum luminance level value
2418
2419 }NVT_HDR_STATIC_METADATA;
2420
2421 typedef struct tagNVT_DV_STATIC_METADATA
2422 {
2423 NvU32 ieee_id : 24;
2424 NvU32 VSVDB_version : 3;
2425 NvU32 dm_version : 8;
2426 NvU32 supports_2160p60hz : 1;
2427 NvU32 supports_YUV422_12bit : 1;
2428 NvU32 supports_global_dimming : 1;
2429 NvU32 colorimetry : 1;
2430 NvU32 target_min_luminance : 12;
2431 NvU32 target_max_luminance : 12;
2432 NvU32 cc_red_x : 12;
2433 NvU32 cc_red_y : 12;
2434 NvU32 cc_green_x : 12;
2435 NvU32 cc_green_y : 12;
2436 NvU32 cc_blue_x : 12;
2437 NvU32 cc_blue_y : 12;
2438 NvU32 cc_white_x : 12;
2439 NvU32 cc_white_y : 12;
2440 NvU32 supports_backlight_control : 2;
2441 NvU32 backlt_min_luma : 2;
2442 NvU32 interface_supported_by_sink : 2;
2443 NvU32 supports_10b_12b_444 : 2;
2444 NvU32 parity : 1;
2445 }NVT_DV_STATIC_METADATA;
2446
2447 //***********************************
2448 // parsed DisplayID 2.0 definitions
2449 //***********************************
2450 #define NVT_DISPLAYID_2_0_PRODUCT_STRING_MAX_LEN 236
2451
2452 // the basic info encoded in byte[3]
2453 #define NVT_DISPLAY_2_0_CAP_BASIC_AUDIO 0x40 // DTV monitor supports basic audio
2454 #define NVT_DISPLAY_2_0_CAP_YCbCr_444 0x20 // DTV monitor supports YCbCr4:4:4
2455 #define NVT_DISPLAY_2_0_CAP_YCbCr_422 0x10 // DTV monitor supports YCbCr4:2:2
2456
2457 // vendor specific
2458 #define NVT_VESA_VENDOR_SPECIFIC_IEEE_ID 0x3A0292
2459 #define NVT_VESA_VENDOR_SPECIFIC_LENGTH 7
2460
2461 #define NVT_VESA_ORG_VSDB_DATA_TYPE_MASK 0x07
2462 #define NVT_VESA_ORG_VSDB_COLOR_SPACE_AND_EOTF_MASK 0x80
2463 #define NVT_VESA_ORG_VSDB_COLOR_SPACE_AND_EOTF_SHIFT 7
2464 #define NVT_VESA_ORG_VSDB_PIXELS_OVERLAPPING_MASK 0x0F
2465 #define NVT_VESA_ORG_VSDB_MULTI_SST_MODE_MASK 0x60
2466 #define NVT_VESA_ORG_VSDB_MULTI_SST_MODE_SHIFT 5
2467 #define NVT_VESA_ORG_VSDB_PASS_THROUGH_INTEGER_MASK 0x3F
2468 #define NVT_VESA_ORG_VSDB_PASS_THROUGH_FRACTIOINAL_MASK 0x0F
2469
2470 // adaptive-sync
2471 #define NVT_ADAPTIVE_SYNC_DESCRIPTOR_MAX_COUNT 0x04
2472
2473 typedef enum _tagNVT_DISPLAYID_PRODUCT_PRIMARY_USE_CASE
2474 {
2475 PRODUCT_PRIMARY_USE_TEST_EQUIPMENT = 1,
2476 PRODUCT_PRIMARY_USE_GENERIC_DISPLAY = 2,
2477 PRODUCT_PRIMARY_USE_TELEVISION = 3,
2478 PRODUCT_PRIMARY_USE_DESKTOP_PRODUCTIVITY = 4,
2479 PRODUCT_PRIMARY_USE_DESKTOP_GAMING = 5,
2480 PRODUCT_PRIMARY_USE_PRESENTATION = 6,
2481 PRODUCT_PRIMARY_USE_HEAD_MOUNT_VIRTUAL_REALITY = 7,
2482 PRODUCT_PRIMARY_USE_HEAD_MOUNT_AUGMENTED_REALITY = 8,
2483 } NVT_DISPLAYID_PRODUCT_PRIMARY_USE_CASE;
2484
2485 typedef enum _tagNVT_DISPLAYID_SCAN_ORIENTATION
2486 {
2487 SCAN_ORIENTATION_LRTB = 0,
2488 SCAN_ORIENTATION_RLTB = 1,
2489 SCAN_ORIENTATION_TBRL = 2,
2490 SCAN_ORIENTATION_BTRL = 3,
2491 SCAN_ORIENTATION_RLBT = 4,
2492 SCAN_ORIENTATION_LRBT = 5,
2493 SCAN_ORIENTATION_BTLR = 6,
2494 SCAN_ORIENTATION_TBLR = 7,
2495 } NVT_DISPLAYID_SCAN_ORIENTATION;
2496
2497 typedef enum _tagNVT_DISPLAYID_INTERFACE_EOTF
2498 {
2499 INTERFACE_EOTF_NOT_DEFINED = 0x0,
2500 INTERFACE_EOTF_SRGB = 0x1,
2501 INTERFACE_EOTF_BT601 = 0x2,
2502 INTERFACE_EOTF_BT1886 = 0x3,
2503 INTERFACE_EOTF_ADOBE_RGB = 0x4,
2504 INTERFACE_EOTF_DCI_P3 = 0x5,
2505 INTERFACE_EOTF_BT2020 = 0x6,
2506 INTERFACE_EOTF_NATIVE_GAMMA = 0x7,
2507 INTERFACE_EOTF_SMPTE_ST2084 = 0x8,
2508 INTERFACE_EOTF_HYBRID_LOG = 0x9,
2509 INTERFACE_EOTF_CUSTOM = 0x10,
2510 } NVT_DISPLAYID_INTERFACE_EOTF;
2511
2512 typedef enum _tagNVT_DISPLAYID_INTERFACE_COLOR_SPACE
2513 {
2514 INTERFACE_COLOR_SPACE_NOT_DEFINED = 0x0,
2515 INTERFACE_COLOR_SPACE_SRGB = 0x1,
2516 INTERFACE_COLOR_SPACE_BT601 = 0x2,
2517 INTERFACE_COLOR_SPACE_BT709 = 0x3,
2518 INTERFACE_COLOR_SPACE_ADOBE_RGB = 0x4,
2519 INTERFACE_COLOR_SPACE_DCI_P3 = 0x5,
2520 INTERFACE_COLOR_SPACE_BT2020 = 0x6,
2521 INTERFACE_COLOR_SPACE_CUSTOM = 0x7,
2522 } NVT_DISPLAYID_INTERFACE_COLOR_SPACE;
2523
2524 typedef enum _tagNVT_DISPLAYID_DEVICE_TECHNOLOGY
2525 {
2526 DEVICE_TECHNOLOGY_NOT_SPECIFIED,
2527 DEVICE_TECHNOLOGY_LCD,
2528 DEVICE_TECHNOLOGY_OLED,
2529 } NVT_DISPLAYID_DEVICE_TECHNOLOGY;
2530
2531 typedef struct _tagNVT_DISPLAYID_TILED_DISPLAY_TOPOLOGY
2532 {
2533 NvU32 revision;
2534
2535 struct
2536 {
2537 NvBool bSingleEnclosure;
2538 NvBool bHasBezelInfo;
2539 NVT_SINGLE_TILE_BEHAVIOR single_tile_behavior;
2540 NVT_MULTI_TILE_BEHAVIOR multi_tile_behavior;
2541 } capability;
2542
2543 struct
2544 {
2545 NvU32 row;
2546 NvU32 col;
2547 } topology;
2548
2549 struct
2550 {
2551 NvU32 x;
2552 NvU32 y;
2553 } location;
2554
2555 struct
2556 {
2557 NvU32 width;
2558 NvU32 height;
2559 } native_resolution;
2560
2561 struct
2562 {
2563 NvU32 top; // Top bezel in pixels
2564 NvU32 bottom; // Bottom bezel in pixels
2565 NvU32 right; // Right bezel in pixels
2566 NvU32 left; // Left bezel in pixels
2567 } bezel_info;
2568
2569 NVT_TILEDDISPLAY_TOPOLOGY_ID tile_topology_id;
2570 } NVT_DISPLAYID_TILED_DISPLAY_TOPOLOGY;
2571
2572 typedef struct _tagNVT_DISPLAYID_CONTAINERID
2573 {
2574 NvU32 revision;
2575 NvU32 data1;
2576 NvU16 data2;
2577 NvU16 data3;
2578 NvU16 data4;
2579 NvU8 data5[6];
2580 } NVT_DISPLAYID_CONTAINERID;
2581
2582 typedef struct _tagNVT_DISPLAYID_INTERFACE_FEATURES
2583 {
2584 NvU32 revision;
2585
2586 NVT_COLORDEPTH rgb444; // each bit within is set if rgb444 supported on that bpc
2587 NVT_COLORDEPTH yuv444; // each bit within is set if yuv444 supported on that bpc
2588 NVT_COLORDEPTH yuv422; // each bit within is set if yuv422 supported on that bpc
2589 NVT_COLORDEPTH yuv420; // each bit within is set if yuv420 supported on that bpc
2590
2591 NvU32 yuv420_min_pclk;
2592
2593 struct
2594 {
2595 NvU8 support_32khz : 1;
2596 NvU8 support_44_1khz : 1;
2597 NvU8 support_48khz : 1;
2598 NvU8 rsvd : 5;
2599 } audio_capability;
2600
2601 NvU32 combination_count;
2602 struct
2603 {
2604 NVT_DISPLAYID_INTERFACE_EOTF eotf;
2605 NVT_DISPLAYID_INTERFACE_COLOR_SPACE color_space;
2606 } colorspace_eotf_combination[NVT_DISPLAYID_DISPLAY_INTERFACE_FEATURES_MAX_ADDITIONAL_SUPPORTED_COLORSPACE_EOTF + 1];
2607
2608 } NVT_DISPLAYID_INTERFACE_FEATURES;
2609
2610 typedef struct _tagNVT_DISPLAYID_PRODUCT_IDENTITY
2611 {
2612 NvU32 revision;
2613 NvU32 vendor_id;
2614 NvU16 product_id;
2615 NvU32 serial_number;
2616 NvU16 week;
2617 NvU16 year;
2618 NvU8 product_string[NVT_DISPLAYID_2_0_PRODUCT_STRING_MAX_LEN + 1];
2619 } NVT_DISPLAYID_PRODUCT_IDENTITY;
2620
2621 typedef enum _tagNVT_COLOR_MAP_STANDARD
2622 {
2623 COLOR_MAP_CIE_1931,
2624 COLOR_MAP_CIE_1976,
2625 } NVT_COLOR_MAP_STANDARD;
2626
2627 typedef enum _tagNVT_AUDIO_SPEAKER_INTEGRATED
2628 {
2629 AUDIO_SPEAKER_INTEGRATED_SUPPORTED = 0,
2630 AUDIO_SPEAKER_INTEGRATED_NOT_SUPPORTED = 1,
2631 } NVT_AUDIO_SPEAKER_INTEGRATED;
2632
2633 typedef enum _tagNVT_NATIVE_LUMINANCE_INFO
2634 {
2635 NATIVE_LUMINANCE_INFO_MIN_GURANTEE_VALUE = 0,
2636 NATIVE_LUMINANCE_INFO_SOURCE_DEVICE_GUIDANCE = 1,
2637 } NVT_NATIVE_LUMINANCE_INFO;
2638
2639 typedef struct _tagNVT_DISPLAYID_DISPLAY_PARAMETERS
2640 {
2641 NvU32 revision;
2642 NvU32 h_image_size_micro_meter;
2643 NvU32 v_image_size_micro_meter;
2644 NvU16 h_pixels;
2645 NvU16 v_pixels;
2646 NVT_DISPLAYID_SCAN_ORIENTATION scan_orientation;
2647 NVT_COLOR_MAP_STANDARD color_map_standard;
2648 NVT_COLOR_POINT primaries[3];
2649 NVT_COLOR_POINT white;
2650 NVT_NATIVE_LUMINANCE_INFO native_luminance_info;
2651 NvU16 native_max_luminance_full_coverage;
2652 NvU16 native_max_luminance_10_percent_rect_coverage;
2653 NvU16 native_min_luminance;
2654 NVT_COLORDEPTH native_color_depth;
2655 NvU16 gamma_x100;
2656 NVT_DISPLAYID_DEVICE_TECHNOLOGY device_technology;
2657 NvBool device_theme_Preference;
2658 NvBool audio_speakers_integrated;
2659 } NVT_DISPLAYID_DISPLAY_PARAMETERS;
2660
2661 typedef struct _tagNVT_DISPLAYID_ADAPTIVE_SYNC
2662 {
2663 union
2664 {
2665 NvU8 operation_range_info;
2666 struct
2667 {
2668 NvU8 adaptive_sync_range : 1;
2669 NvU8 duration_inc_flicker_perf : 1;
2670 NvU8 modes : 2;
2671 NvU8 seamless_not_support : 1;
2672 NvU8 duration_dec_flicker_perf : 1;
2673 NvU8 reserved : 2;
2674 } information;
2675 } u;
2676
2677 NvU8 max_duration_inc;
2678 NvU8 min_rr;
2679 NvU16 max_rr;
2680 NvU8 max_duration_dec;
2681 } NVT_DISPLAYID_ADAPTIVE_SYNC;
2682
2683 typedef struct _tagVESA_VSDB_PARSED_INFO
2684 {
2685 struct
2686 {
2687 NvU8 type : 3;
2688 NvU8 reserved : 4;
2689 NvU8 color_space_and_eotf : 1;
2690 } data_struct_type;
2691
2692 struct
2693 {
2694 NvU8 pixels_overlapping_count : 4;
2695 NvU8 reserved_0 : 1;
2696 NvU8 multi_sst : 2;
2697 NvU8 reserved_1 : 1;
2698 } overlapping;
2699
2700 struct
2701 {
2702 NvU8 pass_through_integer_dsc : 6;
2703 NvU8 reserved : 2;
2704 } pass_through_integer;
2705
2706 struct
2707 {
2708 NvU8 pass_through_fraction_dsc : 4;
2709 NvU8 reserved : 4;
2710 } pass_through_fractional;
2711 } VESA_VSDB_PARSED_INFO;
2712
2713 typedef struct _tagNVT_DISPLAYID_VENDOR_SPECIFIC
2714 {
2715 NVT_HDMI_LLC_INFO hdmiLlc;
2716 NVT_HDMI_FORUM_INFO hfvs;
2717 NVDA_VSDB_PARSED_INFO nvVsdb;
2718 MSFT_VSDB_PARSED_INFO msftVsdb;
2719 VESA_VSDB_PARSED_INFO vesaVsdb;
2720 } NVT_DISPLAYID_VENDOR_SPECIFIC;
2721
2722 typedef struct _tagNVT_DISPLAYID_CTA
2723 {
2724 NVT_EDID_CEA861_INFO cta861_info;
2725 NVT_HDR_STATIC_METADATA hdrInfo;
2726 NVT_DV_STATIC_METADATA dvInfo;
2727 NVT_HDR10PLUS_INFO hdr10PlusInfo;
2728 } NVT_DISPLAYID_CTA;
2729
2730 typedef struct _tagNVT_DISPLAYID_BRIGHTNESS_LUMINANCE_RANGE
2731 {
2732 NvU32 revision;
2733 NvU16 min_sdr_luminance;
2734 NvU16 max_sdr_luminance;
2735 NvU16 max_boost_sdr_luminance;
2736 } NVT_DISPLAYID_BRIGHTNESS_LUMINANCE_RANGE;
2737
2738 typedef struct _tagNVT_VALID_DATA_BLOCKS
2739 {
2740 NvBool product_id_present;
2741 NvBool parameters_present;
2742 NvBool type7Timing_present;
2743 NvBool type8Timing_present;
2744 NvBool type9Timing_present;
2745 NvBool dynamic_range_limit_present;
2746 NvBool interface_feature_present;
2747 NvBool stereo_interface_present;
2748 NvBool tiled_display_present;
2749 NvBool container_id_present;
2750 NvBool type10Timing_present;
2751 NvBool adaptive_sync_present;
2752 NvBool arvr_hmd_present;
2753 NvBool arvr_layer_present;
2754 NvBool brightness_luminance_range_present;
2755 NvBool vendor_specific_present;
2756 NvBool cta_data_present;
2757 } NVT_VALID_DATA_BLOCKS;
2758
2759 #define NVT_DISPLAYID_MAX_TOTAL_TIMING NVT_MAX_TOTAL_TIMING
2760 typedef struct _tagNVT_DISPLAYID_2_0_INFO
2761 {
2762 NvU8 revision;
2763 NvU8 version;
2764
2765 // support audio/yuv444/yuv422 color for CTA861 compatible
2766 NvU8 basic_caps;
2767
2768 // the all extensions that may appear following the base section
2769 NvU32 extension_count;
2770
2771 // this displayID20 is EDID extension or not
2772 NvBool as_edid_extension;
2773
2774 // data blocks present or not
2775 NVT_VALID_DATA_BLOCKS valid_data_blocks;
2776
2777 NVT_DISPLAYID_PRODUCT_PRIMARY_USE_CASE primary_use_case;
2778
2779 // Product Identification Data Block (Mandatory)
2780 NVT_DISPLAYID_PRODUCT_IDENTITY product_identity;
2781
2782 // Display Parameter Data Block (Mandatory for Display Use)
2783 NVT_DISPLAYID_DISPLAY_PARAMETERS display_param;
2784
2785 // Detailed Timing Data Block (Mandatory for Display Use)
2786 NvU32 total_timings;
2787 NVT_TIMING timing[NVT_DISPLAYID_MAX_TOTAL_TIMING];
2788
2789 // Enumerated Timing Code Data Block (Not Mandatory)
2790
2791 // Formula-based Timing Data Block (Not Mandatory)
2792
2793 // Dynamic Video Timing Range Limits Data Block (Not Mandatory)
2794 NVT_DISPLAYID_RANGE_LIMITS range_limits;
2795
2796 // Display Interface Features Data Block (Mandatory)
2797 NVT_DISPLAYID_INTERFACE_FEATURES interface_features;
2798
2799 // Stereo Display Interface Data Block (Not Mandatory)
2800
2801 // Tiled Display Topology Data Block (Not Mandatory)
2802 NVT_DISPLAYID_TILED_DISPLAY_TOPOLOGY tile_topo;
2803
2804 // ContainerID Data Block (Mandatory for Multi-function Device)
2805 NVT_DISPLAYID_CONTAINERID container_id;
2806
2807 // Adaptive-Sync Data Block (Mandatory for display device supports Adaptive-Sync)
2808 NvU32 total_adaptive_sync_descriptor;
2809 NVT_DISPLAYID_ADAPTIVE_SYNC adaptive_sync_descriptor[NVT_ADAPTIVE_SYNC_DESCRIPTOR_MAX_COUNT];
2810
2811 // Brightness Luminance Range Data Block (Mandatory for display device supports Nits based brightness control)
2812 NVT_DISPLAYID_BRIGHTNESS_LUMINANCE_RANGE luminance_ranges;
2813
2814 // Vendor-specific Data Block (Not Mandatory)
2815 NVT_DISPLAYID_VENDOR_SPECIFIC vendor_specific;
2816
2817 // CTA DisplayID Data Block (Not Mandatory)
2818 NVT_DISPLAYID_CTA cta;
2819 } NVT_DISPLAYID_2_0_INFO;
2820
2821 #define NVT_EDID_PRIMARY_COLOR_FP2INT_FACTOR 1024 // Per EDID 1.4, 10bit color primary is encoded in floating point as (bit9/2 + bit8/4 + bi7/8 + ... + bit0)
2822 typedef struct tagNVT_EDID_INFO
2823 {
2824 // generic edid info
2825 NvU32 version;
2826 NvU16 manuf_id;
2827 NvU16 manuf_id_hi;
2828 NvU8 manuf_name[4];
2829 NvU16 product_id;
2830 NvU32 serial_number;
2831 NvU8 week;
2832 NvU16 year;
2833
2834 // the interface info
2835 struct
2836 {
2837 union
2838 {
2839 struct
2840 {
2841 NvU8 serrations : 1;
2842 NvU8 sync_type : 3;
2843 NvU8 video_setup : 1;
2844 NvU8 vp_p : 2;
2845 } analog;
2846 struct
2847 {
2848 NvU8 video_interface : 4;
2849 NvU8 bpc : 5;
2850 } digital;
2851 NvU8 analog_data : 7;
2852 } u;
2853 NvU8 isDigital : 1;
2854 } input;
2855
2856 // the screen size info
2857 NvU8 screen_size_x; // horizontal screen size in cm
2858 NvU8 screen_size_y; // verical screen size in cm
2859 NvU16 screen_aspect_x; // aspect ratio
2860 NvU16 screen_aspect_y; // aspect ratio
2861
2862 // display transfer characteristics
2863 NvU16 gamma;
2864
2865 // features support
2866 union
2867 {
2868 NvU8 feature;
2869 struct
2870 {
2871 NvU8 support_gtf : 1;
2872 NvU8 preferred_timing_is_native : 1; // should be "Preferred_timing_is_dtd1". To be exact, "Native" is referenced as the native HDTV timing by CEA861 extension block
2873 NvU8 default_colorspace_srgb : 1;
2874 NvU8 color_type : 2;
2875 NvU8 support_active_off : 1;
2876 NvU8 support_suspend : 1;
2877 NvU8 support_standby : 1;
2878
2879 } feature_ver_1_3;
2880 struct
2881 {
2882 NvU8 continuous_frequency : 1;
2883 NvU8 preferred_timing_is_native : 1; // should be "Preferred_timing_is_dtd1". To be exact, "Native" is referenced as the native HDTV timing by CEA861 extension block
2884 NvU8 default_colorspace_srgb : 1;
2885 NvU8 color_type : 2;
2886 NvU8 support_active_off : 1;
2887 NvU8 support_suspend : 1;
2888 NvU8 support_standby : 1;
2889 } feature_ver_1_4_analog;
2890 struct
2891 {
2892 NvU8 continuous_frequency : 1;
2893 NvU8 preferred_timing_is_native : 1; // should be "Preferred_timing_is_dtd1". To be exact, "Native" is referenced as the native HDTV timing by CEA861 extension block
2894 NvU8 default_colorspace_srgb : 1;
2895 NvU8 support_ycrcb_444 : 1;
2896 NvU8 support_ycrcb_422 : 1;
2897 NvU8 support_active_off : 1;
2898 NvU8 support_suspend : 1;
2899 NvU8 support_standby : 1;
2900 } feature_ver_1_4_digital;
2901 }u;
2902
2903 // chromaticity coordinates
2904 NvU16 cc_red_x;
2905 NvU16 cc_red_y;
2906 NvU16 cc_green_x;
2907 NvU16 cc_green_y;
2908 NvU16 cc_blue_x;
2909 NvU16 cc_blue_y;
2910 NvU16 cc_white_x;
2911 NvU16 cc_white_y;
2912
2913 // established timings 1 and 2
2914 NvU16 established_timings_1_2;
2915
2916 // Manufacturer reserved timings
2917 NvU16 manufReservedTimings;
2918
2919 // standard timings
2920 NvU16 standard_timings[NVT_EDID_MAX_STANDARD_TIMINGS];
2921
2922 // 18-bytes display descriptor info
2923 NVT_EDID_18BYTE_DESCRIPTOR ldd[NVT_EDID_MAX_LONG_DISPLAY_DESCRIPTOR];
2924
2925 // the parse timing
2926 NVT_TIMING timing[NVT_EDID_MAX_TOTAL_TIMING];
2927
2928 // Note: This contains the timing after validation.
2929 NvU32 total_timings;
2930
2931 // This contains the count timing that were invalidated because they don't meet
2932 // some policies (PClk, etc).
2933 NvU32 total_invalidTimings;
2934
2935 // indicates support for HDMI 1.4+ 3D stereo modes are present
2936 NvU32 HDMI3DSupported;
2937
2938 HDMI3DSUPPORTMAP Hdmi3Dsupport;
2939
2940 // Data parsed from NVDA VSDB - Variable Refresh Rate Monitor capabilities
2941 NVDA_VSDB_PARSED_INFO nvdaVsdbInfo;
2942
2943 // Data parsed from MSFT VSDB - HMD and Specialized (Direct display) Monitor capabilities
2944 MSFT_VSDB_PARSED_INFO msftVsdbInfo;
2945
2946 // HDR capability information from the HDR Metadata Data Block
2947 NVT_HDR_STATIC_METADATA hdr_static_metadata_info;
2948
2949 // DV capability information from the DV Metadata Data Block
2950 NVT_DV_STATIC_METADATA dv_static_metadata_info;
2951
2952 // HDR10+ capability information from the HDR10+ LLC VSVDB
2953 NVT_HDR10PLUS_INFO hdr10PlusInfo;
2954
2955 // HDMI LLC info
2956 NVT_HDMI_LLC_INFO hdmiLlcInfo;
2957
2958 // HDMI 2.0 information
2959 NVT_HDMI_FORUM_INFO hdmiForumInfo;
2960 // deprecating the following, please use hdmiForumInfo;
2961 struct
2962 {
2963 NvU8 max_TMDS_char_rate;
2964 NvU8 lte_340Mcsc_scramble :1;
2965 NvU8 rr_capable :1;
2966 NvU8 SCDC_present :1;
2967 } hdmi_2_0_info;
2968
2969 // the total edid extension(s) attached to the basic block
2970 NvU32 total_extensions;
2971 // the total displayid2 extension(s) attached to the basic block.
2972 NvU32 total_did2_extensions;
2973
2974 NvU8 checksum;
2975 NvU8 checksum_ok;
2976
2977 // extension info
2978 NVT_EDID_CEA861_INFO ext861;
2979
2980 // for the 2nd CEA/EIA861 extension
2981 // note: "ext861" should really be an array but since it requires massive name change and it's hard
2982 // to find more than one 861 extension in the real world, I made a trade off like this for now.
2983 NVT_EDID_CEA861_INFO ext861_2;
2984
2985 NVT_DISPLAYID_INFO ext_displayid;
2986 NVT_DISPLAYID_2_0_INFO ext_displayid20;
2987 } NVT_EDID_INFO;
2988
2989 typedef enum
2990 {
2991 NVT_PROTOCOL_UNKNOWN = 0,
2992 NVT_PROTOCOL_DP = 1,
2993 NVT_PROTOCOL_HDMI = 2,
2994 NVT_PROTOCOL_DVI = 3,
2995 } NVT_PROTOCOL;
2996
2997 // the display interface/connector claimed by the EDID
2998 #define NVT_EDID_INPUT_DIGITAL_UNDEFINED 0x00 // undefined digital interface
2999 #define NVT_EDID_INPUT_DVI 0x01
3000 #define NVT_EDID_INPUT_HDMI_TYPE_A 0x02
3001 #define NVT_EDID_INPUT_HDMI_TYPE_B 0x03
3002 #define NVT_EDID_INPUT_MDDI 0x04
3003 #define NVT_EDID_INPUT_DISPLAY_PORT 0x05
3004
3005
3006 // the EDID extension TAG
3007 #define NVT_EDID_EXTENSION_CTA 0x02 // CTA 861 series extensions
3008 #define NVT_EDID_EXTENSION_VTB 0x10 // video timing block extension
3009 #define NVT_EDID_EXTENSION_DI 0x40 // display information extension
3010 #define NVT_EDID_EXTENSION_LS 0x50 // localized string extension
3011 #define NVT_EDID_EXTENSION_DPVL 0x60 // digital packet video link extension
3012 #define NVT_EDID_EXTENSION_DISPLAYID 0x70 // display id
3013 #define NVT_EDID_EXTENSION_BM 0xF0 // extension block map
3014 #define NVT_EDID_EXTENSION_OEM 0xFF // extension defined by the display manufacturer
3015
3016 //************************************
3017 // Audio and Video Infoframe Control
3018 //************************************
3019 //
3020 // the control info for generating infoframe data
3021 #define NVT_INFOFRAME_CTRL_DONTCARE 0xFF
3022 //
3023 typedef struct tagNVT_VIDEO_INFOFRAME_CTRL
3024 {
3025 NvU8 color_space;
3026 NvU8 active_format_info_present;
3027 NvU8 bar_info;
3028 NvU8 scan_info;
3029 NvU8 colorimetry;
3030 NvU8 pic_aspect_ratio;
3031 NvU8 active_format_aspect_ratio;
3032 NvU8 it_content;
3033 NvU8 it_content_type;
3034 NvU8 extended_colorimetry;
3035 NvU8 rgb_quantization_range;
3036 NvU8 nonuniform_scaling;
3037 NvU8 video_format_id;
3038 NvU8 pixel_repeat;
3039 NvU16 top_bar;
3040 NvU16 bottom_bar;
3041 NvU16 left_bar;
3042 NvU16 right_bar;
3043 NvU8 addition_colorimetry_ext;
3044 NvU8 frame_rate;
3045 NvU8 rid;
3046 }NVT_VIDEO_INFOFRAME_CTRL;
3047
3048 //
3049 typedef struct tagNVT_AUDIO_INFOFRAME_CTRL
3050 {
3051 NvU8 coding_type;
3052 NvU8 channel_count;
3053 NvU8 sample_rate;
3054 NvU8 sample_depth;
3055 NvU8 speaker_placement;
3056 NvU8 level_shift;
3057 NvU8 down_mix_inhibit;
3058 }NVT_AUDIO_INFOFRAME_CTRL;
3059
3060 typedef struct tagNVT_VENDOR_SPECIFIC_INFOFRAME_CTRL
3061 {
3062 NvU8 Enable;
3063 NvU8 HDMIRevision;
3064 NvU8 HDMIFormat;
3065 NvU8 HDMI_VIC;
3066 NvBool ALLMEnable;
3067 NvU8 ThreeDStruc;
3068 NvU8 ThreeDDetail;
3069 NvU8 MetadataPresent;
3070 NvU8 MetadataType;
3071 NvU8 Metadata[8]; // type determines length
3072
3073 } NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL;
3074 #define NVT_3D_METADTATA_TYPE_PARALAX 0x00
3075 #define NVT_3D_METADTATA_PARALAX_LEN 0x08
3076
3077 #define NVT_EXTENDED_METADATA_PACKET_INFOFRAME_VER_HDMI21 0x0
3078 #define NVT_EXTENDED_METADATA_PACKET_INFOFRAME_VER_HDMI21A 0x1
3079 typedef struct tagNVT_EXTENDED_METADATA_PACKET_INFOFRAME_CTRL
3080 {
3081 NvU32 version; // See #define NVT_EXTENDED_METADATA_PACKET_INFOFRAME_VER
3082 NvU32 EnableVRR;
3083 NvU32 ITTiming;
3084 NvU32 BaseVFP;
3085 NvU32 ReducedBlanking;
3086 NvU32 BaseRefreshRate;
3087 NvU32 EnableQMS;
3088 NvU32 NextTFR;
3089 NvU32 Sync;
3090 NvU32 MConst;
3091 } NVT_EXTENDED_METADATA_PACKET_INFOFRAME_CTRL;
3092
3093 typedef struct tagNVT_ADAPTIVE_SYNC_SDP_CTRL
3094 {
3095 NvU32 minVTotal;
3096 NvU32 targetRefreshRate;
3097 NvU32 srCoastingVTotal;
3098 NvBool bFixedVTotal;
3099 NvBool bRefreshRateDivider;
3100 }NVT_ADAPTIVE_SYNC_SDP_CTRL;
3101
3102 //***********************************
3103 // the actual Auido/Video Infoframe
3104 //***********************************
3105 //
3106 // info frame type code
3107 #define NVT_INFOFRAME_TYPE_VENDOR_SPECIFIC 1
3108 #define NVT_INFOFRAME_TYPE_VIDEO 2
3109 #define NVT_INFOFRAME_TYPE_SOURCE_PRODUCT_DESCRIPTION 3
3110 #define NVT_INFOFRAME_TYPE_AUDIO 4
3111 #define NVT_INFOFRAME_TYPE_MPEG_SOURCE 5
3112 #define NVT_INFOFRAME_TYPE_SELF_REFRESH 6
3113 #define NVT_INFOFRAME_TYPE_DYNAMIC_RANGE_MASTERING 7
3114 #define NVT_INFOFRAME_TYPE_EXTENDED_METADATA_PACKET 8
3115 //
3116 //
3117 typedef struct tagNVT_INFOFRAME_HEADER
3118 {
3119 NvU8 type;
3120 NvU8 version;
3121 NvU8 length;
3122 }NVT_INFOFRAME_HEADER;
3123
3124 typedef struct tagNVT_EXTENDED_METADATA_PACKET_INFOFRAME_HEADER
3125 {
3126 NvU8 type;
3127 NvU8 firstLast;
3128 NvU8 sequenceIndex;
3129 } NVT_EXTENDED_METADATA_PACKET_INFOFRAME_HEADER;
3130
3131 #define NVT_EMP_HEADER_FIRST 0x80
3132 #define NVT_EMP_HEADER_LAST 0x40
3133 #define NVT_EMP_HEADER_FIRST_LAST 0xC0
3134
3135 // SPD Infoframe
3136 typedef struct tagNVT_SPD_INFOFRAME_PAYLOAD
3137 {
3138 NvU8 vendorBytes[8];
3139 NvU8 productBytes[16];
3140
3141 NvU8 sourceInformation;
3142
3143 } NVT_SPD_INFOFRAME_PAYLOAD;
3144
3145 typedef struct tagNVT_SPD_INFOFRAME
3146 {
3147 NVT_INFOFRAME_HEADER Header;
3148 NVT_SPD_INFOFRAME_PAYLOAD Data;
3149 } NVT_SPD_INFOFRAME;
3150
3151 // the video infoframe version 1-3 structure
3152 typedef struct tagNVT_VIDEO_INFOFRAME
3153 {
3154 NvU8 type;
3155 NvU8 version;
3156 NvU8 length;
3157
3158 // byte 1~5
3159 NvU8 byte1;
3160 NvU8 byte2;
3161 NvU8 byte3;
3162 NvU8 byte4;
3163 NvU8 byte5;
3164
3165 // byte 6~13
3166 NvU8 top_bar_low;
3167 NvU8 top_bar_high;
3168 NvU8 bottom_bar_low;
3169 NvU8 bottom_bar_high;
3170 NvU8 left_bar_low;
3171 NvU8 left_bar_high;
3172 NvU8 right_bar_low;
3173 NvU8 right_bar_high;
3174
3175 // byte 14~15
3176 NvU8 byte14;
3177 NvU8 byte15;
3178 }NVT_VIDEO_INFOFRAME;
3179 //
3180 #define NVT_VIDEO_INFOFRAME_VERSION_1 1
3181 #define NVT_VIDEO_INFOFRAME_VERSION_2 2
3182 #define NVT_VIDEO_INFOFRAME_VERSION_3 3
3183 #define NVT_VIDEO_INFOFRAME_VERSION_4 4
3184 //
3185 #define NVT_VIDEO_INFOFRAME_BYTE1_S1S0_MASK 0x03
3186 #define NVT_VIDEO_INFOFRAME_BYTE1_S1S0_SHIFT 0
3187 #define NVT_VIDEO_INFOFRAME_BYTE1_S1S0_NO_DATA 0
3188 #define NVT_VIDEO_INFOFRAME_BYTE1_S1S0_OVERSCANNED 1
3189 #define NVT_VIDEO_INFOFRAME_BYTE1_S1S0_UNDERSCANNED 2
3190 #define NVT_VIDEO_INFOFRAME_BYTE1_S1S0_FUTURE 3
3191 //
3192 #define NVT_VIDEO_INFOFRAME_BYTE1_B1B0_MASK 0x0C
3193 #define NVT_VIDEO_INFOFRAME_BYTE1_B1B0_SHIFT 2
3194 #define NVT_VIDEO_INFOFRAME_BYTE1_B1B0_NOT_VALID 0
3195 #define NVT_VIDEO_INFOFRAME_BYTE1_B1B0_VERT_VALID 1
3196 #define NVT_VIDEO_INFOFRAME_BYTE1_B1B0_HORIZ_VALID 2
3197 #define NVT_VIDEO_INFOFRAME_BYTE1_B1B0_H_V_VALID 3
3198 //
3199 #define NVT_VIDEO_INFOFRAME_BYTE1_A0_MASK 0x10 // active format info present
3200 #define NVT_VIDEO_INFOFRAME_BYTE1_A0_SHIFT 4 // active format info present
3201 #define NVT_VIDEO_INFOFRAME_BYTE1_A0_NO_DATA 0
3202 #define NVT_VIDEO_INFOFRAME_BYTE1_A0_VALID 1
3203 //
3204 // CTA-861G new requirement - DD changed this policy
3205 #define NVT_VIDEO_INFOFRAME_BYTE1_Y2_MASK 8
3206 #define NVT_VIDEO_INFOFRAME_BYTE1_Y2Y1Y0_MASK 0xE0
3207 #define NVT_VIDEO_INFOFRAME_BYTE1_Y2Y1Y0_SHIFT 0x5
3208 #define NVT_VIDEO_INFOFRAME_BYTE1_Y2Y1Y0_RGB 0
3209 #define NVT_VIDEO_INFOFRAME_BYTE1_Y2Y1Y0_YCbCr422 1
3210 #define NVT_VIDEO_INFOFRAME_BYTE1_Y2Y1Y0_YCbCr444 2
3211 #define NVT_VIDEO_INFOFRAME_BYTE1_Y2Y1Y0_YCbCr420 3
3212 #define NVT_VIDEO_INFOFRAME_BYTE1_Y2Y1Y0_FUTURE 3 // nvlEscape still uses this line 4266
3213 #define NVT_VIDEO_INFOFRAME_BYTE1_Y2Y1Y0_IDODEFINED 7
3214 // CEA-861-F - Unix still used this one
3215 #define NVT_VIDEO_INFOFRAME_BYTE1_Y1Y0_MASK 0x60
3216 #define NVT_VIDEO_INFOFRAME_BYTE1_Y1Y0_SHIFT 0x5
3217 #define NVT_VIDEO_INFOFRAME_BYTE1_Y1Y0_RGB 0
3218 #define NVT_VIDEO_INFOFRAME_BYTE1_Y1Y0_YCbCr422 1
3219 #define NVT_VIDEO_INFOFRAME_BYTE1_Y1Y0_YCbCr444 2
3220 #define NVT_VIDEO_INFOFRAME_BYTE1_Y1Y0_YCbCr420 3
3221 #define NVT_VIDEO_INFOFRAME_BYTE1_Y1Y0_FUTURE 3 // nvlEscape still uses this lline 4266
3222 //
3223 #define NVT_VIDEO_INFOFRAME_BYTE1_RESERVED_MASK 0x80 // for Inforframe V1 / V2
3224 #define NVT_VIDEO_INFOFRAME_BYTE1_RESERVED_SHIFT 7
3225 //
3226 #define NVT_VIDEO_INFOFRAME_BYTE2_R3R2R1R0_MASK 0x0F // active format aspect ratio
3227 #define NVT_VIDEO_INFOFRAME_BYTE2_R3R2R1R0_SHIFT 0
3228 #define NVT_VIDEO_INFOFRAME_BYTE2_R3R2R1R0_SAME_AS_M1M0 8
3229 #define NVT_VIDEO_INFOFRAME_BYTE2_R3R2R1R0_4X3_CENTER 9
3230 #define NVT_VIDEO_INFOFRAME_BYTE2_R3R2R1R0_16X9_CENTER 10
3231 #define NVT_VIDEO_INFOFRAME_BYTE2_R3R2R1R0_14x9_CENTER 11
3232 //
3233 #define NVT_VIDEO_INFOFRAME_BYTE2_M1M0_MASK 0x30 // picture aspect ratio
3234 #define NVT_VIDEO_INFOFRAME_BYTE2_M1M0_SHIFT 4 // picture aspect ratio
3235 #define NVT_VIDEO_INFOFRAME_BYTE2_M1M0_NO_DATA 0
3236 #define NVT_VIDEO_INFOFRAME_BYTE2_M1M0_4X3 1
3237 #define NVT_VIDEO_INFOFRAME_BYTE2_M1M0_16X9 2
3238 #define NVT_VIDEO_INFOFRAME_BYTE2_M1M0_FUTURE 3
3239 //
3240 #define NVT_VIDEO_INFOFRAME_BYTE2_C1C0_MASK 0xC0 // colorimetry
3241 #define NVT_VIDEO_INFOFRAME_BYTE2_C1C0_SHIFT 6
3242 #define NVT_VIDEO_INFOFRAME_BYTE2_C1C0_NO_DATA 0
3243 #define NVT_VIDEO_INFOFRAME_BYTE2_C1C0_SMPTE170M_ITU601 1
3244 #define NVT_VIDEO_INFOFRAME_BYTE2_C1C0_ITU709 2
3245 #define NVT_VIDEO_INFOFRAME_BYTE2_C1C0_EXT_COLORIMETRY 3
3246 //
3247 #define NVT_VIDEO_INFOFRAME_BYTE3_SC_MASK 0x03 // non-uniform scaling
3248 #define NVT_VIDEO_INFOFRAME_BYTE3_SC_SHIFT 0
3249 #define NVT_VIDEO_INFOFRAME_BYTE3_SC_NONE 0
3250 #define NVT_VIDEO_INFOFRAME_BYTE3_SC_HORIZ_SCALED 1
3251 #define NVT_VIDEO_INFOFRAME_BYTE3_SC_VERT_SCALED 2
3252 #define NVT_VIDEO_INFOFRAME_BYTE3_SC_H_V_SCALED 3
3253 //
3254 #define NVT_VIDEO_INFOFRAME_BYTE3_Q1Q0_MASK 0x0C // quantization
3255 #define NVT_VIDEO_INFOFRAME_BYTE3_Q1Q0_SHIFT 2
3256 #define NVT_VIDEO_INFOFRAME_BYTE3_Q1Q0_DEFAULT 0
3257 #define NVT_VIDEO_INFOFRAME_BYTE3_Q1Q0_LIMITED_RANGE 1
3258 #define NVT_VIDEO_INFOFRAME_BYTE3_Q1Q0_FULL_RANGE 2
3259 #define NVT_VIDEO_INFOFRAME_BYTE3_Q1Q0_RESERVED 3
3260 //
3261 #define NVT_VIDEO_INFOFRAME_BYTE3_EC_MASK 0x70 // extended colorimetry
3262 #define NVT_VIDEO_INFOFRAME_BYTE3_EC_SHIFT 4
3263 #define NVT_VIDEO_INFOFRAME_BYTE3_EC_xvYCC_601 0
3264 #define NVT_VIDEO_INFOFRAME_BYTE3_EC_xvYCC_709 1
3265 #define NVT_VIDEO_INFOFRAME_BYTE3_EC_sYCC_601 2
3266 #define NVT_VIDEO_INFOFRAME_BYTE3_EC_AdobeYCC_601 3
3267 #define NVT_VIDEO_INFOFRAME_BYTE3_EC_AdobeRGB 4
3268 #define NVT_VIDEO_INFOFRAME_BYTE3_EC_BT2020cYCC 5 // CEA-861-F define it as "ITU-R BT.2020 YcCbcCrc" at Table 12
3269 #define NVT_VIDEO_INFOFRAME_BYTE3_EC_BT2020RGBYCC 6 // CEA-861-F define it as "ITU-R BT.2020 YcCbCr" at Table 12
3270 #define NVT_VIDEO_INFOFRAME_BYTE3_EC_RESERVED7 7 // CEA-861-F define it as "Reserved" at Table 12
3271 #define NVT_VIDEO_INFOFRAME_BYTE3_EC_AdditionalColorExt 7 // CTA-861-G define it as "Additional Colorimtry Ext Info Valid" at Table_13
3272 //
3273 #define NVT_VIDEO_INFOFRAME_BYTE3_ITC_MASK 0x80 // IT content
3274 #define NVT_VIDEO_INFOFRAME_BYTE3_ITC_SHIFT 7
3275 #define NVT_VIDEO_INFOFRAME_BYTE3_ITC_NO_DATA 0
3276 #define NVT_VIDEO_INFOFRAME_BYTE3_ITC_IT_CONTENT 1
3277 //
3278 #define NVT_VIDEO_INFOFRAME_BYTE3_RESERVED_V1_MASK 0x60 // reserved
3279 #define NVT_VIDEO_INFOFRAME_BYTE3_RESERVED_V1_SHIFT 5
3280 //
3281 #define NVT_VIDEO_INFOFRAME_BYTE4_VIC_MASK 0xFF // video identification code
3282 #define NVT_VIDEO_INFOFRAME_BYTE4_VIC_SHIFT 0
3283 #define NVT_VIDEO_INFOFRAME_BYTE4_VIC7 0x80
3284 //
3285 #define NVT_VIDEO_INFOFRAME_BYTE4_RESERVED_V3_MASK 0x00
3286 #define NVT_VIDEO_INFOFRAME_BYTE4_RESERVED_V3_SHIFT 0
3287 #define NVT_VIDEO_INFOFRAME_BYTE4_RESERVED_V2_MASK 0x80
3288 #define NVT_VIDEO_INFOFRAME_BYTE4_RESERVED_V2_SHIFT 7
3289 #define NVT_VIDEO_INFOFRAME_BYTE4_RESERVED_V1_MASK 0xFF
3290 #define NVT_VIDEO_INFOFRAME_BYTE4_RESERVED_V1_SHIFT 0
3291 //
3292 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_MASK 0x0F // pixel repetitions
3293 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_SHIFT 0
3294 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_NO_PEP 0
3295 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_2X 1
3296 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_3X 2
3297 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_4X 3
3298 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_5X 4
3299 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_6X 5
3300 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_7X 6
3301 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_8X 7
3302 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_9X 8
3303 #define NVT_VIDEO_INFOFRAME_BYTE5_PR_10X 9
3304 //
3305 #define NVT_VIDEO_INFOFRAME_BYTE5_CN1CN0_MASK 0x30 // Content Information
3306 #define NVT_VIDEO_INFOFRAME_BYTE5_CN1CN0_SHIFT 4
3307 #define NVT_VIDEO_INFOFRAME_BYTE5_CN1CN0_NODATA 0 // ITC = 0
3308 #define NVT_VIDEO_INFOFRAME_BYTE5_CN1CN0_GRAPHICS 0 // ITC = 1
3309 #define NVT_VIDEO_INFOFRAME_BYTE5_CN1CN0_PHOTO 1 // ITC = don't care
3310 #define NVT_VIDEO_INFOFRAME_BYTE5_CN1CN0_CINEMA 2 // ITC = don't care
3311 #define NVT_VIDEO_INFOFRAME_BYTE5_CN1CN0_GAME 3 // ITC = don't care
3312
3313 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ1YQ0_MASK 0xC0 // YCC quantization
3314 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ1YQ0_SHIFT 6
3315 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ1YQ0_LIMITED_RANGE 1
3316 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ1YQ0_FULL_RANGE 2
3317 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ1YQ0_RESERVED3 3
3318 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ1YQ0_RESERVED4 4
3319 //
3320 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ_MASK 0xc0 // content type
3321 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ_SHIFT 6
3322 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ_LIMITED 0
3323 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ_FULL 1
3324 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ_RSVD1 2
3325 #define NVT_VIDEO_INFOFRAME_BYTE5_YQ_RSVD2 3
3326 //
3327 #define NVT_VIDEO_INFOFRAME_BYTE5_RESERVED_V2_MASK 0x00
3328 #define NVT_VIDEO_INFOFRAME_BYTE5_RESERVED_V2_SHIFT 0
3329 #define NVT_VIDEO_INFOFRAME_BYTE5_RESERVED_V1_MASK 0xFF
3330 #define NVT_VIDEO_INFOFRAME_BYTE5_RESERVED_V1_SHIFT 0
3331 //
3332 #define NVT_VIDEO_INFOFRAME_BYTE14_FR0_FR3_MASK 0x0F
3333 #define NVT_VIDEO_INFOFRAME_BYTE14_FR0_FR3_SHIFT 0
3334 #define NVT_VIDEO_INFOFRAME_BYTE14_FR0_FR3_NODATA 0
3335 #define NVT_VIDEO_INFOFRAME_BYTE14_FR4_ONE_BIT_MASK 0x10
3336 #define NVT_VIDEO_INFOFRAME_BYTE15_FR4_MASK 0x40
3337 #define NVT_VIDEO_INFOFRAME_BYTE15_FR4_NODATA 0
3338 #define NVT_VIDEO_INFOFRAME_BYTE15_FR4_SHIFT 2
3339 //
3340 #define NVT_VIDEO_INFOFRAME_BYTE15_RID_MASK 0x3F
3341 #define NVT_VIDEO_INFOFRAME_BYTE15_RID_SHIFT 0
3342 #define NVT_VIDEO_INFOFRAME_BYTE15_RID_NODATA 0
3343 //
3344 #define NVT_VIDEO_INFOFRAME_BYTE14_ACE0_3_MASK 0xF0
3345 #define NVT_VIDEO_INFOFRAME_BYTE14_ACE0_3_SHIFT 4
3346 #define NVT_VIDEO_INFOFRAME_BYTE14_ACE0_3_P3D65RGB 0
3347 #define NVT_VIDEO_INFOFRAME_BYTE14_ACE0_3_P3DCIRGB 1
3348 #define NVT_VIDEO_INFOFRAME_BYTE14_ACE0_3_BT2100_ICtCp 2
3349 #define NVT_VIDEO_INFOFRAME_BYTE14_ACE0_3_sRGB 3
3350 #define NVT_VIDEO_INFOFRAME_BYTE14_ACE0_3_defaultRGB 4
3351 //
3352 #define NVT_VIDEO_INFOFRAME_CONTENT_VIDEO 0
3353 #define NVT_VIDEO_INFOFRAME_CONTENT_GRAPHICS 1
3354 #define NVT_VIDEO_INFOFRAME_CONTENT_PHOTO 2
3355 #define NVT_VIDEO_INFOFRAME_CONTENT_CINEMA 3
3356 #define NVT_VIDEO_INFOFRAME_CONTENT_GAME 4
3357 #define NVT_VIDEO_INFOFRAME_CONTENT_LAST 4
3358
3359 #pragma pack(1)
3360 typedef struct
3361 {
3362 // byte 1
3363 struct
3364 {
3365 NvU8 scanInfo : 2;
3366 NvU8 barInfo : 2;
3367 NvU8 activeFormatInfoPresent : 1;
3368 NvU8 colorSpace : 2;
3369 NvU8 rsvd_bits_byte1 : 1;
3370 } byte1;
3371
3372 // byte 2
3373 struct
3374 {
3375 NvU8 activeFormatAspectRatio : 4;
3376 NvU8 picAspectRatio : 2;
3377 NvU8 colorimetry : 2;
3378 } byte2;
3379
3380 // byte 3
3381 struct
3382 {
3383 NvU8 nonuniformScaling : 2;
3384 NvU8 rgbQuantizationRange : 2;
3385 NvU8 extendedColorimetry : 3;
3386 NvU8 itContent : 1;
3387 } byte3;
3388
3389 // byte 4
3390 struct
3391 {
3392 NvU8 vic : 7;
3393 NvU8 rsvd_bits_byte4 : 1;
3394 } byte4;
3395
3396 // byte 5
3397 struct
3398 {
3399 NvU8 pixelRepeat : 4;
3400 NvU8 contentTypes : 2;
3401 NvU8 yccQuantizationRange : 2;
3402 } byte5;
3403
3404 NvU16 topBar;
3405 NvU16 bottomBar;
3406 NvU16 leftBar;
3407 NvU16 rightBar;
3408
3409 // byte 14~15
3410 struct
3411 {
3412 NvU8 fr_low : 4;
3413 NvU8 ace : 4;
3414 } byte14;
3415
3416 struct
3417 {
3418 NvU8 rid : 6;
3419 NvU8 fr_hi : 1;
3420 NvU8 rsvd_bits_byte15 : 1;
3421 }byte15;
3422 } NVT_VIDEO_INFOFRAME_OVERRIDE;
3423 #pragma pack()
3424
3425 typedef struct
3426 {
3427 NvU32 vic : 8;
3428 NvU32 pixelRepeat : 5;
3429 NvU32 colorSpace : 3;
3430 NvU32 colorimetry : 3;
3431 NvU32 extendedColorimetry : 4;
3432 NvU32 rgbQuantizationRange : 3;
3433 NvU32 yccQuantizationRange : 3;
3434 NvU32 itContent : 2;
3435 NvU32 contentTypes : 3;
3436 NvU32 scanInfo : 3;
3437 NvU32 activeFormatInfoPresent : 2;
3438 NvU32 activeFormatAspectRatio : 5;
3439 NvU32 picAspectRatio : 3;
3440 NvU32 nonuniformScaling : 3;
3441 NvU32 barInfo : 3;
3442 NvU32 top_bar : 17;
3443 NvU32 bottom_bar : 17;
3444 NvU32 left_bar : 17;
3445 NvU32 right_bar : 17;
3446 NvU32 Future17 : 2;
3447 NvU32 Future47 : 2;
3448 } NVT_INFOFRAME_VIDEO;
3449
3450
3451 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE1_S1S0_MASK 0x3
3452 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE1_B1B0_MASK 0x3
3453 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE1_A0_MASK 0x1 // active format info present
3454 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE1_Y1Y0_MASK 0x3
3455 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE1_Y2Y1Y0_MASK 0x7
3456 //
3457 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE2_R3R2R1R0_MASK 0xF // active format aspect ratio
3458 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE2_M1M0_MASK 0x3 // picture aspect ratio
3459 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE2_C1C0_MASK 0x3 // colorimetry
3460 //
3461 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE3_SC_MASK 0x3 // non-uniform scaling
3462 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE3_Q1Q0_MASK 0x3 // quantization
3463 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE3_EC_MASK 0x7 // extended colorimetry
3464 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE3_ITC_MASK 0x1 // IT content
3465 //
3466 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE4_VIC_MASK 0x7F // video identification code
3467 //
3468 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE5_PR_MASK 0xF // pixel repetitions
3469 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE5_CN1CN0_MASK 0x3
3470 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE5_YQ1YQ0_MASK 0x3 // YCC quantization
3471 //
3472 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE14_FR0FR3_MASK 0xF // Frame rate 0-3 bits in Byte14
3473 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE14_ACE0ACE3_MASK 0xF // Additional Colorimetry Extension
3474 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE15_RID0RID5_MASK 0x3F // Resolution Identification
3475 #define NVT_VIDEO_INFOFRAME_OVERRIDE_BYTE15_FR4_MASK 0x1 // Frame rate 4th bit in Byte 15
3476
3477 // audio infoframe structure
3478 typedef struct tagNVT_AUDIO_INFOFRAME
3479 {
3480 NvU8 type;
3481 NvU8 version;
3482 NvU8 length;
3483
3484 // byte 1~5
3485 NvU8 byte1;
3486 NvU8 byte2;
3487 NvU8 byte3;
3488 NvU8 byte4;
3489 NvU8 byte5;
3490
3491 // byte 6~10
3492 NvU8 rsvd_byte6;
3493 NvU8 rsvd_byte7;
3494 NvU8 rsvd_byte8;
3495 NvU8 rsvd_byte9;
3496 NvU8 rsvd_byte10;
3497
3498 }NVT_AUDIO_INFOFRAME;
3499
3500 // self refresh infoframe structure. See SR spec.
3501 typedef struct tagNVT_SR_INFOFRAME
3502 {
3503 NvU8 type;
3504 NvU8 version;
3505 NvU8 length;
3506
3507 NvU8 data;
3508
3509 }NVT_SR_INFOFRAME;
3510
3511 //
3512 #define NVT_AUDIO_INFOFRAME_VERSION_1 1
3513 //
3514 #define NVT_AUDIO_INFOFRAME_BYTE1_CC_MASK 0x07
3515 #define NVT_AUDIO_INFOFRAME_BYTE1_CC_SHIFT 0
3516 #define NVT_AUDIO_INFOFRAME_BYTE1_CC_REF_HEADER 0
3517 #define NVT_AUDIO_INFOFRAME_BYTE1_CC_2CH 1
3518 #define NVT_AUDIO_INFOFRAME_BYTE1_CC_DO_NOT_USE 2
3519 #define NVT_AUDIO_INFOFRAME_BYTE1_CC_4CH 3
3520 #define NVT_AUDIO_INFOFRAME_BYTE1_CC_5CH 4
3521 #define NVT_AUDIO_INFOFRAME_BYTE1_CC_6CH 5
3522 #define NVT_AUDIO_INFOFRAME_BYTE1_CC_7CH 6
3523 #define NVT_AUDIO_INFOFRAME_BYTE1_CC_8CH 7
3524 //
3525 #define NVT_AUDIO_INFOFRAME_BYTE1_RESERVED_MASK 0x08
3526 #define NVT_AUDIO_INFOFRAME_BYTE1_RESERVED_SHIFT 3
3527 //
3528 #define NVT_AUDIO_INFOFRAME_BYTE1_CT_MASK 0xF0
3529 #define NVT_AUDIO_INFOFRAME_BYTE1_CT_SHIFT 4
3530 #define NVT_AUDIO_INFOFRAME_BYTE1_CT_REF_HEADER 0
3531 #define NVT_AUDIO_INFOFRAME_BYTE1_CT_PCM 1
3532 #define NVT_AUDIO_INFOFRAME_BYTE1_CT_DO_NOT_USE 2
3533 #define NVT_AUDIO_INFOFRAME_BYTE1_CT_MPEG1 3
3534 #define NVT_AUDIO_INFOFRAME_BYTE1_CT_MP3 4
3535 #define NVT_AUDIO_INFOFRAME_BYTE1_CT_MPEG2 5
3536 #define NVT_AUDIO_INFOFRAME_BYTE1_CT_AAC 6
3537 #define NVT_AUDIO_INFOFRAME_BYTE1_CT_DTS 7
3538 #define NVT_AUDIO_INFOFRAME_BYTE1_CT_USE_CODING_EXTENSION_TYPE 15
3539 //
3540 #define NVT_AUDIO_INFOFRAME_BYTE2_SS_MASK 0x3
3541 #define NVT_AUDIO_INFOFRAME_BYTE2_SS_SHIFT 0
3542 #define NVT_AUDIO_INFOFRAME_BYTE2_SS_REF_HEADER 0
3543 #define NVT_AUDIO_INFOFRAME_BYTE2_SS_16BIT 1
3544 #define NVT_AUDIO_INFOFRAME_BYTE2_SS_20BIT 2
3545 #define NVT_AUDIO_INFOFRAME_BYTE2_SS_24BIT 3
3546 //
3547 #define NVT_AUDIO_INFOFRAME_BYTE2_SF_MASK 0x1C
3548 #define NVT_AUDIO_INFOFRAME_BYTE2_SF_SHIFT 2
3549 #define NVT_AUDIO_INFOFRAME_BYTE2_SF_HEADER 0
3550 #define NVT_AUDIO_INFOFRAME_BYTE2_SF_32KHz 1
3551 #define NVT_AUDIO_INFOFRAME_BYTE2_SF_44KHz 2
3552 #define NVT_AUDIO_INFOFRAME_BYTE2_SF_48KHz 3
3553 #define NVT_AUDIO_INFOFRAME_BYTE2_SF_88KHz 4
3554 #define NVT_AUDIO_INFOFRAME_BYTE2_SF_96KHz 5
3555 #define NVT_AUDIO_INFOFRAME_BYTE2_SF_176KHz 6
3556 #define NVT_AUDIO_INFOFRAME_BYTE2_SF_192KHz 7
3557 //
3558 #define NVT_AUDIO_INFOFRAME_BYTE2_RESERVED_MASK 0xE0
3559 #define NVT_AUDIO_INFOFRAME_BYTE2_RESERVED_SHIFT 5
3560 //
3561 #define NVT_AUDIO_INFOFRAME_BYTE3_CXT_MASK 0x1F
3562 #define NVT_AUDIO_INFOFRAME_BYTE3_CXT_SHIFT 0
3563 #define NVT_AUDIO_INFOFRAME_BYTE3_CXT_RESERVE31 31
3564 //
3565 #define NVT_AUDIO_INFOFRAME_BYTE3_RESERVED_MASK 0xE0
3566 #define NVT_AUDIO_INFOFRAME_BYTE3_RESERVED_SHIFT 5
3567 //
3568 #define NVT_AUDIO_INFOFRAME_BYTE4_CA_MASK 0xFF
3569 #define NVT_AUDIO_INFOFRAME_BYTE4_CA_SHIFT 0
3570 #define NVT_AUDIO_INFOFRAME_BYTE4_CA_FRW_FLW_RR_RL_FC_LFE_FR_FL 49
3571 //
3572 #define NVT_AUDIO_INFOFRAME_BYTE5_LFEPBL_MASK 0x03
3573 #define NVT_AUDIO_INFOFRAME_BYTE5_LFEPBL_SHIFT 0
3574 #define NVT_AUDIO_INFOFRAME_BYTE5_LFEPBL_NO_DATA 0
3575 #define NVT_AUDIO_INFOFRAME_BYTE5_LFEPBL_0DB 1
3576 #define NVT_AUDIO_INFOFRAME_BYTE5_LFEPBL_PLUS10DB 2
3577 #define NVT_AUDIO_INFOFRAME_BYTE5_LFEPBL_RESERVED03 3
3578 //
3579 #define NVT_AUDIO_INFOFRAME_BYTE5_RESERVED_MASK 0x4
3580 #define NVT_AUDIO_INFOFRAME_BYTE5_RESERVED_SHIFT 2
3581 //
3582 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_MASK 0x78
3583 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_SHIFT 3
3584 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_0dB 0
3585 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_1dB 1
3586 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_2dB 2
3587 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_3dB 3
3588 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_4dB 4
3589 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_5dB 5
3590 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_6dB 6
3591 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_7dB 7
3592 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_8dB 8
3593 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_9dB 9
3594 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_10dB 10
3595 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_11dB 11
3596 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_12dB 12
3597 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_13dB 13
3598 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_14dB 14
3599 #define NVT_AUDIO_INFOFRAME_BYTE5_LSV_15dB 15
3600 //
3601 #define NVT_AUDIO_INFOFRAME_BYTE5_DM_INH_MASK 0x80
3602 #define NVT_AUDIO_INFOFRAME_BYTE5_DM_INH_SHIFT 7
3603 #define NVT_AUDIO_INFOFRAME_BYTE5_DM_INH_PERMITTED 0
3604 #define NVT_AUDIO_INFOFRAME_BYTE5_DM_INH_PROHIBITED 1
3605 //
3606 #define NVT_AUDIO_INFOFRAME_BYTE6_RESERVED_MASK 0xFF
3607 #define NVT_AUDIO_INFOFRAME_BYTE6_RESERVED_SHIFT 0
3608 //
3609 //
3610 #define NVT_AUDIO_INFOFRAME_BYTE7_RESERVED_MASK 0xFF
3611 #define NVT_AUDIO_INFOFRAME_BYTE7_RESERVED_SHIFT 0
3612 //
3613 ///
3614 #define NVT_AUDIO_INFOFRAME_BYTE8_RESERVED_MASK 0xFF
3615 #define NVT_AUDIO_INFOFRAME_BYTE8_RESERVED_SHIFT 0
3616 //
3617 //
3618 #define NVT_AUDIO_INFOFRAME_BYTE9_RESERVED_MASK 0xFF
3619 #define NVT_AUDIO_INFOFRAME_BYTE9_RESERVED_SHIFT 0
3620 //
3621 //
3622 #define NVT_AUDIO_INFOFRAME_BYTE10_RESERVED_MASK 0xFF
3623 #define NVT_AUDIO_INFOFRAME_BYTE10_RESERVED_SHIFT 0
3624 //
3625
3626 typedef struct
3627 {
3628 // byte 1
3629 struct
3630 {
3631 NvU8 channelCount : 3;
3632 NvU8 rsvd_bits_byte1 : 1;
3633 NvU8 codingType : 4;
3634 } byte1;
3635
3636 // byte 2
3637 struct
3638 {
3639 NvU8 sampleSize : 2;
3640 NvU8 sampleRate : 3;
3641 NvU8 rsvd_bits_byte2 : 3;
3642 } byte2;
3643
3644
3645 // byte 3
3646 struct
3647 {
3648 NvU8 codingExtensionType : 5;
3649 NvU8 rsvd_bits_byte3 : 3;
3650 } byte3;
3651
3652 // byte 4
3653 NvU8 speakerPlacement;
3654
3655 // byte 5
3656 struct
3657 {
3658 NvU8 lfePlaybackLevel : 2;
3659 NvU8 rsvd_bits_byte5 : 1;
3660 NvU8 levelShift : 4;
3661 NvU8 downmixInhibit : 1;
3662 } byte5;
3663
3664 // byte 6~10
3665 NvU8 rsvd_byte6;
3666 NvU8 rsvd_byte7;
3667 NvU8 rsvd_byte8;
3668 NvU8 rsvd_byte9;
3669 NvU8 rsvd_byte10;
3670 } NVT_AUDIO_INFOFRAME_OVERRIDE;
3671
3672 typedef struct
3673 {
3674 NvU32 codingType : 5;
3675 NvU32 codingExtensionType : 6;
3676 NvU32 sampleSize : 3;
3677 NvU32 sampleRate : 4;
3678 NvU32 channelCount : 4;
3679 NvU32 speakerPlacement : 9;
3680 NvU32 downmixInhibit : 2;
3681 NvU32 lfePlaybackLevel : 3;
3682 NvU32 levelShift : 5;
3683 NvU32 Future12 : 2;
3684 NvU32 Future2x : 4;
3685 NvU32 Future3x : 4;
3686 NvU32 Future52 : 2;
3687 NvU32 Future6 : 9;
3688 NvU32 Future7 : 9;
3689 NvU32 Future8 : 9;
3690 NvU32 Future9 : 9;
3691 NvU32 Future10 : 9;
3692 } NVT_INFOFRAME_AUDIO;
3693
3694 #define NVT_AUDIO_INFOFRAME_OVERRIDE_BYTE1_CC_MASK 0x07
3695 #define NVT_AUDIO_INFOFRAME_OVERRIDE_BYTE1_CT_MASK 0x0F
3696 #define NVT_AUDIO_INFOFRAME_OVERRIDE_BYTE2_SS_MASK 0x03
3697 #define NVT_AUDIO_INFOFRAME_OVERRIDE_BYTE2_SF_MASK 0x03
3698 #define NVT_AUDIO_INFOFRAME_OVERRIDE_BYTE3_CXT_MASK 0x1F
3699 #define NVT_AUDIO_INFOFRAME_OVERRIDE_BYTE4_CA_MASK 0xFF
3700 #define NVT_AUDIO_INFOFRAME_OVERRIDE_BYTE5_LFEPBL_MASK 0x03
3701 #define NVT_AUDIO_INFOFRAME_OVERRIDE_BYTE5_LSV_MASK 0x0F
3702 #define NVT_AUDIO_INFOFRAME_OVERRIDE_BYTE5_DM_INH_MASK 0x01
3703
3704 //
3705 // HDMI 1.3a GCP, ColorDepth
3706 //
3707 #define NVT_HDMI_COLOR_DEPTH_DEFAULT 0x0
3708 #define NVT_HDMI_COLOR_DEPTH_RSVD1 0x1
3709 #define NVT_HDMI_COLOR_DEPTH_RSVD2 0x2
3710 #define NVT_HDMI_COLOR_DEPTH_RSVD3 0x3
3711 #define NVT_HDMI_COLOR_DEPTH_24 0x4
3712 #define NVT_HDMI_COLOR_DEPTH_30 0x5
3713 #define NVT_HDMI_COLOR_DEPTH_36 0x6
3714 #define NVT_HDMI_COLOR_DEPTH_48 0x7
3715 #define NVT_HDMI_COLOR_DEPTH_RSVD8 0x8
3716 #define NVT_HDMI_COLOR_DEPTH_RSVD9 0x9
3717 #define NVT_HDMI_COLOR_DEPTH_RSVD10 0xA
3718 #define NVT_HDMI_COLOR_DEPTH_RSVD11 0xB
3719 #define NVT_HDMI_COLOR_DEPTH_RSVD12 0xC
3720 #define NVT_HDMI_COLOR_DEPTH_RSVD13 0xD
3721 #define NVT_HDMI_COLOR_DEPTH_RSVD14 0xE
3722 #define NVT_HDMI_COLOR_DEPTH_RSVD15 0xF
3723
3724 // HDMI 1.3a GCP, PixelPacking Phase
3725 #define NVT_HDMI_PIXELPACKING_PHASE4 0x0
3726 #define NVT_HDMI_PIXELPACKING_PHASE1 0x1
3727 #define NVT_HDMI_PIXELPACKING_PHASE2 0x2
3728 #define NVT_HDMI_PIXELPACKING_PHASE3 0x3
3729 #define NVT_HDMI_PIXELPACKING_RSVD4 0x4
3730 #define NVT_HDMI_PIXELPACKING_RSVD5 0x5
3731 #define NVT_HDMI_PIXELPACKING_RSVD6 0x6
3732 #define NVT_HDMI_PIXELPACKING_RSVD7 0x7
3733 #define NVT_HDMI_PIXELPACKING_RSVD8 0x8
3734 #define NVT_HDMI_PIXELPACKING_RSVD9 0x9
3735 #define NVT_HDMI_PIXELPACKING_RSVD10 0xA
3736 #define NVT_HDMI_PIXELPACKING_RSVD11 0xB
3737 #define NVT_HDMI_PIXELPACKING_RSVD12 0xC
3738 #define NVT_HDMI_PIXELPACKING_RSVD13 0xD
3739 #define NVT_HDMI_PIXELPACKING_RSVD14 0xE
3740 #define NVT_HDMI_PIXELPACKING_RSVD15 0xF
3741
3742 #define NVT_HDMI_RESET_DEFAULT_PIXELPACKING_PHASE 0x0
3743 #define NVT_HDMI_SET_DEFAULT_PIXELPACKING_PHASE 0x1
3744
3745 #define NVT_HDMI_GCP_SB1_CD_SHIFT 0
3746 #define NVT_HDMI_GCP_SB1_PP_SHIFT 4
3747
3748
3749 // Vendor specific info frame (HDMI 1.4 specific)
3750 typedef struct tagNVT_VENDOR_SPECIFIC_INFOFRAME_PAYLOAD
3751 {
3752 // byte 1~5
3753 NvU8 byte1;
3754 NvU8 byte2;
3755 NvU8 byte3;
3756 NvU8 byte4;
3757 NvU8 byte5;
3758 NvU8 optionalBytes[22];
3759 }NVT_VENDOR_SPECIFIC_INFOFRAME_PAYLOAD;
3760 typedef struct tagNVT_VENDOR_SPECIFIC_INFOFRAME
3761 {
3762 NVT_INFOFRAME_HEADER Header;
3763 NVT_VENDOR_SPECIFIC_INFOFRAME_PAYLOAD Data;
3764 } NVT_VENDOR_SPECIFIC_INFOFRAME;
3765 //
3766 #define NVT_HDMI_VS_INFOFRAME_VERSION_1 1
3767
3768 #define NVT_HDMI_VS_HB0_MASK 0xFF
3769 #define NVT_HDMI_VS_HB0_SHIFT 0x00
3770 #define NVT_HDMI_VS_HB0_VALUE 0x01
3771
3772 #define NVT_HDMI_VS_HB1_MASK 0xFF
3773 #define NVT_HDMI_VS_HB1_SHIFT 0x00
3774 #define NVT_HDMI_VS_HB1_VALUE 0x01
3775
3776 #define NVT_HDMI_VS_HB2_MASK 0xFF
3777 #define NVT_HDMI_VS_HB2_SHIFT 0x00
3778 #define NVT_HDMI_VS_HB2_VALUE 0x06
3779
3780 #define NVT_HDMI_VS_BYTE1_OUI_MASK 0xff
3781 #define NVT_HDMI_VS_BYTE1_OUI_SHIFT 0x00
3782 #define NVT_HDMI_VS_BYTE1_OUI_VER_1_4 0x03
3783 #define NVT_HDMI_VS_BYTE1_OUI_VER_2_0 0xD8
3784
3785 #define NVT_HDMI_VS_BYTE2_OUI_MASK 0xff
3786 #define NVT_HDMI_VS_BYTE2_OUI_SHIFT 0x00
3787 #define NVT_HDMI_VS_BYTE2_OUI_VER_1_4 0x0C
3788 #define NVT_HDMI_VS_BYTE2_OUI_VER_2_0 0x5D
3789
3790 #define NVT_HDMI_VS_BYTE3_OUI_MASK 0xff
3791 #define NVT_HDMI_VS_BYTE3_OUI_SHIFT 0x00
3792 #define NVT_HDMI_VS_BYTE3_OUI_VER_1_4 0x00
3793 #define NVT_HDMI_VS_BYTE3_OUI_VER_2_0 0xC4
3794
3795 //
3796 #define NVT_HDMI_VS_BYTE4_RSVD_MASK 0x1f
3797 #define NVT_HDMI_VS_BYTE4_RSVD_SHIFT 0x00
3798 #define NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_MASK 0xe0
3799 #define NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_SHIFT 0x05
3800 #define NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_NONE 0x00
3801 #define NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_EXT 0x01
3802 #define NVT_HDMI_VS_BYTE4_HDMI_VID_FMT_3D 0x02
3803 // 0x03-0x07 reserved
3804 //
3805 #define NVT_HDMI_VS_BYTE5_HDMI_VIC_MASK 0xff // HDMI_VID_FMT = HDMI_VID_FMT_EXT
3806 #define NVT_HDMI_VS_BYTE5_HDMI_VIC_SHIFT 0x00
3807 #define NVT_HDMI_VS_BYTE5_HDMI_VIC_NA 0xfe
3808 #define NVT_HDMI_VS_BYTE5_HDMI_VIC_RSVD 0x00
3809 #define NVT_HDMI_VS_BYTE5_HDMI_VIC_4Kx2Kx30Hz 0x01
3810 #define NVT_HDMI_VS_BYTE5_HDMI_VIC_4Kx2Kx25Hz 0x02
3811 #define NVT_HDMI_VS_BYTE5_HDMI_VIC_4Kx2Kx24Hz 0x03
3812 #define NVT_HDMI_VS_BYTE5_HDMI_VIC_4Kx2Kx24Hz_SMPTE 0x04
3813 // 0x05-0xff reserved
3814 //
3815 #define NVT_HDMI_VS_BYTE5_HDMI_RSVD_MASK 0x07 // HDMI_VID_FMT = HDMI_VID_FMT_3D
3816 #define NVT_HDMI_VS_BYTE5_HDMI_RSVD_SHIFT 0x00
3817 #define NVT_HDMI_VS_BYTE5_3D_META_PRESENT_MASK 0x01
3818 #define NVT_HDMI_VS_BYTE5_3D_META_PRESENT_SHIFT 0x03
3819 #define NVT_HDMI_VS_BYTE5_HDMI_META_PRESENT_NOTPRES 0x00 // HDMI Metadata is not present
3820 #define NVT_HDMI_VS_BYTE5_HDMI_META_PRESENT_PRES 0x01 // HDMI Metadata is present
3821 #define NVT_HDMI_VS_BYTE5_ALLM_MODE_MASK 0x02 // ALLM is field of length 1 bit at Bit Number 1
3822 #define NVT_HDMI_VS_BYTE5_ALLM_MODE_DIS 0x00
3823 #define NVT_HDMI_VS_BYTE5_ALLM_MODE_EN 0x01
3824 #define NVT_HDMI_VS_BYTE5_ALLM_MODE_SHIFT 0x01 // ALLM is byte5 bit position 1, so shift 1 bit
3825 #define NVT_HDMI_VS_BYTE5_HDMI_3DS_MASK 0xf0
3826 #define NVT_HDMI_VS_BYTE5_HDMI_3DS_SHIFT 0x04
3827 #define NVT_HDMI_VS_BYTE5_HDMI_3DS_NA 0xfe
3828 #define NVT_HDMI_VS_BYTE5_HDMI_3DS_FRAMEPACK 0x00
3829 #define NVT_HDMI_VS_BYTE5_HDMI_3DS_FIELD_ALT 0x01
3830 #define NVT_HDMI_VS_BYTE5_HDMI_3DS_LINE_ALT 0x02
3831 #define NVT_HDMI_VS_BYTE5_HDMI_3DS_SIDEBYSIDEFULL 0x03
3832 #define NVT_HDMI_VS_BYTE5_HDMI_3DS_LDEPTH 0x04
3833 #define NVT_HDMI_VS_BYTE5_HDMI_3DS_LDEPTHGFX 0x05
3834 #define NVT_HDMI_VS_BYTE5_HDMI_3DS_TOPBOTTOM 0x06
3835 //0x06-0x07 reserved
3836 #define NVT_HDMI_VS_BYTE5_HDMI_3DS_SIDEBYSIDEHALF 0x08
3837 //0x09-0x0f reserved
3838 //
3839 // bytes 6-21 are optional depending on the 3D mode & the presence/abcense of metadata
3840 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_RSVD_MASK 0x0f // HDMI_VID_FMT = HDMI_VID_FMT_3D
3841 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_RSVD_SHIFT 0x00
3842 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_MASK 0xf0
3843 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SHIFT 0x04
3844 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_NA 0xfe // Extended data is not applicable
3845 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SSH 0x01 // Horizontal subsampling 1.4a defines a single subsampling vs 1.4s 4.
3846 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SSH_H_OL_OR 0x00 // Horizontal subsampling Odd Left Odd Right
3847 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SSH_H_OL_ER 0x01 // Horizontal subsampling Odd Left Even Right
3848 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SSH_H_EL_OR 0x02 // Horizontal subsampling Even Left Odd Right
3849 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SSH_H_EL_ER 0x03 // Horizontal subsampling Even Left Even Right
3850 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SSH_Q_OL_OR 0x04 // Quincunx matrix Odd Left Odd Right
3851 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SSH_Q_OL_ER 0x05 // Quincunx matrix Odd Left Even Right
3852 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SSH_Q_EL_OR 0x06 // Quincunx matrix Even Left Odd Right
3853 #define NVT_HDMI_VS_BYTE_OPT1_HDMI_3DEX_SSH_Q_EL_ER 0x07 // Quincunx matrix Even Left Even Right
3854 //0x08-0x0f reserved
3855 #define NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_MASK 0xf0 // HDMI_VID_FMT = HDMI_VID_FMT_3D; HDMI_3D_META_PRESENT = 1
3856 #define NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_SHIFT 0x04 //
3857 #define NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_NONE 0x00 // length of no metadata
3858 #define NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_LEN_PARALLAX 0x08 // length of paralax data
3859
3860 #define NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_MASK 0x0f // HDMI_VID_FMT = HDMI_VID_FMT_3D
3861 #define NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_SHIFT 0x00
3862 #define NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_PARALLAX 0x00 // parallax metadata in the frame
3863 #define NVT_HDMI_VS_BYTE_OPT2_HDMI_METADATA_TYPE_NA 0xfe // no metadata in the frame
3864
3865 #define NVT_HDMI_VS_BYTENv_RSVD_MASK 0xff // if last byte of infoframe, will move depending on HDMI_VID_FMT, 3D metadata present, 3D_Metadata type.
3866 #define NVT_HDMI_VS_BYTENv_RSVD_SHIFT 0x00
3867 #define NVT_HDMI_VS_BYTENv_RSVD 0x00
3868
3869
3870 // Extended Metadata Packet (HDMI 2.1 specific)
3871 typedef struct tagNVT_EXTENDED_METADATA_PACKET_INFOFRAME_PAYLOAD
3872 {
3873 // byte 1~7
3874 NvU8 byte1;
3875 NvU8 byte2;
3876 NvU8 byte3;
3877 NvU8 byte4;
3878 NvU8 byte5;
3879 NvU8 byte6;
3880 NvU8 byte7;
3881
3882 NvU8 metadataBytes[21];
3883 } NVT_EXTENDED_METADATA_PACKET_INFOFRAME_PAYLOAD;
3884
3885 typedef struct tagNVT_EXTENDED_METADATA_PACKET_INFOFRAME
3886 {
3887 NVT_EXTENDED_METADATA_PACKET_INFOFRAME_HEADER Header;
3888 NVT_EXTENDED_METADATA_PACKET_INFOFRAME_PAYLOAD Data;
3889 } NVT_EXTENDED_METADATA_PACKET_INFOFRAME;
3890
3891 #define NVT_HDMI_EMP_BYTE1_RSVD_MASK 0x01
3892 #define NVT_HDMI_EMP_BYTE1_RSVD_SHIFT 0
3893
3894 #define NVT_HDMI_EMP_BYTE1_SYNC_MASK 0x02
3895 #define NVT_HDMI_EMP_BYTE1_SYNC_SHIFT 1
3896 #define NVT_HDMI_EMP_BYTE1_SYNC_DISABLE 0
3897 #define NVT_HDMI_EMP_BYTE1_SYNC_ENABLE 1
3898
3899 #define NVT_HDMI_EMP_BYTE1_VFR_MASK 0x04
3900 #define NVT_HDMI_EMP_BYTE1_VFR_SHIFT 2
3901 #define NVT_HDMI_EMP_BYTE1_VFR_DISABLE 0
3902 #define NVT_HDMI_EMP_BYTE1_VFR_ENABLE 1
3903
3904 #define NVT_HDMI_EMP_BYTE1_AFR_MASK 0x08
3905 #define NVT_HDMI_EMP_BYTE1_AFR_SHIFT 3
3906 #define NVT_HDMI_EMP_BYTE1_AFR_DISABLE 0
3907 #define NVT_HDMI_EMP_BYTE1_AFR_ENABLE 1
3908
3909 #define NVT_HDMI_EMP_BYTE1_DS_TYPE_MASK 0x30
3910 #define NVT_HDMI_EMP_BYTE1_DS_TYPE_SHIFT 4
3911 #define NVT_HDMI_EMP_BYTE1_DS_TYPE_PERIODIC_PSEUDO_STATIC 0
3912 #define NVT_HDMI_EMP_BYTE1_DS_TYPE_PERIODIC_DYNAMIC 1
3913 #define NVT_HDMI_EMP_BYTE1_DS_TYPE_UNIQUE 2
3914 #define NVT_HDMI_EMP_BYTE1_DS_TYPE_RSVD 3
3915
3916 #define NVT_HDMI_EMP_BYTE1_END_MASK 0x40
3917 #define NVT_HDMI_EMP_BYTE1_END_SHIFT 6
3918 #define NVT_HDMI_EMP_BYTE1_END_DISABLE 0
3919 #define NVT_HDMI_EMP_BYTE1_END_ENABLE 1
3920
3921 #define NVT_HDMI_EMP_BYTE1_NEW_MASK 0x80
3922 #define NVT_HDMI_EMP_BYTE1_NEW_SHIFT 7
3923 #define NVT_HDMI_EMP_BYTE1_NEW_DISABLE 0
3924 #define NVT_HDMI_EMP_BYTE1_NEW_ENABLE 1
3925
3926 #define NVT_HDMI_EMP_BYTE2_RSVD_MASK 0xff
3927 #define NVT_HDMI_EMP_BYTE2_RSVD_SHIFT 0
3928
3929 #define NVT_HDMI_EMP_BYTE3_ORGANIZATION_ID_MASK 0xff
3930 #define NVT_HDMI_EMP_BYTE3_ORGANIZATION_ID_SHIFT 0
3931 #define NVT_HDMI_EMP_BYTE3_ORGANIZATION_ID_VENDOR_SPECIFIC 0
3932 #define NVT_HDMI_EMP_BYTE3_ORGANIZATION_ID_SPEC_DEFINED 1
3933 #define NVT_HDMI_EMP_BYTE3_ORGANIZATION_ID_CTA_DEFINED 2
3934 #define NVT_HDMI_EMP_BYTE3_ORGANIZATION_ID_VESA_DEFINED 3
3935
3936 #define NVT_HDMI_EMP_BYTE4_DATA_SET_TAG_MSB_MASK 0xff
3937 #define NVT_HDMI_EMP_BYTE4_DATA_SET_TAG_MSB_SHIFT 0
3938
3939 #define NVT_HDMI_EMP_BYTE5_DATA_SET_TAG_LSB_MASK 0xff
3940 #define NVT_HDMI_EMP_BYTE5_DATA_SET_TAG_LSB_SHIFT 0
3941
3942 #define NVT_HDMI_EMP_BYTE6_DATA_SET_LENGTH_MSB_MASK 0xff
3943 #define NVT_HDMI_EMP_BYTE6_DATA_SET_LENGTH_MSB_SHIFT 0
3944
3945 #define NVT_HDMI_EMP_BYTE7_DATA_SET_LENGTH_LSB_MASK 0xff
3946 #define NVT_HDMI_EMP_BYTE7_DATA_SET_LENGTH_LSB_SHIFT 0
3947
3948 #define NVT_HDMI_EMP_BYTE8_MD0_VRR_EN_MASK 0x01
3949 #define NVT_HDMI_EMP_BYTE8_MD0_VRR_EN_SHIFT 0
3950 #define NVT_HDMI_EMP_BYTE8_MD0_VRR_EN_DISABLE 0
3951 #define NVT_HDMI_EMP_BYTE8_MD0_VRR_EN_ENABLE 1
3952 #define NVT_HDMI_EMP_BYTE8_MD0_M_CONST_MASK 0x02
3953 #define NVT_HDMI_EMP_BYTE8_MD0_M_CONST_SHIFT 1
3954 #define NVT_HDMI_EMP_BYTE8_MD0_QMS_EN_MASK 0x04
3955 #define NVT_HDMI_EMP_BYTE8_MD0_QMS_EN_SHIFT 2
3956 #define NVT_HDMI_EMP_BYTE8_MD0_QMS_EN_DISABLE 0
3957 #define NVT_HDMI_EMP_BYTE8_MD0_QMS_EN_ENABLE 1
3958
3959 #define NVT_HDMI_EMP_BYTE8_MD1_BASE_VFRONT_MASK 0xff
3960 #define NVT_HDMI_EMP_BYTE8_MD1_BASE_VFRONT_SHIFT 0
3961
3962 #define NVT_HDMI_EMP_BYTE8_MD2_RB_MASK 0x04
3963 #define NVT_HDMI_EMP_BYTE8_MD2_RB_SHIFT 2
3964 #define NVT_HDMI_EMP_BYTE8_MD2_RB_DISABLE 0
3965 #define NVT_HDMI_EMP_BYTE8_MD2_RB_ENABLE 1
3966
3967 #define NVT_HDMI_EMP_BYTE8_MD2_NEXT_TFR_MASK 0xf8
3968 #define NVT_HDMI_EMP_BYTE8_MD2_NEXT_TFR_SHIFT 3
3969
3970 #define NVT_HDMI_EMP_BYTE8_MD2_BASE_RR_MSB_MASK 0x03
3971 #define NVT_HDMI_EMP_BYTE8_MD2_BASE_RR_MSB_SHIFT 0
3972
3973 #define NVT_HDMI_EMP_BYTE8_MD3_BASE_RR_LSB_MASK 0xff
3974 #define NVT_HDMI_EMP_BYTE8_MD3_BASE_RR_LSB_SHIFT 0
3975
3976 #define NVT_DP_ADAPTIVE_SYNC_SDP_PACKET_TYPE 0x22
3977 #define NVT_DP_ADAPTIVE_SYNC_SDP_VERSION 0x2
3978 #define NVT_DP_ADAPTIVE_SYNC_SDP_LENGTH 0x9
3979 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_VARIABLE_FRAME_RATE_MASK 0x3
3980 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_VARIABLE_FRAME_RATE_SHIFT 0
3981 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_VARIABLE_FRAME_RATE_AVT_VARIABLE 0
3982 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_VARIABLE_FRAME_RATE_AVT_FIXED 1
3983 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_VARIABLE_FRAME_RATE_FAVT_TARGET_NOT_REACHED 2
3984 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_VARIABLE_FRAME_RATE_FAVT_TARGET_REACHED 3
3985
3986 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_DISABLE_PR_ACTIVE_MASK 0x4
3987 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_DISABLE_PR_ACTIVE_SHIFT 2
3988 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_DISABLE_PR_ACTIVE_SOURCE_SINK_SYNC_ENABLED 0
3989 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_DISABLE_PR_ACTIVE_SOURCE_SINK_SYNC_DISABLED 1
3990
3991 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_DISABLE_PR_ACTIVE_RFB_UPDATE_MASK 0x8
3992 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_DISABLE_PR_ACTIVE_RFB_UPDATE_SHIFT 3
3993 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_DISABLE_PR_ACTIVE_RFB_UPDATE_NO_UPDATE 0
3994 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_DISABLE_PR_ACTIVE_RFB_UPDATE_UPDATE 1
3995
3996 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_RSVD_MASK 0xf0
3997 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB0_RSVD_SHIFT 4
3998
3999 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB1_MIN_VTOTAL_LSB_MASK 0xff
4000 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB1_MIN_VTOTAL_LSB_SHIFT 0
4001
4002 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB2_MIN_VTOTAL_MSB_MASK 0xff
4003 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB2_MIN_VTOTAL_MSB_SHIFT 0
4004
4005 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB3_TARGET_RR_LSB_MASK 0xff
4006 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB3_TARGET_RR_LSB_SHIFT 0
4007
4008 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_TARGET_RR_MSB_MASK 0x01
4009 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_TARGET_RR_MSB_SHIFT 0
4010
4011 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_RSVD_MASK 0x1c
4012 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_RSVD_SHIFT 2
4013
4014 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_TARGET_RR_DIVIDER_MASK 0x20
4015 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_TARGET_RR_DIVIDER_SHIFT 5
4016 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_TARGET_RR_DIVIDER_DISABLE 0
4017 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_TARGET_RR_DIVIDER_ENABLE 1
4018
4019 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_SUCCESSIVE_FRAME_INC_MASK 0x40
4020 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_SUCCESSIVE_FRAME_INC_SHIFT 6
4021 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_SUCCESSIVE_FRAME_INC_DISABLE 0
4022 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_SUCCESSIVE_FRAME_INC_ENABLE 1
4023
4024 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_SUCCESSIVE_FRAME_DEC_MASK 0x80
4025 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_SUCCESSIVE_FRAME_DEC_SHIFT 7
4026 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_SUCCESSIVE_FRAME_DEC_DISABLE 0
4027 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB4_SUCCESSIVE_FRAME_DEC_ENABLE 1
4028
4029 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB5_DURATION_INCREASE_CONSTRAINT_LSB_MASK 0xff
4030 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB5_DURATION_INCREASE_CONSTRAINT_LSB_SHIFT 0
4031
4032 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB6_DURATION_INCREASE_CONSTRAINT_MSB_MASK 0xff
4033 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB6_DURATION_INCREASE_CONSTRAINT_MSB_SHIFT 0
4034
4035 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB7_PR_COASTING_VTOTAL_LSB_MASK 0xff
4036 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB7_PR_COASTING_VTOTAL_LSB_SHIFT 0
4037
4038 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB8_PR_COASTING_VTOTAL_MSB_MASK 0xff
4039 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB8_PR_COASTING_VTOTAL_MSB_SHIFT 0
4040
4041 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB1_MIN_VTOTAL_BYTE2_MASK 0xff
4042 #define NVT_DP_ADAPTIVE_SYNC_SDP_DB1_MIN_VTOTAL_BYTE2_SHIFT 0
4043
4044 typedef struct tagNVT_ADAPTIVE_SYNC_SDP_HEADER
4045 {
4046 NvU8 hb0;
4047 NvU8 type;
4048 NvU8 version;
4049 NvU8 length;
4050 }NVT_ADAPTIVE_SYNC_SDP_HEADER;
4051
4052 typedef struct tagNVT_ADAPTIVE_SYNC_SDP_PAYLOAD
4053 {
4054 NvU8 db0; // operatingMode
4055 NvU8 db1; // minVTotalLSB
4056 NvU8 db2; // minVTotalMSB
4057 NvU8 db3; // targetRefreshRateLSB
4058 NvU8 db4; // targetRefreshRateMSB, rsvd, targetRRDivider, frameInc/Dec Config
4059 NvU8 db5; // frameDurationIncMs
4060 NvU8 db6; // frameDurationDecreaseMs
4061 NvU8 db7; // coastingVTotalPrLSB
4062 NvU8 db8; // coastingVTotalPrMSB
4063
4064 NvU8 rsvd[23];
4065 }NVT_ADAPTIVE_SYNC_SDP_PAYLOAD;
4066
4067 typedef struct tagADAPTIVE_SYNC_SDP
4068 {
4069 NVT_ADAPTIVE_SYNC_SDP_HEADER header;
4070 NVT_ADAPTIVE_SYNC_SDP_PAYLOAD payload;
4071 }NVT_ADAPTIVE_SYNC_SDP;
4072
4073 // the Vendor-Specific-Data-Block header
4074 typedef struct tagNVT_CEA861_VSDB_HEADER
4075 {
4076 // byte 0
4077 NvU32 length : 5;
4078 NvU32 vendorSpecificTag : 3;
4079 // byte 1-3
4080 NvU32 ieee_id : 24;
4081
4082 } NVT_CEA861_VSDB_HEADER;
4083
4084 // HDMI LLC Vendor-Specific data block
4085 // from HDMI 1.4 spec (superset of VSDB from HDMI 1.3a spec)
4086 typedef struct tagNVT_CEA861_LATENCY
4087 {
4088 NvU8 Video_Latency;
4089 NvU8 Audio_Latency;
4090
4091 } NVT_CEA861_LATENCY;
4092
4093 typedef struct tagNVT_HDMI_VIDEO
4094 {
4095 NvU8 Rsvd_1 : 3;
4096 NvU8 ImageSize : 2;
4097 NvU8 ThreeD_Multi_Present : 2;
4098 NvU8 ThreeD_Present : 1;
4099 NvU8 HDMI_3D_Len : 5;
4100 NvU8 HDMI_VIC_Len : 3;
4101 } NVT_HDMI_VIDEO;
4102
4103 typedef struct tagNVT_HDMI_VIC_LIST
4104 {
4105 NvU8 HDMI_VIC[1]; // note: list length is actually specified in HDMI_VIC_Len
4106 } NVT_HDMI_VIC_LIST;
4107
4108 typedef struct tagNVT_3D_STRUCT_ALL
4109 {
4110 NvU8 ThreeDStructALL0_FramePacking : 1;
4111 NvU8 ThreeDStructALL1_FieldAlt : 1;
4112 NvU8 ThreeDStructALL2_LineAlt : 1;
4113 NvU8 ThreeDStructALL3_SSFull : 1;
4114 NvU8 ThreeDStructALL4_LDepth : 1;
4115 NvU8 ThreeDStructALL5_LDepthGFX : 1;
4116 NvU8 ThreeDStructALL6_TopBottom : 1;
4117 NvU8 ThreeDStructALL7 : 1;
4118 NvU8 ThreeDStructALL8_SSHalf : 1;
4119 NvU8 Rsvd_1 : 7;
4120 } NVT_3D_STRUCT_ALL;
4121
4122 typedef struct tagNVT_3D_MULTI_LIST
4123 {
4124 NvU8 ThreeD_Structure : 4;
4125 NvU8 TwoD_VIC_order : 4;
4126 NvU8 Rsvd_2 : 4;
4127 NvU8 ThreeD_Detail : 4;
4128 } NVT_3D_MULTI_LIST;
4129
4130 #define NVT_3D_DETAILS_ALL 0x00
4131 #define NVT_3D_DETAILS_ALL_HORIZONTAL 0x01
4132 #define NVT_3D_DETAILS_HORIZONTAL_ODD_LEFT_ODD_RIGHT 0x02
4133 #define NVT_3D_DETAILS_HORIZONTAL_ODD_LEFT_EVEN_RIGHT 0x03
4134 #define NVT_3D_DETAILS_HORIZONTAL_EVEN_LEFT_ODD_RIGHT 0x04
4135 #define NVT_3D_DETAILS_HORIZONTAL_EVEN_LEFT_EVEN_RIGHT 0x05
4136 #define NVT_3D_DETAILS_ALL_QUINCUNX 0x06
4137 #define NVT_3D_DETAILS_QUINCUNX_ODD_LEFT_ODD_RIGHT 0x07
4138 #define NVT_3D_DETAILS_QUINCUNX_ODD_LEFT_EVEN_RIGHT 0x08
4139 #define NVT_3D_DETAILS_QUINCUNX_EVEN_LEFT_ODD_RIGHT 0x09
4140 #define NVT_3D_DETAILS_QUINCUNX_EVEN_LEFT_EVEN_RIGHT 0x0a
4141
4142 typedef struct tagNVT_HDMI_LLC_VSDB_PAYLOAD
4143 {
4144 // 1st byte
4145 NvU8 B : 4;
4146 NvU8 A : 4;
4147 // 2nd byte
4148 NvU8 D : 4;
4149 NvU8 C : 4;
4150 // 3rd byte
4151 NvU8 DVI_Dual : 1;
4152 NvU8 Rsvd_3 : 2;
4153 NvU8 DC_Y444 : 1;
4154 NvU8 DC_30bit : 1;
4155 NvU8 DC_36bit : 1;
4156 NvU8 DC_48bit : 1;
4157 NvU8 Supports_AI : 1;
4158 // 4th byte
4159 NvU8 Max_TMDS_Clock;
4160 // 5th byte
4161 NvU8 CNC0 : 1;
4162 NvU8 CNC1 : 1;
4163 NvU8 CNC2 : 1;
4164 NvU8 CNC3 : 1;
4165 NvU8 Rsvd_5 : 1;
4166 NvU8 HDMI_Video_present : 1;
4167 NvU8 I_Latency_Fields_Present : 1;
4168 NvU8 Latency_Fields_Present : 1;
4169
4170 // the rest of the frame may contain optional data as defined
4171 // in the NVT_CEA861_LATENCY, HDMI_VIDEO, HDMI_VIC, NVT_3D_STRUCT_ALL & 3D_MULTI_LIST structures
4172 // and as specified by the corresponding control bits
4173 NvU8 Data[NVT_CEA861_VSDB_PAYLOAD_MAX_LENGTH - 5];
4174
4175 } NVT_HDMI_LLC_VSDB_PAYLOAD;
4176
4177 // HDMI LLC Vendor Specific Data Block
4178 typedef struct tagNVT_HDMI_LLC_DATA
4179 {
4180 NVT_CEA861_VSDB_HEADER header;
4181 NVT_HDMI_LLC_VSDB_PAYLOAD payload;
4182 } NVT_HDMI_LLC_DATA;
4183
4184 typedef struct tagNVT_NVDA_VSDB_PAYLOAD
4185 {
4186 NvU8 opcode; // Nvidia specific opcode - please refer to VRR monitor spec v17
4187 NvU8 vrrMinRefreshRate; // Minimum refresh rate supported by this monitor
4188 } NVT_NVDA_VSDB_PAYLOAD;
4189
4190 // NVIDIA Vendor Specific Data Block
4191 typedef struct tagNVT_NVDA_VSDB_DATA
4192 {
4193 NVT_CEA861_VSDB_HEADER header;
4194 NVT_NVDA_VSDB_PAYLOAD payload;
4195 } NVT_NVDA_VSDB_DATA;
4196
4197 typedef struct _NVT_MSFT_VSDB_PAYLOAD
4198 {
4199 NvU8 version;
4200 NvU8 primaryUseCase : 5;
4201 NvU8 thirdPartyUsage : 1;
4202 NvU8 desktopUsage : 1;
4203 NvU8 reserved : 1;
4204 NvU8 containerId[MSFT_VSDB_CONTAINER_ID_SIZE];
4205 } NVT_MSFT_VSDB_PAYLOAD;
4206
4207 typedef struct _NVT_MSFT_VSDB_DATA
4208 {
4209 NVT_CEA861_VSDB_HEADER header;
4210 NVT_MSFT_VSDB_PAYLOAD payload;
4211 } NVT_MSFT_VSDB_DATA;
4212
4213 #define NVT_MSFT_VSDB_BLOCK_SIZE (sizeof(NVT_MSFT_VSDB_DATA))
4214
4215 typedef struct tagNVT_HDMI_FORUM_VSDB_PAYLOAD
4216 {
4217 // first byte
4218 NvU8 Version;
4219 // second byte
4220 NvU8 Max_TMDS_Character_Rate;
4221 // third byte
4222 NvU8 ThreeD_Osd_Disparity : 1;
4223 NvU8 Dual_View : 1;
4224 NvU8 Independent_View : 1;
4225 NvU8 Lte_340mcsc_Scramble : 1;
4226 NvU8 CCBPCI : 1;
4227 NvU8 CABLE_STATUS : 1;
4228 NvU8 RR_Capable : 1;
4229 NvU8 SCDC_Present : 1;
4230 // fourth byte
4231 NvU8 DC_30bit_420 : 1;
4232 NvU8 DC_36bit_420 : 1;
4233 NvU8 DC_48bit_420 : 1;
4234 NvU8 UHD_VIC : 1;
4235 NvU8 Max_FRL_Rate : 4;
4236 // fifth byte
4237 NvU8 FAPA_start_location : 1;
4238 NvU8 ALLM : 1;
4239 NvU8 FVA : 1;
4240 NvU8 CNMVRR : 1;
4241 NvU8 CinemaVRR : 1;
4242 NvU8 M_delta : 1;
4243 NvU8 QMS : 1;
4244 NvU8 FAPA_End_Extended : 1;
4245
4246 // sixth byte
4247 NvU8 VRR_min : 6;
4248 NvU8 VRR_max_high : 2;
4249 // seventh byte
4250 NvU8 VRR_max_low : 8;
4251 // eighth byte
4252 NvU8 DSC_10bpc : 1;
4253 NvU8 DSC_12bpc : 1;
4254 NvU8 DSC_16bpc : 1;
4255 NvU8 DSC_All_bpp : 1;
4256 NvU8 QMS_TFR_min : 1;
4257 NvU8 QMS_TFR_max : 1;
4258 NvU8 DSC_Native_420 : 1;
4259 NvU8 DSC_1p2 : 1;
4260 // ninth byte
4261 NvU8 DSC_MaxSlices : 4;
4262 NvU8 DSC_Max_FRL_Rate : 4;
4263 // tenth byte
4264 NvU8 DSC_totalChunkKBytes : 6;
4265 NvU8 Rsvd_4 : 2;
4266 } NVT_HDMI_FORUM_VSDB_PAYLOAD;
4267
4268 // HDMI Forum Vendor Specific Data Block
4269 typedef struct tagNVT_HDMI_FORUM_DATA
4270 {
4271 NVT_CEA861_VSDB_HEADER header;
4272 NVT_HDMI_FORUM_VSDB_PAYLOAD payload;
4273 } NVT_HDMI_FORUM_DATA;
4274
4275 //
4276 //
4277 // Video Capability Data Block (VCDB)
4278 typedef struct _NV_ESC_MONITOR_CAPS_VCDB
4279 {
4280 NvU8 quantizationRangeYcc : 1;
4281 NvU8 quantizationRangeRgb : 1;
4282 NvU8 scanInfoPreferredVideoFormat : 2;
4283 NvU8 scanInfoITVideoFormats : 2;
4284 NvU8 scanInfoCEVideoFormats : 2;
4285 } NVT_HDMI_VCDB_DATA;
4286
4287 //
4288 //
4289 //***********************************************************
4290 // Dynamic Range and Mastering Infoframe (HDR)
4291 //***********************************************************
4292 //
4293 typedef struct tagNVT_HDR_INFOFRAME_MASTERING_DATA
4294 {
4295 NvU16 displayPrimary_x0; //!< x coordinate of color primary 0 (e.g. Red) of mastering display ([0x0000-0xC350] = [0.0 - 1.0])
4296 NvU16 displayPrimary_y0; //!< y coordinate of color primary 0 (e.g. Red) of mastering display ([0x0000-0xC350] = [0.0 - 1.0])
4297
4298 NvU16 displayPrimary_x1; //!< x coordinate of color primary 1 (e.g. Green) of mastering display ([0x0000-0xC350] = [0.0 - 1.0])
4299 NvU16 displayPrimary_y1; //!< y coordinate of color primary 1 (e.g. Green) of mastering display ([0x0000-0xC350] = [0.0 - 1.0])
4300
4301 NvU16 displayPrimary_x2; //!< x coordinate of color primary 2 (e.g. Blue) of mastering display ([0x0000-0xC350] = [0.0 - 1.0])
4302 NvU16 displayPrimary_y2; //!< y coordinate of color primary 2 (e.g. Blue) of mastering display ([0x0000-0xC350] = [0.0 - 1.0])
4303
4304 NvU16 displayWhitePoint_x; //!< x coordinate of white point of mastering display ([0x0000-0xC350] = [0.0 - 1.0])
4305 NvU16 displayWhitePoint_y; //!< y coordinate of white point of mastering display ([0x0000-0xC350] = [0.0 - 1.0])
4306
4307 NvU16 max_display_mastering_luminance; //!< Maximum display mastering luminance ([0x0001-0xFFFF] = [1.0 - 65535.0] cd/m^2)
4308 NvU16 min_display_mastering_luminance; //!< Minimum display mastering luminance ([0x0001-0xFFFF] = [1.0 - 6.55350] cd/m^2)
4309
4310 NvU16 max_content_light_level; //!< Maximum Content Light level (MaxCLL) ([0x0001-0xFFFF] = [1.0 - 65535.0] cd/m^2)
4311 NvU16 max_frame_average_light_level; //!< Maximum Frame-Average Light Level (MaxFALL) ([0x0001-0xFFFF] = [1.0 - 65535.0] cd/m^2)
4312 } NVT_HDR_INFOFRAME_MASTERING_DATA;
4313
4314 #define NVT_CEA861_HDR_INFOFRAME_EOTF_SDR_GAMMA 0 //SDR Luminance Range
4315 #define NVT_CEA861_HDR_INFOFRAME_EOTF_HDR_GAMMA 1 //HDR Luminance Range
4316 #define NVT_CEA861_HDR_INFOFRAME_EOTF_ST2084 2
4317 #define NVT_CEA861_HDR_INFOFRAME_EOTF_Future 3
4318 #define NVT_CEA861_STATIC_METADATA_TYPE1_PRIMARY_COLOR_NORMALIZE_FACTOR 0xC350 // Per CEA-861.3 spec
4319
4320 typedef struct tagNVT_HDR_INFOFRAME_PAYLOAD
4321 {
4322 //byte 1
4323 NvU8 eotf : 3;
4324 NvU8 f13_17 : 5; // These bits are reserved for future use
4325 //byte 2
4326 NvU8 static_metadata_desc_id : 3;
4327 NvU8 f23_27 : 5; // These bits are reserved for future use
4328
4329 NVT_HDR_INFOFRAME_MASTERING_DATA type1;
4330 } NVT_HDR_INFOFRAME_PAYLOAD;
4331
4332 #pragma pack(1)
4333 typedef struct tagNVT_HDR_INFOFRAME
4334 {
4335 NVT_INFOFRAME_HEADER header;
4336 NVT_HDR_INFOFRAME_PAYLOAD payload;
4337 } NVT_HDR_INFOFRAME;
4338 #pragma pack()
4339
4340 //
4341 //
4342 //***********************************************************
4343 // Gamut Metadata Range and Vertices structures
4344 //***********************************************************
4345 //
4346 // GBD structure formats
4347 //
4348 #define NVT_GAMUT_FORMAT_VERTICES 0
4349 #define NVT_GAMUT_FORMAT_RANGE 1
4350
4351 typedef struct tagNVT_GAMUT_HEADER
4352 {
4353 NvU8 type:8;
4354
4355 // byte 1
4356 NvU8 AGSNum:4;
4357 NvU8 GBD_profile:3;
4358 NvU8 Next_Field:1;
4359
4360 // byte 2
4361 NvU8 CGSNum:4;
4362 NvU8 Packet_Seq:2;
4363 NvU8 Rsvd:1;
4364 NvU8 No_Cmt_GBD:1;
4365
4366 } NVT_GAMUT_HEADER;
4367
4368 typedef struct tagNVT_GAMUT_METADATA_RANGE_8BIT{
4369
4370 // Header
4371 NvU8 GBD_Color_Space:3;
4372 NvU8 GBD_Color_Precision:2;
4373 NvU8 Rsvd:2;
4374 NvU8 Format_Flag:1;
4375
4376 // Packaged data
4377 NvU8 Min_Red_Data:8;
4378 NvU8 Max_Red_Data:8;
4379 NvU8 Min_Green_Data:8;
4380 NvU8 Max_Green_Data:8;
4381 NvU8 Min_Blue_Data:8;
4382 NvU8 Max_Blue_Data:8;
4383 } NVT_GAMUT_METADATA_RANGE_8BIT;
4384
4385 typedef struct tagNVT_GAMUT_METADATA_RANGE_10BIT{
4386
4387 // Header
4388 NvU8 GBD_Color_Space:3;
4389 NvU8 GBD_Color_Precision:2;
4390 NvU8 Rsvd:2;
4391 NvU8 Format_Flag:1;
4392
4393 // Packaged data
4394 NvU8 Min_Red_Data_HI:8;
4395
4396 NvU8 Max_Red_Data_HI:6;
4397 NvU8 Min_Red_Data_LO:2;
4398
4399 NvU8 Min_Green_Data_HI:4;
4400 NvU8 Max_Red_Data_LO:4;
4401
4402 NvU8 Max_Green_Data_HI:2;
4403 NvU8 Min_Green_Data_LO:6;
4404
4405 NvU8 Max_Green_Data_LO:8;
4406
4407 NvU8 Min_Blue_Data_HI:8;
4408
4409 NvU8 Max_Blue_Data_HI:6;
4410 NvU8 Min_Blue_Data_LO:2;
4411
4412 NvU8 Data_Rsvd:4;
4413 NvU8 Max_Blue_Data_LO:4;
4414
4415 } NVT_GAMUT_METADATA_RANGE_10BIT;
4416
4417 typedef struct tagNVT_GAMUT_METADATA_RANGE_12BIT{
4418
4419 // Header
4420 NvU8 GBD_Color_Space:3;
4421 NvU8 GBD_Color_Precision:2;
4422 NvU8 Rsvd:2;
4423 NvU8 Format_Flag:1;
4424
4425 // Packaged data
4426 NvU8 Min_Red_Data_HI:8;
4427
4428 NvU8 Max_Red_Data_HI:4;
4429 NvU8 Min_Red_Data_LO:4;
4430
4431 NvU8 Max_Red_Data_LO:8;
4432
4433 NvU8 Min_Green_Data_HI:8;
4434
4435 NvU8 Max_Green_Data_HI:4;
4436 NvU8 Min_Green_Data_LO:4;
4437
4438 NvU8 Max_Green_Data_LO:8;
4439
4440 NvU8 Min_Blue_Data_HI:8;
4441
4442 NvU8 Max_Blue_Data_HI:4;
4443 NvU8 Min_Blue_Data_LO:4;
4444
4445 NvU8 Max_Blue_Data_LO:8;
4446
4447 } NVT_GAMUT_METADATA_RANGE_12BIT;
4448
4449 typedef struct tagNVT_GAMUT_METADATA_VERTICES_8BIT
4450 {
4451 // Header
4452 NvU8 GBD_Color_Space:3;
4453 NvU8 GBD_Color_Precision:2;
4454 NvU8 Rsvd:1;
4455 NvU8 Facet_Mode:1; // Must be set to 0
4456 NvU8 Format_Flag:1; // Must be set to 0
4457 NvU8 Number_Vertices_H:8; // Must be set to 0
4458 NvU8 Number_Vertices_L:8; // Must be set to 4
4459
4460 // Packaged data
4461 NvU8 Black_Y_R;
4462 NvU8 Black_Cb_G;
4463 NvU8 Black_Cr_B;
4464 NvU8 Red_Y_R;
4465 NvU8 Red_Cb_G;
4466 NvU8 Red_Cr_B;
4467 NvU8 Green_Y_R;
4468 NvU8 Green_Cb_G;
4469 NvU8 Green_Cr_B;
4470 NvU8 Blue_Y_R;
4471 NvU8 Blue_Cb_G;
4472 NvU8 Blue_Cr_B;
4473 } NVT_GAMUT_METADATA_VERTICES_8BIT;
4474
4475 typedef struct tagNVT_GAMUT_METADATA_VERTICES_10BIT
4476 {
4477 // Header
4478 NvU8 GBD_Color_Space:3;
4479 NvU8 GBD_Color_Precision:2;
4480 NvU8 Rsvd:1;
4481 NvU8 Facet_Mode:1; // Must be set to 0
4482 NvU8 Format_Flag:1; // Must be set to 0
4483 NvU8 Number_Vertices_H:8; // Must be set to 0
4484 NvU8 Number_Vertices_L:8; // Must be set to 4
4485
4486 // Packaged data
4487 NvU8 Black_Y_R_HI;
4488
4489 NvU8 Black_Cb_G_HI:6;
4490 NvU8 Black_Y_R_LO:2;
4491
4492 NvU8 Black_Cr_B_HI:4;
4493 NvU8 Black_Cb_G_LO:4;
4494
4495 NvU8 Red_Y_R_HI:2;
4496 NvU8 Black_Cr_B_LO:6;
4497
4498 NvU8 Red_Y_R_LO;
4499
4500 NvU8 Red_Cb_G_HI;
4501
4502 NvU8 Red_Cr_B_HI:6;
4503 NvU8 Red_Cb_G_LO:2;
4504
4505 NvU8 Green_Y_R_HI:4;
4506 NvU8 Red_Cr_B_LO:4;
4507
4508 NvU8 Green_Cb_G_HI:2;
4509 NvU8 Green_Y_R_LO:6;
4510
4511 NvU8 Green_Cb_G_LO;
4512
4513 NvU8 Green_Cr_B_HI;
4514
4515 NvU8 Blue_Y_R_HI:6;
4516 NvU8 Green_Cr_B_LO:2;
4517
4518 NvU8 Blue_Cb_G_HI:4;
4519 NvU8 Blue_Y_R_LO:4;
4520
4521 NvU8 Blue_Cr_B_HI:2;
4522 NvU8 Blue_Cb_G_LO:6;
4523
4524 NvU8 Blue_Cr_B_LO;
4525 } NVT_GAMUT_METADATA_VERTICES_10BIT;
4526
4527 typedef struct tagNVT_GAMUT_METADATA_VERTICES_12BIT
4528 {
4529 // Header
4530 NvU8 GBD_Color_Space:3;
4531 NvU8 GBD_Color_Precision:2;
4532 NvU8 Rsvd:1;
4533 NvU8 Facet_Mode:1; // Must be set to 0
4534 NvU8 Format_Flag:1; // Must be set to 0
4535 NvU8 Number_Vertices_H:8; // Must be set to 0
4536 NvU8 Number_Vertices_L:8; // Must be set to 4
4537
4538 // Packaged data
4539 NvU8 Black_Y_R_HI;
4540
4541 NvU8 Black_Cb_G_HI:4;
4542 NvU8 Black_Y_R_LO:4;
4543
4544 NvU8 Black_Cb_G_LO;
4545
4546 NvU8 Black_Cr_B_HI;
4547
4548 NvU8 Red_Y_R_HI:4;
4549 NvU8 Black_Cr_B_LO:4;
4550
4551 NvU8 Red_Y_R_LO;
4552
4553 NvU8 Red_Cb_G_HI;
4554
4555 NvU8 Red_Cr_B_HI:4;
4556 NvU8 Red_Cb_G_LO:4;
4557
4558 NvU8 Red_Cr_B_LO;
4559
4560 NvU8 Green_Y_R_HI;
4561
4562 NvU8 Green_Cb_G_HI:4;
4563 NvU8 Green_Y_R_LO:4;
4564
4565 NvU8 Green_Cb_G_LO;
4566
4567 NvU8 Green_Cr_B_HI;
4568
4569 NvU8 Blue_Y_R_HI:4;
4570 NvU8 Green_Cr_B_LO:4;
4571
4572 NvU8 Blue_Y_R_LO;
4573
4574 NvU8 Blue_Cb_G_HI;
4575
4576 NvU8 Blue_Cr_B_HI:4;
4577 NvU8 Blue_Cb_G_LO:4;
4578
4579 NvU8 Blue_Cr_B_LO;
4580 } NVT_GAMUT_METADATA_VERTICES_12BIT;
4581
4582 typedef struct tagNVT_GAMUT_METADATA
4583 {
4584 NVT_GAMUT_HEADER header;
4585
4586 union
4587 {
4588 NVT_GAMUT_METADATA_RANGE_8BIT range8Bit;
4589 NVT_GAMUT_METADATA_RANGE_10BIT range10Bit;
4590 NVT_GAMUT_METADATA_RANGE_12BIT range12Bit;
4591 NVT_GAMUT_METADATA_VERTICES_8BIT vertices8bit;
4592 NVT_GAMUT_METADATA_VERTICES_10BIT vertices10bit;
4593 NVT_GAMUT_METADATA_VERTICES_12BIT vertices12bit;
4594 }payload;
4595
4596 }NVT_GAMUT_METADATA;
4597 //
4598 //***********************************
4599 // Display Port Configuration Data
4600 //***********************************
4601 //
4602 // DPCD field offset
4603 #define NVT_DPCD_ADDRESS_RECEIVER_CAPABILITY_FIELD 0x00000
4604 #define NVT_DPCD_ADDRESS_LINK_CONFIG_FIELD 0x00100
4605 #define NVT_DPCD_ADDRESS_MSTM_CTRL_FIELD 0x00111 //DPMST Control MST <-> ST
4606 #define NVT_DPCD_ADDRESS_MSTM_BRANCH_DEVICE 0x001A1
4607 #define NVT_DPCD_ADDRESS_LINK_SINK_STATUS_FIELD 0x00200
4608 #define NVT_DPCD_ADDRESS_VENDOR_SPECIFIC_SOURCE_DEVICE 0x00300
4609 #define NVT_DPCD_ADDRESS_VENDOR_SPECIFIC_SINK_DEVICE 0x00400
4610 #define NVT_DPCD_ADDRESS_VENDOR_SPECIFIC_BRANCH_DEVICE 0x00500
4611 #define NVT_DPCD_ADDRESS_SINK_CTRL_FIELD 0x00600
4612 #define NVT_DPCD_ADDRESS_DOWN_REQ_BUFFER_FIELD 0x01000
4613 #define NVT_DPCD_ADDRESS_UP_REP_BUFFER_FIELD 0x01200
4614 #define NVT_DPCD_ADDRESS_DOWN_REP_BUFFER_FIELD 0x01400
4615 #define NVT_DPCD_ADDRESS_UP_REQ_BUFFER_FIELD 0x01600
4616 #define NVT_DPCD_ADDRESS_DEVICE_SERVICE_IRQ_VECTOR_ESI0 0x02003
4617 #define NVT_DPCD_ADDRESS_DP_TUNNELING_DEVICE_IEEE_OUI 0xE0000
4618 #define NVT_DPCD_ADDRESS_DP_TUNNELING_DEVICE_ID_STRING 0xE0003
4619 #define NVT_DPCD_ADDRESS_DP_TUNNELING_CAPS_SUPPORT_FIELD 0xE000D
4620 #define NVT_DPCD_ADDRESS_DP_IN_ADAPTER_INFO_FIELD 0xE000E
4621 #define NVT_DPCD_ADDRESS_USB4_DRIVER_ID_FIELD 0xE000F
4622 #define NVT_DPCD_ADDRESS_USB4_ROUTER_TOPOLOGY_ID_FIELD 0xE001B
4623
4624 //
4625 // Raw DPCD data format - Receiver Capability Field // 00000h - 000FFh
4626 typedef struct tagNVT_DPCD_RECEIVER_CAP
4627 {
4628 NvU8 rev; // 00000h
4629 NvU8 max_link_rate; // 00001h
4630 NvU8 max_lane_count; // 00002h
4631 NvU8 max_downspread; // 00003h
4632 NvU8 norp; // 00004h
4633 NvU8 downstream_port_present; // 00005h
4634 NvU8 main_link_ch_coding; // 00006h
4635 NvU8 down_stream_port_count; // 00007h
4636 NvU8 receive_port0_cap_0; // 00008h
4637 NvU8 receive_port0_cap_1; // 00009h
4638 NvU8 receive_port1_cap_0; // 0000Ah
4639 NvU8 receive_port1_cap_1; // 0000Bh
4640 NvU8 reserved_0[0x7F - 0xC + 1]; // 0000Ch - 0007Fh
4641 NvU8 down_strm_port0_cap[0x8F - 0x80 + 1]; // 00080h - 0008Fh
4642 //NvU8 reserved_1[0xFF - 0x90 + 1]; // 00090h - 000FFh
4643 }NVT_DPCD_RECEIVER_CAP;
4644
4645 //
4646 // Raw DPCD data format - Link Configuration Field // 00100h - 001FFh
4647 typedef struct tagNVT_DPCD_LINK_CFG
4648 {
4649 NvU8 link_bw_set; // 00100h
4650 NvU8 lane_count_set; // 00101h
4651 NvU8 training_pattern_set; // 00102h
4652 NvU8 training_lane0_set; // 00103h
4653 NvU8 training_lane1_set; // 00104h
4654 NvU8 training_lane2_set; // 00105h
4655 NvU8 training_lane3_set; // 00106h
4656 NvU8 downspread_ctrl; // 00107h
4657 NvU8 main_link_ch_coding_set; // 00108h
4658 NvU8 reserved_0[0x110 - 0x109 + 1]; // 00110h - 00109h
4659 NvU8 mstm_ctrl; // 00111h
4660 // NvU8 reserved_0[0x1FF - 0x111 + 1];
4661 }NVT_DPCD_LINK_CFG;
4662 //
4663 // Raw DPCD data format - Link/Sink Status Field // 00200h - 002FFh
4664 typedef struct tagNVT_DPCD_LINK_SINK_STATUS
4665 {
4666 NvU8 sink_count; // 00200h
4667 NvU8 device_service_irq_vector; // 00201h
4668 NvU8 lane0_1_status; // 00202h
4669 NvU8 lane2_3_status; // 00203h
4670 NvU8 lane_align_status_update; // 00204h
4671 NvU8 sink_status; // 00205h
4672 NvU8 adjust_req_lane0_1; // 00206h
4673 NvU8 adjust_req_lane2_3; // 00207h
4674 NvU8 training_score_lane0; // 00208h
4675 NvU8 training_score_lane1; // 00209h
4676 NvU8 training_score_lane2; // 0020Ah
4677 NvU8 training_score_lane3; // 0020Bh
4678 NvU8 reserved_0[0x20F - 0x20C + 1]; // 0020Fh - 0020Ch
4679 NvU16 sym_err_count_lane0; // 00210h - 00211h
4680 NvU16 sym_err_count_lane1; // 00212h - 00213h
4681 NvU16 sym_err_count_lane2; // 00214h - 00215h
4682 NvU16 sym_err_count_lane3; // 00217h - 00216h
4683 NvU8 test_req; // 00218h
4684 NvU8 test_link_rate; // 00219h
4685 NvU8 reserved_1[0x21F - 0x21A + 1]; // 0021Fh - 0021Ah
4686 NvU8 test_lane_count; // 00220h
4687 NvU8 test_pattern; // 00221h
4688 NvU16 test_h_total; // 00222h - 00223h
4689 NvU16 test_v_total; // 00224h - 00225h
4690 NvU16 test_h_start; // 00226h - 00227h
4691 NvU16 test_v_start; // 00228h - 00229h
4692 NvU16 test_hsync; // 0022Ah - 0022Bh
4693 NvU16 test_vsync; // 0022Ch - 0022Dh
4694 NvU16 test_h_width; // 0022Eh - 0022Fh
4695 NvU16 test_v_height; // 00230h - 00231h
4696 NvU16 test_misc; // 00232h - 00233h
4697 NvU8 test_refresh_rate_numerator; // 00234h
4698 NvU8 reserved_2[0x23F - 0x235 + 1]; // 00235h - 0023Fh
4699 NvU16 test_crc_R_Cr; // 00240h - 00241h
4700 NvU16 test_crc_G_Y; // 00242h - 00243h
4701 NvU16 test_crc_B_Cb; // 00244h - 00245h
4702 NvU8 test_sink_misc; // 00246h
4703 NvU8 reserved_3[0x25F - 0x247 + 1]; // 00247h - 0025fh
4704 NvU8 test_response; // 00260h
4705 NvU8 test_edid_checksum; // 00261h
4706 NvU8 reserved_4[0x26F - 0x262 + 1]; // 00262h - 0026Fh
4707 NvU8 test_sink; // 00270h
4708 //NvU8 reserved_5[0x27F - 0x271 + 1]; // 00271h - 0027Fh
4709 //NvU8 reserved_6[0x2FF - 0x280 + 1]; // 00280h - 002FFh
4710 }NVT_DPCD_LINK_SINK_STATUS;
4711
4712 #define NV_DPCD_DONGLE_NVIDIA_OUI 0x00044B
4713
4714 //
4715 // Raw DPCD data format - Vendor-Specific Field for Source Device // 00300h - 003FFh
4716 // Raw DPCD data format - Vendor-Specific Field for Sink Device // 00400h - 004FFh
4717 // Raw DPCD data format - Vendor-Specific Field for Branch Device // 00500h - 005FFh
4718 typedef struct tagNVT_DPCD_VENDOR_SPECIFIC_FIELD
4719 {
4720 NvU8 ieee_oui7_0; // 00300h
4721 NvU8 ieee_oui15_8; // 00301h
4722 NvU8 ieee_oui23_16; // 00302h
4723 //NvU8 reserved[0x3FF - 0x303 + 1]; // 003FFh - 00303h
4724 }NVT_DPCD_VENDOR_SPECIFIC_FIELD;
4725 //
4726 // Raw DPCD data format - Dongle Specific Field
4727 typedef struct tagNVT_DPCD_DONGLE_SPECIFIC_FIELD
4728 {
4729 NvU8 vendor_b0; // 00300h
4730 NvU8 vendor_b1; // 00301h
4731 NvU8 vendor_b2; // 00302h
4732 NvU8 model[6]; // 00303h - 00308h
4733 NvU8 chipIDVersion; // 00309h
4734 //NvU8 reserved[0x3FF - 0x30A + 1]; // 0030Ah - 005FFh
4735 }NVT_DPCD_DONGLE_SPECIFIC_FIELD;
4736 //
4737 // Raw DPCD data format - DualDP Specific Field
4738 typedef struct tagNVT_DPCD_DUALDP_SPECIFIC_FIELD
4739 {
4740 NvU8 vendor_b0; // 00300h
4741 NvU8 vendor_b1; // 00301h
4742 NvU8 vendor_b2; // 00302h
4743 NvU8 model[6]; // 00303h - 00308h
4744 NvU8 chipd_id_version; // 00309h
4745 NvU8 reserved_1[0x3AF - 0x30A + 1]; // 0030Ah - 003AFh
4746 NvU8 dual_dp_cap; // 003B0h
4747 NvU8 dual_dp_base_addr[3]; // 003B1h - 003B3h
4748 //NvU8 reserved_2[0x3FF - 0x3B4 + 1]; // 003B4h - 003FFh
4749 }NVT_DPCD_DUALDP_SPECIFIC_FIELD;
4750
4751 //
4752 // Raw DPCD data format - Sink Control Field // 00600h - 006FFh
4753 typedef struct tagNVT_DPCD_SINK_CTRL_FIELD
4754 {
4755 NvU8 set_power; // 00600h
4756 //NvU8 reserved[0x6FF - 0x601 + 1]; // 00601h - 006FFh
4757 }NVT_DPCD_SINK_CTRL_FIELD;
4758 //
4759 // The entire DPCD data block
4760 typedef struct tagNVT_DPCD
4761 {
4762 NVT_DPCD_RECEIVER_CAP receiver_cap;
4763 NVT_DPCD_LINK_CFG link_cfg;
4764 NVT_DPCD_LINK_SINK_STATUS link_status;
4765 NVT_DPCD_VENDOR_SPECIFIC_FIELD vsp_source_device;
4766 NVT_DPCD_VENDOR_SPECIFIC_FIELD vsp_sink_device;
4767 NVT_DPCD_VENDOR_SPECIFIC_FIELD vsp_branch_device;
4768 NVT_DPCD_SINK_CTRL_FIELD sink_ctrl;
4769 }NVT_DPCD;
4770 //
4771 //
4772 // Parsed DPCD info
4773 //
4774 //
4775 #define NVT_DPCD_REV_10 NVT_DPCD_DPCD_REV_10 // DPCD revision 1.0
4776 #define NVT_DPCD_REV_11 NVT_DPCD_DPCD_REV_11 // DPCD revision 1.1
4777 #define NVT_DPCD_REV_12 NVT_DPCD_DPCD_REV_12 // DPCD revision 1.2
4778 #define NVT_DPCD_RECEIVER_MAX_DOWNSTREAM_PORT 16 // the max downstream port possible per device
4779 #define NVT_DPCD_RECEIVER_DOWNSTREAM_PORT_TYPE_DP NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_DISPLAYPORT // Display Port
4780 #define NVT_DPCD_RECEIVER_DOWNSTREAM_PORT_TYPE_VGA NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_VGA // analog VGA or analog video over DVI-I
4781 #define NVT_DPCD_RECEIVER_DOWNSTREAM_PORT_TYPE_DVI NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_DVI // DVI
4782 #define NVT_DPCD_RECEIVER_DOWNSTREAM_PORT_TYPE_HDMI NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_HDMI // HDMI
4783 #define NVT_DPCD_RECEIVER_DOWNSTREAM_PORT_TYPE_OTHERS NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_NO_EDID // the downstream port type will have no EDID in sink device such as Composite/SVideo.
4784 #define NVT_DPCD_RECEIVER_DOWNSTREAM_PORT_TYPE_DP_PP NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_DISPLAYPORT_PP // Display Port++
4785 #define NVT_DPCD_LINK_RATE_1_62_GBPS NVT_DPCD_LINK_BW_SET_LINK_BW_SET_1_62GPBS_PER_LANE // 1.62Gbps per lane
4786 #define NVT_DPCD_LINK_RATE_2_70_GBPS NVT_DPCD_LINK_BW_SET_LINK_BW_SET_2_70GPBS_PER_LANE // 2.70Gbps per lane
4787 #define NVT_DPCD_LINK_RATE_5_40_GBPS NVT_DPCD_LINK_BW_SET_LINK_BW_SET_5_40GPBS_PER_LANE // 5.40Gbps per lane
4788 #define NVT_DPCD_LINK_RATE_8_10_GBPS NVT_DPCD_LINK_BW_SET_LINK_BW_SET_8_10GPBS_PER_LANE // 5.40Gbps per lane
4789 #define NVT_DPCD_LINK_RATE_FACTOR_IN_10KHZ_MBPS 2700 // e.g. NVT_DPCD_LINK_RATE_1_62_GBPS * 0.27Gbps per lane (in 10KHz)
4790 #define NVT_DPCD_LANE_COUNT_1 NVT_DPCD_LANE_COUNT_SET_LANE_COUNT_SET_1_LANE
4791 #define NVT_DPCD_LANE_COUNT_2 NVT_DPCD_LANE_COUNT_SET_LANE_COUNT_SET_2_LANES
4792 #define NVT_DPCD_LANE_COUNT_4 NVT_DPCD_LANE_COUNT_SET_LANE_COUNT_SET_4_LANES
4793 #define NVT_DPCD_LANE_COUNT_8 8
4794
4795 // note: the values of NVT_COLOR_FORMAT_* are fixed in order to match the equivalent NV classes
4796 typedef enum _NVT_COLOR_FORMAT
4797 {
4798 NVT_COLOR_FORMAT_RGB = 0,
4799 NVT_COLOR_FORMAT_YCbCr422 = 1,
4800 NVT_COLOR_FORMAT_YCbCr444 = 2,
4801 NVT_COLOR_FORMAT_YCbCr420 = 3,
4802 NVT_COLOR_FORMAT_Y = 4,
4803 NVT_COLOR_FORMAT_RAW = 5,
4804 NVT_COLOR_FORMAT_INVALID = 0xFF
4805 } NVT_COLOR_FORMAT;
4806
4807 typedef enum
4808 {
4809 NVT_COLOR_RANGE_FULL = 0,
4810 NVT_COLOR_RANGE_LIMITED = 1
4811 } NVT_COLOR_RANGE;
4812
4813 // note: the values of NVT_COLORIMETRY_* are fixed in order to match the equivalent NV classes
4814 typedef enum
4815 {
4816 NVT_COLORIMETRY_RGB = 0,
4817 NVT_COLORIMETRY_YUV_601 = 1,
4818 NVT_COLORIMETRY_YUV_709 = 2,
4819 NVT_COLORIMETRY_EXTENDED = 3,
4820 NVT_COLORIMETRY_XVYCC_601 = 4,
4821 NVT_COLORIMETRY_XVYCC_709 = 5,
4822 NVT_COLORIMETRY_ADOBERGB = 6,
4823 NVT_COLORIMETRY_BT2020cYCC = 7,
4824 NVT_COLORIMETRY_BT2020YCC = 8,
4825 NVT_COLORIMETRY_BT2020RGB = 9,
4826 NVT_COLORIMETRY_INVALID = 0xFF
4827 } NVT_COLORIMETRY;
4828
4829 #define NVT_DPCD_BPC_DEFAULT 0x00
4830 #define NVT_DPCD_BPC_6 0x01
4831 #define NVT_DPCD_BPC_8 0x02
4832 #define NVT_DPCD_BPC_10 0x03
4833 #define NVT_DPCD_BPC_12 0x04
4834 #define NVT_DPCD_BPC_16 0x05
4835
4836 #define NVT_DPCD_AUTOMATED_TEST 0x02
4837 #define NVT_DPCD_CP_IRQ 0x04
4838
4839 #define NVT_DPCD_LANES_2_3_TRAINED 0x77
4840 #define NVT_DPCD_LANE_1_TRAINED 0x07
4841 #define NVT_DPCD_LANE_0_TRAINED 0x07
4842 #define NVT_DPCD_INTERLANE_ALIGN_DONE 0x1
4843
4844 #define NVT_DPCD_LANE_1_STATUS 7:4
4845 #define NVT_DPCD_LANE_0_STATUS 3:0
4846 #define NVT_DPCD_ADDRESS_LANE_STATUS 0x00202
4847
4848 #define NVT_DPCD_TEST_REQ_LINK_TRAINING 0x01
4849 #define NVT_DPCD_TEST_REQ_TEST_PATTERN 0x02
4850 #define NVT_DPCD_TEST_REQ_EDID_READ 0x04
4851 #define NVT_DPCD_TEST_REQ_PHY_TEST_PATTERN 0x08
4852
4853 #define NVT_DPCD_TEST_ACK 0x01
4854 #define NVT_DPCD_TEST_NAK 0x02
4855 #define NVT_DPCD_TEST_EDID_CHECKSUM_WRITE 0x04
4856
4857 #define NVT_DPCD_TEST_MISC_COLOR_FORMAT 2:1
4858 #define NVT_DPCD_TEST_MISC_DYNAMIC_RANGE 3:3
4859 #define NVT_DPCD_TEST_MISC_YCbCr_COEFFICIENT 4:4
4860 #define NVT_DPCD_TEST_MISC_BIT_DEPTH 7:5
4861
4862 #define NVT_DPCD_TEST_EDID_CHECKSUM_ADDRESS 0x261
4863 #define NVT_DPCD_TEST_RESPONSE_ADDRESS 0x260
4864 #define NVT_EDID_CHECKSUM_BYTE 127
4865
4866 #define NVT_DPCD_POWER_STATE_NORMAL 0x01
4867 #define NVT_DPCD_POWER_STATE_POWER_DOWN 0x02
4868
4869 // *******************
4870 // ** DPCD 1.1 Spec **
4871 // *******************
4872
4873 // 0x000h DPCD_REV
4874 #define NVT_DPCD_DPCD_REV 0x000
4875 #define NVT_DPCD_DPCD_REV_MINOR_VER 3:0
4876 #define NVT_DPCD_DPCD_REV_MAJOR_VER 7:4
4877 #define NVT_DPCD_DPCD_REV_10 0x10
4878 #define NVT_DPCD_DPCD_REV_11 0x11
4879 #define NVT_DPCD_DPCD_REV_12 0x12
4880
4881 // 0x001h MAX_LINK_RATE
4882 #define NVT_DPCD_MAX_LINK_RATE 0x001
4883 #define NVT_DPCD_MAX_LINK_RATE_MAX_LINK_RATE 7:0
4884 #define NVT_DPCD_MAX_LINK_RATE_MAX_LINK_RATE_1_62GPS_PER_LANE 0x06
4885 #define NVT_DPCD_MAX_LINK_RATE_MAX_LINK_RATE_2_70GPS_PER_LANE 0x0A
4886 #define NVT_DPCD_MAX_LINK_RATE_MAX_LINK_RATE_5_40GPS_PER_LANE 0x14
4887 #define NVT_DPCD_MAX_LINK_RATE_MAX_LINK_RATE_8_10GPS_PER_LANE 0x1E
4888
4889 // 0x002h - MAX_LANE_COUNT
4890 #define NVT_DPCD_MAX_LANE_COUNT 0x002
4891 #define NVT_DPCD_MAX_LANE_COUNT_MAX_LANE_COUNT 4:0
4892 #define NVT_DPCD_MAX_LANE_COUNT_RSVD 6:5
4893 #define NVT_DPCD_MAX_LANE_COUNT_ENHANCED_FRAME_CAP 7:7
4894
4895 // 0x003h - MAX_DOWNSPREAD
4896 #define NVT_DPCD_MAX_DOWNSPREAD 0x003
4897 #define NVT_DPCD_MAX_DOWNSPREAD_MAX_DOWNSPREAD 0:0
4898 #define NVT_DPCD_MAX_DOWNSPREAD_MAX_DOWNSPREAD_NO 0
4899 #define NVT_DPCD_MAX_DOWNSPREAD_MAX_DOWNSPREAD_YES 1
4900 #define NVT_DPCD_MAX_DOWNSPREAD_RSVD 5:1
4901 #define NVT_DPCD_MAX_DOWNSPREAD_NO_AUX_HANDSHAKE_LINK_TRAINING 6:6
4902 #define NVT_DPCD_MAX_DOWNSPREAD_RSVD_2 7:7
4903
4904 // 0x004h - NORP
4905 #define NVT_DPCD_NORP 0x004
4906 #define NVT_DPCD_NORP_NUMBER_OF_RECEIVER_PORT_SUBTRACT_ONE 0:0
4907 #define NVT_DPCD_NORP_RSVD 7:1
4908
4909 // 0x005 - DOWNSTREAMPORT_PRESENT
4910 #define NVT_DPCD_DOWNSTREAMPORT_PRESENT 0x005
4911 #define NVT_DPCD_DOWNSTREAMPORT_PRESENT_DWN_STRM_PORT_PRESENT 0:0
4912 #define NVT_DPCD_DOWNSTREAMPORT_PRESENT_DWN_STRM_PORT_TYPE 2:1
4913 #define NVT_DPCD_DOWNSTREAMPORT_PRESENT_DWN_STRM_PORT_TYPE_DISPLAYPORT 0
4914 #define NVT_DPCD_DOWNSTREAMPORT_PRESENT_DWN_STRM_PORT_TYPE_VGA 1
4915 #define NVT_DPCD_DOWNSTREAMPORT_PRESENT_DWN_STRM_PORT_TYPE_DVI_HDMI 2
4916 #define NVT_DPCD_DOWNSTREAMPORT_PRESENT_DWN_STRM_PORT_TYPE_OTHERS 3
4917 #define NVT_DPCD_DOWNSTREAMPORT_PRESENT_FORMAT_CONVERSION 3:3
4918 #define NVT_DPCD_DOWNSTREAMPORT_PRESENT_RSVD 7:4
4919
4920 // 0x006 - MAIN_LINK_CHANNEL_CODING
4921 #define NVT_DPCD_MAIN_LINK_CHANNEL_CODING 0x006
4922 #define NVT_DPCD_MAIN_LINK_CHANNEL_CODING_ANSI8B_10B 0:0
4923 #define NVT_DPCD_MAIN_LINK_CHANNEL_CODING_RSVD 7:1
4924
4925 // 0x007 - DOWN_STREAM_PORT_COUNT
4926 #define NVT_DPCD_DOWN_STREAM_PORT_COUNT 0x007
4927 #define NVT_DPCD_DOWN_STREAM_PORT_COUNT_DWN_STRM_PORT_COUNT 3:0
4928 #define NVT_DPCD_DOWN_STREAM_PORT_COUNT_RSVD 6:4
4929 #define NVT_DPCD_DOWN_STREAM_PORT_COUNT_OUI_SUPPORT 7:7
4930 #define NVT_DPCD_DOWN_STREAM_PORT_COUNT_OUI_SUPPORT_YES 1
4931 #define NVT_DPCD_DOWN_STREAM_PORT_COUNT_OUI_SUPPORT_NO 0
4932
4933 // 0x008h - RECEIVE_PORT0_CAP_0
4934 #define NVT_DPCD_RECEIVE_PORT0_CAP_0 0x008
4935 #define NVT_DPCD_RECEIVE_PORT0_CAP_0_RSVD 0:0
4936 #define NVT_DPCD_RECEIVE_PORT0_CAP_0_LOCAL_EDID_PRESENT 1:1
4937 #define NVT_DPCD_RECEIVE_PORT0_CAP_0_LOCAL_EDID_PRESENT_YES 1
4938 #define NVT_DPCD_RECEIVE_PORT0_CAP_0_LOCAL_EDID_PRESENT_NO 0
4939 #define NVT_DPCD_RECEIVE_PORT0_CAP_0_ASSOCIATED_TO_PRECEDING_PORT 2:2
4940 #define NVT_DPCD_RECEIVE_PORT0_CAP_0_ASSOCIATED_TO_PRECEDING_PORT_YES 1
4941 #define NVT_DPCD_RECEIVE_PORT0_CAP_0_ASSOCIATED_TO_PRECEDING_PORT_NO 0
4942 #define NVT_DPCD_RECEIVE_PORT0_CAP_0_RSVD_2 7:3
4943
4944 // 0x009h - RECEIVE_PORT0_CAP_1
4945 #define NVT_DPCD_RECEIVE_PORT0_CAP_1 0x009
4946 #define NVT_DPCD_RECEIVE_PORT0_CAP_1_BUFFER_SIZE 7:0
4947
4948 // 0x00Ah - RECEIVE_PORT1_CAP_0
4949 #define NVT_DPCD_RECEIVE_PORT1_CAP_0 0x00A
4950 #define NVT_DPCD_RECEIVE_PORT1_CAP_0_RSVD 0:0
4951 #define NVT_DPCD_RECEIVE_PORT1_CAP_0_LOCAL_EDID_PRESENT 1:1
4952 #define NVT_DPCD_RECEIVE_PORT1_CAP_0_LOCAL_EDID_PRESENT_YES 1
4953 #define NVT_DPCD_RECEIVE_PORT1_CAP_0_LOCAL_EDID_PRESENT_NO 0
4954 #define NVT_DPCD_RECEIVE_PORT1_CAP_0_ASSOCIATED_TO_PRECEDING_PORT 2:2
4955 #define NVT_DPCD_RECEIVE_PORT1_CAP_0_ASSOCIATED_TO_PRECEDING_PORT_YES 1
4956 #define NVT_DPCD_RECEIVE_PORT1_CAP_0_ASSOCIATED_TO_PRECEDING_PORT_NO 0
4957 #define NVT_DPCD_RECEIVE_PORT1_CAP_0_RSVD_2 7:3
4958
4959 // 0x00Bh - RECEIVE_PORT1_CAP_1
4960 #define NVT_DPCD_RECEIVE_PORT1_CAP_1 0x00B
4961 #define NVT_DPCD_RECEIVE_PORT1_CAP_1_BUFFER_SIZE 7:0
4962
4963 // 0x021h - MST_CAP
4964 #define NVT_DPCD_MSTM_CAP 0x021
4965 #define NVT_DPCD_MSTM_CAP_MST_CAP 0:0
4966 #define NVT_DPCD_MSTM_CAP_MST_CAP_NO 0
4967 #define NVT_DPCD_MSTM_CAP_MST_CAP_YES 1
4968
4969 // 0x080h ~ 0x08Fh - DWN_STRM_PORT0_CAP
4970 #define NVT_DPCD_DWN_STRM_PORT0_CAP 0x080
4971 #define NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE 2:0
4972 #define NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_DISPLAYPORT 0
4973 #define NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_VGA 1
4974 #define NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_DVI 2
4975 #define NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_HDMI 3
4976 #define NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_NO_EDID 4
4977 #define NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_TYPE_DISPLAYPORT_PP 5 //Defined in Post DP 1.2 draft
4978 #define NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_HPD 3:3
4979 #define NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_HPD_AWARE_YES 1
4980 #define NVT_DPCD_DWN_STRM_PORT0_CAP_DWN_STRM_PORT0_HPD_AWARE_NO 0
4981 #define NVT_DPCD_DWN_STRM_PORT0_CAP_RSVD 7:4
4982
4983 // 0x100h - LINK_BW_SET
4984 #define NVT_DPCD_LINK_BW_SET 0x100
4985 #define NVT_DPCD_LINK_BW_SET_LINK_BW_SET 7:0
4986 #define NVT_DPCD_LINK_BW_SET_LINK_BW_SET_1_62GPBS_PER_LANE 0x06
4987 #define NVT_DPCD_LINK_BW_SET_LINK_BW_SET_2_70GPBS_PER_LANE 0x0A
4988 #define NVT_DPCD_LINK_BW_SET_LINK_BW_SET_5_40GPBS_PER_LANE 0x14
4989 #define NVT_DPCD_LINK_BW_SET_LINK_BW_SET_8_10GPBS_PER_LANE 0x1E
4990
4991 // 0x101h - LANE_COUNT_SET
4992 #define NVT_DPCD_LANE_COUNT_SET 0x101
4993 #define NVT_DPCD_LANE_COUNT_SET_LANE_COUNT_SET 4:0
4994 #define NVT_DPCD_LANE_COUNT_SET_LANE_COUNT_SET_1_LANE 1
4995 #define NVT_DPCD_LANE_COUNT_SET_LANE_COUNT_SET_2_LANES 2
4996 #define NVT_DPCD_LANE_COUNT_SET_LANE_COUNT_SET_4_LANES 4
4997 #define NVT_DPCD_LANE_COUNT_SET_RSVD 6:5
4998 #define NVT_DPCD_LANE_COUNT_SET_ENHANCED_FRAME_EN 7:7
4999 #define NVT_DPCD_LANE_COUNT_SET_ENHANCED_FRAME_EN_YES 1
5000 #define NVT_DPCD_LANE_COUNT_SET_ENHANCED_FRAME_EN_NO 0
5001
5002 // 0x102h - TRAINING_PATTERN_SET
5003 #define NVT_DPCD_TRAINING_PATTERN_SET 0x102
5004 #define NVT_DPCD_TRAINING_PATTERN_SET_TRAINING_PATTERN_SET 1:0
5005 #define NVT_DPCD_TRAINING_PATTERN_SET_TRAINING_PATTERN_SET_NOT_IN_PROGRESS 0
5006 #define NVT_DPCD_TRAINING_PATTERN_SET_TRAINING_PATTERN_SET_PATTERN_1 1
5007 #define NVT_DPCD_TRAINING_PATTERN_SET_TRAINING_PATTERN_SET_PATTERN_2 2
5008 #define NVT_DPCD_TRAINING_PATTERN_SET_TRAINING_PATTERN_SET_RSVD 3
5009 #define NVT_DPCD_TRAINING_PATTERN_SET_LINK_QUAL_PATTERN_SET 3:2
5010 #define NVT_DPCD_TRAINING_PATTERN_SET_LINK_QUAL_PATTERN_SET_NOT_TRANSMITTED 0
5011 #define NVT_DPCD_TRAINING_PATTERN_SET_LINK_QUAL_PATTERN_SET_D10_2 1
5012 #define NVT_DPCD_TRAINING_PATTERN_SET_LINK_QUAL_PATTERN_SET_SERMPT 2
5013 #define NVT_DPCD_TRAINING_PATTERN_SET_LINK_QUAL_PATTERN_SET_PRBS7 3
5014 #define NVT_DPCD_TRAINING_PATTERN_SET_RECOVERED_CLOCK_OUT_EN 4:4
5015 #define NVT_DPCD_TRAINING_PATTERN_SET_RECOVERED_CLOCK_OUT_EN_NO 0
5016 #define NVT_DPCD_TRAINING_PATTERN_SET_RECOVERED_CLOCK_OUT_EN_YES 1
5017 #define NVT_DPCD_TRAINING_PATTERN_SET_SCRAMBLING_DISABLE 5:5
5018 #define NVT_DPCD_TRAINING_PATTERN_SET_SCRAMBLING_DISABLE_NO 0
5019 #define NVT_DPCD_TRAINING_PATTERN_SET_SCRAMBLING_DISABLE_YES 1
5020 #define NVT_DPCD_TRAINING_PATTERN_SET_SYMBOL_ERROR_COUNT_SEL 7:6
5021 #define NVT_DPCD_TRAINING_PATTERN_SET_SYMBOL_ERROR_COUNT_SEL_DIS_ERROR 0
5022 #define NVT_DPCD_TRAINING_PATTERN_SET_SYMBOL_ERROR_COUNT_SEL_D_ERROR 1
5023 #define NVT_DPCD_TRAINING_PATTERN_SET_SYMBOL_ERROR_COUNT_SEL_IS_ERROR 2
5024 #define NVT_DPCD_TRAINING_PATTERN_SET_SYMBOL_ERROR_COUNT_SEL_RSVD 3
5025
5026 // 0x103h ~ 0x106h - TRAINING_LANE?_SET
5027 #define NVT_DPCD_TRAINING_LANE0_SET 0x103
5028 #define NVT_DPCD_TRAINING_LANE1_SET 0x104
5029 #define NVT_DPCD_TRAINING_LANE2_SET 0x105
5030 #define NVT_DPCD_TRAINING_LANE3_SET 0x106
5031 #define NVT_DPCD_TRAINING_LANE0_SET_VOLTAGE_SWING_SET 1:0
5032 #define NVT_DPCD_TRAINING_LANE0_SET_VOLTAGE_SWING_SET_TP1_VS_L0 0
5033 #define NVT_DPCD_TRAINING_LANE0_SET_VOLTAGE_SWING_SET_TP1_VS_L1 1
5034 #define NVT_DPCD_TRAINING_LANE0_SET_VOLTAGE_SWING_SET_TP1_VS_L2 2
5035 #define NVT_DPCD_TRAINING_LANE0_SET_VOLTAGE_SWING_SET_TP1_VS_L3 3
5036 #define NVT_DPCD_TRAINING_LANE0_SET_MAX_SWING_REACHED 2:2
5037 #define NVT_DPCD_TRAINING_LANE0_SET_MAX_SWING_REACHED_NO 0
5038 #define NVT_DPCD_TRAINING_LANE0_SET_MAX_SWING_REACHED_YES 1
5039 #define NVT_DPCD_TRAINING_LANE0_SET_PRE_EMPHASIS_SET 4:3
5040 #define NVT_DPCD_TRAINING_LANE0_SET_PRE_EMPHASIS_SET_TP2_PE_NONE 0
5041 #define NVT_DPCD_TRAINING_LANE0_SET_PRE_EMPHASIS_SET_TP2_PE_L1 1
5042 #define NVT_DPCD_TRAINING_LANE0_SET_PRE_EMPHASIS_SET_TP2_PE_L2 2
5043 #define NVT_DPCD_TRAINING_LANE0_SET_PRE_EMPHASIS_SET_TP2_PE_L3 3
5044 #define NVT_DPCD_TRAINING_LANE0_SET_MAX_PRE_EMPHASIS_REACHED 5:5
5045 #define NVT_DPCD_TRAINING_LANE0_SET_MAX_PRE_EMPHASIS_REACHED_NO 0
5046 #define NVT_DPCD_TRAINING_LANE0_SET_MAX_PRE_EMPHASIS_REACHED_YES 1
5047 #define NVT_DPCD_TRAINING_LANE0_SET_RSVD 7:6
5048
5049 // 0x107h - DOWNSPREAD_CTRL
5050 #define NVT_DPCD_DOWNSPREAD_CTRL 0x107
5051 #define NVT_DPCD_DOWNSPREAD_CTRL_RSVD 3:0
5052 #define NVT_DPCD_DOWNSPREAD_CTRL_SPREAD_AMP 4:4
5053 #define NVT_DPCD_DOWNSPREAD_CTRL_SPREAD_AMP_NO 0
5054 #define NVT_DPCD_DOWNSPREAD_CTRL_SPREAD_AMP_YES 1
5055 #define NVT_DPCD_DOWNSPREAD_CTRL_RSVD_2 7:5
5056
5057 // 0x108h - MAIN_LINK_CHANNEL_CODING_SET
5058 #define NVT_DPCD_MAIN_LINK_CHANNEL_CODING_SET 0x108
5059 #define NVT_DPCD_MAIN_LINK_CHANNEL_CODING_SET_SET_ANSI8B10B 0:0
5060 #define NVT_DPCD_MAIN_LINK_CHANNEL_CODING_SET_RSVD 7:1
5061
5062 // 0x111h - MSTM_CTRL
5063 #define NVT_DPCD_MSTM_CTRL 0x111
5064 #define NVT_DPCD_MSTM_CTRL_MST_EN 0:0
5065 #define NVT_DPCD_MSTM_CTRL_MST_EN_NO 0
5066 #define NVT_DPCD_MSTM_CTRL_MST_EN_YES 1
5067 #define NVT_DPCD_MSTM_CTRL_UP_REQ_EN 1:1
5068 #define NVT_DPCD_MSTM_CTRL_UP_REQ_EN_NO 0
5069 #define NVT_DPCD_MSTM_CTRL_UP_REQ_EN_YES 1
5070 #define NVT_DPCD_MSTM_CTRL_UPSTREAM_IS_SRC 2:2
5071 #define NVT_DPCD_MSTM_CTRL_UPSTREAM_IS_SRC_NO 0
5072 #define NVT_DPCD_MSTM_CTRL_UPSTREAM_IS_SRC_YES 1
5073 #define NVT_DPCD_MSTM_CTRL_MST_RSVD 7:3
5074
5075 // 0x1A1h - BRANCH_DEVICE_CTRL
5076 #define NVT_DPCD_BRANCH_DEVICE_CTRL 0x1A1
5077 #define NVT_DPCD_BRANCH_DEVICE_CTRL_HPD_NOTIF_TYPE 0:0
5078 #define NVT_DPCD_BRANCH_DEVICE_CTRL_HPD_NOTIF_TYPE_LONG_HPD_PULSE 0
5079 #define NVT_DPCD_BRANCH_DEVICE_CTRL_HPD_NOTIF_TYPE_SHORT_IRQ_PULSE 1
5080 #define NVT_DPCD_BRANCH_DEVICE_CTRL_RSVD 7:1
5081
5082 #define NVT_DPCD_PAYLOAD_ALLOCATE_SET 0x1C0
5083 #define NVT_DPCD_PAYLOAD_ALLOCATE_SET_VC_ID 6:0
5084
5085 #define NVT_DPCD_PAYLOAD_ALLOCATE_START_TIME_SLOT 0x1C1
5086 #define NVT_DPCD_PAYLOAD_ALLOCATE_START_TIME_SLOT_FIELD 5:0
5087
5088 #define NVT_DPCD_PAYLOAD_ALLOCATE_TIME_SLOT_COUNT 0x1C2
5089 #define NVT_DPCD_PAYLOAD_ALLOCATE_TIME_SLOT_COUNT_FIELD 5:0
5090
5091 // 0x200h - SINK_COUNT
5092 #define NVT_DPCD_SINK_COUNT 0x200
5093 #define NVT_DPCD_SINK_COUNT_SINK_COUNT 5:0
5094 #define NVT_DPCD_SINK_COUNT_CP_READY 6:6
5095 #define NVT_DPCD_SINK_COUNT_RSVD 7:7
5096
5097 // 0x201h - DEVICE_SERVICE_IRQ_VECTOR
5098 #define NVT_DPCD_DEVICE_SERVICE_IRQ_VECTOR 0x201
5099 #define NVT_DPCD_DEVICE_SERVICE_IRQ_VECTOR_RSVD_REMOTE_CTRL_CMD_PENDING 0:0
5100 #define NVT_DPCD_DEVICE_SERVICE_IRQ_VECTOR_AUTOMATED_TEST_REQUEST 1:1
5101 #define NVT_DPCD_DEVICE_SERVICE_IRQ_VECTOR_CP_IRQ 2:2
5102 #define NVT_DPCD_DEVICE_SERVICE_IRQ_VECTOR_MCCS_IRQ 3:3
5103 #define NVT_DPCD_DEVICE_SERVICE_IRQ_VECTOR_DOWN_REP_MSG_READY 4:4
5104 #define NVT_DPCD_DEVICE_SERVICE_IRQ_VECTOR_UP_REQ_MSG_READY 5:5
5105 #define NVT_DPCD_DEVICE_SERVICE_IRQ_VECTOR_SINK_SPECIFIC_IRQ 6:6
5106 #define NVT_DPCD_DEVICE_SERVICE_IRQ_VECTOR_RSVD_2 7:7
5107
5108 // 0x202h ~ 0x203h - LANE0_1_STATUS
5109 #define NVT_DPCD_LANE0_1_STATUS 0x202
5110 #define NVT_DPCD_LANE2_3_STATUS 0x203
5111 #define NVT_DPCD_LANE0_1_STATUS_LANE0_CR_DONE 0:0
5112 #define NVT_DPCD_LANE0_1_STATUS_LANE0_CHANNEL_EQ_DONE 1:1
5113 #define NVT_DPCD_LANE0_1_STATUS_LANE0_SYMBOL_LOCKED 2:2
5114 #define NVT_DPCD_LANE0_1_STATUS_RSVD 3:3
5115 #define NVT_DPCD_LANE0_1_STATUS_LANE1_CR_DONE 4:4
5116 #define NVT_DPCD_LANE0_1_STATUS_LANE1_CHANNEL_EQ_DONE 5:5
5117 #define NVT_DPCD_LANE0_1_STATUS_LANE1_SYMBOL_LOCKED 6:6
5118 #define NVT_DPCD_LANE0_1_STATUS_RSVD_2 7:7
5119
5120 // 0x204h - LANE_ALIGN_STATUS_UPDATED
5121 // Temporary until Linux/Apple change their code.
5122 #define NVT_DPCD_LANE_ALIGN_STAUTS_UPDATED NVT_DPCD_LANE_ALIGN_STATUS_UPDATED
5123 #define NVT_DPCD_LANE_ALIGN_STATUS_UPDATED 0x204
5124 #define NVT_DPCD_LANE_ALIGN_STATUS_UPDATED_INTERLANE_ALIGN_DONE 0:0
5125 #define NVT_DPCD_LANE_ALIGN_STATUS_UPDATED_RSVD 5:1
5126 #define NVT_DPCD_LANE_ALIGN_STATUS_UPDATED_DOWNSTREAM_PORT_STATUS_CHANGED 6:6
5127 #define NVT_DPCD_LANE_ALIGN_STATUS_UPDATED_LINK_STATUS_UPDATED 7:7
5128
5129 // 0x205 - SINK_STATUS
5130 #define NVT_DPCD_SINK_STATUS 0x205
5131 #define NVT_DPCD_SINK_STATUS_RECEIVE_PORT_0_STATUS 0:0
5132 #define NVT_DPCD_SINK_STATUS_RECEIVE_PORT_0_STATUS_OUT_OF_SYNC 0
5133 #define NVT_DPCD_SINK_STATUS_RECEIVE_PORT_0_STATUS_IN_SYNC 1
5134 #define NVT_DPCD_SINK_STATUS_RECEIVE_PORT_1_STATUS 1:1
5135 #define NVT_DPCD_SINK_STATUS_RECEIVE_PORT_1_STATUS_OUT_OF_SYNC 0
5136 #define NVT_DPCD_SINK_STATUS_RECEIVE_PORT_1_STATUS_IN_SYNC 1
5137 #define NVT_DPCD_SINK_STATUS_RSVD 7:2
5138
5139 // 0x206h ~ 0x207h - ADJUST_REQUEST_LANE0_1
5140 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1 0x206
5141 #define NVT_DPCD_ADJUST_REQUEST_LANE2_3 0x207
5142 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_VOLTAGE_SWING_LANE0 1:0
5143 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_VOLTAGE_SWING_LANE0_LEVEL_0 0
5144 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_VOLTAGE_SWING_LANE0_LEVEL_1 1
5145 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_VOLTAGE_SWING_LANE0_LEVEL_2 2
5146 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_VOLTAGE_SWING_LANE0_LEVEL_3 3
5147 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_PRE_EMPHASIS_LANE0 3:2
5148 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_PRE_EMPHASIS_LANE0_LEVEL_0 0
5149 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_PRE_EMPHASIS_LANE0_LEVEL_1 1
5150 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_PRE_EMPHASIS_LANE0_LEVEL_2 2
5151 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_PRE_EMPHASIS_LANE0_LEVEL_3 3
5152 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_VOLTAGE_SWING_LANE1 5:4
5153 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_VOLTAGE_SWING_LANE1_LEVEL_0 0
5154 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_VOLTAGE_SWING_LANE1_LEVEL_1 1
5155 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_VOLTAGE_SWING_LANE1_LEVEL_2 2
5156 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_VOLTAGE_SWING_LANE1_LEVEL_3 3
5157 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_PRE_EMPHASIS_LANE1 7:6
5158 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_PRE_EMPHASIS_LANE1_LEVEL_0 0
5159 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_PRE_EMPHASIS_LANE1_LEVEL_1 1
5160 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_PRE_EMPHASIS_LANE1_LEVEL_2 2
5161 #define NVT_DPCD_ADJUST_REQUEST_LANE0_1_PRE_EMPHASIS_LANE1_LEVEL_3 3
5162
5163 // 0x208h ~ 0x20Bh TRAINING_SCORE_LANE0~3
5164 #define NVT_DPCD_TRAINING_SCORE_LANE0 0x208
5165 #define NVT_DPCD_TRAINING_SCORE_LANE1 0x209
5166 #define NVT_DPCD_TRAINING_SCORE_LANE2 0x20A
5167 #define NVT_DPCD_TRAINING_SCORE_LANE3 0x20B
5168
5169 // 0x210h ~ 0x217h SYMBOL_ERROR_COUNT_LANE0 (16bit)
5170 #define NVT_DPCD_SYMBOL_ERROR_COUNT_LANE0_LO 0x210
5171 #define NVT_DPCD_SYMBOL_ERROR_COUNT_LANE0_HI 0x211
5172 #define NVT_DPCD_SYMBOL_ERROR_COUNT_LANE1_LO 0x212
5173 #define NVT_DPCD_SYMBOL_ERROR_COUNT_LANE1_HI 0x213
5174 #define NVT_DPCD_SYMBOL_ERROR_COUNT_LANE2_LO 0x214
5175 #define NVT_DPCD_SYMBOL_ERROR_COUNT_LANE2_HI 0x215
5176 #define NVT_DPCD_SYMBOL_ERROR_COUNT_LANE3_LO 0x216
5177 #define NVT_DPCD_SYMBOL_ERROR_COUNT_LANE3_HI 0x217
5178 #define NVT_DPCD_SYMBOL_ERROR_COUNT_LANE0_ERROR_COUNT_LO 7:0
5179 #define NVT_DPCD_SYMBOL_ERROR_COUNT_LANE0_ERROR_COUNT_HI 6:0
5180 #define NVT_DPCD_SYMBOL_ERROR_COUNT_LANE0_ERROR_COUNT_VALID 7:7
5181
5182 // 0x218h TEST_REQUEST
5183 #define NVT_DPCD_TEST_REQUEST 0x218
5184 #define NVT_DPCD_TEST_REQUEST_TEST_LINK_TRAINING 0:0
5185 #define NVT_DPCD_TEST_REQUEST_TEST_PATTERN 1:1
5186 #define NVT_DPCD_TEST_REQUEST_TEST_EDID_READ 2:2
5187 #define NVT_DPCD_TEST_REQUEST_PHY_TEST_PATTERN 3:3
5188 #define NVT_DPCD_TEST_REQUEST_RSVD 7:4
5189
5190 // 0x219h TEST_LINK_RATE
5191 #define NVT_DPCD_TEST_LINK_RATE 0x219
5192
5193 // 0x220h TEST_LANE_COUNT
5194 #define NVT_DPCD_TEST_LANE_COUNT 0x220
5195 #define NVT_DPCD_TEST_LANE_COUNT_TEST_LANE_COUNT 4:0
5196 #define NVT_DPCD_TEST_LANE_COUNT_TEST_LANE_COUNT_ONE_LANE 1
5197 #define NVT_DPCD_TEST_LANE_COUNT_TEST_LANE_COUNT_TWO_LANES 2
5198 #define NVT_DPCD_TEST_LANE_COUNT_TEST_LANE_COUNT_FOUR_LANES 4
5199 #define NVT_DPCD_TEST_LANE_COUNT_RSVD 7:5
5200
5201 // 0x221h TEST_PATTERN
5202 #define NVT_DPCD_TEST_PATTERN 0x221
5203 #define NVT_DPCD_TEST_PATTERN_NO_TEST_PATTERN_TRANSMITTED 0
5204 #define NVT_DPCD_TEST_PATTERN_COLOR_RAMPS 1
5205 #define NVT_DPCD_TEST_PATTERN_BLACK_AND_WHITE_VERTICAL_LINES 2
5206 #define NVT_DPCD_TEST_PATTERN_COLOR_SQUARE 3
5207
5208 // 0x222h ~ 0x223h TEST_H_TOTAL
5209 #define NVT_DPCD_TEST_H_TOTAL_HI 0x222
5210 #define NVT_DPCD_TEST_H_TOTAL_LO 0x223
5211
5212 // 0x224h ~ 0x225h TEST_V_TOTAL
5213 #define NVT_DPCD_TEST_V_TOTAL_HI 0x224
5214 #define NVT_DPCD_TEST_V_TOTAL_LO 0x225
5215
5216 // 0x226h ~ 0x227h TEST_H_START
5217 #define NVT_DPCD_TEST_H_START_HI 0x226
5218 #define NVT_DPCD_TEST_H_START_LO 0x227
5219
5220 // 0x228h ~ 0x229h TEST_V_START
5221 #define NVT_DPCD_TEST_V_START_HI 0x228
5222 #define NVT_DPCD_TEST_V_START_LO 0x229
5223
5224 // 0x22Ah ~ 0x22Bh TEST_HSYNC
5225 #define NVT_DPCD_TEST_HSYNC_HI 0x22A
5226 #define NVT_DPCD_TEST_HSYNC_LO 0x22B
5227 #define NVT_DPCD_TEST_HSYNC_HI_TEST_HSYNC_WIDTH_14_8 6:0
5228 #define NVT_DPCD_TEST_HSYNC_HI_TEST_HSYNC_POLARITY 7:7
5229
5230 // 0x22Ch ~ 0x22Dh TEST_VSYNC
5231 #define NVT_DPCD_TEST_VSYNC_HI 0x22C
5232 #define NVT_DPCD_TEST_VSYNC_LO 0x22D
5233 #define NVT_DPCD_TEST_VSYNC_HI_TEST_VSYNC_WIDTH_14_8 6:0
5234 #define NVT_DPCD_TEST_VSYNC_HI_TEST_VSYNC_POLARITY 7:7
5235
5236 // 0x22Eh ~ 0x22Fh TEST_H_WIDTH
5237 #define NVT_DPCD_TEST_H_WIDTH_HI 0x22E
5238 #define NVT_DPCD_TEST_H_WIDTH_LO 0x22F
5239
5240 // 0x230h ~ 0x231h TEST_V_WIDTH
5241 #define NVT_DPCD_TEST_V_HEIGHT_HI 0x230
5242 #define NVT_DPCD_TEST_V_HEIGHT_LO 0x231
5243
5244 // 0x232h ~ 0x233h TEST_MISC
5245 #define NVT_DPCD_TEST_MISC_LO 0x232
5246 #define NVT_DPCD_TEST_MISC_LO_TEST_SYNCHRONOUS_CLOCK 0:0
5247 #define NVT_DPCD_TEST_MISC_LO_TEST_SYNCHRONOUS_CLOCK_ASYNC 0
5248 #define NVT_DPCD_TEST_MISC_LO_TEST_SYNCHRONOUS_CLOCK_SYNC 1
5249 #define NVT_DPCD_TEST_MISC_LO_TEST_COLOR_FORMAT 2:1
5250 #define NVT_DPCD_TEST_MISC_LO_TEST_COLOR_FORMAT_RGB 0
5251 #define NVT_DPCD_TEST_MISC_LO_TEST_COLOR_FORMAT_YCbCr422 1
5252 #define NVT_DPCD_TEST_MISC_LO_TEST_COLOR_FORMAT_YCbCr444 2
5253 #define NVT_DPCD_TEST_MISC_LO_TEST_COLOR_FORMAT_RSVD 3
5254 #define NVT_DPCD_TEST_MISC_LO_TEST_DYNAMIC_RANGE 3:3
5255 #define NVT_DPCD_TEST_MISC_LO_TEST_DYNAMIC_RANGE_VESA 0
5256 #define NVT_DPCD_TEST_MISC_LO_TEST_DYNAMIC_RANGE_CEA 1
5257 #define NVT_DPCD_TEST_MISC_LO_TEST_YCBCR_COEFFICIENTS 4:4
5258 #define NVT_DPCD_TEST_MISC_LO_TEST_YCBCR_COEFFICIENTS_ITU601 0
5259 #define NVT_DPCD_TEST_MISC_LO_TEST_YCBCR_COEFFICIENTS_ITU709 1
5260 #define NVT_DPCD_TEST_MISC_LO_TEST_BIT_DEPTH 7:5
5261 #define NVT_DPCD_TEST_MISC_LO_TEST_BIT_DEPTH_6BPC 0
5262 #define NVT_DPCD_TEST_MISC_LO_TEST_BIT_DEPTH_8BPC 1
5263 #define NVT_DPCD_TEST_MISC_LO_TEST_BIT_DEPTH_10BPC 2
5264 #define NVT_DPCD_TEST_MISC_LO_TEST_BIT_DEPTH_12BPC 3
5265 #define NVT_DPCD_TEST_MISC_LO_TEST_BIT_DEPTH_16BPC 4
5266 #define NVT_DPCD_TEST_MISC_HI 0x233
5267 #define NVT_DPCD_TEST_MISC_HI_TEST_REFRESH_DENOMINATOR 0:0
5268 #define NVT_DPCD_TEST_MISC_HI_TEST_REFRESH_DENOMINATOR_1 0
5269 #define NVT_DPCD_TEST_MISC_HI_TEST_REFRESH_DENOMINATOR_1001 1
5270 #define NVT_DPCD_TEST_MISC_HI_TEST_INTERLACED 1:1
5271 #define NVT_DPCD_TEST_MISC_HI_TEST_INTERLACED_NO 0
5272 #define NVT_DPCD_TEST_MISC_HI_TEST_INTERLACED_YES 1
5273 #define NVT_DPCD_TEST_MISC_HI_TEST_INTERLACED_RSVD 7:2
5274
5275 // 0x234h TEST_REFRESH_RATE_NUMERATOR
5276 #define NVT_DPCD_TEST_REFRESH_RATE_NUMERATOR 0x234
5277
5278 // 0x240h ~ 0x241h TEST_CRC_R_Cr
5279 #define NVT_DPCD_TEST_CRC_R_Cr_LO 0x240
5280 #define NVT_DPCD_TEST_CRC_R_Cr_HI 0x241
5281
5282 // 0x242h ~ 0x243h TEST_CRC_G_Y
5283 #define NVT_DPCD_TEST_CRC_G_Y_LO 0x242
5284 #define NVT_DPCD_TEST_CRC_G_Y_HI 0x243
5285
5286 // 0x244h ~ 0x245h TEST_CRC_B_Cb
5287 #define NVT_DPCD_TEST_CRC_B_Cb_LO 0x244
5288 #define NVT_DPCD_TEST_CRC_B_Cb_HI 0x245
5289
5290 // 0x246h TEST_SINC_MISC
5291 #define NVT_DPCD_TEST_SINK_MISC 0x246
5292 #define NVT_DPCD_TEST_SINK_MISC_TEST_CRC_COUNT 3:0
5293 #define NVT_DPCD_TEST_SINK_MISC_TEST_CRC_SUPPORTED 5:5
5294 #define NVT_DPCD_TEST_SINK_MISC_TEST_CRC_SUPPORTED_NO 0
5295 #define NVT_DPCD_TEST_SINK_MISC_TEST_CRC_SUPPORTED_YES 1
5296 #define NVT_DPCD_TEST_SINK_MISC_RSVD 7:6
5297
5298 // 0x248h PHY_TEST_PATTERN
5299 #define NVT_DPCD_PHY_TEST_PATTERN 0x248
5300 #define NVT_DPCD_PHY_TEST_PATTERN_PHY_TEST_PATTERN_SEL 1:0
5301 #define NVT_DPCD_PHY_TEST_PATTERN_PHY_TEST_PATTERN_SEL_NO_TEST_PATTERN 0
5302 #define NVT_DPCD_PHY_TEST_PATTERN_PHY_TEST_PATTERN_SEL_D10_2 1
5303 #define NVT_DPCD_PHY_TEST_PATTERN_PHY_TEST_PATTERN_SEL_SEMC 2
5304 #define NVT_DPCD_PHY_TEST_PATTERN_PHY_TEST_PATTERN_SEL_PRBS7 3
5305 #define NVT_DPCD_PHY_TEST_PATTERN_RSVD 7:2
5306
5307 // 0x260h TEST_RESPONSE
5308 #define NVT_DPCD_TEST_RESPONSE 0x260
5309 #define NVT_DPCD_TEST_RESPONSE_TEST_ACK 0:0
5310 #define NVT_DPCD_TEST_RESPONSE_TEST_ACK_KEEP_TEST_REQ 0
5311 #define NVT_DPCD_TEST_RESPONSE_TEST_ACK_CLEAR_TEST_REQ 1
5312 #define NVT_DPCD_TEST_RESPONSE_TEST_NAK 1:1
5313 #define NVT_DPCD_TEST_RESPONSE_TEST_NACK_KEEP_TEST_REQ 0
5314 #define NVT_DPCD_TEST_RESPONSE_TEST_NACK_CLEAR_TEST_REQ 1
5315 #define NVT_DPCD_TEST_RESPONSE_TEST_EDID_CHECKSUM_WRITE 2:2
5316 #define NVT_DPCD_TEST_RESPONSE_TEST_EDID_CHECKSUM_WRITE_NO 0
5317 #define NVT_DPCD_TEST_RESPONSE_TEST_EDID_CHECKSUM_WRITE_YES 1
5318 #define NVT_DPCD_TEST_RESPONSE_RSVD 7:3
5319
5320 // 0x261h TEST_EDID_CHECKSUM
5321 #define NVT_DPCD_TEST_EDID_CHECKSUM 0x261
5322
5323 // 0x270 TEST_SINK
5324 #define NVT_DPCD_TEST_SINK 0x270
5325 #define NVT_DPCD_TEST_SINK_TEST_SINK_START 0:0
5326 #define NVT_DPCD_TEST_SINK_TEST_SINK_START_STOP_CALC_CRC 0
5327 #define NVT_DPCD_TEST_SINK_TEST_SINK_START_START_CALC_CRC 1
5328 #define NVT_DPCD_TEST_SINK_RSVD 7:1
5329
5330 #define NVT_DPCD_PAYLOAD_TABLE_UPDATE_STATUS 0x2C0
5331 #define NVT_DPCD_PAYLOAD_TABLE_UPDATE_STATUS_TABLE_UPDATED 0:0
5332 #define NVT_DPCD_PAYLOAD_TABLE_UPDATE_STATUS_TABLE_UPDATED_NO 0
5333 #define NVT_DPCD_PAYLOAD_TABLE_UPDATE_STATUS_TABLE_UPDATED_YES 1
5334 #define NVT_DPCD_PAYLOAD_TABLE_UPDATE_STATUS_ACT_HANDLED 1:1
5335 #define NVT_DPCD_PAYLOAD_TABLE_UPDATE_STATUS_ACT_HANDLED_NO 0
5336 #define NVT_DPCD_PAYLOAD_TABLE_UPDATE_STATUS_ACT_HANDLED_YES 1
5337
5338 // 0x300h ~ 0x302h SOURCE_IEEE_OUT
5339 #define NVT_DPCD_SOURCE_IEEE_OUT_7_0 0x300
5340 #define NVT_DPCD_SOURCE_IEEE_OUT_15_8 0x301
5341 #define NVT_DPCD_SOURCE_IEEE_OUT_23_16 0x302
5342
5343 // 0x400h ~ 0x402h SINK_IEEE_OUT
5344 #define NVT_DPCD_SINK_IEEE_OUT_7_0 0x400
5345 #define NVT_DPCD_SINK_IEEE_OUT_15_8 0x401
5346 #define NVT_DPCD_SINK_IEEE_OUT_23_16 0x402
5347
5348 // 0x500h ~ 0x502h BRANCH_IEEE_OUT
5349 #define NVT_DPCD_BRANCH_IEEE_OUT_7_0 0x500
5350 #define NVT_DPCD_BRANCH_IEEE_OUT_15_8 0x501
5351 #define NVT_DPCD_BRANCH_IEEE_OUT_23_16 0x502
5352
5353 // 0x600 SET_POWER
5354 #define NVT_DPCD_SET_POWER 0x600
5355 #define NVT_DPCD_SET_POWER_SET_POWER_STATE 1:0
5356 #define NVT_DPCD_SET_POWER_SET_POWER_STATE_RSVD 0
5357 #define NVT_DPCD_SET_POWER_SET_POWER_STATE_D0 1
5358 #define NVT_DPCD_SET_POWER_SET_POWER_STATE_D3 2
5359 #define NVT_DPCD_SET_POWER_SET_POWER_STATE_RSVD_2 3
5360 #define NVT_DPCD_SET_POWER_RSVD 7:2
5361
5362 //*************************************
5363 // DP 1.2 Main Stream Attribute Fiedls
5364 //*************************************
5365
5366 #define NVT_DP_INFOFRAME_MSA_MISC0_SYNC_CLOCK_MASK 0x01 // MISC0 bit 0 Synchronous Clock
5367 #define NVT_DP_INFOFRAME_MSA_MISC0_SYNC_CLOCK_SHIFT 0x0
5368 #define NVT_DP_INFOFRAME_MSA_MISC0_SYNC_CLOCK_ASYNC 0x0
5369 #define NVT_DP_INFOFRAME_MSA_MISC0_SYNC_CLOCK_INSYNC 0x1
5370
5371 #define NVT_DP_INFOFRAME_MSA_MISC0_BITS_PER_COLOR_MASK 0xe0 // MISC0 bits 7:5 number of bits per color
5372 #define NVT_DP_INFOFRAME_MSA_MISC0_BITS_PER_COLOR_SHIFT 0x5
5373 #define NVT_DP_INFOFRAME_MSA_MISC0_BITS_PER_COLOR_6 0x0
5374 #define NVT_DP_INFOFRAME_MSA_MISC0_BITS_PER_COLOR_8 0x1
5375 #define NVT_DP_INFOFRAME_MSA_MISC0_BITS_PER_COLOR_10 0x2
5376 #define NVT_DP_INFOFRAME_MSA_MISC0_BITS_PER_COLOR_12 0x3
5377 #define NVT_DP_INFOFRAME_MSA_MISC0_BITS_PER_COLOR_16 0x4
5378
5379 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_MASK 0x1e // MISC0 bits 4:1 Color Encoding Format and Content Color Gamut
5380 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_SHIFT 0x1
5381 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_LEGACY 0x0 // RGB unspecified color space (legacy RGB mode)
5382 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_CEA_RGB 0x4 // CEA RGB (sRGB primaries)
5383 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_WIDE_GAMUT_FIXED_POINT 0x3 // RGB wide gamut fixed point (XR8,XR10, XR12)
5384 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_WIDE_GAMUT_FLOAT_POINT 0xb // RGB wide gamut floating point(scRGB)
5385 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_YCBCR_422_ITU601 0x5
5386 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_YCBCR_422_ITU709 0xd
5387 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_YCBCR_444_ITU601 0x6
5388 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_YCBCR_444_ITU709 0xe
5389 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_XVYCC_422_ITU601 0x1
5390 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_XVYCC_422_ITU709 0x9
5391 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_XVYCC_444_ITU601 0x2
5392 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_XVYCC_444_ITU709 0xa
5393 #define NVT_DP_INFOFRAME_MSA_MISC0_COLOR_FORMAT_ADOBE_RGB 0xc
5394
5395 #define NVT_DP_INFOFRAME_MSA_MISC1_INTERLACED_V_TOTAL_MASK 0x01 // MISC1 bit 0 Interlaced Vertical Total
5396 #define NVT_DP_INFOFRAME_MSA_MISC1_INTERLACED_V_TOTAL_SHIFT 0x0
5397 #define NVT_DP_INFOFRAME_MSA_MISC1_INTERLACED_V_TOTAL_ODD 0x0
5398 #define NVT_DP_INFOFRAME_MSA_MISC1_INTERLACED_V_TOTAL_EVEN 0x1
5399
5400 #define NVT_DP_INFOFRAME_MSA_MISC1_STEREO_MASK 0x06 // MISC1 bits 2:1 stereo video attribute
5401 #define NVT_DP_INFOFRAME_MSA_MISC1_STEREO_SHIFT 0x1
5402 #define NVT_DP_INFOFRAME_MSA_MISC1_STEREO_NONE 0x0
5403 #define NVT_DP_INFOFRAME_MSA_MISC1_STEREO_RIGHT_LEFT 0x1
5404 #define NVT_DP_INFOFRAME_MSA_MISC1_STEREO_LEFT_RIGHT 0x3
5405 #define NVT_DP_INFOFRAME_MSA_MISC1_STEREO_RESERVED 0x2
5406
5407 #define NVT_DP_INFOFRAME_MSA_MISC1_RESERVED_MASK 0x38 // MISC1 bits 5:3 reserved (DP1.3). Note: DP1.2 MISC 6:3 is reserved and undefined.
5408 #define NVT_DP_INFOFRAME_MSA_MISC1_RESERVED_SHIFT 0x3
5409 #define NVT_DP_INFOFRAME_MSA_MISC1_RESERVED_DEFAULT 0x0
5410
5411 #define NVT_DP_INFOFRAME_MSA_MISC1_VSC_SDP_MASK 0x40 // MISC1 bit Using VSC SDP, and sink to ignore MISC1 bit 7 and MISC0 7:1.
5412 #define NVT_DP_INFOFRAME_MSA_MISC1_VSC_SDP_SHIFT 0x6
5413 #define NVT_DP_INFOFRAME_MSA_MISC1_VSC_SDP_DISABLE 0x0
5414 #define NVT_DP_INFOFRAME_MSA_MISC1_VSC_SDP_ENABLE 0x1
5415
5416 #define NVT_DP_INFOFRAME_MSA_MISC1_BITS_PER_COLOR_OR_LUMINANCE_MASK 0x80 // MISC1 bit 7 Y-Only Video
5417 #define NVT_DP_INFOFRAME_MSA_MISC1_BITS_PER_COLOR_OR_LUMINANCE_SHIFT 0x7
5418 #define NVT_DP_INFOFRAME_MSA_MISC1_BITS_PER_COLOR 0x0
5419 #define NVT_DP_INFOFRAME_MSA_MISC1_BITS_PER_LUMINANCE 0x1
5420
5421 // ************************
5422 // ** HDCP DPCD 1.0 Spec **
5423 // ************************
5424
5425 // 0x68029 BSTATUS
5426 #define NVT_DPCD_HDCP_BSTATUS 0x68029
5427 #define NVT_DPCD_HDCP_BSTATUS_LINK_INTEGRITY_FAILURE 0x04
5428 #define NVT_DPCD_HDCP_BSTATUS_REAUTHENTICATION_REQUEST 0x08
5429
5430 #define NVT_DPCD_HDCP_BCAPS_OFFSET 0x00068028
5431 #define NVT_DPCD_HDCP_BCAPS_OFFSET_HDCP_CAPABLE 0:0
5432 #define NVT_DPCD_HDCP_BCAPS_OFFSET_HDCP_CAPABLE_NO 0x00000000
5433 #define NVT_DPCD_HDCP_BCAPS_OFFSET_HDCP_CAPABLE_YES 0x00000001
5434 #define NVT_DPCD_HDCP_BCAPS_OFFSET_HDCP_REPEATER 1:1
5435 #define NVT_DPCD_HDCP_BCAPS_OFFSET_HDCP_REPEATER_NO 0x00000000
5436 #define NVT_DPCD_HDCP_BCAPS_OFFSET_HDCP_REPEATER_YES 0x00000001
5437
5438 #define NVT_DPCD_HDCP_BKSV_OFFSET 0x00068000
5439 #define HDCP_KSV_SIZE 5
5440
5441
5442 // *********************************************
5443 // ** Vendor DPCD for Apple's mDP->VGA dongle **
5444 // *********************************************
5445
5446 // 0x30F DP2VGA_I2C_SPEED_CONTROL
5447 #define NVT_DPCD_DP2VGA_I2C_SPEED_CONTROL 0x30F
5448
5449 // 0x50C DP2VGA_GENERAL_STATUS
5450 #define NVT_DPCD_DP2VGA_GENERAL_STATUS 0x50C
5451
5452 // 0x50D DP2VGA_I2C_SPEED_CAP
5453 #define NVT_DPCD_DP2VGA_I2C_SPEED_CAP 0x50D
5454 #define NVT_DPCD_DP2VGA_I2C_SPEED_CAP_SLOWEST 0xFF
5455 #define NVT_DPCD_DP2VGA_I2C_SPEED_CAP_1KBPS 0x01
5456 #define NVT_DPCD_DP2VGA_I2C_SPEED_CAP_3KBPS 0x02
5457 #define NVT_DPCD_DP2VGA_I2C_SPEED_CAP_10KBPS 0x04
5458 #define NVT_DPCD_DP2VGA_I2C_SPEED_CAP_100KBPS 0x08
5459 #define NVT_DPCD_DP2VGA_I2C_SPEED_CAP_400KBPS 0x10
5460 #define NVT_DPCD_DP2VGA_I2C_SPEED_CAP_1MBPS 0x20
5461
5462
5463 //
5464 // HDMI/DP common definitions
5465
5466 #define NVT_DYNAMIC_RANGE_VESA 0x00
5467 #define NVT_DYNAMIC_RANGE_CEA 0x01
5468 #define NVT_DYNAMIC_RANGE_AUTO 0xFF
5469
5470
5471 typedef struct tagNVT_PARSED_DPCD_INFO_DOWNSTREAM_PORT
5472 {
5473 NvU8 type : 3; // the downstream port type
5474 NvU8 isHpdAware : 1; // if it's HPD aware
5475 NvU8 reserved : 4;
5476 }NVT_PARSED_DPCD_INFO_DOWNSTREAM_PORT;
5477 //
5478 typedef struct tagNVT_DPCD_PARSED_RECEIVER_INFO
5479 {
5480 // receiver info
5481 NvU32 rev; // DPCD version number
5482 NvU32 maxLinkRate; // the max link rate of main link lanes in 10KHz
5483 NvU32 maxLaneCount; // the max number of lanes
5484 NvU32 numOfPorts; // the number of receiver ports
5485 NvU32 p0BufferSizePerLane; // the buffer size per lane (in BYTE)
5486 NvU32 p1BufferSizePerLane; // the buffer size per lane (in BYTE)
5487
5488 // downstream port info
5489 NvU32 downstreamPortCount; // the total number of down stream ports
5490 NvU32 downstreamPort0Type; // type of downstream port 0
5491 NVT_PARSED_DPCD_INFO_DOWNSTREAM_PORT downstreamPort[NVT_DPCD_RECEIVER_MAX_DOWNSTREAM_PORT];
5492
5493 // other misc info
5494 NvU32 cap_support0_005DownSpread : 1;
5495 NvU32 cap_supportEnhancedFrame : 1;
5496 NvU32 cap_noAuxHandshakeLinkTraining : 1;
5497 NvU32 cap_downstreamPortHasFormatConvBlk : 1;
5498 NvU32 cap_mainLinkChSupportANSI8B10B : 1;
5499 NvU32 cap_downstreamPortSupportOUI : 1;
5500 NvU32 cap_p0HasEDID : 1;
5501 NvU32 cap_p0AssociatedToPrecedingPort : 1;
5502 NvU32 cap_p1HasEDID : 1;
5503 NvU32 cap_p1AssociatedToPrecedingPort : 1;
5504
5505 // DP 1.2 fields
5506 NvU32 cap_mstm : 1;
5507 NvU32 cap_reserved : 21;
5508 }NVT_DPCD_PARSED_RECEIVER_INFO;
5509
5510 #define NVT_DPCD_NUM_TRAINING_LANES 4
5511
5512 typedef struct tagNVT_TRAINING_LANE_SETTING
5513 {
5514 NvU8 voltageSwing;
5515 NvU8 maxSwingReached;
5516 NvU8 preEmphasis;
5517 NvU8 maxPreEmphasisReached;
5518 }NVT_TRAINING_LANE_SETTING;
5519
5520 // 00100h LINK CONFIGURATION FIELD
5521 typedef struct tagNVT_DPCD_PARSED_LINK_CONFIG
5522 {
5523 NvU8 linkRate;
5524 NvU8 laneCount;
5525
5526 NVT_TRAINING_LANE_SETTING trainLaneSetting[NVT_DPCD_NUM_TRAINING_LANES];
5527
5528 NvU32 enhancedFrameEnabled : 1;
5529 NvU32 trainingPatternSetting : 2;
5530 NvU32 linkQualityPatternSetting : 2;
5531 NvU32 recoveredClockOutputEnabled : 1;
5532 NvU32 scramblingDisable : 1;
5533 NvU32 symbolErrorCount : 2;
5534 NvU32 spreadAmp : 1;
5535 NvU32 mainLinkCoding8b10b : 1;
5536 NvU32 multiStreamEnabled : 1;
5537 NvU32 reserved : 19;
5538 }NVT_DPCD_PARSED_LINK_CONFIG;
5539
5540 typedef struct tagNVT_DPCD_INFO
5541 {
5542 NVT_DPCD_PARSED_RECEIVER_INFO receiver;
5543 NVT_DPCD_PARSED_LINK_CONFIG linkConfig;
5544 NvU32 sourceOUI;
5545 NvU32 sinkOUI;
5546 NvU32 branchOUI;
5547 }NVT_DPCD_INFO;
5548
5549 typedef struct tagNVT_DPCD_CONFIG
5550 {
5551 NvU32 dpInfoFlags;
5552 #define NV_DISPLAYPORT_INFO_FLAGS_DP_ENABLED 0:0
5553 #define NV_DISPLAYPORT_INFO_FLAGS_DP_ENABLED_FALSE (0x00000000)
5554 #define NV_DISPLAYPORT_INFO_FLAGS_DP_ENABLED_TRUE (0x00000001)
5555 #define NV_DISPLAYPORT_INFO_FLAGS_DONGLE_TYPE 7:4
5556 #define NV_DISPLAYPORT_INFO_FLAGS_DONGLE_TYPE_NONE (0x00000000)
5557 #define NV_DISPLAYPORT_INFO_FLAGS_DONGLE_TYPE_DP2DVI (0x00000001) // B2: dp2dvi-singlelink
5558 #define NV_DISPLAYPORT_INFO_FLAGS_DONGLE_TYPE_DP2HDMI (0x00000002) // dp2hdmi
5559 #define NV_DISPLAYPORT_INFO_FLAGS_DONGLE_TYPE_DP2DVI2 (0x00000003) // B3: dp2dvi-duallink
5560 #define NV_DISPLAYPORT_INFO_FLAGS_DONGLE_TYPE_DP2VGA (0x00000004) // B4: dp2vga
5561 #define NV_DISPLAYPORT_INFO_FLAGS_DONGLE_TYPE_DP2TV (0x00000005) // Composite/SVideo
5562 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MAX_CAP_LANECOUNT 10:8 // Maximum supported laneCount
5563 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MAX_CAP_LANECOUNT_1_LANE (0x00000000)
5564 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MAX_CAP_LANECOUNT_2_LANE (0x00000001)
5565 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MAX_CAP_LANECOUNT_4_LANE (0x00000002)
5566 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MAX_CAP_LINKRATE 13:11 // Maximum supported linkRate
5567 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MAX_CAP_LINKRATE_1_62GBPS (0x00000000)
5568 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MAX_CAP_LINKRATE_2_70GBPS (0x00000001)
5569 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MAX_CAP_LINKRATE_5_40GBPS (0x00000002)
5570 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MAX_CAP_LINKRATE_8_10GBPS (0x00000003)
5571 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MULTISTREAM 16:16 // Bit to check MST/SST
5572 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MULTISTREAM_DISABLED (0x00000000)
5573 #define NV_DISPLAYPORT_INFO_FLAGS_DP_MULTISTREAM_ENABLED (0x00000001)
5574 #define NV_DISPLAYPORT_INFO_FLAGS_DP_ENHANCED_FRAMING 17:17 // Bit to check enhanced framing support
5575 #define NV_DISPLAYPORT_INFO_FLAGS_DP_ENHANCED_FRAMING_DISABLED (0x00000000)
5576 #define NV_DISPLAYPORT_INFO_FLAGS_DP_ENHANCED_FRAMING_ENABLED (0x00000001)
5577 #define NV_DISPLAYPORT_INFO_FLAGS_DP_DOWNSPREAD 18:18 // Bit to check downspread support
5578 #define NV_DISPLAYPORT_INFO_FLAGS_DP_DOWNSPREAD_DISABLED (0x00000000)
5579 #define NV_DISPLAYPORT_INFO_FLAGS_DP_DOWNSPREAD_ENABLED (0x00000001)
5580 #define NV_DISPLAYPORT_INFO_FLAGS_DP_SCRAMBLING 19:19 // Bit to check scrambling
5581 #define NV_DISPLAYPORT_INFO_FLAGS_DP_SCRAMBLING_DISABLED (0x00000000)
5582 #define NV_DISPLAYPORT_INFO_FLAGS_DP_SCRAMBLING_ENABLED (0x00000001)
5583 NvU32 linkRate;
5584 NvU32 laneCount;
5585 NvU32 colorFormat;
5586 NvU32 dynamicRange;
5587 NvU32 colorimetry;
5588 NvU32 bpc;
5589 NvU32 bpp;
5590
5591 // pre-emphasis and drive current level (EFI might need this information)
5592 NvU8 laneData[4];
5593 // DP max pixelClock supported based on DP max laneCount/linkRate
5594 NvU32 dpMaxPixelClk;
5595 NvU8 maxCapLinkRate;
5596 NvU8 maxCapLaneCount;
5597
5598 // B4 (DP2VGA) Vendor Specific I2C Speed Control
5599 NvU8 dp2vga_i2cCap;
5600 NvU8 dp2vga_i2cCtrl;
5601
5602 NvU8 bDpOffline;
5603 }NVT_DPCD_CONFIG;
5604
5605 typedef struct tagNVT_DPCD_DP_TUNNELING_CAPS
5606 {
5607 NvU8 dpTunneling : 1; // DP Tunneling through USB4 Support
5608 NvU8 reserved : 5; // Reserved.
5609 NvU8 dpPanelReplayTunnelingOptSupport : 1; // Panel Replay Tunneling Optimization Support
5610 NvU8 dpInBwAllocationModeSupport : 1; // DP IN Bandwidth Allocation Mode Support
5611 }NVT_DPCD_DP_TUNNELING_CAPS;
5612
5613 typedef struct tagNVT_DPCD_DP_IN_ADAPTER_INFO
5614 {
5615 NvU8 dpInAdapterNumber : 6; // DP IN Adapter Number
5616 NvU8 reserved : 2;
5617 }NVT_DPCD_DP_IN_ADAPTER_INFO;
5618
5619 typedef struct tagNVT_DPCD_USB4_DRIVER_ID
5620 {
5621 NvU8 usb4DriverId : 4; // USB4 Driver ID
5622 NvU8 reserved : 4;
5623 }NVT_DPCD_USB4_DRIVER_ID;
5624
5625 //******************************
5626 // Intel EDID Like Data (ELD)
5627 //******************************
5628 #define NVT_ELD_VER_1 0x1 // ELD version 1, which is an obsolete ELD structure. Treated as reserved
5629 #define NVT_ELD_VER_2 0x2 // ELD version 2, which supports CEA version 861-D or below. Max baseline ELD size of 80 bytes (15 short audio descriptors)
5630 #define NVT_ELD_VER_VIDEO_DRIVER_UNLOAD 0x1F // Indicates an ELD that has been partially populated through implementation specific mean of default programming before an external
5631 // graphics driver is load, Only the fields that is called out as "canned" fields will be populated, and audio driver should
5632 // ignore the non "canned" fields.
5633 #define NVT_ELD_CONN_TYPE_HDMI 0x0 // indicates an HDMI connection type
5634 #define NVT_ELD_CONN_TYPE_DP 0x1 // indicates a DP connection type
5635
5636
5637 //******************************
5638 // Audio
5639 //******************************
5640 #define NVT_AUDIO_768KHZ 768000 // HBR Audio
5641 #define NVT_AUDIO_384KHZ 384000 // HBR Audio
5642 #define NVT_AUDIO_192KHZ 192000
5643 #define NVT_AUDIO_176KHZ 176000
5644 #define NVT_AUDIO_96KHZ 96000
5645 #define NVT_AUDIO_88KHZ 88000
5646 #define NVT_AUDIO_48KHZ 48000
5647 #define NVT_AUDIO_44KHZ 44000
5648 #define NVT_AUDIO_32KHZ 32000
5649
5650 //Default format for HDTV is NVT_DEFAULT_HDTV_FMT i.e 1080i
5651 #define NVT_DEFAULT_HDTV_PREFERRED_TIMING(x, y, z, p) \
5652 if(((x) == 1920) && ((y) == 1080) && ((z) != D3DDDI_VSSLO_PROGRESSIVE )) p = 1;
5653
5654 //Default format for non-DDC displays is 10x7
5655 #define NVT_DEFAULT_NONDCC_PREFERRED_TIMING(x, y, z, p) \
5656 if(((x) == 1024) && ((y) == 768) && ((z) == 60 )) p = 1;
5657
5658
5659 // Length of user-friendly monitor name, derived from the EDID's
5660 // Display Product Name descriptor block, plus the EDID manufacturer PNP
5661 // ID. The Display Product can be distributed across four 13-byte
5662 // descriptor blocks, and the PNP ID currently decodes to at most 40
5663 // characters: 4*13 + 40 = 92
5664 #define NVT_EDID_MONITOR_NAME_STRING_LENGTH 96
5665
5666 // Compute the actual size of an EDID with a pointer to an NVT_EDID_INFO.
NVT_EDID_ACTUAL_SIZE(const NVT_EDID_INFO * pInfo)5667 static NV_INLINE NvU32 NVT_EDID_ACTUAL_SIZE(const NVT_EDID_INFO *pInfo)
5668 {
5669 return (pInfo->total_extensions + 1) * 128;
5670 }
5671
5672 //******************************
5673 //******************************
5674 //** the export functions **
5675 //******************************
5676 //******************************
5677
5678 // the common timing function return values
5679 typedef enum
5680 {
5681 NVT_STATUS_SUCCESS = 0, // Success (no status)
5682 NVT_STATUS_ERR = 0x80000000, // generic get timing error
5683 NVT_STATUS_INVALID_PARAMETER, // passed an invalid parameter
5684 NVT_STATUS_NO_MEMORY, // memory allocation failed
5685 NVT_STATUS_COLOR_FORMAT_NOT_SUPPORTED,
5686 NVT_STATUS_INVALID_HBLANK,
5687 NVT_STATUS_INVALID_BPC,
5688 NVT_STATUS_INVALID_BPP,
5689 NVT_STATUS_MAX_LINE_BUFFER_ERROR,
5690 NVT_STATUS_OVERALL_THROUGHPUT_ERROR,
5691 NVT_STATUS_DSC_SLICE_ERROR,
5692 NVT_STATUS_PPS_SLICE_COUNT_ERROR,
5693 NVT_STATUS_PPS_SLICE_HEIGHT_ERROR,
5694 NVT_STATUS_PPS_SLICE_WIDTH_ERROR,
5695 NVT_STATUS_INVALID_PEAK_THROUGHPUT,
5696 NVT_STATUS_MIN_SLICE_COUNT_ERROR,
5697 } NVT_STATUS;
5698
5699 //*************************************
5700 // The EDID validation Mask
5701 //*************************************
5702 #define NVT_EDID_VALIDATION_MASK 0xFFFFFFFF
5703 #define NVT_IS_EDID_VALIDATION_FLAGS(x, n) ((((x)&NVT_EDID_VALIDATION_MASK)) & NVBIT32(n))
5704 #define NVT_CLEAR_EDID_VALIDATION_FLAGS(x, n) ((x)&=(~NVBIT32(n)))
5705
5706 typedef enum
5707 {
5708 // errors returned as a bitmask by NvTiming_EDIDValidationMask()
5709 NVT_EDID_VALIDATION_ERR_EXT = 0,
5710 NVT_EDID_VALIDATION_ERR_VERSION,
5711 NVT_EDID_VALIDATION_ERR_SIZE,
5712 NVT_EDID_VALIDATION_ERR_CHECKSUM,
5713 NVT_EDID_VALIDATION_ERR_RANGE_LIMIT,
5714 NVT_EDID_VALIDATION_ERR_DTD,
5715 NVT_EDID_VALIDATION_ERR_HEADER,
5716 NVT_EDID_VALIDATION_ERR_EXT_DTD,
5717 NVT_EDID_VALIDATION_ERR_EXTENSION_TAG,
5718 NVT_EDID_VALIDATION_ERR_EXTENSION_COUNT,
5719 NVT_EDID_VALIDATION_ERR_DESCRIPTOR,
5720 NVT_EDID_VALIDATION_ERR_EXT_CTA_BASIC,
5721 NVT_EDID_VALIDATION_ERR_EXT_CTA_DTD,
5722 NVT_EDID_VALIDATION_ERR_EXT_CTA_TAG,
5723 NVT_EDID_VALIDATION_ERR_EXT_CTA_SVD,
5724 NVT_EDID_VALIDATION_ERR_EXT_CTA_INVALID_DATA_BLOCK,
5725 NVT_EDID_VALIDATION_ERR_EXT_CTA_CHECKSUM,
5726 NVT_EDID_VALIDATION_ERR_EXT_DID_VERSION,
5727 NVT_EDID_VALIDATION_ERR_EXT_DID_EXTCOUNT,
5728 NVT_EDID_VALIDATION_ERR_EXT_DID_CHECKSUM,
5729 NVT_EDID_VALIDATION_ERR_EXT_DID_SEC_SIZE,
5730 NVT_EDID_VALIDATION_ERR_EXT_DID13_TAG,
5731 NVT_EDID_VALIDATION_ERR_EXT_DID13_TYPE1,
5732 NVT_EDID_VALIDATION_ERR_EXT_DID2_TAG,
5733 NVT_EDID_VALIDATION_ERR_EXT_DID2_USE_CASE,
5734 NVT_EDID_VALIDATION_ERR_EXT_DID2_MANDATORY_BLOCKS,
5735 NVT_EDID_VALIDATION_ERR_EXT_DID2_TYPE7,
5736 NVT_EDID_VALIDATION_ERR_EXT_DID2_TYPE10,
5737 NVT_EDID_VALIDATION_ERR_EXT_RANGE_LIMIT,
5738 NVT_EDID_VALIDATION_ERR_EXT_DID2_ADAPTIVE_SYNC,
5739 } NVT_EDID_VALIDATION_ERR_STATUS;
5740 #define NVT_EDID_VALIDATION_ERR_MASK(x) NVBIT32(x)
5741
5742 //*************************************
5743 // The DisplayID2 validation Mask
5744 //*************************************
5745 typedef enum
5746 {
5747 // errors returned as a bitmask by NvTiming_DisplayID2ValidationMask()
5748 NVT_DID2_VALIDATION_ERR_VERSION = 0,
5749 NVT_DID2_VALIDATION_ERR_SIZE,
5750 NVT_DID2_VALIDATION_ERR_CHECKSUM,
5751 NVT_DID2_VALIDATION_ERR_NO_DATA_BLOCK,
5752 NVT_EDID_VALIDATION_ERR_TAG,
5753 NVT_DID2_VALIDATION_ERR_RANGE_LIMIT,
5754 NVT_DID2_VALIDATION_ERR_NATIVE_DTD,
5755 NVT_DID2_VALIDATION_ERR_MANDATORY_BLOCKS,
5756 NVT_DID2_VALIDATION_ERR_PRODUCT_IDENTIFY,
5757 NVT_DID2_VALIDATION_ERR_PARAMETER,
5758 NVT_DID2_VALIDATION_ERR_INTERFACE,
5759 NVT_DID2_VALIDATION_ERR_TYPE7,
5760 NVT_DID2_VALIDATION_ERR_TYPE10,
5761 NVT_DID2_VALIDATION_ERR_ADAPTIVE_SYNC,
5762 } NVT_DID2_VALIDATION_ERR_STATUS;
5763 #define NVT_DID2_VALIDATION_ERR_MASK(x) NVBIT32(x)
5764
5765 // timing calculation flags:
5766 #define NVT_FLAG_PROGRESSIVE_TIMING 0x00000000
5767 #define NVT_FLAG_INTERLACED_TIMING NVT_INTERLACED
5768 #define NVT_FLAG_INTERLACED_TIMING2 NVT_INTERLACED_NO_EXTRA_VBLANK_ON_FIELD2 //without extra vblank on field 2
5769 #define NVT_FLAG_DOUBLE_SCAN_TIMING 0x00000010
5770 #define NVT_FLAG_REDUCED_BLANKING_TIMING 0x00000020
5771 #define NVT_FLAG_MAX_EDID_TIMING 0x00000040
5772 #define NVT_FLAG_NV_DOUBLE_SCAN_TIMING 0x00000080
5773 #define NVT_FLAG_NATIVE_TIMING 0x00000100
5774 #define NVT_FLAG_EDID_TIMING 0x00000200
5775 #define NVT_FLAG_CEA_4X3_TIMING 0x00000400
5776 #define NVT_FLAG_CEA_16X9_TIMING 0x00000800
5777 #define NVT_FLAG_OS_ADDED_TIMING 0x00001000
5778 #define NVT_FLAG_SPECTRUM_SPREAD 0x00002000
5779 #define NVT_FLAG_EDID_TIMING_RR_MATCH 0x00004000
5780 #define NVT_FLAG_EDID_861_ST 0x00008000
5781 #define NVT_FLAG_EDID_DTD_EIZO_SPLIT 0x00010000
5782 #define NVT_FLAG_DTD1_TIMING 0x00020000
5783 #define NVT_FLAG_NV_PREFERRED_TIMING 0x00040000
5784 #define NVT_FLAG_DTD1_PREFERRED_TIMING 0x00080000
5785 #define NVT_FLAG_DISPLAYID_DTD_PREFERRED_TIMING 0x00100000
5786 #define NVT_FLAG_CTA_PREFERRED_TIMING 0x00200000
5787 #define NVT_FLAG_DISPLAYID_T7_DSC_PASSTHRU 0x00400000
5788 #define NVT_FLAG_DISPLAYID_2_0_TIMING 0x00800000 // this one for the CTA861 embedded in DID20
5789 #define NVT_FLAG_DISPLAYID_T7_T8_EXPLICT_YUV420 0x01000000 // DID2 E7 spec. supported yuv420 indicated
5790 #define NVT_FLAG_CTA_NATIVE_TIMING 0x02000000 // NVRDB defined
5791 #define NVT_FLAG_CTA_OVT_TIMING 0x04000000 // CTA861 CTA OVT Timing
5792 #define NVT_FLAG_CTA_OVT_FRR_TIMING 0x08000000 // CTA861 CTA OVT Timing supported ntsc
5793
5794 #define NVT_FLAG_INTERLACED_MASK (NVT_FLAG_INTERLACED_TIMING | NVT_FLAG_INTERLACED_TIMING2)
5795
5796 #ifdef __cplusplus
5797 extern "C" {
5798 #endif
5799
5800 // Generic timing parameter calculation
5801 NvU16 NvTiming_CalcRR(NvU32 pclk, NvU16 interlaced, NvU16 HTotal, NvU16 VTotal);
5802 NvU32 NvTiming_CalcRRx1k(NvU32 pclk, NvU16 interlaced, NvU16 HTotal, NvU16 VTotal);
5803
5804 NvU32 NvTiming_IsRoundedRREqual(NvU16 rr1, NvU32 rr1x1k, NvU16 rr2);
5805 NvU32 NvTiming_IsTimingExactEqual(const NVT_TIMING *pT1, const NVT_TIMING *pT2);
5806 NvU32 NvTiming_IsTimingExactEqualEx(const NVT_TIMING *pT1, const NVT_TIMING *pT2);
5807 NvU32 NvTiming_IsTimingRelaxedEqual(const NVT_TIMING *pT1, const NVT_TIMING *pT2);
5808 NvU16 NvTiming_MaxFrameWidth(NvU16 HVisible, NvU16 rep);
5809
5810 NvU32 NvTiming_GetVrrFmin(const NVT_EDID_INFO *pEdidInfo, const NVT_DISPLAYID_2_0_INFO *pDisplayIdInfo,
5811 NvU32 nominalRefreshRateHz, NVT_PROTOCOL sinkProtocol);
5812
5813 // Establish timing enumeration
5814 NVT_STATUS NvTiming_EnumEST(NvU32 index, NVT_TIMING *pT);
5815 NVT_STATUS NvTiming_EnumESTIII(NvU32 index, NVT_TIMING *pT);
5816
5817 // GTF timing calculation
5818 NVT_STATUS NvTiming_CalcGTF(NvU32 width, NvU32 height, NvU32 rr, NvU32 flag, NVT_TIMING *pT);
5819
5820 // DMT timing calculation
5821 NVT_STATUS NvTiming_EnumDMT(NvU32 dmtId, NVT_TIMING *pT);
5822 NVT_STATUS NvTiming_EnumStdTwoBytesCode(NvU16 std2ByteCodes, NVT_TIMING *pT);
5823 NVT_STATUS NvTiming_CalcDMT(NvU32 width, NvU32 height, NvU32 rr, NvU32 flag, NVT_TIMING *pT);
5824 NVT_STATUS NvTiming_CalcDMT_RB(NvU32 width, NvU32 height, NvU32 rr, NvU32 flag, NVT_TIMING *pT);
5825 NVT_STATUS NvTiming_CalcDMT_RB2(NvU32 width, NvU32 height, NvU32 rr, NvU32 flag, NVT_TIMING *pT);
5826
5827 // CVT timing calculation
5828 NVT_STATUS NvTiming_CalcCVT(NvU32 width, NvU32 height, NvU32 rr, NvU32 flag, NVT_TIMING *pT);
5829 NVT_STATUS NvTiming_CalcCVT_RB(NvU32 width, NvU32 height, NvU32 rr, NvU32 flag, NVT_TIMING *pT);
5830 NVT_STATUS NvTiming_CalcCVT_RB2(NvU32 width, NvU32 height, NvU32 rr, NvBool is1000div1001, NVT_TIMING *pT);
5831 NVT_STATUS NvTiming_CalcCVT_RB3(NvU32 width, NvU32 height, NvU32 rr, NvU32 deltaHBlank, NvU32 vBlankMicroSec, NvBool isEarlyVSync, NVT_TIMING *pT);
5832 NvBool NvTiming_IsTimingCVTRB(const NVT_TIMING *pTiming);
5833
5834 // OVT timing calculation
5835 NVT_STATUS NvTiming_CalcOVT(NvU32 width, NvU32 height, NvU32 rr, NVT_TIMING *pT);
5836 NvBool NvTiming_IsTimingOVT(const NVT_TIMING *pTiming);
5837
5838 // CEA/EIA/Psf timing
5839 NVT_STATUS NvTiming_CalcCEA861bTiming(NvU32 width, NvU32 height, NvU32 rr, NvU32 flag, NvU32 pixelRepeatCount, NVT_TIMING *pT);
5840 NVT_STATUS NvTiming_EnumCEA861bTiming(NvU32 ceaFormat, NVT_TIMING *pT);
5841 NVT_STATUS NvTiming_EnumNvPsfTiming(NvU32 nvPsfFormat, NVT_TIMING *pT);
5842 NvU32 NvTiming_GetCEA861TimingIndex(NVT_TIMING *pT);
5843
5844 //expose the HDMI extended video timing defined by the HDMI LLC VSDB
5845 NVT_STATUS NvTiming_EnumHdmiVsdbExtendedTiming(NvU32 hdmi_vic, NVT_TIMING *pT);
5846
5847 // TV(analog) based timing
5848 NVT_STATUS NvTiming_GetTvTiming(NvU32 width, NvU32 height, NvU32 rr, NvU32 flag, NvU32 tvFormat, NVT_TIMING *pT);
5849
5850 // Get EDID timing
5851 NVT_STATUS NvTiming_GetEdidTimingExWithPclk(NvU32 width, NvU32 height, NvU32 rr, NvU32 flag, NVT_EDID_INFO *pEdidInfo, NVT_TIMING *pT, NvU32 rrx1k, NvU32 pclk);
5852 NVT_STATUS NvTiming_GetEdidTimingEx(NvU32 width, NvU32 height, NvU32 rr, NvU32 flag, NVT_EDID_INFO *pEdidInfo, NVT_TIMING *pT, NvU32 rrx1k);
5853 NVT_STATUS NvTiming_GetEdidTiming(NvU32 width, NvU32 height, NvU32 rr, NvU32 flag, NVT_EDID_INFO *pEdidInfo, NVT_TIMING *pT);
5854
5855 // Get EDID based HDMI Stereo timing
5856 NVT_STATUS NvTiming_GetHDMIStereoExtTimingFromEDID(NvU32 width, NvU32 height, NvU32 rr, NvU8 structure, NvU8 detail, NvU32 flag, NVT_EDID_INFO *pEdidInfo, NVT_EXT_TIMING *pT);
5857 void NvTiming_GetHDMIStereoTimingFrom2DTiming(const NVT_TIMING *pTiming, NvU8 StereoStructureType, NvU8 SideBySideHalfDetail, NVT_EXT_TIMING *pExtTiming);
5858 NVT_STATUS NvTiming_GetHDMIStereoMandatoryFormatDetail(const NvU8 vic, NvU16 *pStereoStructureMask, NvU8 *pSideBySideHalfDetail);
5859
5860 // EDID based AspectRatio Timing
5861 NVT_STATUS NvTiming_GetEDIDBasedASPRTiming(NvU16 width, NvU16 height, NvU16 rr, NVT_EDID_INFO *pEI, NVT_TIMING *ft);
5862
5863 // EDID or DISPLAYID2 version
5864 NvU32 NvTiming_GetVESADisplayDescriptorVersion(NvU8 *rawData, NvU32 *pVer);
5865
5866 // EDID entry parse
5867 NVT_STATUS NV_STDCALL NvTiming_ParseEDIDInfo(NvU8 *pEdid, NvU32 length, NVT_EDID_INFO *pEdidInfo);
5868 NvU32 NvTiming_EDIDValidationMask(NvU8 *pEdid, NvU32 length, NvBool bIsStrongValidation);
5869 NvU32 NvTiming_EDIDStrongValidationMask(NvU8 *pEdid, NvU32 length);
5870 NVT_STATUS NvTiming_EDIDValidation(NvU8 *pEdid, NvU32 length, NvBool bIsStrongValidation);
5871
5872 // DisplayID20 standalone entry parse
5873 NVT_STATUS NV_STDCALL NvTiming_parseDisplayId20Info(const NvU8 *pDisplayId, NvU32 length, NVT_DISPLAYID_2_0_INFO *pDisplayIdInfo);
5874 NvU32 NvTiming_DisplayID2ValidationMask(NVT_DISPLAYID_2_0_INFO *pDisplayIdInfo, NvBool bIsStrongValidation);
5875 NVT_STATUS NvTiming_DisplayID2ValidationDataBlocks(NVT_DISPLAYID_2_0_INFO *pDisplayIdInfo, NvBool bIsStrongValidation);
5876
5877 NVT_STATUS NvTiming_Get18ByteLongDescriptorIndex(NVT_EDID_INFO *pEdidInfo, NvU8 tag, NvU32 *dtdIndex);
5878 NVT_STATUS NvTiming_GetProductName(const NVT_EDID_INFO *pEdidInfo, NvU8 *pProductName, const NvU32 productNameLength);
5879 NvU32 NvTiming_CalculateEDIDCRC32(NvU8* pEDIDBuffer, NvU32 edidsize);
5880 NvU32 NvTiming_CalculateCommonEDIDCRC32(NvU8* pEDIDBuffer, NvU32 edidVersion);
5881 NVT_STATUS NvTiming_CalculateEDIDLimits(NVT_EDID_INFO *pEdidInfo, NVT_EDID_RANGE_LIMIT *pLimit);
5882 void NvTiming_GetMonitorName(NVT_EDID_INFO *pEdidInfo, NvU8 monitor_name[NVT_EDID_MONITOR_NAME_STRING_LENGTH]);
5883
5884 // utility routines
5885 NvU64 axb_div_c_64(NvU64 a, NvU64 b, NvU64 c);
5886 NvU32 axb_div_c(NvU32 a, NvU32 b, NvU32 c);
5887 NvU32 a_div_b(NvU32 a, NvU32 b);
5888 NvU32 calculateCRC32(NvU8* pBuf, NvU32 bufsize);
5889 void patchChecksum(NvU8* pBuf);
5890 NvBool isChecksumValid(NvU8* pBuf);
5891 NvU32 RRx1kToPclk (NVT_TIMING *pT);
5892
5893 NVT_STATUS NvTiming_ComposeCustTimingString(NVT_TIMING *pT);
5894
5895 // Infoframe/SDP composer
5896 NVT_STATUS NvTiming_ConstructVideoInfoframeCtrl(const NVT_TIMING *pTiming, NVT_VIDEO_INFOFRAME_CTRL *pCtrl);
5897 NVT_STATUS NvTiming_ConstructVideoInfoframe(NVT_EDID_INFO *pEdidInfo, NVT_VIDEO_INFOFRAME_CTRL *pCtrl, NVT_VIDEO_INFOFRAME *pContext, NVT_VIDEO_INFOFRAME *p);
5898 NVT_STATUS NvTiming_ConstructAudioInfoframe(NVT_AUDIO_INFOFRAME_CTRL *pCtrl, NVT_AUDIO_INFOFRAME *pContext, NVT_AUDIO_INFOFRAME *p);
5899 NVT_STATUS NvTiming_ConstructVendorSpecificInfoframe(NVT_EDID_INFO *pEdidInfo, NVT_VENDOR_SPECIFIC_INFOFRAME_CTRL *pCtrl, NVT_VENDOR_SPECIFIC_INFOFRAME *p);
5900 NVT_STATUS NvTiming_ConstructExtendedMetadataPacketInfoframe(NVT_EXTENDED_METADATA_PACKET_INFOFRAME_CTRL *pCtrl, NVT_EXTENDED_METADATA_PACKET_INFOFRAME *p);
5901 void NvTiming_ConstructAdaptiveSyncSDP(const NVT_ADAPTIVE_SYNC_SDP_CTRL *pCtrl, NVT_ADAPTIVE_SYNC_SDP *p);
5902
5903
5904 // Get specific timing from parsed EDID
5905 NVT_STATUS NvTiming_GetDTD1Timing (NVT_EDID_INFO * pEdidInfo, NVT_TIMING * pT);
5906
5907 #define NVT_IS_DTD(d) (NVT_GET_TIMING_STATUS_TYPE((d)) == NVT_TYPE_EDID_DTD)
5908 #define NVT_IS_EXT_DTD(d) (NVT_GET_TIMING_STATUS_TYPE((d)) == NVT_TYPE_EDID_EXT_DTD)
5909 #define NVT_IS_CTA861(d) (NVT_GET_TIMING_STATUS_TYPE((d)) == NVT_TYPE_EDID_861ST)
5910 #define NVT_IS_CTA861_DID_T7(d) (NVT_GET_TIMING_STATUS_TYPE((d)) == NVT_TYPE_CTA861_DID_T7)
5911 #define NVT_IS_CTA861_DID_T8(d) (NVT_GET_TIMING_STATUS_TYPE((d)) == NVT_TYPE_CTA861_DID_T8)
5912 #define NVT_IS_CTA861_DID_T10(d) (NVT_GET_TIMING_STATUS_TYPE((d)) == NVT_TYPE_CTA861_DID_T10)
5913
5914 #define NVT_IS_DTD1(d) ((NVT_IS_DTD((d))) && (NVT_GET_TIMING_STATUS_SEQ((d)) == 1))
5915 #define NVT_IS_DTDn(d, n) ((NVT_IS_DTD((d))) && (NVT_GET_TIMING_STATUS_SEQ((d)) == n))
5916 #define NVT_IS_EXT_DTDn(d, n) ((NVT_IS_EXT_DTD((d))) && (NVT_GET_TIMING_STATUS_SEQ((d)) == n))
5917 #define NVT_IS_CTA861_DID_T7n(d, n) ((NVT_IS_CTA861_DID_T7((d))) && (NVT_GET_TIMING_STATUS_SEQ((d)) == n))
5918 #define NVT_IS_CTA861_DID_T8_1(d) ((NVT_IS_CTA861_DID_T8((d))) && (NVT_GET_TIMING_STATUS_SEQ((d)) == 1))
5919 #define NVT_IS_CTA861_DID_T10n(d, n) ((NVT_IS_CTA861_DID_T10((d))) && (NVT_GET_TIMING_STATUS_SEQ((d)) == n))
5920
5921 #define NVT_IS_CTA861_OVT_Tn(flag, status, n) ((0 != (NVT_FLAG_CTA_OVT_TIMING & (flag))) && (NVT_GET_TIMING_STATUS_SEQ((status)) == n))
5922
5923 #define NVT_DID20_TIMING_IS_CTA861(flag, status) ((NVT_IS_CTA861((status))) && (0 != (NVT_FLAG_DISPLAYID_2_0_TIMING & (flag))))
5924 #define NVT_PREFERRED_TIMING_IS_DTD1(flag, status) ((NVT_IS_DTD1((status))) && (0 != (NVT_FLAG_DTD1_PREFERRED_TIMING & (flag))))
5925 #define NVT_PREFERRED_TIMING_IS_DISPLAYID(flag) (0 != (NVT_FLAG_DISPLAYID_DTD_PREFERRED_TIMING & flag))
5926 #define NVT_PREFERRED_TIMING_IS_CTA(flag) (0 != (NVT_FLAG_CTA_PREFERRED_TIMING & flag))
5927 #define NVT_NATIVE_TIMING_IS_CTA(flag) (0 != (NVT_FLAG_CTA_NATIVE_TIMING & flag))
5928 #define NVT_TIMING_IS_OVT(flag) (0 != (NVT_FLAG_CTA_OVT_TIMING & flag))
5929 #define NVT_FRR_TIMING_IS_OVT(flag) (0 != (NVT_FLAG_CTA_OVT_FRR_TIMING & flag))
5930
5931 #ifdef __cplusplus
5932 }
5933 #endif
5934
5935 #endif //__NVTIMING_H__
5936