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()
1925 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_intr_msix_tx() local
1930 if (!e1000_clean_tx_irq(tx_ring)) in e1000_intr_msix_tx()
1932 ew32(ICS, tx_ring->ims_val); in e1000_intr_msix_tx()
1935 ew32(IMS, adapter->tx_ring->ims_val); in e1000_intr_msix_tx()
1975 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_configure_msix() local
2000 tx_ring->ims_val = E1000_IMS_TXQ0; in e1000_configure_msix()
2002 if (tx_ring->itr_val) in e1000_configure_msix()
2003 writel(1000000000 / (tx_ring->itr_val * 256), in e1000_configure_msix()
2004 tx_ring->itr_register); in e1000_configure_msix()
2006 writel(1, tx_ring->itr_register); in e1000_configure_msix()
2007 adapter->eiac_mask |= tx_ring->ims_val; in e1000_configure_msix()
2126 snprintf(adapter->tx_ring->name, in e1000_request_msix()
2127 sizeof(adapter->tx_ring->name) - 1, in e1000_request_msix()
2130 memcpy(adapter->tx_ring->name, netdev->name, IFNAMSIZ); in e1000_request_msix()
2132 e1000_intr_msix_tx, 0, adapter->tx_ring->name, in e1000_request_msix()
2136 adapter->tx_ring->itr_register = adapter->hw.hw_addr + in e1000_request_msix()
2138 adapter->tx_ring->itr_val = adapter->itr; in e1000_request_msix()
2325 int e1000e_setup_tx_resources(struct e1000_ring *tx_ring) in e1000e_setup_tx_resources() argument
2327 struct e1000_adapter *adapter = tx_ring->adapter; in e1000e_setup_tx_resources()
2330 size = sizeof(struct e1000_buffer) * tx_ring->count; in e1000e_setup_tx_resources()
2331 tx_ring->buffer_info = vzalloc(size); in e1000e_setup_tx_resources()
2332 if (!tx_ring->buffer_info) in e1000e_setup_tx_resources()
2336 tx_ring->size = tx_ring->count * sizeof(struct e1000_tx_desc); in e1000e_setup_tx_resources()
2337 tx_ring->size = ALIGN(tx_ring->size, 4096); in e1000e_setup_tx_resources()
2339 err = e1000_alloc_ring_dma(adapter, tx_ring); in e1000e_setup_tx_resources()
2343 tx_ring->next_to_use = 0; in e1000e_setup_tx_resources()
2344 tx_ring->next_to_clean = 0; in e1000e_setup_tx_resources()
2348 vfree(tx_ring->buffer_info); in e1000e_setup_tx_resources()
2410 static void e1000_clean_tx_ring(struct e1000_ring *tx_ring) in e1000_clean_tx_ring() argument
2412 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_clean_tx_ring()
2417 for (i = 0; i < tx_ring->count; i++) { in e1000_clean_tx_ring()
2418 buffer_info = &tx_ring->buffer_info[i]; in e1000_clean_tx_ring()
2419 e1000_put_txbuf(tx_ring, buffer_info, false); in e1000_clean_tx_ring()
2423 size = sizeof(struct e1000_buffer) * tx_ring->count; in e1000_clean_tx_ring()
2424 memset(tx_ring->buffer_info, 0, size); in e1000_clean_tx_ring()
2426 memset(tx_ring->desc, 0, tx_ring->size); in e1000_clean_tx_ring()
2428 tx_ring->next_to_use = 0; in e1000_clean_tx_ring()
2429 tx_ring->next_to_clean = 0; in e1000_clean_tx_ring()
2438 void e1000e_free_tx_resources(struct e1000_ring *tx_ring) in e1000e_free_tx_resources() argument
2440 struct e1000_adapter *adapter = tx_ring->adapter; in e1000e_free_tx_resources()
2443 e1000_clean_tx_ring(tx_ring); in e1000e_free_tx_resources()
2445 vfree(tx_ring->buffer_info); in e1000e_free_tx_resources()
2446 tx_ring->buffer_info = NULL; in e1000e_free_tx_resources()
2448 dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc, in e1000e_free_tx_resources()
2449 tx_ring->dma); in e1000e_free_tx_resources()
2450 tx_ring->desc = NULL; in e1000e_free_tx_resources()
2634 adapter->tx_ring = kzalloc(size, GFP_KERNEL); in e1000_alloc_queues()
2635 if (!adapter->tx_ring) in e1000_alloc_queues()
2637 adapter->tx_ring->count = adapter->tx_ring_count; in e1000_alloc_queues()
2638 adapter->tx_ring->adapter = adapter; in e1000_alloc_queues()
2650 kfree(adapter->tx_ring); in e1000_alloc_queues()
2670 (adapter->rx_ring->ims_val & adapter->tx_ring->ims_val)) in e1000e_poll()
2671 tx_cleaned = e1000_clean_tx_irq(adapter->tx_ring); in e1000e_poll()
2917 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_configure_tx() local
2922 tdba = tx_ring->dma; in e1000_configure_tx()
2923 tdlen = tx_ring->count * sizeof(struct e1000_tx_desc); in e1000_configure_tx()
2929 tx_ring->head = adapter->hw.hw_addr + E1000_TDH(0); in e1000_configure_tx()
2930 tx_ring->tail = adapter->hw.hw_addr + E1000_TDT(0); in e1000_configure_tx()
2932 writel(0, tx_ring->head); in e1000_configure_tx()
2934 e1000e_update_tdt_wa(tx_ring, 0); in e1000_configure_tx()
2936 writel(0, tx_ring->tail); in e1000_configure_tx()
3802 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_flush_tx_ring() local
3810 BUG_ON(tdt != tx_ring->next_to_use); in e1000_flush_tx_ring()
3811 tx_desc = E1000_TX_DESC(*tx_ring, tx_ring->next_to_use); in e1000_flush_tx_ring()
3812 tx_desc->buffer_addr = tx_ring->dma; in e1000_flush_tx_ring()
3818 tx_ring->next_to_use++; in e1000_flush_tx_ring()
3819 if (tx_ring->next_to_use == tx_ring->count) in e1000_flush_tx_ring()
3820 tx_ring->next_to_use = 0; in e1000_flush_tx_ring()
3821 ew32(TDT(0), tx_ring->next_to_use); in e1000_flush_tx_ring()
4307 e1000_clean_tx_ring(adapter->tx_ring); in e1000e_down()
4614 err = e1000e_setup_tx_resources(adapter->tx_ring); in e1000e_open()
4686 e1000e_free_tx_resources(adapter->tx_ring); in e1000e_open()
4728 e1000e_free_tx_resources(adapter->tx_ring); in e1000e_close()
5163 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_watchdog_task() local
5346 (e1000_desc_unused(tx_ring) + 1 < tx_ring->count)) in e1000_watchdog_task()
5421 static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb, in e1000_tso() argument
5464 i = tx_ring->next_to_use; in e1000_tso()
5465 context_desc = E1000_CONTEXT_DESC(*tx_ring, i); in e1000_tso()
5466 buffer_info = &tx_ring->buffer_info[i]; in e1000_tso()
5482 if (i == tx_ring->count) in e1000_tso()
5484 tx_ring->next_to_use = i; in e1000_tso()
5489 static bool e1000_tx_csum(struct e1000_ring *tx_ring, struct sk_buff *skb, in e1000_tx_csum() argument
5492 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_tx_csum()
5521 i = tx_ring->next_to_use; in e1000_tx_csum()
5522 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_csum()
5523 context_desc = E1000_CONTEXT_DESC(*tx_ring, i); in e1000_tx_csum()
5536 if (i == tx_ring->count) in e1000_tx_csum()
5538 tx_ring->next_to_use = i; in e1000_tx_csum()
5543 static int e1000_tx_map(struct e1000_ring *tx_ring, struct sk_buff *skb, in e1000_tx_map() argument
5547 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_tx_map()
5554 i = tx_ring->next_to_use; in e1000_tx_map()
5557 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_map()
5576 if (i == tx_ring->count) in e1000_tx_map()
5589 if (i == tx_ring->count) in e1000_tx_map()
5592 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_map()
5615 tx_ring->buffer_info[i].skb = skb; in e1000_tx_map()
5616 tx_ring->buffer_info[i].segs = segs; in e1000_tx_map()
5617 tx_ring->buffer_info[i].bytecount = bytecount; in e1000_tx_map()
5618 tx_ring->buffer_info[first].next_to_watch = i; in e1000_tx_map()
5630 i += tx_ring->count; in e1000_tx_map()
5632 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_map()
5633 e1000_put_txbuf(tx_ring, buffer_info, true); in e1000_tx_map()
5639 static void e1000_tx_queue(struct e1000_ring *tx_ring, int tx_flags, int count) in e1000_tx_queue() argument
5641 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_tx_queue()
5674 i = tx_ring->next_to_use; in e1000_tx_queue()
5677 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_queue()
5678 tx_desc = E1000_TX_DESC(*tx_ring, i); in e1000_tx_queue()
5685 if (i == tx_ring->count) in e1000_tx_queue()
5702 tx_ring->next_to_use = i; in e1000_tx_queue()
5743 static int __e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size) in __e1000_maybe_stop_tx() argument
5745 struct e1000_adapter *adapter = tx_ring->adapter; in __e1000_maybe_stop_tx()
5757 if (e1000_desc_unused(tx_ring) < size) in __e1000_maybe_stop_tx()
5766 static int e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size) in e1000_maybe_stop_tx() argument
5768 BUG_ON(size > tx_ring->count); in e1000_maybe_stop_tx()
5770 if (e1000_desc_unused(tx_ring) >= size) in e1000_maybe_stop_tx()
5772 return __e1000_maybe_stop_tx(tx_ring, size); in e1000_maybe_stop_tx()
5779 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_xmit_frame() local
5849 if (e1000_maybe_stop_tx(tx_ring, count + 2)) in e1000_xmit_frame()
5858 first = tx_ring->next_to_use; in e1000_xmit_frame()
5860 tso = e1000_tso(tx_ring, skb, protocol); in e1000_xmit_frame()
5868 else if (e1000_tx_csum(tx_ring, skb, protocol)) in e1000_xmit_frame()
5882 count = e1000_tx_map(tx_ring, skb, first, adapter->tx_fifo_limit, in e1000_xmit_frame()
5901 e1000_tx_queue(tx_ring, tx_flags, count); in e1000_xmit_frame()
5903 e1000_maybe_stop_tx(tx_ring, in e1000_xmit_frame()
5911 e1000e_update_tdt_wa(tx_ring, in e1000_xmit_frame()
5912 tx_ring->next_to_use); in e1000_xmit_frame()
5914 writel(tx_ring->next_to_use, tx_ring->tail); in e1000_xmit_frame()
5918 tx_ring->buffer_info[first].time_stamp = 0; in e1000_xmit_frame()
5919 tx_ring->next_to_use = first; in e1000_xmit_frame()
7379 kfree(adapter->tx_ring); in e1000_probe()
7452 kfree(adapter->tx_ring); in e1000_remove()