M ss/main.c => ss/main.c +5 -15
@@ 461,7 461,7 @@ lancesetup(Lance *lp)
KMap *k;
uchar *cp;
ulong pa, va;
- int i, j;
+ int i;
k = kmappa(ETHER, PTEIO|PTENOCACHE);
lp->rdp = (void*)(k->va+0);
@@ 497,20 497,10 @@ lancesetup(Lance *lp)
i = (lp->nrrb+lp->ntrb)*sizeof(Etherpkt);
i = (i+(BY2PG-1))/BY2PG;
pa = (ulong)xspanalloc(i*BY2PG, BY2PG, 0)&~KZERO;
- va = 0;
- for(j=i-1; j>=0; j--){
- k = kmappa(pa+j*BY2PG, PTEMAINMEM|PTENOCACHE);
- if(va){
- if(va != k->va+BY2PG)
- panic("lancesetup va unordered");
- va = k->va;
- }
- }
- /*
- * k->va is the base of the region
- */
- lp->lrp = (Etherpkt*)k->va;
- lp->rp = (Etherpkt*)k->va;
+ va = kmapregion(pa, i*BY2PG, PTEMAINMEM|PTENOCACHE);
+
+ lp->lrp = (Etherpkt*)va;
+ lp->rp = (Etherpkt*)va;
lp->ltp = lp->lrp+lp->nrrb;
lp->tp = lp->rp+lp->nrrb;
}
M ss/scsi.c => ss/scsi.c +5 -16
@@ 18,31 18,20 @@ scsialloc(ulong n)
Scsibuf *b;
KMap *k;
ulong pa, va;
- int i, j;
+ int i;
b = xalloc(sizeof(Scsibuf));
/*
* Allocate space in host memory for the io buffer.
- * Allocate a block and kmap it page by page. kmap's are initially
- * in reverse order so rearrange them.
* NOTE: dma mustn't cross a 16Mb boundary.
*/
i = (n+(BY2PG-1))/BY2PG;
pa = (ulong)xspanalloc(i*BY2PG, BY2PG, 16*1024*1024) & ~KZERO;
- va = 0;
- k = 0;
- for(j=i-1; j>=0; j--){
- k = kmappa(pa+j*BY2PG, PTEMAINMEM|PTENOCACHE);
- if(va && va != k->va+BY2PG)
- panic("scsialloc va unordered\n");
- va = k->va;
- }
- /*
- * k->va is the base of the region
- */
- b->virt = (void*)k->va;
- b->phys = (void*)k->pa;
+ va = kmapregion(pa, i*BY2PG, PTEMAINMEM|PTENOCACHE);
+
+ b->virt = (void*)va;
+ b->phys = (void*)pa;
return b;
}