• Petri Gynther's avatar
    net: bcmgenet: simplify __bcmgenet_tx_reclaim() · 66d06757
    Petri Gynther authored
    1. Use c_index and ring->c_index to determine how many TxCBs/TxBDs are
       ready for cleanup
       - c_index = the current value of TDMA_CONS_INDEX
       - TDMA_CONS_INDEX is HW-incremented and auto-wraparound (0x0-0xFFFF)
       - ring->c_index = __bcmgenet_tx_reclaim() cleaned up to this point on
         the previous invocation
    
    2. Add bcmgenet_tx_ring->clean_ptr
       - index of the next TxCB to be cleaned
       - incremented as TxCBs/TxBDs are processed
       - value always in range [ring->cb_ptr, ring->end_ptr]
    
    3. Fix incrementing of dev->stats.tx_packets
       - should be incremented only when tx_cb_ptr->skb != NULL
    
    These changes simplify __bcmgenet_tx_reclaim(). Furthermore, Tx ring size
    can now be any value.
    
    With the old code, Tx ring size had to be a power-of-2:
       num_tx_bds = ring->size;
       c_index &= (num_tx_bds - 1);
       last_c_index &= (num_tx_bds - 1);
    Signed-off-by: default avatarPetri Gynther <pgynther@google.com>
    Reviewed-by: default avatarFlorian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    66d06757
bcmgenet.c 76.6 KB