Warning: This file is not a C or C++ file. It does not have highlighting.

1/* SPDX-License-Identifier: MIT */
2#ifndef __NVIF_OUTP_H__
3#define __NVIF_OUTP_H__
4#include <nvif/object.h>
5#include <nvif/if0012.h>
6#include <drm/display/drm_dp.h>
7struct nvif_disp;
8
9struct nvif_outp {
10 struct nvif_object object;
11 u32 id;
12
13 struct {
14 enum {
15 NVIF_OUTP_DAC,
16 NVIF_OUTP_SOR,
17 NVIF_OUTP_PIOR,
18 } type;
19
20 enum {
21 NVIF_OUTP_RGB_CRT,
22 NVIF_OUTP_TMDS,
23 NVIF_OUTP_LVDS,
24 NVIF_OUTP_DP,
25 } proto;
26
27 u8 heads;
28#define NVIF_OUTP_DDC_INVALID 0xff
29 u8 ddc;
30 u8 conn;
31
32 union {
33 struct {
34 u32 freq_max;
35 } rgb_crt;
36 struct {
37 bool dual;
38 } tmds;
39 struct {
40 bool acpi_edid;
41 } lvds;
42 struct {
43 u8 aux;
44 bool mst;
45 bool increased_wm;
46 u8 link_nr;
47 u32 link_bw;
48 } dp;
49 };
50 } info;
51
52 struct {
53 int id;
54 int link;
55 } or;
56};
57
58int nvif_outp_ctor(struct nvif_disp *, const char *name, int id, struct nvif_outp *);
59void nvif_outp_dtor(struct nvif_outp *);
60
61enum nvif_outp_detect_status {
62 NOT_PRESENT,
63 PRESENT,
64 UNKNOWN,
65};
66
67enum nvif_outp_detect_status nvif_outp_detect(struct nvif_outp *);
68int nvif_outp_edid_get(struct nvif_outp *, u8 **pedid);
69
70int nvif_outp_load_detect(struct nvif_outp *, u32 loadval);
71int nvif_outp_acquire_dac(struct nvif_outp *);
72int nvif_outp_acquire_sor(struct nvif_outp *, bool hda);
73int nvif_outp_acquire_pior(struct nvif_outp *);
74int nvif_outp_inherit_rgb_crt(struct nvif_outp *outp, u8 *proto_out);
75int nvif_outp_inherit_lvds(struct nvif_outp *outp, u8 *proto_out);
76int nvif_outp_inherit_tmds(struct nvif_outp *outp, u8 *proto_out);
77int nvif_outp_inherit_dp(struct nvif_outp *outp, u8 *proto_out);
78
79void nvif_outp_release(struct nvif_outp *);
80
81static inline bool
82nvif_outp_acquired(struct nvif_outp *outp)
83{
84 return outp->or.id >= 0;
85}
86
87int nvif_outp_bl_get(struct nvif_outp *);
88int nvif_outp_bl_set(struct nvif_outp *, int level);
89
90int nvif_outp_lvds(struct nvif_outp *, bool dual, bool bpc8);
91
92int nvif_outp_hdmi(struct nvif_outp *, int head, bool enable, u8 max_ac_packet, u8 rekey, u32 khz,
93 bool scdc, bool scdc_scrambling, bool scdc_low_rates);
94
95int nvif_outp_infoframe(struct nvif_outp *, u8 type, struct nvif_outp_infoframe_v0 *, u32 size);
96int nvif_outp_hda_eld(struct nvif_outp *, int head, void *data, u32 size);
97
98int nvif_outp_dp_aux_pwr(struct nvif_outp *, bool enable);
99int nvif_outp_dp_aux_xfer(struct nvif_outp *, u8 type, u8 *size, u32 addr, u8 *data);
100
101struct nvif_outp_dp_rate {
102 int dpcd; /* -1 for non-indexed rates */
103 u32 rate;
104};
105
106int nvif_outp_dp_rates(struct nvif_outp *, struct nvif_outp_dp_rate *rate, int rate_nr);
107int nvif_outp_dp_train(struct nvif_outp *, u8 dpcd[DP_RECEIVER_CAP_SIZE],
108 u8 lttprs, u8 link_nr, u32 link_bw, bool mst, bool post_lt_adj,
109 bool retrain);
110int nvif_outp_dp_drive(struct nvif_outp *, u8 link_nr, u8 pe[4], u8 vs[4]);
111int nvif_outp_dp_sst(struct nvif_outp *, int head, u32 watermark, u32 hblanksym, u32 vblanksym);
112int nvif_outp_dp_mst_id_get(struct nvif_outp *, u32 *id);
113int nvif_outp_dp_mst_id_put(struct nvif_outp *, u32 id);
114int nvif_outp_dp_mst_vcpi(struct nvif_outp *, int head,
115 u8 start_slot, u8 num_slots, u16 pbn, u16 aligned_pbn);
116#endif
117

Warning: This file is not a C or C++ file. It does not have highlighting.

source code of linux/drivers/gpu/drm/nouveau/include/nvif/outp.h