xref: /openbmc/linux/drivers/gpu/drm/nouveau/include/nvif/if0012.h (revision 1ac731c529cd4d6adbce134754b51ff7d822b145)
11b255f1cSBen Skeggs /* SPDX-License-Identifier: MIT */
21b255f1cSBen Skeggs #ifndef __NVIF_IF0012_H__
31b255f1cSBen Skeggs #define __NVIF_IF0012_H__
41b255f1cSBen Skeggs 
5*25feda6fSKees Cook #include <drm/display/drm_dp.h>
6*25feda6fSKees Cook 
71b255f1cSBen Skeggs union nvif_outp_args {
81b255f1cSBen Skeggs 	struct nvif_outp_v0 {
91b255f1cSBen Skeggs 		__u8 version;
101b255f1cSBen Skeggs 		__u8 id;	/* DCB device index. */
111b255f1cSBen Skeggs 		__u8 pad02[6];
121b255f1cSBen Skeggs 	} v0;
131b255f1cSBen Skeggs };
14dfc4005fSBen Skeggs 
15dfc4005fSBen Skeggs #define NVIF_OUTP_V0_LOAD_DETECT 0x00
16ea6143a8SBen Skeggs #define NVIF_OUTP_V0_ACQUIRE     0x01
17ea6143a8SBen Skeggs #define NVIF_OUTP_V0_RELEASE     0x02
18f530bc60SBen Skeggs #define NVIF_OUTP_V0_INFOFRAME   0x03
19a9f5d772SBen Skeggs #define NVIF_OUTP_V0_HDA_ELD     0x04
20a62b7493SBen Skeggs #define NVIF_OUTP_V0_DP_AUX_PWR  0x05
218bb30c88SBen Skeggs #define NVIF_OUTP_V0_DP_RETRAIN  0x06
228c7d980dSBen Skeggs #define NVIF_OUTP_V0_DP_MST_VCPI 0x07
23dfc4005fSBen Skeggs 
24dfc4005fSBen Skeggs union nvif_outp_load_detect_args {
25dfc4005fSBen Skeggs 	struct nvif_outp_load_detect_v0 {
26dfc4005fSBen Skeggs 		__u8  version;
27dfc4005fSBen Skeggs 		__u8  load;
28dfc4005fSBen Skeggs 		__u8  pad02[2];
29dfc4005fSBen Skeggs 		__u32 data; /*TODO: move vbios loadval parsing into nvkm */
30dfc4005fSBen Skeggs 	} v0;
31dfc4005fSBen Skeggs };
32ea6143a8SBen Skeggs 
33ea6143a8SBen Skeggs union nvif_outp_acquire_args {
34ea6143a8SBen Skeggs 	struct nvif_outp_acquire_v0 {
35ea6143a8SBen Skeggs 		__u8 version;
36ea6143a8SBen Skeggs #define NVIF_OUTP_ACQUIRE_V0_RGB_CRT 0x00
37ea6143a8SBen Skeggs #define NVIF_OUTP_ACQUIRE_V0_TV      0x01
38ea6143a8SBen Skeggs #define NVIF_OUTP_ACQUIRE_V0_TMDS    0x02
39ea6143a8SBen Skeggs #define NVIF_OUTP_ACQUIRE_V0_LVDS    0x03
40ea6143a8SBen Skeggs #define NVIF_OUTP_ACQUIRE_V0_DP      0x04
41ea6143a8SBen Skeggs 		__u8 proto;
42ea6143a8SBen Skeggs 		__u8 or;
43ea6143a8SBen Skeggs 		__u8 link;
44ea6143a8SBen Skeggs 		__u8 pad04[4];
45ea6143a8SBen Skeggs 		union {
46ea6143a8SBen Skeggs 			struct {
47f530bc60SBen Skeggs 				__u8 head;
48f530bc60SBen Skeggs 				__u8 hdmi;
49f530bc60SBen Skeggs 				__u8 hdmi_max_ac_packet;
50f530bc60SBen Skeggs 				__u8 hdmi_rekey;
51f530bc60SBen Skeggs #define NVIF_OUTP_ACQUIRE_V0_TMDS_HDMI_SCDC_SCRAMBLE (1 << 0)
52f530bc60SBen Skeggs #define NVIF_OUTP_ACQUIRE_V0_TMDS_HDMI_SCDC_DIV_BY_4 (1 << 1)
53f530bc60SBen Skeggs 				__u8 hdmi_scdc;
54f530bc60SBen Skeggs 				__u8 hdmi_hda;
55f530bc60SBen Skeggs 				__u8 pad06[2];
56ea6143a8SBen Skeggs 			} tmds;
57ea6143a8SBen Skeggs 			struct {
589793083fSBen Skeggs 				__u8 dual;
599793083fSBen Skeggs 				__u8 bpc8;
609793083fSBen Skeggs 				__u8 pad02[6];
619793083fSBen Skeggs 			} lvds;
629793083fSBen Skeggs 			struct {
6381344372SBen Skeggs 				__u8 link_nr; /* 0 = highest possible. */
6481344372SBen Skeggs 				__u8 link_bw; /* 0 = highest possible, DP BW code otherwise. */
65ea6143a8SBen Skeggs 				__u8 hda;
6681344372SBen Skeggs 				__u8 mst;
6781344372SBen Skeggs 				__u8 pad04[4];
68*25feda6fSKees Cook 				__u8 dpcd[DP_RECEIVER_CAP_SIZE];
69ea6143a8SBen Skeggs 			} dp;
70ea6143a8SBen Skeggs 		};
71ea6143a8SBen Skeggs 	} v0;
72ea6143a8SBen Skeggs };
73ea6143a8SBen Skeggs 
74ea6143a8SBen Skeggs union nvif_outp_release_args {
75ea6143a8SBen Skeggs 	struct nvif_outp_release_vn {
76ea6143a8SBen Skeggs 	} vn;
77ea6143a8SBen Skeggs };
78f530bc60SBen Skeggs 
79f530bc60SBen Skeggs union nvif_outp_infoframe_args {
80f530bc60SBen Skeggs 	struct nvif_outp_infoframe_v0 {
81f530bc60SBen Skeggs 		__u8 version;
82f530bc60SBen Skeggs #define NVIF_OUTP_INFOFRAME_V0_AVI 0
83f530bc60SBen Skeggs #define NVIF_OUTP_INFOFRAME_V0_VSI 1
84f530bc60SBen Skeggs 		__u8 type;
85f530bc60SBen Skeggs 		__u8 head;
86f530bc60SBen Skeggs 		__u8 pad03[5];
87f530bc60SBen Skeggs 		__u8 data[];
88f530bc60SBen Skeggs 	} v0;
89f530bc60SBen Skeggs };
90a9f5d772SBen Skeggs 
91a9f5d772SBen Skeggs union nvif_outp_hda_eld_args {
92a9f5d772SBen Skeggs 	struct nvif_outp_hda_eld_v0 {
93a9f5d772SBen Skeggs 		__u8  version;
94a9f5d772SBen Skeggs 		__u8  head;
95a9f5d772SBen Skeggs 		__u8  pad02[6];
96a9f5d772SBen Skeggs 		__u8  data[];
97a9f5d772SBen Skeggs 	} v0;
98a9f5d772SBen Skeggs };
99a62b7493SBen Skeggs 
100a62b7493SBen Skeggs union nvif_outp_dp_aux_pwr_args {
101a62b7493SBen Skeggs 	struct nvif_outp_dp_aux_pwr_v0 {
102a62b7493SBen Skeggs 		__u8 version;
103a62b7493SBen Skeggs 		__u8 state;
104a62b7493SBen Skeggs 		__u8 pad02[6];
105a62b7493SBen Skeggs 	} v0;
106a62b7493SBen Skeggs };
1078bb30c88SBen Skeggs 
1088bb30c88SBen Skeggs union nvif_outp_dp_retrain_args {
1098bb30c88SBen Skeggs 	struct nvif_outp_dp_retrain_vn {
1108bb30c88SBen Skeggs 	} vn;
1118bb30c88SBen Skeggs };
1128c7d980dSBen Skeggs 
1138c7d980dSBen Skeggs union nvif_outp_dp_mst_vcpi_args {
1148c7d980dSBen Skeggs 	struct nvif_outp_dp_mst_vcpi_v0 {
1158c7d980dSBen Skeggs 		__u8  version;
1168c7d980dSBen Skeggs 		__u8  head;
1178c7d980dSBen Skeggs 		__u8  start_slot;
1188c7d980dSBen Skeggs 		__u8  num_slots;
1198c7d980dSBen Skeggs 		__u16 pbn;
1208c7d980dSBen Skeggs 		__u16 aligned_pbn;
1218c7d980dSBen Skeggs 	} v0;
1228c7d980dSBen Skeggs };
1231b255f1cSBen Skeggs #endif
124