| plan 9 kernel history: overview | file list | diff list |
pc/vgavmware.c (diff list | history)
| 2001/0822/sys/src/9/pc/vgavmware.c:91,97 – 2001/0908/sys/src/9/pc/vgavmware.c:91,96 (short | long) | ||
| 2001/0822 | ulong aperture, oaperture; int osize, oapsize, wasupamem; Pcidev *p; | |
| 2001/0822/sys/src/9/pc/vgavmware.c:131,145 – 2001/0908/sys/src/9/pc/vgavmware.c:130,138 | ||
| 2001/0822 | }else scr->isupamem = 1; | |
| 2001/0908 | if(oaperture && aperture != oaperture) | |
| 2001/0822 | print("warning (BUG): redefinition of aperture does not change vmwarescreen segment\n"); | |
| 2001/0908 | addvgaseg("vmwarescreen", aperture, osize); | |
| 2001/0822 | return aperture; } | |
| 2001/0908/sys/src/9/pc/vgavmware.c:25,61 – 2002/0404/sys/src/9/pc/vgavmware.c:25,111 (short | long) | ||
| 2001/0822 | Rwidth, Rheight, Rmaxwidth, | |
| 2002/0404 | ||
| 2001/0822 | Rmaxheight, Rdepth, Rbpp, Rpseudocolor, Rrmask, | |
| 2002/0404 | ||
| 2001/0822 | Rgmask, Rbmask, Rbpl, Rfbstart, Rfboffset, | |
| 2002/0404 | ||
| 2001/0822 | Rfbmaxsize, Rfbsize, Rcap, Rmemstart, Rmemsize, | |
| 2002/0404 | ||
| 2001/0822 | Rconfigdone, Rsync, Rbusy, Rguestid, Rcursorid, | |
| 2002/0404 | ||
| 2001/0822 | Rcursorx, Rcursory, Rcursoron, Nreg, | |
| 2002/0404 | Crectfill = 1<<0, Crectcopy = 1<<1, Crectpatfill = 1<<2, Coffscreen = 1<<3, Crasterop = 1<<4, Ccursor = 1<<5, Ccursorbypass = 1<<6, Ccursorbypass2 = 1<<7, C8bitemulation = 1<<8, Calphacursor = 1<<9, FifoMin = 0, FifoMax = 1, FifoNextCmd = 2, FifoStop = 3, FifoUser = 4, Xupdate = 1, Xrectfill = 2, Xrectcopy = 3, Xdefinebitmap = 4, Xdefinebitmapscanline = 5, Xdefinepixmap = 6, Xdefinepixmapscanline = 7, Xrectbitmapfill = 8, Xrectpixmapfill = 9, Xrectbitmapcopy = 10, Xrectpixmapcopy = 11, Xfreeobject = 12, Xrectropfill = 13, Xrectropcopy = 14, Xrectropbitmapfill = 15, Xrectroppixmapfill = 16, Xrectropbitmapcopy = 17, Xrectroppixmapcopy = 18, Xdefinecursor = 19, Xdisplaycursor = 20, Xmovecursor = 21, Xdefinealphacursor = 22, Xcmdmax = 23, CursorOnHide = 0, CursorOnShow = 1, CursorOnRemoveFromFb = 2, CursorOnRestoreToFb = 3, | |
| 2001/0822 | Rpalette = 1024, }; typedef struct Vmware Vmware; struct Vmware { | |
| 2001/0908/sys/src/9/pc/vgavmware.c:62,67 – 2002/0404/sys/src/9/pc/vgavmware.c:112,119 | ||
| 2001/0822 | ulong rd; ulong r[Nreg]; | |
| 2002/0404 | ulong *mmio; ulong mmiosize; | |
| 2001/0822 | char chan[32]; int depth; | |
| 2001/0908/sys/src/9/pc/vgavmware.c:84,89 – 2002/0404/sys/src/9/pc/vgavmware.c:136,149 | ||
| 2001/0822 | outl(vm->rd, v); } | |
| 2002/0404 | static void vmwait(Vmware *vm) { vmwr(vm, Rsync, 1); while(vmrd(vm, Rbusy)) ; } | |
| 2001/0822 | static ulong vmwarelinear(VGAscr* scr, int* size, int* align) { | |
| 2001/0908/sys/src/9/pc/vgavmware.c:97,102 – 2002/0404/sys/src/9/pc/vgavmware.c:157,163 | ||
| 2001/0822 | oapsize = scr->apsize; wasupamem = scr->isupamem; | |
| 2002/0404 | iprint("osize %d oaperture %.8lux oapsize %d wasupamem %d\n", osize, oaperture, oapsize, wasupamem); | |
| 2001/0822 | p = pcimatch(nil, PCIVMWARE, 0); if(p == nil) error("no vmware card found"); | |
| 2001/0908/sys/src/9/pc/vgavmware.c:128,160 – 2002/0404/sys/src/9/pc/vgavmware.c:189,299 | ||
| 2001/0822 | if(wasupamem && upamalloc(oaperture, oapsize, 0)) scr->isupamem = 1; }else | |
| 2002/0404 | { memset((void*)KADDR(aperture), 0x7F, 1048576); | |
| 2001/0822 | scr->isupamem = 1; | |
| 2002/0404 | } | |
| 2001/0822 | ||
| 2002/0404 | iprint("aperture %lux size %lux\n", aperture, *size); | |
| 2001/0908 | if(oaperture && aperture != oaperture) | |
| 2001/0822 | print("warning (BUG): redefinition of aperture does not change vmwarescreen segment\n"); | |
| 2001/0908 | addvgaseg("vmwarescreen", aperture, osize); | |
| 2002/0404 | ||
| 2001/0822 | return aperture; } static void | |
| 2002/0404 | vmfifowr(Vmware *vm, ulong v) | |
| 2001/0822 | { | |
| 2002/0404 | ulong *mm; mm = vm->mmio; if(mm == nil){ iprint("!"); return; } if(mm[FifoNextCmd]+sizeof(ulong) == mm[FifoStop] || (mm[FifoNextCmd]+sizeof(ulong) == mm[FifoMax] && mm[FifoStop] == mm[FifoMin])) vmwait(vm); mm[mm[FifoNextCmd]/sizeof(ulong)] = v; mm[FifoNextCmd] += sizeof(ulong); if(mm[FifoNextCmd]==mm[FifoMax]) mm[FifoNextCmd] = mm[FifoMin]; | |
| 2001/0822 | } static void | |
| 2002/0404 | vmwareflush(VGAscr*, Rectangle r) | |
| 2001/0822 | { | |
| 2002/0404 | if(vm->mmio == nil) return; vmfifowr(vm, Xupdate); vmfifowr(vm, r.min.x); vmfifowr(vm, r.min.y); vmfifowr(vm, r.max.x-r.min.x); vmfifowr(vm, r.max.y-r.min.y); vmwait(vm); | |
| 2001/0822 | } | |
| 2002/0404 | static void vmwareload(VGAscr*, Cursor *c) { int i; ulong clr, set; ulong and[16]; ulong xor[16]; if(vm->mmio == nil) return; vmfifowr(vm, Xdefinecursor); vmfifowr(vm, 1); /* cursor id */ vmfifowr(vm, -c->offset.x); vmfifowr(vm, -c->offset.y); vmfifowr(vm, 16); /* width */ vmfifowr(vm, 16); /* height */ vmfifowr(vm, 1); /* depth for and mask */ vmfifowr(vm, 1); /* depth for xor mask */ for(i=0; i<16; i++){ clr = (c->clr[i*2+1]<<8) | c->clr[i*2]; set = (c->set[i*2+1]<<8) | c->set[i*2]; and[i] = ~(clr|set); /* clr and set pixels => black */ xor[i] = clr&~set; /* clr pixels => white */ } for(i=0; i<16; i++) vmfifowr(vm, and[i]); for(i=0; i<16; i++) vmfifowr(vm, xor[i]); vmwait(vm); } | |
| 2001/0822 | static int | |
| 2002/0404 | vmwaremove(VGAscr*, Point p) | |
| 2001/0822 | { | |
| 2002/0404 | vmwr(vm, Rcursorid, 1); vmwr(vm, Rcursorx, p.x); vmwr(vm, Rcursory, p.y); vmwr(vm, Rcursoron, CursorOnShow); | |
| 2001/0822 | return 0; } static void | |
| 2002/0404 | vmwaredisable(VGAscr*) { vmwr(vm, Rcursorid, 1); vmwr(vm, Rcursoron, CursorOnHide); } static void | |
| 2001/0822 | vmwareenable(VGAscr*) { | |
| 2002/0404 | vmwr(vm, Rcursorid, 1); vmwr(vm, Rcursoron, CursorOnShow); | |
| 2001/0822 | } static void | |
| 2001/0908/sys/src/9/pc/vgavmware.c:162,170 – 2002/0404/sys/src/9/pc/vgavmware.c:301,370 | ||
| 2001/0822 | { } | |
| 2002/0404 | static int vmwarescroll(VGAscr*, Rectangle r, Rectangle sr) { if(vm->mmio == nil) return 0; vmfifowr(vm, Xrectropcopy); vmfifowr(vm, r.max.x); vmfifowr(vm, r.max.y); vmfifowr(vm, r.min.x); vmfifowr(vm, r.min.y); vmfifowr(vm, sr.min.x - r.min.x); vmfifowr(vm, sr.min.y - r.min.y); vmfifowr(vm, 3); /* code for copy */ vmwait(vm); return 1; } static int vmwarefill(VGAscr*, Rectangle r, ulong sval) { if(vm->mmio == nil) return 0; vmfifowr(vm, Xrectfill); vmfifowr(vm, sval); vmfifowr(vm, r.min.x); vmfifowr(vm, r.min.y); vmfifowr(vm, r.max.x-r.min.x); vmfifowr(vm, r.max.y-r.min.y); vmwait(vm); return 1; } | |
| 2001/0822 | static void | |
| 2002/0404 | vmwaredrawinit(VGAscr *scr) | |
| 2001/0822 | { | |
| 2002/0404 | ulong mmiobase, mmiosize; extern int iprintscreenputs; iprintscreenputs = 0; if(scr->mmio==nil){ mmiobase = vmrd(vm, Rmemstart); if(mmiobase == 0){ iprint("mmiobase 0\n"); return; } mmiosize = vmrd(vm, Rmemsize); scr->mmio = KADDR(upamalloc(mmiobase, mmiosize, 0)); iprint("mmio %p\n", scr->mmio); vm->mmio = scr->mmio; vm->mmiosize = mmiosize; if(scr->mmio == nil) return; addvgaseg("vmwaremmio", mmiobase, mmiosize); } scr->mmio[FifoMin] = 4*sizeof(ulong); scr->mmio[FifoMax] = vm->mmiosize; scr->mmio[FifoNextCmd] = 4*sizeof(ulong); scr->mmio[FifoStop] = 4*sizeof(ulong); vmwr(vm, Rconfigdone, 1); scr->scroll = vmwarescroll; scr->fill = vmwarefill; | |
| 2001/0822 | } VGAdev vgavmwaredev = { | |
| 2001/0908/sys/src/9/pc/vgavmware.c:175,180 – 2002/0404/sys/src/9/pc/vgavmware.c:375,384 | ||
| 2001/0822 | 0, vmwarelinear, vmwaredrawinit, | |
| 2002/0404 | 0, 0, 0, vmwareflush, | |
| 2001/0822 | }; VGAcur vgavmwarecur = { | |
| 2002/0404/sys/src/9/pc/vgavmware.c:157,163 – 2002/0405/sys/src/9/pc/vgavmware.c:157,162 (short | long) | ||
| 2001/0822 | oapsize = scr->apsize; wasupamem = scr->isupamem; | |
| 2002/0404 |
| |
| 2001/0822 | p = pcimatch(nil, PCIVMWARE, 0); if(p == nil) error("no vmware card found"); | |
| 2002/0404/sys/src/9/pc/vgavmware.c:189,200 – 2002/0405/sys/src/9/pc/vgavmware.c:188,195 | ||
| 2001/0822 | if(wasupamem && upamalloc(oaperture, oapsize, 0)) scr->isupamem = 1; }else | |
| 2002/0404 |
| |
| 2001/0822 | scr->isupamem = 1; | |
| 2002/0404 |
| |
| 2001/0822 | ||
| 2002/0404 |
| |
| 2001/0908 | if(oaperture && aperture != oaperture) | |
| 2001/0822 | print("warning (BUG): redefinition of aperture does not change vmwarescreen segment\n"); | |
| 2001/0908 | addvgaseg("vmwarescreen", aperture, osize); | |
| 2002/0404/sys/src/9/pc/vgavmware.c:306,319 – 2002/0405/sys/src/9/pc/vgavmware.c:301,313 | ||
| 2002/0404 | { if(vm->mmio == nil) return 0; | |
| 2002/0405 | vmfifowr(vm, Xrectcopy); vmfifowr(vm, sr.min.x); vmfifowr(vm, sr.min.y); | |
| 2002/0404 | vmfifowr(vm, r.min.x); vmfifowr(vm, r.min.y); | |
| 2002/0405 | vmfifowr(vm, Dx(r)); vmfifowr(vm, Dy(r)); | |
| 2002/0404 | vmwait(vm); return 1; } | |
| 2002/0404/sys/src/9/pc/vgavmware.c:338,355 – 2002/0405/sys/src/9/pc/vgavmware.c:332,343 | ||
| 2001/0822 | { | |
| 2002/0404 | ulong mmiobase, mmiosize; | |
| 2002/0405 | if(mmiobase == 0) | |
| 2002/0404 | return; | |
| 2002/0405/sys/src/9/pc/vgavmware.c:330,335 – 2002/0501/sys/src/9/pc/vgavmware.c:330,336 (short | long) | ||
| 2001/0822 | static void | |
| 2002/0404 | vmwaredrawinit(VGAscr *scr) | |
| 2001/0822 | { | |
| 2002/0501 | ulong offset; | |
| 2002/0404 | ulong mmiobase, mmiosize; if(scr->mmio==nil){ | |
| 2002/0405/sys/src/9/pc/vgavmware.c:353,358 – 2002/0501/sys/src/9/pc/vgavmware.c:354,362 | ||
| 2002/0404 | scr->scroll = vmwarescroll; scr->fill = vmwarefill; | |
| 2002/0501 | offset = vmrd(vm, Rfboffset); scr->gscreendata->bdata += offset; | |
| 2001/0822 | } VGAdev vgavmwaredev = { | |