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