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