/* * 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; }
/* * 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; }
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); }
/* * 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); }
/* * 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); }
/* * 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); }