Lines Matching refs:rx_queue

465 efx_farch_build_rx_desc(struct efx_rx_queue *rx_queue, unsigned index)
470 rxd = efx_rx_desc(rx_queue, index);
471 rx_buf = efx_rx_buffer(rx_queue, index);
475 rx_queue->efx->type->rx_buffer_padding,
483 void efx_farch_rx_write(struct efx_rx_queue *rx_queue)
485 struct efx_nic *efx = rx_queue->efx;
489 while (rx_queue->notified_count != rx_queue->added_count) {
491 rx_queue,
492 rx_queue->notified_count & rx_queue->ptr_mask);
493 ++rx_queue->notified_count;
497 write_ptr = rx_queue->added_count & rx_queue->ptr_mask;
500 efx_rx_queue_index(rx_queue));
503 int efx_farch_rx_probe(struct efx_rx_queue *rx_queue)
505 struct efx_nic *efx = rx_queue->efx;
508 entries = rx_queue->ptr_mask + 1;
509 return efx_alloc_special_buffer(efx, &rx_queue->rxd,
513 void efx_farch_rx_init(struct efx_rx_queue *rx_queue)
516 struct efx_nic *efx = rx_queue->efx;
524 efx_rx_queue_index(rx_queue), rx_queue->rxd.index,
525 rx_queue->rxd.index + rx_queue->rxd.entries - 1);
527 rx_queue->scatter_n = 0;
530 efx_init_special_buffer(efx, &rx_queue->rxd);
536 FRF_AZ_RX_DESCQ_BUF_BASE_ID, rx_queue->rxd.index,
538 efx_rx_queue_channel(rx_queue)->channel,
541 efx_rx_queue_index(rx_queue),
543 __ffs(rx_queue->rxd.entries),
548 efx_rx_queue_index(rx_queue));
551 static void efx_farch_flush_rx_queue(struct efx_rx_queue *rx_queue)
553 struct efx_nic *efx = rx_queue->efx;
559 efx_rx_queue_index(rx_queue));
563 void efx_farch_rx_fini(struct efx_rx_queue *rx_queue)
566 struct efx_nic *efx = rx_queue->efx;
571 efx_rx_queue_index(rx_queue));
574 efx_fini_special_buffer(efx, &rx_queue->rxd);
578 void efx_farch_rx_remove(struct efx_rx_queue *rx_queue)
580 efx_free_special_buffer(rx_queue->efx, &rx_queue->rxd);
650 struct efx_rx_queue *rx_queue;
658 efx_for_each_channel_rx_queue(rx_queue, channel) {
659 rx_queue->flush_pending = true;
680 efx_for_each_channel_rx_queue(rx_queue, channel) {
685 if (rx_queue->flush_pending) {
686 rx_queue->flush_pending = false;
689 efx_farch_flush_rx_queue(rx_queue);
720 struct efx_rx_queue *rx_queue;
733 efx_for_each_channel_rx_queue(rx_queue, channel)
734 efx_farch_rx_fini(rx_queue);
863 static u16 efx_farch_handle_rx_not_ok(struct efx_rx_queue *rx_queue,
866 struct efx_channel *channel = efx_rx_queue_channel(rx_queue);
867 struct efx_nic *efx = rx_queue->efx;
911 efx_rx_queue_index(rx_queue), EFX_QWORD_VAL(*event),
941 efx_farch_handle_rx_bad_index(struct efx_rx_queue *rx_queue, unsigned index)
943 struct efx_channel *channel = efx_rx_queue_channel(rx_queue);
944 struct efx_nic *efx = rx_queue->efx;
947 if (rx_queue->scatter_n &&
948 index == ((rx_queue->removed_count + rx_queue->scatter_n - 1) &
949 rx_queue->ptr_mask)) {
954 expected = rx_queue->removed_count & rx_queue->ptr_mask;
955 dropped = (index - expected) & rx_queue->ptr_mask;
979 struct efx_rx_queue *rx_queue;
990 rx_queue = efx_channel_get_rx_queue(channel);
993 expected_ptr = ((rx_queue->removed_count + rx_queue->scatter_n) &
994 rx_queue->ptr_mask);
998 unlikely(rx_ev_sop != (rx_queue->scatter_n == 0))) {
1000 !efx_farch_handle_rx_bad_index(rx_queue, rx_ev_desc_ptr))
1004 if (rx_queue->scatter_n) {
1006 rx_queue,
1007 rx_queue->removed_count & rx_queue->ptr_mask,
1008 rx_queue->scatter_n, 0, EFX_RX_PKT_DISCARD);
1009 rx_queue->removed_count += rx_queue->scatter_n;
1010 rx_queue->scatter_n = 0;
1020 rx_queue,
1021 rx_queue->removed_count & rx_queue->ptr_mask,
1023 ++rx_queue->removed_count;
1028 ++rx_queue->scatter_n;
1053 flags = efx_farch_handle_rx_not_ok(rx_queue, event);
1071 efx_siena_rx_packet(rx_queue,
1072 rx_queue->removed_count & rx_queue->ptr_mask,
1073 rx_queue->scatter_n, rx_ev_byte_cnt, flags);
1074 rx_queue->removed_count += rx_queue->scatter_n;
1075 rx_queue->scatter_n = 0;
1107 struct efx_rx_queue *rx_queue;
1118 rx_queue = efx_channel_get_rx_queue(channel);
1123 rx_queue->flush_pending = true;
1126 efx_farch_magic_event(efx_rx_queue_channel(rx_queue),
1127 EFX_CHANNEL_MAGIC_RX_DRAIN(rx_queue));
1149 struct efx_rx_queue *rx_queue =
1159 } else if (rx_queue && magic == EFX_CHANNEL_MAGIC_FILL(rx_queue)) {
1163 efx_siena_fast_push_rx_descriptors(rx_queue, true);
1164 } else if (rx_queue && magic == EFX_CHANNEL_MAGIC_RX_DRAIN(rx_queue)) {
1407 void efx_farch_rx_defer_refill(struct efx_rx_queue *rx_queue)
1409 efx_farch_magic_event(efx_rx_queue_channel(rx_queue),
1410 EFX_CHANNEL_MAGIC_FILL(rx_queue));