summaryrefslogtreecommitdiff
path: root/sys/src/9/pc/vgavmware.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-06-06 15:58:18 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2020-06-06 15:58:18 +0200
commit3bebd3f5e278d77b1eb526cd9f924b0777043d2b (patch)
tree2bf7b60c52b67912ccc49a45b6db126186517a3c /sys/src/9/pc/vgavmware.c
parenta8f64e53fe2a2a27440dd9441800e8210cb1a00f (diff)
pc/vga*: use 64-bit physical addresses and check pci membar types and sizes
Diffstat (limited to 'sys/src/9/pc/vgavmware.c')
-rw-r--r--sys/src/9/pc/vgavmware.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/sys/src/9/pc/vgavmware.c b/sys/src/9/pc/vgavmware.c
index 710da156e..aa4b12e30 100644
--- a/sys/src/9/pc/vgavmware.c
+++ b/sys/src/9/pc/vgavmware.c
@@ -95,7 +95,7 @@ enum {
typedef struct Vmware Vmware;
struct Vmware {
- ulong fb;
+ uvlong fb;
ulong ra;
ulong rd;
@@ -142,6 +142,8 @@ vmwarelinear(VGAscr* scr, int, int)
p = scr->pci;
if(p == nil || p->vid != PCIVMWARE)
return;
+ if(p->mem[1].bar & 1)
+ return;
switch(p->did){
default:
return;
@@ -151,6 +153,8 @@ vmwarelinear(VGAscr* scr, int, int)
vm->rd = 0x4560 + 4;
break;
case VMWARE2:
+ if((p->mem[0].bar & 1) == 0)
+ return;
vm->ver = 2;
vm->ra = p->mem[0].bar & ~3;
vm->rd = vm->ra + 1;
@@ -164,8 +168,11 @@ vmwarelinear(VGAscr* scr, int, int)
addvgaseg("vmwarescreen", scr->paddr, scr->apsize);
if(scr->mmio==nil){
- ulong mmiobase, mmiosize;
+ uvlong mmiobase;
+ ulong mmiosize;
+ if(p->mem[2].bar & 1)
+ return;
// mmiobase = vmrd(vm, Rmemstart);
mmiobase = p->mem[2].bar & ~0xF;
if(mmiobase == 0)