MCPcopy Create free account
hub / github.com/F-Stack/f-stack / awg_newbuf_rx

Function awg_newbuf_rx

freebsd/arm/allwinner/if_awg.c:746–782  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

744}
745
746static int
747awg_newbuf_rx(struct awg_softc *sc, int index)
748{
749 struct mbuf *m;
750 bus_dma_segment_t seg;
751 bus_dmamap_t map;
752 int nsegs;
753
754 m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
755 if (m == NULL)
756 return (ENOBUFS);
757
758 m->m_pkthdr.len = m->m_len = m->m_ext.ext_size;
759 m_adj(m, ETHER_ALIGN);
760
761 if (bus_dmamap_load_mbuf_sg(sc->rx.buf_tag, sc->rx.buf_spare_map,
762 m, &seg, &nsegs, BUS_DMA_NOWAIT) != 0) {
763 m_freem(m);
764 return (ENOBUFS);
765 }
766
767 if (sc->rx.buf_map[index].mbuf != NULL) {
768 bus_dmamap_sync(sc->rx.buf_tag, sc->rx.buf_map[index].map,
769 BUS_DMASYNC_POSTREAD);
770 bus_dmamap_unload(sc->rx.buf_tag, sc->rx.buf_map[index].map);
771 }
772 map = sc->rx.buf_map[index].map;
773 sc->rx.buf_map[index].map = sc->rx.buf_spare_map;
774 sc->rx.buf_spare_map = map;
775 bus_dmamap_sync(sc->rx.buf_tag, sc->rx.buf_map[index].map,
776 BUS_DMASYNC_PREREAD);
777
778 sc->rx.buf_map[index].mbuf = m;
779 awg_setup_rxdesc(sc, index, seg.ds_addr);
780
781 return (0);
782}
783
784static void
785awg_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)

Callers 2

awg_setup_dmaFunction · 0.85
awg_rxintrFunction · 0.85

Calls 7

m_adjFunction · 0.85
bus_dmamap_load_mbuf_sgFunction · 0.85
awg_setup_rxdescFunction · 0.85
m_getclFunction · 0.50
m_freemFunction · 0.50
bus_dmamap_syncFunction · 0.50
bus_dmamap_unloadFunction · 0.50

Tested by

no test coverage detected