sc->rwmark += sc->rblksize; sc->rwmark %= sc->rbufsize;
neo_intr(void *p){	struct neo_softc *sc = (struct neo_softc *)p;	int status, x, active;	int rv = 0;	active = (sc->pintr || sc->rintr);	status = nm_rd(sc, NM_INT_REG, sc->irsz);	if (status & sc->playint) {		status &= ~sc->playint;		printf ("offset = %d\n", nmchan_getptr(sc, AUMODE_PLAY));		sc->pwmark += (sc->pbufsize / 2);		sc->pwmark %= sc->pbufsize;		nm_wr(sc, NM_PBUFFER_WMARK, sc->pbuf + sc->pwmark, 4);		nm_ackint(sc, sc->playint);		if (sc->pintr)			(*sc->pintr)(sc->parg);		rv = 1;	}	if (status & sc->recint) {		status &= ~sc->recint;		nm_ackint(sc, sc->recint);		if (sc->rintr)			(*sc->rintr)(sc->rarg);		rv = 1;	}	if (status & sc->misc1int) {		status &= ~sc->misc1int;		nm_ackint(sc, sc->misc1int);		x = nm_rd(sc, 0x400, 1);		nm_wr(sc, 0x400, x | 2, 1);		printf("%s: misc int 1\n", sc->dev.dv_xname);		rv = 1;	}	if (status & sc->misc2int) {		status &= ~sc->misc2int;		nm_ackint(sc, sc->misc2int);		x = nm_rd(sc, 0x400, 1);		nm_wr(sc, 0x400, x & ~2, 1);		printf("%s: misc int 2\n", sc->dev.dv_xname);		rv = 1;	}	if (status) {		status &= ~sc->misc2int;		nm_ackint(sc, sc->misc2int);		printf("%s: unknown int\n", sc->dev.dv_xname);		rv = 1;	}	return (rv);}