root/src/add-ons/kernel/drivers/network/ether/pcnet/glue_pcn.c
#include <sys/bus.h>

#include <net/ethernet.h>
#include <net/if.h>
#include <net/if_media.h>

#include <machine/bus.h>

#include <dev/pcn/if_pcnreg.h>


int check_disable_interrupts_pcn(device_t dev);
void reenable_interrupts_pcn(device_t dev);


int
check_disable_interrupts_pcn(device_t dev)
{
        struct pcn_softc *sc = device_get_softc(dev);
        HAIKU_INTR_REGISTER_STATE;
        uint32_t status;

        HAIKU_INTR_REGISTER_ENTER();

        /* get current flags */
        CSR_WRITE_4(sc, PCN_IO32_RAP, PCN_CSR_CSR);
        status = CSR_READ_4(sc, PCN_IO32_RDP);

        /* is there a pending interrupt? */
        if ((status & PCN_CSR_INTR) == 0) {
                HAIKU_INTR_REGISTER_LEAVE();
                return 0;
        }

        /* disable interrupts */
        CSR_WRITE_4(sc, PCN_IO32_RDP, 0);

        HAIKU_INTR_REGISTER_LEAVE();

        return 1;
}


void
reenable_interrupts_pcn(device_t dev)
{
        struct pcn_softc *sc = device_get_softc(dev);
        CSR_WRITE_4(sc, PCN_IO32_RAP, PCN_CSR_CSR);
        CSR_WRITE_4(sc, PCN_IO32_RDP, PCN_CSR_INTEN);
}