diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-06-06 16:14:02 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-06-06 16:14:02 +0200 |
commit | caf8df647886963848a2e266124de54fcc737247 (patch) | |
tree | 7cb21908c2ad981c1e27b6d0e2d77f4817cc0320 /sys/src/9/pc/sdodin.c | |
parent | 2907f7ffc46f0388402278feed99f85aebcdd165 (diff) |
sdodin: use 64-bit physical addresses and check pci membar type
Diffstat (limited to 'sys/src/9/pc/sdodin.c')
-rw-r--r-- | sys/src/9/pc/sdodin.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/sys/src/9/pc/sdodin.c b/sys/src/9/pc/sdodin.c index 52d3c5b91..6c4277676 100644 --- a/sys/src/9/pc/sdodin.c +++ b/sys/src/9/pc/sdodin.c @@ -2542,10 +2542,9 @@ msverify(SDunit *u) static uint* map(Pcidev *p, int bar) { - uintptr io; - - io = p->mem[bar].bar & ~0xf; - return (uint*)vmap(io, p->mem[bar].size); + if(p->mem[bar].size == 0 || (p->mem[bar].bar & 1) != 0) + return nil; + return (uint*)vmap(p->mem[bar].bar & ~0xf, p->mem[bar].size); } /* ยง5.1.3 */ @@ -2655,8 +2654,8 @@ mspnp(void) s = sdevs + nmsctlr; memset(c, 0, sizeof *c); memset(s, 0, sizeof *s); - if((c->reg = map(p, Mebar)) == 0){ - print("sdodin: bar %#p in use\n", c->reg); + if((c->reg = map(p, Mebar)) == nil){ + print("sdodin: can't map registers\n"); continue; } pcienable(p); |