- }
- x = splimp();
- if (reenter == 0) {
- int n, j, i, k; char *cp;
- reenter = 1;
- n = 10;
- k = n<<1;
- i = rmalloc(mbmap, n*2);
- if (i == 0)
- panic("eninit");
- j = i << 1;
- cp = (char *)pftom(i);
- if (memall(&Mbmap[j], k, proc, CSYS) == 0)
- panic("eninit");
- vmaccess(&Mbmap[j], (caddr_t)cp, k);
- rpkt = (struct en_packet *)
- (cp + 1024 - sizeof (struct en_prefix));
- xpkt = (struct en_packet *)
- (cp + 5 * 1024 + 1024 - sizeof (struct en_prefix));
- for (j = 0; j < n; j++)
- mprefcnt[i+j] = 1;
- }
- uban = ui->ui_ubanum;
- addr = (struct endevice *)ui->ui_addr;
- addr->en_istat = 0;
- addr->en_ostat = 0;
- imp_stat.iaddr =
- uballoc(uban, (caddr_t)rpkt, 1024+512, UBA_NEED16|UBA_NEEDBDP);
- imp_stat.oaddr =
- uballoc(uban, (caddr_t)xpkt, 1024+512, UBA_NEED16|UBA_NEEDBDP);
- enuba = ui->ui_hd->uh_uba;
- enrbdp = (imp_stat.iaddr >> 28) & 0xf;
- enwbdp = (imp_stat.oaddr >> 28) & 0xf;
- enrproto = UBAMR_MRV | (enrbdp << 21);
- enwproto = UBAMR_MRV | (enwbdp << 21);
- enrmr = &enuba->uba_map[((imp_stat.iaddr>>9)&0x1ff) + 1];
- enxmr = &enuba->uba_map[((imp_stat.oaddr>>9)&0x1ff) + 1];
- enxmap[0] = enxmr[0];
- enxmap[1] = enxmr[1];
- enxswapd = 0;
- printf("enrbdp %x enrproto %x enrmr %x imp_stat.iaddr %x\n",
- enrbdp, enrproto, enrmr, imp_stat.iaddr);
- imp_stat.impopen = 1;
- imp_stat.flush = 0;
- splx(x);
-#ifdef IMPDEBUG
- printf("eninit(%d): iaddr = %x, oaddr = %x\n",
- unit, imp_stat.iaddr, imp_stat.oaddr);
-#endif