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

This commit is contained in:
cinap_lenrek 2020-06-06 16:16:03 +02:00
parent 15e90cedc1
commit 8003f4f00f

View file

@ -1131,8 +1131,9 @@ static SDev*
mv50pnp(void)
{
int i, nunit;
ulong n, *mem;
uchar *base;
ulong io, n, *mem;
uvlong io;
Ctlr *ctlr;
Drive *d;
Pcidev *p;
@ -1148,6 +1149,8 @@ mv50pnp(void)
while((p = pcimatch(p, 0x11ab, 0)) != nil){
if(p->ccrb != Pcibcstore || p->ccru + p->ccrp || p->did&0x0f00)
continue;
if(p->mem[0].size == 0 || (p->mem[0].bar & 1) != 0)
continue;
switch(p->did){
case 0x5040:
case 0x5041:
@ -1169,20 +1172,18 @@ mv50pnp(void)
'E' + ctlrno, (ushort)p->did, nunit,
((p->did&0xf000)==0x6000? "II": "I"),
(p->did&1? "": "out"));
io = p->mem[0].bar & ~0xF;
mem = (ulong*)vmap(io, p->mem[0].size);
if(mem == nil){
print("sdmv50xx: can't map %llux\n", io);
continue;
}
if((sdev = malloc(sizeof *sdev)) == nil)
continue;
if((ctlr = malloc(sizeof *ctlr)) == nil){
free(sdev);
continue;
}
io = p->mem[0].bar & ~0x0F;
mem = (ulong*)vmap(io, p->mem[0].size);
if(mem == 0){
print("sdmv50xx: address 0x%luX in use\n", io);
free(sdev);
free(ctlr);
continue;
}
ctlr->rid = p->rid;
/* avert thine eyes! (what does this do?) */