1#ifndef __NVBIOS_DCB_H__
2#define __NVBIOS_DCB_H__
3enum dcb_output_type {
4 DCB_OUTPUT_ANALOG = 0x0,
5 DCB_OUTPUT_TV = 0x1,
6 DCB_OUTPUT_TMDS = 0x2,
7 DCB_OUTPUT_LVDS = 0x3,
8 DCB_OUTPUT_DP = 0x6,
9 DCB_OUTPUT_EOL = 0xe,
10 DCB_OUTPUT_UNUSED = 0xf,
11 DCB_OUTPUT_ANY = -1,
12};
13
14struct dcb_output {
15 int index;
16 u16 hasht;
17 u16 hashm;
18 enum dcb_output_type type;
19 uint8_t i2c_index;
20 uint8_t heads;
21 uint8_t connector;
22 uint8_t bus;
23 uint8_t location;
24 uint8_t or;
25 uint8_t link;
26 bool duallink_possible;
27 uint8_t extdev;
28 union {
29 struct sor_conf {
30 int link;
31 } sorconf;
32 struct {
33 int maxfreq;
34 } crtconf;
35 struct {
36 struct sor_conf sor;
37 bool use_straps_for_mode;
38 bool use_acpi_for_edid;
39 bool use_power_scripts;
40 } lvdsconf;
41 struct {
42 bool has_component_output;
43 } tvconf;
44 struct {
45 struct sor_conf sor;
46 int link_nr;
47 int link_bw;
48 } dpconf;
49 struct {
50 struct sor_conf sor;
51 int slave_addr;
52 } tmdsconf;
53 };
54 bool i2c_upper_default;
55};
56
57u16 dcb_table(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *ent, u8 *len);
58u16 dcb_outp(struct nvkm_bios *, u8 idx, u8 *ver, u8 *len);
59u16 dcb_outp_parse(struct nvkm_bios *, u8 idx, u8 *, u8 *,
60 struct dcb_output *);
61u16 dcb_outp_match(struct nvkm_bios *, u16 type, u16 mask, u8 *, u8 *,
62 struct dcb_output *);
63int dcb_outp_foreach(struct nvkm_bios *, void *data, int (*exec)
64 (struct nvkm_bios *, void *, int index, u16 entry));
65#endif
66