Lines Matching refs:tx_ring

218 	struct e1000_ring *tx_ring = adapter->tx_ring;  in e1000e_dump()  local
262 buffer_info = &tx_ring->buffer_info[tx_ring->next_to_clean]; in e1000e_dump()
264 0, tx_ring->next_to_use, tx_ring->next_to_clean, in e1000e_dump()
306 for (i = 0; tx_ring->desc && (i < tx_ring->count); i++) { in e1000e_dump()
308 tx_desc = E1000_TX_DESC(*tx_ring, i); in e1000e_dump()
309 buffer_info = &tx_ring->buffer_info[i]; in e1000e_dump()
311 if (i == tx_ring->next_to_use && i == tx_ring->next_to_clean) in e1000e_dump()
313 else if (i == tx_ring->next_to_use) in e1000e_dump()
315 else if (i == tx_ring->next_to_clean) in e1000e_dump()
640 static void e1000e_update_tdt_wa(struct e1000_ring *tx_ring, unsigned int i) in e1000e_update_tdt_wa() argument
642 struct e1000_adapter *adapter = tx_ring->adapter; in e1000e_update_tdt_wa()
646 writel(i, tx_ring->tail); in e1000e_update_tdt_wa()
648 if (unlikely(!ret_val && (i != readl(tx_ring->tail)))) { in e1000e_update_tdt_wa()
1072 static void e1000_put_txbuf(struct e1000_ring *tx_ring, in e1000_put_txbuf() argument
1075 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_put_txbuf()
1099 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_print_hw_hang() local
1100 unsigned int i = tx_ring->next_to_clean; in e1000_print_hw_hang()
1101 unsigned int eop = tx_ring->buffer_info[i].next_to_watch; in e1000_print_hw_hang()
1102 struct e1000_tx_desc *eop_desc = E1000_TX_DESC(*tx_ring, eop); in e1000_print_hw_hang()
1158 readl(tx_ring->head), readl(tx_ring->tail), tx_ring->next_to_use, in e1000_print_hw_hang()
1159 tx_ring->next_to_clean, tx_ring->buffer_info[eop].time_stamp, in e1000_print_hw_hang()
1215 static bool e1000_clean_tx_irq(struct e1000_ring *tx_ring) in e1000_clean_tx_irq() argument
1217 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_clean_tx_irq()
1227 i = tx_ring->next_to_clean; in e1000_clean_tx_irq()
1228 eop = tx_ring->buffer_info[i].next_to_watch; in e1000_clean_tx_irq()
1229 eop_desc = E1000_TX_DESC(*tx_ring, eop); in e1000_clean_tx_irq()
1232 (count < tx_ring->count)) { in e1000_clean_tx_irq()
1237 tx_desc = E1000_TX_DESC(*tx_ring, i); in e1000_clean_tx_irq()
1238 buffer_info = &tx_ring->buffer_info[i]; in e1000_clean_tx_irq()
1250 e1000_put_txbuf(tx_ring, buffer_info); in e1000_clean_tx_irq()
1254 if (i == tx_ring->count) in e1000_clean_tx_irq()
1258 if (i == tx_ring->next_to_use) in e1000_clean_tx_irq()
1260 eop = tx_ring->buffer_info[i].next_to_watch; in e1000_clean_tx_irq()
1261 eop_desc = E1000_TX_DESC(*tx_ring, eop); in e1000_clean_tx_irq()
1264 tx_ring->next_to_clean = i; in e1000_clean_tx_irq()
1270 e1000_desc_unused(tx_ring) >= TX_WAKE_THRESHOLD) { in e1000_clean_tx_irq()
1288 if (tx_ring->buffer_info[i].time_stamp && in e1000_clean_tx_irq()
1289 time_after(jiffies, tx_ring->buffer_info[i].time_stamp in e1000_clean_tx_irq()
1298 return count < tx_ring->count; in e1000_clean_tx_irq()
1946 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_intr_msix_tx() local
1951 if (!e1000_clean_tx_irq(tx_ring)) in e1000_intr_msix_tx()
1953 ew32(ICS, tx_ring->ims_val); in e1000_intr_msix_tx()
1991 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_configure_msix() local
2016 tx_ring->ims_val = E1000_IMS_TXQ0; in e1000_configure_msix()
2018 if (tx_ring->itr_val) in e1000_configure_msix()
2019 writel(1000000000 / (tx_ring->itr_val * 256), in e1000_configure_msix()
2020 tx_ring->itr_register); in e1000_configure_msix()
2022 writel(1, tx_ring->itr_register); in e1000_configure_msix()
2023 adapter->eiac_mask |= tx_ring->ims_val; in e1000_configure_msix()
2146 snprintf(adapter->tx_ring->name, in e1000_request_msix()
2147 sizeof(adapter->tx_ring->name) - 1, in e1000_request_msix()
2150 memcpy(adapter->tx_ring->name, netdev->name, IFNAMSIZ); in e1000_request_msix()
2152 e1000_intr_msix_tx, 0, adapter->tx_ring->name, in e1000_request_msix()
2156 adapter->tx_ring->itr_register = adapter->hw.hw_addr + in e1000_request_msix()
2158 adapter->tx_ring->itr_val = adapter->itr; in e1000_request_msix()
2345 int e1000e_setup_tx_resources(struct e1000_ring *tx_ring) in e1000e_setup_tx_resources() argument
2347 struct e1000_adapter *adapter = tx_ring->adapter; in e1000e_setup_tx_resources()
2350 size = sizeof(struct e1000_buffer) * tx_ring->count; in e1000e_setup_tx_resources()
2351 tx_ring->buffer_info = vzalloc(size); in e1000e_setup_tx_resources()
2352 if (!tx_ring->buffer_info) in e1000e_setup_tx_resources()
2356 tx_ring->size = tx_ring->count * sizeof(struct e1000_tx_desc); in e1000e_setup_tx_resources()
2357 tx_ring->size = ALIGN(tx_ring->size, 4096); in e1000e_setup_tx_resources()
2359 err = e1000_alloc_ring_dma(adapter, tx_ring); in e1000e_setup_tx_resources()
2363 tx_ring->next_to_use = 0; in e1000e_setup_tx_resources()
2364 tx_ring->next_to_clean = 0; in e1000e_setup_tx_resources()
2368 vfree(tx_ring->buffer_info); in e1000e_setup_tx_resources()
2430 static void e1000_clean_tx_ring(struct e1000_ring *tx_ring) in e1000_clean_tx_ring() argument
2432 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_clean_tx_ring()
2437 for (i = 0; i < tx_ring->count; i++) { in e1000_clean_tx_ring()
2438 buffer_info = &tx_ring->buffer_info[i]; in e1000_clean_tx_ring()
2439 e1000_put_txbuf(tx_ring, buffer_info); in e1000_clean_tx_ring()
2443 size = sizeof(struct e1000_buffer) * tx_ring->count; in e1000_clean_tx_ring()
2444 memset(tx_ring->buffer_info, 0, size); in e1000_clean_tx_ring()
2446 memset(tx_ring->desc, 0, tx_ring->size); in e1000_clean_tx_ring()
2448 tx_ring->next_to_use = 0; in e1000_clean_tx_ring()
2449 tx_ring->next_to_clean = 0; in e1000_clean_tx_ring()
2451 writel(0, tx_ring->head); in e1000_clean_tx_ring()
2453 e1000e_update_tdt_wa(tx_ring, 0); in e1000_clean_tx_ring()
2455 writel(0, tx_ring->tail); in e1000_clean_tx_ring()
2464 void e1000e_free_tx_resources(struct e1000_ring *tx_ring) in e1000e_free_tx_resources() argument
2466 struct e1000_adapter *adapter = tx_ring->adapter; in e1000e_free_tx_resources()
2469 e1000_clean_tx_ring(tx_ring); in e1000e_free_tx_resources()
2471 vfree(tx_ring->buffer_info); in e1000e_free_tx_resources()
2472 tx_ring->buffer_info = NULL; in e1000e_free_tx_resources()
2474 dma_free_coherent(&pdev->dev, tx_ring->size, tx_ring->desc, in e1000e_free_tx_resources()
2475 tx_ring->dma); in e1000e_free_tx_resources()
2476 tx_ring->desc = NULL; in e1000e_free_tx_resources()
2660 adapter->tx_ring = kzalloc(size, GFP_KERNEL); in e1000_alloc_queues()
2661 if (!adapter->tx_ring) in e1000_alloc_queues()
2663 adapter->tx_ring->count = adapter->tx_ring_count; in e1000_alloc_queues()
2664 adapter->tx_ring->adapter = adapter; in e1000_alloc_queues()
2676 kfree(adapter->tx_ring); in e1000_alloc_queues()
2696 (adapter->rx_ring->ims_val & adapter->tx_ring->ims_val)) in e1000e_poll()
2697 tx_cleaned = e1000_clean_tx_irq(adapter->tx_ring); in e1000e_poll()
2942 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_configure_tx() local
2947 tdba = tx_ring->dma; in e1000_configure_tx()
2948 tdlen = tx_ring->count * sizeof(struct e1000_tx_desc); in e1000_configure_tx()
2954 tx_ring->head = adapter->hw.hw_addr + E1000_TDH(0); in e1000_configure_tx()
2955 tx_ring->tail = adapter->hw.hw_addr + E1000_TDT(0); in e1000_configure_tx()
4118 e1000_clean_tx_ring(adapter->tx_ring); in e1000e_down()
4382 err = e1000e_setup_tx_resources(adapter->tx_ring); in e1000_open()
4458 e1000e_free_tx_resources(adapter->tx_ring); in e1000_open()
4500 e1000e_free_tx_resources(adapter->tx_ring); in e1000_close()
4950 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_watchdog_task() local
5115 (e1000_desc_unused(tx_ring) + 1 < tx_ring->count)) in e1000_watchdog_task()
5189 static int e1000_tso(struct e1000_ring *tx_ring, struct sk_buff *skb, in e1000_tso() argument
5232 i = tx_ring->next_to_use; in e1000_tso()
5233 context_desc = E1000_CONTEXT_DESC(*tx_ring, i); in e1000_tso()
5234 buffer_info = &tx_ring->buffer_info[i]; in e1000_tso()
5250 if (i == tx_ring->count) in e1000_tso()
5252 tx_ring->next_to_use = i; in e1000_tso()
5257 static bool e1000_tx_csum(struct e1000_ring *tx_ring, struct sk_buff *skb, in e1000_tx_csum() argument
5260 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_tx_csum()
5289 i = tx_ring->next_to_use; in e1000_tx_csum()
5290 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_csum()
5291 context_desc = E1000_CONTEXT_DESC(*tx_ring, i); in e1000_tx_csum()
5304 if (i == tx_ring->count) in e1000_tx_csum()
5306 tx_ring->next_to_use = i; in e1000_tx_csum()
5311 static int e1000_tx_map(struct e1000_ring *tx_ring, struct sk_buff *skb, in e1000_tx_map() argument
5315 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_tx_map()
5322 i = tx_ring->next_to_use; in e1000_tx_map()
5325 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_map()
5344 if (i == tx_ring->count) in e1000_tx_map()
5358 if (i == tx_ring->count) in e1000_tx_map()
5361 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_map()
5384 tx_ring->buffer_info[i].skb = skb; in e1000_tx_map()
5385 tx_ring->buffer_info[i].segs = segs; in e1000_tx_map()
5386 tx_ring->buffer_info[i].bytecount = bytecount; in e1000_tx_map()
5387 tx_ring->buffer_info[first].next_to_watch = i; in e1000_tx_map()
5399 i += tx_ring->count; in e1000_tx_map()
5401 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_map()
5402 e1000_put_txbuf(tx_ring, buffer_info); in e1000_tx_map()
5408 static void e1000_tx_queue(struct e1000_ring *tx_ring, int tx_flags, int count) in e1000_tx_queue() argument
5410 struct e1000_adapter *adapter = tx_ring->adapter; in e1000_tx_queue()
5443 i = tx_ring->next_to_use; in e1000_tx_queue()
5446 buffer_info = &tx_ring->buffer_info[i]; in e1000_tx_queue()
5447 tx_desc = E1000_TX_DESC(*tx_ring, i); in e1000_tx_queue()
5454 if (i == tx_ring->count) in e1000_tx_queue()
5471 tx_ring->next_to_use = i; in e1000_tx_queue()
5512 static int __e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size) in __e1000_maybe_stop_tx() argument
5514 struct e1000_adapter *adapter = tx_ring->adapter; in __e1000_maybe_stop_tx()
5526 if (e1000_desc_unused(tx_ring) < size) in __e1000_maybe_stop_tx()
5535 static int e1000_maybe_stop_tx(struct e1000_ring *tx_ring, int size) in e1000_maybe_stop_tx() argument
5537 BUG_ON(size > tx_ring->count); in e1000_maybe_stop_tx()
5539 if (e1000_desc_unused(tx_ring) >= size) in e1000_maybe_stop_tx()
5541 return __e1000_maybe_stop_tx(tx_ring, size); in e1000_maybe_stop_tx()
5548 struct e1000_ring *tx_ring = adapter->tx_ring; in e1000_xmit_frame() local
5618 if (e1000_maybe_stop_tx(tx_ring, count + 2)) in e1000_xmit_frame()
5627 first = tx_ring->next_to_use; in e1000_xmit_frame()
5629 tso = e1000_tso(tx_ring, skb, protocol); in e1000_xmit_frame()
5637 else if (e1000_tx_csum(tx_ring, skb, protocol)) in e1000_xmit_frame()
5651 count = e1000_tx_map(tx_ring, skb, first, adapter->tx_fifo_limit, in e1000_xmit_frame()
5667 e1000_tx_queue(tx_ring, tx_flags, count); in e1000_xmit_frame()
5669 e1000_maybe_stop_tx(tx_ring, in e1000_xmit_frame()
5677 e1000e_update_tdt_wa(tx_ring, in e1000_xmit_frame()
5678 tx_ring->next_to_use); in e1000_xmit_frame()
5680 writel(tx_ring->next_to_use, tx_ring->tail); in e1000_xmit_frame()
5690 tx_ring->buffer_info[first].time_stamp = 0; in e1000_xmit_frame()
5691 tx_ring->next_to_use = first; in e1000_xmit_frame()
7069 kfree(adapter->tx_ring); in e1000_probe()
7141 kfree(adapter->tx_ring); in e1000_remove()