Skip to content

Commit

Permalink
pcnet: adapted glue.c with le driver changes
Browse files Browse the repository at this point in the history
* the driver doesn't crash anymore, but only sends a few packets
  • Loading branch information
korli committed Jan 14, 2013
1 parent db3f8e2 commit 2856aca
Showing 1 changed file with 16 additions and 18 deletions.
34 changes: 16 additions & 18 deletions src/add-ons/kernel/drivers/network/pcnet/dev/le/glue.c
@@ -1,5 +1,6 @@
#include <sys/bus.h>
#include <sys/mutex.h>
#include <sys/rman.h>

#include <net/ethernet.h>
#include <net/if.h>
Expand All @@ -24,12 +25,8 @@ NO_HAIKU_REENABLE_INTERRUPTS();
struct le_pci_softc {
struct am79900_softc sc_am79900; /* glue to MI code */

int sc_rrid;
struct resource *sc_rres;
bus_space_tag_t sc_regt;
bus_space_handle_t sc_regh;

int sc_irid;
struct resource *sc_ires;
void *sc_ih;

Expand All @@ -41,28 +38,29 @@ struct le_pci_softc {
int HAIKU_CHECK_DISABLE_INTERRUPTS(device_t dev) {
struct le_pci_softc *lesc = (struct le_pci_softc *)device_get_softc(dev);
HAIKU_INTR_REGISTER_STATE;
uint16_t value;
uint16_t isr;

HAIKU_INTR_REGISTER_ENTER();

/* get current flags */
bus_space_write_2(lesc->sc_regt, lesc->sc_regh, PCNET_PCI_RAP, LE_CSR0);
bus_space_barrier(lesc->sc_regt, lesc->sc_regh, PCNET_PCI_RAP, 2,
BUS_SPACE_BARRIER_WRITE);
value = bus_space_read_2(lesc->sc_regt, lesc->sc_regh, PCNET_PCI_RDP);
bus_write_2(lesc->sc_rres, PCNET_PCI_RAP, LE_CSR0);
bus_barrier(lesc->sc_rres, PCNET_PCI_RAP, 2, BUS_SPACE_BARRIER_WRITE);
isr = (bus_read_2(lesc->sc_rres, PCNET_PCI_RDP));

/* is there a pending interrupt? */
if (value & LE_C0_INTR) {
/* set the new flags, disable interrupts */
bus_space_write_2(lesc->sc_regt, lesc->sc_regh, PCNET_PCI_RAP, LE_CSR0);
bus_space_barrier(lesc->sc_regt, lesc->sc_regh, PCNET_PCI_RAP, 2,
BUS_SPACE_BARRIER_WRITE);
bus_space_write_2(lesc->sc_regt, lesc->sc_regh, PCNET_PCI_RDP,
value & ~LE_C0_INEA);
lesc->sc_am79900.lsc.sc_lastisr |= value;
if ((isr & LE_C0_INTR) == 0) {
HAIKU_INTR_REGISTER_LEAVE();
return 0;
}

/* set the new flags, disable interrupts */
bus_write_2(lesc->sc_rres, PCNET_PCI_RAP, LE_CSR0);
bus_barrier(lesc->sc_rres, PCNET_PCI_RAP, 2, BUS_SPACE_BARRIER_WRITE);
bus_write_2(lesc->sc_rres, PCNET_PCI_RDP, isr & ~(LE_C0_INEA));

lesc->sc_am79900.lsc.sc_lastisr |= isr;

HAIKU_INTR_REGISTER_LEAVE();

return value & LE_C0_INTR;
return 1;
}

0 comments on commit 2856aca

Please sign in to comment.