xref: /plan9/sys/src/cmd/aux/vga/vga.h (revision b249590635b298a2b629c4458908d752eced8f6f)
1219b2ee8SDavid du Colombier /*
2219b2ee8SDavid du Colombier  * Generic VGA registers.
3219b2ee8SDavid du Colombier  */
4219b2ee8SDavid du Colombier enum {
5219b2ee8SDavid du Colombier 	MiscW		= 0x03C2,	/* Miscellaneous Output (W) */
6219b2ee8SDavid du Colombier 	MiscR		= 0x03CC,	/* Miscellaneous Output (R) */
7219b2ee8SDavid du Colombier 	Status0		= 0x03C2,	/* Input status 0 (R) */
8219b2ee8SDavid du Colombier 	Status1		= 0x03DA,	/* Input Status 1 (R) */
9219b2ee8SDavid du Colombier 	FeatureR	= 0x03CA,	/* Feature Control (R) */
10219b2ee8SDavid du Colombier 	FeatureW	= 0x03DA,	/* Feature Control (W) */
11219b2ee8SDavid du Colombier 
12219b2ee8SDavid du Colombier 	Seqx		= 0x03C4,	/* Sequencer Index, Data at Seqx+1 */
13219b2ee8SDavid du Colombier 	Crtx		= 0x03D4,	/* CRT Controller Index, Data at Crtx+1 */
14219b2ee8SDavid du Colombier 	Grx		= 0x03CE,	/* Graphics Controller Index, Data at Grx+1 */
15219b2ee8SDavid du Colombier 	Attrx		= 0x03C0,	/* Attribute Controller Index and Data */
16219b2ee8SDavid du Colombier 
17219b2ee8SDavid du Colombier 	PaddrW		= 0x03C8,	/* Palette Address Register, write */
18219b2ee8SDavid du Colombier 	Pdata		= 0x03C9,	/* Palette Data Register */
19219b2ee8SDavid du Colombier 	Pixmask		= 0x03C6,	/* Pixel Mask Register */
20219b2ee8SDavid du Colombier 	PaddrR		= 0x03C7,	/* Palette Address Register, read */
21219b2ee8SDavid du Colombier 	Pstatus		= 0x03C7,	/* DAC Status (RO) */
22219b2ee8SDavid du Colombier 
23219b2ee8SDavid du Colombier 	Pcolours	= 256,		/* Palette */
24219b2ee8SDavid du Colombier 	Red		= 0,
25219b2ee8SDavid du Colombier 	Green		= 1,
26219b2ee8SDavid du Colombier 	Blue		= 2,
27219b2ee8SDavid du Colombier 
287dd7cddfSDavid du Colombier 	Pblack		= 0x00,
297dd7cddfSDavid du Colombier 	Pwhite		= 0xFF,
30219b2ee8SDavid du Colombier };
31219b2ee8SDavid du Colombier 
32219b2ee8SDavid du Colombier enum {
337dd7cddfSDavid du Colombier 	RefFreq		= 14318180,	/* External Reference Clock frequency */
34219b2ee8SDavid du Colombier 	VgaFreq0	= 25175000,
35219b2ee8SDavid du Colombier 	VgaFreq1	= 28322000,
36219b2ee8SDavid du Colombier };
37219b2ee8SDavid du Colombier 
389a747e4fSDavid du Colombier enum {
399a747e4fSDavid du Colombier 	Namelen		= 32,
409a747e4fSDavid du Colombier };
419a747e4fSDavid du Colombier 
42219b2ee8SDavid du Colombier typedef struct Ctlr Ctlr;
43219b2ee8SDavid du Colombier typedef struct Vga Vga;
44219b2ee8SDavid du Colombier 
45219b2ee8SDavid du Colombier typedef struct Ctlr {
469a747e4fSDavid du Colombier 	char	name[Namelen+1];
47219b2ee8SDavid du Colombier 	void	(*snarf)(Vga*, Ctlr*);
48219b2ee8SDavid du Colombier 	void	(*options)(Vga*, Ctlr*);
49219b2ee8SDavid du Colombier 	void	(*init)(Vga*, Ctlr*);
50219b2ee8SDavid du Colombier 	void	(*load)(Vga*, Ctlr*);
51219b2ee8SDavid du Colombier 	void	(*dump)(Vga*, Ctlr*);
52219b2ee8SDavid du Colombier 	char*	type;
53219b2ee8SDavid du Colombier 
54219b2ee8SDavid du Colombier 	ulong	flag;
55219b2ee8SDavid du Colombier 
56219b2ee8SDavid du Colombier 	Ctlr*	link;
57219b2ee8SDavid du Colombier } Ctlr;
58219b2ee8SDavid du Colombier 
59219b2ee8SDavid du Colombier enum {					/* flag */
607dd7cddfSDavid du Colombier 	Fsnarf		= 0x00000001,	/* snarf done */
617dd7cddfSDavid du Colombier 	Foptions	= 0x00000002,	/* options done */
627dd7cddfSDavid du Colombier 	Finit		= 0x00000004,	/* init done */
6314414594SDavid du Colombier 	Fload		= 0x00000008,	/* load done */
647dd7cddfSDavid du Colombier 	Fdump		= 0x00000010,	/* dump done */
6514414594SDavid du Colombier 	Ferror		= 0x00000020, /* error during snarf */
66219b2ee8SDavid du Colombier 
67219b2ee8SDavid du Colombier 	Hpclk2x8	= 0x00000100,	/* have double 8-bit mode */
68219b2ee8SDavid du Colombier 	Upclk2x8	= 0x00000200,	/* use double 8-bit mode */
69219b2ee8SDavid du Colombier 	Henhanced	= 0x00000400,	/* have enhanced mode */
70219b2ee8SDavid du Colombier 	Uenhanced	= 0x00000800,	/* use enhanced mode */
71219b2ee8SDavid du Colombier 	Hpvram		= 0x00001000,	/* have parallel VRAM */
72219b2ee8SDavid du Colombier 	Upvram		= 0x00002000,	/* use parallel VRAM */
73219b2ee8SDavid du Colombier 	Hextsid		= 0x00004000,	/* have external SID mode */
74219b2ee8SDavid du Colombier 	Uextsid		= 0x00008000,	/* use external SID mode */
75219b2ee8SDavid du Colombier 	Hclk2		= 0x00010000,	/* have clock-doubler */
76219b2ee8SDavid du Colombier 	Uclk2		= 0x00020000,	/* use clock-doubler */
777dd7cddfSDavid du Colombier 	Hlinear		= 0x00040000,	/* have linear-address mode */
787dd7cddfSDavid du Colombier 	Ulinear		= 0x00080000,	/* use linear-address mode */
797dd7cddfSDavid du Colombier 	Hclkdiv		= 0x00100000,	/* have a clock-divisor */
807dd7cddfSDavid du Colombier 	Uclkdiv		= 0x00200000,	/* use clock-divisor */
817dd7cddfSDavid du Colombier 	Hsid32		= 0x00400000,	/* have a 32-bit (as opposed to 64-bit) SID */
82219b2ee8SDavid du Colombier };
83219b2ee8SDavid du Colombier 
847dd7cddfSDavid du Colombier typedef struct Attr Attr;
857dd7cddfSDavid du Colombier typedef struct Attr {
867dd7cddfSDavid du Colombier 	char*	attr;
877dd7cddfSDavid du Colombier 	char*	val;
887dd7cddfSDavid du Colombier 
897dd7cddfSDavid du Colombier 	Attr*	next;
907dd7cddfSDavid du Colombier } Attr;
917dd7cddfSDavid du Colombier 
92219b2ee8SDavid du Colombier typedef struct Mode {
939a747e4fSDavid du Colombier 	char	type[Namelen+1];	/* monitor type e.g. "vs1782" */
949a747e4fSDavid du Colombier 	char	size[Namelen+1];	/* size e.g. "1376x1024x8" */
959a747e4fSDavid du Colombier 	char	chan[Namelen+1];	/* channel descriptor, e.g. "m8" or "r8g8b8a8" */
96ffa04b9dSDavid du Colombier 	char name[Namelen+1];	/* optional */
97219b2ee8SDavid du Colombier 
98219b2ee8SDavid du Colombier 	int	frequency;		/* Dot Clock (MHz) */
997dd7cddfSDavid du Colombier 	int	deffrequency;		/* Default dot clock if calculation can't be done */
100219b2ee8SDavid du Colombier 	int	x;			/* Horizontal Display End (Crt01), from .size[] */
101219b2ee8SDavid du Colombier 	int	y;			/* Vertical Display End (Crt18), from .size[] */
102219b2ee8SDavid du Colombier 	int	z;			/* depth, from .size[] */
103219b2ee8SDavid du Colombier 
104219b2ee8SDavid du Colombier 	int	ht;			/* Horizontal Total (Crt00) */
105219b2ee8SDavid du Colombier 	int	shb;			/* Start Horizontal Blank (Crt02) */
106219b2ee8SDavid du Colombier 	int	ehb;			/* End Horizontal Blank (Crt03) */
107219b2ee8SDavid du Colombier 
1087dd7cddfSDavid du Colombier 	int	shs;			/* optional Start Horizontal Sync (Crt04) */
1097dd7cddfSDavid du Colombier 	int	ehs;			/* optional End Horizontal Sync (Crt05) */
1107dd7cddfSDavid du Colombier 
111219b2ee8SDavid du Colombier 	int	vt;			/* Vertical Total (Crt06) */
112219b2ee8SDavid du Colombier 	int	vrs;			/* Vertical Retrace Start (Crt10) */
113219b2ee8SDavid du Colombier 	int	vre;			/* Vertical Retrace End (Crt11) */
114219b2ee8SDavid du Colombier 
115ffa04b9dSDavid du Colombier 	int		vbs;		/* optional Vertical Blank Start */
116ffa04b9dSDavid du Colombier 	int		vbe;		/* optional Vertical Blank End */
117ffa04b9dSDavid du Colombier 
1187dd7cddfSDavid du Colombier 	ulong	videobw;
1197dd7cddfSDavid du Colombier 
120219b2ee8SDavid du Colombier 	char	hsync;
121219b2ee8SDavid du Colombier 	char	vsync;
122219b2ee8SDavid du Colombier 	char	interlace;
1237dd7cddfSDavid du Colombier 
1247dd7cddfSDavid du Colombier 	Attr*	attr;
125219b2ee8SDavid du Colombier } Mode;
126219b2ee8SDavid du Colombier 
127219b2ee8SDavid du Colombier /*
128219b2ee8SDavid du Colombier  * The sizes of the register sets are large as many SVGA and GUI chips have extras.
129219b2ee8SDavid du Colombier  * The Crt registers are ushorts in order to keep overflow bits handy.
130219b2ee8SDavid du Colombier  * The clock elements are used for communication between the VGA, RAMDAC and clock chips;
131219b2ee8SDavid du Colombier  * they can use them however they like, it's assumed they will be used compatibly.
1329a747e4fSDavid du Colombier  *
1339a747e4fSDavid du Colombier  * The mode->x, mode->y coordinates are the physical size of the screen.
1349a747e4fSDavid du Colombier  * Virtx and virty are the coordinates of the underlying memory image.
1359a747e4fSDavid du Colombier  * This can be used to implement panning around a larger screen or to cope
1369a747e4fSDavid du Colombier  * with chipsets that need the in-memory pixel line width to be a round number.
1379a747e4fSDavid du Colombier  * For example, virge.c uses this because the Savage chipset needs the pixel
1389a747e4fSDavid du Colombier  * width to be a multiple of 16.  Also, mga2164w.c needs the pixel width
1399a747e4fSDavid du Colombier  * to be a multiple of 128.
1409a747e4fSDavid du Colombier  *
1419a747e4fSDavid du Colombier  * Vga->panning differentiates between these two uses of virtx, virty.
1429a747e4fSDavid du Colombier  *
1439a747e4fSDavid du Colombier  * (14 October 2001, rsc) Most drivers don't know the difference between
1449a747e4fSDavid du Colombier  * mode->x and virtx, a bug that should be corrected.  Vga.c, virge.c, and
1459a747e4fSDavid du Colombier  * mga2164w.c know.  For the others, the computation that sets crt[0x13]
1469a747e4fSDavid du Colombier  * should use virtx instead of mode->x (and maybe other places change too,
1479a747e4fSDavid du Colombier  * dependent on the driver).
148219b2ee8SDavid du Colombier  */
149219b2ee8SDavid du Colombier typedef struct Vga {
150219b2ee8SDavid du Colombier 	uchar	misc;
151219b2ee8SDavid du Colombier 	uchar	feature;
152219b2ee8SDavid du Colombier 	uchar	sequencer[256];
153219b2ee8SDavid du Colombier 	ushort	crt[256];
154219b2ee8SDavid du Colombier 	uchar	graphics[256];
155219b2ee8SDavid du Colombier 	uchar	attribute[256];
156219b2ee8SDavid du Colombier 	uchar	pixmask;
157219b2ee8SDavid du Colombier 	uchar	pstatus;
158219b2ee8SDavid du Colombier 	uchar	palette[Pcolours][3];
159219b2ee8SDavid du Colombier 
1607dd7cddfSDavid du Colombier 	ulong	f[2];			/* clock */
1617dd7cddfSDavid du Colombier 	ulong	d[2];
1627dd7cddfSDavid du Colombier 	ulong	i[2];
1637dd7cddfSDavid du Colombier 	ulong	m[2];
1647dd7cddfSDavid du Colombier 	ulong	n[2];
1657dd7cddfSDavid du Colombier 	ulong	p[2];
1667dd7cddfSDavid du Colombier 	ulong	q[2];
1677dd7cddfSDavid du Colombier 	ulong	r[2];
168219b2ee8SDavid du Colombier 
1697dd7cddfSDavid du Colombier 	ulong	vma;			/* video memory linear-address alignment */
1707dd7cddfSDavid du Colombier 	ulong	vmb;			/* video memory linear-address base */
1717dd7cddfSDavid du Colombier 	ulong	apz;			/* aperture size */
1727dd7cddfSDavid du Colombier 	ulong	vmz;			/* video memory size */
1737dd7cddfSDavid du Colombier 
1747dd7cddfSDavid du Colombier 	ulong	membw;			/* memory bandwidth, MB/s */
1757dd7cddfSDavid du Colombier 
1767dd7cddfSDavid du Colombier 	long	offset;			/* BIOS string offset */
1777dd7cddfSDavid du Colombier 	char*	bios;			/* matching BIOS string */
1789a747e4fSDavid du Colombier 	Pcidev*	pci;			/* matching PCI device if any */
179219b2ee8SDavid du Colombier 
180219b2ee8SDavid du Colombier 	Mode*	mode;
181219b2ee8SDavid du Colombier 
1827dd7cddfSDavid du Colombier 	ulong	virtx;			/* resolution of virtual screen */
1837dd7cddfSDavid du Colombier 	ulong	virty;
1847dd7cddfSDavid du Colombier 
1859a747e4fSDavid du Colombier 	int	panning;		/* pan the virtual screen */
1869a747e4fSDavid du Colombier 
187219b2ee8SDavid du Colombier 	Ctlr*	ctlr;
188219b2ee8SDavid du Colombier 	Ctlr*	ramdac;
189219b2ee8SDavid du Colombier 	Ctlr*	clock;
190219b2ee8SDavid du Colombier 	Ctlr*	hwgc;
191b0dcc5a8SDavid du Colombier 	Ctlr* vesa;
192219b2ee8SDavid du Colombier 	Ctlr*	link;
1937dd7cddfSDavid du Colombier 	int	linear;
1947dd7cddfSDavid du Colombier 	Attr*	attr;
195219b2ee8SDavid du Colombier 
196219b2ee8SDavid du Colombier 	void*	private;
197219b2ee8SDavid du Colombier } Vga;
198219b2ee8SDavid du Colombier 
19959cc4ca5SDavid du Colombier /* 3dfx.c */
20059cc4ca5SDavid du Colombier extern Ctlr tdfx;
20159cc4ca5SDavid du Colombier extern Ctlr tdfxhwgc;
20259cc4ca5SDavid du Colombier 
2037dd7cddfSDavid du Colombier /* ark2000pv.c */
2047dd7cddfSDavid du Colombier extern Ctlr ark2000pv;
2057dd7cddfSDavid du Colombier extern Ctlr ark2000pvhwgc;
2067dd7cddfSDavid du Colombier 
207219b2ee8SDavid du Colombier /* att20c49x.c */
2087dd7cddfSDavid du Colombier extern Ctlr att20c490;
209219b2ee8SDavid du Colombier extern Ctlr att20c491;
210219b2ee8SDavid du Colombier extern Ctlr att20c492;
211219b2ee8SDavid du Colombier 
212219b2ee8SDavid du Colombier /* att21c498.c */
213219b2ee8SDavid du Colombier extern uchar attdaci(uchar);
214219b2ee8SDavid du Colombier extern void attdaco(uchar, uchar);
215219b2ee8SDavid du Colombier extern Ctlr att21c498;
216219b2ee8SDavid du Colombier 
217219b2ee8SDavid du Colombier /* bt485.c */
218219b2ee8SDavid du Colombier extern uchar bt485i(uchar);
219219b2ee8SDavid du Colombier extern void bt485o(uchar, uchar);
220219b2ee8SDavid du Colombier extern Ctlr bt485;
221219b2ee8SDavid du Colombier 
222219b2ee8SDavid du Colombier /* ch9294.c */
223219b2ee8SDavid du Colombier extern Ctlr ch9294;
224219b2ee8SDavid du Colombier 
225219b2ee8SDavid du Colombier /* clgd542x.c */
2267dd7cddfSDavid du Colombier extern void clgd54xxclock(Vga*, Ctlr*);
227219b2ee8SDavid du Colombier extern Ctlr clgd542x;
2287dd7cddfSDavid du Colombier extern Ctlr clgd542xhwgc;
2297dd7cddfSDavid du Colombier 
2307dd7cddfSDavid du Colombier /* clgd546x.c */
2317dd7cddfSDavid du Colombier extern Ctlr clgd546x;
2327dd7cddfSDavid du Colombier extern Ctlr clgd546xhwgc;
2337dd7cddfSDavid du Colombier 
2347dd7cddfSDavid du Colombier /* ct65540.c */
2357dd7cddfSDavid du Colombier extern Ctlr ct65540;
2367dd7cddfSDavid du Colombier extern Ctlr ct65545;
2377dd7cddfSDavid du Colombier extern Ctlr ct65545hwgc;
2387dd7cddfSDavid du Colombier 
2397dd7cddfSDavid du Colombier /* cyber938x.c */
2407dd7cddfSDavid du Colombier extern Ctlr cyber938x;
2417dd7cddfSDavid du Colombier extern Ctlr cyber938xhwgc;
242219b2ee8SDavid du Colombier 
243219b2ee8SDavid du Colombier /* data.c */
244219b2ee8SDavid du Colombier extern int cflag;
245219b2ee8SDavid du Colombier extern int dflag;
246219b2ee8SDavid du Colombier extern Ctlr *ctlrs[];
247219b2ee8SDavid du Colombier extern ushort dacxreg[4];
248219b2ee8SDavid du Colombier 
249219b2ee8SDavid du Colombier /* db.c */
2507dd7cddfSDavid du Colombier extern char* dbattr(Attr*, char*);
251219b2ee8SDavid du Colombier extern int dbctlr(char*, Vga*);
252219b2ee8SDavid du Colombier extern Mode* dbmode(char*, char*, char*);
253219b2ee8SDavid du Colombier extern void dbdumpmode(Mode*);
254219b2ee8SDavid du Colombier 
2557dd7cddfSDavid du Colombier /* error.c */
2567dd7cddfSDavid du Colombier extern void error(char*, ...);
2577dd7cddfSDavid du Colombier extern void trace(char*, ...);
2587dd7cddfSDavid du Colombier extern int vflag, Vflag;
2597dd7cddfSDavid du Colombier 
260219b2ee8SDavid du Colombier /* et4000.c */
261219b2ee8SDavid du Colombier extern Ctlr et4000;
262219b2ee8SDavid du Colombier 
263219b2ee8SDavid du Colombier /* et4000hwgc.c */
264219b2ee8SDavid du Colombier extern Ctlr et4000hwgc;
265219b2ee8SDavid du Colombier 
2667dd7cddfSDavid du Colombier /* hiqvideo.c */
2677dd7cddfSDavid du Colombier extern Ctlr hiqvideo;
2687dd7cddfSDavid du Colombier extern Ctlr hiqvideohwgc;
2697dd7cddfSDavid du Colombier 
2709a747e4fSDavid du Colombier /* i81x.c */
2719a747e4fSDavid du Colombier extern Ctlr i81x;
2729a747e4fSDavid du Colombier extern Ctlr i81xhwgc;
2739a747e4fSDavid du Colombier 
274219b2ee8SDavid du Colombier /* ibm8514.c */
275219b2ee8SDavid du Colombier extern Ctlr ibm8514;
276219b2ee8SDavid du Colombier 
277219b2ee8SDavid du Colombier /* icd2061a.c */
278219b2ee8SDavid du Colombier extern Ctlr icd2061a;
279219b2ee8SDavid du Colombier 
280219b2ee8SDavid du Colombier /* ics2494.c */
281219b2ee8SDavid du Colombier extern Ctlr ics2494;
282219b2ee8SDavid du Colombier extern Ctlr ics2494a;
283219b2ee8SDavid du Colombier 
2847dd7cddfSDavid du Colombier /* ics534x.c */
2857dd7cddfSDavid du Colombier extern Ctlr ics534x;
2867dd7cddfSDavid du Colombier 
287219b2ee8SDavid du Colombier /* io.c */
288219b2ee8SDavid du Colombier extern uchar inportb(long);
289219b2ee8SDavid du Colombier extern void outportb(long, uchar);
290219b2ee8SDavid du Colombier extern ushort inportw(long);
291219b2ee8SDavid du Colombier extern void outportw(long, ushort);
292219b2ee8SDavid du Colombier extern ulong inportl(long);
293219b2ee8SDavid du Colombier extern void outportl(long, ulong);
294219b2ee8SDavid du Colombier extern char* vgactlr(char*, char*);
295219b2ee8SDavid du Colombier extern void vgactlw(char*, char*);
2967dd7cddfSDavid du Colombier extern char* readbios(long, long);
2977dd7cddfSDavid du Colombier extern void dumpbios(long);
298219b2ee8SDavid du Colombier extern void error(char*, ...);
299219b2ee8SDavid du Colombier extern void* alloc(ulong);
300219b2ee8SDavid du Colombier extern void printitem(char*, char*);
301219b2ee8SDavid du Colombier extern void printreg(ulong);
3027dd7cddfSDavid du Colombier extern void printflag(ulong);
3037dd7cddfSDavid du Colombier extern void setpalette(int, int, int, int);
3047dd7cddfSDavid du Colombier extern int curprintindex;
305219b2ee8SDavid du Colombier 
306219b2ee8SDavid du Colombier /* mach32.c */
307219b2ee8SDavid du Colombier extern Ctlr mach32;
308219b2ee8SDavid du Colombier 
309219b2ee8SDavid du Colombier /* mach64.c */
310219b2ee8SDavid du Colombier extern Ctlr mach64;
311219b2ee8SDavid du Colombier 
3127dd7cddfSDavid du Colombier /* mach64xx.c */
3137dd7cddfSDavid du Colombier extern Ctlr mach64xx;
3147dd7cddfSDavid du Colombier extern Ctlr mach64xxhwgc;
3157dd7cddfSDavid du Colombier 
316219b2ee8SDavid du Colombier /* main.c */
3177dd7cddfSDavid du Colombier extern char* chanstr[];
318219b2ee8SDavid du Colombier extern void resyncinit(Vga*, Ctlr*, ulong, ulong);
319219b2ee8SDavid du Colombier extern void sequencer(Vga*, int);
320219b2ee8SDavid du Colombier extern void main(int, char*[]);
3217dd7cddfSDavid du Colombier Biobuf stdout;
3227dd7cddfSDavid du Colombier 
3237dd7cddfSDavid du Colombier /* mga2164w.c */
3247dd7cddfSDavid du Colombier extern Ctlr mga2164w;
3257dd7cddfSDavid du Colombier extern Ctlr mga2164whwgc;
3267dd7cddfSDavid du Colombier 
3277dd7cddfSDavid du Colombier /* neomagic.c */
3287dd7cddfSDavid du Colombier extern Ctlr neomagic;
3297dd7cddfSDavid du Colombier extern Ctlr neomagichwgc;
330219b2ee8SDavid du Colombier 
3319a747e4fSDavid du Colombier /* nvidia.c */
3329a747e4fSDavid du Colombier extern Ctlr nvidia;
3339a747e4fSDavid du Colombier extern Ctlr nvidiahwgc;
3349a747e4fSDavid du Colombier 
335*b2495906SDavid du Colombier /* radeon.c */
336*b2495906SDavid du Colombier extern Ctlr radeon;
337*b2495906SDavid du Colombier extern Ctlr radeonhwgc;
338*b2495906SDavid du Colombier 
339219b2ee8SDavid du Colombier /* palette.c */
340219b2ee8SDavid du Colombier extern Ctlr palette;
341219b2ee8SDavid du Colombier 
3427dd7cddfSDavid du Colombier /* pci.c */
3437dd7cddfSDavid du Colombier typedef struct Pcidev Pcidev;
3447dd7cddfSDavid du Colombier 
3457dd7cddfSDavid du Colombier extern int pcicfgr8(Pcidev*, int);
3467dd7cddfSDavid du Colombier extern int pcicfgr16(Pcidev*, int);
3477dd7cddfSDavid du Colombier extern int pcicfgr32(Pcidev*, int);
3487dd7cddfSDavid du Colombier extern void pcicfgw8(Pcidev*, int, int);
3497dd7cddfSDavid du Colombier extern void pcicfgw16(Pcidev*, int, int);
3507dd7cddfSDavid du Colombier extern void pcicfgw32(Pcidev*, int, int);
3517dd7cddfSDavid du Colombier extern void pcihinv(Pcidev*);
3527dd7cddfSDavid du Colombier extern Pcidev* pcimatch(Pcidev*, int, int);
3537dd7cddfSDavid du Colombier 
3547dd7cddfSDavid du Colombier /* rgb524.c */
3557dd7cddfSDavid du Colombier extern Ctlr rgb524;
3567dd7cddfSDavid du Colombier 
3577dd7cddfSDavid du Colombier /* rgb524mn.c */
3587dd7cddfSDavid du Colombier extern uchar (*rgb524mnxi)(Vga*, int);
3597dd7cddfSDavid du Colombier extern void (*rgb524mnxo)(Vga*, int, uchar);
3607dd7cddfSDavid du Colombier extern Ctlr rgb524mn;
3617dd7cddfSDavid du Colombier 
362219b2ee8SDavid du Colombier /* s3801.c */
363219b2ee8SDavid du Colombier extern Ctlr s3801;
364219b2ee8SDavid du Colombier extern Ctlr s3805;
365219b2ee8SDavid du Colombier 
366219b2ee8SDavid du Colombier /* s3928.c */
367219b2ee8SDavid du Colombier extern Ctlr s3928;
368219b2ee8SDavid du Colombier 
369219b2ee8SDavid du Colombier /* s3clock.c */
370219b2ee8SDavid du Colombier extern Ctlr s3clock;
371219b2ee8SDavid du Colombier 
372219b2ee8SDavid du Colombier /* s3generic.c */
373219b2ee8SDavid du Colombier extern Ctlr s3generic;
374219b2ee8SDavid du Colombier 
375219b2ee8SDavid du Colombier /* s3hwgc.c */
376219b2ee8SDavid du Colombier extern Ctlr bt485hwgc;
3777dd7cddfSDavid du Colombier extern Ctlr rgb524hwgc;
378219b2ee8SDavid du Colombier extern Ctlr s3hwgc;
379219b2ee8SDavid du Colombier extern Ctlr tvp3020hwgc;
3807dd7cddfSDavid du Colombier extern Ctlr tvp3026hwgc;
381219b2ee8SDavid du Colombier 
382219b2ee8SDavid du Colombier /* sc15025.c */
383219b2ee8SDavid du Colombier extern Ctlr sc15025;
384219b2ee8SDavid du Colombier 
385219b2ee8SDavid du Colombier /* stg1702.c */
386219b2ee8SDavid du Colombier extern Ctlr stg1702;
387219b2ee8SDavid du Colombier 
3887dd7cddfSDavid du Colombier /* t2r4.c */
3897dd7cddfSDavid du Colombier extern Ctlr t2r4;
3907dd7cddfSDavid du Colombier extern Ctlr t2r4hwgc;
3917dd7cddfSDavid du Colombier 
3927dd7cddfSDavid du Colombier /* trio64.c */
3937dd7cddfSDavid du Colombier extern void trio64clock(Vga*, Ctlr*);
3947dd7cddfSDavid du Colombier extern Ctlr trio64;
3957dd7cddfSDavid du Colombier 
396219b2ee8SDavid du Colombier /* tvp3020.c */
397219b2ee8SDavid du Colombier extern uchar tvp3020i(uchar);
398219b2ee8SDavid du Colombier extern uchar tvp3020xi(uchar);
399219b2ee8SDavid du Colombier extern void tvp3020o(uchar, uchar);
400219b2ee8SDavid du Colombier extern void tvp3020xo(uchar, uchar);
401219b2ee8SDavid du Colombier extern Ctlr tvp3020;
402219b2ee8SDavid du Colombier 
403219b2ee8SDavid du Colombier /* tvp3025.c */
404219b2ee8SDavid du Colombier extern Ctlr tvp3025;
405219b2ee8SDavid du Colombier 
406219b2ee8SDavid du Colombier /* tvp3025clock.c */
407219b2ee8SDavid du Colombier extern Ctlr tvp3025clock;
408219b2ee8SDavid du Colombier 
4097dd7cddfSDavid du Colombier /* tvp3026.c */
4107dd7cddfSDavid du Colombier extern uchar tvp3026xi(uchar);
4117dd7cddfSDavid du Colombier extern void tvp3026xo(uchar, uchar);
4127dd7cddfSDavid du Colombier extern Ctlr tvp3026;
4137dd7cddfSDavid du Colombier 
4147dd7cddfSDavid du Colombier /* tvp3026clock.c */
4157dd7cddfSDavid du Colombier extern Ctlr tvp3026clock;
4167dd7cddfSDavid du Colombier 
417219b2ee8SDavid du Colombier /* vga.c */
418219b2ee8SDavid du Colombier extern uchar vgai(long);
419219b2ee8SDavid du Colombier extern uchar vgaxi(long, uchar);
420219b2ee8SDavid du Colombier extern void vgao(long, uchar);
421219b2ee8SDavid du Colombier extern void vgaxo(long, uchar, uchar);
422219b2ee8SDavid du Colombier extern Ctlr generic;
423219b2ee8SDavid du Colombier 
424b0dcc5a8SDavid du Colombier /* vesa.c */
425b0dcc5a8SDavid du Colombier extern Ctlr vesa;
426b0dcc5a8SDavid du Colombier extern Ctlr softhwgc;	/* has to go somewhere */
427b0dcc5a8SDavid du Colombier extern int dbvesa(Vga*);
428b0dcc5a8SDavid du Colombier extern Mode *dbvesamode(char*);
429b0dcc5a8SDavid du Colombier extern void vesatextmode(void);
430b0dcc5a8SDavid du Colombier 
4317dd7cddfSDavid du Colombier /* virge.c */
4327dd7cddfSDavid du Colombier extern Ctlr virge;
4337dd7cddfSDavid du Colombier 
434219b2ee8SDavid du Colombier /* vision864.c */
435219b2ee8SDavid du Colombier extern Ctlr vision864;
4367dd7cddfSDavid du Colombier 
4377dd7cddfSDavid du Colombier /* vision964.c */
4387dd7cddfSDavid du Colombier extern Ctlr vision964;
4397dd7cddfSDavid du Colombier 
4407dd7cddfSDavid du Colombier /* vision968.c */
4417dd7cddfSDavid du Colombier extern Ctlr vision968;
4427dd7cddfSDavid du Colombier 
4439a747e4fSDavid du Colombier /* vmware.c */
4449a747e4fSDavid du Colombier extern Ctlr vmware;
4459a747e4fSDavid du Colombier extern Ctlr vmwarehwgc;
4469a747e4fSDavid du Colombier 
4477dd7cddfSDavid du Colombier /* w30c516.c */
4487dd7cddfSDavid du Colombier extern Ctlr w30c516;
4497dd7cddfSDavid du Colombier 
4509a747e4fSDavid du Colombier /* mga4xx.c */
4519a747e4fSDavid du Colombier extern Ctlr mga4xx;
4529a747e4fSDavid du Colombier extern Ctlr mga4xxhwgc;
4539a747e4fSDavid du Colombier 
4547dd7cddfSDavid du Colombier #pragma	varargck	argpos	error	1
4557dd7cddfSDavid du Colombier #pragma	varargck	argpos	trace	1
456