1e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs#ifndef __NVBIOS_DCB_H__ 2e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs#define __NVBIOS_DCB_H__ 3e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs 4cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggsstruct nouveau_bios; 5cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs 6e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggsenum dcb_output_type { 7e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs DCB_OUTPUT_ANALOG = 0x0, 8e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs DCB_OUTPUT_TV = 0x1, 9e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs DCB_OUTPUT_TMDS = 0x2, 10e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs DCB_OUTPUT_LVDS = 0x3, 11cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs DCB_OUTPUT_DP = 0x6, 12e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs DCB_OUTPUT_EOL = 0xe, 13e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs DCB_OUTPUT_UNUSED = 0xf, 14cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs DCB_OUTPUT_ANY = -1, 15cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs}; 16cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs 17cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggsstruct dcb_output { 18cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs int index; /* may not be raw dcb index if merging has happened */ 198e992c8d9eebc2bd3246252ee5c0422dbbbce7aeBen Skeggs u16 hasht; 208e992c8d9eebc2bd3246252ee5c0422dbbbce7aeBen Skeggs u16 hashm; 21cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs enum dcb_output_type type; 22cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs uint8_t i2c_index; 23cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs uint8_t heads; 24cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs uint8_t connector; 25cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs uint8_t bus; 26cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs uint8_t location; 27cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs uint8_t or; 2875f8693f30017855c6ab33679ac60e4c339193e4Ben Skeggs uint8_t link; 29cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs bool duallink_possible; 30f3ed1048715f2edc10c4dda6148b60e93f6282edBen Skeggs uint8_t extdev; 31cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs union { 32cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs struct sor_conf { 33cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs int link; 34cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs } sorconf; 35cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs struct { 36cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs int maxfreq; 37cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs } crtconf; 38cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs struct { 39cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs struct sor_conf sor; 40cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs bool use_straps_for_mode; 41cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs bool use_acpi_for_edid; 42cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs bool use_power_scripts; 43cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs } lvdsconf; 44cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs struct { 45cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs bool has_component_output; 46cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs } tvconf; 47cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs struct { 48cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs struct sor_conf sor; 49cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs int link_nr; 50cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs int link_bw; 51cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs } dpconf; 52cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs struct { 53cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs struct sor_conf sor; 54cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs int slave_addr; 55cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs } tmdsconf; 56cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs }; 57cb75d97e9c77743ecfcc43375be135a55a4d9b25Ben Skeggs bool i2c_upper_default; 58e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs}; 59e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs 60e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggsu16 dcb_table(struct nouveau_bios *, u8 *ver, u8 *hdr, u8 *ent, u8 *len); 61e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggsu16 dcb_outp(struct nouveau_bios *, u8 idx, u8 *ver, u8 *len); 6275f8693f30017855c6ab33679ac60e4c339193e4Ben Skeggsu16 dcb_outp_parse(struct nouveau_bios *, u8 idx, u8 *, u8 *, 6375f8693f30017855c6ab33679ac60e4c339193e4Ben Skeggs struct dcb_output *); 6475f8693f30017855c6ab33679ac60e4c339193e4Ben Skeggsu16 dcb_outp_match(struct nouveau_bios *, u16 type, u16 mask, u8 *, u8 *, 6575f8693f30017855c6ab33679ac60e4c339193e4Ben Skeggs struct dcb_output *); 66e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggsint dcb_outp_foreach(struct nouveau_bios *, void *data, int (*exec) 67e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs (struct nouveau_bios *, void *, int index, u16 entry)); 68e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs 69e0996aea4c349ba302b63203b7d5cab6034dbdcaBen Skeggs#endif 70