Lines Matching refs:tx_ring
201 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000e_dump() local
245 buffer_info = &tx_ring->buffer_info[tx_ring->next_to_clean]; in e1000e_dump()
247 0, tx_ring->next_to_use, tx_ring->next_to_clean, in e1000e_dump()
289 for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) { in e1000e_dump()
291 tx_desc = E1000_TX_DESC(*tx_ring, i); in e1000e_dump()
292 buffer_info = &tx_ring->buffer_info[i]; in e1000e_dump()
294 if (i == tx_ring->next_to_use && i == tx_ring->next_to_clean) in e1000e_dump()
296 else if (i == tx_ring->next_to_use) in e1000e_dump()
298 else if (i == tx_ring->next_to_clean) in e1000e_dump()
623 static void e1000e_update_tdt_wa(struct e1000_ring *tx_ring, unsigned int i) in e1000e_update_tdt_wa() argument
625 struct e1000_adapter *adapter = tx_ring->adapter; in e1000e_update_tdt_wa()
629 writel(i, tx_ring->tail); in e1000e_update_tdt_wa()
631 if (unlikely(!ret_val && (i != readl(tx_ring->tail)))) { in e1000e_update_tdt_wa()
1055 static void e1000_put_txbuf(struct e1000_ring *tx_ring, in e1000_put_txbuf() argument
1059 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_put_txbuf()
1086 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_print_hw_hang() local
1087 unsigned int i = tx_ring->next_to_clean; in e1000_print_hw_hang()
1088 unsigned int eop = tx_ring->buffer_info[i].next_to_watch; in e1000_print_hw_hang()
1089 struct e1000_tx_desc *eop_desc = E1000_TX_DESC(*tx_ring, eop); in e1000_print_hw_hang()
1145 readl(tx_ring->head), readl(tx_ring->tail), tx_ring->next_to_use, in e1000_print_hw_hang()
1146 tx_ring->next_to_clean, tx_ring->buffer_info[eop].time_stamp, in e1000_print_hw_hang()
1208 static bool e1000_clean_tx_irq(struct e1000_ring *tx_ring) in e1000_clean_tx_irq() argument
1210 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_clean_tx_irq()
1220 i = tx_ring->next_to_clean; in e1000_clean_tx_irq()
1221 eop = tx_ring->buffer_info[i].next_to_watch; in e1000_clean_tx_irq()
1222 eop_desc = E1000_TX_DESC(*tx_ring, eop); in e1000_clean_tx_irq()
1225 (count < tx_ring->count)) { in e1000_clean_tx_irq()
1230 tx_desc = E1000_TX_DESC(*tx_ring, i); in e1000_clean_tx_irq()
1231 buffer_info = &tx_ring->buffer_info[i]; in e1000_clean_tx_irq()
1243 e1000_put_txbuf(tx_ring, buffer_info, false); in e1000_clean_tx_irq()
1247 if (i == tx_ring->count) in e1000_clean_tx_irq()
1251 if (i == tx_ring->next_to_use) in e1000_clean_tx_irq()
1253 eop = tx_ring->buffer_info[i].next_to_watch; in e1000_clean_tx_irq()
1254 eop_desc = E1000_TX_DESC(*tx_ring, eop); in e1000_clean_tx_irq()
1257 tx_ring->next_to_clean = i; in e1000_clean_tx_irq()
1263 e1000_desc_unused(tx_ring) >= TX_WAKE_THRESHOLD) { in e1000_clean_tx_irq()
1281 if (tx_ring->buffer_info[i].time_stamp && in e1000_clean_tx_irq()
1282 time_after(jiffies, tx_ring->buffer_info[i].time_stamp in e1000_clean_tx_irq()
1291 return count < tx_ring->count; in e1000_clean_tx_irq()
1922 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_intr_msix_tx() local
1927 if (!e1000_clean_tx_irq(tx_ring)) in e1000_intr_msix_tx()
1929 ew32(ICS, tx_ring->ims_val); in e1000_intr_msix_tx()
1932 ew32(IMS, adapter->tx_ring->ims_val); in e1000_intr_msix_tx()
1972 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_configure_msix() local
1997 tx_ring->ims_val = E1000_IMS_TXQ0; in e1000_configure_msix()
1999 if (tx_ring->itr_val) in e1000_configure_msix()
2000 writel(1000000000 / (tx_ring->itr_val * 256), in e1000_configure_msix()
2001 tx_ring->itr_register); in e1000_configure_msix()
2003 writel(1, tx_ring->itr_register); in e1000_configure_msix()
2004 adapter->eiac_mask |= tx_ring->ims_val; in e1000_configure_msix()
2123 snprintf(adapter->tx_ring->name, in e1000_request_msix()
2124 sizeof(adapter->tx_ring->name) - 1, in e1000_request_msix()
2127 memcpy(adapter->tx_ring->name, netdev->name, IFNAMSIZ); in e1000_request_msix()
2129 e1000_intr_msix_tx, 0, adapter->tx_ring->name, in e1000_request_msix()
2133 adapter->tx_ring->itr_register = adapter->hw.hw_addr + in e1000_request_msix()
2135 adapter->tx_ring->itr_val = adapter->itr; in e1000_request_msix()
2322 int e1000e_setup_tx_resources(struct e1000_ring *tx_ring) in e1000e_setup_tx_resources() argument
2324 struct e1000_adapter *adapter = tx_ring->adapter; in e1000e_setup_tx_resources()
2327 size = sizeof(struct e1000_buffer) * tx_ring->count; in e1000e_setup_tx_resources()
2328 tx_ring->buffer_info = vzalloc(size); in e1000e_setup_tx_resources()
2329 if (!tx_ring->buffer_info) in e1000e_setup_tx_resources()
2333 tx_ring->size = tx_ring->count * sizeof(struct e1000_tx_desc); in e1000e_setup_tx_resources()
2334 tx_ring->size = ALIGN(tx_ring->size, 4096); in e1000e_setup_tx_resources()
2336 err = e1000_alloc_ring_dma(adapter, tx_ring); in e1000e_setup_tx_resources()
2340 tx_ring->next_to_use = 0; in e1000e_setup_tx_resources()
2341 tx_ring->next_to_clean = 0; in e1000e_setup_tx_resources()
2345 vfree(tx_ring->buffer_info); in e1000e_setup_tx_resources()
2407 static void e1000_clean_tx_ring(struct e1000_ring *tx_ring) in e1000_clean_tx_ring() argument
2409 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_clean_tx_ring()
2414 for (i = 0; i < tx_ring->count; i++) { in e1000_clean_tx_ring()
2415 buffer_info = &tx_ring->buffer_info[i]; in e1000_clean_tx_ring()
2416 e1000_put_txbuf(tx_ring, buffer_info, false); in e1000_clean_tx_ring()
2420 size = sizeof(struct e1000_buffer) * tx_ring->count; in e1000_clean_tx_ring()
2421 memset(tx_ring->buffer_info, 0, size); in e1000_clean_tx_ring()
2423 memset(tx_ring->desc, 0, tx_ring->size); in e1000_clean_tx_ring()
2425 tx_ring->next_to_use = 0; in e1000_clean_tx_ring()
2426 tx_ring->next_to_clean = 0; in e1000_clean_tx_ring()
2435 void e1000e_free_tx_resources(struct e1000_ring *tx_ring) in e1000e_free_tx_resources() argument
2437 struct e1000_adapter *adapter = tx_ring->adapter; in e1000e_free_tx_resources()
2440 e1000_clean_tx_ring(tx_ring); in e1000e_free_tx_resources()
2442 vfree(tx_ring->buffer_info); in e1000e_free_tx_resources()
2443 tx_ring->buffer_info = NULL; in e1000e_free_tx_resources()
2445 dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc, in e1000e_free_tx_resources()
2446 tx_ring->dma); in e1000e_free_tx_resources()
2447 tx_ring->desc = NULL; in e1000e_free_tx_resources()
2631 adapter->tx_ring = kzalloc(size, GFP_KERNEL); in e1000_alloc_queues()
2632 if (!adapter->tx_ring) in e1000_alloc_queues()
2634 adapter->tx_ring->count = adapter->tx_ring_count; in e1000_alloc_queues()
2635 adapter->tx_ring->adapter = adapter; in e1000_alloc_queues()
2647 kfree(adapter->tx_ring); in e1000_alloc_queues()
2667 (adapter->rx_ring->ims_val & adapter->tx_ring->ims_val)) in e1000e_poll()
2668 tx_cleaned = e1000_clean_tx_irq(adapter->tx_ring); in e1000e_poll()
2913 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_configure_tx() local
2918 tdba = tx_ring->dma; in e1000_configure_tx()
2919 tdlen = tx_ring->count * sizeof(struct e1000_tx_desc); in e1000_configure_tx()
2925 tx_ring->head = adapter->hw.hw_addr + E1000_TDH(0); in e1000_configure_tx()
2926 tx_ring->tail = adapter->hw.hw_addr + E1000_TDT(0); in e1000_configure_tx()
2928 writel(0, tx_ring->head); in e1000_configure_tx()
2930 e1000e_update_tdt_wa(tx_ring, 0); in e1000_configure_tx()
2932 writel(0, tx_ring->tail); in e1000_configure_tx()
3798 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_flush_tx_ring() local
3806 BUG_ON(tdt != tx_ring->next_to_use); in e1000_flush_tx_ring()
3807 tx_desc = E1000_TX_DESC(*tx_ring, tx_ring->next_to_use); in e1000_flush_tx_ring()
3808 tx_desc->buffer_addr = tx_ring->dma; in e1000_flush_tx_ring()
3814 tx_ring->next_to_use++; in e1000_flush_tx_ring()
3815 if (tx_ring->next_to_use == tx_ring->count) in e1000_flush_tx_ring()
3816 tx_ring->next_to_use = 0; in e1000_flush_tx_ring()
3817 ew32(TDT(0), tx_ring->next_to_use); in e1000_flush_tx_ring()
4305 e1000_clean_tx_ring(adapter->tx_ring); in e1000e_down()
4589 err = e1000e_setup_tx_resources(adapter->tx_ring); in e1000e_open()
4662 e1000e_free_tx_resources(adapter->tx_ring); in e1000e_open()
4704 e1000e_free_tx_resources(adapter->tx_ring); in e1000e_close()
5153 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_watchdog_task() local
5318 (e1000_desc_unused(tx_ring) + 1 < tx_ring->count)) in e1000_watchdog_task()
5392 static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb, in e1000_tso() argument
5435 i = tx_ring->next_to_use; in e1000_tso()
5436 context_desc = E1000_CONTEXT_DESC(*tx_ring, i); in e1000_tso()
5437 buffer_info = &tx_ring->buffer_info[i]; in e1000_tso()
5453 if (i == tx_ring->count) in e1000_tso()
5455 tx_ring->next_to_use = i; in e1000_tso()
5460 static bool e1000_tx_csum(struct e1000_ring *tx_ring, struct sk_buff *skb, in e1000_tx_csum() argument
5463 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_tx_csum()
5492 i = tx_ring->next_to_use; in e1000_tx_csum()
5493 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_csum()
5494 context_desc = E1000_CONTEXT_DESC(*tx_ring, i); in e1000_tx_csum()
5507 if (i == tx_ring->count) in e1000_tx_csum()
5509 tx_ring->next_to_use = i; in e1000_tx_csum()
5514 static int e1000_tx_map(struct e1000_ring *tx_ring, struct sk_buff *skb, in e1000_tx_map() argument
5518 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_tx_map()
5525 i = tx_ring->next_to_use; in e1000_tx_map()
5528 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_map()
5547 if (i == tx_ring->count) in e1000_tx_map()
5561 if (i == tx_ring->count) in e1000_tx_map()
5564 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_map()
5587 tx_ring->buffer_info[i].skb = skb; in e1000_tx_map()
5588 tx_ring->buffer_info[i].segs = segs; in e1000_tx_map()
5589 tx_ring->buffer_info[i].bytecount = bytecount; in e1000_tx_map()
5590 tx_ring->buffer_info[first].next_to_watch = i; in e1000_tx_map()
5602 i += tx_ring->count; in e1000_tx_map()
5604 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_map()
5605 e1000_put_txbuf(tx_ring, buffer_info, true); in e1000_tx_map()
5611 static void e1000_tx_queue(struct e1000_ring *tx_ring, int tx_flags, int count) in e1000_tx_queue() argument
5613 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_tx_queue()
5646 i = tx_ring->next_to_use; in e1000_tx_queue()
5649 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_queue()
5650 tx_desc = E1000_TX_DESC(*tx_ring, i); in e1000_tx_queue()
5657 if (i == tx_ring->count) in e1000_tx_queue()
5674 tx_ring->next_to_use = i; in e1000_tx_queue()
5715 static int __e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size) in __e1000_maybe_stop_tx() argument
5717 struct e1000_adapter *adapter = tx_ring->adapter; in __e1000_maybe_stop_tx()
5729 if (e1000_desc_unused(tx_ring) < size) in __e1000_maybe_stop_tx()
5738 static int e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size) in e1000_maybe_stop_tx() argument
5740 BUG_ON(size > tx_ring->count); in e1000_maybe_stop_tx()
5742 if (e1000_desc_unused(tx_ring) >= size) in e1000_maybe_stop_tx()
5744 return __e1000_maybe_stop_tx(tx_ring, size); in e1000_maybe_stop_tx()
5751 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_xmit_frame() local
5821 if (e1000_maybe_stop_tx(tx_ring, count + 2)) in e1000_xmit_frame()
5830 first = tx_ring->next_to_use; in e1000_xmit_frame()
5832 tso = e1000_tso(tx_ring, skb, protocol); in e1000_xmit_frame()
5840 else if (e1000_tx_csum(tx_ring, skb, protocol)) in e1000_xmit_frame()
5854 count = e1000_tx_map(tx_ring, skb, first, adapter->tx_fifo_limit, in e1000_xmit_frame()
5873 e1000_tx_queue(tx_ring, tx_flags, count); in e1000_xmit_frame()
5875 e1000_maybe_stop_tx(tx_ring, in e1000_xmit_frame()
5883 e1000e_update_tdt_wa(tx_ring, in e1000_xmit_frame()
5884 tx_ring->next_to_use); in e1000_xmit_frame()
5886 writel(tx_ring->next_to_use, tx_ring->tail); in e1000_xmit_frame()
5896 tx_ring->buffer_info[first].time_stamp = 0; in e1000_xmit_frame()
5897 tx_ring->next_to_use = first; in e1000_xmit_frame()
7345 kfree(adapter->tx_ring); in e1000_probe()
7416 kfree(adapter->tx_ring); in e1000_remove()