Re: [PATCH 2/2] staging:r8188eu: remove dummy handlers from OnAction()

2021-04-03 Thread Ivan Safonov

On 4/2/21 4:04 PM, Greg Kroah-Hartman wrote:

On Sun, Mar 28, 2021 at 07:33:25PM +0300, Ivan Safonov wrote:

on_action_spct() do nothing, because rtw_get_stainfo() has no side
effects. Other action handlers are trivial.

Signed-off-by: Ivan Safonov 


Same here, wrong driver name :(



Driver name is "r8188eu"...

$ grep 'r8188eu' drivers/staging/rtl8188eu/include/drv_types.h
#define DRV_NAME "r8188eu"

$ grep 'r8188eu' drivers/staging/rtl8188eu/os_dep/usb_intf.c -B1 -A7
static struct usb_driver rtl8188e_usb_drv = {
.name = "r8188eu",
.probe = rtw_drv_init,
.disconnect = rtw_dev_remove,
.id_table = rtw_usb_id_tbl,
.suspend =  rtw_suspend,
.resume = rtw_resume,
.reset_resume = rtw_resume,
};

$ cat drivers/staging/rtl8188eu/Kconfig
# SPDX-License-Identifier: GPL-2.0
config R8188EU
tristate "Realtek RTL8188EU Wireless LAN NIC driver"
depends on WLAN && USB && CFG80211
depends on m
select WIRELESS_EXT
select WEXT_PRIV
select LIB80211
select LIB80211_CRYPT_WEP
select LIB80211_CRYPT_CCMP
help
This option adds the Realtek RTL8188EU USB device such as 
TP-Link TL-WN725N.

If built as a module, it will be called r8188eu.

if R8188EU

config 88EU_AP_MODE
bool "Realtek RTL8188EU AP mode"
default y
help
This option enables Access Point mode. Unless you know that 
your system
will never be used as an AP, or the target system has limited 
memory,

"Y" should be selected.

endif


[PATCH 1/2] staging:r8188eu: refactor OnAction(): use switch instead table lookup

2021-03-28 Thread Ivan Safonov
The switch is easier to read and refactor.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 57 ---
 .../staging/rtl8188eu/include/rtw_mlme_ext.h  |  6 --
 2 files changed, 37 insertions(+), 26 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c 
b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
index 50d3c3631be0..4d741737d671 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
@@ -3780,26 +3780,10 @@ static unsigned int DoReserved(struct adapter *padapter,
return _SUCCESS;
 }
 
-static struct action_handler OnAction_tbl[] = {
-   {RTW_WLAN_CATEGORY_SPECTRUM_MGMT,"ACTION_SPECTRUM_MGMT", 
on_action_spct},
-   {RTW_WLAN_CATEGORY_QOS, "ACTION_QOS", _qos},
-   {RTW_WLAN_CATEGORY_DLS, "ACTION_DLS", _dls},
-   {RTW_WLAN_CATEGORY_BACK, "ACTION_BACK", _back},
-   {RTW_WLAN_CATEGORY_PUBLIC, "ACTION_PUBLIC", on_action_public},
-   {RTW_WLAN_CATEGORY_RADIO_MEASUREMENT, "ACTION_RADIO_MEASUREMENT", 
},
-   {RTW_WLAN_CATEGORY_FT, "ACTION_FT", },
-   {RTW_WLAN_CATEGORY_HT,  "ACTION_HT",_ht},
-   {RTW_WLAN_CATEGORY_SA_QUERY, "ACTION_SA_QUERY", },
-   {RTW_WLAN_CATEGORY_WMM, "ACTION_WMM", _wmm},
-   {RTW_WLAN_CATEGORY_P2P, "ACTION_P2P", _p2p},
-};
-
 static unsigned int OnAction(struct adapter *padapter,
 struct recv_frame *precv_frame)
 {
-   int i;
unsigned char category;
-   struct action_handler *ptable;
unsigned char *frame_body;
u8 *pframe = precv_frame->pkt->data;
 
@@ -3807,11 +3791,44 @@ static unsigned int OnAction(struct adapter *padapter,
 
category = frame_body[0];
 
-   for (i = 0; i < ARRAY_SIZE(OnAction_tbl); i++) {
-   ptable = _tbl[i];
-   if (category == ptable->num)
-   ptable->func(padapter, precv_frame);
+   switch (category) {
+   case RTW_WLAN_CATEGORY_SPECTRUM_MGMT:
+   on_action_spct(padapter, precv_frame);
+   break;
+   case RTW_WLAN_CATEGORY_QOS:
+   OnAction_qos(padapter, precv_frame);
+   break;
+   case RTW_WLAN_CATEGORY_DLS:
+   OnAction_dls(padapter, precv_frame);
+   break;
+   case RTW_WLAN_CATEGORY_BACK:
+   OnAction_back(padapter, precv_frame);
+   break;
+   case RTW_WLAN_CATEGORY_PUBLIC:
+   on_action_public(padapter, precv_frame);
+   break;
+   case RTW_WLAN_CATEGORY_RADIO_MEASUREMENT:
+   DoReserved(padapter, precv_frame);
+   break;
+   case RTW_WLAN_CATEGORY_FT:
+   DoReserved(padapter, precv_frame);
+   break;
+   case RTW_WLAN_CATEGORY_HT:
+   OnAction_ht(padapter, precv_frame);
+   break;
+   case RTW_WLAN_CATEGORY_SA_QUERY:
+   DoReserved(padapter, precv_frame);
+   break;
+   case RTW_WLAN_CATEGORY_WMM:
+   OnAction_wmm(padapter, precv_frame);
+   break;
+   case RTW_WLAN_CATEGORY_P2P:
+   OnAction_p2p(padapter, precv_frame);
+   break;
+   default:
+   break;
}
+
return _SUCCESS;
 }
 
diff --git a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h 
b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h
index b11a6886a083..aa733abad10c 100644
--- a/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h
+++ b/drivers/staging/rtl8188eu/include/rtw_mlme_ext.h
@@ -227,12 +227,6 @@ struct mlme_handler {
unsigned int (*func)(struct adapter *adapt, struct recv_frame *frame);
 };
 
-struct action_handler {
-   unsigned int num;
-   const char *str;
-   unsigned int (*func)(struct adapter *adapt, struct recv_frame *frame);
-};
-
 struct ss_res {
int state;
int bss_cnt;
-- 
2.26.2



[PATCH 2/2] staging:r8188eu: remove dummy handlers from OnAction()

2021-03-28 Thread Ivan Safonov
on_action_spct() do nothing, because rtw_get_stainfo() has no side
effects. Other action handlers are trivial.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 95 ---
 1 file changed, 95 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c 
b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
index 4d741737d671..fca02f17ba98 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
@@ -3517,56 +3517,6 @@ static unsigned int OnAtim(struct adapter *padapter,
return _SUCCESS;
 }
 
-static unsigned int on_action_spct(struct adapter *padapter,
-  struct recv_frame *precv_frame)
-{
-   struct sta_info *psta = NULL;
-   struct sta_priv *pstapriv = >stapriv;
-   u8 *pframe = precv_frame->pkt->data;
-   u8 *frame_body = pframe + sizeof(struct ieee80211_hdr_3addr);
-   u8 category;
-   u8 action;
-
-   DBG_88E(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(padapter->pnetdev));
-
-   psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
-
-   if (!psta)
-   goto exit;
-
-   category = frame_body[0];
-   if (category != RTW_WLAN_CATEGORY_SPECTRUM_MGMT)
-   goto exit;
-
-   action = frame_body[1];
-   switch (action) {
-   case WLAN_ACTION_SPCT_MSR_REQ:
-   case WLAN_ACTION_SPCT_MSR_RPRT:
-   case WLAN_ACTION_SPCT_TPC_REQ:
-   case WLAN_ACTION_SPCT_TPC_RPRT:
-   break;
-   case WLAN_ACTION_SPCT_CHL_SWITCH:
-   break;
-   default:
-   break;
-   }
-
-exit:
-   return _FAIL;
-}
-
-static unsigned int OnAction_qos(struct adapter *padapter,
-struct recv_frame *precv_frame)
-{
-   return _SUCCESS;
-}
-
-static unsigned int OnAction_dls(struct adapter *padapter,
-struct recv_frame *precv_frame)
-{
-   return _SUCCESS;
-}
-
 static unsigned int OnAction_back(struct adapter *padapter,
  struct recv_frame *precv_frame)
 {
@@ -3756,24 +3706,6 @@ static unsigned int on_action_public(struct adapter 
*padapter,
return ret;
 }
 
-static unsigned int OnAction_ht(struct adapter *padapter,
-   struct recv_frame *precv_frame)
-{
-   return _SUCCESS;
-}
-
-static unsigned int OnAction_wmm(struct adapter *padapter,
-struct recv_frame *precv_frame)
-{
-   return _SUCCESS;
-}
-
-static unsigned int OnAction_p2p(struct adapter *padapter,
-struct recv_frame *precv_frame)
-{
-   return _SUCCESS;
-}
-
 static unsigned int DoReserved(struct adapter *padapter,
   struct recv_frame *precv_frame)
 {
@@ -3792,39 +3724,12 @@ static unsigned int OnAction(struct adapter *padapter,
category = frame_body[0];
 
switch (category) {
-   case RTW_WLAN_CATEGORY_SPECTRUM_MGMT:
-   on_action_spct(padapter, precv_frame);
-   break;
-   case RTW_WLAN_CATEGORY_QOS:
-   OnAction_qos(padapter, precv_frame);
-   break;
-   case RTW_WLAN_CATEGORY_DLS:
-   OnAction_dls(padapter, precv_frame);
-   break;
case RTW_WLAN_CATEGORY_BACK:
OnAction_back(padapter, precv_frame);
break;
case RTW_WLAN_CATEGORY_PUBLIC:
on_action_public(padapter, precv_frame);
break;
-   case RTW_WLAN_CATEGORY_RADIO_MEASUREMENT:
-   DoReserved(padapter, precv_frame);
-   break;
-   case RTW_WLAN_CATEGORY_FT:
-   DoReserved(padapter, precv_frame);
-   break;
-   case RTW_WLAN_CATEGORY_HT:
-   OnAction_ht(padapter, precv_frame);
-   break;
-   case RTW_WLAN_CATEGORY_SA_QUERY:
-   DoReserved(padapter, precv_frame);
-   break;
-   case RTW_WLAN_CATEGORY_WMM:
-   OnAction_wmm(padapter, precv_frame);
-   break;
-   case RTW_WLAN_CATEGORY_P2P:
-   OnAction_p2p(padapter, precv_frame);
-   break;
default:
break;
}
-- 
2.26.2



[PATCH 0/4] staging:r8188eu: remove unnecessary definitions from wifi.h

2021-03-14 Thread Ivan Safonov
wifi.h contains unnecessary definitions. Some of them are not used
at all, some can be replaced with native definitions.

Ivan Safonov (4):
  staging:r8188eu: replace get_(d|s)a with ieee80211_get_(D|S)A
  staging:r8188eu: remove unused definitions from wifi.h
  staging:r8188eu: replace cap_* definitions with native kernel
WLAN_CAPABILITY_*
  staging:r8188eu: use ieee80211_is_ctl instead IsFrameTypeCtrl

 .../staging/rtl8188eu/core/rtw_ieee80211.c|   6 +-
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c |  12 +-
 drivers/staging/rtl8188eu/core/rtw_recv.c |   4 +-
 .../staging/rtl8188eu/hal/rtl8188e_rxdesc.c   |   8 +-
 drivers/staging/rtl8188eu/include/wifi.h  | 156 --
 5 files changed, 16 insertions(+), 170 deletions(-)

-- 
2.26.2



[PATCH 1/4] staging:r8188eu: replace get_(d|s)a with ieee80211_get_(D|S)A

2021-03-14 Thread Ivan Safonov
get_da()/get_sa() duplicate native ieee80211_get_(D|S)A functions.
Remove get_(d|s)a, use ieee80211_get_(D|S)A instead.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c |  6 +--
 drivers/staging/rtl8188eu/core/rtw_recv.c |  4 +-
 .../staging/rtl8188eu/hal/rtl8188e_rxdesc.c   |  4 +-
 drivers/staging/rtl8188eu/include/wifi.h  | 44 ---
 4 files changed, 7 insertions(+), 51 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c 
b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
index ebd9b96a8211..bee19d5b22c0 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
@@ -2526,7 +2526,7 @@ static unsigned int OnProbeReq(struct adapter *padapter,
 
if (check_fwstate(pmlmepriv, _FW_LINKED) &&
pmlmepriv->cur_network.join_res)
-   issue_probersp(padapter, get_sa(pframe));
+   issue_probersp(padapter, ieee80211_get_SA((struct 
ieee80211_hdr *)pframe));
}
return _SUCCESS;
 }
@@ -2819,7 +2819,7 @@ static unsigned int OnAuthClient(struct adapter *padapter,
DBG_88E("%s\n", __func__);
 
/* check A1 matches or not */
-   if (memcmp(myid(>eeprompriv), get_da(pframe), ETH_ALEN))
+   if (memcmp(myid(>eeprompriv), ieee80211_get_DA((struct 
ieee80211_hdr *)pframe), ETH_ALEN))
return _SUCCESS;
 
if (!(pmlmeinfo->state & WIFI_FW_AUTH_STATE))
@@ -3332,7 +3332,7 @@ static unsigned int OnAssocRsp(struct adapter *padapter,
DBG_88E("%s\n", __func__);
 
/* check A1 matches or not */
-   if (memcmp(myid(>eeprompriv), get_da(pframe), ETH_ALEN))
+   if (memcmp(myid(>eeprompriv), ieee80211_get_DA((struct 
ieee80211_hdr *)pframe), ETH_ALEN))
return _SUCCESS;
 
if (!(pmlmeinfo->state & (WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE)))
diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index 36bcbe635cf4..b9b4bc435037 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -1029,8 +1029,8 @@ static int validate_recv_data_frame(struct adapter 
*adapter,
int ret = _SUCCESS;
 
bretry = GetRetry(ptr);
-   pda = get_da(ptr);
-   psa = get_sa(ptr);
+   pda = ieee80211_get_DA((struct ieee80211_hdr *)ptr);
+   psa = ieee80211_get_SA((struct ieee80211_hdr *)ptr);
pbssid = get_hdr_bssid(ptr);
 
if (!pbssid) {
diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c 
b/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c
index 0d06cb54b1ad..4fae75fc3dd5 100644
--- a/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c
+++ b/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c
@@ -150,7 +150,7 @@ void update_recvframe_phyinfo_88e(struct recv_frame 
*precvframe,
 get_bssid(>mlmepriv), ETH_ALEN));
 
pkt_info.bPacketToSelf = pkt_info.bPacketMatchBSSID &&
-(!memcmp(get_da(wlanhdr),
+(!memcmp(ieee80211_get_DA((struct 
ieee80211_hdr *)wlanhdr),
  myid(>eeprompriv), ETH_ALEN));
 
pkt_info.bPacketBeacon = pkt_info.bPacketMatchBSSID &&
@@ -161,7 +161,7 @@ void update_recvframe_phyinfo_88e(struct recv_frame 
*precvframe,
sa = padapter->mlmepriv.cur_network.network.MacAddress;
/* to do Ad-hoc */
} else {
-   sa = get_sa(wlanhdr);
+   sa = ieee80211_get_SA((struct ieee80211_hdr *)wlanhdr);
}
 
pstapriv = >stapriv;
diff --git a/drivers/staging/rtl8188eu/include/wifi.h 
b/drivers/staging/rtl8188eu/include/wifi.h
index 1b9006879a11..5ee4d02e293c 100644
--- a/drivers/staging/rtl8188eu/include/wifi.h
+++ b/drivers/staging/rtl8188eu/include/wifi.h
@@ -201,50 +201,6 @@ enum WIFI_REG_DOMAIN {
 
 #define GetAddr4Ptr(pbuf)  ((unsigned char *)((size_t)(pbuf) + 24))
 
-static inline unsigned char *get_da(unsigned char *pframe)
-{
-   unsigned char   *da;
-   unsigned int to_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
-
-   switch (to_fr_ds) {
-   case 0x00:  /*  ToDs=0, FromDs=0 */
-   da = GetAddr1Ptr(pframe);
-   break;
-   case 0x01:  /*  ToDs=0, FromDs=1 */
-   da = GetAddr1Ptr(pframe);
-   break;
-   case 0x02:  /*  ToDs=1, FromDs=0 */
-   da = GetAddr3Ptr(pframe);
-   break;
-   default:/*  ToDs=1, FromDs=1 */
-   da = GetAddr3Ptr(pframe);
-   break;
-   }
-   return da;
-}
-
-static inline unsigned char *get_sa(unsigned char *pframe)
-{
-   unsigned char   *sa;
-   unsigned intto_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
-
-   switch (to

[PATCH 4/4] staging:r8188eu: use ieee80211_is_ctl instead IsFrameTypeCtrl

2021-03-14 Thread Ivan Safonov
IsFrameTypeCtrl() duplicate ieee80211_is_ctl().

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c | 8 +---
 drivers/staging/rtl8188eu/include/wifi.h| 8 
 2 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c 
b/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c
index 4fae75fc3dd5..8669bf097479 100644
--- a/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c
+++ b/drivers/staging/rtl8188eu/hal/rtl8188e_rxdesc.c
@@ -133,6 +133,8 @@ void update_recvframe_phyinfo_88e(struct recv_frame 
*precvframe,
struct rx_pkt_attrib *pattrib = >attrib;
struct odm_phy_status_info *pPHYInfo  = (struct odm_phy_status_info 
*)(>phy_info);
u8 *wlanhdr;
+   struct ieee80211_hdr *hdr =
+   (struct ieee80211_hdr *)precvframe->pkt->data;
struct odm_per_pkt_info pkt_info;
u8 *sa = NULL;
struct sta_priv *pstapriv;
@@ -144,13 +146,13 @@ void update_recvframe_phyinfo_88e(struct recv_frame 
*precvframe,
 
wlanhdr = precvframe->pkt->data;
 
-   pkt_info.bPacketMatchBSSID = ((!IsFrameTypeCtrl(wlanhdr)) &&
+   pkt_info.bPacketMatchBSSID = (!ieee80211_is_ctl(hdr->frame_control) &&
!pattrib->icv_err && !pattrib->crc_err &&
!memcmp(get_hdr_bssid(wlanhdr),
 get_bssid(>mlmepriv), ETH_ALEN));
 
pkt_info.bPacketToSelf = pkt_info.bPacketMatchBSSID &&
-(!memcmp(ieee80211_get_DA((struct 
ieee80211_hdr *)wlanhdr),
+(!memcmp(ieee80211_get_DA(hdr),
  myid(>eeprompriv), ETH_ALEN));
 
pkt_info.bPacketBeacon = pkt_info.bPacketMatchBSSID &&
@@ -161,7 +163,7 @@ void update_recvframe_phyinfo_88e(struct recv_frame 
*precvframe,
sa = padapter->mlmepriv.cur_network.network.MacAddress;
/* to do Ad-hoc */
} else {
-   sa = ieee80211_get_SA((struct ieee80211_hdr *)wlanhdr);
+   sa = ieee80211_get_SA(hdr);
}
 
pstapriv = >stapriv;
diff --git a/drivers/staging/rtl8188eu/include/wifi.h 
b/drivers/staging/rtl8188eu/include/wifi.h
index d65a0a88a69a..84e17330628e 100644
--- a/drivers/staging/rtl8188eu/include/wifi.h
+++ b/drivers/staging/rtl8188eu/include/wifi.h
@@ -197,14 +197,6 @@ static inline unsigned char *get_hdr_bssid(unsigned char 
*pframe)
return sa;
 }
 
-static inline int IsFrameTypeCtrl(unsigned char *pframe)
-{
-   if (GetFrameType(pframe) == WIFI_CTRL_TYPE)
-   return true;
-   else
-   return false;
-}
-
 /*-
Below is for the security related definition
 
--*/
-- 
2.26.2



[PATCH 3/4] staging:r8188eu: replace cap_* definitions with native kernel WLAN_CAPABILITY_*

2021-03-14 Thread Ivan Safonov
cap_* definitions duplicate WLAN_CAPABILITY_*. Remove cap_* definitions,
improve code consistency.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_ieee80211.c |  6 +++---
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c  |  6 +++---
 drivers/staging/rtl8188eu/include/wifi.h   | 12 
 3 files changed, 6 insertions(+), 18 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c 
b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
index ec5b8be14c2b..7a706fe11750 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
@@ -223,13 +223,13 @@ int rtw_generate_ie(struct registry_priv *pregistrypriv)
/* capability info */
*(u16 *)ie = 0;
 
-   *(__le16 *)ie |= cpu_to_le16(cap_IBSS);
+   *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_IBSS);
 
if (pregistrypriv->preamble == PREAMBLE_SHORT)
-   *(__le16 *)ie |= cpu_to_le16(cap_ShortPremble);
+   *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_SHORT_PREAMBLE);
 
if (pdev_network->Privacy)
-   *(__le16 *)ie |= cpu_to_le16(cap_Privacy);
+   *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY);
 
sz += 2;
ie += 2;
diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c 
b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
index bee19d5b22c0..50d3c3631be0 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
@@ -2188,7 +2188,7 @@ static void start_create_ibss(struct adapter *padapter)
/* update capability */
caps = rtw_get_capability(pnetwork);
update_capinfo(padapter, caps);
-   if (caps & cap_IBSS) {/* adhoc master */
+   if (caps & WLAN_CAPABILITY_IBSS) {/* adhoc master */
val8 = 0xcf;
rtw_hal_set_hwreg(padapter, HW_VAR_SEC_CFG, (u8 *)());
 
@@ -2240,7 +2240,7 @@ static void start_clnt_join(struct adapter *padapter)
/* update capability */
caps = rtw_get_capability(pnetwork);
update_capinfo(padapter, caps);
-   if (caps & cap_ESS) {
+   if (caps & WLAN_CAPABILITY_ESS) {
Set_MSR(padapter, WIFI_FW_STATION_STATE);
 
val8 = (pmlmeinfo->auth_algo == dot11AuthAlgrthm_8021X) ? 0xcc 
: 0xcf;
@@ -2258,7 +2258,7 @@ static void start_clnt_join(struct adapter *padapter)
  msecs_to_jiffies((REAUTH_TO * REAUTH_LIMIT) + 
(REASSOC_TO * REASSOC_LIMIT) + beacon_timeout));
 
pmlmeinfo->state = WIFI_FW_AUTH_NULL | WIFI_FW_STATION_STATE;
-   } else if (caps & cap_IBSS) { /* adhoc client */
+   } else if (caps & WLAN_CAPABILITY_IBSS) { /* adhoc client */
Set_MSR(padapter, WIFI_FW_ADHOC_STATE);
 
val8 = 0xcf;
diff --git a/drivers/staging/rtl8188eu/include/wifi.h 
b/drivers/staging/rtl8188eu/include/wifi.h
index f03359602db7..d65a0a88a69a 100644
--- a/drivers/staging/rtl8188eu/include/wifi.h
+++ b/drivers/staging/rtl8188eu/include/wifi.h
@@ -238,18 +238,6 @@ static inline int IsFrameTypeCtrl(unsigned char *pframe)
 #define AUTH_ODD_TO0
 #define AUTH_EVEN_TO   1
 
-#define cap_ESSBIT(0)
-#define cap_IBSS   BIT(1)
-#define cap_CFPollable BIT(2)
-#define cap_CFRequest  BIT(3)
-#define cap_PrivacyBIT(4)
-#define cap_ShortPremble BIT(5)
-#define cap_PBCC   BIT(6)
-#define cap_ChAgility  BIT(7)
-#define cap_SpecMgmt   BIT(8)
-#define cap_QoSi   BIT(9)
-#define cap_ShortSlot  BIT(10)
-
 /*-
Below is the definition for 802.11i / 802.1x
 
--*/
-- 
2.26.2



[PATCH 2/4] staging:r8188eu: remove unused definitions from wifi.h

2021-03-14 Thread Ivan Safonov
These definitions are not used and will not be useful in the future.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/include/wifi.h | 92 
 1 file changed, 92 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/wifi.h 
b/drivers/staging/rtl8188eu/include/wifi.h
index 5ee4d02e293c..f03359602db7 100644
--- a/drivers/staging/rtl8188eu/include/wifi.h
+++ b/drivers/staging/rtl8188eu/include/wifi.h
@@ -7,21 +7,8 @@
 #ifndef _WIFI_H_
 #define _WIFI_H_
 
-#define WLAN_IEEE_OUI_LEN  3
-#define WLAN_CRC_LEN   4
-#define WLAN_BSSID_LEN 6
-#define WLAN_BSS_TS_LEN8
 #define WLAN_HDR_A3_LEN24
-#define WLAN_HDR_A4_LEN30
 #define WLAN_HDR_A3_QOS_LEN26
-#define WLAN_HDR_A4_QOS_LEN32
-#define WLAN_DATA_MAXLEN   2312
-
-#define WLAN_A3_PN_OFFSET  24
-#define WLAN_A4_PN_OFFSET  30
-
-#define WLAN_MIN_ETHFRM_LEN60
-#define WLAN_MAX_ETHFRM_LEN1514
 
 #define P80211CAPTURE_VERSION  0x80211001
 
@@ -74,20 +61,6 @@ enum WIFI_FRAME_SUBTYPE {
WIFI_QOS_DATA_NULL  = (BIT(6) | WIFI_QOS_DATA_TYPE),
 };
 
-enum WIFI_REG_DOMAIN {
-   DOMAIN_FCC  = 1,
-   DOMAIN_IC   = 2,
-   DOMAIN_ETSI = 3,
-   DOMAIN_SPA  = 4,
-   DOMAIN_FRANCE   = 5,
-   DOMAIN_MKK  = 6,
-   DOMAIN_ISRAEL   = 7,
-   DOMAIN_MKK1 = 8,
-   DOMAIN_MKK2 = 9,
-   DOMAIN_MKK3 = 10,
-   DOMAIN_MAX
-};
-
 #define SetToDs(pbuf)  \
*(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_TODS)
 
@@ -199,8 +172,6 @@ enum WIFI_REG_DOMAIN {
 
 #define GetAddr3Ptr(pbuf)  ((unsigned char *)((size_t)(pbuf) + 16))
 
-#define GetAddr4Ptr(pbuf)  ((unsigned char *)((size_t)(pbuf) + 24))
-
 static inline unsigned char *get_hdr_bssid(unsigned char *pframe)
 {
unsigned char   *sa;
@@ -237,19 +208,6 @@ static inline int IsFrameTypeCtrl(unsigned char *pframe)
 /*-
Below is for the security related definition
 
--*/
-#define _RESERVED_FRAME_TYPE_  0
-#define _SKB_FRAME_TYPE_   2
-#define _PRE_ALLOCMEM_ 1
-#define _PRE_ALLOCHDR_ 3
-#define _PRE_ALLOCLLCHDR_  4
-#define _PRE_ALLOCICVHDR_  5
-#define _PRE_ALLOCMICHDR_  6
-
-#define _SIFSTIME_ \
-   ((priv->pmib->dot11BssType.net_work_type & WIRELESS_11A) ? 16 : 10)
-#define _ACKCTSLNG_14  /* 14 bytes long, including crclng */
-#define _CRCLNG_   4
-
 #define _ASOCREQ_IE_OFFSET_4   /*  excluding wlan_hdr */
 #define_ASOCRSP_IE_OFFSET_ 6
 #define _REASOCREQ_IE_OFFSET_  10
@@ -280,10 +238,6 @@ static inline int IsFrameTypeCtrl(unsigned char *pframe)
 #define AUTH_ODD_TO0
 #define AUTH_EVEN_TO   1
 
-#define WLAN_ETHCONV_ENCAP 1
-#define WLAN_ETHCONV_RFC1042   2
-#define WLAN_ETHCONV_8021h 3
-
 #define cap_ESSBIT(0)
 #define cap_IBSS   BIT(1)
 #define cap_CFPollable BIT(2)
@@ -316,7 +270,6 @@ static inline int IsFrameTypeCtrl(unsigned char *pframe)
Below is the definition for WMM
 
--*/
 #define _WMM_IE_Length_7  /*  for WMM STA */
-#define _WMM_Para_Element_Length_  24
 
 /*-
Below is the definition for 802.11n
@@ -388,13 +341,6 @@ enum ht_cap_ampdu_factor {
 #define HT_INFO_OPERATION_MODE_TRANSMIT_BURST_LIMIT((u8)BIT(3))
 #define HT_INFO_OPERATION_MODE_NON_HT_STA_PRESENT  ((u8)BIT(4))
 
-#define HT_INFO_STBC_PARAM_DUAL_BEACON ((u16)BIT(6))
-#define HT_INFO_STBC_PARAM_DUAL_STBC_PROTECT   ((u16)BIT(7))
-#define HT_INFO_STBC_PARAM_SECONDARY_BC((u16)BIT(8))
-#define HT_INFO_STBC_PARAM_LSIG_TXOP_PROTECT_ALLOWED   ((u16)BIT(9))
-#define HT_INFO_STBC_PARAM_PCO_ACTIVE  ((u16)BIT(10))
-#define HT_INFO_STBC_PARAM_PCO_PHASE   ((u16)BIT(11))
-
 /* ===WPS Section=== */
 /* For WPSv1.0 */
 #define WPSOUI 0x0050f204
@@ -453,48 +399,10 @@ enum ht_cap_ampdu_factor {
 #define WPS_CONFIG_METHOD_VDISPLAY 0x2008
 #define WPS_CONFIG_METHOD_PDISPLAY 0x4008
 
-/* Value of Category ID of WPS Primary Device Type Attribute */
-#define WPS_PDT_CID_DISPLAYS   0x0007
-#define WPS_PDT_CID_MULIT_MEDIA0x0008
-#define WPS_PDT_CID_RTK_WIDI   WPS_PDT_CID_MULIT_MEDIA
-
-/* Value of Sub Category ID of WPS Primary Device Type Attribute */
-#define WPS_PDT_SCID_MEDIA_SERVER  0x0005
-#define WPS_PDT_SCID_RTK_DMP   WPS_PDT_SCID_ME

[PATCH 4/4] staging:rtl8712: replace cap_* definitions with native kernel WLAN_CAPABILITY_*

2021-02-27 Thread Ivan Safonov
cap_* definitions duplicate WLAN_CAPABILITY_*. Remove cap_* definitions,
improve code consistency.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8712/ieee80211.c | 6 +++---
 drivers/staging/rtl8712/wifi.h  | 7 ---
 2 files changed, 3 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/rtl8712/ieee80211.c 
b/drivers/staging/rtl8712/ieee80211.c
index b4a099169c7c..13fc3c1ec0db 100644
--- a/drivers/staging/rtl8712/ieee80211.c
+++ b/drivers/staging/rtl8712/ieee80211.c
@@ -173,11 +173,11 @@ int r8712_generate_ie(struct registry_priv *registrypriv)
ie += 2;
/*capability info*/
*(u16 *)ie = 0;
-   *(__le16 *)ie |= cpu_to_le16(cap_IBSS);
+   *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_IBSS);
if (registrypriv->preamble == PREAMBLE_SHORT)
-   *(__le16 *)ie |= cpu_to_le16(cap_ShortPremble);
+   *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_SHORT_PREAMBLE);
if (dev_network->Privacy)
-   *(__le16 *)ie |= cpu_to_le16(cap_Privacy);
+   *(__le16 *)ie |= cpu_to_le16(WLAN_CAPABILITY_PRIVACY);
sz += 2;
ie += 2;
/*SSID*/
diff --git a/drivers/staging/rtl8712/wifi.h b/drivers/staging/rtl8712/wifi.h
index b7889ac3dce9..f941efb1f4e2 100644
--- a/drivers/staging/rtl8712/wifi.h
+++ b/drivers/staging/rtl8712/wifi.h
@@ -278,13 +278,6 @@ static inline unsigned char *get_hdr_bssid(unsigned char 
*pframe)
 #define AUTH_ODD_TO0
 #define AUTH_EVEN_TO   1
 
-#define cap_ESS BIT(0)
-#define cap_IBSS BIT(1)
-#define cap_CFPollable BIT(2)
-#define cap_CFRequest BIT(3)
-#define cap_Privacy BIT(4)
-#define cap_ShortPremble BIT(5)
-
 /*-
  * Below is the definition for 802.11i / 802.1x
  
*--
-- 
2.26.2



[PATCH 1/4] staging:rtl8712: replace get_(d|s)a with ieee80211_get_(D|S)A

2021-02-27 Thread Ivan Safonov
get_da()/get_sa() duplicate native ieee80211_get_(D|S)A functions.
Remove get_(d|s)a, use ieee80211_get_(D|S)A instead.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8712/rtl871x_recv.c |  4 +--
 drivers/staging/rtl8712/wifi.h | 45 --
 2 files changed, 2 insertions(+), 47 deletions(-)

diff --git a/drivers/staging/rtl8712/rtl871x_recv.c 
b/drivers/staging/rtl8712/rtl871x_recv.c
index eb4e46a7f743..efd783e7ccbc 100644
--- a/drivers/staging/rtl8712/rtl871x_recv.c
+++ b/drivers/staging/rtl8712/rtl871x_recv.c
@@ -466,8 +466,8 @@ static sint validate_recv_data_frame(struct _adapter 
*adapter,
struct security_priv *psecuritypriv = >securitypriv;
 
bretry = GetRetry(ptr);
-   pda = get_da(ptr);
-   psa = get_sa(ptr);
+   pda = ieee80211_get_DA((struct ieee80211_hdr *)ptr);
+   psa = ieee80211_get_SA((struct ieee80211_hdr *)ptr);
pbssid = get_hdr_bssid(ptr);
if (!pbssid)
return _FAIL;
diff --git a/drivers/staging/rtl8712/wifi.h b/drivers/staging/rtl8712/wifi.h
index 1b32b3510093..5de0e67b1876 100644
--- a/drivers/staging/rtl8712/wifi.h
+++ b/drivers/staging/rtl8712/wifi.h
@@ -264,51 +264,6 @@ static inline unsigned char get_tofr_ds(unsigned char 
*pframe)
 
 #define GetAddr4Ptr(pbuf)  ((unsigned char *)((addr_t)(pbuf) + 24))
 
-static inline unsigned char *get_da(unsigned char *pframe)
-{
-   unsigned char   *da;
-   unsigned intto_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
-
-   switch (to_fr_ds) {
-   case 0x00:  /* ToDs=0, FromDs=0 */
-   da = GetAddr1Ptr(pframe);
-   break;
-   case 0x01:  /* ToDs=0, FromDs=1 */
-   da = GetAddr1Ptr(pframe);
-   break;
-   case 0x02:  /* ToDs=1, FromDs=0 */
-   da = GetAddr3Ptr(pframe);
-   break;
-   default:/* ToDs=1, FromDs=1 */
-   da = GetAddr3Ptr(pframe);
-   break;
-   }
-   return da;
-}
-
-static inline unsigned char *get_sa(unsigned char *pframe)
-{
-   unsigned char   *sa;
-   unsigned intto_fr_ds = (GetToDs(pframe) << 1) | GetFrDs(pframe);
-
-   switch (to_fr_ds) {
-   case 0x00:  /* ToDs=0, FromDs=0 */
-   sa = GetAddr2Ptr(pframe);
-   break;
-   case 0x01:  /* ToDs=0, FromDs=1 */
-   sa = GetAddr3Ptr(pframe);
-   break;
-   case 0x02:  /* ToDs=1, FromDs=0 */
-   sa = GetAddr2Ptr(pframe);
-   break;
-   default:/* ToDs=1, FromDs=1 */
-   sa = GetAddr4Ptr(pframe);
-   break;
-   }
-
-   return sa;
-}
-
 static inline unsigned char *get_hdr_bssid(unsigned char *pframe)
 {
unsigned char   *sa;
-- 
2.26.2



[PATCH 2/4] staging:rtl8712: remove unused definitions from wifi.h

2021-02-27 Thread Ivan Safonov
These definitions are not used and will not be useful in the future.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8712/wifi.h | 74 --
 1 file changed, 74 deletions(-)

diff --git a/drivers/staging/rtl8712/wifi.h b/drivers/staging/rtl8712/wifi.h
index 5de0e67b1876..11fba6f9e721 100644
--- a/drivers/staging/rtl8712/wifi.h
+++ b/drivers/staging/rtl8712/wifi.h
@@ -16,22 +16,8 @@
 
 #include 
 
-#define WLAN_IEEE_OUI_LEN  3
-#define WLAN_CRC_LEN   4
-#define WLAN_BSSID_LEN 6
-#define WLAN_BSS_TS_LEN8
 #define WLAN_HDR_A3_LEN24
-#define WLAN_HDR_A4_LEN30
 #define WLAN_HDR_A3_QOS_LEN26
-#define WLAN_HDR_A4_QOS_LEN32
-#define WLAN_SSID_MAXLEN   32
-#define WLAN_DATA_MAXLEN   2312
-
-#define WLAN_A3_PN_OFFSET  24
-#define WLAN_A4_PN_OFFSET  30
-
-#define WLAN_MIN_ETHFRM_LEN60
-#define WLAN_MAX_ETHFRM_LEN1514
 
 #define P80211CAPTURE_VERSION  0x80211001
 
@@ -74,33 +60,6 @@ enum WIFI_FRAME_SUBTYPE {
WIFI_CF_ACKPOLL = (BIT(6) | BIT(5) | BIT(4) | WIFI_DATA_TYPE),
 };
 
-enum WIFI_REASON_CODE  {
-   _RSON_RESERVED_ = 0,
-   _RSON_UNSPECIFIED_  = 1,
-   _RSON_AUTH_NO_LONGER_VALID_ = 2,
-   _RSON_DEAUTH_STA_LEAVING_   = 3,
-   _RSON_INACTIVITY_   = 4,
-   _RSON_UNABLE_HANDLE_= 5,
-   _RSON_CLS2_ = 6,
-   _RSON_CLS3_ = 7,
-   _RSON_DISAOC_STA_LEAVING_   = 8,
-   _RSON_ASOC_NOT_AUTH_= 9,
-   /* WPA reason */
-   _RSON_INVALID_IE_   = 13,
-   _RSON_MIC_FAILURE_  = 14,
-   _RSON_4WAY_HNDSHK_TIMEOUT_  = 15,
-   _RSON_GROUP_KEY_UPDATE_TIMEOUT_ = 16,
-   _RSON_DIFF_IE_  = 17,
-   _RSON_MLTCST_CIPHER_NOT_VALID_  = 18,
-   _RSON_UNICST_CIPHER_NOT_VALID_  = 19,
-   _RSON_AKMP_NOT_VALID_   = 20,
-   _RSON_UNSUPPORT_RSNE_VER_   = 21,
-   _RSON_INVALID_RSNE_CAP_ = 22,
-   _RSON_IEEE_802DOT1X_AUTH_FAIL_  = 23,
-   /* below are Realtek definitions */
-   _RSON_PMK_NOT_AVAILABLE_= 24,
-};
-
 enum WIFI_REG_DOMAIN {
DOMAIN_FCC  = 1,
DOMAIN_IC   = 2,
@@ -234,11 +193,6 @@ static inline unsigned char get_tofr_ds(unsigned char 
*pframe)
0x000f) | (0xfff0 & (num << 4))); \
 })
 
-#define SetDuration(pbuf, dur) ({ \
-   *(__le16 *)((addr_t)(pbuf) + 2) |= \
-   cpu_to_le16(0x & (dur)); \
-})
-
 #define SetPriority(pbuf, tid) ({ \
*(__le16 *)(pbuf) |= cpu_to_le16(tid & 0xf); \
 })
@@ -253,9 +207,6 @@ static inline unsigned char get_tofr_ds(unsigned char 
*pframe)
 
 #define GetAMsdu(pbuf) (((le16_to_cpu(*(__le16 *)pbuf)) >> 7) & 0x1)
 
-#define GetAid(pbuf)   (cpu_to_le16(*(__le16 *)((addr_t)(pbuf) + 2)) \
-   & 0x3fff)
-
 #define GetAddr1Ptr(pbuf)  ((unsigned char *)((addr_t)(pbuf) + 4))
 
 #define GetAddr2Ptr(pbuf)  ((unsigned char *)((addr_t)(pbuf) + 10))
@@ -290,19 +241,6 @@ static inline unsigned char *get_hdr_bssid(unsigned char 
*pframe)
  * Below is for the security related definition
  *-
  */
-#define _RESERVED_FRAME_TYPE_  0
-#define _SKB_FRAME_TYPE_   2
-#define _PRE_ALLOCMEM_ 1
-#define _PRE_ALLOCHDR_ 3
-#define _PRE_ALLOCLLCHDR_  4
-#define _PRE_ALLOCICVHDR_  5
-#define _PRE_ALLOCMICHDR_  6
-
-#define _SIFSTIME_ ((priv->pmib->BssType.net_work_type & \
-   WIRELESS_11A) ? 16 : 10)
-#define _ACKCTSLNG_14  /*14 bytes long, including crclng */
-#define _CRCLNG_   4
-
 #define _ASOCREQ_IE_OFFSET_4   /* excluding wlan_hdr */
 #define_ASOCRSP_IE_OFFSET_ 6
 #define _REASOCREQ_IE_OFFSET_  10
@@ -348,10 +286,6 @@ static inline unsigned char *get_hdr_bssid(unsigned char 
*pframe)
 #define AUTH_ODD_TO0
 #define AUTH_EVEN_TO   1
 
-#define WLAN_ETHCONV_ENCAP 1
-#define WLAN_ETHCONV_RFC1042   2
-#define WLAN_ETHCONV_8021h 3
-
 #define cap_ESS BIT(0)
 #define cap_IBSS BIT(1)
 #define cap_CFPollable BIT(2)
@@ -371,20 +305,12 @@ static inline unsigned char *get_hdr_bssid(unsigned char 
*pframe)
  
*--
  */
 #define _WMM_IE_Length_7  /* for WMM STA */
-#define _WMM_Para_Element_Length_  24
 
 /*-
  * Below is the definition for 802.11n
  
*--
  */
 
-#define SetOrderBit(pbuf) ({ \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_ORDER_); \
-})
-
-

[PATCH 3/4] staging:rtl8712: use IEEE80211_FCTL_* kernel definitions

2021-02-27 Thread Ivan Safonov
_TO_DS_, _FROM_DS_, _MORE_FRAG_, _RETRY_, _PWRMGT_, _MORE_DATA_,
_PRIVACY_, _ORDER_ definitions are duplicate IEEE80211_FCTL_*
kernel definitions.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8712/wifi.h | 52 ++
 1 file changed, 22 insertions(+), 30 deletions(-)

diff --git a/drivers/staging/rtl8712/wifi.h b/drivers/staging/rtl8712/wifi.h
index 11fba6f9e721..b7889ac3dce9 100644
--- a/drivers/staging/rtl8712/wifi.h
+++ b/drivers/staging/rtl8712/wifi.h
@@ -15,6 +15,7 @@
 #define _WIFI_H_
 
 #include 
+#include 
 
 #define WLAN_HDR_A3_LEN24
 #define WLAN_HDR_A3_QOS_LEN26
@@ -74,33 +75,24 @@ enum WIFI_REG_DOMAIN {
DOMAIN_MAX
 };
 
-#define _TO_DS_BIT(8)
-#define _FROM_DS_  BIT(9)
-#define _MORE_FRAG_BIT(10)
-#define _RETRY_BIT(11)
-#define _PWRMGT_   BIT(12)
-#define _MORE_DATA_BIT(13)
-#define _PRIVACY_  BIT(14)
-#define _ORDER_BIT(15)
-
 #define SetToDs(pbuf) ({ \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_TO_DS_); \
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_TODS); \
 })
 
-#define GetToDs(pbuf)  (((*(__le16 *)(pbuf)) & cpu_to_le16(_TO_DS_)) != 0)
+#define GetToDs(pbuf)  (((*(__le16 *)(pbuf)) & 
cpu_to_le16(IEEE80211_FCTL_TODS)) != 0)
 
 #define ClearToDs(pbuf)({ \
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_TO_DS_)); \
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_TODS)); \
 })
 
 #define SetFrDs(pbuf) ({ \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_FROM_DS_); \
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_FROMDS); \
 })
 
-#define GetFrDs(pbuf)  (((*(__le16 *)(pbuf)) & cpu_to_le16(_FROM_DS_)) != 0)
+#define GetFrDs(pbuf)  (((*(__le16 *)(pbuf)) & 
cpu_to_le16(IEEE80211_FCTL_FROMDS)) != 0)
 
 #define ClearFrDs(pbuf)({ \
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_FROM_DS_)); \
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_FROMDS)); \
 })
 
 static inline unsigned char get_tofr_ds(unsigned char *pframe)
@@ -109,56 +101,56 @@ static inline unsigned char get_tofr_ds(unsigned char 
*pframe)
 }
 
 #define SetMFrag(pbuf) ({ \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_MORE_FRAG_); \
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREFRAGS); \
 })
 
-#define GetMFrag(pbuf) (((*(__le16 *)(pbuf)) & cpu_to_le16(_MORE_FRAG_)) != 0)
+#define GetMFrag(pbuf) (((*(__le16 *)(pbuf)) & 
cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)) != 0)
 
 #define ClearMFrag(pbuf) ({ \
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_FRAG_)); \
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)); \
 })
 
 #define SetRetry(pbuf) ({ \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_RETRY_); \
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_RETRY); \
 })
 
-#define GetRetry(pbuf) (((*(__le16 *)(pbuf)) & cpu_to_le16(_RETRY_)) != 0)
+#define GetRetry(pbuf) (((*(__le16 *)(pbuf)) & 
cpu_to_le16(IEEE80211_FCTL_RETRY)) != 0)
 
 #define ClearRetry(pbuf) ({ \
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_RETRY_)); \
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_RETRY)); \
 })
 
 #define SetPwrMgt(pbuf) ({ \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_PWRMGT_); \
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PM); \
 })
 
 #define GetPwrMgt(pbuf)(((*(__le16 *)(pbuf)) & \
-   cpu_to_le16(_PWRMGT_)) != 0)
+   cpu_to_le16(IEEE80211_FCTL_PM)) != 0)
 
 #define ClearPwrMgt(pbuf) ({ \
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_PWRMGT_)); \
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_PM)); \
 })
 
 #define SetMData(pbuf) ({ \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_MORE_DATA_); \
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREDATA); \
 })
 
 #define GetMData(pbuf) (((*(__le16 *)(pbuf)) & \
-   cpu_to_le16(_MORE_DATA_)) != 0)
+   cpu_to_le16(IEEE80211_FCTL_MOREDATA)) != 0)
 
 #define ClearMData(pbuf) ({ \
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_DATA_)); \
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_MOREDATA)); \
 })
 
 #define SetPrivacy(pbuf) ({ \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_PRIVACY_); \
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PROTECTED); \
 })
 
 #define GetPrivacy(pbuf)   (((*(__le16 *)(pbuf)) & \
-   cpu_to_le16(_PRIVACY_)) != 0)
+   cpu_to_le16(IEEE80211_FCTL_PROTECTED)) != 0)
 
 #define GetOrder(pbuf) (((*(__le16 *)(pbuf)) & \
-   cpu_to_le16(_ORDER_)) != 0)
+   cpu_to_le16(IEEE80211_FCTL_ORDER)) != 0)
 
 #define GetFrameType(pbuf) (le16_to_cpu(*(__le16 *)(pbuf)) & \
(BIT(3) | BIT(2)))
-- 
2.26.2



[PATCH 0/4] staging:rtl8712: avoid unnecessary definitions in wifi.h

2021-02-27 Thread Ivan Safonov
wifi.h contains unnecessary definitions. Some of them are not used
at all, some can be replaced with native definitions. 

Ivan Safonov (4):
  staging:rtl8712: replace get_(d|s)a with ieee80211_get_(D|S)A
  staging:rtl8712: remove unused definitions from wifi.h
  staging:rtl8712: use IEEE80211_FCTL_* kernel definitions
  staging:rtl8712: replace cap_* definitions with native kernel
WLAN_CAPABILITY_*

 drivers/staging/rtl8712/ieee80211.c|   6 +-
 drivers/staging/rtl8712/rtl871x_recv.c |   4 +-
 drivers/staging/rtl8712/wifi.h | 178 +++--
 3 files changed, 27 insertions(+), 161 deletions(-)

-- 
2.26.2



Re: [PATCH] staging: wlan-ng: Fixed incorrect type warning in p80211netdev.c

2021-02-18 Thread Ivan Safonov

On 2/17/21 6:42 PM, pritthijit.nath at icloud.com (Pritthijit Nath) wrote:

This change fixes a sparse warning "incorrect type in argument 1
(different address spaces)".

Signed-off-by: Pritthijit Nath 
---
  drivers/staging/wlan-ng/p80211netdev.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/staging/wlan-ng/p80211netdev.c 
b/drivers/staging/wlan-ng/p80211netdev.c
index 6f9666dc0277..70570e8a5ad2 100644
--- a/drivers/staging/wlan-ng/p80211netdev.c
+++ b/drivers/staging/wlan-ng/p80211netdev.c
@@ -569,7 +569,7 @@ static int p80211knetdev_do_ioctl(struct net_device *dev,
 goto bail;
 }
  
-   msgbuf = memdup_user(req->data, req->len);

+   msgbuf = memdup_user((void __user *)req->data, req->len);
 if (IS_ERR(msgbuf)) {
 result = PTR_ERR(msgbuf);
 goto bail;



Reviewed-by: Ivan Safonov 


[PATCH] staging:wlan-ng: use memdup_user instead of kmalloc/copy_from_user

2021-02-13 Thread Ivan Safonov
memdup_user() is shorter and safer equivalent
of kmalloc/copy_from_user pair.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/wlan-ng/p80211netdev.c | 28 --
 1 file changed, 13 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/wlan-ng/p80211netdev.c 
b/drivers/staging/wlan-ng/p80211netdev.c
index a15abb2c8f54..6f9666dc0277 100644
--- a/drivers/staging/wlan-ng/p80211netdev.c
+++ b/drivers/staging/wlan-ng/p80211netdev.c
@@ -569,24 +569,22 @@ static int p80211knetdev_do_ioctl(struct net_device *dev,
goto bail;
}
 
-   /* Allocate a buf of size req->len */
-   msgbuf = kmalloc(req->len, GFP_KERNEL);
-   if (msgbuf) {
-   if (copy_from_user(msgbuf, (void __user *)req->data, req->len))
-   result = -EFAULT;
-   else
-   result = p80211req_dorequest(wlandev, msgbuf);
+   msgbuf = memdup_user(req->data, req->len);
+   if (IS_ERR(msgbuf)) {
+   result = PTR_ERR(msgbuf);
+   goto bail;
+   }
 
-   if (result == 0) {
-   if (copy_to_user
-   ((void __user *)req->data, msgbuf, req->len)) {
-   result = -EFAULT;
-   }
+   result = p80211req_dorequest(wlandev, msgbuf);
+
+   if (result == 0) {
+   if (copy_to_user
+   ((void __user *)req->data, msgbuf, req->len)) {
+   result = -EFAULT;
}
-   kfree(msgbuf);
-   } else {
-   result = -ENOMEM;
}
+   kfree(msgbuf);
+
 bail:
/* If allocate,copyfrom or copyto fails, return errno */
return result;
-- 
2.26.2



[PATCH] staging:r8188eu: use IEEE80211_FCTL_* kernel definitions

2021-02-13 Thread Ivan Safonov
_TO_DS_, _FROM_DS_, _MORE_FRAG_, _RETRY_, _PWRMGT_, _MORE_DATA_,
_PRIVACY_, _ORDER_ definitions are duplicate IEEE80211_FCTL_*
kernel definitions.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/include/wifi.h | 51 ++--
 1 file changed, 21 insertions(+), 30 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/wifi.h 
b/drivers/staging/rtl8188eu/include/wifi.h
index d0380f7f1bab..1b9006879a11 100644
--- a/drivers/staging/rtl8188eu/include/wifi.h
+++ b/drivers/staging/rtl8188eu/include/wifi.h
@@ -88,73 +88,64 @@ enum WIFI_REG_DOMAIN {
DOMAIN_MAX
 };
 
-#define _TO_DS_BIT(8)
-#define _FROM_DS_  BIT(9)
-#define _MORE_FRAG_BIT(10)
-#define _RETRY_BIT(11)
-#define _PWRMGT_   BIT(12)
-#define _MORE_DATA_BIT(13)
-#define _PRIVACY_  BIT(14)
-#define _ORDER_BIT(15)
-
 #define SetToDs(pbuf)  \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_TO_DS_)
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_TODS)
 
-#define GetToDs(pbuf)  (((*(__le16 *)(pbuf)) & cpu_to_le16(_TO_DS_)) != 0)
+#define GetToDs(pbuf)  (((*(__le16 *)(pbuf)) & 
cpu_to_le16(IEEE80211_FCTL_TODS)) != 0)
 
 #define ClearToDs(pbuf)\
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_TO_DS_))
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_TODS))
 
 #define SetFrDs(pbuf)  \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_FROM_DS_)
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_FROMDS)
 
-#define GetFrDs(pbuf)  (((*(__le16 *)(pbuf)) & cpu_to_le16(_FROM_DS_)) != 0)
+#define GetFrDs(pbuf)  (((*(__le16 *)(pbuf)) & 
cpu_to_le16(IEEE80211_FCTL_FROMDS)) != 0)
 
 #define ClearFrDs(pbuf)\
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_FROM_DS_))
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_FROMDS))
 
 #define get_tofr_ds(pframe)((GetToDs(pframe) << 1) | GetFrDs(pframe))
 
 #define SetMFrag(pbuf) \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_MORE_FRAG_)
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)
 
-#define GetMFrag(pbuf) (((*(__le16 *)(pbuf)) & cpu_to_le16(_MORE_FRAG_)) != 0)
+#define GetMFrag(pbuf) (((*(__le16 *)(pbuf)) & 
cpu_to_le16(IEEE80211_FCTL_MOREFRAGS)) != 0)
 
 #define ClearMFrag(pbuf)   \
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_FRAG_))
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_MOREFRAGS))
 
 #define SetRetry(pbuf) \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_RETRY_)
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_RETRY)
 
-#define GetRetry(pbuf) (((*(__le16 *)(pbuf)) & cpu_to_le16(_RETRY_)) != 0)
+#define GetRetry(pbuf) (((*(__le16 *)(pbuf)) & 
cpu_to_le16(IEEE80211_FCTL_RETRY)) != 0)
 
 #define ClearRetry(pbuf)   \
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_RETRY_))
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_RETRY))
 
 #define SetPwrMgt(pbuf)\
-   *(__le16 *)(pbuf) |= cpu_to_le16(_PWRMGT_)
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PM)
 
-#define GetPwrMgt(pbuf)(((*(__le16 *)(pbuf)) & cpu_to_le16(_PWRMGT_)) 
!= 0)
+#define GetPwrMgt(pbuf)(((*(__le16 *)(pbuf)) & 
cpu_to_le16(IEEE80211_FCTL_PM)) != 0)
 
 #define ClearPwrMgt(pbuf)  \
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_PWRMGT_))
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_PM))
 
 #define SetMData(pbuf) \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_MORE_DATA_)
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_MOREDATA)
 
-#define GetMData(pbuf) (((*(__le16 *)(pbuf)) & cpu_to_le16(_MORE_DATA_)) != 0)
+#define GetMData(pbuf) (((*(__le16 *)(pbuf)) & 
cpu_to_le16(IEEE80211_FCTL_MOREDATA)) != 0)
 
 #define ClearMData(pbuf)   \
-   *(__le16 *)(pbuf) &= (~cpu_to_le16(_MORE_DATA_))
+   *(__le16 *)(pbuf) &= (~cpu_to_le16(IEEE80211_FCTL_MOREDATA))
 
 #define SetPrivacy(pbuf)   \
-   *(__le16 *)(pbuf) |= cpu_to_le16(_PRIVACY_)
+   *(__le16 *)(pbuf) |= cpu_to_le16(IEEE80211_FCTL_PROTECTED)
 
 #define GetPrivacy(pbuf)   \
-   (((*(__le16 *)(pbuf)) & cpu_to_le16(_PRIVACY_)) != 0)
+   (((*(__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_PROTECTED)) != 0)
 
 #define GetOrder(pbuf) \
-   (((*(__le16 *)(pbuf)) & cpu_to_le16(_ORDER_)) != 0)
+   (((*(__le16 *)(pbuf)) & cpu_to_le16(IEEE80211_FCTL_ORDER)) != 0)
 
 #define GetFrameType(pbuf) \
(le16_to_cpu(*(__le16 *)(pbuf)) & (BIT(3) | BIT(2)))
-- 
2.26.2



[PATCH] staging:r8188eu: replace enum WIFI_STATUS_CODE with native kernel definitions

2021-01-31 Thread Ivan Safonov
Driver and kernel definitions are equal.
Avoid code duplication, improve readability.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 44 +--
 drivers/staging/rtl8188eu/include/wifi.h  | 14 --
 2 files changed, 22 insertions(+), 36 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c 
b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
index 8794907a39f4..ebd9b96a8211 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
@@ -779,7 +779,7 @@ static void issue_auth(struct adapter *padapter, struct 
sta_info *psta,
/*  setting auth algo number */
val16 = (u16)psta->authalg;
 
-   if (status != _STATS_SUCCESSFUL_)
+   if (status != WLAN_STATUS_SUCCESS)
val16 = 0;
 
if (val16) {
@@ -2675,13 +2675,13 @@ static unsigned int OnAuth(struct adapter *padapter,
DBG_88E("auth rejected due to bad alg [alg=%d, auth_mib=%d] 
%02X%02X%02X%02X%02X%02X\n",
algorithm, auth_mode, sa[0], sa[1], sa[2], sa[3], 
sa[4], sa[5]);
 
-   status = _STATS_NO_SUPP_ALG_;
+   status = WLAN_STATUS_NOT_SUPPORTED_AUTH_ALG;
 
goto auth_fail;
}
 
if (!rtw_access_ctrl(padapter, sa)) {
-   status = _STATS_UNABLE_HANDLE_STA_;
+   status = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA;
goto auth_fail;
}
 
@@ -2692,7 +2692,7 @@ static unsigned int OnAuth(struct adapter *padapter,
pstat = rtw_alloc_stainfo(pstapriv, sa);
if (!pstat) {
DBG_88E(" Exceed the upper limit of supported 
clients...\n");
-   status = _STATS_UNABLE_HANDLE_STA_;
+   status = WLAN_STATUS_AP_UNABLE_TO_HANDLE_NEW_STA;
goto auth_fail;
}
 
@@ -2724,7 +2724,7 @@ static unsigned int OnAuth(struct adapter *padapter,
if ((pstat->auth_seq + 1) != seq) {
DBG_88E("(1)auth rejected because out of seq [rx_seq=%d, 
exp_seq=%d]!\n",
seq, pstat->auth_seq + 1);
-   status = _STATS_OUT_OF_AUTH_SEQ_;
+   status = WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION;
goto auth_fail;
}
 
@@ -2737,7 +2737,7 @@ static unsigned int OnAuth(struct adapter *padapter,
} else {
DBG_88E("(2)auth rejected because out of seq 
[rx_seq=%d, exp_seq=%d]!\n",
seq, pstat->auth_seq + 1);
-   status = _STATS_OUT_OF_AUTH_SEQ_;
+   status = WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION;
goto auth_fail;
}
} else { /*  shared system or auto authentication */
@@ -2757,7 +2757,7 @@ static unsigned int OnAuth(struct adapter *padapter,
 
if (!p || ie_len <= 0) {
DBG_88E("auth rejected because challenge 
failure!(1)\n");
-   status = _STATS_CHALLENGE_FAIL_;
+   status = WLAN_STATUS_CHALLENGE_FAIL;
goto auth_fail;
}
 
@@ -2768,13 +2768,13 @@ static unsigned int OnAuth(struct adapter *padapter,
pstat->expire_to =  pstapriv->assoc_to;
} else {
DBG_88E("auth rejected because challenge 
failure!\n");
-   status = _STATS_CHALLENGE_FAIL_;
+   status = WLAN_STATUS_CHALLENGE_FAIL;
goto auth_fail;
}
} else {
DBG_88E("(3)auth rejected because out of seq 
[rx_seq=%d, exp_seq=%d]!\n",
seq, pstat->auth_seq + 1);
-   status = _STATS_OUT_OF_AUTH_SEQ_;
+   status = WLAN_STATUS_UNKNOWN_AUTH_TRANSACTION;
goto auth_fail;
}
}
@@ -2782,7 +2782,7 @@ static unsigned int OnAuth(struct adapter *padapter,
/*  Now, we are going to issue_auth... */
pstat->auth_seq = seq + 1;
 
-   issue_auth(padapter, pstat, (unsigned short)(_STATS_SUCCESSFUL_));
+   issue_auth(padapter, pstat, (unsigned short)(WLAN_STATUS_SUCCESS));
 
if (pstat->state & WIFI_FW_AUTH_SUCCESS)
pstat->auth_seq = 0;
@@ -2892,7 +2892,7 @@ static unsigned int OnAssocReq(struct adapter *padapter,
int i, wpa_ie_len, left;
unsigned char supportRate[16];
int supportRateNum;
-   unsigned short status = _STATS_SUCCESSFUL_;
+   unsigned short status = WLAN_STATUS_SUCCESS;
  

[PATCH] staging:rtl8712: remove unused enum WIFI_STATUS_CODE

2021-01-31 Thread Ivan Safonov
Improve readability.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8712/wifi.h | 14 --
 1 file changed, 14 deletions(-)

diff --git a/drivers/staging/rtl8712/wifi.h b/drivers/staging/rtl8712/wifi.h
index 601d4ff607bc..1b32b3510093 100644
--- a/drivers/staging/rtl8712/wifi.h
+++ b/drivers/staging/rtl8712/wifi.h
@@ -101,20 +101,6 @@ enum WIFI_REASON_CODE  {
_RSON_PMK_NOT_AVAILABLE_= 24,
 };
 
-enum WIFI_STATUS_CODE {
-   _STATS_SUCCESSFUL_  = 0,
-   _STATS_FAILURE_ = 1,
-   _STATS_CAP_FAIL_= 10,
-   _STATS_NO_ASOC_ = 11,
-   _STATS_OTHER_   = 12,
-   _STATS_NO_SUPP_ALG_ = 13,
-   _STATS_OUT_OF_AUTH_SEQ_ = 14,
-   _STATS_CHALLENGE_FAIL_  = 15,
-   _STATS_AUTH_TIMEOUT_= 16,
-   _STATS_UNABLE_HANDLE_STA_   = 17,
-   _STATS_RATE_FAIL_   = 18,
-};
-
 enum WIFI_REG_DOMAIN {
DOMAIN_FCC  = 1,
DOMAIN_IC   = 2,
-- 
2.26.2



[PATCH] staging: r8188eu: inline rtw_init_netdev_name()

2020-10-18 Thread Ivan Safonov
The rtw_init_netdev_name() is a small function
that is used once and does not encapsulate any logic.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/include/osdep_intf.h | 1 -
 drivers/staging/rtl8188eu/os_dep/os_intfs.c| 9 -
 drivers/staging/rtl8188eu/os_dep/usb_intf.c| 6 +-
 3 files changed, 5 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/osdep_intf.h 
b/drivers/staging/rtl8188eu/include/osdep_intf.h
index 07c32768f649..5ee4ed995025 100644
--- a/drivers/staging/rtl8188eu/include/osdep_intf.h
+++ b/drivers/staging/rtl8188eu/include/osdep_intf.h
@@ -23,7 +23,6 @@ void rtw_cancel_all_timer(struct adapter *padapter);
 
 int rtw_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
 
-int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname);
 struct net_device *rtw_init_netdev(struct adapter *padapter);
 u16 rtw_recv_select_queue(struct sk_buff *skb);
 
diff --git a/drivers/staging/rtl8188eu/os_dep/os_intfs.c 
b/drivers/staging/rtl8188eu/os_dep/os_intfs.c
index e291df87f620..c80d30f31869 100644
--- a/drivers/staging/rtl8188eu/os_dep/os_intfs.c
+++ b/drivers/staging/rtl8188eu/os_dep/os_intfs.c
@@ -292,15 +292,6 @@ static const struct net_device_ops rtw_netdev_ops = {
.ndo_do_ioctl = rtw_ioctl,
 };
 
-int rtw_init_netdev_name(struct net_device *pnetdev, const char *ifname)
-{
-   if (dev_alloc_name(pnetdev, ifname) < 0)
-   RT_TRACE(_module_os_intfs_c_, _drv_err_, ("dev_alloc_name, 
fail!\n"));
-
-   netif_carrier_off(pnetdev);
-   return 0;
-}
-
 static const struct device_type wlan_type = {
.name = "wlan",
 };
diff --git a/drivers/staging/rtl8188eu/os_dep/usb_intf.c 
b/drivers/staging/rtl8188eu/os_dep/usb_intf.c
index 99bfc828672c..43ebd11b53fe 100644
--- a/drivers/staging/rtl8188eu/os_dep/usb_intf.c
+++ b/drivers/staging/rtl8188eu/os_dep/usb_intf.c
@@ -390,7 +390,11 @@ static struct adapter *rtw_usb_if1_init(struct dvobj_priv 
*dvobj,
pr_debug("can't get autopm:\n");
 
/*  alloc dev name after read efuse. */
-   rtw_init_netdev_name(pnetdev, padapter->registrypriv.ifname);
+   if (dev_alloc_name(pnetdev, padapter->registrypriv.ifname) < 0)
+   RT_TRACE(_module_os_intfs_c_, _drv_err_, ("dev_alloc_name, 
fail!\n"));
+
+   netif_carrier_off(pnetdev);
+
rtw_macaddr_cfg(padapter->eeprompriv.mac_addr);
memcpy(pnetdev->dev_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);
pr_debug("MAC Address from pnetdev->dev_addr =  %pM\n",
-- 
2.26.2



[PATCH] staging: rtl8723bs: remove unnecessary type cast of rtw_netdev_priv() result

2020-10-11 Thread Ivan Safonov
The type cast
padapter = (struct adapter *)rtw_netdev_priv(dev);
do nothing because type of rtw_netdev_priv() result
is (struct adapter *).

Signed-off-by: Ivan Safonov 
---
 .../staging/rtl8723bs/core/rtw_wlan_util.c|   6 +-
 .../staging/rtl8723bs/os_dep/ioctl_cfg80211.c |  50 
 .../staging/rtl8723bs/os_dep/ioctl_linux.c| 116 +-
 drivers/staging/rtl8723bs/os_dep/os_intfs.c   |  12 +-
 drivers/staging/rtl8723bs/os_dep/xmit_linux.c |   2 +-
 5 files changed, 93 insertions(+), 93 deletions(-)

diff --git a/drivers/staging/rtl8723bs/core/rtw_wlan_util.c 
b/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
index 372ce17c3569..e3e8140eec9e 100644
--- a/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
+++ b/drivers/staging/rtl8723bs/core/rtw_wlan_util.c
@@ -2010,7 +2010,7 @@ int rtw_get_gpio(struct net_device *netdev, int gpio_num)
 {
u8 value;
u8 direction;
-   struct adapter *adapter = (struct adapter *)rtw_netdev_priv(netdev);
+   struct adapter *adapter = rtw_netdev_priv(netdev);
struct pwrctrl_priv *pwrpriv = adapter_to_pwrctl(adapter);
 
rtw_ps_deny(adapter, PS_DENY_IOCTL);
@@ -2038,7 +2038,7 @@ int  rtw_set_gpio_output_value(struct net_device *netdev, 
int gpio_num, bool isH
 {
u8 direction = 0;
u8 res = -1;
-   struct adapter *adapter = (struct adapter *)rtw_netdev_priv(netdev);
+   struct adapter *adapter = rtw_netdev_priv(netdev);
 
/* Check GPIO is 4~7 */
if (gpio_num > 7 || gpio_num < 4) {
@@ -2074,7 +2074,7 @@ EXPORT_SYMBOL(rtw_set_gpio_output_value);
 
 int rtw_config_gpio(struct net_device *netdev, int gpio_num, bool isOutput)
 {
-   struct adapter *adapter = (struct adapter *)rtw_netdev_priv(netdev);
+   struct adapter *adapter = rtw_netdev_priv(netdev);
 
if (gpio_num > 7 || gpio_num < 4) {
DBG_871X("%s The gpio number does not included 4~7.\n", 
__func__);
diff --git a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c 
b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
index ea3ae3d38337..9bb97c39f1a2 100644
--- a/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
+++ b/drivers/staging/rtl8723bs/os_dep/ioctl_cfg80211.c
@@ -561,7 +561,7 @@ static int rtw_cfg80211_ap_set_encryption(struct net_device 
*dev, struct ieee_pa
int ret = 0;
u32 wep_key_idx, wep_key_len;
struct sta_info *psta = NULL, *pbcmc_sta = NULL;
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
+   struct adapter *padapter = rtw_netdev_priv(dev);
struct mlme_priv *pmlmepriv = >mlmepriv;
struct security_priv* psecuritypriv =  &(padapter->securitypriv);
struct sta_priv *pstapriv = >stapriv;
@@ -847,7 +847,7 @@ static int rtw_cfg80211_set_encryption(struct net_device 
*dev, struct ieee_param
 {
int ret = 0;
u32 wep_key_idx, wep_key_len;
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
+   struct adapter *padapter = rtw_netdev_priv(dev);
struct mlme_priv *pmlmepriv = >mlmepriv;
struct security_priv *psecuritypriv = >securitypriv;
 
@@ -1039,7 +1039,7 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, 
struct net_device *ndev,
u32 param_len;
struct ieee_param *param = NULL;
int ret = 0;
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(ndev);
+   struct adapter *padapter = rtw_netdev_priv(ndev);
struct mlme_priv *pmlmepriv = >mlmepriv;
 
DBG_871X(FUNC_NDEV_FMT" adding key for %pM\n", FUNC_NDEV_ARG(ndev), 
mac_addr);
@@ -1149,7 +1149,7 @@ static int cfg80211_rtw_get_key(struct wiphy *wiphy, 
struct net_device *ndev,
 static int cfg80211_rtw_del_key(struct wiphy *wiphy, struct net_device *ndev,
u8 key_index, bool pairwise, const u8 *mac_addr)
 {
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(ndev);
+   struct adapter *padapter = rtw_netdev_priv(ndev);
struct security_priv *psecuritypriv = >securitypriv;
 
DBG_871X(FUNC_NDEV_FMT" key_index =%d\n", FUNC_NDEV_ARG(ndev), 
key_index);
@@ -1168,7 +1168,7 @@ static int cfg80211_rtw_set_default_key(struct wiphy 
*wiphy,
, bool unicast, bool multicast
)
 {
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(ndev);
+   struct adapter *padapter = rtw_netdev_priv(ndev);
struct security_priv *psecuritypriv = >securitypriv;
 
DBG_871X(FUNC_NDEV_FMT" key_index =%d, unicast =%d, multicast =%d\n",
@@ -1201,7 +1201,7 @@ static int cfg80211_rtw_get_station(struct wiphy *wiphy,
struct station_info *sinfo)
 {
int ret = 0;
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(ndev);
+   struct adapter *padapter = rtw_netdev_priv(ndev);
struct mlme_priv *pmlmepriv = >mlmepriv;
struct sta_

[PATCH] staging: r8188eu: use native wireless IE codes from linux/ieee80211.h

2020-10-11 Thread Ivan Safonov
IE code definitions have been replaced with native ones
to avoid code duplication.

The unobvious substitutions are:
_SSN_IE_1_ -> WLAN_EID_VENDOR_SPECIFIC;
_WPA_IE_ID_ -> WLAN_EID_VENDOR_SPECIFIC;
_WPA2_IE_ID_ -> WLAN_EID_RSN.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_ap.c   |  54 
 drivers/staging/rtl8188eu/core/rtw_cmd.c  |   2 +-
 .../staging/rtl8188eu/core/rtw_ieee80211.c|  36 +++---
 .../staging/rtl8188eu/core/rtw_ioctl_set.c|   2 +-
 drivers/staging/rtl8188eu/core/rtw_mlme.c |  18 +--
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 122 +-
 drivers/staging/rtl8188eu/core/rtw_recv.c |   4 +-
 .../staging/rtl8188eu/core/rtw_wlan_util.c|  24 ++--
 drivers/staging/rtl8188eu/core/rtw_xmit.c |  10 +-
 drivers/staging/rtl8188eu/hal/rtl8188e_cmd.c  |  10 +-
 .../staging/rtl8188eu/include/rtw_security.h  |   3 -
 drivers/staging/rtl8188eu/include/wifi.h  |  34 -
 .../staging/rtl8188eu/os_dep/ioctl_linux.c|  10 +-
 drivers/staging/rtl8188eu/os_dep/mlme_linux.c |   2 +-
 14 files changed, 147 insertions(+), 184 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c 
b/drivers/staging/rtl8188eu/core/rtw_ap.c
index 2078d87055bf..fa1e34a0d456 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ap.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ap.c
@@ -67,7 +67,7 @@ static void update_BCNTIM(struct adapter *padapter)
uint offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
 
/* update TIM IE */
-   p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, _TIM_IE_, _ielen,
+   p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, WLAN_EID_TIM, _ielen,
   pnetwork_mlmeext->ie_length - _FIXED_IE_LENGTH_);
if (p && tim_ielen > 0) {
tim_ielen += 2;
@@ -85,7 +85,7 @@ static void update_BCNTIM(struct adapter *padapter)
offset += pnetwork_mlmeext->ssid.ssid_length + 2;
 
/*  get supported rates len */
-   p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_,
+   p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, WLAN_EID_SUPP_RATES,
   _len, (pnetwork_mlmeext->ie_length -
  _BEACON_IE_OFFSET_));
if (p)
@@ -109,7 +109,7 @@ static void update_BCNTIM(struct adapter *padapter)
memcpy(pbackup_remainder_ie, premainder_ie,
   remainder_ielen);
}
-   *dst_ie++ = _TIM_IE_;
+   *dst_ie++ = WLAN_EID_TIM;
 
if ((pstapriv->tim_bitmap & 0xff00) && (pstapriv->tim_bitmap & 0x00fc))
tim_ielen = 5;
@@ -243,7 +243,7 @@ void expire_timeout_chk(struct adapter *padapter)
 * for this station
 */
pstapriv->tim_bitmap |= BIT(psta->aid);
-   update_beacon(padapter, _TIM_IE_, NULL,
+   update_beacon(padapter, WLAN_EID_TIM, 
NULL,
  false);
 
if (!pmlmeext->active_keep_alive_check)
@@ -671,7 +671,7 @@ static void start_bss_network(struct adapter *padapter, u8 
*pbuf)
}
/* set channel, bwmode */
p = rtw_get_ie(pnetwork->ies + sizeof(struct ndis_802_11_fixed_ie),
-  _HT_ADD_INFO_IE_, _len,
+   WLAN_EID_HT_OPERATION, _len,
   pnetwork->ie_length -
   sizeof(struct ndis_802_11_fixed_ie));
if (p && ie_len) {
@@ -717,7 +717,7 @@ static void start_bss_network(struct adapter *padapter, u8 
*pbuf)
memcpy(pnetwork_mlmeext, pnetwork, pnetwork->Length);
 
if (pmlmeext->bstart_bss) {
-   update_beacon(padapter, _TIM_IE_, NULL, false);
+   update_beacon(padapter, WLAN_EID_TIM, NULL, false);
 
/* issue beacon frame */
if (send_beacon(padapter) == _FAIL)
@@ -788,7 +788,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 
*pbuf,  int len)
cap = get_unaligned_le16(ie);
 
/* SSID */
-   p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SSID_IE_, _len,
+   p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, WLAN_EID_SSID, _len,
   pbss_network->ie_length - _BEACON_IE_OFFSET_);
if (p && ie_len > 0) {
memset(_network->ssid, 0, sizeof(struct ndis_802_11_ssid));
@@ -799,7 +799,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 
*pbuf,  int len)
/* channel */
channel = 0;
pbss_network->Configuration.Length = 0;
-   p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _DSSET_IE_, _len,
+   p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, WLAN_EID_DS_PARAMS, _len,

[PATCH] staging: r8188eu: remove unnecessary type casts (struct wlan_bssid_ex *)

2020-10-04 Thread Ivan Safonov
Reduce line length, simplify refactoring.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_ap.c   | 10 +-
 drivers/staging/rtl8188eu/core/rtw_cmd.c  |  4 ++--
 drivers/staging/rtl8188eu/core/rtw_mlme.c |  2 +-
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 20 +--
 .../staging/rtl8188eu/core/rtw_wlan_util.c|  4 ++--
 5 files changed, 20 insertions(+), 20 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c 
b/drivers/staging/rtl8188eu/core/rtw_ap.c
index 41535441f82c..2078d87055bf 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ap.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ap.c
@@ -422,7 +422,7 @@ static void update_bmc_sta(struct adapter *padapter)
int i, supportRateNum = 0;
unsigned int tx_ra_bitmap = 0;
struct mlme_priv *pmlmepriv = >mlmepriv;
-   struct wlan_bssid_ex *pcur_network = (struct wlan_bssid_ex 
*)>cur_network.network;
+   struct wlan_bssid_ex *pcur_network = >cur_network.network;
struct sta_info *psta = rtw_get_bcmc_stainfo(padapter);
 
if (psta) {
@@ -599,7 +599,7 @@ static void start_bss_network(struct adapter *padapter, u8 
*pbuf)
struct registry_priv *pregpriv = >registrypriv;
struct mlme_priv *pmlmepriv = >mlmepriv;
struct security_priv *psecuritypriv = >securitypriv;
-   struct wlan_bssid_ex *pnetwork = (struct wlan_bssid_ex 
*)>cur_network.network;
+   struct wlan_bssid_ex *pnetwork = >cur_network.network;
struct mlme_ext_priv*pmlmeext = >mlmeextpriv;
struct mlme_ext_info*pmlmeinfo = >mlmext_info;
struct wlan_bssid_ex *pnetwork_mlmeext = >network;
@@ -711,7 +711,7 @@ static void start_bss_network(struct adapter *padapter, u8 
*pbuf)
update_wireless_mode(padapter);
 
/* update capability after cur_wireless_mode updated */
-   update_capinfo(padapter, rtw_get_capability((struct wlan_bssid_ex 
*)pnetwork));
+   update_capinfo(padapter, rtw_get_capability(pnetwork));
 
/* let pnetwork_mlmeext == pnetwork_mlme. */
memcpy(pnetwork_mlmeext, pnetwork, pnetwork->Length);
@@ -745,7 +745,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 
*pbuf,  int len)
struct registry_priv *pregistrypriv = >registrypriv;
struct security_priv *psecuritypriv = >securitypriv;
struct mlme_priv *pmlmepriv = >mlmepriv;
-   struct wlan_bssid_ex *pbss_network = (struct wlan_bssid_ex 
*)>cur_network.network;
+   struct wlan_bssid_ex *pbss_network = >cur_network.network;
u8 *ie = pbss_network->ies;
 
/* SSID */
@@ -982,7 +982,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 
*pbuf,  int len)
HT_info_handler(padapter, (struct ndis_802_11_var_ie 
*)pHT_info_ie);
}
 
-   pbss_network->Length = get_wlan_bssid_ex_sz((struct wlan_bssid_ex  
*)pbss_network);
+   pbss_network->Length = get_wlan_bssid_ex_sz(pbss_network);
 
/* issue beacon to start bss network */
start_bss_network(padapter, (u8 *)pbss_network);
diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c 
b/drivers/staging/rtl8188eu/core/rtw_cmd.c
index a97d50081071..5c300865eeb3 100644
--- a/drivers/staging/rtl8188eu/core/rtw_cmd.c
+++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c
@@ -330,7 +330,7 @@ u8 rtw_createbss_cmd(struct adapter  *padapter)
INIT_LIST_HEAD(>list);
pcmd->cmdcode = _CreateBss_CMD_;
pcmd->parmbuf = (unsigned char *)pdev_network;
-   pcmd->cmdsz = get_wlan_bssid_ex_sz((struct wlan_bssid_ex 
*)pdev_network);
+   pcmd->cmdsz = get_wlan_bssid_ex_sz(pdev_network);
pcmd->rsp = NULL;
pcmd->rspsz = 0;
pdev_network->Length = pcmd->cmdsz;
@@ -387,7 +387,7 @@ u8 rtw_joinbss_cmd(struct adapter  *padapter, struct 
wlan_network *pnetwork)
}
}
 
-   psecnetwork = (struct wlan_bssid_ex *)>sec_bss;
+   psecnetwork = >sec_bss;
if (!psecnetwork) {
kfree(pcmd);
 
diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme.c 
b/drivers/staging/rtl8188eu/core/rtw_mlme.c
index 14be5a703615..9d12f92994b3 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme.c
@@ -1815,7 +1815,7 @@ void rtw_update_registrypriv_dev_network(struct adapter 
*adapter)
 
sz = rtw_generate_ie(pregistrypriv);
pdev_network->ie_length = sz;
-   pdev_network->Length = get_wlan_bssid_ex_sz((struct wlan_bssid_ex  
*)pdev_network);
+   pdev_network->Length = get_wlan_bssid_ex_sz(pdev_network);
 
/* notes: translate ie_length & Length after assign the Length to cmdsz 
in createbss_cmd(); */
/* pdev_network->ie_length = cpu_to_le32(sz); */
diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c 
b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
index 5ca8a2b158d7.

[PATCH] staging:r8188eu: replace WIFI_REASON_CODE enum with native ieee80211_reasoncode

2020-09-19 Thread Ivan Safonov
WIFI_REASON_CODE is duplication of enum ieee80211_reasoncode.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c |  4 +--
 drivers/staging/rtl8188eu/include/wifi.h  | 31 ---
 2 files changed, 2 insertions(+), 33 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c 
b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
index 4df790c83d9f..cef15cb937d2 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
@@ -2929,7 +2929,7 @@ static unsigned int OnAssocReq(struct adapter *padapter,
 
pstat = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
if (!pstat) {
-   status = _RSON_CLS2_;
+   status = WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA;
goto asoc_class2_error;
}
 
@@ -2943,7 +2943,7 @@ static unsigned int OnAssocReq(struct adapter *padapter,
/*  check if this stat has been successfully authenticated/assocated */
if (!((pstat->state) & WIFI_FW_AUTH_SUCCESS)) {
if (!((pstat->state) & WIFI_FW_ASSOC_SUCCESS)) {
-   status = _RSON_CLS2_;
+   status = WLAN_REASON_CLASS2_FRAME_FROM_NONAUTH_STA;
goto asoc_class2_error;
} else {
pstat->state &= (~WIFI_FW_ASSOC_SUCCESS);
diff --git a/drivers/staging/rtl8188eu/include/wifi.h 
b/drivers/staging/rtl8188eu/include/wifi.h
index a549b6d0159a..757c582ba4d9 100644
--- a/drivers/staging/rtl8188eu/include/wifi.h
+++ b/drivers/staging/rtl8188eu/include/wifi.h
@@ -74,37 +74,6 @@ enum WIFI_FRAME_SUBTYPE {
WIFI_QOS_DATA_NULL  = (BIT(6) | WIFI_QOS_DATA_TYPE),
 };
 
-enum WIFI_REASON_CODE  {
-   _RSON_RESERVED_ = 0,
-   _RSON_UNSPECIFIED_  = 1,
-   _RSON_AUTH_NO_LONGER_VALID_ = 2,
-   _RSON_DEAUTH_STA_LEAVING_   = 3,
-   _RSON_INACTIVITY_   = 4,
-   _RSON_UNABLE_HANDLE_= 5,
-   _RSON_CLS2_ = 6,
-   _RSON_CLS3_ = 7,
-   _RSON_DISAOC_STA_LEAVING_   = 8,
-   _RSON_ASOC_NOT_AUTH_= 9,
-
-   /*  WPA reason */
-   _RSON_INVALID_IE_   = 13,
-   _RSON_MIC_FAILURE_  = 14,
-   _RSON_4WAY_HNDSHK_TIMEOUT_  = 15,
-   _RSON_GROUP_KEY_UPDATE_TIMEOUT_ = 16,
-   _RSON_DIFF_IE_  = 17,
-   _RSON_MLTCST_CIPHER_NOT_VALID_  = 18,
-   _RSON_UNICST_CIPHER_NOT_VALID_  = 19,
-   _RSON_AKMP_NOT_VALID_   = 20,
-   _RSON_UNSUPPORT_RSNE_VER_   = 21,
-   _RSON_INVALID_RSNE_CAP_ = 22,
-   _RSON_IEEE_802DOT1X_AUTH_FAIL_  = 23,
-
-   /* belowing are Realtek definition */
-   _RSON_PMK_NOT_AVAILABLE_= 24,
-   _RSON_TDLS_TEAR_TOOFAR_ = 25,
-   _RSON_TDLS_TEAR_UN_RSN_ = 26,
-};
-
 enum WIFI_STATUS_CODE {
_STATS_SUCCESSFUL_  = 0,
_STATS_FAILURE_ = 1,
-- 
2.26.2



[PATCH] wireless: rtw88: rtw8822c: eliminate code duplication, use native swap() function

2020-09-13 Thread Ivan Safonov
swap_u32() duplicate native swap(), so replace swap_u32() with swap().

Signed-off-by: Ivan Safonov 
---
 drivers/net/wireless/realtek/rtw88/rtw8822c.c | 15 +++
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtw88/rtw8822c.c 
b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
index 426808413baa..e196d7939025 100644
--- a/drivers/net/wireless/realtek/rtw88/rtw8822c.c
+++ b/drivers/net/wireless/realtek/rtw88/rtw8822c.c
@@ -154,25 +154,16 @@ static void rtw8822c_rf_minmax_cmp(struct rtw_dev 
*rtwdev, u32 value,
}
 }
 
-static void swap_u32(u32 *v1, u32 *v2)
-{
-   u32 tmp;
-
-   tmp = *v1;
-   *v1 = *v2;
-   *v2 = tmp;
-}
-
 static void __rtw8822c_dac_iq_sort(struct rtw_dev *rtwdev, u32 *v1, u32 *v2)
 {
if (*v1 >= 0x200 && *v2 >= 0x200) {
if (*v1 > *v2)
-   swap_u32(v1, v2);
+   swap(*v1, *v2);
} else if (*v1 < 0x200 && *v2 < 0x200) {
if (*v1 > *v2)
-   swap_u32(v1, v2);
+   swap(*v1, *v2);
} else if (*v1 < 0x200 && *v2 >= 0x200) {
-   swap_u32(v1, v2);
+   swap(*v1, *v2);
}
 }
 
-- 
2.26.2



[PATCH] staging: r8188eu: replace enum rtw_ieee80211_spectrum_mgmt_actioncode with ieee80211_spectrum_mgmt_actioncode

2020-09-06 Thread Ivan Safonov
Enum rtw_ieee80211_spectrum_mgmt_actioncode is a duplication
of ieee80211_spectrum_mgmt_actioncode from include/linux/ieee80211.h.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c | 10 +-
 drivers/staging/rtl8188eu/include/ieee80211.h | 10 --
 2 files changed, 5 insertions(+), 15 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c 
b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
index 98b1ba2e489f..0eaf81e83ddc 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
@@ -3546,12 +3546,12 @@ static unsigned int on_action_spct(struct adapter 
*padapter,
 
action = frame_body[1];
switch (action) {
-   case RTW_WLAN_ACTION_SPCT_MSR_REQ:
-   case RTW_WLAN_ACTION_SPCT_MSR_RPRT:
-   case RTW_WLAN_ACTION_SPCT_TPC_REQ:
-   case RTW_WLAN_ACTION_SPCT_TPC_RPRT:
+   case WLAN_ACTION_SPCT_MSR_REQ:
+   case WLAN_ACTION_SPCT_MSR_RPRT:
+   case WLAN_ACTION_SPCT_TPC_REQ:
+   case WLAN_ACTION_SPCT_TPC_RPRT:
break;
-   case RTW_WLAN_ACTION_SPCT_CHL_SWITCH:
+   case WLAN_ACTION_SPCT_CHL_SWITCH:
break;
default:
break;
diff --git a/drivers/staging/rtl8188eu/include/ieee80211.h 
b/drivers/staging/rtl8188eu/include/ieee80211.h
index 83218e7ec0a9..cb6940d2aeab 100644
--- a/drivers/staging/rtl8188eu/include/ieee80211.h
+++ b/drivers/staging/rtl8188eu/include/ieee80211.h
@@ -526,16 +526,6 @@ enum rtw_ieee80211_category {
RTW_WLAN_CATEGORY_P2P = 0x7f,/* P2P action frames */
 };
 
-/* SPECTRUM_MGMT action code */
-enum rtw_ieee80211_spectrum_mgmt_actioncode {
-   RTW_WLAN_ACTION_SPCT_MSR_REQ = 0,
-   RTW_WLAN_ACTION_SPCT_MSR_RPRT = 1,
-   RTW_WLAN_ACTION_SPCT_TPC_REQ = 2,
-   RTW_WLAN_ACTION_SPCT_TPC_RPRT = 3,
-   RTW_WLAN_ACTION_SPCT_CHL_SWITCH = 4,
-   RTW_WLAN_ACTION_SPCT_EXT_CHL_SWITCH = 5,
-};
-
 enum _PUBLIC_ACTION {
ACT_PUBLIC_BSSCOEXIST = 0, /*  20/40 BSS Coexistence */
ACT_PUBLIC_DSE_ENABLE = 1,
-- 
2.26.2



[PATCH] staging: r8188eu: remove unnecessary type cast of rtw_netdev_priv() result

2020-08-15 Thread Ivan Safonov
The type cast
padapter = (struct adapter *)rtw_netdev_priv(dev);
do nothing because type of rtw_netdev_priv() result
is (struct adapter *).

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_debug.c|  8 +-
 drivers/staging/rtl8188eu/core/rtw_pwrctrl.c  |  2 +-
 .../staging/rtl8188eu/os_dep/ioctl_linux.c| 88 +--
 drivers/staging/rtl8188eu/os_dep/os_intfs.c   | 10 +--
 .../staging/rtl8188eu/os_dep/rtw_android.c|  6 +-
 drivers/staging/rtl8188eu/os_dep/xmit_linux.c |  2 +-
 6 files changed, 58 insertions(+), 58 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_debug.c 
b/drivers/staging/rtl8188eu/core/rtw_debug.c
index fcc8bd1011e1..3c0d20cb9c6a 100644
--- a/drivers/staging/rtl8188eu/core/rtw_debug.c
+++ b/drivers/staging/rtl8188eu/core/rtw_debug.c
@@ -33,7 +33,7 @@ int proc_set_write_reg(struct file *file, const char __user 
*buffer,
   unsigned long count, void *data)
 {
struct net_device *dev = data;
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
+   struct adapter *padapter = rtw_netdev_priv(dev);
char tmp[32];
u32 addr, val, len;
 
@@ -75,7 +75,7 @@ int proc_get_read_reg(char *page, char **start,
  int *eof, void *data)
 {
struct net_device *dev = data;
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
+   struct adapter *padapter = rtw_netdev_priv(dev);
 
int len = 0;
 
@@ -135,7 +135,7 @@ int proc_get_adapter_state(char *page, char **start,
   int *eof, void *data)
 {
struct net_device *dev = data;
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
+   struct adapter *padapter = rtw_netdev_priv(dev);
int len = 0;
 
len += scnprintf(page + len, count - len, "bSurpriseRemoved=%d, 
bDriverStopped=%d\n",
@@ -150,7 +150,7 @@ int proc_get_best_channel(char *page, char **start,
  int *eof, void *data)
 {
struct net_device *dev = data;
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
+   struct adapter *padapter = rtw_netdev_priv(dev);
struct mlme_ext_priv *pmlmeext = >mlmeextpriv;
int len = 0;
u32 i, best_channel_24G = 1, index_24G = 0;
diff --git a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c 
b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c
index 39ca97411fd5..f74753c37a29 100644
--- a/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c
+++ b/drivers/staging/rtl8188eu/core/rtw_pwrctrl.c
@@ -84,7 +84,7 @@ static int rtw_hw_resume(struct adapter *padapter)
pwrpriv->bips_processing = true;
rtw_reset_drv_sw(padapter);
 
-   if (ips_netdrv_open((struct adapter *)rtw_netdev_priv(pnetdev)) != 
_SUCCESS) {
+   if (ips_netdrv_open(rtw_netdev_priv(pnetdev)) != _SUCCESS) {
mutex_unlock(>mutex_lock);
goto error_exit;
}
diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c 
b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
index 2e83d24fcb09..13f12edd81cd 100644
--- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
@@ -310,7 +310,7 @@ static char *translate_scan(struct adapter *padapter,
 
 static int wpa_set_auth_algs(struct net_device *dev, u32 value)
 {
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
+   struct adapter *padapter = rtw_netdev_priv(dev);
int ret = 0;
 
if ((value & AUTH_ALG_SHARED_KEY) && (value & AUTH_ALG_OPEN_SYSTEM)) {
@@ -344,7 +344,7 @@ static int wpa_set_encryption(struct net_device *dev, 
struct ieee_param *param,
int ret = 0;
u32 wep_key_idx, wep_key_len, wep_total_len;
struct ndis_802_11_wep   *pwep = NULL;
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
+   struct adapter *padapter = rtw_netdev_priv(dev);
struct mlme_priv*pmlmepriv = >mlmepriv;
struct security_priv *psecuritypriv = >securitypriv;
 
@@ -616,7 +616,7 @@ static int rtw_wx_get_name(struct net_device *dev,
 struct iw_request_info *info,
 union iwreq_data *wrqu, char *extra)
 {
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
+   struct adapter *padapter = rtw_netdev_priv(dev);
u32 ht_ielen = 0;
char *p;
u8 ht_cap = false;
@@ -668,7 +668,7 @@ static int rtw_wx_get_freq(struct net_device *dev,
 struct iw_request_info *info,
 union iwreq_data *wrqu, char *extra)
 {
-   struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
+   struct adapter *padapter = rtw_netdev_priv(dev);
struct  mlme_priv   *pmlmepriv = >mlmepriv;
struct wlan_bssid_ex  *pcur_bss = >cur_network.network;
 
@@ -689,7 +689,7 

[PATCH] staging: rtl8723bs: replace rtw_netdev_priv define with inline function

2020-08-02 Thread Ivan Safonov
The function guarantees type checking of arguments and return value.

Result of rtw_netdev_priv macro can be assigned to pointer
with incompatible type without warning. The function allow compiler
to perform this check.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8723bs/include/osdep_service_linux.h | 8 ++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/rtl8723bs/include/osdep_service_linux.h 
b/drivers/staging/rtl8723bs/include/osdep_service_linux.h
index 1710fa3eeb71..4a5bdb93e75d 100644
--- a/drivers/staging/rtl8723bs/include/osdep_service_linux.h
+++ b/drivers/staging/rtl8723bs/include/osdep_service_linux.h
@@ -129,8 +129,6 @@ static inline void rtw_netif_stop_queue(struct net_device 
*pnetdev)
 
 #define rtw_signal_process(pid, sig) kill_pid(find_vpid((pid)), (sig), 1)
 
-#define rtw_netdev_priv(netdev) (((struct rtw_netdev_priv_indicator 
*)netdev_priv(netdev))->priv)
-
 #define NDEV_FMT "%s"
 #define NDEV_ARG(ndev) ndev->name
 #define ADPT_FMT "%s"
@@ -144,6 +142,12 @@ struct rtw_netdev_priv_indicator {
void *priv;
u32 sizeof_priv;
 };
+
+static inline struct adapter *rtw_netdev_priv(struct net_device *netdev)
+{
+   return ((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv;
+}
+
 struct net_device *rtw_alloc_etherdev_with_old_priv(int sizeof_priv, void 
*old_priv);
 extern struct net_device * rtw_alloc_etherdev(int sizeof_priv);
 
-- 
2.26.2



[PATCH v3] staging: r8188eu: replace rtw_netdev_priv define with inline function

2020-08-01 Thread Ivan Safonov
The function guarantees type checking of arguments and return value.

Result of rtw_netdev_priv macro can be assigned to pointer
with incompatible type without warning. The function allow compiler
to perform this check.

Signed-off-by: Ivan Safonov 
---
Changes in v2:
  - add blank line after function definition;
  - improve commit message.

Changes in v3:
  - use proper argument name;
  - remove unnecessary parentheses.
---
 drivers/staging/rtl8188eu/include/osdep_service.h | 7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h 
b/drivers/staging/rtl8188eu/include/osdep_service.h
index 31d897f1d21f..b44d602e954a 100644
--- a/drivers/staging/rtl8188eu/include/osdep_service.h
+++ b/drivers/staging/rtl8188eu/include/osdep_service.h
@@ -71,8 +71,11 @@ struct rtw_netdev_priv_indicator {
 };
 struct net_device *rtw_alloc_etherdev_with_old_priv(void *old_priv);
 
-#define rtw_netdev_priv(netdev)\
-   (((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv)
+static inline struct adapter *rtw_netdev_priv(struct net_device *netdev)
+{
+   return ((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv;
+}
+
 void rtw_free_netdev(struct net_device *netdev);
 
 #define FUNC_NDEV_FMT "%s(%s)"
-- 
2.26.2



[PATCH v2] staging: r8188eu: replace rtw_netdev_priv define with inline function

2020-08-01 Thread Ivan Safonov
The function guarantees type checking of arguments and return value.

Result of rtw_netdev_priv macro can be assigned to pointer
with incompatible type without warning. The function allow compiler
to perform this check.

Signed-off-by: Ivan Safonov 
---
Changes in v2:
  - add blank line after function definition;
  - improve commit message.
---
 drivers/staging/rtl8188eu/include/osdep_service.h | 7 +--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h 
b/drivers/staging/rtl8188eu/include/osdep_service.h
index 31d897f1d21f..6ca79b5fb638 100644
--- a/drivers/staging/rtl8188eu/include/osdep_service.h
+++ b/drivers/staging/rtl8188eu/include/osdep_service.h
@@ -71,8 +71,11 @@ struct rtw_netdev_priv_indicator {
 };
 struct net_device *rtw_alloc_etherdev_with_old_priv(void *old_priv);
 
-#define rtw_netdev_priv(netdev)\
-   (((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv)
+static inline struct adapter *rtw_netdev_priv(struct net_device *dev)
+{
+   return (((struct rtw_netdev_priv_indicator *)netdev_priv(dev))->priv);
+}
+
 void rtw_free_netdev(struct net_device *netdev);
 
 #define FUNC_NDEV_FMT "%s(%s)"
-- 
2.26.2



Re: [PATCH] staging: r8188eu: replace rtw_netdev_priv define with inline function

2020-08-01 Thread Ivan Safonov

On 8/1/20 12:51 PM, Greg Kroah-Hartman wrote:

On Sat, Aug 01, 2020 at 12:47:07PM +0300, Ivan Safonov wrote:

The function guarantees type checking of arguments and return value.

Signed-off-by: Ivan Safonov 
---
  drivers/staging/rtl8188eu/include/osdep_service.h | 6 --
  1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h 
b/drivers/staging/rtl8188eu/include/osdep_service.h
index 31d897f1d21f..e0ccafdea9cd 100644
--- a/drivers/staging/rtl8188eu/include/osdep_service.h
+++ b/drivers/staging/rtl8188eu/include/osdep_service.h
@@ -71,8 +71,10 @@ struct rtw_netdev_priv_indicator {
  };
  struct net_device *rtw_alloc_etherdev_with_old_priv(void *old_priv);
  
-#define rtw_netdev_priv(netdev)	\

-   (((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv)
+static inline struct adapter *rtw_netdev_priv(struct net_device *dev)
+{
+   return (((struct rtw_netdev_priv_indicator *)netdev_priv(dev))->priv);
+}
  void rtw_free_netdev(struct net_device *netdev);


Is the cast really needed?


(struct rtw_netdev_priv_indicator *) cast needed for access to '->priv'.

The (struct adapter *) return type is a starting point for simplify
struct adapter *padapter = (struct adapter *)rtw_netdev_priv(dev);
constructions.



And no blank line before the next function prototype?


In v2.



And is this really needed?  Type checking is already happening as this
is a "simple" macro, right?


1. The flexibility of macros is not needed here.
2. The macro silently assigns ->priv to any pointer, while the function 
indicates such a compile-time error.


Ivan Safonov.


[PATCH] staging: r8188eu: replace rtw_netdev_priv define with inline function

2020-08-01 Thread Ivan Safonov
The function guarantees type checking of arguments and return value.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/include/osdep_service.h | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h 
b/drivers/staging/rtl8188eu/include/osdep_service.h
index 31d897f1d21f..e0ccafdea9cd 100644
--- a/drivers/staging/rtl8188eu/include/osdep_service.h
+++ b/drivers/staging/rtl8188eu/include/osdep_service.h
@@ -71,8 +71,10 @@ struct rtw_netdev_priv_indicator {
 };
 struct net_device *rtw_alloc_etherdev_with_old_priv(void *old_priv);
 
-#define rtw_netdev_priv(netdev)\
-   (((struct rtw_netdev_priv_indicator *)netdev_priv(netdev))->priv)
+static inline struct adapter *rtw_netdev_priv(struct net_device *dev)
+{
+   return (((struct rtw_netdev_priv_indicator *)netdev_priv(dev))->priv);
+}
 void rtw_free_netdev(struct net_device *netdev);
 
 #define FUNC_NDEV_FMT "%s(%s)"
-- 
2.26.2



[PATCH] staging: r8188eu: use proper type for second argiment of rtw_(aes|tkip|wep)_(decrypt|encrypt)

2020-07-26 Thread Ivan Safonov
rtw_aes_decrypt, rtw_tkip_decrypt, rtw_wep_decrypt, rtw_aes_encrypt,
rtw_tkip_encrypt, rtw_wep_encrypt are takes (u8 *) second argiment and
always uses it as (struct recv_frame *) or (struct xmit_frame *).
This is causes a lot of unnecessary type casts
and complicates refactoring.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c |  2 +-
 drivers/staging/rtl8188eu/core/rtw_recv.c |  6 +--
 drivers/staging/rtl8188eu/core/rtw_security.c | 50 +--
 drivers/staging/rtl8188eu/core/rtw_xmit.c |  6 +--
 .../staging/rtl8188eu/include/rtw_security.h  | 12 ++---
 5 files changed, 38 insertions(+), 38 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c 
b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
index 46a0ac08e90a..98b1ba2e489f 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
@@ -870,7 +870,7 @@ static void issue_auth(struct adapter *padapter, struct 
sta_info *psta,
 
pattrib->last_txcmdsz = pattrib->pktlen;
 
-   rtw_wep_encrypt(padapter, (u8 *)pmgntframe);
+   rtw_wep_encrypt(padapter, pmgntframe);
DBG_88E("%s\n", __func__);
dump_mgntframe(padapter, pmgntframe);
 }
diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index 0a4c1b2686b5..5fe7a0458dd2 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -384,13 +384,13 @@ static struct recv_frame *decryptor(struct adapter 
*padapter,
switch (prxattrib->encrypt) {
case _WEP40_:
case _WEP104_:
-   res = rtw_wep_decrypt(padapter, (u8 *)precv_frame);
+   res = rtw_wep_decrypt(padapter, precv_frame);
break;
case _TKIP_:
-   res = rtw_tkip_decrypt(padapter, (u8 *)precv_frame);
+   res = rtw_tkip_decrypt(padapter, precv_frame);
break;
case _AES_:
-   res = rtw_aes_decrypt(padapter, (u8 *)precv_frame);
+   res = rtw_aes_decrypt(padapter, precv_frame);
break;
default:
break;
diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index 57e171d3e48d..78a8ac60bf3d 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -129,12 +129,12 @@ static __le32 getcrc32(u8 *buf, int len)
 /*
Need to consider the fragment  situation
 */
-void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
+void rtw_wep_encrypt(struct adapter *padapter, struct xmit_frame *pxmitframe)
 {
int curfragnum, length;
u8 *pframe;
u8 hw_hdr_offset = 0;
-   struct  pkt_attrib   *pattrib = &((struct xmit_frame 
*)pxmitframe)->attrib;
+   struct  pkt_attrib   *pattrib = >attrib;
struct  security_priv   *psecuritypriv = >securitypriv;
struct  xmit_priv   *pxmitpriv = >xmitpriv;
const int keyindex = psecuritypriv->dot11PrivacyKeyIndex;
@@ -142,16 +142,16 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 
*pxmitframe)
struct sk_buff *skb;
struct lib80211_crypto_ops *crypto_ops;
 
-   if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL)
+   if (pxmitframe->buf_addr == NULL)
return;
 
if ((pattrib->encrypt != _WEP40_) && (pattrib->encrypt != _WEP104_))
return;
 
hw_hdr_offset = TXDESC_SIZE +
-(((struct xmit_frame *)pxmitframe)->pkt_offset * 
PACKET_OFFSET_SZ);
+(pxmitframe->pkt_offset * PACKET_OFFSET_SZ);
 
-   pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + hw_hdr_offset;
+   pframe = pxmitframe->buf_addr + hw_hdr_offset;
 
crypto_ops = lib80211_get_crypto_ops("WEP");
 
@@ -198,13 +198,13 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 
*pxmitframe)
crypto_ops->deinit(crypto_private);
 }
 
-int rtw_wep_decrypt(struct adapter  *padapter, u8 *precvframe)
+int rtw_wep_decrypt(struct adapter  *padapter, struct recv_frame *precvframe)
 {
-   struct  rx_pkt_attrib*prxattrib = &(((struct recv_frame 
*)precvframe)->attrib);
+   struct  rx_pkt_attrib*prxattrib = >attrib;
 
if ((prxattrib->encrypt == _WEP40_) || (prxattrib->encrypt == 
_WEP104_)) {
struct  security_priv   *psecuritypriv = 
>securitypriv;
-   struct sk_buff *skb = ((struct recv_frame *)precvframe)->pkt;
+   struct sk_buff *skb = precvframe->pkt;
u8 *pframe = skb->data;
void *crypto_private = NULL;
int status = _SUCCESS

Re: [PATCH] staging: r8188eu: remove unused members of struct xmit_buf

2020-07-13 Thread Ivan Safonov

On 7/13/20 5:23 PM, Dan Carpenter wrote:

On Mon, Jul 13, 2020 at 04:16:07PM +0300, Dan Carpenter wrote:

On Sun, Jul 12, 2020 at 03:38:21PM +0300, Ivan Safonov wrote:

Remove unused members of struct xmit_buf: alloc_sz, ff_hwaddr,
dma_transfer_addr, bpending and last.

Signed-off-by: Ivan Safonov 
---
  drivers/staging/rtl8188eu/include/rtw_xmit.h  | 5 -
  drivers/staging/rtl8188eu/os_dep/xmit_linux.c | 1 -
  2 files changed, 6 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/rtw_xmit.h 
b/drivers/staging/rtl8188eu/include/rtw_xmit.h
index 12d16e98176a..3c03987c81a1 100644
--- a/drivers/staging/rtl8188eu/include/rtw_xmit.h
+++ b/drivers/staging/rtl8188eu/include/rtw_xmit.h
@@ -193,14 +193,9 @@ struct xmit_buf {
void *priv_data;
u16 ext_tag; /*  0: Normal xmitbuf, 1: extension xmitbuf. */
u16 flags;
-   u32 alloc_sz;
u32  len;
struct submit_ctx *sctx;
-   u32 ff_hwaddr;
struct urb *pxmit_urb[8];
-   dma_addr_t dma_transfer_addr;   /* (in) dma addr for transfer_buffer */
-   u8 bpending[8];
-   int last[8];
  };
  
  struct xmit_frame {

diff --git a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c 
b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
index 017e1d628461..61ced1160951 100644
--- a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
@@ -24,7 +24,6 @@ int rtw_os_xmit_resource_alloc(struct adapter *padapter,
return _FAIL;
  
  	pxmitbuf->pbuf = PTR_ALIGN(pxmitbuf->pallocated_buf, XMITBUF_ALIGN_SZ);


Not related to this patch but kmalloc always returns data which is at
least ARCH_KMALLOC_MINALIGN aligned which is never less than
XMITBUF_ALIGN_SZ (4) so this is a no-op.


4-byte alignment for 8-byte pointer (for example void *priv_data) on 
64-bit arch is an _error_. It’s good that kmalloc (and vmalloc) is 
already aligned to 8 bytes.




The alignment in the driver is pretty crazy because it's all unnecessary
and so complicated.  Every allocation is 4 bytes extra so we can align
it later.

Also every buffer is called "pbuf" which stands for pointer to buffer.
"pallocated_buf" is not really useful either.

I tried to look at this to see if we could change the alignment, and
it's complicated because of the naming and the alignment.

regards,
dan carpenter



I have already fixed 4 places with unnecessary alignment, but, alas, 
there is no great desire to test them on real hardware.


Ivan.


Re: [PATCH] staging: r8188eu: remove unused members of struct xmit_buf

2020-07-12 Thread Ivan Safonov

On 7/12/20 8:55 PM, Larry Finger wrote:

On 7/12/20 7:38 AM, Ivan Safonov wrote:

Remove unused members of struct xmit_buf: alloc_sz, ff_hwaddr,
dma_transfer_addr, bpending and last.

Signed-off-by: Ivan Safonov 
---


Have you tested this change? Previously with this driver, an unused 
quantity was removed from one of the structs and the driver failed. 
Apparently, the alignment of some other quantity was affected. I do not 
think that this change would have that affect; however, you should be 
testing whenever the changes are more than cosmetic.


Larry



I have not tested this patch.

Ivan.


[PATCH] staging: r8188eu: remove unused members of struct xmit_buf

2020-07-12 Thread Ivan Safonov
Remove unused members of struct xmit_buf: alloc_sz, ff_hwaddr,
dma_transfer_addr, bpending and last.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/include/rtw_xmit.h  | 5 -
 drivers/staging/rtl8188eu/os_dep/xmit_linux.c | 1 -
 2 files changed, 6 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/rtw_xmit.h 
b/drivers/staging/rtl8188eu/include/rtw_xmit.h
index 12d16e98176a..3c03987c81a1 100644
--- a/drivers/staging/rtl8188eu/include/rtw_xmit.h
+++ b/drivers/staging/rtl8188eu/include/rtw_xmit.h
@@ -193,14 +193,9 @@ struct xmit_buf {
void *priv_data;
u16 ext_tag; /*  0: Normal xmitbuf, 1: extension xmitbuf. */
u16 flags;
-   u32 alloc_sz;
u32  len;
struct submit_ctx *sctx;
-   u32 ff_hwaddr;
struct urb *pxmit_urb[8];
-   dma_addr_t dma_transfer_addr;   /* (in) dma addr for transfer_buffer */
-   u8 bpending[8];
-   int last[8];
 };
 
 struct xmit_frame {
diff --git a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c 
b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
index 017e1d628461..61ced1160951 100644
--- a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
@@ -24,7 +24,6 @@ int rtw_os_xmit_resource_alloc(struct adapter *padapter,
return _FAIL;
 
pxmitbuf->pbuf = PTR_ALIGN(pxmitbuf->pallocated_buf, XMITBUF_ALIGN_SZ);
-   pxmitbuf->dma_transfer_addr = 0;
 
for (i = 0; i < 8; i++) {
pxmitbuf->pxmit_urb[i] = usb_alloc_urb(0, GFP_KERNEL);
-- 
2.26.2



[PATCH v2] staging:r8723bs: remove wrappers around skb_clone() and remove unnecessary in_interrupt() call

2020-05-31 Thread Ivan Safonov
Wrappers around skb_clone() do not simplify the driver code.

The skb_clone() is always called from an interrupt handler,
so use GFP_ATOMIC allocation only.

Signed-off-by: Ivan Safonov 
---
Changes in v2:
  - in_interrupt() removal has been described.

 drivers/staging/rtl8723bs/include/osdep_service.h | 3 ---
 drivers/staging/rtl8723bs/os_dep/osdep_service.c  | 5 -
 drivers/staging/rtl8723bs/os_dep/recv_linux.c | 2 +-
 3 files changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/staging/rtl8723bs/include/osdep_service.h 
b/drivers/staging/rtl8723bs/include/osdep_service.h
index 5f681899bbec..be34e279670b 100644
--- a/drivers/staging/rtl8723bs/include/osdep_service.h
+++ b/drivers/staging/rtl8723bs/include/osdep_service.h
@@ -94,7 +94,6 @@ void _kfree(u8 *pbuf, u32 sz);
 
 struct sk_buff *_rtw_skb_alloc(u32 sz);
 struct sk_buff *_rtw_skb_copy(const struct sk_buff *skb);
-struct sk_buff *_rtw_skb_clone(struct sk_buff *skb);
 int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb);
 
 #define rtw_malloc(sz) _rtw_malloc((sz))
@@ -103,9 +102,7 @@ int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb);
 #define rtw_skb_alloc(size) _rtw_skb_alloc((size))
 #define rtw_skb_alloc_f(size, mstat_f) _rtw_skb_alloc((size))
 #define rtw_skb_copy(skb)  _rtw_skb_copy((skb))
-#define rtw_skb_clone(skb) _rtw_skb_clone((skb))
 #define rtw_skb_copy_f(skb, mstat_f)   _rtw_skb_copy((skb))
-#define rtw_skb_clone_f(skb, mstat_f)  _rtw_skb_clone((skb))
 #define rtw_netif_rx(ndev, skb) _rtw_netif_rx(ndev, skb)
 
 extern void _rtw_init_queue(struct __queue *pqueue);
diff --git a/drivers/staging/rtl8723bs/os_dep/osdep_service.c 
b/drivers/staging/rtl8723bs/os_dep/osdep_service.c
index 4238209ec175..6d443197a0cf 100644
--- a/drivers/staging/rtl8723bs/os_dep/osdep_service.c
+++ b/drivers/staging/rtl8723bs/os_dep/osdep_service.c
@@ -47,11 +47,6 @@ inline struct sk_buff *_rtw_skb_copy(const struct sk_buff 
*skb)
return skb_copy(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
 }
 
-inline struct sk_buff *_rtw_skb_clone(struct sk_buff *skb)
-{
-   return skb_clone(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
-}
-
 inline int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb)
 {
skb->dev = ndev;
diff --git a/drivers/staging/rtl8723bs/os_dep/recv_linux.c 
b/drivers/staging/rtl8723bs/os_dep/recv_linux.c
index eb4d1c3008fe..b2a1bbb30df6 100644
--- a/drivers/staging/rtl8723bs/os_dep/recv_linux.c
+++ b/drivers/staging/rtl8723bs/os_dep/recv_linux.c
@@ -110,7 +110,7 @@ void rtw_os_recv_indicate_pkt(struct adapter *padapter, 
_pkt *pkt, struct rx_pkt
if (memcmp(pattrib->dst, myid(>eeprompriv), 
ETH_ALEN)) {
if (bmcast) {
psta = rtw_get_bcmc_stainfo(padapter);
-   pskb2 = rtw_skb_clone(pkt);
+   pskb2 = skb_clone(pkt, GFP_ATOMIC);
} else {
psta = rtw_get_stainfo(pstapriv, 
pattrib->dst);
}
-- 
2.26.2



Re: [PATCH] staging:r8723bs: remove wrappers around skb_clone()

2020-05-31 Thread Ivan Safonov

On 5/31/20 8:36 PM, Joe Perches wrote:

On Sun, 2020-05-31 at 20:28 +0300, Ivan Safonov wrote:

On 5/31/20 7:15 PM, Joe Perches wrote:

On Sun, 2020-05-31 at 19:08 +0300, Ivan Safonov wrote:

Wrappers around skb_clone() do not simplify the driver code.

[]

-inline struct sk_buff *_rtw_skb_clone(struct sk_buff *skb)
-{
-   return skb_clone(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
-}
-

[]

diff --git a/drivers/staging/rtl8723bs/os_dep/recv_linux.c 
b/drivers/staging/rtl8723bs/os_dep/recv_linux.c

[]

@@ -110,7 +110,7 @@ void rtw_os_recv_indicate_pkt(struct adapter *padapter, 
_pkt *pkt, struct rx_pkt
if (memcmp(pattrib->dst, myid(>eeprompriv), 
ETH_ALEN)) {
if (bmcast) {
psta = rtw_get_bcmc_stainfo(padapter);
-   pskb2 = rtw_skb_clone(pkt);
+   pskb2 = skb_clone(pkt, GFP_ATOMIC);


Why make every clone allocation GFP_ATOMIC ?


The rtw_os_recv_indicate_pkt() is always called from an interrupt handler.


It'd be better to indicate you know that in the changelog
as the subject and changelog just shows removing wrappers
and the patch code does not agree with that.


Yes, it's right.


Re: [PATCH] staging:r8723bs: remove wrappers around skb_clone()

2020-05-31 Thread Ivan Safonov

On 5/31/20 7:15 PM, Joe Perches wrote:

On Sun, 2020-05-31 at 19:08 +0300, Ivan Safonov wrote:

Wrappers around skb_clone() do not simplify the driver code.

[]

-inline struct sk_buff *_rtw_skb_clone(struct sk_buff *skb)
-{
-   return skb_clone(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
-}
-

[]

diff --git a/drivers/staging/rtl8723bs/os_dep/recv_linux.c 
b/drivers/staging/rtl8723bs/os_dep/recv_linux.c

[]

@@ -110,7 +110,7 @@ void rtw_os_recv_indicate_pkt(struct adapter *padapter, 
_pkt *pkt, struct rx_pkt
if (memcmp(pattrib->dst, myid(>eeprompriv), 
ETH_ALEN)) {
if (bmcast) {
psta = rtw_get_bcmc_stainfo(padapter);
-   pskb2 = rtw_skb_clone(pkt);
+   pskb2 = skb_clone(pkt, GFP_ATOMIC);


Why make every clone allocation GFP_ATOMIC ?


The rtw_os_recv_indicate_pkt() is always called from an interrupt handler.


[PATCH] staging:r8723bs: remove wrappers around skb_clone()

2020-05-31 Thread Ivan Safonov
Wrappers around skb_clone() do not simplify the driver code.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8723bs/include/osdep_service.h | 3 ---
 drivers/staging/rtl8723bs/os_dep/osdep_service.c  | 5 -
 drivers/staging/rtl8723bs/os_dep/recv_linux.c | 2 +-
 3 files changed, 1 insertion(+), 9 deletions(-)

diff --git a/drivers/staging/rtl8723bs/include/osdep_service.h 
b/drivers/staging/rtl8723bs/include/osdep_service.h
index 5f681899bbec..be34e279670b 100644
--- a/drivers/staging/rtl8723bs/include/osdep_service.h
+++ b/drivers/staging/rtl8723bs/include/osdep_service.h
@@ -94,7 +94,6 @@ void _kfree(u8 *pbuf, u32 sz);
 
 struct sk_buff *_rtw_skb_alloc(u32 sz);
 struct sk_buff *_rtw_skb_copy(const struct sk_buff *skb);
-struct sk_buff *_rtw_skb_clone(struct sk_buff *skb);
 int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb);
 
 #define rtw_malloc(sz) _rtw_malloc((sz))
@@ -103,9 +102,7 @@ int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb);
 #define rtw_skb_alloc(size) _rtw_skb_alloc((size))
 #define rtw_skb_alloc_f(size, mstat_f) _rtw_skb_alloc((size))
 #define rtw_skb_copy(skb)  _rtw_skb_copy((skb))
-#define rtw_skb_clone(skb) _rtw_skb_clone((skb))
 #define rtw_skb_copy_f(skb, mstat_f)   _rtw_skb_copy((skb))
-#define rtw_skb_clone_f(skb, mstat_f)  _rtw_skb_clone((skb))
 #define rtw_netif_rx(ndev, skb) _rtw_netif_rx(ndev, skb)
 
 extern void _rtw_init_queue(struct __queue *pqueue);
diff --git a/drivers/staging/rtl8723bs/os_dep/osdep_service.c 
b/drivers/staging/rtl8723bs/os_dep/osdep_service.c
index 4238209ec175..6d443197a0cf 100644
--- a/drivers/staging/rtl8723bs/os_dep/osdep_service.c
+++ b/drivers/staging/rtl8723bs/os_dep/osdep_service.c
@@ -47,11 +47,6 @@ inline struct sk_buff *_rtw_skb_copy(const struct sk_buff 
*skb)
return skb_copy(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
 }
 
-inline struct sk_buff *_rtw_skb_clone(struct sk_buff *skb)
-{
-   return skb_clone(skb, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
-}
-
 inline int _rtw_netif_rx(_nic_hdl ndev, struct sk_buff *skb)
 {
skb->dev = ndev;
diff --git a/drivers/staging/rtl8723bs/os_dep/recv_linux.c 
b/drivers/staging/rtl8723bs/os_dep/recv_linux.c
index eb4d1c3008fe..b2a1bbb30df6 100644
--- a/drivers/staging/rtl8723bs/os_dep/recv_linux.c
+++ b/drivers/staging/rtl8723bs/os_dep/recv_linux.c
@@ -110,7 +110,7 @@ void rtw_os_recv_indicate_pkt(struct adapter *padapter, 
_pkt *pkt, struct rx_pkt
if (memcmp(pattrib->dst, myid(>eeprompriv), 
ETH_ALEN)) {
if (bmcast) {
psta = rtw_get_bcmc_stainfo(padapter);
-   pskb2 = rtw_skb_clone(pkt);
+   pskb2 = skb_clone(pkt, GFP_ATOMIC);
} else {
psta = rtw_get_stainfo(pstapriv, 
pattrib->dst);
}
-- 
2.26.2



[PATCH] staging:rtl8712: avoid skb_clone after skb allocation fail

2020-05-31 Thread Ivan Safonov
The skb allocated when out of memory is likely to be discarded
during subsequent processing.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8712/rtl8712_recv.c | 29 ++
 1 file changed, 11 insertions(+), 18 deletions(-)

diff --git a/drivers/staging/rtl8712/rtl8712_recv.c 
b/drivers/staging/rtl8712/rtl8712_recv.c
index 116773943a2e..570030be3077 100644
--- a/drivers/staging/rtl8712/rtl8712_recv.c
+++ b/drivers/staging/rtl8712/rtl8712_recv.c
@@ -1037,24 +1037,17 @@ static void recvbuf2recvframe(struct _adapter 
*padapter, struct sk_buff *pskb)
 */
alloc_sz += 6;
pkt_copy = netdev_alloc_skb(padapter->pnetdev, alloc_sz);
-   if (pkt_copy) {
-   precvframe->u.hdr.pkt = pkt_copy;
-   skb_reserve(pkt_copy, 4 - ((addr_t)(pkt_copy->data)
-   % 4));
-   skb_reserve(pkt_copy, shift_sz);
-   memcpy(pkt_copy->data, pbuf, tmp_len);
-   precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data =
-precvframe->u.hdr.rx_tail = pkt_copy->data;
-   precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz;
-   } else {
-   precvframe->u.hdr.pkt = skb_clone(pskb, GFP_ATOMIC);
-   if (!precvframe->u.hdr.pkt)
-   return;
-   precvframe->u.hdr.rx_head = pbuf;
-   precvframe->u.hdr.rx_data = pbuf;
-   precvframe->u.hdr.rx_tail = pbuf;
-   precvframe->u.hdr.rx_end = pbuf + alloc_sz;
-   }
+   if (!pkt_copy)
+   return;
+
+   precvframe->u.hdr.pkt = pkt_copy;
+   skb_reserve(pkt_copy, 4 - ((addr_t)(pkt_copy->data) % 4));
+   skb_reserve(pkt_copy, shift_sz);
+   memcpy(pkt_copy->data, pbuf, tmp_len);
+   precvframe->u.hdr.rx_head = precvframe->u.hdr.rx_data =
+   precvframe->u.hdr.rx_tail = pkt_copy->data;
+   precvframe->u.hdr.rx_end = pkt_copy->data + alloc_sz;
+
recvframe_put(precvframe, tmp_len);
recvframe_pull(precvframe, drvinfo_sz + RXDESC_SIZE);
/* because the endian issue, driver avoid reference to the
-- 
2.26.2



[PATCH] staging:rtl8723bs: eliminate usage of skb_clone after skb allocation fail

2020-05-02 Thread Ivan Safonov
The skb allocated when out of memory
is likely to be discarded during subsequent processing.

Signed-off-by: Ivan Safonov 
---
 .../staging/rtl8723bs/hal/rtl8723bs_recv.c| 44 ++-
 drivers/staging/rtl8723bs/os_dep/recv_linux.c | 19 +++-
 2 files changed, 19 insertions(+), 44 deletions(-)

diff --git a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c 
b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
index c3051ebaeb78..29c29e2e125b 100644
--- a/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
+++ b/drivers/staging/rtl8723bs/hal/rtl8723bs_recv.c
@@ -311,39 +311,21 @@ static void rtl8723bs_recv_tasklet(unsigned long priv)
}
 
pkt_copy = rtw_skb_alloc(alloc_sz);
-
-   if (pkt_copy) {
-   pkt_copy->dev = padapter->pnetdev;
-   precvframe->u.hdr.pkt = pkt_copy;
-   skb_reserve(pkt_copy, 8 - 
((SIZE_PTR)(pkt_copy->data) & 7));/* force pkt_copy->data at 8-byte alignment 
address */
-   skb_reserve(pkt_copy, shift_sz);/* 
force ip_hdr at 8-byte alignment address according to shift_sz. */
-   memcpy(pkt_copy->data, (ptr + 
rx_report_sz + pattrib->shift_sz), skb_len);
-   precvframe->u.hdr.rx_head = 
pkt_copy->head;
-   precvframe->u.hdr.rx_data = 
precvframe->u.hdr.rx_tail = pkt_copy->data;
-   precvframe->u.hdr.rx_end = 
skb_end_pointer(pkt_copy);
-   } else {
-   if ((pattrib->mfrag == 1) && 
(pattrib->frag_num == 0)) {
-   DBG_8192C("%s: alloc_skb fail, 
drop frag frame\n", __func__);
-   rtw_free_recvframe(precvframe, 
>free_recv_queue);
-   break;
-   }
-
-   precvframe->u.hdr.pkt = 
rtw_skb_clone(precvbuf->pskb);
-   if (precvframe->u.hdr.pkt) {
-   _pkt *pkt_clone = 
precvframe->u.hdr.pkt;
-
-   pkt_clone->data = ptr + 
rx_report_sz + pattrib->shift_sz;
-   
skb_reset_tail_pointer(pkt_clone);
-   precvframe->u.hdr.rx_head = 
precvframe->u.hdr.rx_data = precvframe->u.hdr.rx_tail
-   = pkt_clone->data;
-   precvframe->u.hdr.rx_end = 
pkt_clone->data + skb_len;
-   } else {
-   DBG_8192C("%s: rtw_skb_clone 
fail\n", __func__);
-   rtw_free_recvframe(precvframe, 
>free_recv_queue);
-   break;
-   }
+   if (!pkt_copy) {
+   DBG_8192C("%s: alloc_skb fail, drop 
frame\n", __func__);
+   rtw_free_recvframe(precvframe, 
>free_recv_queue);
+   break;
}
 
+   pkt_copy->dev = padapter->pnetdev;
+   precvframe->u.hdr.pkt = pkt_copy;
+   skb_reserve(pkt_copy, 8 - 
((SIZE_PTR)(pkt_copy->data) & 7));/* force pkt_copy->data at 8-byte alignment 
address */
+   skb_reserve(pkt_copy, shift_sz);/* force ip_hdr 
at 8-byte alignment address according to shift_sz. */
+   memcpy(pkt_copy->data, (ptr + rx_report_sz + 
pattrib->shift_sz), skb_len);
+   precvframe->u.hdr.rx_head = pkt_copy->head;
+   precvframe->u.hdr.rx_data = 
precvframe->u.hdr.rx_tail = pkt_copy->data;
+   precvframe->u.hdr.rx_end = 
skb_end_pointer(pkt_copy);
+
recvframe_put(precvframe, skb_len);
/* recvframe_pull(precvframe, drvinfo_sz + 
RXDESC_SIZE); */
 
diff --git a/drivers/staging/rtl8723bs/os_dep/recv_linux.c 
b/drivers/staging/rtl8723bs/os_dep/recv_linux.c
index 60c35d92ba29..560221723d70 100644
--- a/drivers/staging/rtl8723bs/os_dep/recv_linux.c
+++ b/drivers/staging/rtl8723bs/os_dep/recv_linux.c
@@ -60,21 +60,14 @@ _pkt *rtw_os_alloc_msdu_pkt(union recv_frame *prframe, u16 

[PATCH] genirq: replace notify with old_notify in irq_set_affinity_notifier()

2019-09-28 Thread Ivan Safonov
This patch is for Linux 4.19 with a RT patch.

The second 'if' block does not check notify for NULL,
this leads to a system crash.

Most likely, there is a typo here.

With old_notify system works as expected.

Signed-off-by: Ivan Safonov 
---
 kernel/irq/manage.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 290cd520dba1..79a7072dfb3c 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -412,7 +412,7 @@ irq_set_affinity_notifier(unsigned int irq, struct 
irq_affinity_notify *notify)
 
if (old_notify) {
 #ifdef CONFIG_PREEMPT_RT_BASE
-   kthread_cancel_work_sync(>work);
+   kthread_cancel_work_sync(_notify->work);
 #else
cancel_work_sync(_notify->work);
 #endif
-- 
2.21.0



Re: [PATCH] staging: r8188eu: replace rtw_malloc() with it's definition

2019-09-14 Thread Ivan Safonov

On 9/10/19 2:59 PM, Dan Carpenter wrote:

On Sun, Sep 08, 2019 at 12:00:26PM +0300, Ivan Safonov wrote >> rtw_malloc 
prevents the use of kmemdup/kzalloc and others.


Signed-off-by: Ivan Safonov 
---
  drivers/staging/rtl8188eu/core/rtw_ap.c|  4 ++--
  drivers/staging/rtl8188eu/core/rtw_mlme_ext.c  |  2 +-
  .../staging/rtl8188eu/include/osdep_service.h  |  3 ---
  drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 18 +-
  drivers/staging/rtl8188eu/os_dep/mlme_linux.c  |  2 +-
  .../staging/rtl8188eu/os_dep/osdep_service.c   |  7 +--
  6 files changed, 14 insertions(+), 22 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c 
b/drivers/staging/rtl8188eu/core/rtw_ap.c
index 51a5b71f8c25..c9c57379b7a2 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ap.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ap.c
@@ -104,7 +104,7 @@ static void update_BCNTIM(struct adapter *padapter)
}
  
  	if (remainder_ielen > 0) {

-   pbackup_remainder_ie = rtw_malloc(remainder_ielen);
+   pbackup_remainder_ie = kmalloc(remainder_ielen, in_interrupt() 
? GFP_ATOMIC : GFP_KERNEL);

 ^
This stuff isn't right.  It really should be checking if spinlocks are
held or IRQs are disabled.  And the only way to do that is by auditing
the callers.

I hope to make these changes later as separate independent patches.
This patch do only one thing - remove rtw_malloc().



(The original rtw_malloc() implementation is buggy nonsense).

regards,
dan carpenter



Ivan Safonov.


[PATCH] cgroup: use kv(malloc|free) instead of pidlist_(allocate|free)

2019-09-08 Thread Ivan Safonov
Resolve TODO:
> The following two functions "fix" the issue where there are more pids
> than kmalloc will give memory for; in such cases, we use vmalloc/vfree.
> TODO: replace with a kernel-wide solution to this problem

kv(malloc|free) is appropriate replacement for pidlist_(allocate|free).

Signed-off-by: Ivan Safonov 
---
 kernel/cgroup/cgroup-v1.c | 27 ---
 1 file changed, 4 insertions(+), 23 deletions(-)

diff --git a/kernel/cgroup/cgroup-v1.c b/kernel/cgroup/cgroup-v1.c
index 88006be40ea3..1f25f35af2c4 100644
--- a/kernel/cgroup/cgroup-v1.c
+++ b/kernel/cgroup/cgroup-v1.c
@@ -193,25 +193,6 @@ struct cgroup_pidlist {
struct delayed_work destroy_dwork;
 };
 
-/*
- * The following two functions "fix" the issue where there are more pids
- * than kmalloc will give memory for; in such cases, we use vmalloc/vfree.
- * TODO: replace with a kernel-wide solution to this problem
- */
-#define PIDLIST_TOO_LARGE(c) ((c) * sizeof(pid_t) > (PAGE_SIZE * 2))
-static void *pidlist_allocate(int count)
-{
-   if (PIDLIST_TOO_LARGE(count))
-   return vmalloc(array_size(count, sizeof(pid_t)));
-   else
-   return kmalloc_array(count, sizeof(pid_t), GFP_KERNEL);
-}
-
-static void pidlist_free(void *p)
-{
-   kvfree(p);
-}
-
 /*
  * Used to destroy all pidlists lingering waiting for destroy timer.  None
  * should be left afterwards.
@@ -244,7 +225,7 @@ static void cgroup_pidlist_destroy_work_fn(struct 
work_struct *work)
 */
if (!delayed_work_pending(dwork)) {
list_del(>links);
-   pidlist_free(l->list);
+   kvfree(l->list);
put_pid_ns(l->key.ns);
tofree = l;
}
@@ -365,7 +346,7 @@ static int pidlist_array_load(struct cgroup *cgrp, enum 
cgroup_filetype type,
 * show up until sometime later on.
 */
length = cgroup_task_count(cgrp);
-   array = pidlist_allocate(length);
+   array = kvmalloc(array_size(length, sizeof(pid_t)), GFP_KERNEL);
if (!array)
return -ENOMEM;
/* now, populate the array */
@@ -390,12 +371,12 @@ static int pidlist_array_load(struct cgroup *cgrp, enum 
cgroup_filetype type,
 
l = cgroup_pidlist_find_create(cgrp, type);
if (!l) {
-   pidlist_free(array);
+   kvfree(array);
return -ENOMEM;
}
 
/* store array, freeing old if necessary */
-   pidlist_free(l->list);
+   kvfree(l->list);
l->list = array;
l->length = length;
*lp = l;
-- 
2.21.0



[PATCH] staging: r8188eu: replace rtw_malloc() with it's definition

2019-09-08 Thread Ivan Safonov
rtw_malloc prevents the use of kmemdup/kzalloc and others.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_ap.c|  4 ++--
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c  |  2 +-
 .../staging/rtl8188eu/include/osdep_service.h  |  3 ---
 drivers/staging/rtl8188eu/os_dep/ioctl_linux.c | 18 +-
 drivers/staging/rtl8188eu/os_dep/mlme_linux.c  |  2 +-
 .../staging/rtl8188eu/os_dep/osdep_service.c   |  7 +--
 6 files changed, 14 insertions(+), 22 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c 
b/drivers/staging/rtl8188eu/core/rtw_ap.c
index 51a5b71f8c25..c9c57379b7a2 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ap.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ap.c
@@ -104,7 +104,7 @@ static void update_BCNTIM(struct adapter *padapter)
}
 
if (remainder_ielen > 0) {
-   pbackup_remainder_ie = rtw_malloc(remainder_ielen);
+   pbackup_remainder_ie = kmalloc(remainder_ielen, in_interrupt() 
? GFP_ATOMIC : GFP_KERNEL);
if (pbackup_remainder_ie && premainder_ie)
memcpy(pbackup_remainder_ie, premainder_ie,
   remainder_ielen);
@@ -1168,7 +1168,7 @@ static void update_bcn_wps_ie(struct adapter *padapter)
remainder_ielen = ielen - wps_offset - wps_ielen;
 
if (remainder_ielen > 0) {
-   pbackup_remainder_ie = rtw_malloc(remainder_ielen);
+   pbackup_remainder_ie = kmalloc(remainder_ielen, in_interrupt() 
? GFP_ATOMIC : GFP_KERNEL);
if (pbackup_remainder_ie)
memcpy(pbackup_remainder_ie, premainder_ie, 
remainder_ielen);
}
diff --git a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c 
b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
index 18dc9fc1c04a..759a37a5a167 100644
--- a/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
+++ b/drivers/staging/rtl8188eu/core/rtw_mlme_ext.c
@@ -2573,7 +2573,7 @@ static unsigned int OnBeacon(struct adapter *padapter,
if (!memcmp(GetAddr3Ptr(pframe), pnetwork->MacAddress, ETH_ALEN)) {
if (pmlmeinfo->state & WIFI_FW_AUTH_NULL) {
/* we should update current network before auth, or 
some IE is wrong */
-   pbss = (struct wlan_bssid_ex *)rtw_malloc(sizeof(struct 
wlan_bssid_ex));
+   pbss = kmalloc(sizeof(*pbss), in_interrupt() ? 
GFP_ATOMIC : GFP_KERNEL);
if (pbss) {
if (collect_bss_info(padapter, precv_frame, 
pbss) == _SUCCESS) {

update_network(>cur_network.network, pbss, padapter, true);
diff --git a/drivers/staging/rtl8188eu/include/osdep_service.h 
b/drivers/staging/rtl8188eu/include/osdep_service.h
index c0114ad79788..dcaa7917b783 100644
--- a/drivers/staging/rtl8188eu/include/osdep_service.h
+++ b/drivers/staging/rtl8188eu/include/osdep_service.h
@@ -61,9 +61,6 @@ static inline int rtw_netif_queue_stopped(struct net_device 
*pnetdev)
netif_tx_queue_stopped(netdev_get_tx_queue(pnetdev, 3));
 }
 
-u8 *_rtw_malloc(u32 sz);
-#define rtw_malloc(sz) _rtw_malloc((sz))
-
 void _rtw_init_queue(struct __queue *pqueue);
 
 struct rtw_netdev_priv_indicator {
diff --git a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c 
b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
index ec5835d1aa8c..04ec73be0cce 100644
--- a/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/ioctl_linux.c
@@ -392,7 +392,7 @@ static int wpa_set_encryption(struct net_device *dev, 
struct ieee_param *param,
if (wep_key_len > 0) {
wep_key_len = wep_key_len <= 5 ? 5 : 13;
wep_total_len = wep_key_len + offsetof(struct 
ndis_802_11_wep, KeyMaterial);
-   pwep = (struct ndis_802_11_wep 
*)rtw_malloc(wep_total_len);
+   pwep = kmalloc(wep_total_len, in_interrupt() ? 
GFP_ATOMIC : GFP_KERNEL);
if (!pwep) {
RT_TRACE(_module_rtl871x_ioctl_os_c, _drv_err_, 
(" wpa_set_encryption: pwep allocate fail !!!\n"));
goto exit;
@@ -1862,7 +1862,7 @@ static int rtw_wx_set_enc_ext(struct net_device *dev,
int ret = 0;
 
param_len = sizeof(struct ieee_param) + pext->key_len;
-   param = (struct ieee_param *)rtw_malloc(param_len);
+   param = kmalloc(param_len, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
if (!param)
return -1;
 
@@ -2027,7 +2027,7 @@ static int wpa_supplicant_ioctl(struct net_device *dev, 
struct iw_point *p)
goto out;
}
 
-   param = (struct ieee_param *)rtw_malloc(p->length);
+   param = kmalloc(p->length, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);
if (!param) {
ret = -ENOMEM;
  

[PATCH v2] staging: r8188eu: use skb_put_data instead of skb_put/memcpy pair

2019-09-01 Thread Ivan Safonov
skb_put_data is shorter and clear.

Signed-off-by: Ivan Safonov 
---
Changes in v2:
  - add "staging: " in message subject;
  - all code lines now have no breaks in the middle of a sentence.

drivers/staging/rtl8188eu/core/rtw_recv.c| 6 +-
 drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 3 +--
 2 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index 620da6c003d8..d4278361e002 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -1373,11 +1373,7 @@ static struct recv_frame *recvframe_defrag(struct 
adapter *adapter,
/* append  to first fragment frame's tail (if privacy frame, 
pull the ICV) */
skb_trim(prframe->pkt, prframe->pkt->len - 
prframe->attrib.icv_len);
 
-   /* memcpy */
-   memcpy(skb_tail_pointer(prframe->pkt), pnfhdr->pkt->data,
-  pnfhdr->pkt->len);
-
-   skb_put(prframe->pkt, pnfhdr->pkt->len);
+   skb_put_data(prframe->pkt, pnfhdr->pkt->data, pnfhdr->pkt->len);
 
prframe->attrib.icv_len = pnfhdr->attrib.icv_len;
plist = plist->next;
diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c 
b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
index eedf2cd831d1..aaab0d577453 100644
--- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
@@ -122,8 +122,7 @@ static int recvbuf2recvframe(struct adapter *adapt, struct 
sk_buff *pskb)
precvframe->pkt = pkt_copy;
skb_reserve(pkt_copy, 8 - ((size_t)(pkt_copy->data) & 
7));/* force pkt_copy->data at 8-byte alignment address */
skb_reserve(pkt_copy, shift_sz);/* force ip_hdr at 
8-byte alignment address according to shift_sz. */
-   memcpy(pkt_copy->data, (pbuf + pattrib->drvinfo_sz + 
RXDESC_SIZE), skb_len);
-   skb_put(precvframe->pkt, skb_len);
+   skb_put_data(pkt_copy, (pbuf + pattrib->drvinfo_sz + 
RXDESC_SIZE), skb_len);
} else {
DBG_88E("%s: alloc_skb fail , drop frag frame\n",
__func__);
-- 
2.21.0



Re: [PATCH] r8188eu: use skb_put_data instead of skb_put/memcpy pair

2019-08-31 Thread Ivan Safonov

On 8/27/19 1:31 PM, Dan Carpenter wrote:

On Sun, Aug 25, 2019 at 11:48:58PM +0300, Ivan Safonov wrote:

skb_put_data is shorter and clear.



Please don't start the commit message in the middle of a sentence.  It
often gets split from the start of the sentence.  See how it looks here.
https://marc.info/?l=linux-driver-devel=156676594611401=2



Signed-off-by: Ivan Safonov 
---
  drivers/staging/rtl8188eu/core/rtw_recv.c| 6 +-
  drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 3 +--
  2 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index 620da6c003d8..d4278361e002 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -1373,11 +1373,7 @@ static struct recv_frame *recvframe_defrag(struct
adapter *adapter,
 /* append  to first fragment frame's tail (if privacy frame,
pull the ICV) */
 skb_trim(prframe->pkt, prframe->pkt->len -
prframe->attrib.icv_len);



Your email client corrupted the patch so it can't be applied.


Thanks, Dan.


regards,
dan carpenter



[PATCH] r8188eu: use skb_put_data instead of skb_put/memcpy pair

2019-08-25 Thread Ivan Safonov

skb_put_data is shorter and clear.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_recv.c| 6 +-
 drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c | 3 +--
 2 files changed, 2 insertions(+), 7 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c

index 620da6c003d8..d4278361e002 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -1373,11 +1373,7 @@ static struct recv_frame *recvframe_defrag(struct 
adapter *adapter,
/* append  to first fragment frame's tail (if privacy 
frame, pull the ICV) */
skb_trim(prframe->pkt, prframe->pkt->len - 
prframe->attrib.icv_len);


-   /* memcpy */
-   memcpy(skb_tail_pointer(prframe->pkt), pnfhdr->pkt->data,
-  pnfhdr->pkt->len);
-
-   skb_put(prframe->pkt, pnfhdr->pkt->len);
+   skb_put_data(prframe->pkt, pnfhdr->pkt->data, 
pnfhdr->pkt->len);


prframe->attrib.icv_len = pnfhdr->attrib.icv_len;
plist = plist->next;
diff --git a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c 
b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c

index eedf2cd831d1..aaab0d577453 100644
--- a/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/usb_ops_linux.c
@@ -122,8 +122,7 @@ static int recvbuf2recvframe(struct adapter *adapt, 
struct sk_buff *pskb)

precvframe->pkt = pkt_copy;
skb_reserve(pkt_copy, 8 - 
((size_t)(pkt_copy->data) & 7));/* force pkt_copy->data at 8-byte 
alignment address */
skb_reserve(pkt_copy, shift_sz);/* force ip_hdr 
at 8-byte alignment address according to shift_sz. */
-   memcpy(pkt_copy->data, (pbuf + 
pattrib->drvinfo_sz + RXDESC_SIZE), skb_len);

-   skb_put(precvframe->pkt, skb_len);
+   skb_put_data(pkt_copy, (pbuf + 
pattrib->drvinfo_sz + RXDESC_SIZE), skb_len);

} else {
DBG_88E("%s: alloc_skb fail , drop frag frame\n",
__func__);
--
2.21.0


[PATCH] staging: r8188eu: refactor recvframe_defrag()

2019-03-20 Thread Ivan Safonov
Local variables pfhdr and prframe always have a same value,
so one of them is unnecessary.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_recv.c | 13 ++---
 1 file changed, 6 insertions(+), 7 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index 90eb1a025051..9075e3a2755a 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -1325,7 +1325,7 @@ static struct recv_frame *recvframe_defrag(struct adapter 
*adapter,
struct list_head *plist, *phead;
u8 wlanhdr_offset;
u8  curfragnum;
-   struct recv_frame *pfhdr, *pnfhdr;
+   struct recv_frame *pnfhdr;
struct recv_frame *prframe, *pnextrframe;
struct __queue *pfree_recv_queue;
 
@@ -1334,11 +1334,10 @@ static struct recv_frame *recvframe_defrag(struct 
adapter *adapter,
 
phead = get_list_head(defrag_q);
plist = phead->next;
-   pfhdr = list_entry(plist, struct recv_frame, list);
-   prframe = pfhdr;
+   prframe = list_entry(plist, struct recv_frame, list);
list_del_init(>list);
 
-   if (curfragnum != pfhdr->attrib.frag_num) {
+   if (curfragnum != prframe->attrib.frag_num) {
/* the first fragment number must be 0 */
/* free the whole queue */
rtw_free_recvframe(prframe, pfree_recv_queue);
@@ -1377,15 +1376,15 @@ static struct recv_frame *recvframe_defrag(struct 
adapter *adapter,
skb_pull(pnextrframe->pkt, wlanhdr_offset);
 
/* append  to first fragment frame's tail (if privacy frame, 
pull the ICV) */
-   skb_trim(prframe->pkt, prframe->pkt->len - 
pfhdr->attrib.icv_len);
+   skb_trim(prframe->pkt, prframe->pkt->len - 
prframe->attrib.icv_len);
 
/* memcpy */
-   memcpy(skb_tail_pointer(pfhdr->pkt), pnfhdr->pkt->data,
+   memcpy(skb_tail_pointer(prframe->pkt), pnfhdr->pkt->data,
   pnfhdr->pkt->len);
 
skb_put(prframe->pkt, pnfhdr->pkt->len);
 
-   pfhdr->attrib.icv_len = pnfhdr->attrib.icv_len;
+   prframe->attrib.icv_len = pnfhdr->attrib.icv_len;
plist = plist->next;
}
 
-- 
2.19.2



[PATCH] staging: netlogic: replace skb_put/pull pair with skb_reserve

2019-03-20 Thread Ivan Safonov
The sequence

skb_put(skb);
skb_pull(skb);

leads to the same result as

skb_reserve(skb);

but second is a little shorter and clearer.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/netlogic/xlr_net.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/staging/netlogic/xlr_net.c 
b/drivers/staging/netlogic/xlr_net.c
index 10f14a5cf490..1897b711d66d 100644
--- a/drivers/staging/netlogic/xlr_net.c
+++ b/drivers/staging/netlogic/xlr_net.c
@@ -87,8 +87,7 @@ static inline unsigned char *xlr_alloc_skb(void)
if (!skb)
return NULL;
skb_data = skb->data;
-   skb_put(skb, MAC_SKB_BACK_PTR_SIZE);
-   skb_pull(skb, MAC_SKB_BACK_PTR_SIZE);
+   skb_reserve(skb, MAC_SKB_BACK_PTR_SIZE);
memcpy(skb_data, , buf_len);
 
return skb->data;
-- 
2.19.2



Re: [PATCH] Revert "staging:r8188eu: use lib80211 CCMP decrypt"

2019-01-02 Thread Ivan Safonov

On 1/2/19 4:06 AM, Larry Finger wrote:

On 1/1/19 1:31 PM, Michael Straube wrote:


I've tested your patch and it solved the issue. No freezes and dmesg 
looks good.


I noticed that try_then_request_module() is also used in 
rtw_wep_encrypt() and

rtw_wep_decrypt(). I guess that also could cause problems?


Yes, I believe it would if anyone is still using WEP. My plan is to get 
rid of the try_then_request_module() there as well, and for 
completeness, I plan to restore usage of the lib80211 routines for TKIP 
as well.


Patch "load lib80211 crypto ops from interruptible context" ( 
http://driverdev.linuxdriverproject.org/pipermail/driverdev-devel/2018-August/124851.html 
) is a preparation to replace
crypto_ops = try_then_request_module(lib80211_get_crypto_ops(*), 
"lib80211_crypt_*");

with
(struct crypto_algorithm).ops



Once I get a chance to test the TKIP and WEP changes, I plan to have a 
set of 4 patches to switch the driver to using lib80211 routines for all 
decryption/encryption.



There are four other patches to use lib80211:
use lib80211 CCMP decrypt ( 
http://driverdev.linuxdriverproject.org/pipermail/driverdev-devel/2018-February/116533.html 
)
Use lib80211 to encrypt (WEP) tx frames ( 
http://driverdev.linuxdriverproject.org/pipermail/driverdev-devel/2018-June/122642.html 
)
Use lib80211 to encrypt (TKIP) tx frames ( 
http://driverdev.linuxdriverproject.org/pipermail/driverdev-devel/2018-July/123249.html 
)
Use lib80211 to encrypt (CCMP) tx frames ( 
http://driverdev.linuxdriverproject.org/pipermail/driverdev-devel/2018-July/123250.html 
)


They all crash when try_then_request_module() called.



Larry




Re: [PATCH] Revert "staging:r8188eu: use lib80211 CCMP decrypt"

2019-01-02 Thread Ivan Safonov

On 1/2/19 12:38 AM, Larry Finger wrote:

On 1/1/19 3:02 AM, Ivan Safonov wrote:
I suggested a patch for loading modules from interruptible mode, but 
this patch remained unclaimed ( 
http://driverdev.linuxdriverproject.org/pipermail/driverdev-devel/2018-August/124851.html 
).


For some reason I thought that this patch had been removed and did not 
track the fate of this code ( 
http://driverdev.linuxdriverproject.org/pipermail/driverdev-devel/2018-August/124573.html 
).


That patch was quite extensive, but had only a minimal commit message. 
I'm surprised that it did not get a bad review, but I can see why it was 
ignored.

 > Where did you submit that patch? It certainly was never in my mailbox.


I send patches to emails from get_maintainer.pl list:

ivan@alpha ~/source/kernels/staging $ git format-patch 
515ce733e86ee2e1bea4dba76d2d4491013d0f73^..515ce733e86ee2e1bea4dba76d2d4491013d0f73 
-o /tmp/


/tmp/0001-staging-r8188eu-Use-lib80211-to-encrypt-CCMP-tx-fram.patch

ivan@alpha ~/source/kernels/staging $ ./scripts/get_maintainer.pl 
/tmp/0001-staging-r8188eu-Use-lib80211-to-encrypt-CCMP-tx-fram.patch


Greg Kroah-Hartman  (supporter:STAGING 
SUBSYSTEM,commit_signer:16/16=100%,authored:1/16=6%,added_lines:345/1450=24%)
Ivan Safonov  
(commit_signer:7/16=44%,authored:6/16=38%,added_lines:337/1450=23%,removed_lines:1380/1605=86%)
Michael Straube  
(commit_signer:6/16=38%,authored:6/16=38%,added_lines:715/1450=49%,removed_lines:92/1605=6%)
Santha Meena Ramamoorthy  
(commit_signer:2/16=12%,authored:2/16=12%)

Dan Carpenter  (commit_signer:1/16=6%)
Hans de Goede  (authored:1/16=6%)
de...@driverdev.osuosl.org (open list:STAGING SUBSYSTEM)
linux-kernel@vger.kernel.org (open list)

There is no your email.



Larry





Re: [PATCH] Revert "staging:r8188eu: use lib80211 CCMP decrypt"

2019-01-01 Thread Ivan Safonov
I suggested a patch for loading modules from interruptible mode, but 
this patch remained unclaimed ( 
http://driverdev.linuxdriverproject.org/pipermail/driverdev-devel/2018-August/124851.html 
).


For some reason I thought that this patch had been removed and did not 
track the fate of this code ( 
http://driverdev.linuxdriverproject.org/pipermail/driverdev-devel/2018-August/124573.html 
).


On 1/1/19 5:17 AM, Larry Finger wrote:

On 12/30/18 12:39 PM, Michael Straube wrote:

Commit 6bd082af7e36 ("staging:r8188eu: use lib80211 CCMP decrypt")
is causing hardfreeze whenever the driver tries to connect to my wifi
network. That makes the driver unusable on my system. Reverting the
commit fixes the issue and the driver works properly.

Dec 29 19:21:17 gentoo kernel: BUG: scheduling while atomic: 
swapper/6/0/0x0100


Michael,

I have verified the freezes that you see. Although I have not been able 
to capture the console dump, I think we are likely seeing the same problem.


I do have a work-around in that I have not gotten any freezes when I 
force module lib80211_crypt_ccmp to be loaded before I load module 
r8188eu. This clue was used in finding what seems to be a good fix.


I do not know anything about demand loading of modules using 
try_then_request_module(); however, I noticed that the macro actually 
calls __request_module(), which has the following comment:


  * Load a module using the user mode module loader. The function returns
  * zero on success or a negative errno code or positive exit code from
  * "modprobe" on failure. Note that a successful module load does not mean
  * the module did not then unload and exit on an error of its own. Callers
  * must check that the service they requested is now available not blindly
  * invoke it.

I note that it says "user mode module loader". Routine rtw_aes_decrypt() 
is likely inside some sort of locking, which leads to the "scheduling 
while atomic" bug that you see. As a result, I suspect that the module 
is not loaded, and that leads to the NULL dereference when the module is 
accessed. Please try the one-line patch attached, which forces lib80211 
to load when r8188eu is loaded. With this patch, I have been connected 
to an AES-encrypted AP for nearly 3 hours with no problems.


Larry




[PATCH] staging:r8188eu: load lib80211 crypto ops from interruptible context

2018-08-11 Thread Ivan Safonov
Preloading lib80211_crypt_* modules from an ioctl handlers
prevents the module loading from a tasklet.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_ap.c  |  4 +-
 drivers/staging/rtl8188eu/core/rtw_cmd.c |  8 +-
 drivers/staging/rtl8188eu/core/rtw_ioctl_set.c   |  6 +-
 drivers/staging/rtl8188eu/core/rtw_mlme.c| 14 ++--
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c|  4 +-
 drivers/staging/rtl8188eu/core/rtw_pwrctrl.c |  2 +-
 drivers/staging/rtl8188eu/core/rtw_recv.c|  2 +-
 drivers/staging/rtl8188eu/core/rtw_security.c|  1 -
 drivers/staging/rtl8188eu/core/rtw_xmit.c|  4 +-
 drivers/staging/rtl8188eu/hal/rtl8188e_dm.c  |  2 +-
 drivers/staging/rtl8188eu/hal/usb_halinit.c  |  2 +-
 drivers/staging/rtl8188eu/include/rtw_security.h | 54 ++---
 drivers/staging/rtl8188eu/include/sta_info.h |  2 +-
 drivers/staging/rtl8188eu/os_dep/ioctl_linux.c   | 98 
 drivers/staging/rtl8188eu/os_dep/mlme_linux.c|  4 +-
 drivers/staging/rtl8188eu/os_dep/os_intfs.c  |  4 +-
 16 files changed, 122 insertions(+), 89 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c 
b/drivers/staging/rtl8188eu/core/rtw_ap.c
index 676d549ef786..3a78bf115e9f 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ap.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ap.c
@@ -642,8 +642,8 @@ static void start_bss_network(struct adapter *padapter, u8 
*pbuf)
/* WEP Key will be set before this function, do not
 * clear CAM.
 */
-   if ((psecuritypriv->dot11PrivacyAlgrthm != _WEP40_) &&
-   (psecuritypriv->dot11PrivacyAlgrthm != _WEP104_))
+   if ((psecuritypriv->dot11PrivacyAlgrthm.id != _WEP40_) &&
+   (psecuritypriv->dot11PrivacyAlgrthm.id != _WEP104_))
flush_all_cam_entry(padapter);  /* clear CAM */
}
 
diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c 
b/drivers/staging/rtl8188eu/core/rtw_cmd.c
index 59039211dad2..499cfbebe6b9 100644
--- a/drivers/staging/rtl8188eu/core/rtw_cmd.c
+++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c
@@ -448,9 +448,9 @@ u8 rtw_joinbss_cmd(struct adapter  *padapter, struct 
wlan_network *pnetwork)
 * the connection to avoid some IOT issue.
 * Especially for Realtek 8192u SoftAP.
 */
-   if ((padapter->securitypriv.dot11PrivacyAlgrthm != _WEP40_) &&
-   (padapter->securitypriv.dot11PrivacyAlgrthm != _WEP104_) &&
-   (padapter->securitypriv.dot11PrivacyAlgrthm != _TKIP_)) {
+   if ((padapter->securitypriv.dot11PrivacyAlgrthm.id != _WEP40_) 
&&
+   (padapter->securitypriv.dot11PrivacyAlgrthm.id != _WEP104_) 
&&
+   (padapter->securitypriv.dot11PrivacyAlgrthm.id != _TKIP_)) {
/* rtw_restructure_ht_ie */
rtw_restructure_ht_ie(padapter, 
>network.ies[0], >ies[0],

pnetwork->network.ie_length, >ie_length);
@@ -570,7 +570,7 @@ u8 rtw_setstakey_cmd(struct adapter *padapter, u8 *psta, u8 
unicast_key)
ether_addr_copy(psetstakey_para->addr, sta->hwaddr);
 
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
-   psetstakey_para->algorithm = (unsigned 
char)psecuritypriv->dot11PrivacyAlgrthm;
+   psetstakey_para->algorithm = (unsigned 
char)psecuritypriv->dot11PrivacyAlgrthm.id;
else
GET_ENCRY_ALGO(psecuritypriv, sta, psetstakey_para->algorithm, 
false);
 
diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c 
b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c
index c040f185074b..e57a15940ea7 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c
@@ -481,15 +481,15 @@ u8 rtw_set_802_11_add_wep(struct adapter *padapter, 
struct ndis_802_11_wep *wep)
 
switch (wep->KeyLength) {
case 5:
-   psecuritypriv->dot11PrivacyAlgrthm = _WEP40_;
+   psecuritypriv->dot11PrivacyAlgrthm = 
create_crypto_algorithm(_WEP40_);
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, 
("MgntActrtw_set_802_11_add_wep:wep->KeyLength = 5\n"));
break;
case 13:
-   psecuritypriv->dot11PrivacyAlgrthm = _WEP104_;
+   psecuritypriv->dot11PrivacyAlgrthm = 
create_crypto_algorithm(_WEP104_);
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, 
("MgntActrtw_set_802_11_add_wep:wep->KeyLength = 13\n"));
break;
default:
-   psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
+   psecuritypriv->dot11PrivacyAlgrthm = 

[PATCH] staging:r8188eu: load lib80211 crypto ops from interruptible context

2018-08-11 Thread Ivan Safonov
Preloading lib80211_crypt_* modules from an ioctl handlers
prevents the module loading from a tasklet.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_ap.c  |  4 +-
 drivers/staging/rtl8188eu/core/rtw_cmd.c |  8 +-
 drivers/staging/rtl8188eu/core/rtw_ioctl_set.c   |  6 +-
 drivers/staging/rtl8188eu/core/rtw_mlme.c| 14 ++--
 drivers/staging/rtl8188eu/core/rtw_mlme_ext.c|  4 +-
 drivers/staging/rtl8188eu/core/rtw_pwrctrl.c |  2 +-
 drivers/staging/rtl8188eu/core/rtw_recv.c|  2 +-
 drivers/staging/rtl8188eu/core/rtw_security.c|  1 -
 drivers/staging/rtl8188eu/core/rtw_xmit.c|  4 +-
 drivers/staging/rtl8188eu/hal/rtl8188e_dm.c  |  2 +-
 drivers/staging/rtl8188eu/hal/usb_halinit.c  |  2 +-
 drivers/staging/rtl8188eu/include/rtw_security.h | 54 ++---
 drivers/staging/rtl8188eu/include/sta_info.h |  2 +-
 drivers/staging/rtl8188eu/os_dep/ioctl_linux.c   | 98 
 drivers/staging/rtl8188eu/os_dep/mlme_linux.c|  4 +-
 drivers/staging/rtl8188eu/os_dep/os_intfs.c  |  4 +-
 16 files changed, 122 insertions(+), 89 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_ap.c 
b/drivers/staging/rtl8188eu/core/rtw_ap.c
index 676d549ef786..3a78bf115e9f 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ap.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ap.c
@@ -642,8 +642,8 @@ static void start_bss_network(struct adapter *padapter, u8 
*pbuf)
/* WEP Key will be set before this function, do not
 * clear CAM.
 */
-   if ((psecuritypriv->dot11PrivacyAlgrthm != _WEP40_) &&
-   (psecuritypriv->dot11PrivacyAlgrthm != _WEP104_))
+   if ((psecuritypriv->dot11PrivacyAlgrthm.id != _WEP40_) &&
+   (psecuritypriv->dot11PrivacyAlgrthm.id != _WEP104_))
flush_all_cam_entry(padapter);  /* clear CAM */
}
 
diff --git a/drivers/staging/rtl8188eu/core/rtw_cmd.c 
b/drivers/staging/rtl8188eu/core/rtw_cmd.c
index 59039211dad2..499cfbebe6b9 100644
--- a/drivers/staging/rtl8188eu/core/rtw_cmd.c
+++ b/drivers/staging/rtl8188eu/core/rtw_cmd.c
@@ -448,9 +448,9 @@ u8 rtw_joinbss_cmd(struct adapter  *padapter, struct 
wlan_network *pnetwork)
 * the connection to avoid some IOT issue.
 * Especially for Realtek 8192u SoftAP.
 */
-   if ((padapter->securitypriv.dot11PrivacyAlgrthm != _WEP40_) &&
-   (padapter->securitypriv.dot11PrivacyAlgrthm != _WEP104_) &&
-   (padapter->securitypriv.dot11PrivacyAlgrthm != _TKIP_)) {
+   if ((padapter->securitypriv.dot11PrivacyAlgrthm.id != _WEP40_) 
&&
+   (padapter->securitypriv.dot11PrivacyAlgrthm.id != _WEP104_) 
&&
+   (padapter->securitypriv.dot11PrivacyAlgrthm.id != _TKIP_)) {
/* rtw_restructure_ht_ie */
rtw_restructure_ht_ie(padapter, 
>network.ies[0], >ies[0],

pnetwork->network.ie_length, >ie_length);
@@ -570,7 +570,7 @@ u8 rtw_setstakey_cmd(struct adapter *padapter, u8 *psta, u8 
unicast_key)
ether_addr_copy(psetstakey_para->addr, sta->hwaddr);
 
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE))
-   psetstakey_para->algorithm = (unsigned 
char)psecuritypriv->dot11PrivacyAlgrthm;
+   psetstakey_para->algorithm = (unsigned 
char)psecuritypriv->dot11PrivacyAlgrthm.id;
else
GET_ENCRY_ALGO(psecuritypriv, sta, psetstakey_para->algorithm, 
false);
 
diff --git a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c 
b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c
index c040f185074b..e57a15940ea7 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ioctl_set.c
@@ -481,15 +481,15 @@ u8 rtw_set_802_11_add_wep(struct adapter *padapter, 
struct ndis_802_11_wep *wep)
 
switch (wep->KeyLength) {
case 5:
-   psecuritypriv->dot11PrivacyAlgrthm = _WEP40_;
+   psecuritypriv->dot11PrivacyAlgrthm = 
create_crypto_algorithm(_WEP40_);
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, 
("MgntActrtw_set_802_11_add_wep:wep->KeyLength = 5\n"));
break;
case 13:
-   psecuritypriv->dot11PrivacyAlgrthm = _WEP104_;
+   psecuritypriv->dot11PrivacyAlgrthm = 
create_crypto_algorithm(_WEP104_);
RT_TRACE(_module_rtl871x_ioctl_set_c_, _drv_info_, 
("MgntActrtw_set_802_11_add_wep:wep->KeyLength = 13\n"));
break;
default:
-   psecuritypriv->dot11PrivacyAlgrthm = _NO_PRIVACY_;
+   psecuritypriv->dot11PrivacyAlgrthm = 

Re: linux-next: build failure after merge of the staging tree

2018-07-17 Thread Ivan Safonov

On 07/17/2018 09:28 AM, Stephen Rothwell wrote:

Hi Greg,

After merging the staging tree, today's linux-next build (x86_64
allmodconfig) failed like this:

drivers/staging/rtl8188eu/core/rtw_security.c: In function 'rtw_tkip_decrypt':
drivers/staging/rtl8188eu/core/rtw_security.c:399:21: error: storage size of 
'mycontext' isn't known
   struct arc4context mycontext;
  ^
drivers/staging/rtl8188eu/core/rtw_security.c:437:4: error: implicit 
declaration of function 'phase1' [-Werror=implicit-function-declaration]
 phase1((u16 *)[0], prwskey, >ta[0], pnh);
 ^~
drivers/staging/rtl8188eu/core/rtw_security.c:438:4: error: implicit 
declaration of function 'phase2' [-Werror=implicit-function-declaration]
 phase2([0], prwskey, (unsigned short *)[0], pnl);
 ^~
drivers/staging/rtl8188eu/core/rtw_security.c:442:4: error: implicit 
declaration of function 'arcfour_init'; did you mean 'rcu_init'? 
[-Werror=implicit-function-declaration]
 arcfour_init(, rc4key, 16);
 ^~~~
 rcu_init
drivers/staging/rtl8188eu/core/rtw_security.c:443:4: error: implicit 
declaration of function 'arcfour_encrypt'; did you mean 'rtw_wep_encrypt'? 
[-Werror=implicit-function-declaration]
 arcfour_encrypt(, payload, payload, length);
 ^~~
 rtw_wep_encrypt
drivers/staging/rtl8188eu/core/rtw_security.c:445:23: error: implicit 
declaration of function 'getcrc32'; did you mean 'get_cred'? 
[-Werror=implicit-function-declaration]
 *((__le32 *)crc) = getcrc32(payload, length-4);
^~~~
get_cred
drivers/staging/rtl8188eu/core/rtw_security.c:399:21: warning: unused variable 
'mycontext' [-Wunused-variable]
   struct arc4context mycontext;
  ^

Caused by commit

   0d4876f4e977 ("staging:r8188eu: Use lib80211 to encrypt (TKIP) tx frames")

interacting with commit

   69a1d98c831e ("Revert "staging:r8188eu: Use lib80211 to support TKIP"")

from the staging.current tree.

I just reverted the staging.current commit ...

All commits using lib8022 in r8188eu cause the system to crash. I will 
revert 5 commits in the near future (2 for decryption and 3 for 
encryption) in one patch, it will be bit easier.


I apologize for such an unpleasant situation.

Ivan Safonov.


Re: linux-next: build failure after merge of the staging tree

2018-07-17 Thread Ivan Safonov

On 07/17/2018 09:28 AM, Stephen Rothwell wrote:

Hi Greg,

After merging the staging tree, today's linux-next build (x86_64
allmodconfig) failed like this:

drivers/staging/rtl8188eu/core/rtw_security.c: In function 'rtw_tkip_decrypt':
drivers/staging/rtl8188eu/core/rtw_security.c:399:21: error: storage size of 
'mycontext' isn't known
   struct arc4context mycontext;
  ^
drivers/staging/rtl8188eu/core/rtw_security.c:437:4: error: implicit 
declaration of function 'phase1' [-Werror=implicit-function-declaration]
 phase1((u16 *)[0], prwskey, >ta[0], pnh);
 ^~
drivers/staging/rtl8188eu/core/rtw_security.c:438:4: error: implicit 
declaration of function 'phase2' [-Werror=implicit-function-declaration]
 phase2([0], prwskey, (unsigned short *)[0], pnl);
 ^~
drivers/staging/rtl8188eu/core/rtw_security.c:442:4: error: implicit 
declaration of function 'arcfour_init'; did you mean 'rcu_init'? 
[-Werror=implicit-function-declaration]
 arcfour_init(, rc4key, 16);
 ^~~~
 rcu_init
drivers/staging/rtl8188eu/core/rtw_security.c:443:4: error: implicit 
declaration of function 'arcfour_encrypt'; did you mean 'rtw_wep_encrypt'? 
[-Werror=implicit-function-declaration]
 arcfour_encrypt(, payload, payload, length);
 ^~~
 rtw_wep_encrypt
drivers/staging/rtl8188eu/core/rtw_security.c:445:23: error: implicit 
declaration of function 'getcrc32'; did you mean 'get_cred'? 
[-Werror=implicit-function-declaration]
 *((__le32 *)crc) = getcrc32(payload, length-4);
^~~~
get_cred
drivers/staging/rtl8188eu/core/rtw_security.c:399:21: warning: unused variable 
'mycontext' [-Wunused-variable]
   struct arc4context mycontext;
  ^

Caused by commit

   0d4876f4e977 ("staging:r8188eu: Use lib80211 to encrypt (TKIP) tx frames")

interacting with commit

   69a1d98c831e ("Revert "staging:r8188eu: Use lib80211 to support TKIP"")

from the staging.current tree.

I just reverted the staging.current commit ...

All commits using lib8022 in r8188eu cause the system to crash. I will 
revert 5 commits in the near future (2 for decryption and 3 for 
encryption) in one patch, it will be bit easier.


I apologize for such an unpleasant situation.

Ivan Safonov.


[PATCH 1/2] staging:r8188eu: Use lib80211 to encrypt (TKIP) tx frames

2018-07-14 Thread Ivan Safonov
Put data to skb, decrypt with lib80211_crypt_tkip, and place back to tx buffer.

MIC calculation will be replaced later.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_security.c | 419 +-
 1 file changed, 77 insertions(+), 342 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index a01290467c64..ada69efd61b3 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -12,121 +12,6 @@
 #include 
 #include 
 
-/* WEP related = */
-
-#define CRC32_POLY 0x04c11db7
-
-struct arc4context {
-   u32 x;
-   u32 y;
-   u8 state[256];
-};
-
-static void arcfour_init(struct arc4context *parc4ctx, u8 *key, u32key_len)
-{
-   u32 t, u;
-   u32 keyindex;
-   u32 stateindex;
-   u8 *state;
-   u32 counter;
-
-   state = parc4ctx->state;
-   parc4ctx->x = 0;
-   parc4ctx->y = 0;
-   for (counter = 0; counter < 256; counter++)
-   state[counter] = (u8)counter;
-   keyindex = 0;
-   stateindex = 0;
-   for (counter = 0; counter < 256; counter++) {
-   t = state[counter];
-   stateindex = (stateindex + key[keyindex] + t) & 0xff;
-   u = state[stateindex];
-   state[stateindex] = (u8)t;
-   state[counter] = (u8)u;
-   if (++keyindex >= key_len)
-   keyindex = 0;
-   }
-}
-
-static u32 arcfour_byte(struct arc4context *parc4ctx)
-{
-   u32 x;
-   u32 y;
-   u32 sx, sy;
-   u8 *state;
-
-   state = parc4ctx->state;
-   x = (parc4ctx->x + 1) & 0xff;
-   sx = state[x];
-   y = (sx + parc4ctx->y) & 0xff;
-   sy = state[y];
-   parc4ctx->x = x;
-   parc4ctx->y = y;
-   state[y] = (u8)sx;
-   state[x] = (u8)sy;
-   return state[(sx + sy) & 0xff];
-}
-
-static void arcfour_encrypt(struct arc4context *parc4ctx, u8 *dest, u8 *src, 
u32 len)
-{
-   u32 i;
-
-   for (i = 0; i < len; i++)
-   dest[i] = src[i] ^ (unsigned char)arcfour_byte(parc4ctx);
-}
-
-static int bcrc32initialized;
-static u32 crc32_table[256];
-
-static u8 crc32_reverseBit(u8 data)
-{
-   return (u8)((data<<7)&0x80) | ((data<<5)&0x40) | ((data<<3)&0x20) |
-  ((data<<1)&0x10) | ((data>>1)&0x08) | ((data>>3)&0x04) |
-  ((data>>5)&0x02) | ((data>>7)&0x01);
-}
-
-static void crc32_init(void)
-{
-   if (bcrc32initialized == 1) {
-   return;
-   } else {
-   int i, j;
-   u32 c;
-   u8 *p = (u8 *), *p1;
-   u8 k;
-
-   c = 0x1234;
-
-   for (i = 0; i < 256; ++i) {
-   k = crc32_reverseBit((u8)i);
-   for (c = ((u32)k) << 24, j = 8; j > 0; --j)
-   c = c & 0x8000 ? (c << 1) ^ CRC32_POLY : (c 
<< 1);
-   p1 = (u8 *)_table[i];
-
-   p1[0] = crc32_reverseBit(p[3]);
-   p1[1] = crc32_reverseBit(p[2]);
-   p1[2] = crc32_reverseBit(p[1]);
-   p1[3] = crc32_reverseBit(p[0]);
-   }
-   bcrc32initialized = 1;
-   }
-}
-
-static __le32 getcrc32(u8 *buf, int len)
-{
-   u8 *p;
-   u32  crc;
-
-   if (bcrc32initialized == 0)
-   crc32_init();
-
-   crc = 0x;   /* preload shift register, per CRC-32 spec */
-
-   for (p = buf; len > 0; ++p, --len)
-   crc = crc32_table[(crc ^ *p) & 0xff] ^ (crc >> 8);
-   return cpu_to_le32(~crc);/* transmit complement, per CRC-32 spec */
-}
-
 /*
Need to consider the fragment  situation
 */
@@ -395,202 +280,24 @@ void rtw_seccalctkipmic(u8 *key, u8 *header, u8 *data, 
u32 data_len, u8 *mic_cod
 #define P1K_SIZE10/*  80-bit Phase1 key*/
 #define RC4_KEY_SIZE 16/* 128-bit RC4KEY (104 bits unknown) */
 
-/* 2-unsigned char by 2-unsigned char subset of the full AES S-box table */
-static const unsigned short Sbox1[2][256] = {  /* Sbox for hash (can be in 
ROM) */
-{
-   0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154,
-   0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A,
-   0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B,
-   0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B,
-   0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F,
-   0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F,
-   0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5,
-   0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0

[PATCH 2/2] staging:r8188eu: Use lib80211 to encrypt (CCMP) tx frames

2018-07-14 Thread Ivan Safonov
Put data to skb, decrypt with lib80211_crypt_ccmp, and place back to tx buffer.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_security.c | 778 +++---
 1 file changed, 72 insertions(+), 706 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index ada69efd61b3..508d3299b4e9 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -462,554 +462,107 @@ u32 rtw_tkip_decrypt(struct adapter *padapter, u8 
*precvframe)
return res;
 }
 
-/* 3   = AES related = */
-
-
-#define MAX_MSG_SIZE   2048
-/*/
-/ SBOX Table */
-/*/
-
-static  u8 sbox_table[256] = {
-   0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
-   0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
-   0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
-   0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
-   0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
-   0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
-   0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
-   0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
-   0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
-   0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
-   0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
-   0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
-   0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
-   0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
-   0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
-   0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
-   0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
-   0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
-   0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
-   0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
-   0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
-   0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
-   0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
-   0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
-   0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
-   0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
-   0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
-   0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
-   0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
-   0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
-   0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
-   0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
-};
-
-/*/
-/ Function Prototypes /
-/*/
-
-static void bitwise_xor(u8 *ina, u8 *inb, u8 *out);
-static void construct_mic_iv(u8 *mic_header1, int qc_exists, int a4_exists, u8 
*mpdu, uint payload_length, u8 *pn_vector);
-static void construct_mic_header1(u8 *mic_header1, int header_length, u8 
*mpdu);
-static void construct_mic_header2(u8 *mic_header2, u8 *mpdu, int a4_exists, 
int qc_exists);
-static void construct_ctr_preload(u8 *ctr_preload, int a4_exists, int 
qc_exists, u8 *mpdu, u8 *pn_vector, int c);
-static void xor_128(u8 *a, u8 *b, u8 *out);
-static void xor_32(u8 *a, u8 *b, u8 *out);
-static u8 sbox(u8 a);
-static void next_key(u8 *key, int round);
-static void byte_sub(u8 *in, u8 *out);
-static void shift_row(u8 *in, u8 *out);
-static void mix_column(u8 *in, u8 *out);
-static void aes128k128d(u8 *key, u8 *data, u8 *ciphertext);
-
-//
-/* aes128k128d()   */
-/* Performs a 128 bit AES encrypt with  */
-/* 128 bit data.   */
-//
-static void xor_128(u8 *a, u8 *b, u8 *out)
-{
-   int i;
-
-   for (i = 0; i < 16; i++)
-   out[i] = a[i] ^ b[i];
-}
-
-static void xor_32(u8 *a, u8 *b, u8 *out)
-{
-   int i;
-
-   for (i = 0; i < 4; i++)
-   out[i] = a[i] ^ b[i];
-}
-
-static u8 sbox(u8 a)
-{
-   return sbox_table[(int)a];
-}
-
-static void next_key(u8 *key, int round)
-{
-   u8 rcon;
-   u8 sbox_key[4];
-   u8 rcon_table[12] = {
-   0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-   0x1b, 0x36, 0x36, 0x36
-   };
-
-   sbox_key[0] = sbox(key[13]);
-   sbox_key[1] = sbox(key[14]);
-   sbox_key[2] = sbox(key[15]);
-   sbox_key[3] = sbox(key[12]);
-
-   rcon = rcon_table[round];
-
-   xor_32([0], sbox_key, [0]);
-   key[0] = key[0] ^ rcon;
-
-   xor_32([4], [0], [4]);
-   xor_32([8], [4], [8]);
-   xor_32([12], [8], [12]);
-}
-
-static void byte_sub(u8 *in, u8 *out)
-{
-   int i;
-   for (i = 0; i < 16; i++)
-   out[i] = sbox(in[i]);
-}
-
-static void shift_row(u8 *in, u8 *out)
-{
-   out[0] =  in[0];
-   out[1] =  in[5];
-   out[2] =  in[10];
-   out[3] =  in[15];
-   out[4

[PATCH 1/2] staging:r8188eu: Use lib80211 to encrypt (TKIP) tx frames

2018-07-14 Thread Ivan Safonov
Put data to skb, decrypt with lib80211_crypt_tkip, and place back to tx buffer.

MIC calculation will be replaced later.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_security.c | 419 +-
 1 file changed, 77 insertions(+), 342 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index a01290467c64..ada69efd61b3 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -12,121 +12,6 @@
 #include 
 #include 
 
-/* WEP related = */
-
-#define CRC32_POLY 0x04c11db7
-
-struct arc4context {
-   u32 x;
-   u32 y;
-   u8 state[256];
-};
-
-static void arcfour_init(struct arc4context *parc4ctx, u8 *key, u32key_len)
-{
-   u32 t, u;
-   u32 keyindex;
-   u32 stateindex;
-   u8 *state;
-   u32 counter;
-
-   state = parc4ctx->state;
-   parc4ctx->x = 0;
-   parc4ctx->y = 0;
-   for (counter = 0; counter < 256; counter++)
-   state[counter] = (u8)counter;
-   keyindex = 0;
-   stateindex = 0;
-   for (counter = 0; counter < 256; counter++) {
-   t = state[counter];
-   stateindex = (stateindex + key[keyindex] + t) & 0xff;
-   u = state[stateindex];
-   state[stateindex] = (u8)t;
-   state[counter] = (u8)u;
-   if (++keyindex >= key_len)
-   keyindex = 0;
-   }
-}
-
-static u32 arcfour_byte(struct arc4context *parc4ctx)
-{
-   u32 x;
-   u32 y;
-   u32 sx, sy;
-   u8 *state;
-
-   state = parc4ctx->state;
-   x = (parc4ctx->x + 1) & 0xff;
-   sx = state[x];
-   y = (sx + parc4ctx->y) & 0xff;
-   sy = state[y];
-   parc4ctx->x = x;
-   parc4ctx->y = y;
-   state[y] = (u8)sx;
-   state[x] = (u8)sy;
-   return state[(sx + sy) & 0xff];
-}
-
-static void arcfour_encrypt(struct arc4context *parc4ctx, u8 *dest, u8 *src, 
u32 len)
-{
-   u32 i;
-
-   for (i = 0; i < len; i++)
-   dest[i] = src[i] ^ (unsigned char)arcfour_byte(parc4ctx);
-}
-
-static int bcrc32initialized;
-static u32 crc32_table[256];
-
-static u8 crc32_reverseBit(u8 data)
-{
-   return (u8)((data<<7)&0x80) | ((data<<5)&0x40) | ((data<<3)&0x20) |
-  ((data<<1)&0x10) | ((data>>1)&0x08) | ((data>>3)&0x04) |
-  ((data>>5)&0x02) | ((data>>7)&0x01);
-}
-
-static void crc32_init(void)
-{
-   if (bcrc32initialized == 1) {
-   return;
-   } else {
-   int i, j;
-   u32 c;
-   u8 *p = (u8 *), *p1;
-   u8 k;
-
-   c = 0x1234;
-
-   for (i = 0; i < 256; ++i) {
-   k = crc32_reverseBit((u8)i);
-   for (c = ((u32)k) << 24, j = 8; j > 0; --j)
-   c = c & 0x8000 ? (c << 1) ^ CRC32_POLY : (c 
<< 1);
-   p1 = (u8 *)_table[i];
-
-   p1[0] = crc32_reverseBit(p[3]);
-   p1[1] = crc32_reverseBit(p[2]);
-   p1[2] = crc32_reverseBit(p[1]);
-   p1[3] = crc32_reverseBit(p[0]);
-   }
-   bcrc32initialized = 1;
-   }
-}
-
-static __le32 getcrc32(u8 *buf, int len)
-{
-   u8 *p;
-   u32  crc;
-
-   if (bcrc32initialized == 0)
-   crc32_init();
-
-   crc = 0x;   /* preload shift register, per CRC-32 spec */
-
-   for (p = buf; len > 0; ++p, --len)
-   crc = crc32_table[(crc ^ *p) & 0xff] ^ (crc >> 8);
-   return cpu_to_le32(~crc);/* transmit complement, per CRC-32 spec */
-}
-
 /*
Need to consider the fragment  situation
 */
@@ -395,202 +280,24 @@ void rtw_seccalctkipmic(u8 *key, u8 *header, u8 *data, 
u32 data_len, u8 *mic_cod
 #define P1K_SIZE10/*  80-bit Phase1 key*/
 #define RC4_KEY_SIZE 16/* 128-bit RC4KEY (104 bits unknown) */
 
-/* 2-unsigned char by 2-unsigned char subset of the full AES S-box table */
-static const unsigned short Sbox1[2][256] = {  /* Sbox for hash (can be in 
ROM) */
-{
-   0xC6A5, 0xF884, 0xEE99, 0xF68D, 0xFF0D, 0xD6BD, 0xDEB1, 0x9154,
-   0x6050, 0x0203, 0xCEA9, 0x567D, 0xE719, 0xB562, 0x4DE6, 0xEC9A,
-   0x8F45, 0x1F9D, 0x8940, 0xFA87, 0xEF15, 0xB2EB, 0x8EC9, 0xFB0B,
-   0x41EC, 0xB367, 0x5FFD, 0x45EA, 0x23BF, 0x53F7, 0xE496, 0x9B5B,
-   0x75C2, 0xE11C, 0x3DAE, 0x4C6A, 0x6C5A, 0x7E41, 0xF502, 0x834F,
-   0x685C, 0x51F4, 0xD134, 0xF908, 0xE293, 0xAB73, 0x6253, 0x2A3F,
-   0x080C, 0x9552, 0x4665, 0x9D5E, 0x3028, 0x37A1, 0x0A0F, 0x2FB5,
-   0x0E09, 0x2436, 0x1B9B, 0xDF3D, 0xCD26, 0x4E69, 0

[PATCH 2/2] staging:r8188eu: Use lib80211 to encrypt (CCMP) tx frames

2018-07-14 Thread Ivan Safonov
Put data to skb, decrypt with lib80211_crypt_ccmp, and place back to tx buffer.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_security.c | 778 +++---
 1 file changed, 72 insertions(+), 706 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index ada69efd61b3..508d3299b4e9 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -462,554 +462,107 @@ u32 rtw_tkip_decrypt(struct adapter *padapter, u8 
*precvframe)
return res;
 }
 
-/* 3   = AES related = */
-
-
-#define MAX_MSG_SIZE   2048
-/*/
-/ SBOX Table */
-/*/
-
-static  u8 sbox_table[256] = {
-   0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
-   0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
-   0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
-   0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
-   0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
-   0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
-   0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
-   0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
-   0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
-   0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
-   0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
-   0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
-   0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
-   0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
-   0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
-   0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
-   0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
-   0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
-   0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
-   0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
-   0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
-   0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
-   0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
-   0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
-   0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
-   0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
-   0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
-   0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
-   0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
-   0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
-   0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
-   0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
-};
-
-/*/
-/ Function Prototypes /
-/*/
-
-static void bitwise_xor(u8 *ina, u8 *inb, u8 *out);
-static void construct_mic_iv(u8 *mic_header1, int qc_exists, int a4_exists, u8 
*mpdu, uint payload_length, u8 *pn_vector);
-static void construct_mic_header1(u8 *mic_header1, int header_length, u8 
*mpdu);
-static void construct_mic_header2(u8 *mic_header2, u8 *mpdu, int a4_exists, 
int qc_exists);
-static void construct_ctr_preload(u8 *ctr_preload, int a4_exists, int 
qc_exists, u8 *mpdu, u8 *pn_vector, int c);
-static void xor_128(u8 *a, u8 *b, u8 *out);
-static void xor_32(u8 *a, u8 *b, u8 *out);
-static u8 sbox(u8 a);
-static void next_key(u8 *key, int round);
-static void byte_sub(u8 *in, u8 *out);
-static void shift_row(u8 *in, u8 *out);
-static void mix_column(u8 *in, u8 *out);
-static void aes128k128d(u8 *key, u8 *data, u8 *ciphertext);
-
-//
-/* aes128k128d()   */
-/* Performs a 128 bit AES encrypt with  */
-/* 128 bit data.   */
-//
-static void xor_128(u8 *a, u8 *b, u8 *out)
-{
-   int i;
-
-   for (i = 0; i < 16; i++)
-   out[i] = a[i] ^ b[i];
-}
-
-static void xor_32(u8 *a, u8 *b, u8 *out)
-{
-   int i;
-
-   for (i = 0; i < 4; i++)
-   out[i] = a[i] ^ b[i];
-}
-
-static u8 sbox(u8 a)
-{
-   return sbox_table[(int)a];
-}
-
-static void next_key(u8 *key, int round)
-{
-   u8 rcon;
-   u8 sbox_key[4];
-   u8 rcon_table[12] = {
-   0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80,
-   0x1b, 0x36, 0x36, 0x36
-   };
-
-   sbox_key[0] = sbox(key[13]);
-   sbox_key[1] = sbox(key[14]);
-   sbox_key[2] = sbox(key[15]);
-   sbox_key[3] = sbox(key[12]);
-
-   rcon = rcon_table[round];
-
-   xor_32([0], sbox_key, [0]);
-   key[0] = key[0] ^ rcon;
-
-   xor_32([4], [0], [4]);
-   xor_32([8], [4], [8]);
-   xor_32([12], [8], [12]);
-}
-
-static void byte_sub(u8 *in, u8 *out)
-{
-   int i;
-   for (i = 0; i < 16; i++)
-   out[i] = sbox(in[i]);
-}
-
-static void shift_row(u8 *in, u8 *out)
-{
-   out[0] =  in[0];
-   out[1] =  in[5];
-   out[2] =  in[10];
-   out[3] =  in[15];
-   out[4

[PATCH v3] staging:r8188eu: Use lib80211 to encrypt (WEP) tx frames

2018-06-30 Thread Ivan Safonov
Put data to skb, decrypt with lib80211_crypt_wep, and place back to tx buffer.

Signed-off-by: Ivan Safonov 
---
v2:
  - refactor error handling,
v3:
  - fix commit message.

 drivers/staging/rtl8188eu/core/rtw_security.c | 82 +++
 1 file changed, 47 insertions(+), 35 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index 5b8d7288a4e7..a01290467c64 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -131,60 +131,72 @@ static __le32 getcrc32(u8 *buf, int len)
Need to consider the fragment  situation
 */
 void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
-{  /*  exclude ICV */
-
-   unsigned char   crc[4];
-   struct arc4context   mycontext;
-
+{
int curfragnum, length;
-   u32 keylength;
-
-   u8  *pframe, *payload, *iv;/* wepkey */
-   u8  wepkey[16];
-   u8   hw_hdr_offset = 0;
+   u8 *pframe;
+   u8 hw_hdr_offset = 0;
struct  pkt_attrib   *pattrib = &((struct xmit_frame 
*)pxmitframe)->attrib;
struct  security_priv   *psecuritypriv = >securitypriv;
struct  xmit_priv   *pxmitpriv = >xmitpriv;
-
+   const int keyindex = psecuritypriv->dot11PrivacyKeyIndex;
+   void *crypto_private;
+   struct sk_buff *skb;
+   struct lib80211_crypto_ops *crypto_ops;
 
if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL)
return;
 
+   if ((pattrib->encrypt != _WEP40_) && (pattrib->encrypt != _WEP104_))
+   return;
+
hw_hdr_offset = TXDESC_SIZE +
 (((struct xmit_frame *)pxmitframe)->pkt_offset * 
PACKET_OFFSET_SZ);
 
pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + hw_hdr_offset;
 
-   /* start to encrypt each fragment */
-   if ((pattrib->encrypt == _WEP40_) || (pattrib->encrypt == _WEP104_)) {
-   keylength = 
psecuritypriv->dot11DefKeylen[psecuritypriv->dot11PrivacyKeyIndex];
+   crypto_ops = try_then_request_module(lib80211_get_crypto_ops("WEP"), 
"lib80211_crypt_wep");
 
-   for (curfragnum = 0; curfragnum < pattrib->nr_frags; 
curfragnum++) {
-   iv = pframe+pattrib->hdrlen;
-   memcpy([0], iv, 3);
-   memcpy([3], 
>dot11DefKey[psecuritypriv->dot11PrivacyKeyIndex].skey[0], 
keylength);
-   payload = pframe+pattrib->iv_len+pattrib->hdrlen;
+   if (!crypto_ops)
+   return;
 
-   if ((curfragnum+1) == pattrib->nr_frags) {  /* the 
last fragment */
-   length = 
pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
+   crypto_private = crypto_ops->init(keyindex);
+   if (!crypto_private)
+   return;
 
-   *((__le32 *)crc) = getcrc32(payload, length);
+   if (crypto_ops->set_key(psecuritypriv->dot11DefKey[keyindex].skey,
+   psecuritypriv->dot11DefKeylen[keyindex], NULL, 
crypto_private) < 0)
+   goto free_crypto_private;
 
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-   } else {
-   length = 
pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
-   *((__le32 *)crc) = getcrc32(payload, length);
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-
-   pframe += pxmitpriv->frag_len;
-   pframe = (u8 *)round_up((size_t)(pframe), 4);
-   }
+   for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {
+   if (curfragnum + 1 == pattrib->nr_frags)
+   length = pattrib->last_txcmdsz;
+   else
+   length = pxmitpriv->frag_len;
+   skb = dev_alloc_skb(length);
+   if (!skb)
+   goto free_crypto_private;
+
+   skb_put_data(skb, pframe, length);
+
+   memmove(skb->data + 4, skb->data, pattrib->hdrlen);
+   skb_pull(skb, 4);
+   skb_trim(skb, skb->len - 4);
+
+   if (crypto_ops->encrypt_mpdu(skb, pattrib->hdrlen, 
crypto_private)) {
+   kfree_skb(skb);
+   goto free_cryp

[PATCH v3] staging:r8188eu: Use lib80211 to encrypt (WEP) tx frames

2018-06-30 Thread Ivan Safonov
Put data to skb, decrypt with lib80211_crypt_wep, and place back to tx buffer.

Signed-off-by: Ivan Safonov 
---
v2:
  - refactor error handling,
v3:
  - fix commit message.

 drivers/staging/rtl8188eu/core/rtw_security.c | 82 +++
 1 file changed, 47 insertions(+), 35 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index 5b8d7288a4e7..a01290467c64 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -131,60 +131,72 @@ static __le32 getcrc32(u8 *buf, int len)
Need to consider the fragment  situation
 */
 void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
-{  /*  exclude ICV */
-
-   unsigned char   crc[4];
-   struct arc4context   mycontext;
-
+{
int curfragnum, length;
-   u32 keylength;
-
-   u8  *pframe, *payload, *iv;/* wepkey */
-   u8  wepkey[16];
-   u8   hw_hdr_offset = 0;
+   u8 *pframe;
+   u8 hw_hdr_offset = 0;
struct  pkt_attrib   *pattrib = &((struct xmit_frame 
*)pxmitframe)->attrib;
struct  security_priv   *psecuritypriv = >securitypriv;
struct  xmit_priv   *pxmitpriv = >xmitpriv;
-
+   const int keyindex = psecuritypriv->dot11PrivacyKeyIndex;
+   void *crypto_private;
+   struct sk_buff *skb;
+   struct lib80211_crypto_ops *crypto_ops;
 
if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL)
return;
 
+   if ((pattrib->encrypt != _WEP40_) && (pattrib->encrypt != _WEP104_))
+   return;
+
hw_hdr_offset = TXDESC_SIZE +
 (((struct xmit_frame *)pxmitframe)->pkt_offset * 
PACKET_OFFSET_SZ);
 
pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + hw_hdr_offset;
 
-   /* start to encrypt each fragment */
-   if ((pattrib->encrypt == _WEP40_) || (pattrib->encrypt == _WEP104_)) {
-   keylength = 
psecuritypriv->dot11DefKeylen[psecuritypriv->dot11PrivacyKeyIndex];
+   crypto_ops = try_then_request_module(lib80211_get_crypto_ops("WEP"), 
"lib80211_crypt_wep");
 
-   for (curfragnum = 0; curfragnum < pattrib->nr_frags; 
curfragnum++) {
-   iv = pframe+pattrib->hdrlen;
-   memcpy([0], iv, 3);
-   memcpy([3], 
>dot11DefKey[psecuritypriv->dot11PrivacyKeyIndex].skey[0], 
keylength);
-   payload = pframe+pattrib->iv_len+pattrib->hdrlen;
+   if (!crypto_ops)
+   return;
 
-   if ((curfragnum+1) == pattrib->nr_frags) {  /* the 
last fragment */
-   length = 
pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
+   crypto_private = crypto_ops->init(keyindex);
+   if (!crypto_private)
+   return;
 
-   *((__le32 *)crc) = getcrc32(payload, length);
+   if (crypto_ops->set_key(psecuritypriv->dot11DefKey[keyindex].skey,
+   psecuritypriv->dot11DefKeylen[keyindex], NULL, 
crypto_private) < 0)
+   goto free_crypto_private;
 
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-   } else {
-   length = 
pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
-   *((__le32 *)crc) = getcrc32(payload, length);
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-
-   pframe += pxmitpriv->frag_len;
-   pframe = (u8 *)round_up((size_t)(pframe), 4);
-   }
+   for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {
+   if (curfragnum + 1 == pattrib->nr_frags)
+   length = pattrib->last_txcmdsz;
+   else
+   length = pxmitpriv->frag_len;
+   skb = dev_alloc_skb(length);
+   if (!skb)
+   goto free_crypto_private;
+
+   skb_put_data(skb, pframe, length);
+
+   memmove(skb->data + 4, skb->data, pattrib->hdrlen);
+   skb_pull(skb, 4);
+   skb_trim(skb, skb->len - 4);
+
+   if (crypto_ops->encrypt_mpdu(skb, pattrib->hdrlen, 
crypto_private)) {
+   kfree_skb(skb);
+   goto free_cryp

[PATCH v2] staging:r8188eu: Use lib80211 to encrypt (WEP) tx frames

2018-06-30 Thread Ivan Safonov
Put data to skb, decrypt with lib80211_crypt_wep, and place back to tx buffer.

---
v2:
  - refactor error handling.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_security.c | 82 +++
 1 file changed, 47 insertions(+), 35 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index 5b8d7288a4e7..a01290467c64 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -131,60 +131,72 @@ static __le32 getcrc32(u8 *buf, int len)
Need to consider the fragment  situation
 */
 void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
-{  /*  exclude ICV */
-
-   unsigned char   crc[4];
-   struct arc4context   mycontext;
-
+{
int curfragnum, length;
-   u32 keylength;
-
-   u8  *pframe, *payload, *iv;/* wepkey */
-   u8  wepkey[16];
-   u8   hw_hdr_offset = 0;
+   u8 *pframe;
+   u8 hw_hdr_offset = 0;
struct  pkt_attrib   *pattrib = &((struct xmit_frame 
*)pxmitframe)->attrib;
struct  security_priv   *psecuritypriv = >securitypriv;
struct  xmit_priv   *pxmitpriv = >xmitpriv;
-
+   const int keyindex = psecuritypriv->dot11PrivacyKeyIndex;
+   void *crypto_private;
+   struct sk_buff *skb;
+   struct lib80211_crypto_ops *crypto_ops;
 
if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL)
return;
 
+   if ((pattrib->encrypt != _WEP40_) && (pattrib->encrypt != _WEP104_))
+   return;
+
hw_hdr_offset = TXDESC_SIZE +
 (((struct xmit_frame *)pxmitframe)->pkt_offset * 
PACKET_OFFSET_SZ);
 
pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + hw_hdr_offset;
 
-   /* start to encrypt each fragment */
-   if ((pattrib->encrypt == _WEP40_) || (pattrib->encrypt == _WEP104_)) {
-   keylength = 
psecuritypriv->dot11DefKeylen[psecuritypriv->dot11PrivacyKeyIndex];
+   crypto_ops = try_then_request_module(lib80211_get_crypto_ops("WEP"), 
"lib80211_crypt_wep");
 
-   for (curfragnum = 0; curfragnum < pattrib->nr_frags; 
curfragnum++) {
-   iv = pframe+pattrib->hdrlen;
-   memcpy([0], iv, 3);
-   memcpy([3], 
>dot11DefKey[psecuritypriv->dot11PrivacyKeyIndex].skey[0], 
keylength);
-   payload = pframe+pattrib->iv_len+pattrib->hdrlen;
+   if (!crypto_ops)
+   return;
 
-   if ((curfragnum+1) == pattrib->nr_frags) {  /* the 
last fragment */
-   length = 
pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
+   crypto_private = crypto_ops->init(keyindex);
+   if (!crypto_private)
+   return;
 
-   *((__le32 *)crc) = getcrc32(payload, length);
+   if (crypto_ops->set_key(psecuritypriv->dot11DefKey[keyindex].skey,
+   psecuritypriv->dot11DefKeylen[keyindex], NULL, 
crypto_private) < 0)
+   goto free_crypto_private;
 
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-   } else {
-   length = 
pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
-   *((__le32 *)crc) = getcrc32(payload, length);
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-
-   pframe += pxmitpriv->frag_len;
-   pframe = (u8 *)round_up((size_t)(pframe), 4);
-   }
+   for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {
+   if (curfragnum + 1 == pattrib->nr_frags)
+   length = pattrib->last_txcmdsz;
+   else
+   length = pxmitpriv->frag_len;
+   skb = dev_alloc_skb(length);
+   if (!skb)
+   goto free_crypto_private;
+
+   skb_put_data(skb, pframe, length);
+
+   memmove(skb->data + 4, skb->data, pattrib->hdrlen);
+   skb_pull(skb, 4);
+   skb_trim(skb, skb->len - 4);
+
+   if (crypto_ops->encrypt_mpdu(skb, pattrib->hdrlen, 
crypto_private)) {
+   kfree_skb(skb);
+   goto free_crypto_private;

[PATCH v2] staging:r8188eu: Use lib80211 to encrypt (WEP) tx frames

2018-06-30 Thread Ivan Safonov
Put data to skb, decrypt with lib80211_crypt_wep, and place back to tx buffer.

---
v2:
  - refactor error handling.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_security.c | 82 +++
 1 file changed, 47 insertions(+), 35 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index 5b8d7288a4e7..a01290467c64 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -131,60 +131,72 @@ static __le32 getcrc32(u8 *buf, int len)
Need to consider the fragment  situation
 */
 void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
-{  /*  exclude ICV */
-
-   unsigned char   crc[4];
-   struct arc4context   mycontext;
-
+{
int curfragnum, length;
-   u32 keylength;
-
-   u8  *pframe, *payload, *iv;/* wepkey */
-   u8  wepkey[16];
-   u8   hw_hdr_offset = 0;
+   u8 *pframe;
+   u8 hw_hdr_offset = 0;
struct  pkt_attrib   *pattrib = &((struct xmit_frame 
*)pxmitframe)->attrib;
struct  security_priv   *psecuritypriv = >securitypriv;
struct  xmit_priv   *pxmitpriv = >xmitpriv;
-
+   const int keyindex = psecuritypriv->dot11PrivacyKeyIndex;
+   void *crypto_private;
+   struct sk_buff *skb;
+   struct lib80211_crypto_ops *crypto_ops;
 
if (((struct xmit_frame *)pxmitframe)->buf_addr == NULL)
return;
 
+   if ((pattrib->encrypt != _WEP40_) && (pattrib->encrypt != _WEP104_))
+   return;
+
hw_hdr_offset = TXDESC_SIZE +
 (((struct xmit_frame *)pxmitframe)->pkt_offset * 
PACKET_OFFSET_SZ);
 
pframe = ((struct xmit_frame *)pxmitframe)->buf_addr + hw_hdr_offset;
 
-   /* start to encrypt each fragment */
-   if ((pattrib->encrypt == _WEP40_) || (pattrib->encrypt == _WEP104_)) {
-   keylength = 
psecuritypriv->dot11DefKeylen[psecuritypriv->dot11PrivacyKeyIndex];
+   crypto_ops = try_then_request_module(lib80211_get_crypto_ops("WEP"), 
"lib80211_crypt_wep");
 
-   for (curfragnum = 0; curfragnum < pattrib->nr_frags; 
curfragnum++) {
-   iv = pframe+pattrib->hdrlen;
-   memcpy([0], iv, 3);
-   memcpy([3], 
>dot11DefKey[psecuritypriv->dot11PrivacyKeyIndex].skey[0], 
keylength);
-   payload = pframe+pattrib->iv_len+pattrib->hdrlen;
+   if (!crypto_ops)
+   return;
 
-   if ((curfragnum+1) == pattrib->nr_frags) {  /* the 
last fragment */
-   length = 
pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
+   crypto_private = crypto_ops->init(keyindex);
+   if (!crypto_private)
+   return;
 
-   *((__le32 *)crc) = getcrc32(payload, length);
+   if (crypto_ops->set_key(psecuritypriv->dot11DefKey[keyindex].skey,
+   psecuritypriv->dot11DefKeylen[keyindex], NULL, 
crypto_private) < 0)
+   goto free_crypto_private;
 
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-   } else {
-   length = 
pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
-   *((__le32 *)crc) = getcrc32(payload, length);
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-
-   pframe += pxmitpriv->frag_len;
-   pframe = (u8 *)round_up((size_t)(pframe), 4);
-   }
+   for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {
+   if (curfragnum + 1 == pattrib->nr_frags)
+   length = pattrib->last_txcmdsz;
+   else
+   length = pxmitpriv->frag_len;
+   skb = dev_alloc_skb(length);
+   if (!skb)
+   goto free_crypto_private;
+
+   skb_put_data(skb, pframe, length);
+
+   memmove(skb->data + 4, skb->data, pattrib->hdrlen);
+   skb_pull(skb, 4);
+   skb_trim(skb, skb->len - 4);
+
+   if (crypto_ops->encrypt_mpdu(skb, pattrib->hdrlen, 
crypto_private)) {
+   kfree_skb(skb);
+   goto free_crypto_private;

Re: [PATCH] staging:r8188eu: Use lib80211 to encrypt (WEP) tx frames

2018-06-03 Thread Ivan Safonov

On 05/28/2018 04:53 PM, Dan Carpenter wrote:

On Mon, May 28, 2018 at 09:18:21AM +0300, Ivan Safonov wrote:

Put data to skb, decrypt with lib80211_crypt_wep, and place back to tx buffer.

Signed-off-by: Ivan Safonov 
---
  drivers/staging/rtl8188eu/core/rtw_security.c | 72 ---
  1 file changed, 43 insertions(+), 29 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index bfe0b217e679..80d7569a3108 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -139,17 +139,11 @@ static __le32 getcrc32(u8 *buf, int len)
Need to consider the fragment  situation
  */
  void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
-{  /*  exclude ICV */
-
-   unsigned char   crc[4];
-   struct arc4context   mycontext;
-
+{
int curfragnum, length;
-   u32 keylength;
  
-	u8	*pframe, *payload, *iv;/* wepkey */

-   u8  wepkey[16];
-   u8   hw_hdr_offset = 0;
+   u8 *pframe;
+   u8 hw_hdr_offset = 0;
struct  pkt_attrib   *pattrib = &((struct xmit_frame 
*)pxmitframe)->attrib;
struct  security_priv   *psecuritypriv = >securitypriv;
struct  xmit_priv   *pxmitpriv = >xmitpriv;
@@ -165,33 +159,53 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 
*pxmitframe)
  
  	/* start to encrypt each fragment */

if ((pattrib->encrypt == _WEP40_) || (pattrib->encrypt == _WEP104_)) {
-   keylength = 
psecuritypriv->dot11DefKeylen[psecuritypriv->dot11PrivacyKeyIndex];
+   const int keyindex = psecuritypriv->dot11PrivacyKeyIndex;
+   void *crypto_private;
+   struct sk_buff *skb;
+   struct lib80211_crypto_ops *crypto_ops = 
try_then_request_module(lib80211_get_crypto_ops("WEP"), "lib80211_crypt_wep");
+
+   if (!crypto_ops)
+   goto exit;
+
+   crypto_private = crypto_ops->init(keyindex);
+   if (!crypto_private)
+   goto exit;
+
+   if 
(crypto_ops->set_key(psecuritypriv->dot11DefKey[keyindex].skey,
+   psecuritypriv->dot11DefKeylen[keyindex], 
NULL, crypto_private) < 0)
+   goto exit;
  
  		for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {

-   iv = pframe+pattrib->hdrlen;
-   memcpy([0], iv, 3);
-   memcpy([3], 
>dot11DefKey[psecuritypriv->dot11PrivacyKeyIndex].skey[0], 
keylength);
-   payload = pframe+pattrib->iv_len+pattrib->hdrlen;
+   if (curfragnum + 1 == pattrib->nr_frags)
+   length = pattrib->last_txcmdsz;
+   else
+   length = pxmitpriv->frag_len;
+   skb = dev_alloc_skb(length);
+   if (!skb)
+   goto exit;
  
-			if ((curfragnum+1) == pattrib->nr_frags) {	/* the last fragment */

-   length = 
pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
+   skb_put_data(skb, pframe, length);
  
-*((__le32 *)crc) = getcrc32(payload, length);

+   memmove(skb->data + 4, skb->data, pattrib->hdrlen);
+   skb_pull(skb, 4);
+   skb_trim(skb, skb->len - 4);
  
-arcfour_init(, wepkey, 3+keylength);

-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-   } else {
-   length = 
pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
-   *((__le32 *)crc) = getcrc32(payload, length);
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-
-   pframe += pxmitpriv->frag_len;
-   pframe = (u8 *)round_up((size_t)(pframe), 4);
+   if (crypto_ops->encrypt_mpdu(skb, pattrib->hdrlen, 
crypto_private)) {
+   kfree_skb(skb);
+   goto exit;
}
+
+   memcpy(pframe, skb->data, skb->len);
+
+   pframe += skb->len;
+   pframe = (u8 *)round_up((size_t)(pframe), 4);
+
+   kfree_skb(skb);
}
+
+exit:
+   if (crypto_ops && c

Re: [PATCH] staging:r8188eu: Use lib80211 to encrypt (WEP) tx frames

2018-06-03 Thread Ivan Safonov

On 05/28/2018 04:53 PM, Dan Carpenter wrote:

On Mon, May 28, 2018 at 09:18:21AM +0300, Ivan Safonov wrote:

Put data to skb, decrypt with lib80211_crypt_wep, and place back to tx buffer.

Signed-off-by: Ivan Safonov 
---
  drivers/staging/rtl8188eu/core/rtw_security.c | 72 ---
  1 file changed, 43 insertions(+), 29 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index bfe0b217e679..80d7569a3108 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -139,17 +139,11 @@ static __le32 getcrc32(u8 *buf, int len)
Need to consider the fragment  situation
  */
  void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
-{  /*  exclude ICV */
-
-   unsigned char   crc[4];
-   struct arc4context   mycontext;
-
+{
int curfragnum, length;
-   u32 keylength;
  
-	u8	*pframe, *payload, *iv;/* wepkey */

-   u8  wepkey[16];
-   u8   hw_hdr_offset = 0;
+   u8 *pframe;
+   u8 hw_hdr_offset = 0;
struct  pkt_attrib   *pattrib = &((struct xmit_frame 
*)pxmitframe)->attrib;
struct  security_priv   *psecuritypriv = >securitypriv;
struct  xmit_priv   *pxmitpriv = >xmitpriv;
@@ -165,33 +159,53 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 
*pxmitframe)
  
  	/* start to encrypt each fragment */

if ((pattrib->encrypt == _WEP40_) || (pattrib->encrypt == _WEP104_)) {
-   keylength = 
psecuritypriv->dot11DefKeylen[psecuritypriv->dot11PrivacyKeyIndex];
+   const int keyindex = psecuritypriv->dot11PrivacyKeyIndex;
+   void *crypto_private;
+   struct sk_buff *skb;
+   struct lib80211_crypto_ops *crypto_ops = 
try_then_request_module(lib80211_get_crypto_ops("WEP"), "lib80211_crypt_wep");
+
+   if (!crypto_ops)
+   goto exit;
+
+   crypto_private = crypto_ops->init(keyindex);
+   if (!crypto_private)
+   goto exit;
+
+   if 
(crypto_ops->set_key(psecuritypriv->dot11DefKey[keyindex].skey,
+   psecuritypriv->dot11DefKeylen[keyindex], 
NULL, crypto_private) < 0)
+   goto exit;
  
  		for (curfragnum = 0; curfragnum < pattrib->nr_frags; curfragnum++) {

-   iv = pframe+pattrib->hdrlen;
-   memcpy([0], iv, 3);
-   memcpy([3], 
>dot11DefKey[psecuritypriv->dot11PrivacyKeyIndex].skey[0], 
keylength);
-   payload = pframe+pattrib->iv_len+pattrib->hdrlen;
+   if (curfragnum + 1 == pattrib->nr_frags)
+   length = pattrib->last_txcmdsz;
+   else
+   length = pxmitpriv->frag_len;
+   skb = dev_alloc_skb(length);
+   if (!skb)
+   goto exit;
  
-			if ((curfragnum+1) == pattrib->nr_frags) {	/* the last fragment */

-   length = 
pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
+   skb_put_data(skb, pframe, length);
  
-*((__le32 *)crc) = getcrc32(payload, length);

+   memmove(skb->data + 4, skb->data, pattrib->hdrlen);
+   skb_pull(skb, 4);
+   skb_trim(skb, skb->len - 4);
  
-arcfour_init(, wepkey, 3+keylength);

-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-   } else {
-   length = 
pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
-   *((__le32 *)crc) = getcrc32(payload, length);
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-
-   pframe += pxmitpriv->frag_len;
-   pframe = (u8 *)round_up((size_t)(pframe), 4);
+   if (crypto_ops->encrypt_mpdu(skb, pattrib->hdrlen, 
crypto_private)) {
+   kfree_skb(skb);
+   goto exit;
}
+
+   memcpy(pframe, skb->data, skb->len);
+
+   pframe += skb->len;
+   pframe = (u8 *)round_up((size_t)(pframe), 4);
+
+   kfree_skb(skb);
}
+
+exit:
+   if (crypto_ops && c

[PATCH] staging:r8188eu: Use lib80211 to encrypt (WEP) tx frames

2018-05-28 Thread Ivan Safonov
Put data to skb, decrypt with lib80211_crypt_wep, and place back to tx buffer.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/core/rtw_security.c | 72 ---
 1 file changed, 43 insertions(+), 29 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index bfe0b217e679..80d7569a3108 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -139,17 +139,11 @@ static __le32 getcrc32(u8 *buf, int len)
Need to consider the fragment  situation
 */
 void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
-{  /*  exclude ICV */
-
-   unsigned char   crc[4];
-   struct arc4context   mycontext;
-
+{
int curfragnum, length;
-   u32 keylength;
 
-   u8  *pframe, *payload, *iv;/* wepkey */
-   u8  wepkey[16];
-   u8   hw_hdr_offset = 0;
+   u8 *pframe;
+   u8 hw_hdr_offset = 0;
struct  pkt_attrib   *pattrib = &((struct xmit_frame 
*)pxmitframe)->attrib;
struct  security_priv   *psecuritypriv = >securitypriv;
struct  xmit_priv   *pxmitpriv = >xmitpriv;
@@ -165,33 +159,53 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 
*pxmitframe)
 
/* start to encrypt each fragment */
if ((pattrib->encrypt == _WEP40_) || (pattrib->encrypt == _WEP104_)) {
-   keylength = 
psecuritypriv->dot11DefKeylen[psecuritypriv->dot11PrivacyKeyIndex];
+   const int keyindex = psecuritypriv->dot11PrivacyKeyIndex;
+   void *crypto_private;
+   struct sk_buff *skb;
+   struct lib80211_crypto_ops *crypto_ops = 
try_then_request_module(lib80211_get_crypto_ops("WEP"), "lib80211_crypt_wep");
+
+   if (!crypto_ops)
+   goto exit;
+
+   crypto_private = crypto_ops->init(keyindex);
+   if (!crypto_private)
+   goto exit;
+
+   if 
(crypto_ops->set_key(psecuritypriv->dot11DefKey[keyindex].skey,
+   
psecuritypriv->dot11DefKeylen[keyindex], NULL, crypto_private) < 0)
+   goto exit;
 
for (curfragnum = 0; curfragnum < pattrib->nr_frags; 
curfragnum++) {
-   iv = pframe+pattrib->hdrlen;
-   memcpy([0], iv, 3);
-   memcpy([3], 
>dot11DefKey[psecuritypriv->dot11PrivacyKeyIndex].skey[0], 
keylength);
-   payload = pframe+pattrib->iv_len+pattrib->hdrlen;
+   if (curfragnum + 1 == pattrib->nr_frags)
+   length = pattrib->last_txcmdsz;
+   else
+   length = pxmitpriv->frag_len;
+   skb = dev_alloc_skb(length);
+   if (!skb)
+   goto exit;
 
-   if ((curfragnum+1) == pattrib->nr_frags) {  /* the 
last fragment */
-   length = 
pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
+   skb_put_data(skb, pframe, length);
 
-   *((__le32 *)crc) = getcrc32(payload, length);
+   memmove(skb->data + 4, skb->data, pattrib->hdrlen);
+   skb_pull(skb, 4);
+   skb_trim(skb, skb->len - 4);
 
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-   } else {
-   length = 
pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
-   *((__le32 *)crc) = getcrc32(payload, length);
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-
-   pframe += pxmitpriv->frag_len;
-   pframe = (u8 *)round_up((size_t)(pframe), 4);
+   if (crypto_ops->encrypt_mpdu(skb, pattrib->hdrlen, 
crypto_private)) {
+   kfree_skb(skb);
+   goto exit;
}
+
+   memcpy(pframe, skb->data, skb->len);
+
+   pframe += skb->len;
+   pframe = (u8 *)round_up((size_t)(pframe), 4);
+
+   kfree_skb(skb);
}
+
+exit:
+   if (crypto_ops && crypto_private)
+   crypto_ops->deinit(crypto_private);
}
 
 }
-- 
2.16.1



[PATCH] staging:r8188eu: Use lib80211 to encrypt (WEP) tx frames

2018-05-28 Thread Ivan Safonov
Put data to skb, decrypt with lib80211_crypt_wep, and place back to tx buffer.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_security.c | 72 ---
 1 file changed, 43 insertions(+), 29 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index bfe0b217e679..80d7569a3108 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -139,17 +139,11 @@ static __le32 getcrc32(u8 *buf, int len)
Need to consider the fragment  situation
 */
 void rtw_wep_encrypt(struct adapter *padapter, u8 *pxmitframe)
-{  /*  exclude ICV */
-
-   unsigned char   crc[4];
-   struct arc4context   mycontext;
-
+{
int curfragnum, length;
-   u32 keylength;
 
-   u8  *pframe, *payload, *iv;/* wepkey */
-   u8  wepkey[16];
-   u8   hw_hdr_offset = 0;
+   u8 *pframe;
+   u8 hw_hdr_offset = 0;
struct  pkt_attrib   *pattrib = &((struct xmit_frame 
*)pxmitframe)->attrib;
struct  security_priv   *psecuritypriv = >securitypriv;
struct  xmit_priv   *pxmitpriv = >xmitpriv;
@@ -165,33 +159,53 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 
*pxmitframe)
 
/* start to encrypt each fragment */
if ((pattrib->encrypt == _WEP40_) || (pattrib->encrypt == _WEP104_)) {
-   keylength = 
psecuritypriv->dot11DefKeylen[psecuritypriv->dot11PrivacyKeyIndex];
+   const int keyindex = psecuritypriv->dot11PrivacyKeyIndex;
+   void *crypto_private;
+   struct sk_buff *skb;
+   struct lib80211_crypto_ops *crypto_ops = 
try_then_request_module(lib80211_get_crypto_ops("WEP"), "lib80211_crypt_wep");
+
+   if (!crypto_ops)
+   goto exit;
+
+   crypto_private = crypto_ops->init(keyindex);
+   if (!crypto_private)
+   goto exit;
+
+   if 
(crypto_ops->set_key(psecuritypriv->dot11DefKey[keyindex].skey,
+   
psecuritypriv->dot11DefKeylen[keyindex], NULL, crypto_private) < 0)
+   goto exit;
 
for (curfragnum = 0; curfragnum < pattrib->nr_frags; 
curfragnum++) {
-   iv = pframe+pattrib->hdrlen;
-   memcpy([0], iv, 3);
-   memcpy([3], 
>dot11DefKey[psecuritypriv->dot11PrivacyKeyIndex].skey[0], 
keylength);
-   payload = pframe+pattrib->iv_len+pattrib->hdrlen;
+   if (curfragnum + 1 == pattrib->nr_frags)
+   length = pattrib->last_txcmdsz;
+   else
+   length = pxmitpriv->frag_len;
+   skb = dev_alloc_skb(length);
+   if (!skb)
+   goto exit;
 
-   if ((curfragnum+1) == pattrib->nr_frags) {  /* the 
last fragment */
-   length = 
pattrib->last_txcmdsz-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
+   skb_put_data(skb, pframe, length);
 
-   *((__le32 *)crc) = getcrc32(payload, length);
+   memmove(skb->data + 4, skb->data, pattrib->hdrlen);
+   skb_pull(skb, 4);
+   skb_trim(skb, skb->len - 4);
 
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-   } else {
-   length = 
pxmitpriv->frag_len-pattrib->hdrlen-pattrib->iv_len-pattrib->icv_len;
-   *((__le32 *)crc) = getcrc32(payload, length);
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload, 
length);
-   arcfour_encrypt(, payload+length, 
crc, 4);
-
-   pframe += pxmitpriv->frag_len;
-   pframe = (u8 *)round_up((size_t)(pframe), 4);
+   if (crypto_ops->encrypt_mpdu(skb, pattrib->hdrlen, 
crypto_private)) {
+   kfree_skb(skb);
+   goto exit;
}
+
+   memcpy(pframe, skb->data, skb->len);
+
+   pframe += skb->len;
+   pframe = (u8 *)round_up((size_t)(pframe), 4);
+
+   kfree_skb(skb);
}
+
+exit:
+   if (crypto_ops && crypto_private)
+   crypto_ops->deinit(crypto_private);
}
 
 }
-- 
2.16.1



[PATCH] staging:r8188eu: Remove rx_handler_data unnecessary read

2018-05-09 Thread Ivan Safonov
Rx handler (assigned with netdev_rx_handler_register,
called from __netif_receive_skb()) uses value of dev->rx_handler_data.
The driver has no rx handler and does not need it, so remove rx_handler_data 
read.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/TODO| 5 -
 drivers/staging/rtl8188eu/os_dep/recv_linux.c | 4 
 2 files changed, 9 deletions(-)

diff --git a/drivers/staging/rtl8188eu/TODO b/drivers/staging/rtl8188eu/TODO
index ce60f07b9977..7581e25f231d 100644
--- a/drivers/staging/rtl8188eu/TODO
+++ b/drivers/staging/rtl8188eu/TODO
@@ -9,11 +9,6 @@ TODO:
 - merge Realtek's bugfixes and new features into the driver
 - switch to use LIB80211
 - switch to use MAC80211
-- figure out what to do with this code in rtw_recv_indicatepkt():
-   rcu_read_lock();
-   rcu_dereference(padapter->pnetdev->rx_handler_data);
-   rcu_read_unlock();
-  Perhaps delete it, perhaps assign to some local variable.
 
 Please send any patches to Greg Kroah-Hartman <gre...@linuxfoundation.org>,
 and Larry Finger <larry.fin...@lwfinger.net>.
diff --git a/drivers/staging/rtl8188eu/os_dep/recv_linux.c 
b/drivers/staging/rtl8188eu/os_dep/recv_linux.c
index bda4ab879f58..7ec53a9dfa27 100644
--- a/drivers/staging/rtl8188eu/os_dep/recv_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/recv_linux.c
@@ -121,10 +121,6 @@ int rtw_recv_indicatepkt(struct adapter *padapter,
}
}
 
-   rcu_read_lock();
-   rcu_dereference(padapter->pnetdev->rx_handler_data);
-   rcu_read_unlock();
-
skb->ip_summed = CHECKSUM_NONE;
skb->dev = padapter->pnetdev;
skb->protocol = eth_type_trans(skb, padapter->pnetdev);
-- 
2.16.1



[PATCH] staging:r8188eu: Remove rx_handler_data unnecessary read

2018-05-09 Thread Ivan Safonov
Rx handler (assigned with netdev_rx_handler_register,
called from __netif_receive_skb()) uses value of dev->rx_handler_data.
The driver has no rx handler and does not need it, so remove rx_handler_data 
read.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/TODO| 5 -
 drivers/staging/rtl8188eu/os_dep/recv_linux.c | 4 
 2 files changed, 9 deletions(-)

diff --git a/drivers/staging/rtl8188eu/TODO b/drivers/staging/rtl8188eu/TODO
index ce60f07b9977..7581e25f231d 100644
--- a/drivers/staging/rtl8188eu/TODO
+++ b/drivers/staging/rtl8188eu/TODO
@@ -9,11 +9,6 @@ TODO:
 - merge Realtek's bugfixes and new features into the driver
 - switch to use LIB80211
 - switch to use MAC80211
-- figure out what to do with this code in rtw_recv_indicatepkt():
-   rcu_read_lock();
-   rcu_dereference(padapter->pnetdev->rx_handler_data);
-   rcu_read_unlock();
-  Perhaps delete it, perhaps assign to some local variable.
 
 Please send any patches to Greg Kroah-Hartman ,
 and Larry Finger .
diff --git a/drivers/staging/rtl8188eu/os_dep/recv_linux.c 
b/drivers/staging/rtl8188eu/os_dep/recv_linux.c
index bda4ab879f58..7ec53a9dfa27 100644
--- a/drivers/staging/rtl8188eu/os_dep/recv_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/recv_linux.c
@@ -121,10 +121,6 @@ int rtw_recv_indicatepkt(struct adapter *padapter,
}
}
 
-   rcu_read_lock();
-   rcu_dereference(padapter->pnetdev->rx_handler_data);
-   rcu_read_unlock();
-
skb->ip_summed = CHECKSUM_NONE;
skb->dev = padapter->pnetdev;
skb->protocol = eth_type_trans(skb, padapter->pnetdev);
-- 
2.16.1



[PATCH] staging:r8188eu: Use lib80211 to support TKIP

2018-03-09 Thread Ivan Safonov
Custom TKIP decryption replaced with lib80211 implementation.
MIC check use lib80211 too.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/Kconfig |   1 +
 drivers/staging/rtl8188eu/core/rtw_recv.c | 161 --
 drivers/staging/rtl8188eu/core/rtw_security.c |  92 +++
 3 files changed, 94 insertions(+), 160 deletions(-)

diff --git a/drivers/staging/rtl8188eu/Kconfig 
b/drivers/staging/rtl8188eu/Kconfig
index ff7832798a77..673fdce25530 100644
--- a/drivers/staging/rtl8188eu/Kconfig
+++ b/drivers/staging/rtl8188eu/Kconfig
@@ -7,6 +7,7 @@ config R8188EU
select LIB80211
select LIB80211_CRYPT_WEP
select LIB80211_CRYPT_CCMP
+   select LIB80211_CRYPT_TKIP
---help---
This option adds the Realtek RTL8188EU USB device such as TP-Link 
TL-WN725N.
If built as a module, it will be called r8188eu.
diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index c6857a5be12a..05936a45eb93 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -23,6 +23,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #define ETHERNET_HEADER_SIZE   14  /*  Ethernet Header Length */
 #define LLC_HEADER_SIZE6   /*  LLC Header Length */
@@ -220,31 +221,20 @@ u32 rtw_free_uc_swdec_pending_queue(struct adapter 
*adapter)
 static int recvframe_chkmic(struct adapter *adapter,
struct recv_frame *precvframe)
 {
-   int i, res = _SUCCESS;
-   u32 datalen;
-   u8  miccode[8];
-   u8  bmic_err = false, brpt_micerror = true;
-   u8  *pframe, *payload, *pframemic;
-   u8  *mickey;
-   struct  sta_info*stainfo;
-   struct  rx_pkt_attrib   *prxattrib = >attrib;
-   struct  security_priv   *psecuritypriv = >securitypriv;
-
-   struct mlme_ext_priv*pmlmeext = >mlmeextpriv;
-   struct mlme_ext_info*pmlmeinfo = &(pmlmeext->mlmext_info);
-
-   stainfo = rtw_get_stainfo(>stapriv, >ta[0]);
+   int res = _SUCCESS;
+   struct rx_pkt_attrib *prxattrib = >attrib;
+   struct sta_info *stainfo = rtw_get_stainfo(>stapriv, 
prxattrib->ta);
 
if (prxattrib->encrypt == _TKIP_) {
-   RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-("\n %s: prxattrib->encrypt==_TKIP_\n", __func__));
-   RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-("\n %s: 
da=0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x\n",
- __func__, prxattrib->ra[0], prxattrib->ra[1], 
prxattrib->ra[2],
- prxattrib->ra[3], prxattrib->ra[4], 
prxattrib->ra[5]));
-
-   /* calculate mic code */
if (stainfo) {
+   int key_idx;
+   const int iv_len = 8, icv_len = 4, key_length = 32;
+   struct sk_buff *skb = precvframe->pkt;
+   u8 key[32], iv[8], icv[4], *pframe = skb->data;
+   void *crypto_private = NULL;
+   struct lib80211_crypto_ops *crypto_ops = 
try_then_request_module(lib80211_get_crypto_ops("TKIP"), "lib80211_crypt_tkip");
+   struct security_priv *psecuritypriv = 
>securitypriv;
+
if (IS_MCAST(prxattrib->ra)) {
if (!psecuritypriv) {
res = _FAIL;
@@ -253,115 +243,58 @@ static int recvframe_chkmic(struct adapter *adapter,
DBG_88E("\n %s: didn't install group 
key!!\n", __func__);
goto exit;
}
-   mickey = 
>dot118021XGrprxmickey[prxattrib->key_index].skey[0];
-
-   RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-("\n %s: bcmc key\n", __func__));
+   key_idx = prxattrib->key_index;
+   memcpy(key, 
psecuritypriv->dot118021XGrpKey[key_idx].skey, 16);
+   memcpy(key + 16, 
psecuritypriv->dot118021XGrprxmickey[key_idx].skey, 16);
} else {
-   mickey = >dot11tkiprxmickey.skey[0];
-   RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-("\n %s: unicast key\n", __func__));
+   key_idx = 0;
+   memcpy(key, stainfo->dot118021x_UncstKey.skey, 
16);
+   memcpy(key + 16, 
stainfo->dot11tkiprxmickey.skey

[PATCH] staging:r8188eu: Use lib80211 to support TKIP

2018-03-09 Thread Ivan Safonov
Custom TKIP decryption replaced with lib80211 implementation.
MIC check use lib80211 too.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/Kconfig |   1 +
 drivers/staging/rtl8188eu/core/rtw_recv.c | 161 --
 drivers/staging/rtl8188eu/core/rtw_security.c |  92 +++
 3 files changed, 94 insertions(+), 160 deletions(-)

diff --git a/drivers/staging/rtl8188eu/Kconfig 
b/drivers/staging/rtl8188eu/Kconfig
index ff7832798a77..673fdce25530 100644
--- a/drivers/staging/rtl8188eu/Kconfig
+++ b/drivers/staging/rtl8188eu/Kconfig
@@ -7,6 +7,7 @@ config R8188EU
select LIB80211
select LIB80211_CRYPT_WEP
select LIB80211_CRYPT_CCMP
+   select LIB80211_CRYPT_TKIP
---help---
This option adds the Realtek RTL8188EU USB device such as TP-Link 
TL-WN725N.
If built as a module, it will be called r8188eu.
diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index c6857a5be12a..05936a45eb93 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -23,6 +23,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #define ETHERNET_HEADER_SIZE   14  /*  Ethernet Header Length */
 #define LLC_HEADER_SIZE6   /*  LLC Header Length */
@@ -220,31 +221,20 @@ u32 rtw_free_uc_swdec_pending_queue(struct adapter 
*adapter)
 static int recvframe_chkmic(struct adapter *adapter,
struct recv_frame *precvframe)
 {
-   int i, res = _SUCCESS;
-   u32 datalen;
-   u8  miccode[8];
-   u8  bmic_err = false, brpt_micerror = true;
-   u8  *pframe, *payload, *pframemic;
-   u8  *mickey;
-   struct  sta_info*stainfo;
-   struct  rx_pkt_attrib   *prxattrib = >attrib;
-   struct  security_priv   *psecuritypriv = >securitypriv;
-
-   struct mlme_ext_priv*pmlmeext = >mlmeextpriv;
-   struct mlme_ext_info*pmlmeinfo = &(pmlmeext->mlmext_info);
-
-   stainfo = rtw_get_stainfo(>stapriv, >ta[0]);
+   int res = _SUCCESS;
+   struct rx_pkt_attrib *prxattrib = >attrib;
+   struct sta_info *stainfo = rtw_get_stainfo(>stapriv, 
prxattrib->ta);
 
if (prxattrib->encrypt == _TKIP_) {
-   RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-("\n %s: prxattrib->encrypt==_TKIP_\n", __func__));
-   RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-("\n %s: 
da=0x%02x:0x%02x:0x%02x:0x%02x:0x%02x:0x%02x\n",
- __func__, prxattrib->ra[0], prxattrib->ra[1], 
prxattrib->ra[2],
- prxattrib->ra[3], prxattrib->ra[4], 
prxattrib->ra[5]));
-
-   /* calculate mic code */
if (stainfo) {
+   int key_idx;
+   const int iv_len = 8, icv_len = 4, key_length = 32;
+   struct sk_buff *skb = precvframe->pkt;
+   u8 key[32], iv[8], icv[4], *pframe = skb->data;
+   void *crypto_private = NULL;
+   struct lib80211_crypto_ops *crypto_ops = 
try_then_request_module(lib80211_get_crypto_ops("TKIP"), "lib80211_crypt_tkip");
+   struct security_priv *psecuritypriv = 
>securitypriv;
+
if (IS_MCAST(prxattrib->ra)) {
if (!psecuritypriv) {
res = _FAIL;
@@ -253,115 +243,58 @@ static int recvframe_chkmic(struct adapter *adapter,
DBG_88E("\n %s: didn't install group 
key!!\n", __func__);
goto exit;
}
-   mickey = 
>dot118021XGrprxmickey[prxattrib->key_index].skey[0];
-
-   RT_TRACE(_module_rtl871x_recv_c_, _drv_info_,
-("\n %s: bcmc key\n", __func__));
+   key_idx = prxattrib->key_index;
+   memcpy(key, 
psecuritypriv->dot118021XGrpKey[key_idx].skey, 16);
+   memcpy(key + 16, 
psecuritypriv->dot118021XGrprxmickey[key_idx].skey, 16);
} else {
-   mickey = >dot11tkiprxmickey.skey[0];
-   RT_TRACE(_module_rtl871x_recv_c_, _drv_err_,
-("\n %s: unicast key\n", __func__));
+   key_idx = 0;
+   memcpy(key, stainfo->dot118021x_UncstKey.skey, 
16);
+   memcpy(key + 16, 
stainfo->dot11tkiprxmickey.skey, 16);

Re: [PATCH] staging:r8188eu: use lib80211 CCMP decrypt

2018-02-27 Thread Ivan Safonov

On 02/26/2018 10:56 AM, Dan Carpenter wrote:

On Fri, Feb 23, 2018 at 05:57:42PM +0300, Ivan Safonov wrote:

Custom AES decrypt implementation replaced with lib80211 library.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>


The new code looks like original RTL code (really bad) so I'm guessing
you copy and pasted the code from somewhere else?
Unfortunately, your assumption is wrong. Rather, bad code is created 
because I'm not a good programmer =).


Seriously, after each patch the driver gets better, does not it?



The idea is good, but RTL code is painful to look at.
The basic idea is to replace a _small_ (or trivial) parts of the 
program, because I can not test my patches.




regards,
dan carpenter



Ivan Safonov.


Re: [PATCH] staging:r8188eu: use lib80211 CCMP decrypt

2018-02-27 Thread Ivan Safonov

On 02/26/2018 10:56 AM, Dan Carpenter wrote:

On Fri, Feb 23, 2018 at 05:57:42PM +0300, Ivan Safonov wrote:

Custom AES decrypt implementation replaced with lib80211 library.

Signed-off-by: Ivan Safonov 


The new code looks like original RTL code (really bad) so I'm guessing
you copy and pasted the code from somewhere else?
Unfortunately, your assumption is wrong. Rather, bad code is created 
because I'm not a good programmer =).


Seriously, after each patch the driver gets better, does not it?



The idea is good, but RTL code is painful to look at.
The basic idea is to replace a _small_ (or trivial) parts of the 
program, because I can not test my patches.




regards,
dan carpenter



Ivan Safonov.


[PATCH] staging:r8188eu: use lib80211 CCMP decrypt

2018-02-23 Thread Ivan Safonov
Custom AES decrypt implementation replaced with lib80211 library.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/Kconfig |   1 +
 drivers/staging/rtl8188eu/core/rtw_security.c | 266 +-
 2 files changed, 51 insertions(+), 216 deletions(-)

diff --git a/drivers/staging/rtl8188eu/Kconfig 
b/drivers/staging/rtl8188eu/Kconfig
index d787a091d3c1..ff7832798a77 100644
--- a/drivers/staging/rtl8188eu/Kconfig
+++ b/drivers/staging/rtl8188eu/Kconfig
@@ -6,6 +6,7 @@ config R8188EU
select WEXT_PRIV
select LIB80211
select LIB80211_CRYPT_WEP
+   select LIB80211_CRYPT_CCMP
---help---
This option adds the Realtek RTL8188EU USB device such as TP-Link 
TL-WN725N.
If built as a module, it will be called r8188eu.
diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index 72da86fdd264..68e2c6790ee6 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -1275,217 +1275,24 @@ u32rtw_aes_encrypt(struct adapter *padapter, u8 
*pxmitframe)
return res;
 }
 
-static int aes_decipher(u8 *key, uint  hdrlen,
-   u8 *pframe, uint plen)
+u32 rtw_aes_decrypt(struct adapter *padapter, u8 *precvframe)
 {
-   static u8   message[MAX_MSG_SIZE];
-   uintqc_exists, a4_exists, i, j, payload_remainder,
-   num_blocks, payload_index;
-   int res = _SUCCESS;
-
-   u8 pn_vector[6];
-   u8 mic_iv[16];
-   u8 mic_header1[16];
-   u8 mic_header2[16];
-   u8 ctr_preload[16];
-
-   /* Intermediate Buffers */
-   u8 chain_buffer[16];
-   u8 aes_out[16];
-   u8 padded_buffer[16];
-   u8 mic[8];
-
-/* uintoffset = 0; */
-   uintfrtype  = GetFrameType(pframe);
-   uintfrsubtype  = GetFrameSubType(pframe);
-   frsubtype >>= 4;
-
-   memset(mic_iv, 0, 16);
-   memset(mic_header1, 0, 16);
-   memset(mic_header2, 0, 16);
-   memset(ctr_preload, 0, 16);
-   memset(chain_buffer, 0, 16);
-   memset(aes_out, 0, 16);
-   memset(padded_buffer, 0, 16);
-
-   /* start to decrypt the payload */
-
-   num_blocks = (plen-8) / 16; /* plen including llc, payload_length and 
mic) */
-
-   payload_remainder = (plen-8) % 16;
-
-   pn_vector[0]  = pframe[hdrlen];
-   pn_vector[1]  = pframe[hdrlen+1];
-   pn_vector[2]  = pframe[hdrlen+4];
-   pn_vector[3]  = pframe[hdrlen+5];
-   pn_vector[4]  = pframe[hdrlen+6];
-   pn_vector[5]  = pframe[hdrlen+7];
-
-   if ((hdrlen == WLAN_HDR_A3_LEN) || (hdrlen ==  WLAN_HDR_A3_QOS_LEN))
-   a4_exists = 0;
-   else
-   a4_exists = 1;
-
-   if ((frtype == WIFI_DATA_CFACK) || (frtype == WIFI_DATA_CFPOLL) ||
-   (frtype == WIFI_DATA_CFACKPOLL)) {
-   qc_exists = 1;
-   if (hdrlen !=  WLAN_HDR_A3_QOS_LEN)
-   hdrlen += 2;
-   } else if ((frsubtype == 0x08) || (frsubtype == 0x09) ||
-  (frsubtype == 0x0a) || (frsubtype == 0x0b)) {
-   if (hdrlen !=  WLAN_HDR_A3_QOS_LEN)
-   hdrlen += 2;
-   qc_exists = 1;
-   } else {
-   qc_exists = 0;
-   }
-
-   /*  now, decrypt pframe with hdrlen offset and plen long */
-
-   payload_index = hdrlen + 8; /*  8 is for extiv */
-
-   for (i = 0; i < num_blocks; i++) {
-   construct_ctr_preload(ctr_preload, a4_exists, qc_exists, 
pframe, pn_vector, i+1);
-
-   aes128k128d(key, ctr_preload, aes_out);
-   bitwise_xor(aes_out, [payload_index], chain_buffer);
-
-   for (j = 0; j < 16; j++)
-   pframe[payload_index++] = chain_buffer[j];
-   }
-
-   if (payload_remainder > 0) {/* If there is a short final block, 
then pad it,*/
-   /* encrypt it and copy the unpadded 
part back   */
-   construct_ctr_preload(ctr_preload, a4_exists, qc_exists, 
pframe, pn_vector, num_blocks+1);
-
-   for (j = 0; j < 16; j++)
-   padded_buffer[j] = 0x00;
-   for (j = 0; j < payload_remainder; j++)
-   padded_buffer[j] = pframe[payload_index+j];
-   aes128k128d(key, ctr_preload, aes_out);
-   bitwise_xor(aes_out, padded_buffer, chain_buffer);
-   for (j = 0; j < payload_remainder; j++)
-   pframe[payload_index++] = chain_buffer[j];
-   }
-
-   /* start to calculate the mic */
-   if ((hdrlen+plen+8) <= MAX_MSG_SIZE)
-   memcpy(message, pframe, (hdrlen + plen+8)); /* 8 is for ext iv 
len */
-
-   pn_vector[0] = pframe[hdrlen];
-   pn_vector[1] = pframe[hdrlen+1];
-   pn_vector[2] = pfra

[PATCH] staging:r8188eu: use lib80211 CCMP decrypt

2018-02-23 Thread Ivan Safonov
Custom AES decrypt implementation replaced with lib80211 library.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/Kconfig |   1 +
 drivers/staging/rtl8188eu/core/rtw_security.c | 266 +-
 2 files changed, 51 insertions(+), 216 deletions(-)

diff --git a/drivers/staging/rtl8188eu/Kconfig 
b/drivers/staging/rtl8188eu/Kconfig
index d787a091d3c1..ff7832798a77 100644
--- a/drivers/staging/rtl8188eu/Kconfig
+++ b/drivers/staging/rtl8188eu/Kconfig
@@ -6,6 +6,7 @@ config R8188EU
select WEXT_PRIV
select LIB80211
select LIB80211_CRYPT_WEP
+   select LIB80211_CRYPT_CCMP
---help---
This option adds the Realtek RTL8188EU USB device such as TP-Link 
TL-WN725N.
If built as a module, it will be called r8188eu.
diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index 72da86fdd264..68e2c6790ee6 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -1275,217 +1275,24 @@ u32rtw_aes_encrypt(struct adapter *padapter, u8 
*pxmitframe)
return res;
 }
 
-static int aes_decipher(u8 *key, uint  hdrlen,
-   u8 *pframe, uint plen)
+u32 rtw_aes_decrypt(struct adapter *padapter, u8 *precvframe)
 {
-   static u8   message[MAX_MSG_SIZE];
-   uintqc_exists, a4_exists, i, j, payload_remainder,
-   num_blocks, payload_index;
-   int res = _SUCCESS;
-
-   u8 pn_vector[6];
-   u8 mic_iv[16];
-   u8 mic_header1[16];
-   u8 mic_header2[16];
-   u8 ctr_preload[16];
-
-   /* Intermediate Buffers */
-   u8 chain_buffer[16];
-   u8 aes_out[16];
-   u8 padded_buffer[16];
-   u8 mic[8];
-
-/* uintoffset = 0; */
-   uintfrtype  = GetFrameType(pframe);
-   uintfrsubtype  = GetFrameSubType(pframe);
-   frsubtype >>= 4;
-
-   memset(mic_iv, 0, 16);
-   memset(mic_header1, 0, 16);
-   memset(mic_header2, 0, 16);
-   memset(ctr_preload, 0, 16);
-   memset(chain_buffer, 0, 16);
-   memset(aes_out, 0, 16);
-   memset(padded_buffer, 0, 16);
-
-   /* start to decrypt the payload */
-
-   num_blocks = (plen-8) / 16; /* plen including llc, payload_length and 
mic) */
-
-   payload_remainder = (plen-8) % 16;
-
-   pn_vector[0]  = pframe[hdrlen];
-   pn_vector[1]  = pframe[hdrlen+1];
-   pn_vector[2]  = pframe[hdrlen+4];
-   pn_vector[3]  = pframe[hdrlen+5];
-   pn_vector[4]  = pframe[hdrlen+6];
-   pn_vector[5]  = pframe[hdrlen+7];
-
-   if ((hdrlen == WLAN_HDR_A3_LEN) || (hdrlen ==  WLAN_HDR_A3_QOS_LEN))
-   a4_exists = 0;
-   else
-   a4_exists = 1;
-
-   if ((frtype == WIFI_DATA_CFACK) || (frtype == WIFI_DATA_CFPOLL) ||
-   (frtype == WIFI_DATA_CFACKPOLL)) {
-   qc_exists = 1;
-   if (hdrlen !=  WLAN_HDR_A3_QOS_LEN)
-   hdrlen += 2;
-   } else if ((frsubtype == 0x08) || (frsubtype == 0x09) ||
-  (frsubtype == 0x0a) || (frsubtype == 0x0b)) {
-   if (hdrlen !=  WLAN_HDR_A3_QOS_LEN)
-   hdrlen += 2;
-   qc_exists = 1;
-   } else {
-   qc_exists = 0;
-   }
-
-   /*  now, decrypt pframe with hdrlen offset and plen long */
-
-   payload_index = hdrlen + 8; /*  8 is for extiv */
-
-   for (i = 0; i < num_blocks; i++) {
-   construct_ctr_preload(ctr_preload, a4_exists, qc_exists, 
pframe, pn_vector, i+1);
-
-   aes128k128d(key, ctr_preload, aes_out);
-   bitwise_xor(aes_out, [payload_index], chain_buffer);
-
-   for (j = 0; j < 16; j++)
-   pframe[payload_index++] = chain_buffer[j];
-   }
-
-   if (payload_remainder > 0) {/* If there is a short final block, 
then pad it,*/
-   /* encrypt it and copy the unpadded 
part back   */
-   construct_ctr_preload(ctr_preload, a4_exists, qc_exists, 
pframe, pn_vector, num_blocks+1);
-
-   for (j = 0; j < 16; j++)
-   padded_buffer[j] = 0x00;
-   for (j = 0; j < payload_remainder; j++)
-   padded_buffer[j] = pframe[payload_index+j];
-   aes128k128d(key, ctr_preload, aes_out);
-   bitwise_xor(aes_out, padded_buffer, chain_buffer);
-   for (j = 0; j < payload_remainder; j++)
-   pframe[payload_index++] = chain_buffer[j];
-   }
-
-   /* start to calculate the mic */
-   if ((hdrlen+plen+8) <= MAX_MSG_SIZE)
-   memcpy(message, pframe, (hdrlen + plen+8)); /* 8 is for ext iv 
len */
-
-   pn_vector[0] = pframe[hdrlen];
-   pn_vector[1] = pframe[hdrlen+1];
-   pn_vector[2] = pframe[hdrlen+4];
-   pn_

[PATCH] staging:r8188eu: Use lib80211 to decrypt WEP-frames

2018-02-18 Thread Ivan Safonov
Use native lib80211 WEP decrypt instead of custom implementation.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/Kconfig|  2 +
 drivers/staging/rtl8188eu/core/rtw_recv.c|  2 +-
 drivers/staging/rtl8188eu/core/rtw_security.c| 80 +---
 drivers/staging/rtl8188eu/include/rtw_security.h |  2 +-
 4 files changed, 49 insertions(+), 37 deletions(-)

diff --git a/drivers/staging/rtl8188eu/Kconfig 
b/drivers/staging/rtl8188eu/Kconfig
index cb836c59d564..d787a091d3c1 100644
--- a/drivers/staging/rtl8188eu/Kconfig
+++ b/drivers/staging/rtl8188eu/Kconfig
@@ -4,6 +4,8 @@ config R8188EU
depends on m
select WIRELESS_EXT
select WEXT_PRIV
+   select LIB80211
+   select LIB80211_CRYPT_WEP
---help---
This option adds the Realtek RTL8188EU USB device such as TP-Link 
TL-WN725N.
If built as a module, it will be called r8188eu.
diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index 6506a1587df0..fe31ebbf36fb 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -404,7 +404,7 @@ static struct recv_frame *decryptor(struct adapter 
*padapter,
switch (prxattrib->encrypt) {
case _WEP40_:
case _WEP104_:
-   rtw_wep_decrypt(padapter, (u8 *)precv_frame);
+   res = rtw_wep_decrypt(padapter, (u8 *)precv_frame);
break;
case _TKIP_:
res = rtw_tkip_decrypt(padapter, (u8 *)precv_frame);
diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index 5b1ef229df2a..72da86fdd264 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -18,6 +18,7 @@
 #include 
 #include 
 #include 
+#include 
 
 /* WEP related = */
 
@@ -195,48 +196,57 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 
*pxmitframe)
 
 }
 
-void rtw_wep_decrypt(struct adapter  *padapter, u8 *precvframe)
+int rtw_wep_decrypt(struct adapter  *padapter, u8 *precvframe)
 {
-   /*  exclude ICV */
-   u8  crc[4];
-   struct arc4context   mycontext;
-   int length;
-   u32 keylength;
-   u8  *pframe, *payload, *iv, wepkey[16];
-   u8   keyindex;
struct  rx_pkt_attrib*prxattrib = &(((struct recv_frame 
*)precvframe)->attrib);
-   struct  security_priv   *psecuritypriv = >securitypriv;
 
+   if ((prxattrib->encrypt == _WEP40_) || (prxattrib->encrypt == 
_WEP104_)) {
+   struct  security_priv   *psecuritypriv = 
>securitypriv;
+   struct sk_buff *skb = ((struct recv_frame *)precvframe)->pkt;
+   u8 *pframe = skb->data;
+   void *crypto_private = NULL;
+   int status = _SUCCESS;
+   const int keyindex = prxattrib->key_index;
+   struct lib80211_crypto_ops *crypto_ops = 
try_then_request_module(lib80211_get_crypto_ops("WEP"), "lib80211_crypt_wep");
+   char iv[4], icv[4];
+
+   if (!crypto_ops) {
+   status = _FAIL;
+   goto exit;
+   }
 
-   pframe = (unsigned char *)((struct recv_frame *)precvframe)->pkt->data;
+   memcpy(iv, pframe + prxattrib->hdrlen, 4);
+   memcpy(icv, pframe + skb->len - 4, 4);
 
-   /* start to decrypt recvframe */
-   if ((prxattrib->encrypt == _WEP40_) || (prxattrib->encrypt == 
_WEP104_)) {
-   iv = pframe+prxattrib->hdrlen;
-   keyindex = prxattrib->key_index;
-   keylength = psecuritypriv->dot11DefKeylen[keyindex];
-   memcpy([0], iv, 3);
-   memcpy([3], 
>dot11DefKey[keyindex].skey[0], keylength);
-   length = ((struct recv_frame 
*)precvframe)->pkt->len-prxattrib->hdrlen-prxattrib->iv_len;
-
-   payload = pframe+prxattrib->iv_len+prxattrib->hdrlen;
-
-   /* decrypt payload include icv */
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload,  length);
-
-   /* calculate icv and compare the icv */
-   *((__le32 *)crc) = getcrc32(payload, length - 4);
-
-   if (crc[3] != payload[length-1] ||
-   crc[2] != payload[length-2] ||
-   crc[1] != payload[length-3] ||
-   crc[0] != payload[length-4]) {
-   RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-("rtw_wep_decrypt:icv error crc 
(%4ph)!=payload (%4ph)\n",
-, [length-4]));
+   crypto_private = crypto_ops->init(

[PATCH] staging:r8188eu: Use lib80211 to decrypt WEP-frames

2018-02-18 Thread Ivan Safonov
Use native lib80211 WEP decrypt instead of custom implementation.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/Kconfig|  2 +
 drivers/staging/rtl8188eu/core/rtw_recv.c|  2 +-
 drivers/staging/rtl8188eu/core/rtw_security.c| 80 +---
 drivers/staging/rtl8188eu/include/rtw_security.h |  2 +-
 4 files changed, 49 insertions(+), 37 deletions(-)

diff --git a/drivers/staging/rtl8188eu/Kconfig 
b/drivers/staging/rtl8188eu/Kconfig
index cb836c59d564..d787a091d3c1 100644
--- a/drivers/staging/rtl8188eu/Kconfig
+++ b/drivers/staging/rtl8188eu/Kconfig
@@ -4,6 +4,8 @@ config R8188EU
depends on m
select WIRELESS_EXT
select WEXT_PRIV
+   select LIB80211
+   select LIB80211_CRYPT_WEP
---help---
This option adds the Realtek RTL8188EU USB device such as TP-Link 
TL-WN725N.
If built as a module, it will be called r8188eu.
diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index 6506a1587df0..fe31ebbf36fb 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -404,7 +404,7 @@ static struct recv_frame *decryptor(struct adapter 
*padapter,
switch (prxattrib->encrypt) {
case _WEP40_:
case _WEP104_:
-   rtw_wep_decrypt(padapter, (u8 *)precv_frame);
+   res = rtw_wep_decrypt(padapter, (u8 *)precv_frame);
break;
case _TKIP_:
res = rtw_tkip_decrypt(padapter, (u8 *)precv_frame);
diff --git a/drivers/staging/rtl8188eu/core/rtw_security.c 
b/drivers/staging/rtl8188eu/core/rtw_security.c
index 5b1ef229df2a..72da86fdd264 100644
--- a/drivers/staging/rtl8188eu/core/rtw_security.c
+++ b/drivers/staging/rtl8188eu/core/rtw_security.c
@@ -18,6 +18,7 @@
 #include 
 #include 
 #include 
+#include 
 
 /* WEP related = */
 
@@ -195,48 +196,57 @@ void rtw_wep_encrypt(struct adapter *padapter, u8 
*pxmitframe)
 
 }
 
-void rtw_wep_decrypt(struct adapter  *padapter, u8 *precvframe)
+int rtw_wep_decrypt(struct adapter  *padapter, u8 *precvframe)
 {
-   /*  exclude ICV */
-   u8  crc[4];
-   struct arc4context   mycontext;
-   int length;
-   u32 keylength;
-   u8  *pframe, *payload, *iv, wepkey[16];
-   u8   keyindex;
struct  rx_pkt_attrib*prxattrib = &(((struct recv_frame 
*)precvframe)->attrib);
-   struct  security_priv   *psecuritypriv = >securitypriv;
 
+   if ((prxattrib->encrypt == _WEP40_) || (prxattrib->encrypt == 
_WEP104_)) {
+   struct  security_priv   *psecuritypriv = 
>securitypriv;
+   struct sk_buff *skb = ((struct recv_frame *)precvframe)->pkt;
+   u8 *pframe = skb->data;
+   void *crypto_private = NULL;
+   int status = _SUCCESS;
+   const int keyindex = prxattrib->key_index;
+   struct lib80211_crypto_ops *crypto_ops = 
try_then_request_module(lib80211_get_crypto_ops("WEP"), "lib80211_crypt_wep");
+   char iv[4], icv[4];
+
+   if (!crypto_ops) {
+   status = _FAIL;
+   goto exit;
+   }
 
-   pframe = (unsigned char *)((struct recv_frame *)precvframe)->pkt->data;
+   memcpy(iv, pframe + prxattrib->hdrlen, 4);
+   memcpy(icv, pframe + skb->len - 4, 4);
 
-   /* start to decrypt recvframe */
-   if ((prxattrib->encrypt == _WEP40_) || (prxattrib->encrypt == 
_WEP104_)) {
-   iv = pframe+prxattrib->hdrlen;
-   keyindex = prxattrib->key_index;
-   keylength = psecuritypriv->dot11DefKeylen[keyindex];
-   memcpy([0], iv, 3);
-   memcpy([3], 
>dot11DefKey[keyindex].skey[0], keylength);
-   length = ((struct recv_frame 
*)precvframe)->pkt->len-prxattrib->hdrlen-prxattrib->iv_len;
-
-   payload = pframe+prxattrib->iv_len+prxattrib->hdrlen;
-
-   /* decrypt payload include icv */
-   arcfour_init(, wepkey, 3+keylength);
-   arcfour_encrypt(, payload, payload,  length);
-
-   /* calculate icv and compare the icv */
-   *((__le32 *)crc) = getcrc32(payload, length - 4);
-
-   if (crc[3] != payload[length-1] ||
-   crc[2] != payload[length-2] ||
-   crc[1] != payload[length-3] ||
-   crc[0] != payload[length-4]) {
-   RT_TRACE(_module_rtl871x_security_c_, _drv_err_,
-("rtw_wep_decrypt:icv error crc 
(%4ph)!=payload (%4ph)\n",
-, [length-4]));
+   crypto_private = crypto_ops->init(keyindex);

[PATCH 1/4] staging:r8188eu: Remove struct pkt_file from set_qos()

2018-02-04 Thread Ivan Safonov
Struct pkt_file is a base to simple wrapper for skb_copy_bits().
Use skb_copy_bits() without wrappers.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/core/rtw_xmit.c | 26 ++
 1 file changed, 10 insertions(+), 16 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c 
b/drivers/staging/rtl8188eu/core/rtw_xmit.c
index e8d9858f2942..76b652648d3d 100644
--- a/drivers/staging/rtl8188eu/core/rtw_xmit.c
+++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c
@@ -387,27 +387,21 @@ u8qos_acm(u8 acm_mask, u8 priority)
return change_priority;
 }
 
-static void set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib)
+static void set_qos(struct sk_buff *skb, struct pkt_attrib *pattrib)
 {
-   struct ethhdr etherhdr;
-   struct iphdr ip_hdr;
-   s32 user_prio = 0;
-
-   _rtw_open_pktfile(ppktfile->pkt, ppktfile);
-   _rtw_pktfile_read(ppktfile, (unsigned char *), ETH_HLEN);
-
-   /*  get user_prio from IP hdr */
if (pattrib->ether_type == 0x0800) {
-   _rtw_pktfile_read(ppktfile, (u8 *)_hdr, sizeof(ip_hdr));
-/* user_prio = (ntohs(ip_hdr.tos) >> 5) & 0x3; */
-   user_prio = ip_hdr.tos >> 5;
+   struct iphdr ip_hdr;
+
+   skb_copy_bits(skb, ETH_HLEN, _hdr, sizeof(ip_hdr));
+   pattrib->priority = ip_hdr.tos >> 5;
} else if (pattrib->ether_type == ETH_P_PAE) {
/*  "When priority processing of data frames is supported, */
/*  a STA's SME should send EAPOL-Key frames at the highest 
priority." */
-   user_prio = 7;
+   pattrib->priority = 7;
+   } else {
+   pattrib->priority = 0;
}
 
-   pattrib->priority = user_prio;
pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN;
pattrib->subtype = WIFI_QOS_DATA_TYPE;
 }
@@ -516,10 +510,10 @@ static s32 update_attrib(struct adapter *padapter, struct 
sk_buff *pkt, struct p
 
if (check_fwstate(pmlmepriv, 
WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE)) {
if (psta->qos_option)
-   set_qos(, pattrib);
+   set_qos(pktfile.pkt, pattrib);
} else {
if (pqospriv->qos_option) {
-   set_qos(, pattrib);
+   set_qos(pktfile.pkt, pattrib);
 
if (pmlmepriv->acm_mask != 0)
pattrib->priority = 
qos_acm(pmlmepriv->acm_mask, pattrib->priority);
-- 
2.13.6



[PATCH 2/4] staging:r8188eu: Remove struct pkt_file from update_attrib()

2018-02-04 Thread Ivan Safonov
Struct pkt_file is a base to simple wrapper for skb_copy_bits().
Do not use struct pkt_file in update_attrib().

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/core/rtw_xmit.c | 16 +++-
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c 
b/drivers/staging/rtl8188eu/core/rtw_xmit.c
index 76b652648d3d..eb46e34ba562 100644
--- a/drivers/staging/rtl8188eu/core/rtw_xmit.c
+++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c
@@ -408,7 +408,6 @@ static void set_qos(struct sk_buff *skb, struct pkt_attrib 
*pattrib)
 
 static s32 update_attrib(struct adapter *padapter, struct sk_buff *pkt, struct 
pkt_attrib *pattrib)
 {
-   struct pkt_file pktfile;
struct sta_info *psta = NULL;
struct ethhdr etherhdr;
 
@@ -419,9 +418,7 @@ static s32 update_attrib(struct adapter *padapter, struct 
sk_buff *pkt, struct p
struct qos_priv *pqospriv = >qospriv;
int res = _SUCCESS;
 
-
-   _rtw_open_pktfile(pkt, );
-   _rtw_pktfile_read(, (u8 *), ETH_HLEN);
+   skb_copy_bits(pkt, 0, , ETH_HLEN);
 
pattrib->ether_type = ntohs(etherhdr.h_proto);
 
@@ -442,16 +439,17 @@ static s32 update_attrib(struct adapter *padapter, struct 
sk_buff *pkt, struct p
memcpy(pattrib->ta, get_bssid(pmlmepriv), ETH_ALEN);
}
 
-   pattrib->pktlen = pktfile.pkt_len;
+   pattrib->pktlen = pkt->len - ETH_HLEN;
 
if (pattrib->ether_type == ETH_P_IP) {
/*  The following is for DHCP and ARP packet, we use cck1M to 
tx these packets and let LPS awake some time */
/*  to prevent DHCP protocol fail */
u8 tmp[24];
 
-   _rtw_pktfile_read(, [0], 24);
+   skb_copy_bits(pkt, ETH_HLEN, tmp, 24);
+
pattrib->dhcp_pkt = 0;
-   if (pktfile.pkt_len > 282) {/* MINIMUM_DHCP_PACKET_SIZE) { */
+   if (pkt->len > ETH_HLEN + 24 + 282) {/* 
MINIMUM_DHCP_PACKET_SIZE) { */
if (pattrib->ether_type == ETH_P_IP) {/*  IP header */
if (((tmp[21] == 68) && (tmp[23] == 67)) ||
((tmp[21] == 67) && (tmp[23] == 68))) {
@@ -510,10 +508,10 @@ static s32 update_attrib(struct adapter *padapter, struct 
sk_buff *pkt, struct p
 
if (check_fwstate(pmlmepriv, 
WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE)) {
if (psta->qos_option)
-   set_qos(pktfile.pkt, pattrib);
+   set_qos(pkt, pattrib);
} else {
if (pqospriv->qos_option) {
-   set_qos(pktfile.pkt, pattrib);
+   set_qos(pkt, pattrib);
 
if (pmlmepriv->acm_mask != 0)
pattrib->priority = 
qos_acm(pmlmepriv->acm_mask, pattrib->priority);
-- 
2.13.6



[PATCH 1/4] staging:r8188eu: Remove struct pkt_file from set_qos()

2018-02-04 Thread Ivan Safonov
Struct pkt_file is a base to simple wrapper for skb_copy_bits().
Use skb_copy_bits() without wrappers.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_xmit.c | 26 ++
 1 file changed, 10 insertions(+), 16 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c 
b/drivers/staging/rtl8188eu/core/rtw_xmit.c
index e8d9858f2942..76b652648d3d 100644
--- a/drivers/staging/rtl8188eu/core/rtw_xmit.c
+++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c
@@ -387,27 +387,21 @@ u8qos_acm(u8 acm_mask, u8 priority)
return change_priority;
 }
 
-static void set_qos(struct pkt_file *ppktfile, struct pkt_attrib *pattrib)
+static void set_qos(struct sk_buff *skb, struct pkt_attrib *pattrib)
 {
-   struct ethhdr etherhdr;
-   struct iphdr ip_hdr;
-   s32 user_prio = 0;
-
-   _rtw_open_pktfile(ppktfile->pkt, ppktfile);
-   _rtw_pktfile_read(ppktfile, (unsigned char *), ETH_HLEN);
-
-   /*  get user_prio from IP hdr */
if (pattrib->ether_type == 0x0800) {
-   _rtw_pktfile_read(ppktfile, (u8 *)_hdr, sizeof(ip_hdr));
-/* user_prio = (ntohs(ip_hdr.tos) >> 5) & 0x3; */
-   user_prio = ip_hdr.tos >> 5;
+   struct iphdr ip_hdr;
+
+   skb_copy_bits(skb, ETH_HLEN, _hdr, sizeof(ip_hdr));
+   pattrib->priority = ip_hdr.tos >> 5;
} else if (pattrib->ether_type == ETH_P_PAE) {
/*  "When priority processing of data frames is supported, */
/*  a STA's SME should send EAPOL-Key frames at the highest 
priority." */
-   user_prio = 7;
+   pattrib->priority = 7;
+   } else {
+   pattrib->priority = 0;
}
 
-   pattrib->priority = user_prio;
pattrib->hdrlen = WLAN_HDR_A3_QOS_LEN;
pattrib->subtype = WIFI_QOS_DATA_TYPE;
 }
@@ -516,10 +510,10 @@ static s32 update_attrib(struct adapter *padapter, struct 
sk_buff *pkt, struct p
 
if (check_fwstate(pmlmepriv, 
WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE)) {
if (psta->qos_option)
-   set_qos(, pattrib);
+   set_qos(pktfile.pkt, pattrib);
} else {
if (pqospriv->qos_option) {
-   set_qos(, pattrib);
+   set_qos(pktfile.pkt, pattrib);
 
if (pmlmepriv->acm_mask != 0)
pattrib->priority = 
qos_acm(pmlmepriv->acm_mask, pattrib->priority);
-- 
2.13.6



[PATCH 2/4] staging:r8188eu: Remove struct pkt_file from update_attrib()

2018-02-04 Thread Ivan Safonov
Struct pkt_file is a base to simple wrapper for skb_copy_bits().
Do not use struct pkt_file in update_attrib().

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_xmit.c | 16 +++-
 1 file changed, 7 insertions(+), 9 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c 
b/drivers/staging/rtl8188eu/core/rtw_xmit.c
index 76b652648d3d..eb46e34ba562 100644
--- a/drivers/staging/rtl8188eu/core/rtw_xmit.c
+++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c
@@ -408,7 +408,6 @@ static void set_qos(struct sk_buff *skb, struct pkt_attrib 
*pattrib)
 
 static s32 update_attrib(struct adapter *padapter, struct sk_buff *pkt, struct 
pkt_attrib *pattrib)
 {
-   struct pkt_file pktfile;
struct sta_info *psta = NULL;
struct ethhdr etherhdr;
 
@@ -419,9 +418,7 @@ static s32 update_attrib(struct adapter *padapter, struct 
sk_buff *pkt, struct p
struct qos_priv *pqospriv = >qospriv;
int res = _SUCCESS;
 
-
-   _rtw_open_pktfile(pkt, );
-   _rtw_pktfile_read(, (u8 *), ETH_HLEN);
+   skb_copy_bits(pkt, 0, , ETH_HLEN);
 
pattrib->ether_type = ntohs(etherhdr.h_proto);
 
@@ -442,16 +439,17 @@ static s32 update_attrib(struct adapter *padapter, struct 
sk_buff *pkt, struct p
memcpy(pattrib->ta, get_bssid(pmlmepriv), ETH_ALEN);
}
 
-   pattrib->pktlen = pktfile.pkt_len;
+   pattrib->pktlen = pkt->len - ETH_HLEN;
 
if (pattrib->ether_type == ETH_P_IP) {
/*  The following is for DHCP and ARP packet, we use cck1M to 
tx these packets and let LPS awake some time */
/*  to prevent DHCP protocol fail */
u8 tmp[24];
 
-   _rtw_pktfile_read(, [0], 24);
+   skb_copy_bits(pkt, ETH_HLEN, tmp, 24);
+
pattrib->dhcp_pkt = 0;
-   if (pktfile.pkt_len > 282) {/* MINIMUM_DHCP_PACKET_SIZE) { */
+   if (pkt->len > ETH_HLEN + 24 + 282) {/* 
MINIMUM_DHCP_PACKET_SIZE) { */
if (pattrib->ether_type == ETH_P_IP) {/*  IP header */
if (((tmp[21] == 68) && (tmp[23] == 67)) ||
((tmp[21] == 67) && (tmp[23] == 68))) {
@@ -510,10 +508,10 @@ static s32 update_attrib(struct adapter *padapter, struct 
sk_buff *pkt, struct p
 
if (check_fwstate(pmlmepriv, 
WIFI_AP_STATE|WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE)) {
if (psta->qos_option)
-   set_qos(pktfile.pkt, pattrib);
+   set_qos(pkt, pattrib);
} else {
if (pqospriv->qos_option) {
-   set_qos(pktfile.pkt, pattrib);
+   set_qos(pkt, pattrib);
 
if (pmlmepriv->acm_mask != 0)
pattrib->priority = 
qos_acm(pmlmepriv->acm_mask, pattrib->priority);
-- 
2.13.6



[PATCH 3/4] staging:r8188eu: Remove struct pkt_file from rtw_xmitframe_coalesce()

2018-02-04 Thread Ivan Safonov
Struct pkt_file is a base to simple wrapper for skb_copy_bits().
Eliminate struct pkt_file usage in rtw_xmitframe_coalesce().

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/core/rtw_xmit.c | 17 +
 1 file changed, 5 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c 
b/drivers/staging/rtl8188eu/core/rtw_xmit.c
index eb46e34ba562..6b32c142fdcc 100644
--- a/drivers/staging/rtl8188eu/core/rtw_xmit.c
+++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c
@@ -943,7 +943,6 @@ This sub-routine will perform all the following:
 */
 s32 rtw_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, 
struct xmit_frame *pxmitframe)
 {
-   struct pkt_file pktfile;
s32 frg_inx, frg_len, mpdu_len, llc_sz, mem_sz;
size_t addr;
u8 *pframe, *mem_start;
@@ -954,7 +953,7 @@ s32 rtw_xmitframe_coalesce(struct adapter *padapter, struct 
sk_buff *pkt, struct
u8 *pbuf_start;
s32 bmcst = IS_MCAST(pattrib->ra);
s32 res = _SUCCESS;
-
+   size_t remainder = pkt->len - ETH_HLEN;
 
psta = rtw_get_stainfo(>stapriv, pattrib->ra);
 
@@ -979,9 +978,6 @@ s32 rtw_xmitframe_coalesce(struct adapter *padapter, struct 
sk_buff *pkt, struct
goto exit;
}
 
-   _rtw_open_pktfile(pkt, );
-   _rtw_pktfile_read(, NULL, ETH_HLEN);
-
frg_inx = 0;
frg_len = pxmitpriv->frag_len - 4;/* 2346-4 = 2342 */
 
@@ -1038,12 +1034,9 @@ s32 rtw_xmitframe_coalesce(struct adapter *padapter, 
struct sk_buff *pkt, struct
if ((pattrib->icv_len > 0) && (pattrib->bswenc))
mpdu_len -= pattrib->icv_len;
 
-   if (bmcst) {
-   /*  don't do fragment to broadcat/multicast packets */
-   mem_sz = _rtw_pktfile_read(, pframe, 
pattrib->pktlen);
-   } else {
-   mem_sz = _rtw_pktfile_read(, pframe, mpdu_len);
-   }
+   mem_sz = min_t(size_t, bmcst ? pattrib->pktlen : mpdu_len, 
remainder);
+   skb_copy_bits(pkt, pkt->len - remainder, pframe, mem_sz);
+   remainder -= mem_sz;
 
pframe += mem_sz;
 
@@ -1054,7 +1047,7 @@ s32 rtw_xmitframe_coalesce(struct adapter *padapter, 
struct sk_buff *pkt, struct
 
frg_inx++;
 
-   if (bmcst || pktfile.pkt_len == 0) {
+   if (bmcst || remainder == 0) {
pattrib->nr_frags = frg_inx;
 
pattrib->last_txcmdsz = pattrib->hdrlen + 
pattrib->iv_len + ((pattrib->nr_frags == 1) ? llc_sz : 0) +
-- 
2.13.6



[PATCH 3/4] staging:r8188eu: Remove struct pkt_file from rtw_xmitframe_coalesce()

2018-02-04 Thread Ivan Safonov
Struct pkt_file is a base to simple wrapper for skb_copy_bits().
Eliminate struct pkt_file usage in rtw_xmitframe_coalesce().

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_xmit.c | 17 +
 1 file changed, 5 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_xmit.c 
b/drivers/staging/rtl8188eu/core/rtw_xmit.c
index eb46e34ba562..6b32c142fdcc 100644
--- a/drivers/staging/rtl8188eu/core/rtw_xmit.c
+++ b/drivers/staging/rtl8188eu/core/rtw_xmit.c
@@ -943,7 +943,6 @@ This sub-routine will perform all the following:
 */
 s32 rtw_xmitframe_coalesce(struct adapter *padapter, struct sk_buff *pkt, 
struct xmit_frame *pxmitframe)
 {
-   struct pkt_file pktfile;
s32 frg_inx, frg_len, mpdu_len, llc_sz, mem_sz;
size_t addr;
u8 *pframe, *mem_start;
@@ -954,7 +953,7 @@ s32 rtw_xmitframe_coalesce(struct adapter *padapter, struct 
sk_buff *pkt, struct
u8 *pbuf_start;
s32 bmcst = IS_MCAST(pattrib->ra);
s32 res = _SUCCESS;
-
+   size_t remainder = pkt->len - ETH_HLEN;
 
psta = rtw_get_stainfo(>stapriv, pattrib->ra);
 
@@ -979,9 +978,6 @@ s32 rtw_xmitframe_coalesce(struct adapter *padapter, struct 
sk_buff *pkt, struct
goto exit;
}
 
-   _rtw_open_pktfile(pkt, );
-   _rtw_pktfile_read(, NULL, ETH_HLEN);
-
frg_inx = 0;
frg_len = pxmitpriv->frag_len - 4;/* 2346-4 = 2342 */
 
@@ -1038,12 +1034,9 @@ s32 rtw_xmitframe_coalesce(struct adapter *padapter, 
struct sk_buff *pkt, struct
if ((pattrib->icv_len > 0) && (pattrib->bswenc))
mpdu_len -= pattrib->icv_len;
 
-   if (bmcst) {
-   /*  don't do fragment to broadcat/multicast packets */
-   mem_sz = _rtw_pktfile_read(, pframe, 
pattrib->pktlen);
-   } else {
-   mem_sz = _rtw_pktfile_read(, pframe, mpdu_len);
-   }
+   mem_sz = min_t(size_t, bmcst ? pattrib->pktlen : mpdu_len, 
remainder);
+   skb_copy_bits(pkt, pkt->len - remainder, pframe, mem_sz);
+   remainder -= mem_sz;
 
pframe += mem_sz;
 
@@ -1054,7 +1047,7 @@ s32 rtw_xmitframe_coalesce(struct adapter *padapter, 
struct sk_buff *pkt, struct
 
frg_inx++;
 
-   if (bmcst || pktfile.pkt_len == 0) {
+   if (bmcst || remainder == 0) {
pattrib->nr_frags = frg_inx;
 
pattrib->last_txcmdsz = pattrib->hdrlen + 
pattrib->iv_len + ((pattrib->nr_frags == 1) ? llc_sz : 0) +
-- 
2.13.6



[PATCH 4/4] staging:r8188eu: Remove unused struct pkt_file

2018-02-04 Thread Ivan Safonov
Struct pkt_file is unused now, so remove it and correponding functions.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/include/xmit_osdep.h | 13 -
 drivers/staging/rtl8188eu/os_dep/xmit_linux.c  | 37 --
 2 files changed, 50 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/xmit_osdep.h 
b/drivers/staging/rtl8188eu/include/xmit_osdep.h
index 959ef4b3066c..00ebad88f0d1 100644
--- a/drivers/staging/rtl8188eu/include/xmit_osdep.h
+++ b/drivers/staging/rtl8188eu/include/xmit_osdep.h
@@ -18,15 +18,6 @@
 #include 
 #include 
 
-struct pkt_file {
-   struct sk_buff *pkt;
-   size_t pkt_len;  /* the remainder length of the open_file */
-   unsigned char *cur_buffer;
-   u8 *buf_start;
-   u8 *cur_addr;
-   size_t buf_len;
-};
-
 #define NR_XMITFRAME   256
 
 struct xmit_priv;
@@ -43,10 +34,6 @@ int rtw_os_xmit_resource_alloc(struct adapter *padapter,
   struct xmit_buf *pxmitbuf, u32 alloc_sz);
 void rtw_os_xmit_resource_free(struct xmit_buf *pxmitbuf);
 
-uint rtw_remainder_len(struct pkt_file *pfile);
-void _rtw_open_pktfile(struct sk_buff *pkt, struct pkt_file *pfile);
-uint _rtw_pktfile_read(struct pkt_file *pfile, u8 *rmem, uint rlen);
-
 void rtw_os_pkt_complete(struct adapter *padapter, struct sk_buff *pkt);
 void rtw_os_xmit_complete(struct adapter *padapter,
  struct xmit_frame *pxframe);
diff --git a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c 
b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
index 8bf8248e4ac7..8ac9567c954d 100644
--- a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
@@ -22,43 +22,6 @@
 #include 
 #include 
 
-uint rtw_remainder_len(struct pkt_file *pfile)
-{
-   return pfile->buf_len - ((size_t)(pfile->cur_addr) -
-  (size_t)(pfile->buf_start));
-}
-
-void _rtw_open_pktfile(struct sk_buff *pktptr, struct pkt_file *pfile)
-{
-
-   pfile->pkt = pktptr;
-   pfile->cur_addr = pktptr->data;
-   pfile->buf_start = pktptr->data;
-   pfile->pkt_len = pktptr->len;
-   pfile->buf_len = pktptr->len;
-
-   pfile->cur_buffer = pfile->buf_start;
-
-}
-
-uint _rtw_pktfile_read(struct pkt_file *pfile, u8 *rmem, uint rlen)
-{
-   uintlen = 0;
-
-
-   len =  rtw_remainder_len(pfile);
-   len = min(rlen, len);
-
-   if (rmem)
-   skb_copy_bits(pfile->pkt, pfile->buf_len-pfile->pkt_len, rmem, 
len);
-
-   pfile->cur_addr += len;
-   pfile->pkt_len -= len;
-
-
-   return len;
-}
-
 int rtw_os_xmit_resource_alloc(struct adapter *padapter, struct xmit_buf 
*pxmitbuf, u32 alloc_sz)
 {
int i;
-- 
2.13.6



[PATCH 4/4] staging:r8188eu: Remove unused struct pkt_file

2018-02-04 Thread Ivan Safonov
Struct pkt_file is unused now, so remove it and correponding functions.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/include/xmit_osdep.h | 13 -
 drivers/staging/rtl8188eu/os_dep/xmit_linux.c  | 37 --
 2 files changed, 50 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/xmit_osdep.h 
b/drivers/staging/rtl8188eu/include/xmit_osdep.h
index 959ef4b3066c..00ebad88f0d1 100644
--- a/drivers/staging/rtl8188eu/include/xmit_osdep.h
+++ b/drivers/staging/rtl8188eu/include/xmit_osdep.h
@@ -18,15 +18,6 @@
 #include 
 #include 
 
-struct pkt_file {
-   struct sk_buff *pkt;
-   size_t pkt_len;  /* the remainder length of the open_file */
-   unsigned char *cur_buffer;
-   u8 *buf_start;
-   u8 *cur_addr;
-   size_t buf_len;
-};
-
 #define NR_XMITFRAME   256
 
 struct xmit_priv;
@@ -43,10 +34,6 @@ int rtw_os_xmit_resource_alloc(struct adapter *padapter,
   struct xmit_buf *pxmitbuf, u32 alloc_sz);
 void rtw_os_xmit_resource_free(struct xmit_buf *pxmitbuf);
 
-uint rtw_remainder_len(struct pkt_file *pfile);
-void _rtw_open_pktfile(struct sk_buff *pkt, struct pkt_file *pfile);
-uint _rtw_pktfile_read(struct pkt_file *pfile, u8 *rmem, uint rlen);
-
 void rtw_os_pkt_complete(struct adapter *padapter, struct sk_buff *pkt);
 void rtw_os_xmit_complete(struct adapter *padapter,
  struct xmit_frame *pxframe);
diff --git a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c 
b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
index 8bf8248e4ac7..8ac9567c954d 100644
--- a/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
+++ b/drivers/staging/rtl8188eu/os_dep/xmit_linux.c
@@ -22,43 +22,6 @@
 #include 
 #include 
 
-uint rtw_remainder_len(struct pkt_file *pfile)
-{
-   return pfile->buf_len - ((size_t)(pfile->cur_addr) -
-  (size_t)(pfile->buf_start));
-}
-
-void _rtw_open_pktfile(struct sk_buff *pktptr, struct pkt_file *pfile)
-{
-
-   pfile->pkt = pktptr;
-   pfile->cur_addr = pktptr->data;
-   pfile->buf_start = pktptr->data;
-   pfile->pkt_len = pktptr->len;
-   pfile->buf_len = pktptr->len;
-
-   pfile->cur_buffer = pfile->buf_start;
-
-}
-
-uint _rtw_pktfile_read(struct pkt_file *pfile, u8 *rmem, uint rlen)
-{
-   uintlen = 0;
-
-
-   len =  rtw_remainder_len(pfile);
-   len = min(rlen, len);
-
-   if (rmem)
-   skb_copy_bits(pfile->pkt, pfile->buf_len-pfile->pkt_len, rmem, 
len);
-
-   pfile->cur_addr += len;
-   pfile->pkt_len -= len;
-
-
-   return len;
-}
-
 int rtw_os_xmit_resource_alloc(struct adapter *padapter, struct xmit_buf 
*pxmitbuf, u32 alloc_sz)
 {
int i;
-- 
2.13.6



[PATCH] staging:r8192u: replace request_module with try_then_request_module

2017-09-10 Thread Ivan Safonov
Return value of request_module() does not handled,
so it is possible to use shorter try_then_request_module().

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 .../staging/rtl8192u/ieee80211/ieee80211_softmac.c | 27 +++---
 drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c  | 15 
 2 files changed, 17 insertions(+), 25 deletions(-)

diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c 
b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
index fe6f38b7ec35..4e7908322d77 100644
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
@@ -2948,8 +2948,9 @@ static int ieee80211_wpa_set_encryption(struct 
ieee80211_device *ieee,
  struct ieee_param *param, int param_len)
 {
int ret = 0;
+   const char *module = NULL;
 
-   struct ieee80211_crypto_ops *ops;
+   struct ieee80211_crypto_ops *ops = NULL;
struct ieee80211_crypt_data **crypt;
 
struct ieee80211_security sec = {
@@ -2995,19 +2996,17 @@ static int ieee80211_wpa_set_encryption(struct 
ieee80211_device *ieee,
strcmp(param->u.crypt.alg, "TKIP"))
goto skip_host_crypt;
 
-   ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
-   if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) {
-   request_module("ieee80211_crypt_wep");
-   ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
-   //set WEP40 first, it will be modified according to WEP104 or 
WEP40 at other place
-   } else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) {
-   request_module("ieee80211_crypt_tkip");
-   ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
-   } else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) {
-   request_module("ieee80211_crypt_ccmp");
-   ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
-   }
-   if (ops == NULL) {
+   //set WEP40 first, it will be modified according to WEP104 or WEP40 at 
other place
+   if (!strcmp(param->u.crypt.alg, "WEP"))
+   module = "ieee80211_crypt_wep";
+   else if (!strcmp(param->u.crypt.alg, "TKIP"))
+   module = "ieee80211_crypt_tkip";
+   else if (!strcmp(param->u.crypt.alg, "CCMP"))
+   module = "ieee80211_crypt_ccmp";
+   if (module)
+   ops = 
try_then_request_module(ieee80211_get_crypto_ops(param->u.crypt.alg),
+ module);
+   if (!ops) {
printk("unknown crypto alg '%s'\n", param->u.crypt.alg);
param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG;
ret = -EINVAL;
diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c 
b/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c
index c925e53bf013..f2fcdec9bd17 100644
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c
@@ -364,11 +364,8 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
GFP_KERNEL);
if (!new_crypt)
return -ENOMEM;
-   new_crypt->ops = ieee80211_get_crypto_ops("WEP");
-   if (!new_crypt->ops) {
-   request_module("ieee80211_crypt_wep");
-   new_crypt->ops = ieee80211_get_crypto_ops("WEP");
-   }
+   new_crypt->ops = 
try_then_request_module(ieee80211_get_crypto_ops("WEP"),
+"ieee80211_crypt_wep");
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
new_crypt->priv = new_crypt->ops->init(key);
 
@@ -591,12 +588,8 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device 
*ieee,
}
printk("alg name:%s\n",alg);
 
-ops = ieee80211_get_crypto_ops(alg);
-   if (ops == NULL) {
-   request_module(module);
-   ops = ieee80211_get_crypto_ops(alg);
-   }
-   if (ops == NULL) {
+   ops = try_then_request_module(ieee80211_get_crypto_ops(alg), module);
+   if (!ops) {
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
   dev->name, ext->alg);
printk(">unknown crypto alg %d\n", ext->alg);
-- 
2.13.5



[PATCH] staging:r8192u: replace request_module with try_then_request_module

2017-09-10 Thread Ivan Safonov
Return value of request_module() does not handled,
so it is possible to use shorter try_then_request_module().

Signed-off-by: Ivan Safonov 
---
 .../staging/rtl8192u/ieee80211/ieee80211_softmac.c | 27 +++---
 drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c  | 15 
 2 files changed, 17 insertions(+), 25 deletions(-)

diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c 
b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
index fe6f38b7ec35..4e7908322d77 100644
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_softmac.c
@@ -2948,8 +2948,9 @@ static int ieee80211_wpa_set_encryption(struct 
ieee80211_device *ieee,
  struct ieee_param *param, int param_len)
 {
int ret = 0;
+   const char *module = NULL;
 
-   struct ieee80211_crypto_ops *ops;
+   struct ieee80211_crypto_ops *ops = NULL;
struct ieee80211_crypt_data **crypt;
 
struct ieee80211_security sec = {
@@ -2995,19 +2996,17 @@ static int ieee80211_wpa_set_encryption(struct 
ieee80211_device *ieee,
strcmp(param->u.crypt.alg, "TKIP"))
goto skip_host_crypt;
 
-   ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
-   if (ops == NULL && strcmp(param->u.crypt.alg, "WEP") == 0) {
-   request_module("ieee80211_crypt_wep");
-   ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
-   //set WEP40 first, it will be modified according to WEP104 or 
WEP40 at other place
-   } else if (ops == NULL && strcmp(param->u.crypt.alg, "TKIP") == 0) {
-   request_module("ieee80211_crypt_tkip");
-   ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
-   } else if (ops == NULL && strcmp(param->u.crypt.alg, "CCMP") == 0) {
-   request_module("ieee80211_crypt_ccmp");
-   ops = ieee80211_get_crypto_ops(param->u.crypt.alg);
-   }
-   if (ops == NULL) {
+   //set WEP40 first, it will be modified according to WEP104 or WEP40 at 
other place
+   if (!strcmp(param->u.crypt.alg, "WEP"))
+   module = "ieee80211_crypt_wep";
+   else if (!strcmp(param->u.crypt.alg, "TKIP"))
+   module = "ieee80211_crypt_tkip";
+   else if (!strcmp(param->u.crypt.alg, "CCMP"))
+   module = "ieee80211_crypt_ccmp";
+   if (module)
+   ops = 
try_then_request_module(ieee80211_get_crypto_ops(param->u.crypt.alg),
+ module);
+   if (!ops) {
printk("unknown crypto alg '%s'\n", param->u.crypt.alg);
param->u.crypt.err = IEEE_CRYPT_ERR_UNKNOWN_ALG;
ret = -EINVAL;
diff --git a/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c 
b/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c
index c925e53bf013..f2fcdec9bd17 100644
--- a/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c
+++ b/drivers/staging/rtl8192u/ieee80211/ieee80211_wx.c
@@ -364,11 +364,8 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
GFP_KERNEL);
if (!new_crypt)
return -ENOMEM;
-   new_crypt->ops = ieee80211_get_crypto_ops("WEP");
-   if (!new_crypt->ops) {
-   request_module("ieee80211_crypt_wep");
-   new_crypt->ops = ieee80211_get_crypto_ops("WEP");
-   }
+   new_crypt->ops = 
try_then_request_module(ieee80211_get_crypto_ops("WEP"),
+"ieee80211_crypt_wep");
if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
new_crypt->priv = new_crypt->ops->init(key);
 
@@ -591,12 +588,8 @@ int ieee80211_wx_set_encode_ext(struct ieee80211_device 
*ieee,
}
printk("alg name:%s\n",alg);
 
-ops = ieee80211_get_crypto_ops(alg);
-   if (ops == NULL) {
-   request_module(module);
-   ops = ieee80211_get_crypto_ops(alg);
-   }
-   if (ops == NULL) {
+   ops = try_then_request_module(ieee80211_get_crypto_ops(alg), module);
+   if (!ops) {
IEEE80211_DEBUG_WX("%s: unknown crypto alg %d\n",
   dev->name, ext->alg);
printk(">unknown crypto alg %d\n", ext->alg);
-- 
2.13.5



[PATCH 2/7] staging:r8188eu: use different mon_recv_decrypted() inside rtl88eu_mon_recv_hook() and rtl88eu_mon_xmit_hook().

2017-05-02 Thread Ivan Safonov
Create mon_recv_decrypted_recv() to change rtl88eu_mon_recv_hook()
without affect to rtl88eu_mon_xmit_hook().

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/os_dep/mon.c | 23 ++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/rtl8188eu/os_dep/mon.c 
b/drivers/staging/rtl8188eu/os_dep/mon.c
index cfe37eb..7eac87d 100644
--- a/drivers/staging/rtl8188eu/os_dep/mon.c
+++ b/drivers/staging/rtl8188eu/os_dep/mon.c
@@ -66,6 +66,27 @@ static void mon_recv_decrypted(struct net_device *dev, const 
u8 *data,
netif_rx(skb);
 }
 
+static void mon_recv_decrypted_recv(struct net_device *dev, const u8 *data,
+  int data_len, int iv_len, int icv_len)
+{
+   struct sk_buff *skb;
+
+   skb = netdev_alloc_skb(dev, data_len);
+   if (!skb)
+   return;
+   memcpy(skb_put(skb, data_len), data, data_len);
+
+   /*
+* Frame data is not encrypted. Strip off protection so
+* userspace doesn't think that it is.
+*/
+   unprotect_frame(skb, iv_len, icv_len);
+
+   skb->ip_summed = CHECKSUM_UNNECESSARY;
+   skb->protocol = eth_type_trans(skb, dev);
+   netif_rx(skb);
+}
+
 static void mon_recv_encrypted(struct net_device *dev, const u8 *data,
   int data_len)
 {
@@ -99,7 +120,7 @@ void rtl88eu_mon_recv_hook(struct net_device *dev, struct 
recv_frame *frame)
SET_ICE_IV_LEN(iv_len, icv_len, attr->encrypt);
 
if (attr->bdecrypted)
-   mon_recv_decrypted(dev, data, data_len, iv_len, icv_len);
+   mon_recv_decrypted_recv(dev, data, data_len, iv_len, icv_len);
else
mon_recv_encrypted(dev, data, data_len);
 }
-- 
2.10.2



[PATCH 2/7] staging:r8188eu: use different mon_recv_decrypted() inside rtl88eu_mon_recv_hook() and rtl88eu_mon_xmit_hook().

2017-05-02 Thread Ivan Safonov
Create mon_recv_decrypted_recv() to change rtl88eu_mon_recv_hook()
without affect to rtl88eu_mon_xmit_hook().

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/os_dep/mon.c | 23 ++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/rtl8188eu/os_dep/mon.c 
b/drivers/staging/rtl8188eu/os_dep/mon.c
index cfe37eb..7eac87d 100644
--- a/drivers/staging/rtl8188eu/os_dep/mon.c
+++ b/drivers/staging/rtl8188eu/os_dep/mon.c
@@ -66,6 +66,27 @@ static void mon_recv_decrypted(struct net_device *dev, const 
u8 *data,
netif_rx(skb);
 }
 
+static void mon_recv_decrypted_recv(struct net_device *dev, const u8 *data,
+  int data_len, int iv_len, int icv_len)
+{
+   struct sk_buff *skb;
+
+   skb = netdev_alloc_skb(dev, data_len);
+   if (!skb)
+   return;
+   memcpy(skb_put(skb, data_len), data, data_len);
+
+   /*
+* Frame data is not encrypted. Strip off protection so
+* userspace doesn't think that it is.
+*/
+   unprotect_frame(skb, iv_len, icv_len);
+
+   skb->ip_summed = CHECKSUM_UNNECESSARY;
+   skb->protocol = eth_type_trans(skb, dev);
+   netif_rx(skb);
+}
+
 static void mon_recv_encrypted(struct net_device *dev, const u8 *data,
   int data_len)
 {
@@ -99,7 +120,7 @@ void rtl88eu_mon_recv_hook(struct net_device *dev, struct 
recv_frame *frame)
SET_ICE_IV_LEN(iv_len, icv_len, attr->encrypt);
 
if (attr->bdecrypted)
-   mon_recv_decrypted(dev, data, data_len, iv_len, icv_len);
+   mon_recv_decrypted_recv(dev, data, data_len, iv_len, icv_len);
else
mon_recv_encrypted(dev, data, data_len);
 }
-- 
2.10.2



[PATCH 5/7] staging:r8188eu: remove ieee80211_get_hdrlen()

2017-05-02 Thread Ivan Safonov
ieee80211_get_hdrlen is unused, remove it and all corresponding code.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 27 --
 drivers/staging/rtl8188eu/include/ieee80211.h  | 13 -
 2 files changed, 40 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c 
b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
index d1dafe0..6fc93fa 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
@@ -972,33 +972,6 @@ int ieee80211_is_empty_essid(const char *essid, int 
essid_len)
return 1;
 }
 
-int ieee80211_get_hdrlen(u16 fc)
-{
-   int hdrlen = 24;
-
-   switch (WLAN_FC_GET_TYPE(fc)) {
-   case RTW_IEEE80211_FTYPE_DATA:
-   if (fc & RTW_IEEE80211_STYPE_QOS_DATA)
-   hdrlen += 2;
-   if ((fc & RTW_IEEE80211_FCTL_FROMDS) && (fc & 
RTW_IEEE80211_FCTL_TODS))
-   hdrlen += 6; /* Addr4 */
-   break;
-   case RTW_IEEE80211_FTYPE_CTL:
-   switch (WLAN_FC_GET_STYPE(fc)) {
-   case RTW_IEEE80211_STYPE_CTS:
-   case RTW_IEEE80211_STYPE_ACK:
-   hdrlen = 10;
-   break;
-   default:
-   hdrlen = 16;
-   break;
-   }
-   break;
-   }
-
-   return hdrlen;
-}
-
 static int rtw_get_cipher_info(struct wlan_network *pnetwork)
 {
uint wpa_ielen;
diff --git a/drivers/staging/rtl8188eu/include/ieee80211.h 
b/drivers/staging/rtl8188eu/include/ieee80211.h
index 22ab0c4..6348fcf 100644
--- a/drivers/staging/rtl8188eu/include/ieee80211.h
+++ b/drivers/staging/rtl8188eu/include/ieee80211.h
@@ -308,10 +308,6 @@ enum eap_type {
 
 /* Frame control field constants */
 #define RTW_IEEE80211_FCTL_VERS0x0003
-#define RTW_IEEE80211_FCTL_FTYPE   0x000c
-#define RTW_IEEE80211_FCTL_STYPE   0x00f0
-#define RTW_IEEE80211_FCTL_TODS0x0100
-#define RTW_IEEE80211_FCTL_FROMDS  0x0200
 #define RTW_IEEE80211_FCTL_MOREFRAGS   0x0400
 #define RTW_IEEE80211_FCTL_RETRY   0x0800
 #define RTW_IEEE80211_FCTL_PM  0x1000
@@ -321,8 +317,6 @@ enum eap_type {
 #define RTW_IEEE80211_FCTL_CTL_EXT 0x0f00
 
 #define RTW_IEEE80211_FTYPE_MGMT   0x
-#define RTW_IEEE80211_FTYPE_CTL0x0004
-#define RTW_IEEE80211_FTYPE_DATA   0x0008
 #define RTW_IEEE80211_FTYPE_EXT0x000c
 
 /* management */
@@ -345,8 +339,6 @@ enum eap_type {
 #define RTW_IEEE80211_STYPE_BACK   0x0090
 #define RTW_IEEE80211_STYPE_PSPOLL 0x00A0
 #define RTW_IEEE80211_STYPE_RTS0x00B0
-#define RTW_IEEE80211_STYPE_CTS0x00C0
-#define RTW_IEEE80211_STYPE_ACK0x00D0
 #define RTW_IEEE80211_STYPE_CFEND  0x00E0
 #define RTW_IEEE80211_STYPE_CFENDACK   0x00F0
 
@@ -359,7 +351,6 @@ enum eap_type {
 #define RTW_IEEE80211_STYPE_CFACK  0x0050
 #define RTW_IEEE80211_STYPE_CFPOLL 0x0060
 #define RTW_IEEE80211_STYPE_CFACKPOLL  0x0070
-#define RTW_IEEE80211_STYPE_QOS_DATA   0x0080
 #define RTW_IEEE80211_STYPE_QOS_DATA_CFACK 0x0090
 #define RTW_IEEE80211_STYPE_QOS_DATA_CFPOLL0x00A0
 #define RTW_IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0
@@ -408,9 +399,6 @@ struct ieee80211_snap_hdr {
 
 #define SNAP_SIZE sizeof(struct ieee80211_snap_hdr)
 
-#define WLAN_FC_GET_TYPE(fc) ((fc) & RTW_IEEE80211_FCTL_FTYPE)
-#define WLAN_FC_GET_STYPE(fc) ((fc) & RTW_IEEE80211_FCTL_STYPE)
-
 #define WLAN_QC_GET_TID(qc) ((qc) & 0x0f)
 
 #define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTW_IEEE80211_SCTL_FRAG)
@@ -646,7 +634,6 @@ static inline int is_broadcast_mac_addr(const u8 *addr)
 
 /* Baron move to ieee80211.c */
 int ieee80211_is_empty_essid(const char *essid, int essid_len);
-int ieee80211_get_hdrlen(u16 fc);
 
 /* Action category code */
 enum rtw_ieee80211_category {
-- 
2.10.2



[PATCH 7/7] staging:r8188eu: remove unused definitions from include/ieee80211.h

2017-05-02 Thread Ivan Safonov
Remove unused RTW_IEEE80211_FCTL_*, RTW_IEEE80211_FTYPE_*,
RTW_IEEE80211_STYPE_*, IEEE80211_STATMASK_*, IEEE80211_DEFAULT_*,
BEACON_PROBE_SSID_ID_POSITION, MFIE_TYPE_*, IEEE80211_DTIM_*
and IEEE80211_PS_*.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/include/ieee80211.h | 91 ---
 1 file changed, 91 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/ieee80211.h 
b/drivers/staging/rtl8188eu/include/ieee80211.h
index c82d50c..284db7d 100644
--- a/drivers/staging/rtl8188eu/include/ieee80211.h
+++ b/drivers/staging/rtl8188eu/include/ieee80211.h
@@ -306,59 +306,6 @@ enum eap_type {
 #define MIN_FRAG_THRESHOLD 256U
 #defineMAX_FRAG_THRESHOLD 2346U
 
-/* Frame control field constants */
-#define RTW_IEEE80211_FCTL_VERS0x0003
-#define RTW_IEEE80211_FCTL_MOREFRAGS   0x0400
-#define RTW_IEEE80211_FCTL_RETRY   0x0800
-#define RTW_IEEE80211_FCTL_PM  0x1000
-#define RTW_IEEE80211_FCTL_MOREDATA0x2000
-#define RTW_IEEE80211_FCTL_PROTECTED   0x4000
-#define RTW_IEEE80211_FCTL_ORDER   0x8000
-#define RTW_IEEE80211_FCTL_CTL_EXT 0x0f00
-
-#define RTW_IEEE80211_FTYPE_MGMT   0x
-#define RTW_IEEE80211_FTYPE_EXT0x000c
-
-/* management */
-#define RTW_IEEE80211_STYPE_ASSOC_REQ  0x
-#define RTW_IEEE80211_STYPE_ASSOC_RESP 0x0010
-#define RTW_IEEE80211_STYPE_REASSOC_REQ0x0020
-#define RTW_IEEE80211_STYPE_REASSOC_RESP   0x0030
-#define RTW_IEEE80211_STYPE_PROBE_REQ  0x0040
-#define RTW_IEEE80211_STYPE_PROBE_RESP 0x0050
-#define RTW_IEEE80211_STYPE_BEACON 0x0080
-#define RTW_IEEE80211_STYPE_ATIM   0x0090
-#define RTW_IEEE80211_STYPE_DISASSOC   0x00A0
-#define RTW_IEEE80211_STYPE_AUTH   0x00B0
-#define RTW_IEEE80211_STYPE_DEAUTH 0x00C0
-#define RTW_IEEE80211_STYPE_ACTION 0x00D0
-
-/* control */
-#define RTW_IEEE80211_STYPE_CTL_EXT0x0060
-#define RTW_IEEE80211_STYPE_BACK_REQ   0x0080
-#define RTW_IEEE80211_STYPE_BACK   0x0090
-#define RTW_IEEE80211_STYPE_PSPOLL 0x00A0
-#define RTW_IEEE80211_STYPE_RTS0x00B0
-#define RTW_IEEE80211_STYPE_CFEND  0x00E0
-#define RTW_IEEE80211_STYPE_CFENDACK   0x00F0
-
-/* data */
-#define RTW_IEEE80211_STYPE_DATA   0x
-#define RTW_IEEE80211_STYPE_DATA_CFACK 0x0010
-#define RTW_IEEE80211_STYPE_DATA_CFPOLL0x0020
-#define RTW_IEEE80211_STYPE_DATA_CFACKPOLL 0x0030
-#define RTW_IEEE80211_STYPE_NULLFUNC   0x0040
-#define RTW_IEEE80211_STYPE_CFACK  0x0050
-#define RTW_IEEE80211_STYPE_CFPOLL 0x0060
-#define RTW_IEEE80211_STYPE_CFACKPOLL  0x0070
-#define RTW_IEEE80211_STYPE_QOS_DATA_CFACK 0x0090
-#define RTW_IEEE80211_STYPE_QOS_DATA_CFPOLL0x00A0
-#define RTW_IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0
-#define RTW_IEEE80211_STYPE_QOS_NULLFUNC   0x00C0
-#define RTW_IEEE80211_STYPE_QOS_CFACK  0x00D0
-#define RTW_IEEE80211_STYPE_QOS_CFPOLL 0x00E0
-#define RTW_IEEE80211_STYPE_QOS_CFACKPOLL  0x00F0
-
 /* sequence control field */
 #define RTW_IEEE80211_SCTL_FRAG0x000F
 #define RTW_IEEE80211_SCTL_SEQ 0xFFF0
@@ -411,14 +358,6 @@ struct ieee80211_snap_hdr {
 #define IEEE80211_DATA_HDR3_LEN 24
 #define IEEE80211_DATA_HDR4_LEN 30
 
-
-#define IEEE80211_STATMASK_SIGNAL (1<<0)
-#define IEEE80211_STATMASK_RSSI (1<<1)
-#define IEEE80211_STATMASK_NOISE (1<<2)
-#define IEEE80211_STATMASK_RATE (1<<3)
-#define IEEE80211_STATMASK_WEMASK 0x7
-
-
 #define IEEE80211_CCK_MODULATION(1<<0)
 #define IEEE80211_OFDM_MODULATION   (1<<1)
 
@@ -476,9 +415,6 @@ struct ieee80211_snap_hdr {
IEEE80211_OFDM_RATE_36MB_MASK | \
IEEE80211_OFDM_RATE_48MB_MASK | \
IEEE80211_OFDM_RATE_54MB_MASK)
-#define IEEE80211_DEFAULT_RATES_MASK   \
-   (IEEE80211_OFDM_DEFAULT_RATES_MASK |\
-IEEE80211_CCK_DEFAULT_RATES_MASK)
 
 #define IEEE80211_NUM_OFDM_RATES   8
 #define IEEE80211_NUM_CCK_RATES4
@@ -509,25 +445,6 @@ struct ieee80211_snap_hdr {
 #define WEP_KEYS 4
 #define WEP_KEY_LEN 13
 
-#define BEACON_PROBE_SSID_ID_POSITION 12
-
-/* Management Frame Information Element Types */
-#define MFIE_TYPE_SSID 0
-#define MFIE_TYPE_RATES1
-#define MFIE_TYPE_FH_SET   2
-#define MFIE_TYPE_DS_SET   3
-#define MFIE_TYPE_CF_SET   4
-#define MFIE_TYPE_TIM  5
-#define MFIE_TYPE_IBSS_SET 6
-#define MFIE_TYPE_CHALLENGE16
-#define MFIE_TYPE_ERP  42
-#define MFIE_TYPE_RSN  48
-#define MFIE_TYPE_RATES_EX 50
-#define MFIE_TYPE_GENERIC  221
-
-#define IEEE80211_DEFAULT_TX_ESSID "Penguin"
-#define IEEE80211_DEFAULT_BASIC_RATE 10
-
 /* SWEEP TABLE ENTRIES NUMBER*/
 #define MAX_SWEEP_TAB_ENTRIES42
 #define MAX_SWEEP_TAB_ENTRIES_PER_PACKET  7
@@ -554,14 +471,6 @@ struct ieee80211_sna

[PATCH 5/7] staging:r8188eu: remove ieee80211_get_hdrlen()

2017-05-02 Thread Ivan Safonov
ieee80211_get_hdrlen is unused, remove it and all corresponding code.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 27 --
 drivers/staging/rtl8188eu/include/ieee80211.h  | 13 -
 2 files changed, 40 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c 
b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
index d1dafe0..6fc93fa 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
@@ -972,33 +972,6 @@ int ieee80211_is_empty_essid(const char *essid, int 
essid_len)
return 1;
 }
 
-int ieee80211_get_hdrlen(u16 fc)
-{
-   int hdrlen = 24;
-
-   switch (WLAN_FC_GET_TYPE(fc)) {
-   case RTW_IEEE80211_FTYPE_DATA:
-   if (fc & RTW_IEEE80211_STYPE_QOS_DATA)
-   hdrlen += 2;
-   if ((fc & RTW_IEEE80211_FCTL_FROMDS) && (fc & 
RTW_IEEE80211_FCTL_TODS))
-   hdrlen += 6; /* Addr4 */
-   break;
-   case RTW_IEEE80211_FTYPE_CTL:
-   switch (WLAN_FC_GET_STYPE(fc)) {
-   case RTW_IEEE80211_STYPE_CTS:
-   case RTW_IEEE80211_STYPE_ACK:
-   hdrlen = 10;
-   break;
-   default:
-   hdrlen = 16;
-   break;
-   }
-   break;
-   }
-
-   return hdrlen;
-}
-
 static int rtw_get_cipher_info(struct wlan_network *pnetwork)
 {
uint wpa_ielen;
diff --git a/drivers/staging/rtl8188eu/include/ieee80211.h 
b/drivers/staging/rtl8188eu/include/ieee80211.h
index 22ab0c4..6348fcf 100644
--- a/drivers/staging/rtl8188eu/include/ieee80211.h
+++ b/drivers/staging/rtl8188eu/include/ieee80211.h
@@ -308,10 +308,6 @@ enum eap_type {
 
 /* Frame control field constants */
 #define RTW_IEEE80211_FCTL_VERS0x0003
-#define RTW_IEEE80211_FCTL_FTYPE   0x000c
-#define RTW_IEEE80211_FCTL_STYPE   0x00f0
-#define RTW_IEEE80211_FCTL_TODS0x0100
-#define RTW_IEEE80211_FCTL_FROMDS  0x0200
 #define RTW_IEEE80211_FCTL_MOREFRAGS   0x0400
 #define RTW_IEEE80211_FCTL_RETRY   0x0800
 #define RTW_IEEE80211_FCTL_PM  0x1000
@@ -321,8 +317,6 @@ enum eap_type {
 #define RTW_IEEE80211_FCTL_CTL_EXT 0x0f00
 
 #define RTW_IEEE80211_FTYPE_MGMT   0x
-#define RTW_IEEE80211_FTYPE_CTL0x0004
-#define RTW_IEEE80211_FTYPE_DATA   0x0008
 #define RTW_IEEE80211_FTYPE_EXT0x000c
 
 /* management */
@@ -345,8 +339,6 @@ enum eap_type {
 #define RTW_IEEE80211_STYPE_BACK   0x0090
 #define RTW_IEEE80211_STYPE_PSPOLL 0x00A0
 #define RTW_IEEE80211_STYPE_RTS0x00B0
-#define RTW_IEEE80211_STYPE_CTS0x00C0
-#define RTW_IEEE80211_STYPE_ACK0x00D0
 #define RTW_IEEE80211_STYPE_CFEND  0x00E0
 #define RTW_IEEE80211_STYPE_CFENDACK   0x00F0
 
@@ -359,7 +351,6 @@ enum eap_type {
 #define RTW_IEEE80211_STYPE_CFACK  0x0050
 #define RTW_IEEE80211_STYPE_CFPOLL 0x0060
 #define RTW_IEEE80211_STYPE_CFACKPOLL  0x0070
-#define RTW_IEEE80211_STYPE_QOS_DATA   0x0080
 #define RTW_IEEE80211_STYPE_QOS_DATA_CFACK 0x0090
 #define RTW_IEEE80211_STYPE_QOS_DATA_CFPOLL0x00A0
 #define RTW_IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0
@@ -408,9 +399,6 @@ struct ieee80211_snap_hdr {
 
 #define SNAP_SIZE sizeof(struct ieee80211_snap_hdr)
 
-#define WLAN_FC_GET_TYPE(fc) ((fc) & RTW_IEEE80211_FCTL_FTYPE)
-#define WLAN_FC_GET_STYPE(fc) ((fc) & RTW_IEEE80211_FCTL_STYPE)
-
 #define WLAN_QC_GET_TID(qc) ((qc) & 0x0f)
 
 #define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTW_IEEE80211_SCTL_FRAG)
@@ -646,7 +634,6 @@ static inline int is_broadcast_mac_addr(const u8 *addr)
 
 /* Baron move to ieee80211.c */
 int ieee80211_is_empty_essid(const char *essid, int essid_len);
-int ieee80211_get_hdrlen(u16 fc);
 
 /* Action category code */
 enum rtw_ieee80211_category {
-- 
2.10.2



[PATCH 7/7] staging:r8188eu: remove unused definitions from include/ieee80211.h

2017-05-02 Thread Ivan Safonov
Remove unused RTW_IEEE80211_FCTL_*, RTW_IEEE80211_FTYPE_*,
RTW_IEEE80211_STYPE_*, IEEE80211_STATMASK_*, IEEE80211_DEFAULT_*,
BEACON_PROBE_SSID_ID_POSITION, MFIE_TYPE_*, IEEE80211_DTIM_*
and IEEE80211_PS_*.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/include/ieee80211.h | 91 ---
 1 file changed, 91 deletions(-)

diff --git a/drivers/staging/rtl8188eu/include/ieee80211.h 
b/drivers/staging/rtl8188eu/include/ieee80211.h
index c82d50c..284db7d 100644
--- a/drivers/staging/rtl8188eu/include/ieee80211.h
+++ b/drivers/staging/rtl8188eu/include/ieee80211.h
@@ -306,59 +306,6 @@ enum eap_type {
 #define MIN_FRAG_THRESHOLD 256U
 #defineMAX_FRAG_THRESHOLD 2346U
 
-/* Frame control field constants */
-#define RTW_IEEE80211_FCTL_VERS0x0003
-#define RTW_IEEE80211_FCTL_MOREFRAGS   0x0400
-#define RTW_IEEE80211_FCTL_RETRY   0x0800
-#define RTW_IEEE80211_FCTL_PM  0x1000
-#define RTW_IEEE80211_FCTL_MOREDATA0x2000
-#define RTW_IEEE80211_FCTL_PROTECTED   0x4000
-#define RTW_IEEE80211_FCTL_ORDER   0x8000
-#define RTW_IEEE80211_FCTL_CTL_EXT 0x0f00
-
-#define RTW_IEEE80211_FTYPE_MGMT   0x
-#define RTW_IEEE80211_FTYPE_EXT0x000c
-
-/* management */
-#define RTW_IEEE80211_STYPE_ASSOC_REQ  0x
-#define RTW_IEEE80211_STYPE_ASSOC_RESP 0x0010
-#define RTW_IEEE80211_STYPE_REASSOC_REQ0x0020
-#define RTW_IEEE80211_STYPE_REASSOC_RESP   0x0030
-#define RTW_IEEE80211_STYPE_PROBE_REQ  0x0040
-#define RTW_IEEE80211_STYPE_PROBE_RESP 0x0050
-#define RTW_IEEE80211_STYPE_BEACON 0x0080
-#define RTW_IEEE80211_STYPE_ATIM   0x0090
-#define RTW_IEEE80211_STYPE_DISASSOC   0x00A0
-#define RTW_IEEE80211_STYPE_AUTH   0x00B0
-#define RTW_IEEE80211_STYPE_DEAUTH 0x00C0
-#define RTW_IEEE80211_STYPE_ACTION 0x00D0
-
-/* control */
-#define RTW_IEEE80211_STYPE_CTL_EXT0x0060
-#define RTW_IEEE80211_STYPE_BACK_REQ   0x0080
-#define RTW_IEEE80211_STYPE_BACK   0x0090
-#define RTW_IEEE80211_STYPE_PSPOLL 0x00A0
-#define RTW_IEEE80211_STYPE_RTS0x00B0
-#define RTW_IEEE80211_STYPE_CFEND  0x00E0
-#define RTW_IEEE80211_STYPE_CFENDACK   0x00F0
-
-/* data */
-#define RTW_IEEE80211_STYPE_DATA   0x
-#define RTW_IEEE80211_STYPE_DATA_CFACK 0x0010
-#define RTW_IEEE80211_STYPE_DATA_CFPOLL0x0020
-#define RTW_IEEE80211_STYPE_DATA_CFACKPOLL 0x0030
-#define RTW_IEEE80211_STYPE_NULLFUNC   0x0040
-#define RTW_IEEE80211_STYPE_CFACK  0x0050
-#define RTW_IEEE80211_STYPE_CFPOLL 0x0060
-#define RTW_IEEE80211_STYPE_CFACKPOLL  0x0070
-#define RTW_IEEE80211_STYPE_QOS_DATA_CFACK 0x0090
-#define RTW_IEEE80211_STYPE_QOS_DATA_CFPOLL0x00A0
-#define RTW_IEEE80211_STYPE_QOS_DATA_CFACKPOLL 0x00B0
-#define RTW_IEEE80211_STYPE_QOS_NULLFUNC   0x00C0
-#define RTW_IEEE80211_STYPE_QOS_CFACK  0x00D0
-#define RTW_IEEE80211_STYPE_QOS_CFPOLL 0x00E0
-#define RTW_IEEE80211_STYPE_QOS_CFACKPOLL  0x00F0
-
 /* sequence control field */
 #define RTW_IEEE80211_SCTL_FRAG0x000F
 #define RTW_IEEE80211_SCTL_SEQ 0xFFF0
@@ -411,14 +358,6 @@ struct ieee80211_snap_hdr {
 #define IEEE80211_DATA_HDR3_LEN 24
 #define IEEE80211_DATA_HDR4_LEN 30
 
-
-#define IEEE80211_STATMASK_SIGNAL (1<<0)
-#define IEEE80211_STATMASK_RSSI (1<<1)
-#define IEEE80211_STATMASK_NOISE (1<<2)
-#define IEEE80211_STATMASK_RATE (1<<3)
-#define IEEE80211_STATMASK_WEMASK 0x7
-
-
 #define IEEE80211_CCK_MODULATION(1<<0)
 #define IEEE80211_OFDM_MODULATION   (1<<1)
 
@@ -476,9 +415,6 @@ struct ieee80211_snap_hdr {
IEEE80211_OFDM_RATE_36MB_MASK | \
IEEE80211_OFDM_RATE_48MB_MASK | \
IEEE80211_OFDM_RATE_54MB_MASK)
-#define IEEE80211_DEFAULT_RATES_MASK   \
-   (IEEE80211_OFDM_DEFAULT_RATES_MASK |\
-IEEE80211_CCK_DEFAULT_RATES_MASK)
 
 #define IEEE80211_NUM_OFDM_RATES   8
 #define IEEE80211_NUM_CCK_RATES4
@@ -509,25 +445,6 @@ struct ieee80211_snap_hdr {
 #define WEP_KEYS 4
 #define WEP_KEY_LEN 13
 
-#define BEACON_PROBE_SSID_ID_POSITION 12
-
-/* Management Frame Information Element Types */
-#define MFIE_TYPE_SSID 0
-#define MFIE_TYPE_RATES1
-#define MFIE_TYPE_FH_SET   2
-#define MFIE_TYPE_DS_SET   3
-#define MFIE_TYPE_CF_SET   4
-#define MFIE_TYPE_TIM  5
-#define MFIE_TYPE_IBSS_SET 6
-#define MFIE_TYPE_CHALLENGE16
-#define MFIE_TYPE_ERP  42
-#define MFIE_TYPE_RSN  48
-#define MFIE_TYPE_RATES_EX 50
-#define MFIE_TYPE_GENERIC  221
-
-#define IEEE80211_DEFAULT_TX_ESSID "Penguin"
-#define IEEE80211_DEFAULT_BASIC_RATE 10
-
 /* SWEEP TABLE ENTRIES NUMBER*/
 #define MAX_SWEEP_TAB_ENTRIES42
 #define MAX_SWEEP_TAB_ENTRIES_PER_PACKET  7
@@ -554,14 +471,6 @@ struct ieee80211_snap_hdr {
 #define NETWORK_HAS_OFD

[PATCH 1/7] staging:r8188eu: move IV/ICV trimming into decrypt() and also place it after rtl88eu_mon_recv_hook()

2017-05-02 Thread Ivan Safonov
IV/ICV should be trimmed immediately after decoding
(this is a decryptor job).

Trim IV/ICV inside decrypt() for SW decrypted frames,
for HW decrypted - before rtl88eu_mon_recv_hook().

Adopt frames receive process to work without IV/ICV fields.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/core/rtw_recv.c | 80 ---
 1 file changed, 30 insertions(+), 50 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index c6c4404..e8f0ff9 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -259,12 +259,10 @@ static int recvframe_chkmic(struct adapter *adapter,
}
 
/* icv_len included the mic code */
-   datalen = precvframe->pkt->len-prxattrib->hdrlen -
- prxattrib->iv_len-prxattrib->icv_len-8;
+   datalen = precvframe->pkt->len-prxattrib->hdrlen - 8;
pframe = precvframe->pkt->data;
-   payload = pframe+prxattrib->hdrlen+prxattrib->iv_len;
+   payload = pframe+prxattrib->hdrlen;
 
-   RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("\n 
prxattrib->iv_len=%d prxattrib->icv_len=%d\n", prxattrib->iv_len, 
prxattrib->icv_len));
rtw_seccalctkipmic(mickey, pframe, payload, datalen, 
[0],
   (unsigned char)prxattrib->priority); 
/* care the length of the data */
 
@@ -409,9 +407,15 @@ static struct recv_frame *decryptor(struct adapter 
*padapter,
default:
break;
}
+   if (res != _FAIL) {
+   memmove(precv_frame->pkt->data + 
precv_frame->attrib.iv_len, precv_frame->pkt->data, precv_frame->attrib.hdrlen);
+   skb_pull(precv_frame->pkt, precv_frame->attrib.iv_len);
+   skb_trim(precv_frame->pkt, precv_frame->pkt->len - 
precv_frame->attrib.icv_len);
+   }
} else if (prxattrib->bdecrypted == 1 && prxattrib->encrypt > 0 &&
-  (psecuritypriv->busetkipkey == 1 || prxattrib->encrypt != 
_TKIP_))
-   psecuritypriv->hw_decrypted = true;
+  (psecuritypriv->busetkipkey == 1 || prxattrib->encrypt != 
_TKIP_)) {
+   psecuritypriv->hw_decrypted = true;
+   }
 
if (res == _FAIL) {
rtw_free_recvframe(return_packet, 
>recvpriv.free_recv_queue);
@@ -452,7 +456,7 @@ static struct recv_frame *portctrl(struct adapter *adapter,
 
if (auth_alg == 2) {
/* get ether_type */
-   ptr = ptr + pfhdr->attrib.hdrlen + LLC_HEADER_SIZE + 
pfhdr->attrib.iv_len;
+   ptr = ptr + pfhdr->attrib.hdrlen + LLC_HEADER_SIZE;
memcpy(_tmp, ptr, 2);
ether_type = ntohs(be_tmp);
 
@@ -1263,6 +1267,13 @@ static int validate_recv_frame(struct adapter *adapter,
 */
rtl88eu_mon_recv_hook(adapter->pmondev, precv_frame);
 
+   if (precv_frame->attrib.bdecrypted == 1 && precv_frame->attrib.encrypt 
> 0 &&
+   (adapter->securitypriv.busetkipkey == 1 || 
precv_frame->attrib.encrypt != _TKIP_)) {
+   memmove(precv_frame->pkt->data + precv_frame->attrib.iv_len, 
precv_frame->pkt->data, precv_frame->attrib.hdrlen);
+   skb_pull(precv_frame->pkt, precv_frame->attrib.iv_len);
+   skb_trim(precv_frame->pkt, precv_frame->pkt->len - 
precv_frame->attrib.icv_len);
+   }
+
 exit:
 
return retval;
@@ -1282,11 +1293,8 @@ static int wlanhdr_to_ethhdr(struct recv_frame 
*precvframe)
u8 *ptr = precvframe->pkt->data;
struct rx_pkt_attrib *pattrib = >attrib;
 
-   if (pattrib->encrypt)
-   skb_trim(precvframe->pkt, precvframe->pkt->len - 
pattrib->icv_len);
-
-   psnap = (struct ieee80211_snap_hdr *)(ptr+pattrib->hdrlen + 
pattrib->iv_len);
-   psnap_type = ptr+pattrib->hdrlen + pattrib->iv_len+SNAP_SIZE;
+   psnap = (struct ieee80211_snap_hdr *)(ptr+pattrib->hdrlen);
+   psnap_type = ptr+pattrib->hdrlen + SNAP_SIZE;
/* convert hdr + possible LLC headers into Ethernet header */
if ((!memcmp(psnap, rtw_rfc1042_header, SNAP_SIZE) &&
 (!memcmp(psnap_type, SNAP_ETH_TYPE_IPX, 2) == false) &&
@@ -1299,12 +1307,9 @@ static int wlanhdr_to_ethhdr(struct recv_frame 
*precvframe)
bsnaphdr = false;
}
 
-   rmv_len = pattrib->hdrlen + pattrib->iv_len + (bsnaphdr ? SNAP_SIZE : 
0);
+   r

[PATCH 1/7] staging:r8188eu: move IV/ICV trimming into decrypt() and also place it after rtl88eu_mon_recv_hook()

2017-05-02 Thread Ivan Safonov
IV/ICV should be trimmed immediately after decoding
(this is a decryptor job).

Trim IV/ICV inside decrypt() for SW decrypted frames,
for HW decrypted - before rtl88eu_mon_recv_hook().

Adopt frames receive process to work without IV/ICV fields.

Signed-off-by: Ivan Safonov 
---
 drivers/staging/rtl8188eu/core/rtw_recv.c | 80 ---
 1 file changed, 30 insertions(+), 50 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index c6c4404..e8f0ff9 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -259,12 +259,10 @@ static int recvframe_chkmic(struct adapter *adapter,
}
 
/* icv_len included the mic code */
-   datalen = precvframe->pkt->len-prxattrib->hdrlen -
- prxattrib->iv_len-prxattrib->icv_len-8;
+   datalen = precvframe->pkt->len-prxattrib->hdrlen - 8;
pframe = precvframe->pkt->data;
-   payload = pframe+prxattrib->hdrlen+prxattrib->iv_len;
+   payload = pframe+prxattrib->hdrlen;
 
-   RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("\n 
prxattrib->iv_len=%d prxattrib->icv_len=%d\n", prxattrib->iv_len, 
prxattrib->icv_len));
rtw_seccalctkipmic(mickey, pframe, payload, datalen, 
[0],
   (unsigned char)prxattrib->priority); 
/* care the length of the data */
 
@@ -409,9 +407,15 @@ static struct recv_frame *decryptor(struct adapter 
*padapter,
default:
break;
}
+   if (res != _FAIL) {
+   memmove(precv_frame->pkt->data + 
precv_frame->attrib.iv_len, precv_frame->pkt->data, precv_frame->attrib.hdrlen);
+   skb_pull(precv_frame->pkt, precv_frame->attrib.iv_len);
+   skb_trim(precv_frame->pkt, precv_frame->pkt->len - 
precv_frame->attrib.icv_len);
+   }
} else if (prxattrib->bdecrypted == 1 && prxattrib->encrypt > 0 &&
-  (psecuritypriv->busetkipkey == 1 || prxattrib->encrypt != 
_TKIP_))
-   psecuritypriv->hw_decrypted = true;
+  (psecuritypriv->busetkipkey == 1 || prxattrib->encrypt != 
_TKIP_)) {
+   psecuritypriv->hw_decrypted = true;
+   }
 
if (res == _FAIL) {
rtw_free_recvframe(return_packet, 
>recvpriv.free_recv_queue);
@@ -452,7 +456,7 @@ static struct recv_frame *portctrl(struct adapter *adapter,
 
if (auth_alg == 2) {
/* get ether_type */
-   ptr = ptr + pfhdr->attrib.hdrlen + LLC_HEADER_SIZE + 
pfhdr->attrib.iv_len;
+   ptr = ptr + pfhdr->attrib.hdrlen + LLC_HEADER_SIZE;
memcpy(_tmp, ptr, 2);
ether_type = ntohs(be_tmp);
 
@@ -1263,6 +1267,13 @@ static int validate_recv_frame(struct adapter *adapter,
 */
rtl88eu_mon_recv_hook(adapter->pmondev, precv_frame);
 
+   if (precv_frame->attrib.bdecrypted == 1 && precv_frame->attrib.encrypt 
> 0 &&
+   (adapter->securitypriv.busetkipkey == 1 || 
precv_frame->attrib.encrypt != _TKIP_)) {
+   memmove(precv_frame->pkt->data + precv_frame->attrib.iv_len, 
precv_frame->pkt->data, precv_frame->attrib.hdrlen);
+   skb_pull(precv_frame->pkt, precv_frame->attrib.iv_len);
+   skb_trim(precv_frame->pkt, precv_frame->pkt->len - 
precv_frame->attrib.icv_len);
+   }
+
 exit:
 
return retval;
@@ -1282,11 +1293,8 @@ static int wlanhdr_to_ethhdr(struct recv_frame 
*precvframe)
u8 *ptr = precvframe->pkt->data;
struct rx_pkt_attrib *pattrib = >attrib;
 
-   if (pattrib->encrypt)
-   skb_trim(precvframe->pkt, precvframe->pkt->len - 
pattrib->icv_len);
-
-   psnap = (struct ieee80211_snap_hdr *)(ptr+pattrib->hdrlen + 
pattrib->iv_len);
-   psnap_type = ptr+pattrib->hdrlen + pattrib->iv_len+SNAP_SIZE;
+   psnap = (struct ieee80211_snap_hdr *)(ptr+pattrib->hdrlen);
+   psnap_type = ptr+pattrib->hdrlen + SNAP_SIZE;
/* convert hdr + possible LLC headers into Ethernet header */
if ((!memcmp(psnap, rtw_rfc1042_header, SNAP_SIZE) &&
 (!memcmp(psnap_type, SNAP_ETH_TYPE_IPX, 2) == false) &&
@@ -1299,12 +1307,9 @@ static int wlanhdr_to_ethhdr(struct recv_frame 
*precvframe)
bsnaphdr = false;
}
 
-   rmv_len = pattrib->hdrlen + pattrib->iv_len + (bsnaphdr ? SNAP_SIZE : 
0);
+   rmv_len = pattrib-

[PATCH 4/7] staging:r8188eu: trim IV/ICV fields in validate_recv_data_frame()

2017-05-02 Thread Ivan Safonov
Length of IV/ICV fields calculated here, so trim these field here too.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/core/rtw_recv.c | 17 ++---
 drivers/staging/rtl8188eu/os_dep/mon.c| 19 ---
 2 files changed, 14 insertions(+), 22 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_recv.c 
b/drivers/staging/rtl8188eu/core/rtw_recv.c
index e8f0ff9..2c37bb5 100644
--- a/drivers/staging/rtl8188eu/core/rtw_recv.c
+++ b/drivers/staging/rtl8188eu/core/rtw_recv.c
@@ -1138,6 +1138,8 @@ static int validate_recv_data_frame(struct adapter 
*adapter,
}
 
if (pattrib->privacy) {
+   struct sk_buff *skb = precv_frame->pkt;
+
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, 
("validate_recv_data_frame:pattrib->privacy=%x\n", pattrib->privacy));
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("\n 
^^^IS_MCAST(pattrib->ra(0x%02x))=%d^^^6\n", pattrib->ra[0], 
IS_MCAST(pattrib->ra)));
 
@@ -1146,6 +1148,13 @@ static int validate_recv_data_frame(struct adapter 
*adapter,
RT_TRACE(_module_rtl871x_recv_c_, _drv_info_, ("\n 
pattrib->encrypt=%d\n", pattrib->encrypt));
 
SET_ICE_IV_LEN(pattrib->iv_len, pattrib->icv_len, 
pattrib->encrypt);
+
+   if (pattrib->bdecrypted == 1 && pattrib->encrypt > 0) {
+   memmove(skb->data + pattrib->iv_len,
+   skb->data, pattrib->hdrlen);
+   skb_pull(skb, pattrib->iv_len);
+   skb_trim(skb, skb->len - pattrib->icv_len);
+   }
} else {
pattrib->encrypt = 0;
pattrib->iv_len = 0;
@@ -1265,14 +1274,8 @@ static int validate_recv_frame(struct adapter *adapter,
 * Hence forward the frame to the monitor anyway to preserve the order
 * in which frames were received.
 */
-   rtl88eu_mon_recv_hook(adapter->pmondev, precv_frame);
 
-   if (precv_frame->attrib.bdecrypted == 1 && precv_frame->attrib.encrypt 
> 0 &&
-   (adapter->securitypriv.busetkipkey == 1 || 
precv_frame->attrib.encrypt != _TKIP_)) {
-   memmove(precv_frame->pkt->data + precv_frame->attrib.iv_len, 
precv_frame->pkt->data, precv_frame->attrib.hdrlen);
-   skb_pull(precv_frame->pkt, precv_frame->attrib.iv_len);
-   skb_trim(precv_frame->pkt, precv_frame->pkt->len - 
precv_frame->attrib.icv_len);
-   }
+   rtl88eu_mon_recv_hook(adapter->pmondev, precv_frame);
 
 exit:
 
diff --git a/drivers/staging/rtl8188eu/os_dep/mon.c 
b/drivers/staging/rtl8188eu/os_dep/mon.c
index 53f853f..ed39661 100644
--- a/drivers/staging/rtl8188eu/os_dep/mon.c
+++ b/drivers/staging/rtl8188eu/os_dep/mon.c
@@ -67,7 +67,7 @@ static void mon_recv_decrypted(struct net_device *dev, const 
u8 *data,
 }
 
 static void mon_recv_decrypted_recv(struct net_device *dev, const u8 *data,
-  int data_len, int iv_len, int icv_len)
+   int data_len)
 {
struct sk_buff *skb;
struct ieee80211_hdr *hdr;
@@ -86,15 +86,8 @@ static void mon_recv_decrypted_recv(struct net_device *dev, 
const u8 *data,
hdr = (struct ieee80211_hdr *)skb->data;
hdr_len = ieee80211_hdrlen(hdr->frame_control);
 
-   if (skb->len < hdr_len + iv_len + icv_len) {
-   if (ieee80211_has_protected(hdr->frame_control)) {
-   hdr->frame_control &= 
~cpu_to_le16(IEEE80211_FCTL_PROTECTED);
-
-   memmove(skb->data + iv_len, skb->data, hdr_len);
-   skb_pull(skb, iv_len);
-   skb_trim(skb, skb->len - icv_len);
-   }
-   }
+   if (ieee80211_has_protected(hdr->frame_control))
+   hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_PROTECTED);
 
skb->ip_summed = CHECKSUM_UNNECESSARY;
skb->protocol = eth_type_trans(skb, dev);
@@ -117,7 +110,6 @@ static void mon_recv_encrypted(struct net_device *dev, 
const u8 *data,
 void rtl88eu_mon_recv_hook(struct net_device *dev, struct recv_frame *frame)
 {
struct rx_pkt_attrib *attr;
-   int iv_len, icv_len;
int data_len;
u8 *data;
 
@@ -130,11 +122,8 @@ void rtl88eu_mon_recv_hook(struct net_device *dev, struct 
recv_frame *frame)
data = frame->pkt->data;
data_len = frame->pkt->len;
 
-   /* Broadcast and multicast frames don't have attr->{iv,icv}_len set */
-   SET_ICE_IV_LEN(iv_len, icv_len, attr->encrypt);
-
if (attr->bdecrypted)
-   mon_recv_decrypted_recv(dev, data, data_len, iv_len, icv_len);
+   mon_recv_decrypted_recv(dev, data, data_len);
else
mon_recv_encrypted(dev, data, data_len);
 }
-- 
2.10.2



[PATCH 3/7] staging:r8188eu: inline unprotect_frame() in mon_recv_decrypted_recv()

2017-05-02 Thread Ivan Safonov
It is useful to remove IV/ICV from rtl88eu_mon_recv_hook().
Also unprotect_frame() will be very short without skb_(pull|trim).

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/os_dep/mon.c | 16 +++-
 1 file changed, 15 insertions(+), 1 deletion(-)

diff --git a/drivers/staging/rtl8188eu/os_dep/mon.c 
b/drivers/staging/rtl8188eu/os_dep/mon.c
index 7eac87d..53f853f 100644
--- a/drivers/staging/rtl8188eu/os_dep/mon.c
+++ b/drivers/staging/rtl8188eu/os_dep/mon.c
@@ -70,6 +70,8 @@ static void mon_recv_decrypted_recv(struct net_device *dev, 
const u8 *data,
   int data_len, int iv_len, int icv_len)
 {
struct sk_buff *skb;
+   struct ieee80211_hdr *hdr;
+   int hdr_len;
 
skb = netdev_alloc_skb(dev, data_len);
if (!skb)
@@ -80,7 +82,19 @@ static void mon_recv_decrypted_recv(struct net_device *dev, 
const u8 *data,
 * Frame data is not encrypted. Strip off protection so
 * userspace doesn't think that it is.
 */
-   unprotect_frame(skb, iv_len, icv_len);
+
+   hdr = (struct ieee80211_hdr *)skb->data;
+   hdr_len = ieee80211_hdrlen(hdr->frame_control);
+
+   if (skb->len < hdr_len + iv_len + icv_len) {
+   if (ieee80211_has_protected(hdr->frame_control)) {
+   hdr->frame_control &= 
~cpu_to_le16(IEEE80211_FCTL_PROTECTED);
+
+   memmove(skb->data + iv_len, skb->data, hdr_len);
+   skb_pull(skb, iv_len);
+   skb_trim(skb, skb->len - icv_len);
+   }
+   }
 
skb->ip_summed = CHECKSUM_UNNECESSARY;
skb->protocol = eth_type_trans(skb, dev);
-- 
2.10.2



[PATCH 6/7] staging:r8188eu: remove ieee80211_is_empty_essid()

2017-05-02 Thread Ivan Safonov
ieee80211_is_empty_essid() is unused, remove it.

Signed-off-by: Ivan Safonov <insafo...@gmail.com>
---
 drivers/staging/rtl8188eu/core/rtw_ieee80211.c | 17 -
 drivers/staging/rtl8188eu/include/ieee80211.h  |  3 ---
 2 files changed, 20 deletions(-)

diff --git a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c 
b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
index 6fc93fa..bb867a9 100644
--- a/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
+++ b/drivers/staging/rtl8188eu/core/rtw_ieee80211.c
@@ -955,23 +955,6 @@ void rtw_macaddr_cfg(u8 *mac_addr)
DBG_88E("rtw_macaddr_cfg MAC Address  = %pM\n", (mac_addr));
 }
 
-/* Baron adds to avoid FreeBSD warning */
-int ieee80211_is_empty_essid(const char *essid, int essid_len)
-{
-   /* Single white space is for Linksys APs */
-   if (essid_len == 1 && essid[0] == ' ')
-   return 1;
-
-   /* Otherwise, if the entire essid is 0, we assume it is hidden */
-   while (essid_len) {
-   essid_len--;
-   if (essid[essid_len] != '\0')
-   return 0;
-   }
-
-   return 1;
-}
-
 static int rtw_get_cipher_info(struct wlan_network *pnetwork)
 {
uint wpa_ielen;
diff --git a/drivers/staging/rtl8188eu/include/ieee80211.h 
b/drivers/staging/rtl8188eu/include/ieee80211.h
index 6348fcf..c82d50c 100644
--- a/drivers/staging/rtl8188eu/include/ieee80211.h
+++ b/drivers/staging/rtl8188eu/include/ieee80211.h
@@ -632,9 +632,6 @@ static inline int is_broadcast_mac_addr(const u8 *addr)
 #define IEEE_G (1<<2)
 #define IEEE_MODE_MASK(IEEE_A|IEEE_B|IEEE_G)
 
-/* Baron move to ieee80211.c */
-int ieee80211_is_empty_essid(const char *essid, int essid_len);
-
 /* Action category code */
 enum rtw_ieee80211_category {
RTW_WLAN_CATEGORY_SPECTRUM_MGMT = 0,
-- 
2.10.2



  1   2   3   4   5   6   7   8   >