162306a36Sopenharmony_ci/* SPDX-License-Identifier: MIT */
262306a36Sopenharmony_ci#ifndef __NVIF_IF0012_H__
362306a36Sopenharmony_ci#define __NVIF_IF0012_H__
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#include <drm/display/drm_dp.h>
662306a36Sopenharmony_ci
762306a36Sopenharmony_ciunion nvif_outp_args {
862306a36Sopenharmony_ci	struct nvif_outp_v0 {
962306a36Sopenharmony_ci		__u8 version;
1062306a36Sopenharmony_ci		__u8 id;	/* DCB device index. */
1162306a36Sopenharmony_ci		__u8 pad02[6];
1262306a36Sopenharmony_ci	} v0;
1362306a36Sopenharmony_ci};
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci#define NVIF_OUTP_V0_LOAD_DETECT 0x00
1662306a36Sopenharmony_ci#define NVIF_OUTP_V0_ACQUIRE     0x01
1762306a36Sopenharmony_ci#define NVIF_OUTP_V0_RELEASE     0x02
1862306a36Sopenharmony_ci#define NVIF_OUTP_V0_INFOFRAME   0x03
1962306a36Sopenharmony_ci#define NVIF_OUTP_V0_HDA_ELD     0x04
2062306a36Sopenharmony_ci#define NVIF_OUTP_V0_DP_AUX_PWR  0x05
2162306a36Sopenharmony_ci#define NVIF_OUTP_V0_DP_RETRAIN  0x06
2262306a36Sopenharmony_ci#define NVIF_OUTP_V0_DP_MST_VCPI 0x07
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciunion nvif_outp_load_detect_args {
2562306a36Sopenharmony_ci	struct nvif_outp_load_detect_v0 {
2662306a36Sopenharmony_ci		__u8  version;
2762306a36Sopenharmony_ci		__u8  load;
2862306a36Sopenharmony_ci		__u8  pad02[2];
2962306a36Sopenharmony_ci		__u32 data; /*TODO: move vbios loadval parsing into nvkm */
3062306a36Sopenharmony_ci	} v0;
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciunion nvif_outp_acquire_args {
3462306a36Sopenharmony_ci	struct nvif_outp_acquire_v0 {
3562306a36Sopenharmony_ci		__u8 version;
3662306a36Sopenharmony_ci#define NVIF_OUTP_ACQUIRE_V0_RGB_CRT 0x00
3762306a36Sopenharmony_ci#define NVIF_OUTP_ACQUIRE_V0_TV      0x01
3862306a36Sopenharmony_ci#define NVIF_OUTP_ACQUIRE_V0_TMDS    0x02
3962306a36Sopenharmony_ci#define NVIF_OUTP_ACQUIRE_V0_LVDS    0x03
4062306a36Sopenharmony_ci#define NVIF_OUTP_ACQUIRE_V0_DP      0x04
4162306a36Sopenharmony_ci		__u8 proto;
4262306a36Sopenharmony_ci		__u8 or;
4362306a36Sopenharmony_ci		__u8 link;
4462306a36Sopenharmony_ci		__u8 pad04[4];
4562306a36Sopenharmony_ci		union {
4662306a36Sopenharmony_ci			struct {
4762306a36Sopenharmony_ci				__u8 head;
4862306a36Sopenharmony_ci				__u8 hdmi;
4962306a36Sopenharmony_ci				__u8 hdmi_max_ac_packet;
5062306a36Sopenharmony_ci				__u8 hdmi_rekey;
5162306a36Sopenharmony_ci#define NVIF_OUTP_ACQUIRE_V0_TMDS_HDMI_SCDC_SCRAMBLE (1 << 0)
5262306a36Sopenharmony_ci#define NVIF_OUTP_ACQUIRE_V0_TMDS_HDMI_SCDC_DIV_BY_4 (1 << 1)
5362306a36Sopenharmony_ci				__u8 hdmi_scdc;
5462306a36Sopenharmony_ci				__u8 hdmi_hda;
5562306a36Sopenharmony_ci				__u8 pad06[2];
5662306a36Sopenharmony_ci			} tmds;
5762306a36Sopenharmony_ci			struct {
5862306a36Sopenharmony_ci				__u8 dual;
5962306a36Sopenharmony_ci				__u8 bpc8;
6062306a36Sopenharmony_ci				__u8 pad02[6];
6162306a36Sopenharmony_ci			} lvds;
6262306a36Sopenharmony_ci			struct {
6362306a36Sopenharmony_ci				__u8 link_nr; /* 0 = highest possible. */
6462306a36Sopenharmony_ci				__u8 link_bw; /* 0 = highest possible, DP BW code otherwise. */
6562306a36Sopenharmony_ci				__u8 hda;
6662306a36Sopenharmony_ci				__u8 mst;
6762306a36Sopenharmony_ci				__u8 pad04[4];
6862306a36Sopenharmony_ci				__u8 dpcd[DP_RECEIVER_CAP_SIZE];
6962306a36Sopenharmony_ci			} dp;
7062306a36Sopenharmony_ci		};
7162306a36Sopenharmony_ci	} v0;
7262306a36Sopenharmony_ci};
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ciunion nvif_outp_release_args {
7562306a36Sopenharmony_ci	struct nvif_outp_release_vn {
7662306a36Sopenharmony_ci	} vn;
7762306a36Sopenharmony_ci};
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ciunion nvif_outp_infoframe_args {
8062306a36Sopenharmony_ci	struct nvif_outp_infoframe_v0 {
8162306a36Sopenharmony_ci		__u8 version;
8262306a36Sopenharmony_ci#define NVIF_OUTP_INFOFRAME_V0_AVI 0
8362306a36Sopenharmony_ci#define NVIF_OUTP_INFOFRAME_V0_VSI 1
8462306a36Sopenharmony_ci		__u8 type;
8562306a36Sopenharmony_ci		__u8 head;
8662306a36Sopenharmony_ci		__u8 pad03[5];
8762306a36Sopenharmony_ci		__u8 data[];
8862306a36Sopenharmony_ci	} v0;
8962306a36Sopenharmony_ci};
9062306a36Sopenharmony_ci
9162306a36Sopenharmony_ciunion nvif_outp_hda_eld_args {
9262306a36Sopenharmony_ci	struct nvif_outp_hda_eld_v0 {
9362306a36Sopenharmony_ci		__u8  version;
9462306a36Sopenharmony_ci		__u8  head;
9562306a36Sopenharmony_ci		__u8  pad02[6];
9662306a36Sopenharmony_ci		__u8  data[];
9762306a36Sopenharmony_ci	} v0;
9862306a36Sopenharmony_ci};
9962306a36Sopenharmony_ci
10062306a36Sopenharmony_ciunion nvif_outp_dp_aux_pwr_args {
10162306a36Sopenharmony_ci	struct nvif_outp_dp_aux_pwr_v0 {
10262306a36Sopenharmony_ci		__u8 version;
10362306a36Sopenharmony_ci		__u8 state;
10462306a36Sopenharmony_ci		__u8 pad02[6];
10562306a36Sopenharmony_ci	} v0;
10662306a36Sopenharmony_ci};
10762306a36Sopenharmony_ci
10862306a36Sopenharmony_ciunion nvif_outp_dp_retrain_args {
10962306a36Sopenharmony_ci	struct nvif_outp_dp_retrain_vn {
11062306a36Sopenharmony_ci	} vn;
11162306a36Sopenharmony_ci};
11262306a36Sopenharmony_ci
11362306a36Sopenharmony_ciunion nvif_outp_dp_mst_vcpi_args {
11462306a36Sopenharmony_ci	struct nvif_outp_dp_mst_vcpi_v0 {
11562306a36Sopenharmony_ci		__u8  version;
11662306a36Sopenharmony_ci		__u8  head;
11762306a36Sopenharmony_ci		__u8  start_slot;
11862306a36Sopenharmony_ci		__u8  num_slots;
11962306a36Sopenharmony_ci		__u16 pbn;
12062306a36Sopenharmony_ci		__u16 aligned_pbn;
12162306a36Sopenharmony_ci	} v0;
12262306a36Sopenharmony_ci};
12362306a36Sopenharmony_ci#endif
124