diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-06-06 16:04:24 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2020-06-06 16:04:24 +0200 |
commit | 8243b6600f4c8d60e520aa1b20368ae9575aabf9 (patch) | |
tree | 0652c55ab7f685afc378ea94bf9187606fd5c1c6 /sys/src/9/pc/etherm10g.c | |
parent | 3bebd3f5e278d77b1eb526cd9f924b0777043d2b (diff) |
pc/ether*: use 64-bit physical addresses and check pci membar types and sizes
Diffstat (limited to 'sys/src/9/pc/etherm10g.c')
-rw-r--r-- | sys/src/9/pc/etherm10g.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/sys/src/9/pc/etherm10g.c b/sys/src/9/pc/etherm10g.c index cfcdf6256..f74dab554 100644 --- a/sys/src/9/pc/etherm10g.c +++ b/sys/src/9/pc/etherm10g.c @@ -192,11 +192,11 @@ typedef struct { typedef struct Ctlr Ctlr; typedef struct Ctlr { QLock; - int state; - int kprocs; uvlong port; Pcidev* pcidev; Ctlr* next; + int state; + int kprocs; int active; int id; /* do we need this? */ @@ -808,23 +808,24 @@ ctlrfree(Ctlr *c) static int setmem(Pcidev *p, Ctlr *c) { - ulong i; uvlong raddr; - Done *d; void *mem; + Done *d; + ulong i; c->tx.segsz = 2048; c->ramsz = 2*MiB - (2*48*KiB + 32*KiB) - 0x100; if(c->ramsz > p->mem[0].size) return -1; - - raddr = p->mem[0].bar & ~0x0F; + if(p->mem[0].bar & 1) + return -1; + raddr = p->mem[0].bar & ~0xF; mem = vmap(raddr, p->mem[0].size); if(mem == nil){ - print("m10g: can't map %8.8lux\n", p->mem[0].bar); + print("m10g: can't map %llux\n", raddr); return -1; } - dprint("%llux <- vmap(mem[0].size = %ux)\n", raddr, p->mem[0].size); + dprint("%llux <- vmap(mem[0].size = %d)\n", raddr, p->mem[0].size); c->port = raddr; c->ram = mem; c->cmd = malign(sizeof *c->cmd); |