N_TX_RINGS
for (ring = 0; ring < N_TX_RINGS; ring++) {
for (i = 0; i < N_TX_RINGS; i++)
for (i = N_TX_RINGS; i > 0; i--)
spin_lock(&cp->stat_lock[N_TX_RINGS]);
spin_unlock(&cp->stat_lock[N_TX_RINGS]);
spin_lock(&cp->stat_lock[N_TX_RINGS]);
spin_unlock(&cp->stat_lock[N_TX_RINGS]);
memset(cp->tx_old, 0, sizeof(*cp->tx_old)*N_TX_RINGS);
memset(cp->tx_new, 0, sizeof(*cp->tx_new)*N_TX_RINGS);
for (i = 0; i < N_TX_RINGS; i++)
for (i = 0; i < N_TX_RINGS; i++) {
for (i = 0; i < N_TX_RINGS; i++) {
return stats + N_TX_RINGS;
spin_lock_irqsave(&cp->stat_lock[N_TX_RINGS], flags);
stats[N_TX_RINGS].rx_crc_errors +=
stats[N_TX_RINGS].rx_frame_errors +=
stats[N_TX_RINGS].rx_length_errors +=
stats[N_TX_RINGS].tx_aborted_errors += tmp;
stats[N_TX_RINGS].collisions +=
stats[N_TX_RINGS].tx_aborted_errors +=
stats[N_TX_RINGS].collisions += readl(cp->regs + REG_MAC_COLL_EXCESS) +
stats[N_TX_RINGS].collisions += stats[0].collisions;
stats[N_TX_RINGS].rx_over_errors += stats[0].rx_over_errors;
stats[N_TX_RINGS].rx_frame_errors += stats[0].rx_frame_errors;
stats[N_TX_RINGS].rx_fifo_errors += stats[0].rx_fifo_errors;
stats[N_TX_RINGS].tx_aborted_errors += stats[0].tx_aborted_errors;
stats[N_TX_RINGS].tx_fifo_errors += stats[0].tx_fifo_errors;
for (i = 0; i < N_TX_RINGS; i++) {
stats[N_TX_RINGS].rx_length_errors +=
stats[N_TX_RINGS].rx_crc_errors += stats[i].rx_crc_errors;
stats[N_TX_RINGS].rx_packets += stats[i].rx_packets;
stats[N_TX_RINGS].tx_packets += stats[i].tx_packets;
stats[N_TX_RINGS].rx_bytes += stats[i].rx_bytes;
stats[N_TX_RINGS].tx_bytes += stats[i].tx_bytes;
stats[N_TX_RINGS].rx_errors += stats[i].rx_errors;
stats[N_TX_RINGS].tx_errors += stats[i].tx_errors;
stats[N_TX_RINGS].rx_dropped += stats[i].rx_dropped;
stats[N_TX_RINGS].tx_dropped += stats[i].tx_dropped;
spin_unlock_irqrestore(&cp->stat_lock[N_TX_RINGS], flags);
return stats + N_TX_RINGS;
for (i = 0; i < N_TX_RINGS; i++) {
spin_lock_init(&cp->stat_lock[N_TX_RINGS]);
for (i = 0; i < N_TX_RINGS; i++)
struct cas_tx_desc txds[N_TX_RINGS][INIT_BLOCK_TX];
spinlock_t tx_lock[N_TX_RINGS]; /* tx bits */
spinlock_t stat_lock[N_TX_RINGS + 1]; /* for stat gathering */
int tx_new[N_TX_RINGS], tx_old[N_TX_RINGS];
struct sk_buff *tx_skbs[N_TX_RINGS][TX_DESC_RING_SIZE];
struct cas_tiny_count tx_tiny_use[N_TX_RINGS][TX_DESC_RING_SIZE];
u8 *tx_tiny_bufs[N_TX_RINGS];
struct net_device_stats net_stats[N_TX_RINGS + 1];
dma_addr_t block_dvma, tx_tiny_dvma[N_TX_RINGS];