]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
staging: r8188eu: use ieee80211 macro for sequence number
authorMartin Kaiser <martin@kaiser.cx>
Sun, 27 Mar 2022 18:09:43 +0000 (20:09 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 4 Apr 2022 05:33:47 +0000 (07:33 +0200)
Use the IEEE80211_SEQ_TO_SN macro in function validate_recv_frame to get
the sequence number of an incoming frame.

Map the incoming rx bytes to a struct ieee80211_hdr. Replace the fc
variable with struct ieee80211_hdr's frame control component.

The IEEE80211_SEQ_TO_SN macro takes the sequence control field of an
ieee80211 header and extracts the sequence number. The macro's input
parameter must be in host endianness, the sequence number in the 80211
header is little-endian, we have to convert it to host endianness.

Remove the local GetSequence macro, it is not used any more.

Signed-off-by: Martin Kaiser <martin@kaiser.cx>
Link: https://lore.kernel.org/r/20220327180944.712545-9-martin@kaiser.cx
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/r8188eu/core/rtw_recv.c
drivers/staging/r8188eu/include/wifi.h

index bb67abd3ed99a0d0ee7b8bdd1088f93091bcff64..415747da7e3b26069051a2dcf78185c8e0339051 100644 (file)
@@ -1063,7 +1063,7 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv
        u8 bDumpRxPkt;
        struct rx_pkt_attrib *pattrib = &precv_frame->attrib;
        u8 *ptr = precv_frame->rx_data;
-       __le16 fc = *(__le16 *)ptr;
+       struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)precv_frame->rx_data;
        struct mlme_ext_priv *pmlmeext = &adapter->mlmeextpriv;
 
        if (pmlmeext->sitesurvey_res.state == SCAN_PROCESS) {
@@ -1072,31 +1072,31 @@ static int validate_recv_frame(struct adapter *adapter, struct recv_frame *precv
                        pmlmeext->channel_set[ch_set_idx].rx_count++;
        }
 
-       if ((fc & cpu_to_le16(IEEE80211_FCTL_VERS)) != 0)
+       if ((hdr->frame_control & cpu_to_le16(IEEE80211_FCTL_VERS)) != 0)
                return _FAIL;
 
        pattrib->to_fr_ds = get_tofr_ds(ptr);
 
        pattrib->frag_num = GetFragNum(ptr);
-       pattrib->seq_num = GetSequence(ptr);
+       pattrib->seq_num = IEEE80211_SEQ_TO_SN(le16_to_cpu(hdr->seq_ctrl));
 
-       pattrib->pw_save = ieee80211_has_pm(fc);
-       pattrib->mfrag = ieee80211_has_morefrags(fc);
-       pattrib->mdata = ieee80211_has_moredata(fc);
-       pattrib->privacy = ieee80211_has_protected(fc);
-       pattrib->order = ieee80211_has_order(fc);
+       pattrib->pw_save = ieee80211_has_pm(hdr->frame_control);
+       pattrib->mfrag = ieee80211_has_morefrags(hdr->frame_control);
+       pattrib->mdata = ieee80211_has_moredata(hdr->frame_control);
+       pattrib->privacy = ieee80211_has_protected(hdr->frame_control);
+       pattrib->order = ieee80211_has_order(hdr->frame_control);
 
        /* Dump rx packets */
        GetHalDefVar8188EUsb(adapter, HAL_DEF_DBG_DUMP_RXPKT, &bDumpRxPkt);
 
        /* We return _SUCCESS only for data frames. */
-       if (ieee80211_is_mgmt(fc))
+       if (ieee80211_is_mgmt(hdr->frame_control))
                validate_recv_mgnt_frame(adapter, precv_frame);
-       else if (ieee80211_is_ctl(fc))
+       else if (ieee80211_is_ctl(hdr->frame_control))
                validate_recv_ctrl_frame(adapter, precv_frame);
-       else if (ieee80211_is_data(fc)) {
+       else if (ieee80211_is_data(hdr->frame_control)) {
                rtw_led_control(adapter, LED_CTL_RX);
-               pattrib->qos = ieee80211_is_data_qos(fc);
+               pattrib->qos = ieee80211_is_data_qos(hdr->frame_control);
                retval = validate_recv_data_frame(adapter, precv_frame);
                if (retval == _FAIL) {
                        struct recv_priv *precvpriv = &adapter->recvpriv;
index 24d404f0f5f4293611772231e7ad58765c53b109..dbda1880c45a41171cee3eecdf5459e2fc1c81ec 100644 (file)
@@ -189,9 +189,6 @@ enum WIFI_REG_DOMAIN {
                *(__le16 *)(pbuf) |= cpu_to_le16(type); \
        } while (0)
 
-#define GetSequence(pbuf)                      \
-       (le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) >> 4)
-
 #define GetFragNum(pbuf)                       \
        (le16_to_cpu(*(__le16 *)((size_t)(pbuf) + 22)) & 0x0f)