Index: qemu/hw/integratorcp.c =================================================================== --- qemu.orig/hw/integratorcp.c 2006-11-21 19:12:39.000000000 +0800 +++ qemu/hw/integratorcp.c 2006-11-21 19:12:48.000000000 +0800 @@ -501,7 +501,7 @@ if (nd_table[0].vlan) { if (nd_table[0].model == NULL || strcmp(nd_table[0].model, "smc91c111") == 0) { - smc91c111_init(&nd_table[0], 0xc8000000, pic, 27); + smc91c111_init(&pic_set_irq_new,&nd_table[0], 0xc8000000, pic, 27); } else { fprintf(stderr, "qemu: Unsupported NIC: %s\n", nd_table[0].model); exit (1); Index: qemu/hw/smc91c111.c =================================================================== --- qemu.orig/hw/smc91c111.c 2006-11-21 19:12:39.000000000 +0800 +++ qemu/hw/smc91c111.c 2006-11-21 19:12:48.000000000 +0800 @@ -26,6 +26,7 @@ uint16_t ercv; void *pic; int irq; + SetIRQFunc *set_irq; int bank; int packet_num; int tx_alloc; @@ -86,7 +87,7 @@ if (s->tx_fifo_done_len != 0) s->int_level |= INT_TX; level = (s->int_level & s->int_mask) != 0; - pic_set_irq_new(s->pic, s->irq, level); + (*s->set_irq)(s->pic, s->irq, level); } /* Try to allocate a packet. Returns 0x80 on failure. */ @@ -692,7 +693,7 @@ smc91c111_writel }; -void smc91c111_init(NICInfo *nd, uint32_t base, void *pic, int irq) +void smc91c111_init(SetIRQFunc *set_irq, NICInfo *nd, uint32_t base, void *pic, int irq) { smc91c111_state *s; int iomemtype; @@ -704,6 +705,7 @@ s->base = base; s->pic = pic; s->irq = irq; + s->set_irq = set_irq; memcpy(s->macaddr, nd->macaddr, 6); smc91c111_reset(s); Index: qemu/hw/versatilepb.c =================================================================== --- qemu.orig/hw/versatilepb.c 2006-11-21 19:12:39.000000000 +0800 +++ qemu/hw/versatilepb.c 2006-11-21 19:12:48.000000000 +0800 @@ -186,7 +186,7 @@ if (!nd->model) nd->model = done_smc ? "rtl8139" : "smc91c111"; if (strcmp(nd->model, "smc91c111") == 0) { - smc91c111_init(nd, 0x10010000, sic, 25); + smc91c111_init(&pic_set_irq_new,nd, 0x10010000, sic, 25); } else { pci_nic_init(pci_bus, nd); } Index: qemu/vl.h =================================================================== --- qemu.orig/vl.h 2006-11-21 19:12:39.000000000 +0800 +++ qemu/vl.h 2006-11-21 19:12:48.000000000 +0800 @@ -1245,7 +1248,7 @@ void ps2_keyboard_set_translation(void *opaque, int mode); /* smc91c111.c */ -void smc91c111_init(NICInfo *, uint32_t, void *, int); +void smc91c111_init(SetIRQFunc *set_irq, NICInfo *, uint32_t, void *, int); /* pl110.c */ void *pl110_init(DisplayState *ds, uint32_t base, void *pic, int irq, int); Index: qemu/hw/realview.c =================================================================== --- qemu.orig/hw/realview.c 2006-11-21 19:12:22.000000000 +0800 +++ qemu/hw/realview.c 2006-11-21 19:12:48.000000000 +0800 @@ -69,7 +69,7 @@ if (!nd->model) nd->model = done_smc ? "rtl8139" : "smc91c111"; if (strcmp(nd->model, "smc91c111") == 0) { - smc91c111_init(nd, 0x4e000000, pic, 28); + smc91c111_init(&pic_set_irq_new, nd, 0x4e000000, pic, 28); } else { pci_nic_init(pci_bus, nd); }