CSR_WRITE_2(sc, WI_EVENT_ACK, 0xffff);
wi_intr(vsc)	void			*vsc;{	struct wi_softc		*sc = vsc;	struct ifnet		*ifp;	u_int16_t		status;	DPRINTF(WID_INTR, ("wi_intr: sc %p\n", sc));	ifp = &sc->sc_arpcom.ac_if;	if (!(sc->wi_flags & WI_FLAGS_ATTACHED) || !(ifp->if_flags & IFF_UP)) {		CSR_WRITE_2(sc, WI_EVENT_ACK, 0xFFFF);		CSR_WRITE_2(sc, WI_INT_EN, 0);		return (0);	}	/* Disable interrupts. */	CSR_WRITE_2(sc, WI_INT_EN, 0);	status = CSR_READ_2(sc, WI_EVENT_STAT);	CSR_WRITE_2(sc, WI_EVENT_ACK, ~WI_INTRS);	if (status & WI_EV_RX) {		wi_rxeof(sc);		CSR_WRITE_2(sc, WI_EVENT_ACK, WI_EV_RX);	}	if (status & WI_EV_TX) {		wi_txeof(sc, status);		CSR_WRITE_2(sc, WI_EVENT_ACK, WI_EV_TX);	}	if (status & WI_EV_ALLOC) {		int			id;		id = CSR_READ_2(sc, WI_ALLOC_FID);		CSR_WRITE_2(sc, WI_EVENT_ACK, WI_EV_ALLOC);		if (id == sc->wi_tx_data_id)			wi_txeof(sc, status);	}	if (status & WI_EV_INFO) {		wi_update_stats(sc);		CSR_WRITE_2(sc, WI_EVENT_ACK, WI_EV_INFO);	}	if (status & WI_EV_TX_EXC) {		wi_txeof(sc, status);		CSR_WRITE_2(sc, WI_EVENT_ACK, WI_EV_TX_EXC);	}	if (status & WI_EV_INFO_DROP) {		CSR_WRITE_2(sc, WI_EVENT_ACK, WI_EV_INFO_DROP);	}	/* Re-enable interrupts. */	CSR_WRITE_2(sc, WI_INT_EN, WI_INTRS);	if (!IFQ_IS_EMPTY(&ifp->if_snd))		wi_start(ifp);	return (1);}