Changeset d9ff828 in rtems-libbsd


Ignore:
Timestamp:
Mar 30, 2015, 9:51:36 AM (4 years ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
eeb3fd5d9b07ac9a2e280cff60a1b762bd273a8d, 1e989998de954bef51e6c19cc3d64d39f32100aa
Children:
5deeb69
Parents:
9410212
git-author:
Sebastian Huber <sebastian.huber@…> (03/30/15 09:51:36)
git-committer:
Sebastian Huber <sebastian.huber@…> (01/10/17 08:53:33)
Message:

if_dwc: Simplify tx desc setup

File:
1 edited

Legend:

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

    r9410212 rd9ff828  
    178178{
    179179        uint32_t flags;
    180         uint32_t nidx;
    181 
    182         nidx = next_txidx(sc, idx);
    183 
    184         /* Addr/len 0 means we're clearing the descriptor after xmit done. */
    185         if (paddr == 0 || len == 0) {
    186                 flags = 0;
    187                 --sc->txcount;
    188         } else {
    189                 if (sc->mactype == DWC_GMAC_ALT_DESC)
    190                         flags = DDESC_CNTL_TXCHAIN | DDESC_CNTL_TXFIRST
    191                             | DDESC_CNTL_TXLAST | DDESC_CNTL_TXINT;
    192                 else
    193                         flags = DDESC_TDES0_TXCHAIN | DDESC_TDES0_TXFIRST
    194                             | DDESC_TDES0_TXLAST | DDESC_TDES0_TXINT;
    195                 ++sc->txcount;
    196         }
     180
     181        ++sc->txcount;
    197182
    198183        sc->txdesc_ring[idx].addr = (uint32_t)(paddr);
    199184        if (sc->mactype == DWC_GMAC_ALT_DESC) {
     185                flags = DDESC_CNTL_TXCHAIN | DDESC_CNTL_TXFIRST
     186                    | DDESC_CNTL_TXLAST | DDESC_CNTL_TXINT;
    200187                sc->txdesc_ring[idx].tdes0 = 0;
    201188                sc->txdesc_ring[idx].tdes1 = flags | len;
    202189        } else {
     190                flags = DDESC_TDES0_TXCHAIN | DDESC_TDES0_TXFIRST
     191                    | DDESC_TDES0_TXLAST | DDESC_TDES0_TXINT;
    203192                sc->txdesc_ring[idx].tdes0 = flags;
    204193                sc->txdesc_ring[idx].tdes1 = len;
    205194        }
    206 
    207         if (paddr && len) {
    208                 wmb();
    209                 sc->txdesc_ring[idx].tdes0 |= DDESC_TDES0_OWN;
    210                 wmb();
    211         }
    212 
    213         return (nidx);
     195        wmb();
     196
     197        sc->txdesc_ring[idx].tdes0 = DDESC_TDES0_TXCHAIN | DDESC_TDES0_TXFIRST
     198            | DDESC_TDES0_TXLAST | DDESC_TDES0_TXINT | DDESC_TDES0_OWN;
     199        wmb();
     200
     201        return (next_txidx(sc, idx));
    214202}
    215203
     
    729717                m_freem(bmap->mbuf);
    730718                bmap->mbuf = NULL;
    731                 dwc_setup_txdesc(sc, sc->tx_idx_tail, 0, 0);
     719                --sc->txcount;
    732720                sc->tx_idx_tail = next_txidx(sc, sc->tx_idx_tail);
    733721        }
     
    881869
    882870        for (idx = 0; idx < TX_DESC_COUNT; idx++) {
     871                sc->txdesc_ring[idx].addr = 0;
     872                if (sc->mactype == DWC_GMAC_ALT_DESC) {
     873                        sc->txdesc_ring[idx].tdes0 = 0;
     874                        sc->txdesc_ring[idx].tdes1 = DDESC_CNTL_TXCHAIN;
     875                } else {
     876                        sc->txdesc_ring[idx].tdes0 = DDESC_TDES0_TXCHAIN;
     877                        sc->txdesc_ring[idx].tdes1 = 0;
     878                }
    883879                nidx = next_txidx(sc, idx);
    884880                sc->txdesc_ring[idx].addr_next = sc->txdesc_ring_paddr +
     
    911907                        goto out;
    912908                }
    913                 dwc_setup_txdesc(sc, idx, 0, 0);
    914909        }
    915910
     
    11481143        sc->dev = dev;
    11491144        sc->rx_idx = 0;
    1150         sc->txcount = TX_DESC_COUNT;
     1145        sc->txcount = 0;
    11511146        sc->mii_clk = IF_DWC_MII_CLK(dev);
    11521147        sc->mactype = IF_DWC_MAC_TYPE(dev);
Note: See TracChangeset for help on using the changeset viewer.