diff options
author | 2022-04-17 12:22:19 +0200 | |
---|---|---|
committer | 2022-04-20 18:37:17 +0200 | |
commit | 9e9bbd6ffd0e2dfeb02b8233f069974c7d8c5a98 (patch) | |
tree | 2b8adbe19df16da297d2e09e988be1c11a657ff4 /drivers | |
parent | staging: r8188eu: the frame type is shifted out (diff) | |
download | linux-dev-9e9bbd6ffd0e2dfeb02b8233f069974c7d8c5a98.tar.xz linux-dev-9e9bbd6ffd0e2dfeb02b8233f069974c7d8c5a98.zip |
staging: r8188eu: replace mlme_handler with function pointer
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/r8188eu/core/rtw_mlme_ext.c | 49 | ||||
-rw-r--r-- | drivers/staging/r8188eu/include/rtw_mlme_ext.h | 6 |
2 files changed, 23 insertions, 32 deletions
diff --git a/drivers/staging/r8188eu/core/rtw_mlme_ext.c b/drivers/staging/r8188eu/core/rtw_mlme_ext.c index a234ffb8172f..f7d37a2facb1 100644 --- a/drivers/staging/r8188eu/core/rtw_mlme_ext.c +++ b/drivers/staging/r8188eu/core/rtw_mlme_ext.c @@ -14,25 +14,22 @@ #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) diff --git a/drivers/staging/r8188eu/include/rtw_mlme_ext.h b/drivers/staging/r8188eu/include/rtw_mlme_ext.h index 0875472dbb72..dcf91e7894a5 100644 --- a/drivers/staging/r8188eu/include/rtw_mlme_ext.h +++ b/drivers/staging/r8188eu/include/rtw_mlme_ext.h @@ -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; |