netxen: refactor transmit code

o move tx stuff into nx_host_tx_ring structure, this will
  help managing multiple tx rings in future.
o sanitize some variable names

Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Dhananjay Phadke
2009-04-07 22:50:40 +00:00
committed by David S. Miller
parent 1b1f789818
commit d877f1e344
5 changed files with 108 additions and 120 deletions

View File

@ -501,45 +501,44 @@ static int nx_p3_nic_add_mac(struct netxen_adapter *adapter,
static int
netxen_send_cmd_descs(struct netxen_adapter *adapter,
struct cmd_desc_type0 *cmd_desc_arr, int nr_elements)
struct cmd_desc_type0 *cmd_desc_arr, int nr_desc)
{
uint32_t i, producer;
u32 i, producer, consumer;
struct netxen_cmd_buffer *pbuf;
struct cmd_desc_type0 *cmd_desc;
if (nr_elements > MAX_PENDING_DESC_BLOCK_SIZE || nr_elements == 0) {
printk(KERN_WARNING "%s: Too many command descriptors in a "
"request\n", __func__);
return -EINVAL;
}
struct nx_host_tx_ring *tx_ring;
i = 0;
tx_ring = &adapter->tx_ring;
netif_tx_lock_bh(adapter->netdev);
producer = adapter->cmd_producer;
producer = tx_ring->producer;
consumer = tx_ring->sw_consumer;
if (nr_desc > find_diff_among(producer, consumer, tx_ring->num_desc)) {
netif_tx_unlock_bh(adapter->netdev);
return -EBUSY;
}
do {
cmd_desc = &cmd_desc_arr[i];
pbuf = &adapter->cmd_buf_arr[producer];
pbuf = &tx_ring->cmd_buf_arr[producer];
pbuf->skb = NULL;
pbuf->frag_count = 0;
/* adapter->ahw.cmd_desc_head[producer] = *cmd_desc; */
memcpy(&adapter->ahw.cmd_desc_head[producer],
memcpy(&tx_ring->desc_head[producer],
&cmd_desc_arr[i], sizeof(struct cmd_desc_type0));
producer = get_next_index(producer,
adapter->num_txd);
producer = get_next_index(producer, tx_ring->num_desc);
i++;
} while (i != nr_elements);
} while (i != nr_desc);
adapter->cmd_producer = producer;
tx_ring->producer = producer;
/* write producer index to start the xmit */
netxen_nic_update_cmd_producer(adapter, adapter->cmd_producer);
netxen_nic_update_cmd_producer(adapter, tx_ring, producer);
netif_tx_unlock_bh(adapter->netdev);