#include "u.h" #include "../port/lib.h" #include "mem.h" #include "dat.h" #include "fns.h" #include "io.h" #include "../port/error.h" #define Image IMAGE #include #include #include #include "screen.h" static ulong tdfxlinear(VGAscr* scr, int* size, int* align) { ulong aperture, oaperture; int oapsize, wasupamem; Pcidev *p; oaperture = scr->aperture; oapsize = scr->apsize; wasupamem = scr->isupamem; aperture = 0; if(p = pcimatch(nil, 0x121A, 0)){ switch(p->did){ case 0x0005: /* Voodoo 3 3000 */ aperture = p->mem[1].bar & ~0x0F; *size = p->mem[1].size; break; default: break; } } if(wasupamem){ if(oaperture == aperture) return oaperture; upafree(oaperture, oapsize); } scr->isupamem = 0; aperture = upamalloc(aperture, *size, *align); if(aperture == 0){ if(wasupamem && upamalloc(oaperture, oapsize, 0)){ aperture = oaperture; scr->isupamem = 1; } else scr->isupamem = 0; } else scr->isupamem = 1; return aperture; } VGAdev vga3dfxdev = { "3dfx", nil, /* enable */ nil, /* disable */ nil, /* page */ tdfxlinear, /* linear */ nil, /* drawinit */ nil, /* fill */ }; VGAcur vga3dfxcur = { "3dfxhwgc", nil, /* enable */ nil, /* disable */ nil, /* load */ nil, /* move */ };