summaryrefslogtreecommitdiff
path: root/sys/src/9/pc/sdodin.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-06-06 16:14:02 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2020-06-06 16:14:02 +0200
commitcaf8df647886963848a2e266124de54fcc737247 (patch)
tree7cb21908c2ad981c1e27b6d0e2d77f4817cc0320 /sys/src/9/pc/sdodin.c
parent2907f7ffc46f0388402278feed99f85aebcdd165 (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.c11
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);