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> |
7 | struct nvif_disp; |
8 | |
9 | struct 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 | |
58 | int nvif_outp_ctor(struct nvif_disp *, const char *name, int id, struct nvif_outp *); |
59 | void nvif_outp_dtor(struct nvif_outp *); |
60 | |
61 | enum nvif_outp_detect_status { |
62 | NOT_PRESENT, |
63 | PRESENT, |
64 | UNKNOWN, |
65 | }; |
66 | |
67 | enum nvif_outp_detect_status nvif_outp_detect(struct nvif_outp *); |
68 | int nvif_outp_edid_get(struct nvif_outp *, u8 **pedid); |
69 | |
70 | int nvif_outp_load_detect(struct nvif_outp *, u32 loadval); |
71 | int nvif_outp_acquire_dac(struct nvif_outp *); |
72 | int nvif_outp_acquire_sor(struct nvif_outp *, bool hda); |
73 | int nvif_outp_acquire_pior(struct nvif_outp *); |
74 | int nvif_outp_inherit_rgb_crt(struct nvif_outp *outp, u8 *proto_out); |
75 | int nvif_outp_inherit_lvds(struct nvif_outp *outp, u8 *proto_out); |
76 | int nvif_outp_inherit_tmds(struct nvif_outp *outp, u8 *proto_out); |
77 | int nvif_outp_inherit_dp(struct nvif_outp *outp, u8 *proto_out); |
78 | |
79 | void nvif_outp_release(struct nvif_outp *); |
80 | |
81 | static inline bool |
82 | nvif_outp_acquired(struct nvif_outp *outp) |
83 | { |
84 | return outp->or.id >= 0; |
85 | } |
86 | |
87 | int nvif_outp_bl_get(struct nvif_outp *); |
88 | int nvif_outp_bl_set(struct nvif_outp *, int level); |
89 | |
90 | int nvif_outp_lvds(struct nvif_outp *, bool dual, bool bpc8); |
91 | |
92 | int 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 | |
95 | int nvif_outp_infoframe(struct nvif_outp *, u8 type, struct nvif_outp_infoframe_v0 *, u32 size); |
96 | int nvif_outp_hda_eld(struct nvif_outp *, int head, void *data, u32 size); |
97 | |
98 | int nvif_outp_dp_aux_pwr(struct nvif_outp *, bool enable); |
99 | int nvif_outp_dp_aux_xfer(struct nvif_outp *, u8 type, u8 *size, u32 addr, u8 *data); |
100 | |
101 | struct nvif_outp_dp_rate { |
102 | int dpcd; /* -1 for non-indexed rates */ |
103 | u32 rate; |
104 | }; |
105 | |
106 | int nvif_outp_dp_rates(struct nvif_outp *, struct nvif_outp_dp_rate *rate, int rate_nr); |
107 | int 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); |
110 | int nvif_outp_dp_drive(struct nvif_outp *, u8 link_nr, u8 pe[4], u8 vs[4]); |
111 | int nvif_outp_dp_sst(struct nvif_outp *, int head, u32 watermark, u32 hblanksym, u32 vblanksym); |
112 | int nvif_outp_dp_mst_id_get(struct nvif_outp *, u32 *id); |
113 | int nvif_outp_dp_mst_id_put(struct nvif_outp *, u32 id); |
114 | int 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.