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