Hi,

Looking at some bits in rtlwifi I came across a discrepancy between the
PCI and USB code.

Consider the following code:

In rtl_pci_tx():
        if (ieee80211_is_data_qos(fc)) {
                tid = rtl_get_tid(skb);
                if (sta) {
                        sta_entry = (struct rtl_sta_info *)sta->drv_priv;
                        seq_number = (le16_to_cpu(hdr->seq_ctrl) &
                                      IEEE80211_SCTL_SEQ) >> 4;
                        seq_number += 1;

                        if (!ieee80211_has_morefrags(hdr->frame_control))
                                sta_entry->tids[tid].seq_number = seq_number;
                }

In _rtl_usb_tx_preprocess():
        if (ieee80211_is_data_qos(fc)) {
                qc = ieee80211_get_qos_ctl(hdr);
                tid = qc[0] & IEEE80211_QOS_CTL_TID_MASK;
                seq_number = (le16_to_cpu(hdr->seq_ctrl) &
                             IEEE80211_SCTL_SEQ) >> 4;
                seq_number += 1;
                seq_number <<= 4;
        }
[snip]
        if (!ieee80211_has_morefrags(hdr->frame_control)) {
                if (qc)
                        mac->tids[tid].seq_number = seq_number;
        }

The seq_number is picked up from ieee80211_ops->ampdu_action()
which calls into rtl_tx_agg_start():
        tid_data = &sta_entry->tids[tid];

        RT_TRACE(rtlpriv, COMP_SEND, DBG_DMESG,
                 "on ra = %pM tid = %d seq:%d\n", sta->addr, tid,
                 tid_data->seq_number);

        *ssn = tid_data->seq_number;

My question here is why does the USB code shift seq_number << 4 while
the PCI code doesn't? I assume one of these is wrong, but which one?

Jes

Reply via email to