diff options
author | Álvaro Fernández Rojas <noltari@gmail.com> | 2017-02-07 21:07:54 +0100 |
---|---|---|
committer | Álvaro Fernández Rojas <noltari@gmail.com> | 2017-02-07 23:00:16 +0100 |
commit | 96aa0c6b0b179518e0c228362ea55f1c7793bb3a (patch) | |
tree | 3244114239a7bbf380ee9fa76680b55e459e06c0 /target/linux/brcm2708/patches-4.9/0090-net-Fix-rtl8192cu-build-errors-on-other-platforms.patch | |
parent | 6b5c3fd055f64ce0f9d111820123caf33632a51f (diff) | |
download | mtk-20170518-96aa0c6b0b179518e0c228362ea55f1c7793bb3a.zip mtk-20170518-96aa0c6b0b179518e0c228362ea55f1c7793bb3a.tar.gz mtk-20170518-96aa0c6b0b179518e0c228362ea55f1c7793bb3a.tar.bz2 |
brcm2708: add linux 4.9 support
Patches from Raspberry Pi repo:
https://github.com/raspberrypi/linux/commits/rpi-4.9.y
Signed-off-by: Álvaro Fernández Rojas <noltari@gmail.com>
Diffstat (limited to 'target/linux/brcm2708/patches-4.9/0090-net-Fix-rtl8192cu-build-errors-on-other-platforms.patch')
-rw-r--r-- | target/linux/brcm2708/patches-4.9/0090-net-Fix-rtl8192cu-build-errors-on-other-platforms.patch | 1125 |
1 files changed, 1125 insertions, 0 deletions
diff --git a/target/linux/brcm2708/patches-4.9/0090-net-Fix-rtl8192cu-build-errors-on-other-platforms.patch b/target/linux/brcm2708/patches-4.9/0090-net-Fix-rtl8192cu-build-errors-on-other-platforms.patch new file mode 100644 index 0000000..b56ab20 --- /dev/null +++ b/target/linux/brcm2708/patches-4.9/0090-net-Fix-rtl8192cu-build-errors-on-other-platforms.patch @@ -0,0 +1,1125 @@ +From 911b758ea2b7741fdc71ab47685d55d0a6452c72 Mon Sep 17 00:00:00 2001 +From: Phil Elwell <phil@raspberrypi.org> +Date: Wed, 23 Mar 2016 17:20:58 +0000 +Subject: [PATCH] net: Fix rtl8192cu build errors on other platforms + +Signed-off-by: Phil Elwell <phil@raspberrypi.org> + +suppress spurious messages + +Add #if for 3.14 kernel change (#87) + +Fixes compiling after changes in https://github.com/torvalds/linux/commit/f663dd9aaf9ed124f25f0f8452edf238f087ad50 and https://github.com/torvalds/linux/commit/99932d4fc03a13bb3e94938fe25458fabc8f2fc3 + +Fixes #86 + +Set dev_type to wlan + +Fixes #23 + +Tentatively added support for more 8188CUS based devices. + +Add support for more 8188CUS and 8192CUS devices + +Add ProductId for the Netgear N150 - WNA1000M + +Fixes CONFIG_CONCURRENT_MODE CONFIG_MULTI_VIR_IFACES + +Fixes compatibility with 3.13 + +Enables warning in the compiler and fixes some issues, reference => https://github.com/diederikdehaas/rtl8812AU + +Starts device in station mode instead of monitor, fixes NetworkManager issues + +Enable cfg80211 support + +Fix cfg80211 for kernel >= 4.7 + +Fixes rtl8192cu for kernel >= 4.8 +--- + drivers/net/wireless/realtek/rtl8192cu/Makefile | 20 ++- + .../net/wireless/realtek/rtl8192cu/core/rtw_ap.c | 7 +- + .../realtek/rtl8192cu/core/rtw_ieee80211.c | 3 +- + .../realtek/rtl8192cu/core/rtw_ioctl_set.c | 5 +- + .../wireless/realtek/rtl8192cu/core/rtw_mlme_ext.c | 8 +- + .../net/wireless/realtek/rtl8192cu/core/rtw_p2p.c | 6 +- + .../net/wireless/realtek/rtl8192cu/core/rtw_recv.c | 7 +- + .../wireless/realtek/rtl8192cu/core/rtw_sta_mgt.c | 4 +- + .../realtek/rtl8192cu/core/rtw_wlan_util.c | 2 +- + .../net/wireless/realtek/rtl8192cu/core/rtw_xmit.c | 2 +- + .../rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c | 4 +- + .../wireless/realtek/rtl8192cu/include/autoconf.h | 9 +- + .../realtek/rtl8192cu/include/ioctl_cfg80211.h | 9 +- + .../realtek/rtl8192cu/include/osdep_service.h | 4 +- + .../wireless/realtek/rtl8192cu/include/rtw_debug.h | 6 +- + .../realtek/rtl8192cu/include/rtw_ioctl_set.h | 5 +- + .../wireless/realtek/rtl8192cu/include/sta_info.h | 4 +- + .../net/wireless/realtek/rtl8192cu/include/wifi.h | 2 +- + .../rtl8192cu/os_dep/linux/ioctl_cfg80211.c | 176 ++++++++++++++------- + .../realtek/rtl8192cu/os_dep/linux/ioctl_linux.c | 3 +- + .../realtek/rtl8192cu/os_dep/linux/os_intfs.c | 18 ++- + .../realtek/rtl8192cu/os_dep/linux/recv_linux.c | 2 +- + .../realtek/rtl8192cu/os_dep/linux/rtw_android.c | 6 - + .../realtek/rtl8192cu/os_dep/linux/usb_intf.c | 9 +- + .../realtek/rtl8192cu/os_dep/osdep_service.c | 4 +- + 25 files changed, 214 insertions(+), 111 deletions(-) + +--- a/drivers/net/wireless/realtek/rtl8192cu/Makefile ++++ b/drivers/net/wireless/realtek/rtl8192cu/Makefile +@@ -1,12 +1,20 @@ + EXTRA_CFLAGS += $(USER_EXTRA_CFLAGS) + EXTRA_CFLAGS += -O1 + #EXTRA_CFLAGS += -O3 +-#EXTRA_CFLAGS += -Wall +-#EXTRA_CFLAGS += -Wextra ++EXTRA_CFLAGS += -Wall ++EXTRA_CFLAGS += -Wextra + #EXTRA_CFLAGS += -Werror + #EXTRA_CFLAGS += -pedantic + #EXTRA_CFLAGS += -Wshadow -Wpointer-arith -Wcast-qual -Wstrict-prototypes -Wmissing-prototypes + ++# The "$(call cc-option,-Wxxx)" macro only includes that option when it's ++# supported by the compiler used. It may only work on Debian systems. ++ ++# Wdate-time was added in gcc-4.9 ++EXTRA_CFLAGS += $(call cc-option,-Werror=date-time) ++# Wincompatible-pointer-types was added in gcc-5.0 ++EXTRA_CFLAGS += $(call cc-option,-Werror=incompatible-pointer-types) ++ + EXTRA_CFLAGS += -Wno-unused-variable + EXTRA_CFLAGS += -Wno-unused-value + EXTRA_CFLAGS += -Wno-unused-label +@@ -14,10 +22,16 @@ EXTRA_CFLAGS += -Wno-unused-parameter + EXTRA_CFLAGS += -Wno-unused-function + EXTRA_CFLAGS += -Wno-unused + +-EXTRA_CFLAGS += -Wno-uninitialized ++# Relax some warnings from '-Wextra' so we won't get flooded with warnings ++EXTRA_CFLAGS += -Wno-sign-compare ++EXTRA_CFLAGS += -Wno-missing-field-initializers ++ ++#EXTRA_CFLAGS += -Wno-uninitialized + + EXTRA_CFLAGS += -I$(src)/include + ++EXTRA_LDFLAGS += --strip-debug ++ + CONFIG_AUTOCFG_CP = n + + CONFIG_RTL8192C = y +--- a/drivers/net/wireless/realtek/rtl8192cu/core/rtw_ap.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/core/rtw_ap.c +@@ -210,7 +210,7 @@ void rtw_add_bcn_ie(_adapter *padapter, + PNDIS_802_11_VARIABLE_IEs pIE; + u8 bmatch = _FALSE; + u8 *pie = pnetwork->IEs; +- u8 *p, *dst_ie, *premainder_ie=NULL, *pbackup_remainder_ie=NULL; ++ u8 *p=NULL, *dst_ie=NULL, *premainder_ie=NULL, *pbackup_remainder_ie=NULL; + u32 i, offset, ielen, ie_offset, remainder_ielen = 0; + + for (i = sizeof(NDIS_802_11_FIXED_IEs); i < pnetwork->IELength;) +@@ -250,6 +250,9 @@ void rtw_add_bcn_ie(_adapter *padapter, + dst_ie = (p+ielen); + } + ++ if(dst_ie == NULL) ++ return; ++ + if(remainder_ielen>0) + { + pbackup_remainder_ie = rtw_malloc(remainder_ielen); +@@ -357,7 +360,7 @@ void expire_timeout_chk(_adapter *padapt + { + _irqL irqL; + _list *phead, *plist; +- u8 updated; ++ u8 updated = _FALSE; + struct sta_info *psta=NULL; + struct sta_priv *pstapriv = &padapter->stapriv; + u8 chk_alive_num = 0; +--- a/drivers/net/wireless/realtek/rtl8192cu/core/rtw_ieee80211.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/core/rtw_ieee80211.c +@@ -1859,7 +1859,8 @@ int rtw_action_frame_parse(const u8 *fra + { + const u8 *frame_body = frame + sizeof(struct rtw_ieee80211_hdr_3addr); + u16 fc; +- u8 c, a; ++ u8 c; ++ u8 a = ACT_PUBLIC_MAX; + + fc = le16_to_cpu(((struct rtw_ieee80211_hdr_3addr *)frame)->frame_ctl); + +--- a/drivers/net/wireless/realtek/rtl8192cu/core/rtw_ioctl_set.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/core/rtw_ioctl_set.c +@@ -43,7 +43,7 @@ extern void indicate_wx_scan_complete_ev + (addr[4] == 0xff) && (addr[5] == 0xff) ) ? _TRUE : _FALSE \ + ) + +-u8 rtw_validate_bssid(u8 *bssid) ++u8 rtw_validate_bssid(const u8 *bssid) + { + u8 ret = _TRUE; + +@@ -535,7 +535,8 @@ _func_exit_; + + } + +-u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid) ++u8 rtw_set_802_11_connect(_adapter *padapter, const u8 *bssid ++ , NDIS_802_11_SSID *ssid) + { + _irqL irqL; + u8 status = _SUCCESS; +--- a/drivers/net/wireless/realtek/rtl8192cu/core/rtw_mlme_ext.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/core/rtw_mlme_ext.c +@@ -2454,7 +2454,7 @@ unsigned int OnDeAuth(_adapter *padapter + psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe)); + if(psta) + { +- u8 updated; ++ u8 updated = _FALSE; + + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL); + if(rtw_is_list_empty(&psta->asoc_list)==_FALSE) +@@ -2548,7 +2548,7 @@ unsigned int OnDisassoc(_adapter *padapt + psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe)); + if(psta) + { +- u8 updated; ++ u8 updated = _FALSE; + + _enter_critical_bh(&pstapriv->asoc_list_lock, &irqL); + if(rtw_is_list_empty(&psta->asoc_list)==_FALSE) +@@ -5663,7 +5663,7 @@ unsigned int on_action_public_p2p(union + + // Commented by Kurt 20120113 + // Get peer_dev_addr here if peer doesn't issue prov_disc frame. +- if( _rtw_memcmp(pwdinfo->rx_prov_disc_info.peerDevAddr, empty_addr, ETH_ALEN) ); ++ if( _rtw_memcmp(pwdinfo->rx_prov_disc_info.peerDevAddr, empty_addr, ETH_ALEN) ) + _rtw_memcpy(pwdinfo->rx_prov_disc_info.peerDevAddr, GetAddr2Ptr(pframe), ETH_ALEN); + + result = process_p2p_group_negotation_req( pwdinfo, frame_body, len ); +@@ -11932,7 +11932,7 @@ u8 setkey_hdl(_adapter *padapter, u8 *pb + u8 set_stakey_hdl(_adapter *padapter, u8 *pbuf) + { + u16 ctrl=0; +- u8 cam_id;//cam_entry ++ u8 cam_id=0;//cam_entry + struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); + struct set_stakey_parm *pparm = (struct set_stakey_parm *)pbuf; +--- a/drivers/net/wireless/realtek/rtl8192cu/core/rtw_p2p.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/core/rtw_p2p.c +@@ -4896,9 +4896,9 @@ void init_wifidirect_info( _adapter* pad + #endif + #ifdef CONFIG_CONCURRENT_MODE + _adapter *pbuddy_adapter = padapter->pbuddy_adapter; +- struct wifidirect_info *pbuddy_wdinfo; +- struct mlme_priv *pbuddy_mlmepriv; +- struct mlme_ext_priv *pbuddy_mlmeext; ++ struct wifidirect_info *pbuddy_wdinfo = NULL; ++ struct mlme_priv *pbuddy_mlmepriv = NULL; ++ struct mlme_ext_priv *pbuddy_mlmeext = NULL; + #endif + + pwdinfo = &padapter->wdinfo; +--- a/drivers/net/wireless/realtek/rtl8192cu/core/rtw_recv.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/core/rtw_recv.c +@@ -3894,7 +3894,7 @@ int process_recv_indicatepkts(_adapter * + + } + +-int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe) ++static int recv_func_prehandle(_adapter *padapter, union recv_frame *rframe) + { + int ret = _SUCCESS; + struct rx_pkt_attrib *pattrib = &rframe->u.hdr.attrib; +@@ -3935,7 +3935,7 @@ exit: + return ret; + } + +-int recv_func_posthandle(_adapter *padapter, union recv_frame *prframe) ++static int recv_func_posthandle(_adapter *padapter, union recv_frame *prframe) + { + int ret = _SUCCESS; + union recv_frame *orig_prframe = prframe; +@@ -4107,8 +4107,7 @@ _recv_data_drop: + } + + +-int recv_func(_adapter *padapter, union recv_frame *rframe); +-int recv_func(_adapter *padapter, union recv_frame *rframe) ++static int recv_func(_adapter *padapter, union recv_frame *rframe) + { + int ret; + struct rx_pkt_attrib *prxattrib = &rframe->u.hdr.attrib; +--- a/drivers/net/wireless/realtek/rtl8192cu/core/rtw_sta_mgt.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/core/rtw_sta_mgt.c +@@ -685,7 +685,7 @@ _func_exit_; + } + + /* any station allocated can be searched by hash list */ +-struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr) ++struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, const u8 *hwaddr) + { + + _irqL irqL; +@@ -696,7 +696,7 @@ struct sta_info *rtw_get_stainfo(struct + + u32 index; + +- u8 *addr; ++ const u8 *addr; + + u8 bc_addr[ETH_ALEN] = {0xff,0xff,0xff,0xff,0xff,0xff}; + +--- a/drivers/net/wireless/realtek/rtl8192cu/core/rtw_wlan_util.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/core/rtw_wlan_util.c +@@ -853,7 +853,7 @@ void flush_all_cam_entry(_adapter *padap + { + struct sta_priv *pstapriv = &padapter->stapriv; + struct sta_info *psta; +- u8 cam_id;//cam_entry ++ u8 cam_id=0;//cam_entry + + psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.MacAddress); + if(psta) { +--- a/drivers/net/wireless/realtek/rtl8192cu/core/rtw_xmit.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/core/rtw_xmit.c +@@ -2590,7 +2590,7 @@ exit: + s32 rtw_free_xmitframe(struct xmit_priv *pxmitpriv, struct xmit_frame *pxmitframe) + { + _irqL irqL; +- _queue *queue; ++ _queue *queue = NULL; + _adapter *padapter = pxmitpriv->adapter; + _pkt *pndis_pkt = NULL; + +--- a/drivers/net/wireless/realtek/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/hal/rtl8192c/rtl8192c_rf6052.c +@@ -373,7 +373,7 @@ static void getTxPowerWriteValByRegulato + { + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); + struct dm_priv *pdmpriv = &pHalData->dmpriv; +- u8 i, chnlGroup, pwr_diff_limit[4]; ++ u8 i, chnlGroup = 0, pwr_diff_limit[4]; + u32 writeVal, customer_limit, rf; + + // +@@ -615,7 +615,7 @@ phy_RF6052_Config_ParaFile( + IN PADAPTER Adapter + ) + { +- u32 u4RegValue; ++ u32 u4RegValue=0; + u8 eRFPath; + BB_REGISTER_DEFINITION_T *pPhyReg; + +--- a/drivers/net/wireless/realtek/rtl8192cu/include/autoconf.h ++++ b/drivers/net/wireless/realtek/rtl8192cu/include/autoconf.h +@@ -31,10 +31,11 @@ + + #define PLATFORM_LINUX 1 + +-//#define CONFIG_IOCTL_CFG80211 1 ++#define CONFIG_IOCTL_CFG80211 1 + #ifdef CONFIG_IOCTL_CFG80211 +- //#define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */ +- #define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER ++ /* Indicate new sta asoc through cfg80211_new_sta */ ++ #define RTW_USE_CFG80211_STA_EVENT ++ /*#define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER*/ + //#define CONFIG_DEBUG_CFG80211 1 + //#define CONFIG_DRV_ISSUE_PROV_REQ // IOT FOR S2 + #define CONFIG_SET_SCAN_DENY_TIMER +@@ -324,7 +325,7 @@ + + //#define DBG_MEMORY_LEAK 1 + +-#define DBG_CONFIG_ERROR_DETECT ++/*#define DBG_CONFIG_ERROR_DETECT*/ + //#define DBG_CONFIG_ERROR_RESET + + //TX use 1 urb +--- a/drivers/net/wireless/realtek/rtl8192cu/include/ioctl_cfg80211.h ++++ b/drivers/net/wireless/realtek/rtl8192cu/include/ioctl_cfg80211.h +@@ -149,8 +149,15 @@ bool rtw_cfg80211_pwr_mgmt(_adapter *ada + #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, buf, len, gfp) + #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)) + #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, sig_dbm, buf, len, gfp) +-#else ++#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0)) + #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, gfp) ++#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,18,0)) ++/* 3.12 added a flags argument which is just set to zero*/ ++#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) \ ++ cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, 0, gfp) ++#else ++#define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) \ ++ cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, 0) + #endif + + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE) +--- a/drivers/net/wireless/realtek/rtl8192cu/include/osdep_service.h ++++ b/drivers/net/wireless/realtek/rtl8192cu/include/osdep_service.h +@@ -1395,8 +1395,8 @@ void _rtw_usb_buffer_free(struct usb_dev + extern void* rtw_malloc2d(int h, int w, int size); + extern void rtw_mfree2d(void *pbuf, int h, int w, int size); + +-extern void _rtw_memcpy(void* dec, void* sour, u32 sz); +-extern int _rtw_memcmp(void *dst, void *src, u32 sz); ++extern void _rtw_memcpy(void *dec, const void *sour, u32 sz); ++extern int _rtw_memcmp(const void *dst, const void *src, u32 sz); + extern void _rtw_memset(void *pbuf, int c, u32 sz); + + extern void _rtw_init_listhead(_list *list); +--- a/drivers/net/wireless/realtek/rtl8192cu/include/rtw_debug.h ++++ b/drivers/net/wireless/realtek/rtl8192cu/include/rtw_debug.h +@@ -313,15 +313,15 @@ extern u32 GlobalDebugLevel; + #if defined (_dbgdump) + #undef DBG_871X + // #define DBG_871X _dbgdump +- #define DBG_871X(...) LOG_LEVEL(_drv_emerg_ , __VA_ARGS__) ++ #define DBG_871X(...) LOG_LEVEL(_drv_debug_ , __VA_ARGS__) + + #undef MSG_8192C + // #define MSG_8192C _dbgdump +- #define MSG_8192C(...) LOG_LEVEL(_drv_emerg_ , __VA_ARGS__) ++ #define MSG_8192C(...) LOG_LEVEL(_drv_info_ , __VA_ARGS__) + + #undef DBG_8192C + // #define DBG_8192C _dbgdump +- #define DBG_8192C(...) LOG_LEVEL(_drv_emerg_ , __VA_ARGS__) ++ #define DBG_8192C(...) LOG_LEVEL(_drv_debug_ , __VA_ARGS__) + + + #undef WRN_8192C +--- a/drivers/net/wireless/realtek/rtl8192cu/include/rtw_ioctl_set.h ++++ b/drivers/net/wireless/realtek/rtl8192cu/include/rtw_ioctl_set.h +@@ -63,10 +63,11 @@ u8 rtw_set_802_11_bssid_list_scan(_adapt + u8 rtw_set_802_11_infrastructure_mode(_adapter * padapter, NDIS_802_11_NETWORK_INFRASTRUCTURE networktype); + u8 rtw_set_802_11_remove_wep(_adapter * padapter, u32 keyindex); + u8 rtw_set_802_11_ssid(_adapter * padapter, NDIS_802_11_SSID * ssid); +-u8 rtw_set_802_11_connect(_adapter* padapter, u8 *bssid, NDIS_802_11_SSID *ssid); ++u8 rtw_set_802_11_connect(_adapter *padapter, const u8 *bssid ++ , NDIS_802_11_SSID *ssid); + u8 rtw_set_802_11_remove_key(_adapter * padapter, NDIS_802_11_REMOVE_KEY * key); + +-u8 rtw_validate_bssid(u8 *bssid); ++u8 rtw_validate_bssid(const u8 *bssid); + u8 rtw_validate_ssid(NDIS_802_11_SSID *ssid); + + u16 rtw_get_cur_max_rate(_adapter *adapter); +--- a/drivers/net/wireless/realtek/rtl8192cu/include/sta_info.h ++++ b/drivers/net/wireless/realtek/rtl8192cu/include/sta_info.h +@@ -395,7 +395,7 @@ struct sta_priv { + }; + + +-__inline static u32 wifi_mac_hash(u8 *mac) ++__inline static u32 wifi_mac_hash(const u8 *mac) + { + u32 x; + +@@ -423,7 +423,7 @@ struct sta_info *rtw_get_stainfo_by_offs + extern struct sta_info *rtw_alloc_stainfo(struct sta_priv *pstapriv, u8 *hwaddr); + extern u32 rtw_free_stainfo(_adapter *padapter , struct sta_info *psta); + extern void rtw_free_all_stainfo(_adapter *padapter); +-extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, u8 *hwaddr); ++extern struct sta_info *rtw_get_stainfo(struct sta_priv *pstapriv, const u8 *hwaddr); + extern u32 rtw_init_bcmc_stainfo(_adapter* padapter); + extern struct sta_info* rtw_get_bcmc_stainfo(_adapter* padapter); + extern u8 rtw_access_ctrl(_adapter *padapter, u8 *mac_addr); +--- a/drivers/net/wireless/realtek/rtl8192cu/include/wifi.h ++++ b/drivers/net/wireless/realtek/rtl8192cu/include/wifi.h +@@ -425,7 +425,7 @@ enum WIFI_REG_DOMAIN { + (addr[4] == 0xff) && (addr[5] == 0xff) ) ? _TRUE : _FALSE \ + ) + +-__inline static int IS_MCAST(unsigned char *da) ++__inline static int IS_MCAST(const unsigned char *da) + { + if ((*da) & 0x01) + return _TRUE; +--- a/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/ioctl_cfg80211.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/ioctl_cfg80211.c +@@ -57,7 +57,7 @@ static const u32 rtw_cipher_suites[] = { + } + + #define CHAN2G(_channel, _freq, _flags) { \ +- .band = IEEE80211_BAND_2GHZ, \ ++ .band = NL80211_BAND_2GHZ, \ + .center_freq = (_freq), \ + .hw_value = (_channel), \ + .flags = (_flags), \ +@@ -66,7 +66,7 @@ static const u32 rtw_cipher_suites[] = { + } + + #define CHAN5G(_channel, _flags) { \ +- .band = IEEE80211_BAND_5GHZ, \ ++ .band = NL80211_BAND_5GHZ, \ + .center_freq = 5000 + (5 * (_channel)), \ + .hw_value = (_channel), \ + .flags = (_flags), \ +@@ -166,18 +166,18 @@ void rtw_5g_rates_init(struct ieee80211_ + } + + struct ieee80211_supported_band *rtw_spt_band_alloc( +- enum ieee80211_band band ++ enum nl80211_band band + ) + { + struct ieee80211_supported_band *spt_band = NULL; + int n_channels, n_bitrates; + +- if(band == IEEE80211_BAND_2GHZ) ++ if(band == NL80211_BAND_2GHZ) + { + n_channels = RTW_2G_CHANNELS_NUM; + n_bitrates = RTW_G_RATES_NUM; + } +- else if(band == IEEE80211_BAND_5GHZ) ++ else if(band == NL80211_BAND_5GHZ) + { + n_channels = RTW_5G_CHANNELS_NUM; + n_bitrates = RTW_A_RATES_NUM; +@@ -201,12 +201,12 @@ struct ieee80211_supported_band *rtw_spt + spt_band->n_channels = n_channels; + spt_band->n_bitrates = n_bitrates; + +- if(band == IEEE80211_BAND_2GHZ) ++ if(band == NL80211_BAND_2GHZ) + { + rtw_2g_channels_init(spt_band->channels); + rtw_2g_rates_init(spt_band->bitrates); + } +- else if(band == IEEE80211_BAND_5GHZ) ++ else if(band == NL80211_BAND_5GHZ) + { + rtw_5g_channels_init(spt_band->channels); + rtw_5g_rates_init(spt_band->bitrates); +@@ -221,18 +221,18 @@ exit: + + void rtw_spt_band_free(struct ieee80211_supported_band *spt_band) + { +- u32 size; ++ u32 size = 0; + + if(!spt_band) + return; + +- if(spt_band->band == IEEE80211_BAND_2GHZ) ++ if(spt_band->band == NL80211_BAND_2GHZ) + { + size = sizeof(struct ieee80211_supported_band) + + sizeof(struct ieee80211_channel)*RTW_2G_CHANNELS_NUM + + sizeof(struct ieee80211_rate)*RTW_G_RATES_NUM; + } +- else if(spt_band->band == IEEE80211_BAND_5GHZ) ++ else if(spt_band->band == NL80211_BAND_5GHZ) + { + size = sizeof(struct ieee80211_supported_band) + + sizeof(struct ieee80211_channel)*RTW_5G_CHANNELS_NUM +@@ -301,12 +301,12 @@ static int rtw_ieee80211_channel_to_freq + /* see 802.11 17.3.8.3.2 and Annex J + * there are overlapping channel numbers in 5GHz and 2GHz bands */ + +- if (band == IEEE80211_BAND_5GHZ) { ++ if (band == NL80211_BAND_5GHZ) { + if (chan >= 182 && chan <= 196) + return 4000 + chan * 5; + else + return 5000 + chan * 5; +- } else { /* IEEE80211_BAND_2GHZ */ ++ } else { /* NL80211_BAND_2GHZ */ + if (chan == 14) + return 2484; + else if (chan < 14) +@@ -331,7 +331,7 @@ static int rtw_cfg80211_inform_bss(_adap + u8 *notify_ie; + size_t notify_ielen; + s32 notify_signal; +- u8 buf[MAX_BSSINFO_LEN], *pbuf; ++ u8 *buf, *pbuf; + size_t len,bssinf_len=0; + struct rtw_ieee80211_hdr *pwlanhdr; + unsigned short *fctrl; +@@ -391,9 +391,9 @@ static int rtw_cfg80211_inform_bss(_adap + DBG_871X("%s, got sr, but ssid mismatch, to remove this bss\n", __func__); + + if (pselect_network->Configuration.DSConfig <= RTW_CH_MAX_2G_CHANNEL) +- freq = rtw_ieee80211_channel_to_frequency(pselect_network->Configuration.DSConfig, IEEE80211_BAND_2GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(pselect_network->Configuration.DSConfig, NL80211_BAND_2GHZ); + else +- freq = rtw_ieee80211_channel_to_frequency(pselect_network->Configuration.DSConfig, IEEE80211_BAND_5GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(pselect_network->Configuration.DSConfig, NL80211_BAND_5GHZ); + + notify_channel = ieee80211_get_channel(wiphy, freq); + pselect_bss = cfg80211_get_bss(wiphy, NULL/*notify_channel*/, +@@ -424,9 +424,9 @@ static int rtw_cfg80211_inform_bss(_adap + + channel = pnetwork->network.Configuration.DSConfig; + if (channel <= RTW_CH_MAX_2G_CHANNEL) +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_2GHZ); + else +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_5GHZ); + + notify_channel = ieee80211_get_channel(wiphy, freq); + +@@ -459,6 +459,7 @@ static int rtw_cfg80211_inform_bss(_adap + DBG_8192C("notify_timestamp: %#018llx\n", notify_timestamp); + */ + ++ buf = rtw_zmalloc(MAX_BSSINFO_LEN); + pbuf = buf; + + pwlanhdr = (struct rtw_ieee80211_hdr *)pbuf; +@@ -486,6 +487,8 @@ static int rtw_cfg80211_inform_bss(_adap + _rtw_memcpy(pbuf, pnetwork->network.IEs, pnetwork->network.IELength); + len += pnetwork->network.IELength; + ++ rtw_mfree(buf, MAX_BSSINFO_LEN); ++ + //#ifdef CONFIG_P2P + //if(rtw_get_p2p_ie(pnetwork->network.IEs+12, pnetwork->network.IELength-12, NULL, NULL)) + //{ +@@ -569,15 +572,19 @@ int rtw_cfg80211_check_bss(_adapter *pad + return _FALSE; + + if (pnetwork->Configuration.DSConfig <= RTW_CH_MAX_2G_CHANNEL) +- freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, IEEE80211_BAND_2GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, NL80211_BAND_2GHZ); + else +- freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, IEEE80211_BAND_5GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(pnetwork->Configuration.DSConfig, NL80211_BAND_5GHZ); + + notify_channel = ieee80211_get_channel(padapter->rtw_wdev->wiphy, freq); + bss = cfg80211_get_bss(padapter->rtw_wdev->wiphy, notify_channel, + pnetwork->MacAddress, pnetwork->Ssid.Ssid, + pnetwork->Ssid.SsidLength, ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 1, 0) + WLAN_CAPABILITY_ESS, WLAN_CAPABILITY_ESS); ++#else ++ IEEE80211_BSS_TYPE_ESS, IEEE80211_PRIVACY_ANY); ++#endif + + return (bss!=NULL); + } +@@ -626,9 +633,9 @@ void rtw_cfg80211_indicate_connect(_adap + u16 channel = cur_network->network.Configuration.DSConfig; + + if (channel <= RTW_CH_MAX_2G_CHANNEL) +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_2GHZ); + else +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_5GHZ); + + notify_channel = ieee80211_get_channel(wiphy, freq); + #endif +@@ -700,13 +707,16 @@ void rtw_cfg80211_indicate_disconnect(_a + if (!padapter->mlmepriv.not_indic_disco) { + DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state); + +- if(pwdev->sme_state==CFG80211_SME_CONNECTING) ++ if (check_fwstate(pmlmepriv, WIFI_UNDER_LINKING)) { + cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0, + WLAN_STATUS_UNSPECIFIED_FAILURE, GFP_ATOMIC/*GFP_KERNEL*/); +- else if(pwdev->sme_state==CFG80211_SME_CONNECTED) ++ } else { ++#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0) + cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC); +- //else +- //DBG_8192C("pwdev->sme_state=%d\n", pwdev->sme_state); ++#else ++ cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, false, GFP_ATOMIC); ++#endif ++ } + + DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state); + } +@@ -1549,7 +1559,7 @@ static int cfg80211_rtw_set_default_key( + + static int cfg80211_rtw_get_station(struct wiphy *wiphy, + struct net_device *ndev, +- u8 *mac, struct station_info *sinfo) ++ const u8 *mac, struct station_info *sinfo) + { + int ret = 0; + _adapter *padapter = wiphy_to_adapter(wiphy); +@@ -1589,16 +1599,32 @@ static int cfg80211_rtw_get_station(stru + goto exit; + } + ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) ++ sinfo->filled |= BIT(NL80211_STA_INFO_SIGNAL); ++#else + sinfo->filled |= STATION_INFO_SIGNAL; ++#endif + sinfo->signal = translate_percentage_to_dbm(padapter->recvpriv.signal_strength); + ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) ++ sinfo->filled |= BIT(NL80211_STA_INFO_TX_BITRATE); ++#else + sinfo->filled |= STATION_INFO_TX_BITRATE; ++#endif + sinfo->txrate.legacy = rtw_get_cur_max_rate(padapter); + ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) ++ sinfo->filled |= BIT(NL80211_STA_INFO_RX_PACKETS); ++#else + sinfo->filled |= STATION_INFO_RX_PACKETS; ++#endif + sinfo->rx_packets = sta_rx_data_pkts(psta); + ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,0,0)) ++ sinfo->filled |= BIT(NL80211_STA_INFO_TX_PACKETS); ++#else + sinfo->filled |= STATION_INFO_TX_PACKETS; ++#endif + sinfo->tx_packets = psta->sta_stats.tx_pkts; + + } +@@ -1789,7 +1815,15 @@ void rtw_cfg80211_indicate_scan_done(str + } + else + { ++ #if (LINUX_VERSION_CODE < KERNEL_VERSION(4, 8, 0)) + cfg80211_scan_done(pwdev_priv->scan_request, aborted); ++ #else ++ struct cfg80211_scan_info info = { ++ .aborted = aborted, ++ }; ++ ++ cfg80211_scan_done(pwdev_priv->scan_request, &info); ++ #endif + } + + pwdev_priv->scan_request = NULL; +@@ -2419,7 +2453,7 @@ static int rtw_cfg80211_set_key_mgt(stru + return 0; + } + +-static int rtw_cfg80211_set_wpa_ie(_adapter *padapter, u8 *pie, size_t ielen) ++static int rtw_cfg80211_set_wpa_ie(_adapter *padapter, const u8 *pie, size_t ielen) + { + u8 *buf=NULL, *pos=NULL; + u32 left; +@@ -3089,7 +3123,9 @@ void rtw_cfg80211_indicate_sta_assoc(_ad + ie_offset = _REASOCREQ_IE_OFFSET_; + + sinfo.filled = 0; ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(4,0,0)) + sinfo.filled = STATION_INFO_ASSOC_REQ_IES; ++#endif + sinfo.assoc_req_ies = pmgmt_frame + WLAN_HDR_A3_LEN + ie_offset; + sinfo.assoc_req_ies_len = frame_len - WLAN_HDR_A3_LEN - ie_offset; + cfg80211_new_sta(ndev, GetAddr2Ptr(pmgmt_frame), &sinfo, GFP_ATOMIC); +@@ -3097,9 +3133,9 @@ void rtw_cfg80211_indicate_sta_assoc(_ad + #else /* defined(RTW_USE_CFG80211_STA_EVENT) */ + channel = pmlmeext->cur_channel; + if (channel <= RTW_CH_MAX_2G_CHANNEL) +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_2GHZ); + else +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_5GHZ); + + #ifdef COMPAT_KERNEL_RELEASE + rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC); +@@ -3142,9 +3178,9 @@ void rtw_cfg80211_indicate_sta_disassoc( + #else /* defined(RTW_USE_CFG80211_STA_EVENT) */ + channel = pmlmeext->cur_channel; + if (channel <= RTW_CH_MAX_2G_CHANNEL) +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_2GHZ); + else +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_5GHZ); + + pmgmt_frame = mgmt_buf; + pwlanhdr = (struct rtw_ieee80211_hdr *)pmgmt_frame; +@@ -3387,7 +3423,11 @@ static const struct net_device_ops rtw_c + }; + #endif + ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)) ++static int rtw_cfg80211_add_monitor_if(_adapter *padapter, char *name, unsigned char name_assign_type, struct net_device **ndev) ++#else + static int rtw_cfg80211_add_monitor_if(_adapter *padapter, char *name, struct net_device **ndev) ++#endif + { + int ret = 0; + struct net_device* mon_ndev = NULL; +@@ -3418,6 +3458,9 @@ static int rtw_cfg80211_add_monitor_if(_ + mon_ndev->type = ARPHRD_IEEE80211_RADIOTAP; + strncpy(mon_ndev->name, name, IFNAMSIZ); + mon_ndev->name[IFNAMSIZ - 1] = 0; ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)) ++ mon_ndev->name_assign_type = name_assign_type; ++#endif + mon_ndev->destructor = rtw_ndev_destructor; + + #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29)) +@@ -3482,6 +3525,9 @@ static int + #else + char *name, + #endif ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)) ++ unsigned char name_assign_type, ++#endif + enum nl80211_iftype type, u32 *flags, struct vif_params *params) + { + int ret = 0; +@@ -3499,7 +3545,11 @@ static int + ret = -ENODEV; + break; + case NL80211_IFTYPE_MONITOR: ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)) ++ ret = rtw_cfg80211_add_monitor_if(padapter, (char *)name, name_assign_type, &ndev); ++#else + ret = rtw_cfg80211_add_monitor_if(padapter, (char *)name, &ndev); ++#endif + break; + + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE) +@@ -3760,7 +3810,7 @@ static int cfg80211_rtw_stop_ap(struct w + #endif //(LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) + + static int cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev, +- u8 *mac, struct station_parameters *params) ++ const u8 *mac, struct station_parameters *params) + { + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev)); + +@@ -3768,12 +3818,19 @@ static int cfg80211_rtw_add_station(stru + } + + static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev, +- u8 *mac) ++#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,15,0)) ++ u8 *mac) { ++#elif (LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0)) ++ const u8 *mac) { ++#else ++ struct station_del_parameters *params) + { ++ const u8 *mac = params->mac; ++#endif + int ret=0; + _irqL irqL; + _list *phead, *plist; +- u8 updated; ++ u8 updated = _FALSE; + struct sta_info *psta = NULL; + _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev); + struct mlme_priv *pmlmepriv = &(padapter->mlmepriv); +@@ -3859,7 +3916,7 @@ static int cfg80211_rtw_del_station(stru + } + + static int cfg80211_rtw_change_station(struct wiphy *wiphy, struct net_device *ndev, +- u8 *mac, struct station_parameters *params) ++ const u8 *mac, struct station_parameters *params) + { + DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev)); + +@@ -3950,9 +4007,9 @@ void rtw_cfg80211_rx_action_p2p(_adapter + + indicate: + if (channel <= RTW_CH_MAX_2G_CHANNEL) +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_2GHZ); + else +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_5GHZ); + + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE) + rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC); +@@ -3990,9 +4047,9 @@ void rtw_cfg80211_rx_p2p_action_public(_ + + indicate: + if (channel <= RTW_CH_MAX_2G_CHANNEL) +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_2GHZ); + else +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_5GHZ); + + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE) + rtw_cfg80211_rx_mgmt(padapter, freq, 0, pmgmt_frame, frame_len, GFP_ATOMIC); +@@ -4020,9 +4077,9 @@ void rtw_cfg80211_rx_action(_adapter *ad + DBG_871X("RTW_Rx:category(%u), action(%u)\n", category, action); + + if (channel <= RTW_CH_MAX_2G_CHANNEL) +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_2GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_2GHZ); + else +- freq = rtw_ieee80211_channel_to_frequency(channel, IEEE80211_BAND_5GHZ); ++ freq = rtw_ieee80211_channel_to_frequency(channel, NL80211_BAND_5GHZ); + + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE) + rtw_cfg80211_rx_mgmt(adapter, freq, 0, frame, frame_len, GFP_ATOMIC); +@@ -4643,6 +4700,9 @@ static int cfg80211_rtw_mgmt_tx(struct w + #else + struct net_device *ndev, + #endif ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) ++ struct cfg80211_mgmt_tx_params *params, ++#else + struct ieee80211_channel *chan, + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE) + bool offchan, +@@ -4663,8 +4723,15 @@ static int cfg80211_rtw_mgmt_tx(struct w + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) + bool dont_wait_for_ack, + #endif ++#endif + u64 *cookie) + { ++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) ++ struct ieee80211_channel *chan = params->chan; ++ const u8 *buf = params->buf; ++ size_t len = params->len; ++#endif ++ + _adapter *padapter = (_adapter *)wiphy_to_adapter(wiphy); + struct rtw_wdev_priv *pwdev_priv = wdev_to_priv(padapter->rtw_wdev); + int ret = 0; +@@ -5199,7 +5266,7 @@ static struct cfg80211_ops rtw_cfg80211_ + #endif + }; + +-static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum ieee80211_band band, u8 rf_type) ++static void rtw_cfg80211_init_ht_capab(struct ieee80211_sta_ht_cap *ht_cap, enum nl80211_band band, u8 rf_type) + { + + #define MAX_BIT_RATE_40MHZ_MCS15 300 /* Mbps */ +@@ -5223,7 +5290,7 @@ static void rtw_cfg80211_init_ht_capab(s + ht_cap->mcs.tx_params = IEEE80211_HT_MCS_TX_DEFINED; + + /* +- *hw->wiphy->bands[IEEE80211_BAND_2GHZ] ++ *hw->wiphy->bands[NL80211_BAND_2GHZ] + *base on ant_num + *rx_mask: RX mask + *if rx_ant =1 rx_mask[0]=0xff;==>MCS0-MCS7 +@@ -5268,16 +5335,16 @@ void rtw_cfg80211_init_wiphy(_adapter *p + + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */ + { +- bands = wiphy->bands[IEEE80211_BAND_2GHZ]; ++ bands = wiphy->bands[NL80211_BAND_2GHZ]; + if(bands) +- rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_2GHZ, rf_type); ++ rtw_cfg80211_init_ht_capab(&bands->ht_cap, NL80211_BAND_2GHZ, rf_type); + } + + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */ + { +- bands = wiphy->bands[IEEE80211_BAND_5GHZ]; ++ bands = wiphy->bands[NL80211_BAND_5GHZ]; + if(bands) +- rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_5GHZ, rf_type); ++ rtw_cfg80211_init_ht_capab(&bands->ht_cap, NL80211_BAND_5GHZ, rf_type); + } + } + +@@ -5348,9 +5415,9 @@ static void rtw_cfg80211_preinit_wiphy(_ + wiphy->n_cipher_suites = ARRAY_SIZE(rtw_cipher_suites); + + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */ +- wiphy->bands[IEEE80211_BAND_2GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_2GHZ); ++ wiphy->bands[NL80211_BAND_2GHZ] = rtw_spt_band_alloc(NL80211_BAND_2GHZ); + /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */ +- wiphy->bands[IEEE80211_BAND_5GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_5GHZ); ++ wiphy->bands[NL80211_BAND_5GHZ] = rtw_spt_band_alloc(NL80211_BAND_5GHZ); + + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) && LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0)) + wiphy->flags |= WIPHY_FLAG_SUPPORTS_SEPARATE_DEFAULT_KEYS; +@@ -5402,8 +5469,11 @@ int rtw_wdev_alloc(_adapter *padapter, s + } + wdev->wiphy = wiphy; + wdev->netdev = pnetdev; +- //wdev->iftype = NL80211_IFTYPE_STATION; +- wdev->iftype = NL80211_IFTYPE_MONITOR; // for rtw_setopmode_cmd() in cfg80211_rtw_change_iface() ++ ++ wdev->iftype = NL80211_IFTYPE_STATION; // will be init in rtw_hal_init() ++ // Must sync with _rtw_init_mlme_priv() ++ // pmlmepriv->fw_state = WIFI_STATION_STATE ++ //wdev->iftype = NL80211_IFTYPE_MONITOR; // for rtw_setopmode_cmd() in cfg80211_rtw_change_iface() + padapter->rtw_wdev = wdev; + pnetdev->ieee80211_ptr = wdev; + +@@ -5456,8 +5526,8 @@ void rtw_wdev_free(struct wireless_dev * + + pwdev_priv = wdev_to_priv(wdev); + +- rtw_spt_band_free(wdev->wiphy->bands[IEEE80211_BAND_2GHZ]); +- rtw_spt_band_free(wdev->wiphy->bands[IEEE80211_BAND_5GHZ]); ++ rtw_spt_band_free(wdev->wiphy->bands[NL80211_BAND_2GHZ]); ++ rtw_spt_band_free(wdev->wiphy->bands[NL80211_BAND_5GHZ]); + + wiphy_free(wdev->wiphy); + +--- a/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/ioctl_linux.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/ioctl_linux.c +@@ -6584,7 +6584,6 @@ static int rtw_dbg_port(struct net_devic + case 0x01: //dbg mode + padapter->recvpriv.is_signal_dbg = 1; + extra_arg = extra_arg>100?100:extra_arg; +- extra_arg = extra_arg<0?0:extra_arg; + padapter->recvpriv.signal_strength_dbg=extra_arg; + break; + } +@@ -6956,7 +6955,7 @@ static int rtw_dbg_port(struct net_devic + { + struct registry_priv *pregpriv = &padapter->registrypriv; + // 0: disable, 0x1:enable (but wifi_spec should be 0), 0x2: force enable (don't care wifi_spec) +- if( pregpriv && extra_arg >= 0 && extra_arg < 3 ) ++ if( pregpriv && extra_arg < 3 ) + { + pregpriv->ampdu_enable= extra_arg; + DBG_871X("set ampdu_enable=%d\n",pregpriv->ampdu_enable); +--- a/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/os_intfs.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/os_intfs.c +@@ -945,8 +945,14 @@ unsigned int rtw_classify8021d(struct sk + return dscp >> 5; + } + +-static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb, +- void *accel_priv, select_queue_fallback_t fallback) ++static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 13, 0) ++ , void *accel_priv ++#endif ++#if (LINUX_VERSION_CODE>=KERNEL_VERSION(3,14,0)) ++ , select_queue_fallback_t fallback ++#endif ++) + { + _adapter *padapter = rtw_netdev_priv(dev); + struct mlme_priv *pmlmepriv = &padapter->mlmepriv; +@@ -1057,6 +1063,10 @@ int rtw_init_netdev_name(struct net_devi + return 0; + } + ++static const struct device_type wlan_type = { ++ .name = "wlan", ++}; ++ + struct net_device *rtw_init_netdev(_adapter *old_padapter) + { + _adapter *padapter; +@@ -1072,6 +1082,7 @@ struct net_device *rtw_init_netdev(_adap + if (!pnetdev) + return NULL; + ++ pnetdev->dev.type = &wlan_type; + padapter = rtw_netdev_priv(pnetdev); + padapter->pnetdev = pnetdev; + +@@ -1681,9 +1692,6 @@ int _netdev_vir_if_open(struct net_devic + + padapter->bup = _TRUE; + padapter->hw_init_completed = _TRUE; +- +- rtw_start_mbssid_cam(padapter);//start mbssid_cam after bup = _TRUE & hw_init_completed = _TRUE +- + } + + padapter->net_closed = _FALSE; +--- a/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/recv_linux.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/recv_linux.c +@@ -136,7 +136,7 @@ int rtw_os_recvbuf_resource_free(_adapte + void rtw_handle_tkip_mic_err(_adapter *padapter,u8 bgroup) + { + #ifdef CONFIG_IOCTL_CFG80211 +- enum nl80211_key_type key_type; ++ enum nl80211_key_type key_type = 0; + #endif + union iwreq_data wrqu; + struct iw_michaelmicfailure ev; +--- a/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/rtw_android.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/rtw_android.c +@@ -96,13 +96,7 @@ typedef struct cmd_tlv { + #endif /* PNO_SUPPORT */ + + typedef struct android_wifi_priv_cmd { +- +-#ifdef CONFIG_COMPAT +- compat_uptr_t buf; +-#else + char *buf; +-#endif +- + int used_len; + int total_len; + } android_wifi_priv_cmd; +--- a/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/usb_intf.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/os_dep/linux/usb_intf.c +@@ -102,6 +102,7 @@ static void rtw_dev_remove(struct usb_in + {USB_DEVICE(0x103C, 0x1629)},/* HP - Lite-On ,8188CUS Slim Combo */ \ + {USB_DEVICE(0x2001, 0x3308)},/* D-Link - Alpha */ \ + {USB_DEVICE(0x050D, 0x1102)},/* Belkin - Edimax */ \ ++ {USB_DEVICE(0x050D, 0x11F2)},/* ISY - Edimax */ \ + {USB_DEVICE(0x2019, 0xAB2A)},/* Planex - Abocom */ \ + {USB_DEVICE(0x20F4, 0x648B)},/* TRENDnet - Cameo */ \ + {USB_DEVICE(0x4855, 0x0090)},/* - Feixun */ \ +@@ -110,6 +111,8 @@ static void rtw_dev_remove(struct usb_in + {USB_DEVICE(0x0BDA, 0x5088)},/* Thinkware - CC&C */ \ + {USB_DEVICE(0x4856, 0x0091)},/* NetweeN - Feixun */ \ + {USB_DEVICE(0x0846, 0x9041)}, /* Netgear - Cameo */ \ ++ {USB_DEVICE(0x0846, 0x9042)}, /* On Networks - N150MA */ \ ++ {USB_DEVICE(0x0846, 0x9043)}, /* Netgear N150 -WNA1000M */ \ + {USB_DEVICE(0x2019, 0x4902)},/* Planex - Etop */ \ + {USB_DEVICE(0x2019, 0xAB2E)},/* SW-WF02-AD15 -Abocom */ \ + {USB_DEVICE(0x2001, 0x330B)}, /* D-LINK - T&W */ \ +@@ -117,6 +120,7 @@ static void rtw_dev_remove(struct usb_in + {USB_DEVICE(0x0B05, 0x17BA)}, /* ASUS - Edimax */ \ + {USB_DEVICE(0x0BDA, 0x1E1E)}, /* Intel - - */ \ + {USB_DEVICE(0x04BB, 0x094c)}, /* I-O DATA - Edimax */ \ ++ {USB_DEVICE(0X0BDA, 0x8176)}, /* TP-Link TL-WN723N */ \ + /****** 8188CTV ********/ \ + {USB_DEVICE(0xCDAB, 0x8011)}, /* - - compare */ \ + {USB_DEVICE(0x0BDA, 0x0A8A)}, /* Sony - Foxconn */ \ +@@ -991,7 +995,7 @@ static int rtw_resume(struct usb_interfa + int rtw_resume_process(_adapter *padapter) + { + struct net_device *pnetdev; +- struct pwrctrl_priv *pwrpriv; ++ struct pwrctrl_priv *pwrpriv=NULL; + int ret = -1; + u32 start_time = rtw_get_current_time(); + _func_enter_; +@@ -1054,7 +1058,8 @@ exit: + rtw_unlock_suspend(); + #endif //CONFIG_RESUME_IN_WORKQUEUE + +- pwrpriv->bInSuspend = _FALSE; ++ if (pwrpriv) ++ pwrpriv->bInSuspend = _FALSE; + DBG_871X("<=== %s return %d.............. in %dms\n", __FUNCTION__ + , ret, rtw_get_passing_time_ms(start_time)); + +--- a/drivers/net/wireless/realtek/rtl8192cu/os_dep/osdep_service.c ++++ b/drivers/net/wireless/realtek/rtl8192cu/os_dep/osdep_service.c +@@ -790,7 +790,7 @@ void rtw_mfree2d(void *pbuf, int h, int + rtw_mfree((u8 *)pbuf, h*sizeof(void*) + w*h*size); + } + +-void _rtw_memcpy(void* dst, void* src, u32 sz) ++void _rtw_memcpy(void* dst, const void* src, u32 sz) + { + + #if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD) +@@ -807,7 +807,7 @@ void _rtw_memcpy(void* dst, void* src, u + + } + +-int _rtw_memcmp(void *dst, void *src, u32 sz) ++int _rtw_memcmp(const void *dst, const void *src, u32 sz) + { + + #if defined (PLATFORM_LINUX)|| defined (PLATFORM_FREEBSD) |