int pxa2x0_i2s_halt_input(void *hdl) { struct pxa2x0_i2s_softc *sc = hdl; if (sc->sc_rxdma) { pxa2x0_dmac_abort_xfer(sc->sc_rxdma->dx); sc->sc_rxdma = NULL; } return 0; }
int pxa2x0_i2s_halt_input(void *hdl) { struct pxa2x0_i2s_softc *sc = hdl; int s; s = splaudio(); if (sc->sc_rxdma) { pxa2x0_dmac_abort_xfer(sc->sc_rxdma->dx); sc->sc_rxdma = NULL; } splx(s); return 0; }
void pxa2x0_i2s_freem(void *hdl, void *ptr, size_t size) { struct pxa2x0_i2s_softc *sc = hdl; struct pxa2x0_i2s_dma **pp, *p; for (pp = &sc->sc_dmas; (p = *pp) != NULL; pp = &p->next) { if (p->addr == ptr) { pxa2x0_dmac_abort_xfer(p->dx); pxa2x0_dmac_free_xfer(p->dx); p->segs[0].ds_len = p->size; /* XXX */ bus_dmamap_unload(sc->sc_dmat, p->map); bus_dmamap_destroy(sc->sc_dmat, p->map); bus_dmamem_unmap(sc->sc_dmat, p->addr, p->size); bus_dmamem_free(sc->sc_dmat, p->segs, p->nsegs); *pp = p->next; kmem_free(p, sizeof(*p)); return; } } panic("pxa2x0_i2s_freem: trying to free unallocated memory"); }