ether_outb
ether_outb(data, EN_CCMD, ENC_PAGE1);
ether_outb(data, EN_CCMD, ENC_PAGE0);
ether_outb(data, EN0_RXCR, ENRXCR_BCST | ENRXCR_MCST);
ether_outb(data, EN_CCMD, ENC_STOP);
ether_outb(data, EN0_TCNTLO, (char)(buflen & 0xff));
ether_outb(data, EN0_TCNTHI, (char)(buflen >> 8));
ether_outb(data, EN_CCMD, ENC_NODMA | ENC_TRANS);
ether_outb(data, EN0_ISR, isr);
ether_outb(data, EN_CCMD, ENC_NODMA);
ether_outb(data, EN0_RCNTLO, len & 0xff);
ether_outb(data, EN0_RCNTHI, len >> 8);
ether_outb(data, EN0_RADDRLO, src & 0xff);
ether_outb(data, EN0_RADDRHI, src >> 8);
ether_outb(data, EN_CCMD, ENC_DMAREAD);
ether_outb(data, EN0_RCNTHI, len >> 8);
ether_outb(data, EN0_RADDRLO, dst & 0xff);
ether_outb(data, EN0_RADDRHI, dst >> 8);
ether_outb(data, EN0_RCNTLO, 2);
ether_outb(data, EN0_RCNTLO, len & 0xff);
ether_outb(data, EN_CCMD, ENC_DMAREAD); /* Step 2 */
ether_outb(data, EN_CCMD, ENC_DMAWRITE);
ether_outb(data, NE_RESET, reg);
ether_outb(data, EN_CCMD, ENC_NODMA | ENC_STOP | ENC_PAGE0);
ether_outb(data, EN0_ISR, 0xff);
ether_outb(data, EN0_DCFG, DCFG_BM16);
ether_outb(data, EN_CCMD, ENC_NODMA | ENC_STOP | ENC_PAGE0);
ether_outb(data, EN0_TXCR, 0);
ether_outb(data, EN0_RXCR, ENRXCR_MON);
ether_outb(data, EN0_STARTPG, data->EC_RXBUF_START_PAGE);
ether_outb(data, EN0_STOPPG, data->EC_RXBUF_END_PAGE);
ether_outb(data, EN0_BOUNDARY, data->EC_RXBUF_END_PAGE);
ether_outb(data, EN0_IMR, 0);
ether_outb(data, EN0_ISR, 0);
ether_outb(data, EN_CCMD, ENC_NODMA | ENC_PAGE1 | ENC_STOP);
ether_outb(data, EN1_CURPAG, data->EC_RXBUF_START_PAGE);
ether_outb(data, EN_CCMD, ENC_NODMA | ENC_PAGE0 | ENC_STOP);
ether_outb(data, EN_CCMD, ENC_NODMA | ENC_PAGE0);
ether_outb(data, EN_CCMD, ENC_NODMA | ENC_STOP);
ether_outb(data, EN0_DCFG, DCFG_BM16);
ether_outb(data, EN0_RCNTLO, 0x0);
ether_outb(data, EN0_RCNTHI, 0x0);
ether_outb(data, EN0_RXCR, ENRXCR_BCST);
ether_outb(data, EN0_TXCR, TXCR_LOOPBACK);
ether_outb(data, EN0_BOUNDARY, data->EC_RXBUF_END_PAGE);
ether_outb(data, EN0_STARTPG, data->EC_RXBUF_START_PAGE);
ether_outb(data, EN0_STOPPG, data->EC_RXBUF_END_PAGE);
ether_outb(data, EN0_TPSR, data->EC_VMEM_PAGE);
ether_outb(data, EN0_ISR, 0xff);
ether_outb(data, EN0_IMR, INTS_WE_CARE_ABOUT);
ether_outb(data, EN_CCMD, ENC_NODMA | ENC_PAGE1);
ether_outb(data, EN1_PHYS + i, data->myaddr.ebyte[i]);
ether_outb(data, EN1_MULT+i, 0xff);
ether_outb(data, EN1_CURPAG, data->EC_RXBUF_START_PAGE);
ether_outb(data, EN_CCMD, ENC_START | ENC_PAGE0 | ENC_NODMA);
ether_outb(data, EN0_TXCR, 0x00);
ether_outb(data, EN0_BOUNDARY, nextboundary - 1);
ether_outb(data, EN0_BOUNDARY, data->EC_RXBUF_END_PAGE - 1);
ether_outb(data, EN_CCMD, ENC_STOP | ENC_NODMA);
ether_outb(data, EN0_RCNTLO, 0x0);
ether_outb(data, EN0_RCNTHI, 0x0);
ether_outb(data, EN0_TXCR, TXCR_LOOPBACK);
ether_outb(data, EN_CCMD, ENC_START | ENC_PAGE0 | ENC_NODMA);
ether_outb(data, EN0_TXCR, 0x00);
ether_outb(data, EN_CCMD, ENC_START | ENC_PAGE0 | ENC_NODMA | ENC_TRANS);