Lines Matching refs:tx_queue

919 	struct efx_tx_queue *tx_queue;  in efx_ef10_link_piobufs()  local
954 efx_for_each_channel_tx_queue(tx_queue, channel) { in efx_ef10_link_piobufs()
960 tx_queue->channel->channel - 1) * in efx_ef10_link_piobufs()
970 if (tx_queue->queue == nic_data->pio_write_vi_base) { in efx_ef10_link_piobufs()
979 tx_queue->queue); in efx_ef10_link_piobufs()
991 tx_queue->queue, index, rc); in efx_ef10_link_piobufs()
992 tx_queue->piobuf = NULL; in efx_ef10_link_piobufs()
994 tx_queue->piobuf = in efx_ef10_link_piobufs()
997 tx_queue->piobuf_offset = offset; in efx_ef10_link_piobufs()
1000 tx_queue->queue, index, in efx_ef10_link_piobufs()
1001 tx_queue->piobuf_offset, in efx_ef10_link_piobufs()
1002 tx_queue->piobuf); in efx_ef10_link_piobufs()
1027 struct efx_tx_queue *tx_queue; in efx_ef10_forget_old_piobufs() local
1031 efx_for_each_channel_tx_queue(tx_queue, channel) in efx_ef10_forget_old_piobufs()
1032 tx_queue->piobuf = NULL; in efx_ef10_forget_old_piobufs()
2301 static int efx_ef10_tx_probe(struct efx_tx_queue *tx_queue) in efx_ef10_tx_probe() argument
2303 return efx_nic_alloc_buffer(tx_queue->efx, &tx_queue->txd.buf, in efx_ef10_tx_probe()
2304 (tx_queue->ptr_mask + 1) * in efx_ef10_tx_probe()
2310 static inline void efx_ef10_push_tx_desc(struct efx_tx_queue *tx_queue, in efx_ef10_push_tx_desc() argument
2316 write_ptr = tx_queue->write_count & tx_queue->ptr_mask; in efx_ef10_push_tx_desc()
2319 efx_writeo_page(tx_queue->efx, &reg, in efx_ef10_push_tx_desc()
2320 ER_DZ_TX_DESC_UPD, tx_queue->queue); in efx_ef10_push_tx_desc()
2325 static int efx_ef10_tx_tso_desc(struct efx_tx_queue *tx_queue, in efx_ef10_tx_tso_desc() argument
2337 EFX_WARN_ON_ONCE_PARANOID(tx_queue->tso_version != 2); in efx_ef10_tx_tso_desc()
2363 buffer = efx_tx_queue_get_insert_buffer(tx_queue); in efx_ef10_tx_tso_desc()
2376 ++tx_queue->insert_count; in efx_ef10_tx_tso_desc()
2378 buffer = efx_tx_queue_get_insert_buffer(tx_queue); in efx_ef10_tx_tso_desc()
2390 ++tx_queue->insert_count; in efx_ef10_tx_tso_desc()
2409 static void efx_ef10_tx_init(struct efx_tx_queue *tx_queue) in efx_ef10_tx_init() argument
2413 bool csum_offload = tx_queue->queue & EFX_TXQ_TYPE_OFFLOAD; in efx_ef10_tx_init()
2414 size_t entries = tx_queue->txd.buf.len / EFX_BUF_SIZE; in efx_ef10_tx_init()
2415 struct efx_channel *channel = tx_queue->channel; in efx_ef10_tx_init()
2416 struct efx_nic *efx = tx_queue->efx; in efx_ef10_tx_init()
2431 tx_queue->timestamping = false; in efx_ef10_tx_init()
2444 !tx_queue->timestamping) { in efx_ef10_tx_init()
2450 MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_SIZE, tx_queue->ptr_mask + 1); in efx_ef10_tx_init()
2452 MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_LABEL, tx_queue->queue); in efx_ef10_tx_init()
2453 MCDI_SET_DWORD(inbuf, INIT_TXQ_IN_INSTANCE, tx_queue->queue); in efx_ef10_tx_init()
2457 dma_addr = tx_queue->txd.buf.dma_addr; in efx_ef10_tx_init()
2460 tx_queue->queue, entries, (u64)dma_addr); in efx_ef10_tx_init()
2479 tx_queue->timestamping); in efx_ef10_tx_init()
2502 tx_queue->buffer[0].flags = EFX_TX_BUF_OPTION; in efx_ef10_tx_init()
2503 tx_queue->insert_count = 1; in efx_ef10_tx_init()
2504 txd = efx_tx_desc(tx_queue, 0); in efx_ef10_tx_init()
2511 ESF_DZ_TX_TIMESTAMP, tx_queue->timestamping); in efx_ef10_tx_init()
2512 tx_queue->write_count = 1; in efx_ef10_tx_init()
2515 tx_queue->handle_tso = efx_ef10_tx_tso_desc; in efx_ef10_tx_init()
2516 tx_queue->tso_version = 2; in efx_ef10_tx_init()
2519 tx_queue->tso_version = 1; in efx_ef10_tx_init()
2523 efx_ef10_push_tx_desc(tx_queue, txd); in efx_ef10_tx_init()
2529 tx_queue->queue); in efx_ef10_tx_init()
2532 static void efx_ef10_tx_fini(struct efx_tx_queue *tx_queue) in efx_ef10_tx_fini() argument
2536 struct efx_nic *efx = tx_queue->efx; in efx_ef10_tx_fini()
2541 tx_queue->queue); in efx_ef10_tx_fini()
2556 static void efx_ef10_tx_remove(struct efx_tx_queue *tx_queue) in efx_ef10_tx_remove() argument
2558 efx_nic_free_buffer(tx_queue->efx, &tx_queue->txd.buf); in efx_ef10_tx_remove()
2562 static inline void efx_ef10_notify_tx_desc(struct efx_tx_queue *tx_queue) in efx_ef10_notify_tx_desc() argument
2567 write_ptr = tx_queue->write_count & tx_queue->ptr_mask; in efx_ef10_notify_tx_desc()
2569 efx_writed_page(tx_queue->efx, &reg, in efx_ef10_notify_tx_desc()
2570 ER_DZ_TX_DESC_UPD_DWORD, tx_queue->queue); in efx_ef10_notify_tx_desc()
2575 static unsigned int efx_ef10_tx_limit_len(struct efx_tx_queue *tx_queue, in efx_ef10_tx_limit_len() argument
2592 static void efx_ef10_tx_write(struct efx_tx_queue *tx_queue) in efx_ef10_tx_write() argument
2594 unsigned int old_write_count = tx_queue->write_count; in efx_ef10_tx_write()
2599 tx_queue->xmit_more_available = false; in efx_ef10_tx_write()
2600 if (unlikely(tx_queue->write_count == tx_queue->insert_count)) in efx_ef10_tx_write()
2604 write_ptr = tx_queue->write_count & tx_queue->ptr_mask; in efx_ef10_tx_write()
2605 buffer = &tx_queue->buffer[write_ptr]; in efx_ef10_tx_write()
2606 txd = efx_tx_desc(tx_queue, write_ptr); in efx_ef10_tx_write()
2607 ++tx_queue->write_count; in efx_ef10_tx_write()
2614 tx_queue->packet_write_count = tx_queue->write_count; in efx_ef10_tx_write()
2616 tx_queue->packet_write_count = tx_queue->write_count; in efx_ef10_tx_write()
2625 } while (tx_queue->write_count != tx_queue->insert_count); in efx_ef10_tx_write()
2629 if (efx_nic_may_push_tx_desc(tx_queue, old_write_count)) { in efx_ef10_tx_write()
2630 txd = efx_tx_desc(tx_queue, in efx_ef10_tx_write()
2631 old_write_count & tx_queue->ptr_mask); in efx_ef10_tx_write()
2632 efx_ef10_push_tx_desc(tx_queue, txd); in efx_ef10_tx_write()
2633 ++tx_queue->pushes; in efx_ef10_tx_write()
2635 efx_ef10_notify_tx_desc(tx_queue); in efx_ef10_tx_write()
3690 struct efx_tx_queue *tx_queue; in efx_ef10_handle_tx_event() local
3704 tx_queue = efx_channel_get_tx_queue(channel, in efx_ef10_handle_tx_event()
3707 if (!tx_queue->timestamping) { in efx_ef10_handle_tx_event()
3710 efx_xmit_done(tx_queue, tx_ev_desc_ptr & tx_queue->ptr_mask); in efx_ef10_handle_tx_event()
3731 if (tx_queue->completed_desc_ptr != tx_queue->ptr_mask) in efx_ef10_handle_tx_event()
3732 efx_xmit_done(tx_queue, tx_queue->completed_desc_ptr); in efx_ef10_handle_tx_event()
3736 tx_queue->completed_desc_ptr = in efx_ef10_handle_tx_event()
3737 tx_ev_desc_ptr & tx_queue->ptr_mask; in efx_ef10_handle_tx_event()
3742 tx_queue->completed_timestamp_minor = ts_part; in efx_ef10_handle_tx_event()
3747 tx_queue->completed_timestamp_major = ts_part; in efx_ef10_handle_tx_event()
3749 efx_xmit_done(tx_queue, tx_queue->completed_desc_ptr); in efx_ef10_handle_tx_event()
3750 tx_queue->completed_desc_ptr = tx_queue->ptr_mask; in efx_ef10_handle_tx_event()
3962 struct efx_tx_queue *tx_queue; in efx_ef10_fini_dmaq() local
3979 efx_for_each_channel_tx_queue(tx_queue, channel) in efx_ef10_fini_dmaq()
3980 efx_ef10_tx_fini(tx_queue); in efx_ef10_fini_dmaq()