Lines Matching +full:num +full:- +full:rxq

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
5 * Copyright (C) 2024-2025 Intel Corporation
48 /* Set add_subframes > 0 to simulate an A-MSDU by
98 .desc = "RX non-QoS data",
106 /* non-QoS data frames do not require reordering.
167 .desc = "RX In-order packet, sn < nssn",
181 * and buffer->head_sn is updated to NSSN.
189 .desc = "RX In-order packet, sn == head_sn",
201 * 2. RX packet SN is equal to buffer->head_sn.
203 * and buffer->head_sn is incremented.
211 .desc = "RX In-order packet, IEEE80211_MAX_SN wrap around",
215 .nssn = IEEE80211_MAX_SN - 1,
223 * 2. RX SN == buffer->head_sn == IEEE80211_MAX_SN
225 * and buffer->head_sn is incremented correctly (wraps
234 .desc = "RX Out-of-order packet, pending packet in buffer",
248 * 2. RX packet SN = buffer->head_sn.
260 .desc = "RX Out-of-order packet, pending packet in buffer (wrap around)",
268 .head_sn = IEEE80211_MAX_SN - 1,
287 .desc = "RX Out-of-order packet, filling 1/2 holes in buffer, release RX packet",
313 .desc = "RX Out-of-order packet, filling 1/2 holes, release 2 packets",
341 .desc = "RX Out-of-order packet, filling 1/1 holes, no packets released",
360 * No packets can be released yet and buffer->head_sn
369 .desc = "RX In-order A-MSDU, last subframe",
387 /* 1. Reorder buffer contains a 2-sub frames A-MSDU
389 * 2. RX packet is the last SN=100 A-MSDU subframe
400 .desc = "RX In-order A-MSDU, not the last subframe",
418 /* 1. Reorder buffer contains a 2-sub frames A-MSDU
420 * 2. RX packet additional SN=100 A-MSDU subframe,
459 lockdep_assert_wiphy(mld->wiphy); in fake_iwl_mld_fw_sta_id_mask()
463 sta_mask |= BIT(mld_link_sta->fw_id); in fake_iwl_mld_fw_sta_id_mask()
471 (const void *)(test->param_value); in setup_mpdu_desc()
476 mpdu_desc->reorder_data |= in setup_mpdu_desc()
477 le32_encode_bits(param->rx_pkt.baid, in setup_mpdu_desc()
479 mpdu_desc->reorder_data |= in setup_mpdu_desc()
480 le32_encode_bits(param->rx_pkt.sn, in setup_mpdu_desc()
482 mpdu_desc->reorder_data |= in setup_mpdu_desc()
483 le32_encode_bits(param->rx_pkt.nssn, in setup_mpdu_desc()
485 if (param->rx_pkt.old_sn) in setup_mpdu_desc()
486 mpdu_desc->reorder_data |= in setup_mpdu_desc()
489 if (param->rx_pkt.dup) in setup_mpdu_desc()
490 mpdu_desc->status |= cpu_to_le32(IWL_RX_MPDU_STATUS_DUPLICATE); in setup_mpdu_desc()
492 if (param->rx_pkt.amsdu) { in setup_mpdu_desc()
493 mpdu_desc->mac_flags2 |= IWL_RX_MPDU_MFLG2_AMSDU; in setup_mpdu_desc()
494 if (param->rx_pkt.last_subframe) in setup_mpdu_desc()
495 mpdu_desc->amsdu_info |= in setup_mpdu_desc()
524 skb_set_mac_header(skb, skb->len); in alloc_and_setup_skb()
535 (const void *)(test->param_value); in setup_reorder_buffer()
536 struct iwl_mld_reorder_buffer *buffer = baid_data->reorder_buf; in setup_reorder_buffer()
537 struct iwl_mld_reorder_buf_entry *entries = baid_data->entries; in setup_reorder_buffer()
540 buffer->valid = param->reorder_buf_state.valid; in setup_reorder_buffer()
541 buffer->head_sn = param->reorder_buf_state.head_sn; in setup_reorder_buffer()
542 buffer->queue = QUEUE; in setup_reorder_buffer()
544 for (int i = 0; i < baid_data->buf_size; i++) in setup_reorder_buffer()
547 for (int i = 0; i < param->reorder_buf_state.num_entries; i++) { in setup_reorder_buffer()
548 u16 sn = param->reorder_buf_state.entries[i].sn; in setup_reorder_buffer()
549 int index = sn % baid_data->buf_size; in setup_reorder_buffer()
551 param->reorder_buf_state.entries[i].add_subframes; in setup_reorder_buffer()
552 /* create 1 skb per entry + additional skbs per num of in setup_reorder_buffer()
561 buffer->num_stored++; in setup_reorder_buffer()
571 struct iwl_mld *mld = test->priv; in setup_ba_data()
573 (const void *)(test->param_value); in setup_ba_data()
576 u32 reorder_buf_size = BA_WINDOW_SIZE * sizeof(baid_data->entries[0]); in setup_ba_data()
577 u8 baid = param->reorder_buf_state.baid; in setup_ba_data()
579 /* Assuming only 1 RXQ */ in setup_ba_data()
583 baid_data->baid = baid; in setup_ba_data()
584 baid_data->tid = param->rx_pkt.tid; in setup_ba_data()
585 baid_data->buf_size = BA_WINDOW_SIZE; in setup_ba_data()
587 wiphy_lock(mld->wiphy); in setup_ba_data()
588 baid_data->sta_mask = iwl_mld_fw_sta_id_mask(mld, sta); in setup_ba_data()
589 wiphy_unlock(mld->wiphy); in setup_ba_data()
591 baid_data->entries_per_queue = BA_WINDOW_SIZE; in setup_ba_data()
595 KUNIT_EXPECT_NULL(test, rcu_access_pointer(mld->fw_id_to_ba[baid])); in setup_ba_data()
596 rcu_assign_pointer(mld->fw_id_to_ba[baid], baid_data); in setup_ba_data()
603 struct iwl_mld *mld = test->priv; in test_reorder_buffer()
605 (const void *)(test->param_value); in test_reorder_buffer()
612 u16 skb_release_order_count = param->expected.skb_release_order_count; in test_reorder_buffer()
624 sta = iwlmld_kunit_setup_sta(vif, IEEE80211_STA_AUTHORIZED, -1); in test_reorder_buffer()
627 skb = alloc_and_setup_skb(param->rx_pkt.fc, param->rx_pkt.sn, in test_reorder_buffer()
628 param->rx_pkt.tid, param->rx_pkt.multicast); in test_reorder_buffer()
636 KUNIT_ASSERT_EQ(test, reorder_res, param->expected.reorder_res); in test_reorder_buffer()
637 KUNIT_ASSERT_EQ(test, buffer->num_stored, param->expected.num_stored); in test_reorder_buffer()
638 KUNIT_ASSERT_EQ(test, buffer->head_sn, param->expected.head_sn); in test_reorder_buffer()
645 KUNIT_ASSERT_EQ(test, le16_to_cpu(hdr->seq_ctrl), in test_reorder_buffer()
646 param->expected.skb_release_order[skb_idx]); in test_reorder_buffer()
658 .name = "iwlmld-reorder-buffer",