diff --git a/src/network/net_rtl8139.c b/src/network/net_rtl8139.c index 39e29791f..c436615a3 100644 --- a/src/network/net_rtl8139.c +++ b/src/network/net_rtl8139.c @@ -409,8 +409,10 @@ static void RTL8139TallyCounters_clear(RTL8139TallyCounters* counters); struct RTL8139State { /*< private >*/ - uint8_t dev; + uint8_t pci_slot; uint8_t inst; + uint8_t irq_state; + uint8_t pad; /*< public >*/ uint8_t phys[8]; /* mac address */ @@ -683,7 +685,7 @@ static void prom9346_set_wire(RTL8139State *s, int eecs, int eesk, int eedi) static void rtl8139_update_irq(RTL8139State *s) { - uint8_t d = s->dev; + uint8_t d = s->pci_slot; int isr; isr = (s->IntrStatus & s->IntrMask) & 0xffff; @@ -691,9 +693,9 @@ static void rtl8139_update_irq(RTL8139State *s) s->IntrMask); if (isr != 0) - pci_set_irq(d, PCI_INTA); + pci_set_irq(d, PCI_INTA, &s->irq_state); else - pci_clear_irq(d, PCI_INTA); + pci_clear_irq(d, PCI_INTA, &s->irq_state); } static int rtl8139_RxWrap(RTL8139State *s) @@ -3284,7 +3286,7 @@ nic_init(const device_t *info) FILE* f = NULL; char eeprom_filename[1024] = { 0 }; mem_mapping_add(&s->bar_mem, 0, 0, rtl8139_io_readb, rtl8139_io_readw, rtl8139_io_readl, rtl8139_io_writeb, rtl8139_io_writew, rtl8139_io_writel, NULL, MEM_MAPPING_EXTERNAL, s); - s->dev = pci_add_card(PCI_ADD_NETWORK, rtl8139_pci_read, rtl8139_pci_write, s); + pci_add_card(PCI_ADD_NETWORK, rtl8139_pci_read, rtl8139_pci_write, s, &s->pci_slot); s->inst = device_get_instance(); snprintf(eeprom_filename, sizeof(eeprom_filename), "eeprom_rtl8139c_plus_%d.nvr", s->inst); diff --git a/src/network/net_tulip.c b/src/network/net_tulip.c index 9f243db7f..2437b2b1a 100644 --- a/src/network/net_tulip.c +++ b/src/network/net_tulip.c @@ -294,7 +294,8 @@ struct tulip_descriptor { }; struct TULIPState { - uint8_t dev; + uint8_t pci_slot; + uint8_t irq_state; const device_t* device_info; uint16_t subsys_id, subsys_ven_id; mem_mapping_t memory; @@ -376,9 +377,9 @@ tulip_update_int(TULIPState *s) assert = s->csr[5] & s->csr[7] & (CSR5_AIS | CSR5_NIS); if (!assert) - pci_clear_irq(s->dev, PCI_INTA); + pci_clear_irq(s->pci_slot, PCI_INTA, &s->irq_state); else - pci_set_irq(s->dev, PCI_INTA); + pci_set_irq(s->pci_slot, PCI_INTA, &s->irq_state); } static bool @@ -1582,7 +1583,7 @@ nic_init(const device_t *info) } memcpy(s->mii_regs, tulip_mdi_default, sizeof(tulip_mdi_default)); s->nic = network_attach(s, (uint8_t *) &nmc93cxx_eeprom_data(s->eeprom)[10], tulip_receive, NULL); - s->dev = pci_add_card(PCI_ADD_NETWORK, tulip_pci_read, tulip_pci_write, s); + pci_add_card(PCI_ADD_NETWORK, tulip_pci_read, tulip_pci_write, s, &s->pci_slot); mem_mapping_add(&s->memory, 0, 0, NULL, NULL, tulip_read, NULL, NULL, tulip_write, NULL, MEM_MAPPING_EXTERNAL, s); tulip_reset(s); return s;