summaryrefslogtreecommitdiff
path: root/sys/src/9/pc/etherm10g.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2020-06-06 16:04:24 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2020-06-06 16:04:24 +0200
commit8243b6600f4c8d60e520aa1b20368ae9575aabf9 (patch)
tree0652c55ab7f685afc378ea94bf9187606fd5c1c6 /sys/src/9/pc/etherm10g.c
parent3bebd3f5e278d77b1eb526cd9f924b0777043d2b (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.c17
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);