Beispiel #1
0
/*
 * Our ZS chips all share a common, autovectored interrupt,
 * so we have to look at all of them on each interrupt.
 */
static int
zshard(void *arg)
{
	register struct zsc_softc *zsc;
	register int rr3, unit, rval, softreq;

	rval = 0;
	for (unit = 0; unit < zsc_cd.cd_ndevs; unit++) {
		zsc = device_lookup_private(&zsc_cd, unit);
		if (zsc == NULL)
			continue;

		zsc->zsc_intrcnt.ev_count++;
		while ((rr3 = zsc_intr_hard(zsc))) {
			rval |= rr3;
		}

		softreq = zsc->zsc_cs[0]->cs_softreq;
		softreq |= zsc->zsc_cs[1]->cs_softreq;
		if (softreq && (zssoftpending == 0)) {
			zssoftpending = 1;
			softint_schedule(zsc->sc_si);
		}
	}
	return rval;
}
static int
zshard(void *arg)
{
	struct zsc_softc *zsc = arg;
	int rval;

	rval = zsc_intr_hard(zsc);

#if 1
	/* XXX: there is some race condition? */
	if (rval)
		while (zsc_intr_hard(zsc))
			;
#endif

	/* We are at splzs here, so no need to lock. */
	if (zsc->zsc_cs[0]->cs_softreq || zsc->zsc_cs[1]->cs_softreq)
		softint_schedule(zsc->zsc_softintr_cookie);

	return rval;
}
int
zshard(void *arg)
{
	struct zsc_softc *zsc;
	int rval;

	zsc = arg;
	rval = zsc_intr_hard(zsc);
	if (zsc->zsc_cs[0]->cs_softreq || zsc->zsc_cs[1]->cs_softreq)
		softint_schedule(zsc->zsc_si);

	return rval;
}
Beispiel #4
0
/*
 * For news68k-port, we don't use autovectored interrupt.
 * We do not need to look at all of the zs chips.
 */
static int
zshard(void *arg)
{
	struct zsc_softc *zsc = arg;
	int rval;

	rval = zsc_intr_hard(zsc);

	/* We are at splzs here, so no need to lock. */
	if (zsc->zsc_cs[0]->cs_softreq || zsc->zsc_cs[1]->cs_softreq) {
		softint_schedule(zsc->zsc_softintr_cookie);
	}

	return rval;
}
Beispiel #5
0
int
zshard(void *arg)
{
	struct zsc_softc *zsc;
	int unit, rval;

	rval = 0;
	for (unit = 0; unit < zsc_cd.cd_ndevs; unit++) {
		zsc = device_lookup_private(&zsc_cd, unit);
		if (zsc == NULL)
			continue;
		rval |= zsc_intr_hard(zsc);
		if ((zsc->zsc_cs[0]->cs_softreq) ||
		    (zsc->zsc_cs[1]->cs_softreq)) {
			softint_schedule(zsc->zsc_softintr_cookie);
		}
	}
	return (rval);
}
Beispiel #6
0
/*
 * Our ZS chips all share a common, autovectored interrupt,
 * so we have to look at all of them on each interrupt.
 */
static int
zshard(void *arg)
{
    struct zsc_softc *zsc;
    int unit, rval, softreq;

    rval = 0;
    for (unit = 0; unit < zsc_cd.cd_ndevs; unit++) {
        zsc = device_lookup_private(&zsc_cd, unit);
        if (zsc == NULL)
            continue;
        rval |= zsc_intr_hard(zsc);
        softreq  = zsc->zsc_cs[0]->cs_softreq;
        softreq |= zsc->zsc_cs[1]->cs_softreq;
        if (softreq)
            softint_schedule(zsc->zs_si);
    }

    return (rval);
}
Beispiel #7
0
/*
 * For x68k-port, we don't use autovectored interrupt.
 * We do not need to look at all of the zs chips.
 */
static int
zshard(void *arg)
{
	struct zsc_softc *zsc = arg;
	int rval;
	int s;

	/*
	 * Actually, zs hardware ipl is 5.
	 * Here we disable all interrupts to shorten the zshard
	 * handling time.  Otherwise, too many characters are
	 * dropped.
	 */
	s = splhigh();
	rval = zsc_intr_hard(zsc);

	/* We are at splzs here, so no need to lock. */
	if (zsc->zsc_cs[0]->cs_softreq || zsc->zsc_cs[1]->cs_softreq)
		softint_schedule(zsc->zsc_softintr_cookie);

	return (rval);
}
Beispiel #8
0
/*
 * Our ZS chips all share a common, autovectored interrupt,
 * so we have to look at all of them on each interrupt.
 */
int
zshard(void *arg)
{
	struct zsc_softc *zsc;
	int unit, rval;

	rval = 0;
	for (unit = 0; unit < zsc_cd.cd_ndevs; unit++) {
		zsc = zsc_cd.cd_devs[unit];
		if (zsc == NULL)
			continue;
		rval |= zsc_intr_hard(zsc);
		if (zsc->zsc_cs[0]->cs_softreq)
		{
			/* zsc_req_softint(zsc); */
			/* We are at splzs here, so no need to lock. */
			if (zssoftpending == 0) {
				zssoftpending = 1;
				softintr_schedule(zsc->zsc_softintr);
			}
		}
	}
	return (rval);
}