#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 "screen.h" static void mga2164wenable(VGAscr*) { Pcidev *p; Physseg *s; /* ulong mmio; uchar *rp; int i; */ if((p = pcimatch(nil, 0x102B, 0x051B)) == nil) return; for(s = physseg; s->name; s++) if(strcmp("pcivctl", s->name) == 0) s->pa = p->mem[1].bar & ~0x0F; /* mmio = p->mem[1].bar & ~0x0F; mmio = upamalloc(mmio, 16*1024, 0); if(mmio == 0){ print("mmio == 0\n"); return; } rp = (uchar*)(mmio+0x3C00); for(i = 0; i < 16; i++){ print("%2.2uX ", *rp); rp++; } print("\n"); */ } static ulong mga2164wlinear(VGAscr* scr, int* size, int* align) { ulong aperture, oaperture; int oapsize, wasupamem; Pcidev *p; oaperture = scr->aperture; oapsize = scr->apsize; wasupamem = scr->isupamem; if(wasupamem) upafree(oaperture, oapsize); scr->isupamem = 0; if(p = pcimatch(nil, 0x102B, 0x051B)){ aperture = p->mem[0].bar & ~0x0F; *size = p->mem[0].size; } else aperture = 0; aperture = upamalloc(aperture, *size, *align); if(aperture == 0){ if(wasupamem && upamalloc(oaperture, oapsize, 0)) scr->isupamem = 1; } else scr->isupamem = 1; return aperture; } VGAdev vgamga2164wdev = { "mga2164w", mga2164wenable, /* enable */ 0, /* disable */ 0, /* page */ mga2164wlinear, /* linear */ };