| #ifndef __NVBIOS_DCB_H__ |
| #define __NVBIOS_DCB_H__ |
| |
| struct nouveau_bios; |
| |
| enum dcb_output_type { |
| DCB_OUTPUT_ANALOG = 0x0, |
| DCB_OUTPUT_TV = 0x1, |
| DCB_OUTPUT_TMDS = 0x2, |
| DCB_OUTPUT_LVDS = 0x3, |
| DCB_OUTPUT_DP = 0x6, |
| DCB_OUTPUT_EOL = 0xe, |
| DCB_OUTPUT_UNUSED = 0xf, |
| DCB_OUTPUT_ANY = -1, |
| }; |
| |
| struct dcb_output { |
| int index; /* may not be raw dcb index if merging has happened */ |
| enum dcb_output_type type; |
| uint8_t i2c_index; |
| uint8_t heads; |
| uint8_t connector; |
| uint8_t bus; |
| uint8_t location; |
| uint8_t or; |
| bool duallink_possible; |
| union { |
| struct sor_conf { |
| int link; |
| } sorconf; |
| struct { |
| int maxfreq; |
| } crtconf; |
| struct { |
| struct sor_conf sor; |
| bool use_straps_for_mode; |
| bool use_acpi_for_edid; |
| bool use_power_scripts; |
| } lvdsconf; |
| struct { |
| bool has_component_output; |
| } tvconf; |
| struct { |
| struct sor_conf sor; |
| int link_nr; |
| int link_bw; |
| } dpconf; |
| struct { |
| struct sor_conf sor; |
| int slave_addr; |
| } tmdsconf; |
| }; |
| bool i2c_upper_default; |
| }; |
| |
| u16 dcb_table(struct nouveau_bios *, u8 *ver, u8 *hdr, u8 *ent, u8 *len); |
| u16 dcb_outp(struct nouveau_bios *, u8 idx, u8 *ver, u8 *len); |
| int dcb_outp_foreach(struct nouveau_bios *, void *data, int (*exec) |
| (struct nouveau_bios *, void *, int index, u16 entry)); |
| |
| |
| /* BIT 'U'/'d' table encoder subtables have hashes matching them to |
| * a particular set of encoders. |
| * |
| * This function returns true if a particular DCB entry matches. |
| */ |
| static inline bool |
| dcb_hash_match(struct dcb_output *dcb, u32 hash) |
| { |
| if ((hash & 0x000000f0) != (dcb->location << 4)) |
| return false; |
| if ((hash & 0x0000000f) != dcb->type) |
| return false; |
| if (!(hash & (dcb->or << 16))) |
| return false; |
| |
| switch (dcb->type) { |
| case DCB_OUTPUT_TMDS: |
| case DCB_OUTPUT_LVDS: |
| case DCB_OUTPUT_DP: |
| if (hash & 0x00c00000) { |
| if (!(hash & (dcb->sorconf.link << 22))) |
| return false; |
| } |
| default: |
| return true; |
| } |
| } |
| |
| #endif |