• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2008 NVIDIA, Corporation
3  *
4  * Permission is hereby granted, free of charge, to any person obtaining a copy
5  * of this software and associated documentation files (the "Software"), to deal
6  * in the Software without restriction, including without limitation the rights
7  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
8  * copies of the Software, and to permit persons to whom the Software is
9  * furnished to do so, subject to the following conditions:
10  *
11  * The above copyright notice and this permission notice (including the next
12  * paragraph) shall be included in all copies or substantial portions of the
13  * Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
18  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21  * SOFTWARE.
22  *
23  *
24  * NV-CONTROL Protocol Version History
25  *
26  * 1.0 - 1.5   NVIDIA Internal development versions
27  * 1.6         Initial public version
28  * 1.7         Added QueryBinaryData request
29  * 1.8         Added TargetTypes
30  * 1.9         Added QueryTargetCount request
31  * 1.10        Fixed target type/id byte ordering for compatibility with
32  *             pre-1.8 NV-CONTROL clients
33  * 1.11        NVIDIA Internal development version
34  * 1.12        Added StringOperation request
35  * 1.13        NVIDIA Internal development version
36  * 1.14        Fixed an NV_CTRL_BINARY_DATA_MODELINES double scan modeline
37  *             reporting bug (vsyncstart, vsyncend, and vtotal were incorrectly
38  *             doubled)
39  * 1.15        Added AVAILABILITY_TARGET_ATTRIBUTE_CHANGED_EVENT
40  * 1.16        Added TARGET_STRING_ATTRIBUTE_CHANGED_EVENT
41  * 1.17        Added TARGET_BINARY_ATTRIBUTE_CHANGED_EVENT
42  * 1.18        Updated QueryTargetCount to return a count of 0, rather than
43  *             BadMatch, if an unknown TargetType is specified
44  * 1.19        Added TargetType support for SetAttributeAndGetStatus and
45  *             SetStringAttribute requests
46  * 1.20        Added COOLER TargetType
47  * 1.21        Added initial 64-bit integer attribute support (read-only)
48  * 1.22        Added X_nvCtrlQueryValidStringAttributeValues to check
49  *             string attribute permissions.
50  * 1.23        Added SENSOR TargetType
51  * 1.24        Fixed a bug where SLI_MOSAIC_MODE_AVAILABLE attribute would
52  *             report false positives via the GPU and X screen target types
53  * 1.25        Added 3D_VISION_PRO_TRANSCEIVER TargetType
54  * 1.26        Added XNVCTRLQueryXXXAttributePermissions.
55  * 1.27        Added DISPLAY TargetType
56  * 1.28        Added NV_CTRL_CURRENT_METAMODE_ID: clients should use this
57  *             attribute to switch MetaModes, rather than pass the MetaMode ID
58  *             through the RRSetScreenConfig protocol request.
59  */
60 
61 #ifndef __NVCONTROL_H
62 #define __NVCONTROL_H
63 
64 #define NV_CONTROL_ERRORS 0
65 #define NV_CONTROL_EVENTS 5
66 #define NV_CONTROL_NAME "NV-CONTROL"
67 
68 #define NV_CONTROL_MAJOR 1
69 #define NV_CONTROL_MINOR 28
70 
71 #define X_nvCtrlQueryExtension                      0
72 #define X_nvCtrlIsNv                                1
73 #define X_nvCtrlQueryAttribute                      2
74 #define X_nvCtrlSetAttribute                        3
75 #define X_nvCtrlQueryStringAttribute                4
76 #define X_nvCtrlQueryValidAttributeValues           5
77 #define X_nvCtrlSelectNotify                        6
78 #define X_nvCtrlSetGvoColorConversionDeprecated     7
79 #define X_nvCtrlQueryGvoColorConversionDeprecated   8
80 #define X_nvCtrlSetStringAttribute                  9
81 /* STUB X_nvCtrlQueryDDCCILutSize                   10 */
82 /* STUB X_nvCtrlQueryDDCCISinglePointLutOperation   11 */
83 /* STUB X_nvCtrlSetDDCCISinglePointLutOperation     12 */
84 /* STUB X_nvCtrlQueryDDCCIBlockLutOperation         13 */
85 /* STUB X_nvCtrlSetDDCCIBlockLutOperation           14 */
86 /* STUB X_nvCtrlSetDDCCIRemoteProcedureCall         15 */
87 /* STUB X_nvCtrlQueryDDCCIDisplayControllerType     16 */
88 /* STUB X_nvCtrlQueryDDCCICapabilities              17 */
89 /* STUB X_nvCtrlQueryDDCCITimingReport              18 */
90 #define X_nvCtrlSetAttributeAndGetStatus            19
91 #define X_nvCtrlQueryBinaryData                     20
92 #define X_nvCtrlSetGvoColorConversion               21
93 #define X_nvCtrlQueryGvoColorConversion             22
94 #define X_nvCtrlSelectTargetNotify                  23
95 #define X_nvCtrlQueryTargetCount                    24
96 #define X_nvCtrlStringOperation                     25
97 #define X_nvCtrlQueryValidAttributeValues64         26
98 #define X_nvCtrlQueryAttribute64                    27
99 #define X_nvCtrlQueryValidStringAttributeValues     28
100 #define X_nvCtrlQueryAttributePermissions                29
101 #define X_nvCtrlQueryStringAttributePermissions          30
102 #define X_nvCtrlQueryBinaryDataAttributePermissions      31
103 #define X_nvCtrlQueryStringOperationAttributePermissions 32
104 
105 #define X_nvCtrlLastRequest (X_nvCtrlQueryStringOperationAttributePermissions + 1)
106 
107 
108 /* Define 32 bit floats */
109 typedef float FLOAT32;
110 #ifndef F32
111 #define F32
112 #endif
113 
114 
115 typedef struct {
116     CARD8 reqType;
117     CARD8 nvReqType;
118     CARD16 length B16;
119 } xnvCtrlQueryExtensionReq;
120 #define sz_xnvCtrlQueryExtensionReq 4
121 
122 typedef struct {
123     BYTE type;   /* X_Reply */
124     CARD8 padb1;
125     CARD16 sequenceNumber B16;
126     CARD32 length B32;
127     CARD16 major B16;
128     CARD16 minor B16;
129     CARD32 padl4 B32;
130     CARD32 padl5 B32;
131     CARD32 padl6 B32;
132     CARD32 padl7 B32;
133     CARD32 padl8 B32;
134 } xnvCtrlQueryExtensionReply;
135 #define sz_xnvCtrlQueryExtensionReply 32
136 
137 typedef struct {
138     CARD8 reqType;
139     CARD8 nvReqType;
140     CARD16 length B16;
141     CARD32 screen B32;
142 } xnvCtrlIsNvReq;
143 #define sz_xnvCtrlIsNvReq 8
144 
145 typedef struct {
146     BYTE type;   /* X_Reply */
147     CARD8 padb1;
148     CARD16 sequenceNumber B16;
149     CARD32 length B32;
150     CARD32 isnv B32;
151     CARD32 padl4 B32;
152     CARD32 padl5 B32;
153     CARD32 padl6 B32;
154     CARD32 padl7 B32;
155     CARD32 padl8 B32;
156 } xnvCtrlIsNvReply;
157 #define sz_xnvCtrlIsNvReply 32
158 
159 typedef struct {
160     CARD8 reqType;
161     CARD8 nvReqType;
162     CARD16 length B16;
163     CARD32 target_type B32;
164 } xnvCtrlQueryTargetCountReq;
165 #define sz_xnvCtrlQueryTargetCountReq 8
166 
167 typedef struct {
168     BYTE type;   /* X_Reply */
169     CARD8 padb1;
170     CARD16 sequenceNumber B16;
171     CARD32 length B32;
172     CARD32 count B32;
173     CARD32 padl4 B32;
174     CARD32 padl5 B32;
175     CARD32 padl6 B32;
176     CARD32 padl7 B32;
177     CARD32 padl8 B32;
178 } xnvCtrlQueryTargetCountReply;
179 #define sz_xnvCtrlQueryTargetCountReply 32
180 
181 typedef struct {
182     CARD8 reqType;
183     CARD8 nvReqType;
184     CARD16 length B16;
185     CARD16 target_id B16;    /* X screen number or GPU number */
186     CARD16 target_type B16;  /* X screen or GPU */
187     CARD32 display_mask B32;
188     CARD32 attribute B32;
189 } xnvCtrlQueryAttributeReq;
190 #define sz_xnvCtrlQueryAttributeReq 16
191 
192 typedef struct {
193     BYTE type;
194     BYTE pad0;
195     CARD16 sequenceNumber B16;
196     CARD32 length B32;
197     CARD32 flags B32;
198     INT32 value B32;
199     CARD32 pad4 B32;
200     CARD32 pad5 B32;
201     CARD32 pad6 B32;
202     CARD32 pad7 B32;
203 } xnvCtrlQueryAttributeReply;
204 #define sz_xnvCtrlQueryAttributeReply 32
205 
206 typedef struct {
207     BYTE type;
208     BYTE pad0;
209     CARD16 sequenceNumber B16;
210     CARD32 length B32;
211     CARD32 flags B32;
212     CARD32 pad3 B32;
213     int64_t value_64;
214     CARD32 pad6 B32;
215     CARD32 pad7 B32;
216 } xnvCtrlQueryAttribute64Reply;
217 #define sz_xnvCtrlQueryAttribute64Reply 32
218 
219 typedef struct {
220     CARD8 reqType;
221     CARD8 nvReqType;
222     CARD16 length B16;
223     CARD16 target_id B16;
224     CARD16 target_type B16;
225     CARD32 display_mask B32;
226     CARD32 attribute B32;
227     INT32 value B32;
228 } xnvCtrlSetAttributeReq;
229 #define sz_xnvCtrlSetAttributeReq 20
230 
231 typedef struct {
232     CARD8 reqType;
233     CARD8 nvReqType;
234     CARD16 length B16;
235     CARD16 target_id B16;
236     CARD16 target_type B16;
237     CARD32 display_mask B32;
238     CARD32 attribute B32;
239     INT32 value B32;
240 } xnvCtrlSetAttributeAndGetStatusReq;
241 #define sz_xnvCtrlSetAttributeAndGetStatusReq 20
242 
243 typedef struct {
244     BYTE type;
245     BYTE pad0;
246     CARD16 sequenceNumber B16;
247     CARD32 length B32;
248     CARD32 flags B32;
249     CARD32 pad3 B32;
250     CARD32 pad4 B32;
251     CARD32 pad5 B32;
252     CARD32 pad6 B32;
253     CARD32 pad7 B32;
254 } xnvCtrlSetAttributeAndGetStatusReply;
255 #define sz_xnvCtrlSetAttributeAndGetStatusReply 32
256 
257 typedef struct {
258     CARD8 reqType;
259     CARD8 nvReqType;
260     CARD16 length B16;
261     CARD16 target_id B16;    /* X screen number or GPU number */
262     CARD16 target_type B16;  /* X screen or GPU */
263     CARD32 display_mask B32;
264     CARD32 attribute B32;
265 } xnvCtrlQueryStringAttributeReq;
266 #define sz_xnvCtrlQueryStringAttributeReq 16
267 
268 typedef struct {
269     BYTE type;
270     BYTE pad0;
271     CARD16 sequenceNumber B16;
272     CARD32 length B32;
273     CARD32 flags B32;
274     CARD32 n B32;    /* Length of string */
275     CARD32 pad4 B32;
276     CARD32 pad5 B32;
277     CARD32 pad6 B32;
278     CARD32 pad7 B32;
279 } xnvCtrlQueryStringAttributeReply;
280 #define sz_xnvCtrlQueryStringAttributeReply 32
281 
282 
283 typedef struct {
284     CARD8 reqType;
285     CARD8 nvReqType;
286     CARD16 length B16;
287     CARD16 target_id B16;
288     CARD16 target_type B16;
289     CARD32 display_mask B32;
290     CARD32 attribute B32;
291     CARD32 num_bytes B32;
292 } xnvCtrlSetStringAttributeReq;
293 #define sz_xnvCtrlSetStringAttributeReq 20
294 
295 typedef struct {
296     BYTE type;
297     BYTE pad0;
298     CARD16 sequenceNumber B16;
299     CARD32 length B32;
300     CARD32 flags B32;
301     CARD32 pad3 B32;
302     CARD32 pad4 B32;
303     CARD32 pad5 B32;
304     CARD32 pad6 B32;
305     CARD32 pad7 B32;
306 } xnvCtrlSetStringAttributeReply;
307 #define sz_xnvCtrlSetStringAttributeReply 32
308 
309 typedef struct {
310     CARD8 reqType;
311     CARD8 nvReqType;
312     CARD16 length B16;
313     CARD16 target_id B16;    /* X screen number or GPU number */
314     CARD16 target_type B16;  /* X screen or GPU */
315     CARD32 display_mask B32;
316     CARD32 attribute B32;
317 } xnvCtrlQueryValidAttributeValuesReq;
318 #define sz_xnvCtrlQueryValidAttributeValuesReq 16
319 
320 typedef struct {
321     BYTE type;
322     BYTE pad0;
323     CARD16 sequenceNumber B16;
324     CARD32 length B32;
325     CARD32 flags B32;
326     INT32 attr_type B32;
327     INT32 min B32;
328     INT32 max B32;
329     CARD32 bits B32;
330     CARD32 perms B32;
331 } xnvCtrlQueryValidAttributeValuesReply;
332 #define sz_xnvCtrlQueryValidAttributeValuesReply 32
333 
334 typedef struct {
335     BYTE type;
336     BYTE pad0;
337     CARD16 sequenceNumber B16;
338     CARD32 length B32;
339     CARD32 flags B32;
340     INT32 attr_type B32;
341     int64_t min_64;
342     int64_t max_64;
343     CARD64 bits_64;
344     CARD32 perms B32;
345     CARD32 pad1 B32;
346 } xnvCtrlQueryValidAttributeValues64Reply;
347 #define sz_xnvCtrlQueryValidAttributeValues64Reply 48
348 #define sz_xnvCtrlQueryValidAttributeValues64Reply_extra ((48 - 32) >> 2)
349 
350 typedef struct {
351     CARD8 reqType;
352     CARD8 nvReqType;
353     CARD16 length B16;
354     CARD32 attribute B32;
355 } xnvCtrlQueryAttributePermissionsReq;
356 #define sz_xnvCtrlQueryAttributePermissionsReq 8
357 
358 typedef struct {
359     BYTE type;
360     BYTE pad0;
361     CARD16 sequenceNumber B16;
362     CARD32 length B32;
363     CARD32 flags B32;
364     INT32 attr_type B32;
365     CARD32 perms B32;
366     CARD32 pad5 B32;
367     CARD32 pad6 B32;
368     CARD32 pad7 B32;
369     CARD32 pad8 B32;
370 } xnvCtrlQueryAttributePermissionsReply;
371 #define sz_xnvCtrlQueryAttributePermissionsReply 32
372 
373 /* Set GVO Color Conversion request (deprecated) */
374 typedef struct {
375     CARD8 reqType;
376     CARD8 nvReqType;
377     CARD16 length B16;
378     CARD32 screen B32;
379     FLOAT32 row1_col1 F32;
380     FLOAT32 row1_col2 F32;
381     FLOAT32 row1_col3 F32;
382     FLOAT32 row1_col4 F32;
383     FLOAT32 row2_col1 F32;
384     FLOAT32 row2_col2 F32;
385     FLOAT32 row2_col3 F32;
386     FLOAT32 row2_col4 F32;
387     FLOAT32 row3_col1 F32;
388     FLOAT32 row3_col2 F32;
389     FLOAT32 row3_col3 F32;
390     FLOAT32 row3_col4 F32;
391 } xnvCtrlSetGvoColorConversionDeprecatedReq;
392 #define sz_xnvCtrlSetGvoColorConversionDeprecatedReq 56
393 
394 /* Query GVO Color Conversion request (deprecated) */
395 typedef struct {
396     CARD8 reqType;
397     CARD8 nvReqType;
398     CARD16 length B16;
399     CARD32 screen B32;
400 } xnvCtrlQueryGvoColorConversionDeprecatedReq;
401 #define sz_xnvCtrlQueryGvoColorConversionDeprecatedReq 8
402 
403 /* Query GVO Color Conversion reply (deprecated) */
404 typedef struct {
405     BYTE type;   /* X_Reply */
406     BYTE pad0;
407     CARD16 sequenceNumber B16;
408     CARD32 length B32;
409     CARD32 pad3 B32;
410     CARD32 pad4 B32;
411     CARD32 pad5 B32;
412     CARD32 pad6 B32;
413     CARD32 pad7 B32;
414     CARD32 pad8 B32;
415 } xnvCtrlQueryGvoColorConversionDeprecatedReply;
416 #define sz_xnvCtrlQueryGvoColorConversionDeprecatedReply 32
417 
418 
419 /* Set GVO Color Conversion request */
420 typedef struct {
421     CARD8 reqType;
422     CARD8 nvReqType;
423     CARD16 length B16;
424     CARD32 screen B32;
425 
426     FLOAT32 cscMatrix_y_r F32;
427     FLOAT32 cscMatrix_y_g F32;
428     FLOAT32 cscMatrix_y_b F32;
429 
430     FLOAT32 cscMatrix_cr_r F32;
431     FLOAT32 cscMatrix_cr_g F32;
432     FLOAT32 cscMatrix_cr_b F32;
433 
434     FLOAT32 cscMatrix_cb_r F32;
435     FLOAT32 cscMatrix_cb_g F32;
436     FLOAT32 cscMatrix_cb_b F32;
437 
438     FLOAT32 cscOffset_y  F32;
439     FLOAT32 cscOffset_cr F32;
440     FLOAT32 cscOffset_cb F32;
441 
442     FLOAT32 cscScale_y  F32;
443     FLOAT32 cscScale_cr F32;
444     FLOAT32 cscScale_cb F32;
445 
446 } xnvCtrlSetGvoColorConversionReq;
447 #define sz_xnvCtrlSetGvoColorConversionReq 68
448 
449 /* Query GVO Color Conversion request */
450 typedef struct {
451     CARD8 reqType;
452     CARD8 nvReqType;
453     CARD16 length B16;
454     CARD32 screen B32;
455 } xnvCtrlQueryGvoColorConversionReq;
456 #define sz_xnvCtrlQueryGvoColorConversionReq 8
457 
458 /* Query GVO Color Conversion reply */
459 typedef struct {
460     BYTE type;   /* X_Reply */
461     BYTE pad0;
462     CARD16 sequenceNumber B16;
463     CARD32 length B32;
464     CARD32 pad3 B32;
465     CARD32 pad4 B32;
466     CARD32 pad5 B32;
467     CARD32 pad6 B32;
468     CARD32 pad7 B32;
469     CARD32 pad8 B32;
470 } xnvCtrlQueryGvoColorConversionReply;
471 #define sz_xnvCtrlQueryGvoColorConversionReply 32
472 
473 typedef struct {
474     CARD8 reqType;
475     CARD8 nvReqType;
476     CARD16 length B16;
477     CARD16 target_id B16;    /* X screen number or GPU number */
478     CARD16 target_type B16;  /* X screen or GPU */
479     CARD32 display_mask B32;
480     CARD32 attribute B32;
481 } xnvCtrlQueryBinaryDataReq;
482 #define sz_xnvCtrlQueryBinaryDataReq 16
483 
484 typedef struct {
485     BYTE type;
486     BYTE pad0;
487     CARD16 sequenceNumber B16;
488     CARD32 length B32;
489     CARD32 flags B32;
490     CARD32 n B32;
491     CARD32 pad4 B32;
492     CARD32 pad5 B32;
493     CARD32 pad6 B32;
494     CARD32 pad7 B32;
495 } xnvCtrlQueryBinaryDataReply;
496 #define sz_xnvCtrlQueryBinaryDataReply 32
497 
498 
499 typedef struct {
500     CARD8 reqType;
501     CARD8 nvReqType;
502     CARD16 length B16;
503     CARD32 screen B32;
504     CARD16 notifyType B16;
505     CARD16 onoff B16;
506 } xnvCtrlSelectNotifyReq;
507 #define sz_xnvCtrlSelectNotifyReq 12
508 
509 typedef struct {
510     CARD8 reqType;
511     CARD8 nvReqType;
512     CARD16 length B16;
513     CARD16 target_id B16;    /* X screen number or GPU number */
514     CARD16 target_type B16;  /* X screen or GPU */
515     CARD32 display_mask B32;
516     CARD32 attribute B32;
517     CARD32 num_bytes B32; /* Length of string */
518 } xnvCtrlStringOperationReq;
519 #define sz_xnvCtrlStringOperationReq 20
520 
521 typedef struct {
522     BYTE type;   /* X_Reply */
523     CARD8 padb1;
524     CARD16 sequenceNumber B16;
525     CARD32 length B32;
526     CARD32 ret B32;
527     CARD32 num_bytes B32; /* Length of string */
528     CARD32 padl4 B32;
529     CARD32 padl5 B32;
530     CARD32 padl6 B32;
531     CARD32 padl7 B32;
532 } xnvCtrlStringOperationReply;
533 #define sz_xnvCtrlStringOperationReply 32
534 
535 typedef struct {
536     union {
537         struct {
538             BYTE type;
539             BYTE detail;
540             CARD16 sequenceNumber B16;
541         } u;
542         struct {
543             BYTE type;
544             BYTE detail;
545             CARD16 sequenceNumber B16;
546             CARD32 time B32;
547             CARD32 screen B32;
548             CARD32 display_mask B32;
549             CARD32 attribute B32;
550             CARD32 value B32;
551             CARD32 pad0 B32;
552             CARD32 pad1 B32;
553         } attribute_changed;
554     } u;
555 } xnvctrlEvent;
556 
557 
558 /*
559  * Leave target_type before target_id for the
560  * xnvCtrlSelectTargetNotifyReq and xnvctrlEventTarget
561  * structures, even though other request protocol structures
562  * store target_id in the bottom 16-bits of the second DWORD of the
563  * structures.  The event-related structures were added in version
564  * 1.8, and so there is no prior version with which to maintain
565  * compatibility.
566  */
567 typedef struct {
568     CARD8 reqType;
569     CARD8 nvReqType;
570     CARD16 length B16;
571     CARD16 target_type B16; /* Don't swap these */
572     CARD16 target_id B16;
573     CARD16 notifyType B16;
574     CARD16 onoff B16;
575 } xnvCtrlSelectTargetNotifyReq;
576 #define sz_xnvCtrlSelectTargetNotifyReq 12
577 
578 typedef struct {
579     union {
580         struct {
581             BYTE type;
582             BYTE detail;
583             CARD16 sequenceNumber B16;
584         } u;
585         struct {
586             BYTE type;
587             BYTE detail;
588             CARD16 sequenceNumber B16;
589             CARD32 time B32;
590             CARD16 target_type B16; /* Don't swap these */
591             CARD16 target_id B16;
592             CARD32 display_mask B32;
593             CARD32 attribute B32;
594             CARD32 value B32;
595             CARD32 pad0 B32;
596             CARD32 pad1 B32;
597         } attribute_changed;
598         struct {
599             BYTE type;
600             BYTE detail;
601             CARD16 sequenceNumber B16;
602             CARD32 time B32;
603             CARD16 target_type B16; /* Don't swap these */
604             CARD16 target_id B16;
605             CARD32 display_mask B32;
606             CARD32 attribute B32;
607             CARD32 value B32;
608             CARD8 availability;
609             CARD8 pad0;
610             CARD16 pad1 B16;
611             CARD32 pad2 B32;
612         } availability_changed;
613     } u;
614 } xnvctrlEventTarget;
615 
616 
617 #endif /* __NVCONTROL_H */
618