usbehcipc: use 64-bit physical addresses and check pci membar type

This commit is contained in:
cinap_lenrek 2020-06-06 16:05:40 +02:00
parent 8243b6600f
commit a3626a6efa

View file

@ -153,7 +153,7 @@ scanpci(void)
{ {
static int already = 0; static int already = 0;
int i; int i;
uintptr io; uvlong io;
Ctlr *ctlr; Ctlr *ctlr;
Pcidev *p; Pcidev *p;
Ecapio *capio; Ecapio *capio;
@ -170,6 +170,8 @@ scanpci(void)
continue; continue;
switch(p->ccrp){ switch(p->ccrp){
case 0x20: case 0x20:
if(p->mem[0].bar & 1)
continue;
io = p->mem[0].bar & ~0x0f; io = p->mem[0].bar & ~0x0f;
break; break;
default: default:
@ -178,7 +180,7 @@ scanpci(void)
if(io == 0) if(io == 0)
continue; continue;
print("usbehci: %#x %#x: port %#p size %#x irq %d\n", print("usbehci: %#x %#x: port %llux size %d irq %d\n",
p->vid, p->did, io, p->mem[0].size, p->intl); p->vid, p->did, io, p->mem[0].size, p->intl);
ctlr = malloc(sizeof(Ctlr)); ctlr = malloc(sizeof(Ctlr));
@ -187,7 +189,8 @@ scanpci(void)
continue; continue;
} }
if((capio = vmap(io, p->mem[0].size)) == nil){ capio = vmap(io, p->mem[0].size);
if(capio == nil){
print("usbehci: cannot map mmio\n"); print("usbehci: cannot map mmio\n");
free(ctlr); free(ctlr);
continue; continue;
@ -210,7 +213,7 @@ scanpci(void)
*/ */
if (i >= maxehci) { if (i >= maxehci) {
iprint("usbehci: ignoring controllers after first %d, " iprint("usbehci: ignoring controllers after first %d, "
"at %#p\n", maxehci, io); "at %.8llux\n", maxehci, io);
ctlrs[i] = nil; ctlrs[i] = nil;
} }
} }