ether8003: use physical addresses for ISAConfig ether->mem
Fix the inconsistent use of ether->mem. Always use physical addresses. Let ether8390 convert to virtual addresses using KADDR() when we have to copy data in/out.
This commit is contained in:
parent
d3512f60df
commit
6498ce3bf2
2 changed files with 10 additions and 19 deletions
|
@ -88,7 +88,7 @@ reset8003(Ether* ether, uchar ea[Eaddrlen], uchar ic[8])
|
|||
*/
|
||||
if(memcmp(&ea[1], &ic[1], 5) == 0){
|
||||
memset(ic, 0, sizeof(ic));
|
||||
ic[Msr] = (((ulong)ether->mem)>>13) & 0x3F;
|
||||
ic[Msr] = (ether->mem>>13) & 0x3F;
|
||||
}
|
||||
else{
|
||||
/*
|
||||
|
@ -100,7 +100,7 @@ reset8003(Ether* ether, uchar ea[Eaddrlen], uchar ic[8])
|
|||
inb(port+Msr); /* wiggle bus */
|
||||
if(inb(port+Gp2) != 0xAA){
|
||||
memset(ic, 0, sizeof(ic));
|
||||
ic[Msr] = (((ulong)ether->mem)>>13) & 0x3F;
|
||||
ic[Msr] = (ether->mem>>13) & 0x3F;
|
||||
}
|
||||
else
|
||||
ether->irq = irq8003[((ic[Irr]>>5) & 0x3)|(ic[Icr] & 0x4)];
|
||||
|
@ -122,7 +122,7 @@ reset8003(Ether* ether, uchar ea[Eaddrlen], uchar ic[8])
|
|||
ctlr->width = 1;
|
||||
}
|
||||
|
||||
ether->mem = (ulong)KADDR((ic[Msr] & 0x3F)<<13);
|
||||
ether->mem = (ic[Msr] & 0x3F)<<13;
|
||||
if(ctlr->width == 2)
|
||||
ether->mem |= (ic[Laar] & 0x1F)<<19;
|
||||
else
|
||||
|
@ -163,7 +163,7 @@ reset8216(Ether* ether, uchar[8])
|
|||
irq = inb(port+0x0D);
|
||||
outb(port+Hcr, hcr);
|
||||
|
||||
ether->mem = (ulong)KADDR(0xC0000+((((addr>>2) & 0x30)|(addr & 0x0F))<<13));
|
||||
ether->mem = 0xC0000+((((addr>>2) & 0x30)|(addr & 0x0F))<<13);
|
||||
ether->size = 8192*(1<<((addr>>4) & 0x03));
|
||||
ether->irq = irq8216[((irq>>4) & 0x04)|((irq>>2) & 0x03)];
|
||||
|
||||
|
@ -262,9 +262,8 @@ reset(Ether* ether)
|
|||
}
|
||||
dp8390setea(ether);
|
||||
|
||||
if(umbrwmalloc(PADDR(ether->mem), ether->size, 0) == 0)
|
||||
print("ether8003: warning - 0x%luX unavailable\n",
|
||||
PADDR(ether->mem));
|
||||
if(umbrwmalloc(ether->mem, ether->size, 0) == 0)
|
||||
print("ether8003: warning - 0x%luX unavailable\n", ether->mem);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -377,7 +377,7 @@ receive(Ether* ether)
|
|||
for(curr = getcurr(ctlr); ctlr->nxtpkt != curr; curr = getcurr(ctlr)){
|
||||
data = ctlr->nxtpkt*Dp8390BufSz;
|
||||
if(ctlr->ram)
|
||||
memmove(&hdr, (void*)(ether->mem+data), sizeof(Hdr));
|
||||
memmove(&hdr, (uchar*)KADDR(ether->mem) + data, sizeof(Hdr));
|
||||
else
|
||||
_dp8390read(ctlr, &hdr, data, sizeof(Hdr));
|
||||
|
||||
|
@ -422,7 +422,7 @@ receive(Ether* ether)
|
|||
if((data+len) >= ctlr->pstop*Dp8390BufSz){
|
||||
count = ctlr->pstop*Dp8390BufSz - data;
|
||||
if(ctlr->ram)
|
||||
memmove(p, (void*)(ether->mem+data), count);
|
||||
memmove(p, (uchar*)KADDR(ether->mem) + data, count);
|
||||
else
|
||||
_dp8390read(ctlr, p, data, count);
|
||||
p += count;
|
||||
|
@ -431,7 +431,7 @@ receive(Ether* ether)
|
|||
}
|
||||
if(len){
|
||||
if(ctlr->ram)
|
||||
memmove(p, (void*)(ether->mem+data), len);
|
||||
memmove(p, (uchar*)KADDR(ether->mem) + data, len);
|
||||
else
|
||||
_dp8390read(ctlr, p, data, len);
|
||||
}
|
||||
|
@ -476,21 +476,13 @@ txstart(Ether* ether)
|
|||
return;
|
||||
|
||||
/*
|
||||
* Make sure the packet is of minimum length;
|
||||
* copy it to the card's memory by the appropriate means;
|
||||
* start the transmission.
|
||||
*/
|
||||
len = BLEN(bp);
|
||||
rp = bp->rp;
|
||||
if(len < ETHERMINTU){
|
||||
rp = minpkt;
|
||||
memmove(rp, bp->rp, len);
|
||||
memset(rp+len, 0, ETHERMINTU-len);
|
||||
len = ETHERMINTU;
|
||||
}
|
||||
|
||||
if(ctlr->ram)
|
||||
memmove((void*)(ether->mem+ctlr->tstart*Dp8390BufSz), rp, len);
|
||||
memmove((uchar*)KADDR(ether->mem) + ctlr->tstart*Dp8390BufSz, rp, len);
|
||||
else
|
||||
dp8390write(ctlr, ctlr->tstart*Dp8390BufSz, rp, len);
|
||||
freeb(bp);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue