/* SPDX-License-Identifier: MIT */ #ifndef __NVIF_IF0012_H__ #define __NVIF_IF0012_H__ #include union nvif_outp_args { struct nvif_outp_v0 { __u8 version; __u8 id; /* DCB device index. */ #define NVIF_OUTP_V0_TYPE_DAC 0x00 #define NVIF_OUTP_V0_TYPE_SOR 0x01 #define NVIF_OUTP_V0_TYPE_PIOR 0x02 __u8 type; #define NVIF_OUTP_V0_PROTO_RGB_CRT 0x00 #define NVIF_OUTP_V0_PROTO_TMDS 0x01 #define NVIF_OUTP_V0_PROTO_LVDS 0x02 #define NVIF_OUTP_V0_PROTO_DP 0x03 __u8 proto; __u8 heads; __u8 ddc; __u8 conn; union { struct { __u32 freq_max; } rgb_crt; struct { __u8 dual; } tmds; struct { __u8 acpi_edid; } lvds; struct { __u8 aux; __u8 mst; __u8 increased_wm; __u8 link_nr; __u32 link_bw; } dp; }; } v0; }; #define NVIF_OUTP_V0_DETECT 0x00 #define NVIF_OUTP_V0_EDID_GET 0x01 #define NVIF_OUTP_V0_INHERIT 0x10 #define NVIF_OUTP_V0_ACQUIRE 0x11 #define NVIF_OUTP_V0_RELEASE 0x12 #define NVIF_OUTP_V0_LOAD_DETECT 0x20 #define NVIF_OUTP_V0_BL_GET 0x30 #define NVIF_OUTP_V0_BL_SET 0x31 #define NVIF_OUTP_V0_LVDS 0x40 #define NVIF_OUTP_V0_HDMI 0x50 #define NVIF_OUTP_V0_INFOFRAME 0x60 #define NVIF_OUTP_V0_HDA_ELD 0x61 #define NVIF_OUTP_V0_DP_AUX_PWR 0x70 #define NVIF_OUTP_V0_DP_AUX_XFER 0x71 #define NVIF_OUTP_V0_DP_RATES 0x72 #define NVIF_OUTP_V0_DP_TRAIN 0x73 #define NVIF_OUTP_V0_DP_DRIVE 0x74 #define NVIF_OUTP_V0_DP_SST 0x75 #define NVIF_OUTP_V0_DP_MST_ID_GET 0x76 #define NVIF_OUTP_V0_DP_MST_ID_PUT 0x77 #define NVIF_OUTP_V0_DP_MST_VCPI 0x78 union nvif_outp_detect_args { struct nvif_outp_detect_v0 { __u8 version; #define NVIF_OUTP_DETECT_V0_NOT_PRESENT 0x00 #define NVIF_OUTP_DETECT_V0_PRESENT 0x01 #define NVIF_OUTP_DETECT_V0_UNKNOWN 0x02 __u8 status; } v0; }; union nvif_outp_edid_get_args { struct nvif_outp_edid_get_v0 { __u8 version; __u8 pad01; __u16 size; __u8 data[2048]; } v0; }; union nvif_outp_load_detect_args { struct nvif_outp_load_detect_v0 { __u8 version; __u8 load; __u8 pad02[2]; __u32 data; /*TODO: move vbios loadval parsing into nvkm */ } v0; }; union nvif_outp_acquire_args { struct nvif_outp_acquire_v0 { __u8 version; #define NVIF_OUTP_ACQUIRE_V0_DAC 0x00 #define NVIF_OUTP_ACQUIRE_V0_SOR 0x01 #define NVIF_OUTP_ACQUIRE_V0_PIOR 0x02 __u8 type; __u8 or; __u8 link; __u8 pad04[4]; union { struct { __u8 hda; } sor; }; } v0; }; union nvif_outp_inherit_args { struct nvif_outp_inherit_v0 { __u8 version; #define NVIF_OUTP_INHERIT_V0_RGB_CRT 0x00 #define NVIF_OUTP_INHERIT_V0_TV 0x01 #define NVIF_OUTP_INHERIT_V0_TMDS 0x02 #define NVIF_OUTP_INHERIT_V0_LVDS 0x03 #define NVIF_OUTP_INHERIT_V0_DP 0x04 // In/out. Input is one of the above values, output is the actual hw protocol __u8 proto; __u8 or; __u8 link; __u8 head; union { struct { // TODO: Figure out padding, and whether we even want this field __u8 hda; } tmds; }; } v0; }; union nvif_outp_release_args { struct nvif_outp_release_vn { } vn; }; union nvif_outp_bl_get_args { struct nvif_outp_bl_get_v0 { __u8 version; __u8 level; } v0; }; union nvif_outp_bl_set_args { struct nvif_outp_bl_set_v0 { __u8 version; __u8 level; } v0; }; union nvif_outp_lvds_args { struct nvif_outp_lvds_v0 { __u8 version; __u8 dual; __u8 bpc8; } v0; }; union nvif_outp_hdmi_args { struct nvif_outp_hdmi_v0 { __u8 version; __u8 head; __u8 enable; __u8 max_ac_packet; __u8 rekey; __u8 scdc; __u8 scdc_scrambling; __u8 scdc_low_rates; __u32 khz; } v0; }; union nvif_outp_infoframe_args { struct nvif_outp_infoframe_v0 { __u8 version; #define NVIF_OUTP_INFOFRAME_V0_AVI 0 #define NVIF_OUTP_INFOFRAME_V0_VSI 1 __u8 type; __u8 head; __u8 pad03[5]; __u8 data[]; } v0; }; union nvif_outp_hda_eld_args { struct nvif_outp_hda_eld_v0 { __u8 version; __u8 head; __u8 pad02[6]; __u8 data[]; } v0; }; union nvif_outp_dp_aux_pwr_args { struct nvif_outp_dp_aux_pwr_v0 { __u8 version; __u8 state; __u8 pad02[6]; } v0; }; union nvif_outp_dp_aux_xfer_args { struct nvif_outp_dp_aux_xfer_v0 { __u8 version; __u8 pad01; __u8 type; __u8 size; __u32 addr; __u8 data[16]; } v0; }; union nvif_outp_dp_rates_args { struct nvif_outp_dp_rates_v0 { __u8 version; __u8 pad01[6]; __u8 rates; struct { __s8 dpcd; __u32 rate; } rate[8]; } v0; }; union nvif_outp_dp_train_args { struct nvif_outp_dp_train_v0 { __u8 version; __u8 retrain; __u8 mst; __u8 lttprs; __u8 post_lt_adj; __u8 link_nr; __u32 link_bw; __u8 dpcd[DP_RECEIVER_CAP_SIZE]; } v0; }; union nvif_outp_dp_drive_args { struct nvif_outp_dp_drive_v0 { __u8 version; __u8 pad01[2]; __u8 lanes; __u8 pe[4]; __u8 vs[4]; } v0; }; union nvif_outp_dp_sst_args { struct nvif_outp_dp_sst_v0 { __u8 version; __u8 head; __u8 pad02[2]; __u32 watermark; __u32 hblanksym; __u32 vblanksym; } v0; }; union nvif_outp_dp_mst_id_put_args { struct nvif_outp_dp_mst_id_put_v0 { __u8 version; __u8 pad01[3]; __u32 id; } v0; }; union nvif_outp_dp_mst_id_get_args { struct nvif_outp_dp_mst_id_get_v0 { __u8 version; __u8 pad01[3]; __u32 id; } v0; }; union nvif_outp_dp_mst_vcpi_args { struct nvif_outp_dp_mst_vcpi_v0 { __u8 version; __u8 head; __u8 start_slot; __u8 num_slots; __u16 pbn; __u16 aligned_pbn; } v0; }; #endif