1/* SPDX-License-Identifier: MIT */ 2#ifndef __NVIF_IF0012_H__ 3#define __NVIF_IF0012_H__ 4 5#include <drm/display/drm_dp.h> 6 7union nvif_outp_args { 8 struct nvif_outp_v0 { 9 __u8 version; 10 __u8 id; /* DCB device index. */ 11#define NVIF_OUTP_V0_TYPE_DAC 0x00 12#define NVIF_OUTP_V0_TYPE_SOR 0x01 13#define NVIF_OUTP_V0_TYPE_PIOR 0x02 14 __u8 type; 15#define NVIF_OUTP_V0_PROTO_RGB_CRT 0x00 16#define NVIF_OUTP_V0_PROTO_TMDS 0x01 17#define NVIF_OUTP_V0_PROTO_LVDS 0x02 18#define NVIF_OUTP_V0_PROTO_DP 0x03 19 __u8 proto; 20 __u8 heads; 21 __u8 ddc; 22 __u8 conn; 23 union { 24 struct { 25 __u32 freq_max; 26 } rgb_crt; 27 struct { 28 __u8 dual; 29 } tmds; 30 struct { 31 __u8 acpi_edid; 32 } lvds; 33 struct { 34 __u8 aux; 35 __u8 mst; 36 __u8 increased_wm; 37 __u8 link_nr; 38 __u32 link_bw; 39 } dp; 40 }; 41 } v0; 42}; 43 44#define NVIF_OUTP_V0_DETECT 0x00 45#define NVIF_OUTP_V0_EDID_GET 0x01 46 47#define NVIF_OUTP_V0_INHERIT 0x10 48#define NVIF_OUTP_V0_ACQUIRE 0x11 49#define NVIF_OUTP_V0_RELEASE 0x12 50 51#define NVIF_OUTP_V0_LOAD_DETECT 0x20 52 53#define NVIF_OUTP_V0_BL_GET 0x30 54#define NVIF_OUTP_V0_BL_SET 0x31 55 56#define NVIF_OUTP_V0_LVDS 0x40 57 58#define NVIF_OUTP_V0_HDMI 0x50 59 60#define NVIF_OUTP_V0_INFOFRAME 0x60 61#define NVIF_OUTP_V0_HDA_ELD 0x61 62 63#define NVIF_OUTP_V0_DP_AUX_PWR 0x70 64#define NVIF_OUTP_V0_DP_AUX_XFER 0x71 65#define NVIF_OUTP_V0_DP_RATES 0x72 66#define NVIF_OUTP_V0_DP_TRAIN 0x73 67#define NVIF_OUTP_V0_DP_DRIVE 0x74 68#define NVIF_OUTP_V0_DP_SST 0x75 69#define NVIF_OUTP_V0_DP_MST_ID_GET 0x76 70#define NVIF_OUTP_V0_DP_MST_ID_PUT 0x77 71#define NVIF_OUTP_V0_DP_MST_VCPI 0x78 72 73union nvif_outp_detect_args { 74 struct nvif_outp_detect_v0 { 75 __u8 version; 76#define NVIF_OUTP_DETECT_V0_NOT_PRESENT 0x00 77#define NVIF_OUTP_DETECT_V0_PRESENT 0x01 78#define NVIF_OUTP_DETECT_V0_UNKNOWN 0x02 79 __u8 status; 80 } v0; 81}; 82 83union nvif_outp_edid_get_args { 84 struct nvif_outp_edid_get_v0 { 85 __u8 version; 86 __u8 pad01; 87 __u16 size; 88 __u8 data[2048]; 89 } v0; 90}; 91 92union nvif_outp_load_detect_args { 93 struct nvif_outp_load_detect_v0 { 94 __u8 version; 95 __u8 load; 96 __u8 pad02[2]; 97 __u32 data; /*TODO: move vbios loadval parsing into nvkm */ 98 } v0; 99}; 100 101union nvif_outp_acquire_args { 102 struct nvif_outp_acquire_v0 { 103 __u8 version; 104#define NVIF_OUTP_ACQUIRE_V0_DAC 0x00 105#define NVIF_OUTP_ACQUIRE_V0_SOR 0x01 106#define NVIF_OUTP_ACQUIRE_V0_PIOR 0x02 107 __u8 type; 108 __u8 or; 109 __u8 link; 110 __u8 pad04[4]; 111 union { 112 struct { 113 __u8 hda; 114 } sor; 115 }; 116 } v0; 117}; 118 119union nvif_outp_inherit_args { 120 struct nvif_outp_inherit_v0 { 121 __u8 version; 122#define NVIF_OUTP_INHERIT_V0_RGB_CRT 0x00 123#define NVIF_OUTP_INHERIT_V0_TV 0x01 124#define NVIF_OUTP_INHERIT_V0_TMDS 0x02 125#define NVIF_OUTP_INHERIT_V0_LVDS 0x03 126#define NVIF_OUTP_INHERIT_V0_DP 0x04 127 // In/out. Input is one of the above values, output is the actual hw protocol 128 __u8 proto; 129 __u8 or; 130 __u8 link; 131 __u8 head; 132 union { 133 struct { 134 // TODO: Figure out padding, and whether we even want this field 135 __u8 hda; 136 } tmds; 137 }; 138 } v0; 139}; 140 141union nvif_outp_release_args { 142 struct nvif_outp_release_vn { 143 } vn; 144}; 145 146union nvif_outp_bl_get_args { 147 struct nvif_outp_bl_get_v0 { 148 __u8 version; 149 __u8 level; 150 } v0; 151}; 152 153union nvif_outp_bl_set_args { 154 struct nvif_outp_bl_set_v0 { 155 __u8 version; 156 __u8 level; 157 } v0; 158}; 159 160union nvif_outp_lvds_args { 161 struct nvif_outp_lvds_v0 { 162 __u8 version; 163 __u8 dual; 164 __u8 bpc8; 165 } v0; 166}; 167 168union nvif_outp_hdmi_args { 169 struct nvif_outp_hdmi_v0 { 170 __u8 version; 171 __u8 head; 172 __u8 enable; 173 __u8 max_ac_packet; 174 __u8 rekey; 175 __u8 scdc; 176 __u8 scdc_scrambling; 177 __u8 scdc_low_rates; 178 __u32 khz; 179 } v0; 180}; 181 182union nvif_outp_infoframe_args { 183 struct nvif_outp_infoframe_v0 { 184 __u8 version; 185#define NVIF_OUTP_INFOFRAME_V0_AVI 0 186#define NVIF_OUTP_INFOFRAME_V0_VSI 1 187 __u8 type; 188 __u8 head; 189 __u8 pad03[5]; 190 __u8 data[]; 191 } v0; 192}; 193 194union nvif_outp_hda_eld_args { 195 struct nvif_outp_hda_eld_v0 { 196 __u8 version; 197 __u8 head; 198 __u8 pad02[6]; 199 __u8 data[]; 200 } v0; 201}; 202 203union nvif_outp_dp_aux_pwr_args { 204 struct nvif_outp_dp_aux_pwr_v0 { 205 __u8 version; 206 __u8 state; 207 __u8 pad02[6]; 208 } v0; 209}; 210 211union nvif_outp_dp_aux_xfer_args { 212 struct nvif_outp_dp_aux_xfer_v0 { 213 __u8 version; 214 __u8 pad01; 215 __u8 type; 216 __u8 size; 217 __u32 addr; 218 __u8 data[16]; 219 } v0; 220}; 221 222union nvif_outp_dp_rates_args { 223 struct nvif_outp_dp_rates_v0 { 224 __u8 version; 225 __u8 pad01[6]; 226 __u8 rates; 227 struct { 228 __s8 dpcd; 229 __u32 rate; 230 } rate[8]; 231 } v0; 232}; 233 234union nvif_outp_dp_train_args { 235 struct nvif_outp_dp_train_v0 { 236 __u8 version; 237 __u8 retrain; 238 __u8 mst; 239 __u8 lttprs; 240 __u8 post_lt_adj; 241 __u8 link_nr; 242 __u32 link_bw; 243 __u8 dpcd[DP_RECEIVER_CAP_SIZE]; 244 } v0; 245}; 246 247union nvif_outp_dp_drive_args { 248 struct nvif_outp_dp_drive_v0 { 249 __u8 version; 250 __u8 pad01[2]; 251 __u8 lanes; 252 __u8 pe[4]; 253 __u8 vs[4]; 254 } v0; 255}; 256 257union nvif_outp_dp_sst_args { 258 struct nvif_outp_dp_sst_v0 { 259 __u8 version; 260 __u8 head; 261 __u8 pad02[2]; 262 __u32 watermark; 263 __u32 hblanksym; 264 __u32 vblanksym; 265 } v0; 266}; 267 268union nvif_outp_dp_mst_id_put_args { 269 struct nvif_outp_dp_mst_id_put_v0 { 270 __u8 version; 271 __u8 pad01[3]; 272 __u32 id; 273 } v0; 274}; 275 276union nvif_outp_dp_mst_id_get_args { 277 struct nvif_outp_dp_mst_id_get_v0 { 278 __u8 version; 279 __u8 pad01[3]; 280 __u32 id; 281 } v0; 282}; 283 284union nvif_outp_dp_mst_vcpi_args { 285 struct nvif_outp_dp_mst_vcpi_v0 { 286 __u8 version; 287 __u8 head; 288 __u8 start_slot; 289 __u8 num_slots; 290 __u16 pbn; 291 __u16 aligned_pbn; 292 } v0; 293}; 294#endif 295