sdmv50xx: use 64-bit physical addresses and check pci membar type
This commit is contained in:
parent
15e90cedc1
commit
8003f4f00f
1 changed files with 10 additions and 9 deletions
|
@ -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?) */
|
||||
|
|
Loading…
Reference in a new issue