root/src/add-ons/kernel/drivers/network/ether/dec21xxx/glue_de.c
/*
 * Copyright 2011, Haiku, Inc. All Rights Reserved.
 * Distributed under the terms of the MIT License.
 *
 * Author(s):
 *              Siarzhuk Zharski <imker@gmx.li>
 */


#include <sys/bus.h>
#include <sys/systm.h>
#include <machine/bus.h>
#include <net/ethernet.h>
#include <net/if.h>
#include <net/if_media.h>

#include "dc21040reg.h"
#include "if_devar.h"


int check_disable_interrupts_de(device_t dev);
void reenable_interrupts_de(device_t dev);


int
check_disable_interrupts_de(device_t dev)
{
        struct tulip_softc *sc = device_get_softc(dev);
        uint32_t status;
        HAIKU_INTR_REGISTER_STATE;

        HAIKU_INTR_REGISTER_ENTER();

        status = TULIP_CSR_READ(sc, csr_status);
        if (status == 0xffffffff) {
                HAIKU_INTR_REGISTER_LEAVE();
                return 0;
        }

        if (status != 0 && (status & sc->tulip_intrmask) == 0) {
                TULIP_CSR_WRITE(sc, csr_status, status);
                HAIKU_INTR_REGISTER_LEAVE();
                return 0;
        }

        if ((status & sc->tulip_intrmask) == 0) {
                HAIKU_INTR_REGISTER_LEAVE();
                return 0;
        }

        TULIP_CSR_WRITE(sc, csr_intr, 0);

        HAIKU_INTR_REGISTER_LEAVE();

        return 1;
}


void
reenable_interrupts_de(device_t dev)
{
        struct tulip_softc *sc = device_get_softc(dev);
        TULIP_LOCK(sc);
        TULIP_CSR_WRITE(sc, csr_intr, sc->tulip_intrmask);
        TULIP_UNLOCK(sc);
}