Lines Matching refs:rx_queue

464 efx_farch_build_rx_desc(struct efx_rx_queue *rx_queue, unsigned index)
469 rxd = efx_rx_desc(rx_queue, index);
470 rx_buf = efx_rx_buffer(rx_queue, index);
474 rx_queue->efx->type->rx_buffer_padding,
482 void efx_farch_rx_write(struct efx_rx_queue *rx_queue)
484 struct efx_nic *efx = rx_queue->efx;
488 while (rx_queue->notified_count != rx_queue->added_count) {
490 rx_queue,
491 rx_queue->notified_count & rx_queue->ptr_mask);
492 ++rx_queue->notified_count;
496 write_ptr = rx_queue->added_count & rx_queue->ptr_mask;
499 efx_rx_queue_index(rx_queue));
502 int efx_farch_rx_probe(struct efx_rx_queue *rx_queue)
504 struct efx_nic *efx = rx_queue->efx;
507 entries = rx_queue->ptr_mask + 1;
508 return efx_alloc_special_buffer(efx, &rx_queue->rxd,
512 void efx_farch_rx_init(struct efx_rx_queue *rx_queue)
515 struct efx_nic *efx = rx_queue->efx;
523 efx_rx_queue_index(rx_queue), rx_queue->rxd.index,
524 rx_queue->rxd.index + rx_queue->rxd.entries - 1);
526 rx_queue->scatter_n = 0;
529 efx_init_special_buffer(efx, &rx_queue->rxd);
535 FRF_AZ_RX_DESCQ_BUF_BASE_ID, rx_queue->rxd.index,
537 efx_rx_queue_channel(rx_queue)->channel,
540 efx_rx_queue_index(rx_queue),
542 __ffs(rx_queue->rxd.entries),
547 efx_rx_queue_index(rx_queue));
550 static void efx_farch_flush_rx_queue(struct efx_rx_queue *rx_queue)
552 struct efx_nic *efx = rx_queue->efx;
558 efx_rx_queue_index(rx_queue));
562 void efx_farch_rx_fini(struct efx_rx_queue *rx_queue)
565 struct efx_nic *efx = rx_queue->efx;
570 efx_rx_queue_index(rx_queue));
573 efx_fini_special_buffer(efx, &rx_queue->rxd);
577 void efx_farch_rx_remove(struct efx_rx_queue *rx_queue)
579 efx_free_special_buffer(rx_queue->efx, &rx_queue->rxd);
649 struct efx_rx_queue *rx_queue;
657 efx_for_each_channel_rx_queue(rx_queue, channel) {
658 rx_queue->flush_pending = true;
679 efx_for_each_channel_rx_queue(rx_queue, channel) {
684 if (rx_queue->flush_pending) {
685 rx_queue->flush_pending = false;
688 efx_farch_flush_rx_queue(rx_queue);
719 struct efx_rx_queue *rx_queue;
732 efx_for_each_channel_rx_queue(rx_queue, channel)
733 efx_farch_rx_fini(rx_queue);
861 static u16 efx_farch_handle_rx_not_ok(struct efx_rx_queue *rx_queue,
864 struct efx_channel *channel = efx_rx_queue_channel(rx_queue);
865 struct efx_nic *efx = rx_queue->efx;
909 efx_rx_queue_index(rx_queue), EFX_QWORD_VAL(*event),
939 efx_farch_handle_rx_bad_index(struct efx_rx_queue *rx_queue, unsigned index)
941 struct efx_channel *channel = efx_rx_queue_channel(rx_queue);
942 struct efx_nic *efx = rx_queue->efx;
945 if (rx_queue->scatter_n &&
946 index == ((rx_queue->removed_count + rx_queue->scatter_n - 1) &
947 rx_queue->ptr_mask)) {
952 expected = rx_queue->removed_count & rx_queue->ptr_mask;
953 dropped = (index - expected) & rx_queue->ptr_mask;
977 struct efx_rx_queue *rx_queue;
988 rx_queue = efx_channel_get_rx_queue(channel);
991 expected_ptr = ((rx_queue->removed_count + rx_queue->scatter_n) &
992 rx_queue->ptr_mask);
996 unlikely(rx_ev_sop != (rx_queue->scatter_n == 0))) {
998 !efx_farch_handle_rx_bad_index(rx_queue, rx_ev_desc_ptr))
1002 if (rx_queue->scatter_n) {
1004 rx_queue,
1005 rx_queue->removed_count & rx_queue->ptr_mask,
1006 rx_queue->scatter_n, 0, EFX_RX_PKT_DISCARD);
1007 rx_queue->removed_count += rx_queue->scatter_n;
1008 rx_queue->scatter_n = 0;
1018 rx_queue,
1019 rx_queue->removed_count & rx_queue->ptr_mask,
1021 ++rx_queue->removed_count;
1026 ++rx_queue->scatter_n;
1051 flags = efx_farch_handle_rx_not_ok(rx_queue, event);
1069 efx_rx_packet(rx_queue,
1070 rx_queue->removed_count & rx_queue->ptr_mask,
1071 rx_queue->scatter_n, rx_ev_byte_cnt, flags);
1072 rx_queue->removed_count += rx_queue->scatter_n;
1073 rx_queue->scatter_n = 0;
1105 struct efx_rx_queue *rx_queue;
1116 rx_queue = efx_channel_get_rx_queue(channel);
1121 rx_queue->flush_pending = true;
1124 efx_farch_magic_event(efx_rx_queue_channel(rx_queue),
1125 EFX_CHANNEL_MAGIC_RX_DRAIN(rx_queue));
1147 struct efx_rx_queue *rx_queue =
1157 } else if (rx_queue && magic == EFX_CHANNEL_MAGIC_FILL(rx_queue)) {
1161 efx_fast_push_rx_descriptors(rx_queue, true);
1162 } else if (rx_queue && magic == EFX_CHANNEL_MAGIC_RX_DRAIN(rx_queue)) {
1405 void efx_farch_rx_defer_refill(struct efx_rx_queue *rx_queue)
1407 efx_farch_magic_event(efx_rx_queue_channel(rx_queue),
1408 EFX_CHANNEL_MAGIC_FILL(rx_queue));