Changeset 6a4b5a4 in rtems-libbsd


Ignore:
Timestamp:
Mar 27, 2015, 1:16:40 PM (5 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
4.11, afaeccc05a556f6aa25ba044a7e49d6aa634a59e, freebsd-9.3, master
Children:
4a5a309
Parents:
d5ad68a
git-author:
Sebastian Huber <sebastian.huber@…> (03/27/15 13:16:40)
git-committer:
Sebastian Huber <sebastian.huber@…> (04/01/15 07:15:29)
Message:

if_dwc: Use explicit cache operations

File:
1 edited

Legend:

Unmodified
Added
Removed
  • freebsd/sys/dev/dwc/if_dwc.c

    rd5ad68a r6a4b5a4  
    117117
    118118struct dwc_bufmap {
     119#ifndef __rtems__
    119120        bus_dmamap_t    map;
     121#endif /* __rtems__ */
    120122        struct mbuf     *mbuf;
    121123};
     
    180182        bus_dmamap_t            rxdesc_map;
    181183        struct dwc_hwdesc       *rxdesc_ring;
     184#ifndef __rtems__
    182185        bus_addr_t              rxdesc_ring_paddr;
    183186        bus_dma_tag_t           rxbuf_tag;
     187#endif /* __rtems__ */
    184188        struct dwc_bufmap       rxbuf_map[RX_DESC_COUNT];
    185189        uint32_t                rx_idx;
     
    189193        bus_dmamap_t            txdesc_map;
    190194        struct dwc_hwdesc       *txdesc_ring;
     195#ifndef __rtems__
    191196        bus_addr_t              txdesc_ring_paddr;
    192197        bus_dma_tag_t           txbuf_tag;
     198#endif /* __rtems__ */
    193199        struct dwc_bufmap       txbuf_map[RX_DESC_COUNT];
    194200        uint32_t                tx_idx_head;
     
    222228}
    223229
     230#ifndef __rtems__
    224231static void
    225232dwc_get1paddr(void *arg, bus_dma_segment_t *segs, int nsegs, int error)
     
    230237        *(bus_addr_t *)arg = segs[0].ds_addr;
    231238}
     239#endif /* __rtems__ */
    232240
    233241inline static uint32_t
     
    267275{
    268276        struct bus_dma_segment seg;
     277#ifndef __rtems__
    269278        int error, nsegs;
     279#endif /* __rtems__ */
    270280        struct mbuf * m;
    271281
     
    274284        *mp = m;
    275285
     286#ifndef __rtems__
    276287        error = bus_dmamap_load_mbuf_sg(sc->txbuf_tag, sc->txbuf_map[idx].map,
    277288            m, &seg, &nsegs, 0);
     
    284295        bus_dmamap_sync(sc->txbuf_tag, sc->txbuf_map[idx].map,
    285296            BUS_DMASYNC_PREWRITE);
     297#else /* __rtems__ */
     298        rtems_cache_flush_multiple_data_lines(m->m_data, m->m_len);
     299        seg.ds_addr = mtod(m, bus_addr_t);
     300        seg.ds_len = m->m_len;
     301#endif /* __rtems__ */
    286302
    287303        sc->txbuf_map[idx].mbuf = m;
     
    542558        sc->rxdesc_ring[idx].addr = (uint32_t)paddr;
    543559        nidx = next_rxidx(sc, idx);
     560#ifndef __rtems__
    544561        sc->rxdesc_ring[idx].addr_next = sc->rxdesc_ring_paddr +        \
    545562            (nidx * sizeof(struct dwc_hwdesc));
     563#else /* __rtems__ */
     564        sc->rxdesc_ring[idx].addr_next = (uint32_t)&sc->rxdesc_ring[nidx];
     565#endif /* __rtems__ */
    546566        sc->rxdesc_ring[idx].tdes1 = DDESC_RDES1_CHAINED | MCLBYTES;
    547567
     
    557577{
    558578        struct bus_dma_segment seg;
     579#ifndef __rtems__
    559580        int error, nsegs;
     581#endif /* __rtems__ */
    560582
    561583        m_adj(m, ETHER_ALIGN);
    562584
     585#ifndef __rtems__
    563586        error = bus_dmamap_load_mbuf_sg(sc->rxbuf_tag, sc->rxbuf_map[idx].map,
    564587            m, &seg, &nsegs, 0);
     
    571594        bus_dmamap_sync(sc->rxbuf_tag, sc->rxbuf_map[idx].map,
    572595            BUS_DMASYNC_PREREAD);
     596#else /* __rtems__ */
     597        rtems_cache_invalidate_multiple_data_lines(m->m_data, m->m_len);
     598        seg.ds_addr = mtod(m, bus_addr_t);
     599#endif /* __rtems__ */
    573600
    574601        sc->rxbuf_map[idx].mbuf = m;
     
    789816                        break;
    790817                bmap = &sc->txbuf_map[sc->tx_idx_tail];
     818#ifndef __rtems__
    791819                bus_dmamap_sync(sc->txbuf_tag, bmap->map,
    792820                    BUS_DMASYNC_POSTWRITE);
    793821                bus_dmamap_unload(sc->txbuf_tag, bmap->map);
     822#endif /* __rtems__ */
    794823                m_freem(bmap->mbuf);
    795824                bmap->mbuf = NULL;
     
    824853                        break;
    825854
     855#ifndef __rtems__
    826856                bus_dmamap_sync(sc->rxbuf_tag, sc->rxbuf_map[idx].map,
    827857                    BUS_DMASYNC_POSTREAD);
    828858                bus_dmamap_unload(sc->rxbuf_tag, sc->rxbuf_map[idx].map);
     859#endif /* __rtems__ */
    829860
    830861                len = (rdes0 >> DDESC_RDES0_FL_SHIFT) & DDESC_RDES0_FL_MASK;
     
    941972        }
    942973
     974#ifndef __rtems__
    943975        error = bus_dmamap_load(sc->txdesc_tag, sc->txdesc_map,
    944976            sc->txdesc_ring, TX_DESC_SIZE, dwc_get1paddr,
     
    949981                goto out;
    950982        }
     983#endif /* __rtems__ */
    951984
    952985        for (idx = 0; idx < TX_DESC_COUNT; idx++) {
     
    954987                sc->txdesc_ring[idx].tdes1 = 0;
    955988                nidx = next_txidx(sc, idx);
     989#ifndef __rtems__
    956990                sc->txdesc_ring[idx].addr_next = sc->txdesc_ring_paddr + \
    957991                    (nidx * sizeof(struct dwc_hwdesc));
    958         }
    959 
     992#else /* __rtems__ */
     993                sc->txdesc_ring[idx].addr_next =
     994                    (uint32_t)&sc->txdesc_ring[nidx];
     995#endif /* __rtems__ */
     996        }
     997
     998#ifndef __rtems__
    960999        error = bus_dma_tag_create(
    9611000            bus_get_dma_tag(sc->dev),   /* Parent tag. */
     
    9741013                goto out;
    9751014        }
     1015#endif /* __rtems__ */
    9761016
    9771017        for (idx = 0; idx < TX_DESC_COUNT; idx++) {
     1018#ifndef __rtems__
    9781019                error = bus_dmamap_create(sc->txbuf_tag, BUS_DMA_COHERENT,
    9791020                    &sc->txbuf_map[idx].map);
     
    9831024                        goto out;
    9841025                }
     1026#endif /* __rtems__ */
    9851027                dwc_setup_txdesc(sc, idx, 0, 0);
    9861028        }
     
    10151057        }
    10161058
     1059#ifndef __rtems__
    10171060        error = bus_dmamap_load(sc->rxdesc_tag, sc->rxdesc_map,
    10181061            sc->rxdesc_ring, RX_DESC_SIZE, dwc_get1paddr,
     
    10401083                goto out;
    10411084        }
     1085#endif /* __rtems__ */
    10421086
    10431087        for (idx = 0; idx < RX_DESC_COUNT; idx++) {
     1088#ifndef __rtems__
    10441089                error = bus_dmamap_create(sc->rxbuf_tag, BUS_DMA_COHERENT,
    10451090                    &sc->rxbuf_map[idx].map);
     
    10491094                        goto out;
    10501095                }
     1096#endif /* __rtems__ */
    10511097                if ((m = dwc_alloc_mbufcl(sc)) == NULL) {
    10521098                        device_printf(sc->dev, "Could not alloc mbuf\n");
     
    11921238
    11931239        /* Setup addresses */
     1240#ifndef __rtems__
    11941241        WRITE4(sc, RX_DESCR_LIST_ADDR, sc->rxdesc_ring_paddr);
    11951242        WRITE4(sc, TX_DESCR_LIST_ADDR, sc->txdesc_ring_paddr);
     1243#else /* __rtems__ */
     1244        WRITE4(sc, RX_DESCR_LIST_ADDR, (uint32_t)&sc->rxdesc_ring[0]);
     1245        WRITE4(sc, TX_DESCR_LIST_ADDR, (uint32_t)&sc->txdesc_ring[0]);
     1246#endif /* __rtems__ */
    11961247
    11971248        mtx_init(&sc->mtx, device_get_nameunit(sc->dev),
Note: See TracChangeset for help on using the changeset viewer.