xref: /linux/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/dcb.h (revision 2ba9268dd603d23e17643437b2246acb6844953b)
1 #ifndef __NVBIOS_DCB_H__
2 #define __NVBIOS_DCB_H__
3 enum 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 
14 struct dcb_output {
15 	int index;	/* may not be raw dcb index if merging has happened */
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 
57 u16 dcb_table(struct nvkm_bios *, u8 *ver, u8 *hdr, u8 *ent, u8 *len);
58 u16 dcb_outp(struct nvkm_bios *, u8 idx, u8 *ver, u8 *len);
59 u16 dcb_outp_parse(struct nvkm_bios *, u8 idx, u8 *, u8 *,
60 		   struct dcb_output *);
61 u16 dcb_outp_match(struct nvkm_bios *, u16 type, u16 mask, u8 *, u8 *,
62 		   struct dcb_output *);
63 int dcb_outp_foreach(struct nvkm_bios *, void *data, int (*exec)
64 		     (struct nvkm_bios *, void *, int index, u16 entry));
65 #endif
66