M carrera/devether.c => carrera/devether.c +2 -2
@@ 690,12 690,12 @@ etherloop(Etherpkt *p, long n)
Netfile *f, **fp;
different = memcmp(p->d, p->s, sizeof(p->s));
- if(different && memcmp(p->d, ether.bcast, sizeof(p->d)))
+ if(different && memcmp(p->d, ether[0]->bcast, sizeof(p->d)))
return 0;
s = splhi();
t = (p->type[0]<<8) | p->type[1];
- for(fp = ether.f; fp < ðer.f[Ntypes]; fp++) {
+ for(fp = ether[0]->f; fp < ðer[0]->f[Ntypes]; fp++) {
f = *fp;
if(f == 0)
continue;
M carrera/l.s => carrera/l.s +1 -1
@@ 212,7 212,7 @@ TEXT getrandom(SB),$0
WAIT
RET
-TEXT puttlbx(SB), $0
+TEXT puttlbxx(SB), $0
MOVW 4(FP), R2
MOVW 8(FP), R3
M carrera/main.c => carrera/main.c +13 -1
@@ 197,13 197,25 @@ ioinit(int mapeisa)
puttlbx(2, Intctlvirt, intphys, isamphys, PGSZ1M);
- /* Enable all devce interrupt */
+ /* Enable all device interrupts */
IO(ushort, Intenareg) = 0xffff;
/* Look at the first 16M of Eisa memory */
/* IO(uchar, EisaLatch) = 0; /**/
}
+void puttlbxx(int, ulong, ulong, ulong, int);
+void puttlbx(int a, ulong b, ulong c, ulong d, int e)
+{
+ static int done[4];
+
+ if(((c|d)&PTEVALID) && a < 4){
+ if(done[a]++)
+ puttlbx(a, b, c, d, e);
+ }
+ puttlbxx(a, b, c, d, e);
+}
+
/*
* Pull the ethernet address out of NVRAM
*/
M carrera/mmu.c => carrera/mmu.c +1 -0
@@ 128,6 128,7 @@ kunmap(KMap *k)
s = splhi();
if(decref(k) == 0) {
+puttlb((k->virt & ~BY2PG) | TLBPID(tlbvirt()), k->phys0 & ~PTEVALID, k->phys1 & ~PTEVALID);
k->virt = 0;
k->phys0 = 0;
k->phys1 = 0;