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