staging: r8188eu: replace mlme_handler with function pointer
authorMartin Kaiser <martin@kaiser.cx>
Sun, 17 Apr 2022 10:22:19 +0000 (12:22 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 20 Apr 2022 16:37:17 +0000 (18:37 +0200)
mlme_sta_tbl is an array of struct mlme_handler. mlme_handler's num and
str components are not used. The code in mgt_dispatcher uses the subtype
number of the incoming frame to select the array entry for compiling the
repsonse.

We can remove struct mlme_handler and make mlme_sta_tbl an array of
function pointers.

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

index a234ffb..f7d37a2 100644 (file)
 #include "../include/rtl8188e_xmit.h"
 #include "../include/rtl8188e_dm.h"
 
-static struct mlme_handler mlme_sta_tbl[] = {
-       {WIFI_ASSOCREQ,         "OnAssocReq",   &OnAssocReq},
-       {WIFI_ASSOCRSP,         "OnAssocRsp",   &OnAssocRsp},
-       {WIFI_REASSOCREQ,       "OnReAssocReq", &OnAssocReq},
-       {WIFI_REASSOCRSP,       "OnReAssocRsp", &OnAssocRsp},
-       {WIFI_PROBEREQ,         "OnProbeReq",   &OnProbeReq},
-       {WIFI_PROBERSP,         "OnProbeRsp",           &OnProbeRsp},
-
-       /*----------------------------------------------------------
-                                       below 2 are reserved
-       -----------------------------------------------------------*/
-       {0,                                     "DoReserved",           &DoReserved},
-       {0,                                     "DoReserved",           &DoReserved},
-       {WIFI_BEACON,           "OnBeacon",             &OnBeacon},
-       {WIFI_ATIM,                     "OnATIM",               &OnAtim},
-       {WIFI_DISASSOC,         "OnDisassoc",           &OnDisassoc},
-       {WIFI_AUTH,                     "OnAuth",               &OnAuthClient},
-       {WIFI_DEAUTH,           "OnDeAuth",             &OnDeAuth},
-       {WIFI_ACTION,           "OnAction",             &OnAction},
+/* response function for each management frame subtype, do not reorder */
+static mlme_handler mlme_sta_tbl[] = {
+       OnAssocReq,
+       OnAssocRsp,
+       OnAssocReq,
+       OnAssocRsp,
+       OnProbeReq,
+       OnProbeRsp,
+       DoReserved,
+       DoReserved,
+       OnBeacon,
+       OnAtim,
+       OnDisassoc,
+       OnAuthClient,
+       OnDeAuth,
+       OnAction,
 };
 
 static struct action_handler OnAction_tbl[] = {
@@ -393,7 +390,7 @@ void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext)
 void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame)
 {
        int index;
-       struct mlme_handler *ptable;
+       mlme_handler fct;
        struct mlme_priv *pmlmepriv = &padapter->mlmepriv;
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)precv_frame->rx_data;
        struct sta_info *psta = rtw_get_stainfo(&padapter->stapriv, hdr->addr2);
@@ -406,12 +403,10 @@ void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame)
            !is_broadcast_ether_addr(hdr->addr1))
                return;
 
-       ptable = mlme_sta_tbl;
-
        index = (le16_to_cpu(hdr->frame_control) & IEEE80211_FCTL_STYPE) >> 4;
        if (index > 13)
                return;
-       ptable += index;
+       fct = mlme_sta_tbl[index];
 
        if (psta) {
                if (ieee80211_has_retry(hdr->frame_control)) {
@@ -424,13 +419,13 @@ void mgt_dispatcher(struct adapter *padapter, struct recv_frame *precv_frame)
 
        if (ieee80211_is_auth(hdr->frame_control)) {
                if (check_fwstate(pmlmepriv, WIFI_AP_STATE))
-                       ptable->func = &OnAuth;
+                       fct = OnAuth;
                else
-                       ptable->func = &OnAuthClient;
+                       fct = OnAuthClient;
        }
 
-       if (ptable->func)
-               ptable->func(padapter, precv_frame);
+       if (fct)
+               fct(padapter, precv_frame);
 }
 
 static u32 p2p_listen_state_process(struct adapter *padapter, unsigned char *da)
index 0875472..dcf91e7 100644 (file)
@@ -184,11 +184,7 @@ enum SCAN_STATE {
        SCAN_STATE_MAX,
 };
 
-struct mlme_handler {
-       unsigned int   num;
-       char *str;
-       unsigned int (*func)(struct adapter *adapt, struct recv_frame *frame);
-};
+typedef unsigned int (*mlme_handler)(struct adapter *adapt, struct recv_frame *frame);
 
 struct action_handler {
        unsigned int   num;