/* ne2000_intr --------------------------------------------------------------*/ int ne2000_intr() { int tsr; int isr; static char buf[1600]; ne2000_rcv(buf, 1600); return 0; while (1) { isr = inb(IO_DP8390 + DP_ISR); if (isr == 0) break; outb(IO_DP8390 + DP_ISR, isr); if (isr & (ISR_PTX | ISR_TXE)) { /* transmit -----------------------------------------*/ if (isr & ISR_TXE) { /* send error -------------------------------*/ } } else { tsr = inb(IO_DP8390 + DP_TSR); if (tsr & TSR_PTX) ; if (tsr & TSR_DFR) ; if (tsr & TSR_COL) ; if (tsr & TSR_ABT) ; if (tsr & TSR_CRS) ; } if (isr & ISR_PRX) { /* ne2000_rcv(buf, 1600); */ } if (isr & ISR_CNT) { printk("ne2000:CNTR-CNTR-CNTR-CNTR\n"); inb(IO_DP8390 + DP_CNTR0); inb(IO_DP8390 + DP_CNTR1); inb(IO_DP8390 + DP_CNTR2); } if (isr & ISR_RST) ne2000_reset(); printk("ISR: %x\n", isr); } return 0; }
static int isa_ne2000_initfn(ISADevice *dev) { ISANE2000State *isa = DO_UPCAST(ISANE2000State, dev, dev); NE2000State *s = &isa->ne2000; ne2000_setup_io(s, 0x20); isa_register_ioport(dev, &s->io, isa->iobase); isa_init_irq(dev, &s->irq, isa->isairq); qemu_macaddr_default_if_unset(&s->c.macaddr); ne2000_reset(s); s->nic = qemu_new_nic(&net_ne2000_isa_info, &s->c, object_get_typename(OBJECT(dev)), dev->qdev.id, s); qemu_format_nic_info_str(&s->nic->nc, s->c.macaddr.a); return 0; }