From c58cad4928313f7f6ec7168418e6bcdb5fa2ca7e Mon Sep 17 00:00:00 2001 From: hwg Date: Thu, 12 Feb 2015 15:02:51 +0800 Subject: [PATCH] update rtl8188eu wifi driver to RTL8188EUS_linux_v4.3.0.7_12758.20141114 --- .../wireless/rockchip_wlan/rtl8188eu/Kconfig | 8 +- .../wireless/rockchip_wlan/rtl8188eu/Makefile | 2 +- .../wireless/rockchip_wlan/rtl8188eu/clean | 5 + .../rockchip_wlan/rtl8188eu/core/rtw_ap.c | 2 +- .../rockchip_wlan/rtl8188eu/core/rtw_cmd.c | 15 +- .../rockchip_wlan/rtl8188eu/core/rtw_debug.c | 2 + .../rtl8188eu/core/rtw_ieee80211.c | 32 +-- .../rockchip_wlan/rtl8188eu/core/rtw_mlme.c | 45 ++-- .../rtl8188eu/core/rtw_mlme_ext.c | 51 ++++- .../rockchip_wlan/rtl8188eu/core/rtw_p2p.c | 5 +- .../rockchip_wlan/rtl8188eu/core/rtw_sreset.c | 10 +- .../rtl8188eu/core/rtw_sta_mgt.c | 10 +- .../rockchip_wlan/rtl8188eu/core/rtw_xmit.c | 8 +- .../rockchip_wlan/rtl8188eu/hal/hal_intf.c | 22 +- .../rtl8188eu/hal/rtl8188e/rtl8188e_cmd.c | 5 +- .../hal/rtl8188e/rtl8188e_hal_init.c | 162 +++++++++++++++ .../rtl8188eu/hal/rtl8188e/usb/usb_halinit.c | 193 ++++++++++++------ .../hal/rtl8188e/usb/usb_ops_linux.c | 11 +- .../rockchip_wlan/rtl8188eu/ifcfg-wlan0 | 4 + .../rtl8188eu/include/hal_com_reg.h | 30 ++- .../rtl8188eu/include/hal_intf.h | 5 +- .../rtl8188eu/include/ioctl_cfg80211.h | 4 +- .../rtl8188eu/include/rtl8188e_hal.h | 1 + .../rtl8188eu/include/rtl8188e_spec.h | 2 + .../rtl8188eu/include/rtw_mlme.h | 10 + .../rtl8188eu/include/rtw_version.h | 2 +- .../rtl8188eu/include/rtw_wifi_regd.h | 16 +- .../rtl8188eu/include/xmit_osdep.h | 4 + .../rtl8188eu/os_dep/linux/ioctl_cfg80211.c | 168 ++++++++++----- .../rtl8188eu/os_dep/linux/ioctl_linux.c | 33 +-- .../rtl8188eu/os_dep/linux/mlme_linux.c | 11 +- .../rtl8188eu/os_dep/linux/os_intfs.c | 57 +++--- .../rtl8188eu/os_dep/linux/rtw_proc.c | 22 ++ .../rtl8188eu/os_dep/linux/usb_intf.c | 5 +- .../rtl8188eu/os_dep/linux/wifi_regd.c | 107 +++++----- .../rtl8188eu/os_dep/linux/wifi_version.h | 2 +- .../rtl8188eu/os_dep/linux/xmit_linux.c | 132 +++++++++--- .../wireless/rockchip_wlan/rtl8188eu/runwpa | 20 ++ .../rockchip_wlan/rtl8188eu/wlan0dhcp | 16 ++ 39 files changed, 863 insertions(+), 376 deletions(-) create mode 100755 drivers/net/wireless/rockchip_wlan/rtl8188eu/clean create mode 100755 drivers/net/wireless/rockchip_wlan/rtl8188eu/ifcfg-wlan0 mode change 100644 => 100755 drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_version.h mode change 100644 => 100755 drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/wifi_version.h create mode 100755 drivers/net/wireless/rockchip_wlan/rtl8188eu/runwpa create mode 100755 drivers/net/wireless/rockchip_wlan/rtl8188eu/wlan0dhcp diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/Kconfig b/drivers/net/wireless/rockchip_wlan/rtl8188eu/Kconfig index 2451fe0fd9f3..013175c374b2 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/Kconfig +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/Kconfig @@ -1,8 +1,6 @@ config RTL8188EU - tristate "Realtek 8188EU USB WiFi Support" - select WIRELESS_EXT - select WEXT_PRIV - select IEEE80211 + tristate "Realtek 8188E USB WiFi" + depends on USB ---help--- - Help message of RTL8188EU & RTL8189ES + Help message of RTL8188EU diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/Makefile b/drivers/net/wireless/rockchip_wlan/rtl8188eu/Makefile index 507087617d82..5551eea01f80 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/Makefile +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/Makefile @@ -996,7 +996,7 @@ EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFO ARCH := arm CROSS_COMPILE := /usr/src/release_fae_version/toolchain/arm-eabi-4.4.0/bin/arm-eabi- KSRC := /usr/src/release_fae_version/kernel25_A7_281x -MODULE_NAME := 8188eu +MODULE_NAME := wlan endif ifeq ($(CONFIG_PLATFORM_ARM_RK3188), y) diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/clean b/drivers/net/wireless/rockchip_wlan/rtl8188eu/clean new file mode 100755 index 000000000000..87664218b889 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/clean @@ -0,0 +1,5 @@ +#!/bin/bash +rmmod 8192cu +rmmod 8192ce +rmmod 8192du +rmmod 8192de diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_ap.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_ap.c index f9a0cf774100..9e6e8aebba82 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_ap.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_ap.c @@ -1720,7 +1720,7 @@ int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf, int len) if(p && ie_len>0) { u8 rf_type=0; - u8 max_rx_ampdu_factor=0; + u32 max_rx_ampdu_factor=0; struct rtw_ieee80211_ht_cap *pht_cap = (struct rtw_ieee80211_ht_cap *)(p+2); pHT_caps_ie=p; diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_cmd.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_cmd.c index b4cd99822822..6d8aa0438098 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_cmd.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_cmd.c @@ -845,11 +845,16 @@ _func_enter_; #ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE if((padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state&0x03) == WIFI_FW_AP_STATE) - _set_timer(&pmlmepriv->scan_to_timer, SURVEY_TO * - ( padapter->mlmeextpriv.max_chan_nums + ( padapter->mlmeextpriv.max_chan_nums / RTW_SCAN_NUM_OF_CH ) * RTW_STAY_AP_CH_MILLISECOND ) + 1000 ); + { + if(IsSupported5G(padapter->registrypriv.wireless_mode) + && IsSupported24G(padapter->registrypriv.wireless_mode)) //dual band + mlme_set_scan_to_timer(pmlmepriv, CONC_SCANNING_TIMEOUT_DUAL_BAND); + else //single band + mlme_set_scan_to_timer(pmlmepriv, CONC_SCANNING_TIMEOUT_SINGLE_BAND); + } else #endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE - _set_timer(&pmlmepriv->scan_to_timer, SCANNING_TIMEOUT); + mlme_set_scan_to_timer(pmlmepriv, SCANNING_TIMEOUT); rtw_led_control(padapter, LED_CTL_SITE_SURVEY); } else { @@ -3379,10 +3384,10 @@ _func_enter_; { //TODO: cancel timer and do timeout handler directly... //need to make timeout handlerOS independent - _set_timer(&pmlmepriv->scan_to_timer, 1); + mlme_set_scan_to_timer(pmlmepriv, 1); } else if (pcmd->res != H2C_SUCCESS) { - _set_timer(&pmlmepriv->scan_to_timer, 1); + mlme_set_scan_to_timer(pmlmepriv, 1); RT_TRACE(_module_rtl871x_cmd_c_,_drv_err_,("\n ********Error: MgntActrtw_set_802_11_bssid_LIST_SCAN Fail ************\n\n.")); } diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_debug.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_debug.c index 6413f5b921fd..b63b77990dc2 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_debug.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_debug.c @@ -579,6 +579,8 @@ int proc_get_trx_info(struct seq_file *m, void *v) struct recv_priv *precvpriv = &padapter->recvpriv; struct hw_xmit *phwxmit; + dump_os_queue(m, padapter); + DBG_871X_SEL_NL(m, "free_xmitbuf_cnt=%d, free_xmitframe_cnt=%d\n" , pxmitpriv->free_xmitbuf_cnt, pxmitpriv->free_xmitframe_cnt); DBG_871X_SEL_NL(m, "free_ext_xmitbuf_cnt=%d, free_xframe_ext_cnt=%d\n" diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_ieee80211.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_ieee80211.c index 789d30fa4ec0..7316cdcac13e 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_ieee80211.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_ieee80211.c @@ -1379,23 +1379,23 @@ void rtw_macaddr_cfg(u8 *mac_addr) } } - if (((mac[0]==0xff) &&(mac[1]==0xff) && (mac[2]==0xff) && - (mac[3]==0xff) && (mac[4]==0xff) &&(mac[5]==0xff)) || - ((mac[0]==0x0) && (mac[1]==0x0) && (mac[2]==0x0) && - (mac[3]==0x0) && (mac[4]==0x0) &&(mac[5]==0x0))) - { - mac[0] = 0x00; - mac[1] = 0xe0; - mac[2] = 0x4c; - mac[3] = 0x87; - mac[4] = 0x00; - mac[5] = 0x00; - // use default mac addresss - _rtw_memcpy(mac_addr, mac, ETH_ALEN); - DBG_871X("MAC Address from efuse error, assign default one !!!\n"); - } + if (((mac[0]==0xff) &&(mac[1]==0xff) && (mac[2]==0xff) && + (mac[3]==0xff) && (mac[4]==0xff) &&(mac[5]==0xff)) || + ((mac[0]==0x0) && (mac[1]==0x0) && (mac[2]==0x0) && + (mac[3]==0x0) && (mac[4]==0x0) &&(mac[5]==0x0))) + { + mac[0] = 0x00; + mac[1] = 0xe0; + mac[2] = 0x4c; + mac[3] = 0x87; + mac[4] = 0x00; + mac[5] = 0x00; + // use default mac addresss + _rtw_memcpy(mac_addr, mac, ETH_ALEN); + DBG_871X("MAC Address from efuse error, assign default one !!!\n"); + } - DBG_871X("rtw_macaddr_cfg MAC Address = "MAC_FMT"\n", MAC_ARG(mac_addr)); + DBG_871X("rtw_macaddr_cfg MAC Address = "MAC_FMT"\n", MAC_ARG(mac_addr)); } void dump_ies(u8 *buf, u32 buf_len) diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_mlme.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_mlme.c index 563f7d7d6b4e..fde65664c36a 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_mlme.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_mlme.c @@ -1201,46 +1201,35 @@ _func_exit_; void rtw_surveydone_event_callback(_adapter *adapter, u8 *pbuf) { _irqL irqL; - u8 timer_cancelled = _FALSE; + u8 timer_cancelled; struct mlme_priv *pmlmepriv = &(adapter->mlmepriv); - -#ifdef CONFIG_MLME_EXT +#ifdef CONFIG_MLME_EXT mlmeext_surveydone_event_callback(adapter); - #endif -_func_enter_; +_func_enter_; _enter_critical_bh(&pmlmepriv->lock, &irqL); - if(pmlmepriv->wps_probe_req_ie) - { + if (pmlmepriv->wps_probe_req_ie) { u32 free_len = pmlmepriv->wps_probe_req_ie_len; pmlmepriv->wps_probe_req_ie_len = 0; rtw_mfree(pmlmepriv->wps_probe_req_ie, free_len); - pmlmepriv->wps_probe_req_ie = NULL; + pmlmepriv->wps_probe_req_ie = NULL; } - + RT_TRACE(_module_rtl871x_mlme_c_,_drv_info_,("rtw_surveydone_event_callback: fw_state:%x\n\n", get_fwstate(pmlmepriv))); - - if (check_fwstate(pmlmepriv,_FW_UNDER_SURVEY)) - { - //u8 timer_cancelled; - timer_cancelled = _TRUE; - //_cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled); - - _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY); + if (check_fwstate(pmlmepriv,_FW_UNDER_SURVEY) == _FALSE) { + DBG_871X(FUNC_ADPT_FMT" fw_state:0x%x\n", FUNC_ADPT_ARG(adapter), get_fwstate(pmlmepriv)); + //rtw_warn_on(1); } - else { - - RT_TRACE(_module_rtl871x_mlme_c_,_drv_err_,("nic status =%x, survey done event comes too late!\n", get_fwstate(pmlmepriv))); - } - _exit_critical_bh(&pmlmepriv->lock, &irqL); - if(timer_cancelled) - _cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled); + _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY); + + _exit_critical_bh(&pmlmepriv->lock, &irqL); + _cancel_timer(&pmlmepriv->scan_to_timer, &timer_cancelled); _enter_critical_bh(&pmlmepriv->lock, &irqL); @@ -1258,8 +1247,8 @@ _func_enter_; if(rtw_select_and_join_from_scanned_queue(pmlmepriv)==_SUCCESS) { - _set_timer(&pmlmepriv->assoc_timer, MAX_JOIN_TIMEOUT ); - } + _set_timer(&pmlmepriv->assoc_timer, MAX_JOIN_TIMEOUT ); + } else { WLAN_BSSID_EX *pdev_network = &(adapter->registrypriv.dev_network); @@ -1757,7 +1746,7 @@ void rtw_scan_abort(_adapter *adapter) #ifdef CONFIG_PLATFORM_MSTAR //_clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY); set_survey_timer(pmlmeext, 0); - _set_timer(&pmlmepriv->scan_to_timer, 50); + mlme_set_scan_to_timer(pmlmepriv, 50); #endif rtw_indicate_scan_done(adapter, _TRUE); } @@ -3872,7 +3861,7 @@ void rtw_build_wmm_ie_ht(_adapter *padapter, u8 *out_ie, uint *pout_len) unsigned int rtw_restructure_ht_ie(_adapter *padapter, u8 *in_ie, u8 *out_ie, uint in_len, uint *pout_len, u8 channel) { u32 ielen, out_len; - HT_CAP_AMPDU_FACTOR max_rx_ampdu_factor; + u32 max_rx_ampdu_factor; unsigned char *p, *pframe; struct rtw_ieee80211_ht_cap ht_capie; u8 cbw40_enable = 0, stbc_rx_enable = 0, rf_type = 0, operation_bw=0; diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_mlme_ext.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_mlme_ext.c index a5dd76fc973c..3fcef9eabbf1 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_mlme_ext.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_mlme_ext.c @@ -8868,7 +8868,7 @@ void issue_action_BA(_adapter *padapter, unsigned char *raddr, unsigned char act u16 reason_code; u16 BA_timeout_value; u16 BA_starting_seqctrl; - HT_CAP_AMPDU_FACTOR max_rx_ampdu_factor; + u32 max_rx_ampdu_factor; struct xmit_frame *pmgntframe; struct pkt_attrib *pattrib; u8 *pframe; @@ -10969,10 +10969,27 @@ static void rtw_mlmeext_disconnect(_adapter *padapter) struct mlme_priv *pmlmepriv = &padapter->mlmepriv; struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); + WLAN_BSSID_EX *pnetwork = (WLAN_BSSID_EX*)(&(pmlmeinfo->network)); u8 state_backup = (pmlmeinfo->state&0x03); //set_opmode_cmd(padapter, infra_client_with_mlme); +#if 1 + /* + * For safety, prevent from keeping macid sleep. + * If we can sure all power mode enter/leave are paired, + * this check can be removed. + * Lucas@20131113 + */ + /* wakeup macid after disconnect. */ + { + struct sta_info *psta; + psta = rtw_get_stainfo(&padapter->stapriv, get_my_bssid(pnetwork)); + if (psta) + rtw_hal_macid_wakeup(padapter, psta->mac_id); + } +#endif + rtw_hal_set_hwreg(padapter, HW_VAR_MLME_DISCONNECT, 0); rtw_hal_set_hwreg(padapter, HW_VAR_BSSID, null_addr); @@ -11110,6 +11127,10 @@ void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res) set_sta_rate(padapter, psta); rtw_sta_media_status_rpt(padapter, psta, 1); + + /* wakeup macid after join bss successfully to ensure + the subsequent data frames can be sent out normally */ + rtw_hal_macid_wakeup(padapter, psta->mac_id); } if (rtw_port_switch_chk(padapter) == _TRUE) @@ -13949,7 +13970,23 @@ int rtw_chk_start_clnt_join(_adapter *padapter, u8 *ch, u8 *bw, u8 *offset) struct mlme_ext_priv *pbuddy_mlmeext; struct mlme_ext_info *pbuddy_pmlmeinfo; struct mlme_priv *pbuddy_mlmepriv; +#endif + if (!ch || !bw || !offset) { + connect_allow = _FALSE; + rtw_warn_on(1); + goto exit; + } + + if (cur_ch == 0) { + connect_allow = _FALSE; + DBG_871X_LEVEL(_drv_err_, FUNC_ADPT_FMT" cur_ch:%u\n" + , FUNC_ADPT_ARG(padapter), cur_ch); + rtw_warn_on(1); + goto exit; + } + +#ifdef CONFIG_CONCURRENT_MODE if (!rtw_buddy_adapter_up(padapter)) { goto exit; } @@ -14083,13 +14120,9 @@ int rtw_chk_start_clnt_join(_adapter *padapter, u8 *ch, u8 *bw, u8 *offset) } } -exit: #endif /* CONFIG_CONCURRENT_MODE */ - if (!ch || !bw || !offset) { - rtw_warn_on(1); - connect_allow = _FALSE; - } +exit: if (connect_allow == _TRUE) { DBG_871X("start_join_set_ch_bw: ch=%d, bwmode=%d, ch_offset=%d\n", cur_ch, cur_bw, cur_ch_offset); @@ -14196,11 +14229,7 @@ u8 set_chplan_hdl(_adapter *padapter, unsigned char *pbuf) init_channel_list(padapter, pmlmeext->channel_set, pmlmeext->max_chan_nums, &pmlmeext->channel_list); #ifdef CONFIG_IOCTL_CFG80211 - if ((padapter->rtw_wdev != NULL) && (padapter->rtw_wdev->wiphy)) { - struct regulatory_request request; - request.initiator = NL80211_REGDOM_SET_BY_DRIVER; - rtw_reg_notifier(padapter->rtw_wdev->wiphy, &request); - } + rtw_reg_notify_by_driver(padapter); #endif //CONFIG_IOCTL_CFG80211 return H2C_SUCCESS; diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_p2p.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_p2p.c index 986dae83bd5f..eaa3ea266e48 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_p2p.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_p2p.c @@ -3474,8 +3474,9 @@ _func_enter_; DBG_871X("%s, switch ch back to buddy's cur_channel=%d\n", __func__, pbuddy_mlmeext->cur_channel); set_channel_bwmode(padapter, pbuddy_mlmeext->cur_channel, pbuddy_mlmeext->cur_ch_offset, pbuddy_mlmeext->cur_bwmode); - - issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500); + + if (check_buddy_fwstate(padapter, WIFI_FW_STATION_STATE)) + issue_nulldata(pbuddy_adapter, NULL, 0, 3, 500); } else if( pwdinfo->driver_interface == DRIVER_WEXT ) { diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_sreset.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_sreset.c index 62a8adf7239d..e9010473b799 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_sreset.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_sreset.c @@ -267,8 +267,7 @@ void sreset_stop_adapter(_adapter *padapter) DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter)); - if (!rtw_netif_queue_stopped(padapter->pnetdev)) - rtw_netif_stop_queue(padapter->pnetdev); + rtw_netif_stop_queue(padapter->pnetdev); rtw_cancel_all_timer(padapter); @@ -307,11 +306,10 @@ void sreset_start_adapter(_adapter *padapter) tasklet_hi_schedule(&pxmitpriv->xmit_tasklet); #endif - _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000); - - if (rtw_netif_queue_stopped(padapter->pnetdev)) - rtw_netif_wake_queue(padapter->pnetdev); + if (is_primary_adapter(padapter)) + _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000); + rtw_netif_wake_queue(padapter->pnetdev); } void sreset_reset(_adapter *padapter) diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_sta_mgt.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_sta_mgt.c index f03f727d9ee6..2d266a2b24c5 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_sta_mgt.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_sta_mgt.c @@ -456,7 +456,7 @@ u32 rtw_free_stainfo(_adapter *padapter , struct sta_info *psta) struct xmit_priv *pxmitpriv= &padapter->xmitpriv; struct sta_priv *pstapriv = &padapter->stapriv; struct hw_xmit *phwxmit; - + int pending_qcnt[4]; _func_enter_; @@ -488,6 +488,7 @@ _func_enter_; rtw_list_delete(&(pstaxmitpriv->vo_q.tx_pending)); phwxmit = pxmitpriv->hwxmits; phwxmit->accnt -= pstaxmitpriv->vo_q.qcnt; + pending_qcnt[0] = pstaxmitpriv->vo_q.qcnt; pstaxmitpriv->vo_q.qcnt = 0; //_exit_critical_bh(&(pxmitpriv->vo_pending.lock), &irqL0); @@ -497,6 +498,7 @@ _func_enter_; rtw_list_delete(&(pstaxmitpriv->vi_q.tx_pending)); phwxmit = pxmitpriv->hwxmits+1; phwxmit->accnt -= pstaxmitpriv->vi_q.qcnt; + pending_qcnt[1] = pstaxmitpriv->vi_q.qcnt; pstaxmitpriv->vi_q.qcnt = 0; //_exit_critical_bh(&(pxmitpriv->vi_pending.lock), &irqL0); @@ -506,6 +508,7 @@ _func_enter_; rtw_list_delete(&(pstaxmitpriv->be_q.tx_pending)); phwxmit = pxmitpriv->hwxmits+2; phwxmit->accnt -= pstaxmitpriv->be_q.qcnt; + pending_qcnt[2] = pstaxmitpriv->be_q.qcnt; pstaxmitpriv->be_q.qcnt = 0; //_exit_critical_bh(&(pxmitpriv->be_pending.lock), &irqL0); @@ -515,9 +518,12 @@ _func_enter_; rtw_list_delete(&(pstaxmitpriv->bk_q.tx_pending)); phwxmit = pxmitpriv->hwxmits+3; phwxmit->accnt -= pstaxmitpriv->bk_q.qcnt; + pending_qcnt[3] = pstaxmitpriv->bk_q.qcnt; pstaxmitpriv->bk_q.qcnt = 0; //_exit_critical_bh(&(pxmitpriv->bk_pending.lock), &irqL0); - + + rtw_os_wake_queue_at_free_stainfo(padapter, pending_qcnt); + _exit_critical_bh(&pxmitpriv->lock, &irqL0); rtw_list_delete(&psta->hash_list); diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_xmit.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_xmit.c index e73e56a773b7..4b21cc6ca3bd 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_xmit.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_xmit.c @@ -4124,14 +4124,16 @@ static void dequeue_xmitframes_to_sleeping_queue(_adapter *padapter, struct sta_ { pxmitframe = LIST_CONTAINOR(plist, struct xmit_frame, list); - plist = get_next(plist); + plist = get_next(plist); + + pattrib = &pxmitframe->attrib; + + pattrib->triggered = 0; ret = xmitframe_enqueue_for_sleeping_sta(padapter, pxmitframe); if(_TRUE == ret) { - pattrib = &pxmitframe->attrib; - ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index)); ptxservq->qcnt--; diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/hal_intf.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/hal_intf.c index 8348b3854bc9..67febfcfa045 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/hal_intf.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/hal_intf.c @@ -702,32 +702,42 @@ s32 rtw_hal_is_disable_sw_channel_plan(PADAPTER padapter) return GET_HAL_DATA(padapter)->bDisableSWChannelPlan; } -s32 rtw_hal_macid_sleep(PADAPTER padapter, u32 macid) +s32 rtw_hal_macid_sleep(PADAPTER padapter, u8 macid) { u8 support; - support = _FALSE; rtw_hal_get_def_var(padapter, HAL_DEF_MACID_SLEEP, &support); if (_FALSE == support) return _FAIL; - rtw_hal_set_hwreg(padapter, HW_VAR_MACID_SLEEP, (u8*)&macid); + if (macid >= 32) { + DBG_871X_LEVEL(_drv_err_, FUNC_ADPT_FMT": Invalid macid(%u)\n", + FUNC_ADPT_ARG(padapter), macid); + return _FAIL; + } + + rtw_hal_set_hwreg(padapter, HW_VAR_MACID_SLEEP, &macid); return _SUCCESS; } -s32 rtw_hal_macid_wakeup(PADAPTER padapter, u32 macid) +s32 rtw_hal_macid_wakeup(PADAPTER padapter, u8 macid) { u8 support; - support = _FALSE; rtw_hal_get_def_var(padapter, HAL_DEF_MACID_SLEEP, &support); if (_FALSE == support) return _FAIL; - rtw_hal_set_hwreg(padapter, HW_VAR_MACID_WAKEUP, (u8*)&macid); + if (macid >= 32) { + DBG_871X_LEVEL(_drv_err_, FUNC_ADPT_FMT": Invalid macid(%u)\n", + FUNC_ADPT_ARG(padapter), macid); + return _FAIL; + } + + rtw_hal_set_hwreg(padapter, HW_VAR_MACID_WAKEUP, &macid); return _SUCCESS; } diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/rtl8188e_cmd.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/rtl8188e_cmd.c index 70b22c198478..cc763cfba00a 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/rtl8188e_cmd.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/rtl8188e_cmd.c @@ -44,9 +44,8 @@ static u8 _is_fw_read_cmd_down(_adapter* padapter, u8 msgbox_num) if(0 == valid ){ read_down = _TRUE; } -#ifdef CONFIG_WOWLAN - rtw_msleep_os(2); -#endif + else + rtw_msleep_os(1); }while( (!read_down) && (retry_cnts--)); return read_down; diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/rtl8188e_hal_init.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/rtl8188e_hal_init.c index 9086df1ceb5e..10dd48ade6e6 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/rtl8188e_hal_init.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/rtl8188e_hal_init.c @@ -3950,6 +3950,67 @@ _func_enter_; rtw_write8(adapter, REG_RESP_SIFS_OFDM+1, val[0]); } break; + + case HW_VAR_MACID_SLEEP: + { + u32 reg_macid_sleep; + u8 bit_shift; + u8 id = *(u8*)val; + u32 val32; + + if (id < 32){ + reg_macid_sleep = REG_MACID_PAUSE_0; + bit_shift = id; + } else if (id < 64) { + reg_macid_sleep = REG_MACID_PAUSE_1; + bit_shift = id-32; + } else { + rtw_warn_on(1); + break; + } + + val32 = rtw_read32(adapter, reg_macid_sleep); + DBG_8192C(FUNC_ADPT_FMT ": [HW_VAR_MACID_SLEEP] macid=%d, org reg_0x%03x=0x%08X\n", + FUNC_ADPT_ARG(adapter), id, reg_macid_sleep, val32); + + if (val32 & BIT(bit_shift)) + break; + + val32 |= BIT(bit_shift); + rtw_write32(adapter, reg_macid_sleep, val32); + } + break; + + case HW_VAR_MACID_WAKEUP: + { + u32 reg_macid_sleep; + u8 bit_shift; + u8 id = *(u8*)val; + u32 val32; + + if (id < 32){ + reg_macid_sleep = REG_MACID_PAUSE_0; + bit_shift = id; + } else if (id < 64) { + reg_macid_sleep = REG_MACID_PAUSE_1; + bit_shift = id-32; + } else { + rtw_warn_on(1); + break; + } + + val32 = rtw_read32(adapter, reg_macid_sleep); + DBG_8192C(FUNC_ADPT_FMT ": [HW_VAR_MACID_WAKEUP] macid=%d, org reg_0x%03x=0x%08X\n", + FUNC_ADPT_ARG(adapter), id, reg_macid_sleep, val32); + + if (!(val32 & BIT(bit_shift))) + break; + + val32 &= ~BIT(bit_shift); + rtw_write32(adapter, reg_macid_sleep, val32); + } + break; + default: SetHwReg(adapter, variable, val); break; @@ -3958,6 +4019,80 @@ _func_enter_; _func_exit_; } +struct qinfo_88e { + u32 head:8; + u32 pkt_num:8; + u32 tail:8; + u32 ac:2; + u32 macid:6; +}; + +struct bcn_qinfo_88e { + u16 head:8; + u16 pkt_num:8; +}; + +void dump_qinfo_88e(void *sel, struct qinfo_88e *info, const char *tag) +{ + //if (info->pkt_num) + DBG_871X_SEL_NL(sel, "%shead:0x%02x, tail:0x%02x, pkt_num:%u, macid:%u, ac:%u\n" + , tag ? tag : "", info->head, info->tail, info->pkt_num, info->macid, info->ac + ); +} + +void dump_bcn_qinfo_88e(void *sel, struct bcn_qinfo_88e *info, const char *tag) +{ + //if (info->pkt_num) + DBG_871X_SEL_NL(sel, "%shead:0x%02x, pkt_num:%u\n" + , tag ? tag : "", info->head, info->pkt_num + ); +} + +void dump_mac_qinfo_88e(void *sel, _adapter *adapter) +{ + u32 q0_info; + u32 q1_info; + u32 q2_info; + u32 q3_info; + /* + u32 q4_info; + u32 q5_info; + u32 q6_info; + u32 q7_info; + */ + u32 mg_q_info; + u32 hi_q_info; + u16 bcn_q_info; + + q0_info = rtw_read32(adapter, REG_Q0_INFO); + q1_info = rtw_read32(adapter, REG_Q1_INFO); + q2_info = rtw_read32(adapter, REG_Q2_INFO); + q3_info = rtw_read32(adapter, REG_Q3_INFO); + /* + q4_info = rtw_read32(adapter, REG_Q4_INFO); + q5_info = rtw_read32(adapter, REG_Q5_INFO); + q6_info = rtw_read32(adapter, REG_Q6_INFO); + q7_info = rtw_read32(adapter, REG_Q7_INFO); + */ + mg_q_info = rtw_read32(adapter, REG_MGQ_INFO); + hi_q_info = rtw_read32(adapter, REG_HGQ_INFO); + bcn_q_info = rtw_read16(adapter, REG_BCNQ_INFO); + + dump_qinfo_88e(sel, (struct qinfo_88e *)&q0_info, "Q0 "); + dump_qinfo_88e(sel, (struct qinfo_88e *)&q1_info, "Q1 "); + dump_qinfo_88e(sel, (struct qinfo_88e *)&q2_info, "Q2 "); + dump_qinfo_88e(sel, (struct qinfo_88e *)&q3_info, "Q3 "); + /* + dump_qinfo_88e(sel, (struct qinfo_88e *)&q4_info, "Q4 "); + dump_qinfo_88e(sel, (struct qinfo_88e *)&q5_info, "Q5 "); + dump_qinfo_88e(sel, (struct qinfo_88e *)&q6_info, "Q6 "); + dump_qinfo_88e(sel, (struct qinfo_88e *)&q7_info, "Q7 "); + */ + dump_qinfo_88e(sel, (struct qinfo_88e *)&mg_q_info, "MG "); + dump_qinfo_88e(sel, (struct qinfo_88e *)&hi_q_info, "HI "); + dump_bcn_qinfo_88e(sel, (struct bcn_qinfo_88e *)&bcn_q_info, "BCN "); +} + void GetHwReg8188E(_adapter *adapter, u8 variable, u8 *val) { HAL_DATA_TYPE *HalData = GET_HAL_DATA(adapter); @@ -3968,6 +4103,9 @@ _func_enter_; case HW_VAR_SYS_CLKR: *val = rtw_read8(adapter, REG_SYS_CLKR); break; + case HW_VAR_DUMP_MAC_QUEUE_INFO: + dump_mac_qinfo_88e(val, adapter); + break; default: GetHwReg(adapter, variable, val); break; @@ -3976,3 +4114,27 @@ _func_enter_; _func_exit_; } +u8 +GetHalDefVar8188E( + IN PADAPTER Adapter, + IN HAL_DEF_VARIABLE eVariable, + IN PVOID pValue + ) +{ + HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); + u8 bResult = _SUCCESS; + + switch(eVariable) + { + case HAL_DEF_MACID_SLEEP: + *(u8*)pValue = _TRUE; // support macid sleep + break; + + default: + bResult = GetHalDefVar(Adapter, eVariable, pValue); + break; + } + + return bResult; +} + diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/usb/usb_halinit.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/usb/usb_halinit.c index 2ec19037812a..b384481b6c00 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/usb/usb_halinit.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/usb/usb_halinit.c @@ -357,9 +357,9 @@ _InitQueueReservedPage( HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter); struct registry_priv *pregistrypriv = &Adapter->registrypriv; u32 outEPNum = (u32)pHalData->OutEpNumber; - u32 numHQ = NORMAL_PAGE_NUM_HPQ_88E; - u32 numLQ = NORMAL_PAGE_NUM_LPQ_88E; - u32 numNQ = NORMAL_PAGE_NUM_NPQ_88E; + u32 numHQ = 0; + u32 numLQ = 0; + u32 numNQ = 0; u32 numPubQ = 0x00; u32 value32; u8 value8; @@ -367,20 +367,27 @@ _InitQueueReservedPage( if(bWiFiConfig || pregistrypriv->qos_opt_enable) { - if (pHalData->OutEpQueueSel & TX_SELE_HQ) - { - numHQ = WMM_NORMAL_PAGE_NUM_HPQ_88E; - } + if (pHalData->OutEpQueueSel & TX_SELE_HQ) + numHQ = WMM_NORMAL_PAGE_NUM_HPQ_88E; - if (pHalData->OutEpQueueSel & TX_SELE_LQ) - { - numLQ = WMM_NORMAL_PAGE_NUM_LPQ_88E; - } + if (pHalData->OutEpQueueSel & TX_SELE_LQ) + numLQ = WMM_NORMAL_PAGE_NUM_LPQ_88E; // NOTE: This step shall be proceed before writting REG_RQPN. - if (pHalData->OutEpQueueSel & TX_SELE_NQ) { - numNQ = WMM_NORMAL_PAGE_NUM_NPQ_88E; - } + if (pHalData->OutEpQueueSel & TX_SELE_NQ) + numNQ = WMM_NORMAL_PAGE_NUM_NPQ_88E; + } + else + { + if(pHalData->OutEpQueueSel & TX_SELE_HQ) + numHQ = NORMAL_PAGE_NUM_HPQ_88E; + + if(pHalData->OutEpQueueSel & TX_SELE_LQ) + numLQ = NORMAL_PAGE_NUM_LPQ_88E; + + // NOTE: This step shall be proceed before writting REG_RQPN. + if(pHalData->OutEpQueueSel & TX_SELE_NQ) + numNQ = NORMAL_PAGE_NUM_NPQ_88E; } value8 = (u8)_NPQ(numNQ); @@ -3237,16 +3244,42 @@ static void hw_var_set_mlme_disconnect(PADAPTER Adapter, u8 variable, u8* val) static void hw_var_set_mlme_sitesurvey(PADAPTER Adapter, u8 variable, u8* val) { #ifdef CONFIG_CONCURRENT_MODE - + struct mlme_priv *pmlmepriv=&(Adapter->mlmepriv); struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv; struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); + u32 value_rcr, rcr_clear_bit, value_rxfltmap2; + +#ifdef CONFIG_FIND_BEST_CHANNEL + rcr_clear_bit = (RCR_CBSSID_BCN | RCR_CBSSID_DATA); + // Recieve all data frames + value_rxfltmap2 = 0xFFFF; +#else /* CONFIG_FIND_BEST_CHANNEL */ + rcr_clear_bit = RCR_CBSSID_BCN; + //config RCR to receive different BSSID & not to receive data frame + value_rxfltmap2 = 0; +#endif /* CONFIG_FIND_BEST_CHANNEL */ + + if( (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE) + #ifdef CONFIG_CONCURRENT_MODE + || (check_buddy_fwstate(Adapter, WIFI_AP_STATE) == _TRUE) + #endif + ){ + rcr_clear_bit = RCR_CBSSID_BCN; + } +#ifdef CONFIG_TDLS + // TDLS will clear RCR_CBSSID_DATA bit for connection. + else if (Adapter->tdlsinfo.link_established == _TRUE) + { + rcr_clear_bit = RCR_CBSSID_BCN; + } +#endif // CONFIG_TDLS + value_rcr = rtw_read32(Adapter, REG_RCR); if(*((u8 *)val))//under sitesurvey { - //config RCR to receive different BSSID & not to receive data frame - u32 v = rtw_read32(Adapter, REG_RCR); - v &= ~(RCR_CBSSID_BCN); - rtw_write32(Adapter, REG_RCR, v); + value_rcr &= ~(rcr_clear_bit); + rtw_write32(Adapter, REG_RCR, value_rcr); + rtw_write16(Adapter, REG_RXFLTMAP2, value_rxfltmap2); //disable update TSF if((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE) @@ -3258,11 +3291,11 @@ static void hw_var_set_mlme_sitesurvey(PADAPTER Adapter, u8 variable, u8* val) else { rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); - } + } } - + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) && - check_buddy_fwstate(Adapter, _FW_LINKED)) + check_buddy_fwstate(Adapter, _FW_LINKED)) { StopTxBeacon(Adapter); } @@ -3271,7 +3304,9 @@ static void hw_var_set_mlme_sitesurvey(PADAPTER Adapter, u8 variable, u8* val) { //enable to rx data frame //write32(Adapter, REG_RCR, read32(padapter, REG_RCR)|RCR_ADF); - rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF); + if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE)) + || check_buddy_fwstate(Adapter, (_FW_LINKED|WIFI_AP_STATE))) + rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF); //enable update TSF if(Adapter->iface_type == IFACE_PORT1) @@ -3279,15 +3314,16 @@ static void hw_var_set_mlme_sitesurvey(PADAPTER Adapter, u8 variable, u8* val) else rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); - + value_rcr |= rcr_clear_bit; + rtw_write32(Adapter, REG_RCR, value_rcr); + if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) && check_buddy_fwstate(Adapter, _FW_LINKED)) { - ResumeTxBeacon(Adapter); + ResumeTxBeacon(Adapter); } } -#endif +#endif } static void hw_var_set_mlme_join(PADAPTER Adapter, u8 variable, u8* val) @@ -3492,55 +3528,76 @@ _func_enter_; #ifdef CONFIG_CONCURRENT_MODE hw_var_set_mlme_sitesurvey(Adapter, variable, val); #else - if(*((u8 *)val))//under sitesurvey { + u32 value_rcr, rcr_clear_bit, value_rxfltmap2; +#ifdef CONFIG_FIND_BEST_CHANNEL + + rcr_clear_bit = (RCR_CBSSID_BCN | RCR_CBSSID_DATA); + + // Recieve all data frames + value_rxfltmap2 = 0xFFFF; + +#else /* CONFIG_FIND_BEST_CHANNEL */ + + rcr_clear_bit = RCR_CBSSID_BCN; + //config RCR to receive different BSSID & not to receive data frame - u32 v = rtw_read32(Adapter, REG_RCR); - v &= ~(RCR_CBSSID_BCN); - rtw_write32(Adapter, REG_RCR, v); - //reject all data frame - rtw_write16(Adapter, REG_RXFLTMAP2,0x00); - - //disable update TSF - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); - } - else//sitesurvey done - { - struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv; - struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); - - if ((is_client_associated_to_ap(Adapter) == _TRUE) || - ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) ) - { - //enable to rx data frame - //rtw_write32(Adapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF); - rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF); - - //enable update TSF - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); + value_rxfltmap2 = 0; + +#endif /* CONFIG_FIND_BEST_CHANNEL */ + + if (check_fwstate(&Adapter->mlmepriv, WIFI_AP_STATE) == _TRUE) { + rcr_clear_bit = RCR_CBSSID_BCN; + } + #ifdef CONFIG_TDLS + // TDLS will clear RCR_CBSSID_DATA bit for connection. + else if (Adapter->tdlsinfo.link_established == _TRUE) { + rcr_clear_bit = RCR_CBSSID_BCN; } - else if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) + #endif // CONFIG_TDLS + + value_rcr = rtw_read32(Adapter, REG_RCR); + if(*((u8 *)val))//under sitesurvey { - //rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_ADF); - rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF); - - //enable update TSF - rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); + //config RCR to receive different BSSID & not to receive data frame + value_rcr &= ~(rcr_clear_bit); + rtw_write32(Adapter, REG_RCR, value_rcr); + rtw_write16(Adapter, REG_RXFLTMAP2, value_rxfltmap2); + + //disable update TSF + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4)); } - - if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); - else + else//sitesurvey done { - if(Adapter->in_cta_test) + struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv; + struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info); + + if ((is_client_associated_to_ap(Adapter) == _TRUE) || + ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) ) { + //enable to rx data frame + //rtw_write32(Adapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF); + rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF); + + //enable update TSF + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); + } + else if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE) + { + //rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_ADF); + rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF); + + //enable update TSF + rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4))); + } + + value_rcr |= rcr_clear_bit; + if(((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE) && (Adapter->in_cta_test)) { u32 v = rtw_read32(Adapter, REG_RCR); v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN );//| RCR_ADF rtw_write32(Adapter, REG_RCR, v); - } - else - { - rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN); + } else { + rtw_write32(Adapter, REG_RCR, value_rcr); } } } @@ -4198,7 +4255,7 @@ _func_enter_; *val = pHalData->bMacPwrCtrlOn; break; case HW_VAR_CHK_HI_QUEUE_EMPTY: - *val = ((rtw_read32(Adapter, REG_HGQ_INFORMATION)&0x0000ff00)==0) ? _TRUE:_FALSE; + *val = ((rtw_read32(Adapter, REG_HGQ_INFO)&0x0000ff00)==0) ? _TRUE:_FALSE; break; default: GetHwReg8188E(Adapter, variable, val); @@ -4343,7 +4400,7 @@ GetHalDefVar8188EUsb( #endif //(RATE_ADAPTIVE_SUPPORT == 1) break; default: - bResult = GetHalDefVar(Adapter, eVariable, pValue); + bResult = GetHalDefVar8188E(Adapter, eVariable, pValue); break; } diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/usb/usb_ops_linux.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/usb/usb_ops_linux.c index b40e3b8a2aaa..51d33c058041 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/usb/usb_ops_linux.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/usb/usb_ops_linux.c @@ -1203,9 +1203,6 @@ void rtl8188eu_xmit_tasklet(void *priv) _adapter *padapter = (_adapter*)priv; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - if(check_fwstate(&padapter->mlmepriv, _FW_UNDER_SURVEY) == _TRUE) - return; - while(1) { if (RTW_CANNOT_TX(padapter)) @@ -1214,6 +1211,14 @@ void rtl8188eu_xmit_tasklet(void *priv) break; } + if(check_fwstate(&padapter->mlmepriv, _FW_UNDER_SURVEY) == _TRUE + #ifdef CONFIG_CONCURRENT_MODE + || check_buddy_fwstate(padapter, _FW_UNDER_SURVEY) == _TRUE + #endif + ) { + break; + } + ret = rtl8188eu_xmitframe_complete(padapter, pxmitpriv, NULL); if(ret==_FALSE) diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/ifcfg-wlan0 b/drivers/net/wireless/rockchip_wlan/rtl8188eu/ifcfg-wlan0 new file mode 100755 index 000000000000..20dcbec2b1ae --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/ifcfg-wlan0 @@ -0,0 +1,4 @@ +#DHCP client +DEVICE=wlan0 +BOOTPROTO=dhcp +ONBOOT=yes \ No newline at end of file diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/hal_com_reg.h b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/hal_com_reg.h index a8fc3dfcc328..b29fa34b6bad 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/hal_com_reg.h +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/hal_com_reg.h @@ -226,13 +226,23 @@ // 0x0400h ~ 0x047Fh Protocol Configuration // //----------------------------------------------------- -#define REG_VOQ_INFORMATION 0x0400 -#define REG_VIQ_INFORMATION 0x0404 -#define REG_BEQ_INFORMATION 0x0408 -#define REG_BKQ_INFORMATION 0x040C -#define REG_MGQ_INFORMATION 0x0410 -#define REG_HGQ_INFORMATION 0x0414 -#define REG_BCNQ_INFORMATION 0x0418 + +/* 92C, 92D */ +#define REG_VOQ_INFO 0x0400 +#define REG_VIQ_INFO 0x0404 +#define REG_BEQ_INFO 0x0408 +#define REG_BKQ_INFO 0x040C + +/* 88E, 8723A, 8812A, 92E, 8723B */ +#define REG_Q0_INFO 0x400 +#define REG_Q1_INFO 0x404 +#define REG_Q2_INFO 0x408 +#define REG_Q3_INFO 0x40C + +#define REG_MGQ_INFO 0x0410 +#define REG_HGQ_INFO 0x0414 +#define REG_BCNQ_INFO 0x0418 + #define REG_TXPKT_EMPTY 0x041A #define REG_CPU_MGQ_INFORMATION 0x041C #define REG_FWHW_TXQ_CTRL 0x0420 @@ -258,6 +268,12 @@ #define REG_FAST_EDCA_CTRL 0x0460 #define REG_RD_RESP_PKT_TH 0x0463 +/* 8723A, 8812A, 92E, 8723B */ +#define REG_Q4_INFO 0x468 +#define REG_Q5_INFO 0x46C +#define REG_Q6_INFO 0x470 +#define REG_Q7_INFO 0x474 + #define REG_INIRTS_RATE_SEL 0x0480 #define REG_INIDATA_RATE_SEL 0x0484 diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/hal_intf.h b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/hal_intf.h index 0c3b95979dbb..4fd09fcea40f 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/hal_intf.h +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/hal_intf.h @@ -146,6 +146,7 @@ typedef enum _HW_VARIABLES{ HW_VAR_DL_RSVD_PAGE, HW_VAR_MACID_SLEEP, HW_VAR_MACID_WAKEUP, + HW_VAR_DUMP_MAC_QUEUE_INFO, }HW_VARIABLES; typedef enum _HAL_DEF_VARIABLE{ @@ -623,8 +624,8 @@ c2h_id_filter rtw_hal_c2h_id_filter_ccx(_adapter *adapter); s32 rtw_hal_is_disable_sw_channel_plan(PADAPTER padapter); -s32 rtw_hal_macid_sleep(PADAPTER padapter, u32 macid); -s32 rtw_hal_macid_wakeup(PADAPTER padapter, u32 macid); +s32 rtw_hal_macid_sleep(PADAPTER padapter, u8 macid); +s32 rtw_hal_macid_wakeup(PADAPTER padapter, u8 macid); #ifdef CONFIG_BT_COEXIST s32 rtw_hal_fill_h2c_cmd(PADAPTER, u8 ElementID, u32 CmdLen, u8 *pCmdBuffer); diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/ioctl_cfg80211.h b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/ioctl_cfg80211.h index 2cae2c53f45a..d21341d65385 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/ioctl_cfg80211.h +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/ioctl_cfg80211.h @@ -143,8 +143,10 @@ bool rtw_cfg80211_pwr_mgmt(_adapter *adapter); #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) +#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, gfp) #endif #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0)) && !defined(COMPAT_KERNEL_RELEASE) diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtl8188e_hal.h b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtl8188e_hal.h index d203258aaf03..bf9a8bd55d24 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtl8188e_hal.h +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtl8188e_hal.h @@ -295,6 +295,7 @@ void _InitTransferPageSize(PADAPTER padapter); void SetHwReg8188E(PADAPTER padapter, u8 variable, u8 *val); void GetHwReg8188E(PADAPTER padapter, u8 variable, u8 *val); +u8 GetHalDefVar8188E(PADAPTER Adapter, HAL_DEF_VARIABLE eVariable, PVOID pValue); #endif //__RTL8188E_HAL_H__ diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtl8188e_spec.h b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtl8188e_spec.h index 0fb93b59a994..0c7ef4fe3920 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtl8188e_spec.h +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtl8188e_spec.h @@ -49,6 +49,8 @@ #define REG_HISRE_88E 0x00BC //RTL8188E #define REG_MACID_NO_LINK_0 0x0484 #define REG_MACID_NO_LINK_1 0x0488 +#define REG_MACID_PAUSE_0 0x048c +#define REG_MACID_PAUSE_1 0x0490 //----------------------------------------------------- // diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_mlme.h b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_mlme.h index 1a6a9eb3928c..4e0642a2778d 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_mlme.h +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_mlme.h @@ -30,6 +30,10 @@ // Increase the scanning timeout because of increasing the SURVEY_TO value. #define SCANNING_TIMEOUT 8000 +#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE +#define CONC_SCANNING_TIMEOUT_SINGLE_BAND 10000 +#define CONC_SCANNING_TIMEOUT_DUAL_BAND 15000 +#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE #ifdef PALTFORM_OS_WINCE #define SCANQUEUE_LIFETIME 12000000 // unit:us @@ -624,6 +628,12 @@ struct mlme_priv { u32 timeBcnInfoChkStart; }; +#define mlme_set_scan_to_timer(mlme, ms) \ + do { \ + /* DBG_871X("%s set_scan_to_timer(%p, %d)\n", __FUNCTION__, (mlme), (ms)); */ \ + _set_timer(&(mlme)->scan_to_timer, (ms)); \ + } while(0) + #define rtw_mlme_set_auto_scan_int(adapter, ms) \ do { \ adapter->mlmepriv.auto_scan_int_ms = ms; \ diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_version.h b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_version.h old mode 100644 new mode 100755 index 9f7c48be58f3..2d5046f64e45 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_version.h +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_version.h @@ -1 +1 @@ -#define DRIVERVERSION "v4.3.0.5_11894.20140718_beta" +#define DRIVERVERSION "v4.3.0.7_12758.20141114" diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_wifi_regd.h b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_wifi_regd.h index d69653d81d45..aea6365290f8 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_wifi_regd.h +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_wifi_regd.h @@ -19,16 +19,8 @@ enum country_code_type_t { COUNTRY_CODE_MAX }; -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)) -int rtw_regd_init(_adapter *padapter, - void (*reg_notifier)(struct wiphy *wiphy, - struct regulatory_request *request)); -void rtw_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request); -#else -int rtw_regd_init(_adapter *padapter, - int (*reg_notifier)(struct wiphy *wiphy, - struct regulatory_request *request)); -int rtw_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request); -#endif +int rtw_regd_init(_adapter *padapter); +void rtw_reg_notify_by_driver(_adapter *adapter); + +#endif /* __RTW_WIFI_REGD_H__ */ -#endif diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/xmit_osdep.h b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/xmit_osdep.h index 79d0a8864bfe..d489ebfcf642 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/xmit_osdep.h +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/include/xmit_osdep.h @@ -92,5 +92,9 @@ extern sint rtw_endofpktfile (struct pkt_file *pfile); extern void rtw_os_pkt_complete(_adapter *padapter, _pkt *pkt); extern void rtw_os_xmit_complete(_adapter *padapter, struct xmit_frame *pxframe); +void rtw_os_wake_queue_at_free_stainfo(_adapter *padapter, int *qcnt_freed); + +void dump_os_queue(void *sel, _adapter *padapter); + #endif //__XMIT_OSDEP_H_ diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/ioctl_cfg80211.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/ioctl_cfg80211.c index 1a95cf55eb71..1a01894444c9 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/ioctl_cfg80211.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/ioctl_cfg80211.c @@ -667,6 +667,11 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter) struct wlan_network *cur_network = &(pmlmepriv->cur_network); struct wireless_dev *pwdev = padapter->rtw_wdev; struct cfg80211_bss *bss = NULL; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) + struct wiphy *wiphy = pwdev->wiphy; + int freq = (int)cur_network->network.Configuration.DSConfig; + struct ieee80211_channel *chan; +#endif DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter)); if (pwdev->iftype != NL80211_IFTYPE_ADHOC) @@ -718,7 +723,12 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter) DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" BSS not found !!\n", FUNC_ADPT_ARG(padapter)); } //notify cfg80211 that device joined an IBSS +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0)) + chan = ieee80211_get_channel(wiphy, freq); + cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, chan, GFP_ATOMIC); +#else cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, GFP_ATOMIC); +#endif } void rtw_cfg80211_indicate_connect(_adapter *padapter) @@ -817,14 +827,18 @@ check_bss: } else { + #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0) || defined(COMPAT_KERNEL_RELEASE) DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state); + #endif cfg80211_connect_result(padapter->pnetdev, cur_network->network.MacAddress , pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2 , pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2 , pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6 , pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6 , WLAN_STATUS_SUCCESS, GFP_ATOMIC); + #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0) || defined(COMPAT_KERNEL_RELEASE) DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state); + #endif } } @@ -863,6 +877,7 @@ void rtw_cfg80211_indicate_disconnect(_adapter *padapter) #endif //CONFIG_P2P if (!padapter->mlmepriv.not_indic_disco) { + #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0) || defined(COMPAT_KERNEL_RELEASE) DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state); if(pwdev->sme_state==CFG80211_SME_CONNECTING) @@ -874,6 +889,14 @@ void rtw_cfg80211_indicate_disconnect(_adapter *padapter) //DBG_8192C("pwdev->sme_state=%d\n", pwdev->sme_state); DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state); + #else + + if(check_fwstate(&padapter->mlmepriv, _FW_LINKED)) + cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC); + else + cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0, + WLAN_STATUS_UNSPECIFIED_FAILURE, GFP_ATOMIC/*GFP_KERNEL*/); + #endif } } @@ -1543,13 +1566,13 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev, if (params->seq_len && params->seq) { - _rtw_memcpy(param->u.crypt.seq, params->seq, params->seq_len); + _rtw_memcpy(param->u.crypt.seq, (u8 *)params->seq, params->seq_len); } if(params->key_len && params->key) { param->u.crypt.key_len = params->key_len; - _rtw_memcpy(param->u.crypt.key, params->key, params->key_len); + _rtw_memcpy(param->u.crypt.key, (u8 *)params->key, params->key_len); } if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE) @@ -1676,9 +1699,13 @@ static int cfg80211_rtw_set_default_key(struct wiphy *wiphy, } -static int cfg80211_rtw_get_station(struct wiphy *wiphy, - struct net_device *ndev, - u8 *mac, struct station_info *sinfo) +static int cfg80211_rtw_get_station(struct wiphy *wiphy, struct net_device *ndev, +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0)) + u8 *mac, +#else + const u8 *mac, +#endif + struct station_info *sinfo) { int ret = 0; _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev); @@ -1694,7 +1721,7 @@ static int cfg80211_rtw_get_station(struct wiphy *wiphy, goto exit; } - psta = rtw_get_stainfo(pstapriv, mac); + psta = rtw_get_stainfo(pstapriv, (u8 *)mac); if (psta == NULL) { DBG_8192C("%s, sta_info is null\n", __func__); ret = -ENOENT; @@ -1712,7 +1739,7 @@ static int cfg80211_rtw_get_station(struct wiphy *wiphy, { struct wlan_network *cur_network = &(pmlmepriv->cur_network); - if (_rtw_memcmp(mac, cur_network->network.MacAddress, ETH_ALEN) == _FALSE) { + if (_rtw_memcmp((u8 *)mac, cur_network->network.MacAddress, ETH_ALEN) == _FALSE) { DBG_871X("%s, mismatch bssid="MAC_FMT"\n", __func__, MAC_ARG(cur_network->network.MacAddress)); ret = -ENOENT; goto exit; @@ -2320,18 +2347,15 @@ if (padapter->registrypriv.mp_mode == 1) #endif /* CONFIG_CONCURRENT_MODE */ #ifdef CONFIG_P2P - if( pwdinfo->driver_interface == DRIVER_CFG80211 ) + if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE)) { - if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE)) - { - rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH); - rtw_free_network_queue(padapter, _TRUE); + rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH); + rtw_free_network_queue(padapter, _TRUE); - if(social_channel == 0) - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE); - else - rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_SOCIAL_LAST); - } + if(social_channel == 0) + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE); + else + rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_SOCIAL_LAST); } #endif //CONFIG_P2P @@ -2867,7 +2891,7 @@ static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *ndev, _rtw_memset(&ndis_ssid, 0, sizeof(NDIS_802_11_SSID)); ndis_ssid.SsidLength = params->ssid_len; - _rtw_memcpy(ndis_ssid.Ssid, params->ssid, params->ssid_len); + _rtw_memcpy(ndis_ssid.Ssid, (u8 *)params->ssid, params->ssid_len); //DBG_8192C("ssid=%s, len=%zu\n", ndis_ssid.Ssid, params->ssid_len); @@ -3012,7 +3036,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, _rtw_memset(&ndis_ssid, 0, sizeof(NDIS_802_11_SSID)); ndis_ssid.SsidLength = sme->ssid_len; - _rtw_memcpy(ndis_ssid.Ssid, sme->ssid, sme->ssid_len); + _rtw_memcpy(ndis_ssid.Ssid, (u8 *)sme->ssid, sme->ssid_len); DBG_8192C("ssid=%s, len=%zu\n", ndis_ssid.Ssid, sme->ssid_len); @@ -3066,7 +3090,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, DBG_8192C("%s, ie_len=%zu\n", __func__, sme->ie_len); - ret = rtw_cfg80211_set_wpa_ie(padapter, sme->ie, sme->ie_len); + ret = rtw_cfg80211_set_wpa_ie(padapter, (u8 *)sme->ie, sme->ie_len); if (ret < 0) goto exit; @@ -3162,7 +3186,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev, //rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus); - if (rtw_set_802_11_connect(padapter, sme->bssid, &ndis_ssid) == _FALSE) { + if (rtw_set_802_11_connect(padapter, (u8 *)sme->bssid, &ndis_ssid) == _FALSE) { ret = -1; goto exit; } @@ -3303,7 +3327,7 @@ static int cfg80211_rtw_set_pmksa(struct wiphy *wiphy, DBG_871X(FUNC_NDEV_FMT" "MAC_FMT" "KEY_FMT"\n", FUNC_NDEV_ARG(ndev) , MAC_ARG(pmksa->bssid), KEY_ARG(pmksa->pmkid)); - if ( _rtw_memcmp( pmksa->bssid, strZeroMacAddress, ETH_ALEN ) == _TRUE ) + if ( _rtw_memcmp((u8 *)pmksa->bssid, strZeroMacAddress, ETH_ALEN ) == _TRUE ) { return -EINVAL; } @@ -3318,11 +3342,11 @@ static int cfg80211_rtw_set_pmksa(struct wiphy *wiphy, //overwrite PMKID for(index=0 ; indexPMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE ) + if( _rtw_memcmp(psecuritypriv->PMKIDList[index].Bssid, (u8 *)pmksa->bssid, ETH_ALEN) ==_TRUE ) { // BSSID is matched, the same AP => rewrite with new PMKID. DBG_871X(FUNC_NDEV_FMT" BSSID exists in the PMKList.\n", FUNC_NDEV_ARG(ndev)); - _rtw_memcpy( psecuritypriv->PMKIDList[index].PMKID, pmksa->pmkid, WLAN_PMKID_LEN); + _rtw_memcpy( psecuritypriv->PMKIDList[index].PMKID, (u8 *)pmksa->pmkid, WLAN_PMKID_LEN); psecuritypriv->PMKIDList[index].bUsed = _TRUE; psecuritypriv->PMKIDIndex = index+1; blInserted = _TRUE; @@ -3336,8 +3360,8 @@ static int cfg80211_rtw_set_pmksa(struct wiphy *wiphy, DBG_871X(FUNC_NDEV_FMT" Use the new entry index = %d for this PMKID.\n", FUNC_NDEV_ARG(ndev), psecuritypriv->PMKIDIndex ); - _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, pmksa->bssid, ETH_ALEN); - _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].PMKID, pmksa->pmkid, WLAN_PMKID_LEN); + _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, (u8 *)pmksa->bssid, ETH_ALEN); + _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].PMKID, (u8 *)pmksa->pmkid, WLAN_PMKID_LEN); psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].bUsed = _TRUE; psecuritypriv->PMKIDIndex++ ; @@ -3363,10 +3387,10 @@ static int cfg80211_rtw_del_pmksa(struct wiphy *wiphy, for(index=0 ; indexPMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE ) + if( _rtw_memcmp(psecuritypriv->PMKIDList[index].Bssid, (u8 *)pmksa->bssid, ETH_ALEN) ==_TRUE ) { // BSSID is matched, the same AP => Remove this PMKID information and reset it. - _rtw_memset( psecuritypriv->PMKIDList[index].Bssid, 0x00, ETH_ALEN ); - _rtw_memset( psecuritypriv->PMKIDList[index].PMKID, 0x00, WLAN_PMKID_LEN ); + _rtw_memset(psecuritypriv->PMKIDList[index].Bssid, 0x00, ETH_ALEN ); + _rtw_memset(psecuritypriv->PMKIDList[index].PMKID, 0x00, WLAN_PMKID_LEN ); psecuritypriv->PMKIDList[index].bUsed = _FALSE; bMatched = _TRUE; DBG_871X(FUNC_NDEV_FMT" clear id:%hhu\n", FUNC_NDEV_ARG(ndev), index); @@ -4054,9 +4078,9 @@ static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev, WLAN_BSSID_EX *pbss_network_ext = &adapter->mlmeextpriv.mlmext_info.network; if(0) - DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%d), from ie:(%s,%d)\n", FUNC_ADPT_ARG(adapter), - settings->ssid, settings->ssid_len, - pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength); + DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%zu), from ie:(%s,%d)\n", FUNC_ADPT_ARG(adapter), + settings->ssid, settings->ssid_len, + pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength); _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len); pbss_network->Ssid.SsidLength = settings->ssid_len; @@ -4064,9 +4088,9 @@ static int cfg80211_rtw_start_ap(struct wiphy *wiphy, struct net_device *ndev, pbss_network_ext->Ssid.SsidLength = settings->ssid_len; if(0) - DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter), - pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength, - pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength); + DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter), + pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength, + pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength); } return ret; @@ -4094,7 +4118,12 @@ static int cfg80211_rtw_stop_ap(struct wiphy *wiphy, struct net_device *ndev) #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) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0)) + u8 *mac, +#else + const u8 *mac, +#endif + struct station_parameters *params) { DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev)); @@ -4102,7 +4131,12 @@ static int cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev } static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev, - u8 *mac) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0)) + u8 *mac +#else + const u8 *mac +#endif +) { int ret=0; _irqL irqL; @@ -4156,7 +4190,7 @@ static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev plist = get_next(plist); - if(_rtw_memcmp(mac, psta->hwaddr, ETH_ALEN)) + if(_rtw_memcmp((u8 *)mac, psta->hwaddr, ETH_ALEN)) { if(psta->dot8021xalg == 1 && psta->bpairwise_key_installed == _FALSE) { @@ -4193,7 +4227,12 @@ static int cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev } static int cfg80211_rtw_change_station(struct wiphy *wiphy, struct net_device *ndev, - u8 *mac, struct station_parameters *params) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0)) + u8 *mac, +#else + const u8 *mac, +#endif + struct station_parameters *params) { DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev)); @@ -4718,9 +4757,11 @@ static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy, if(ATOMIC_READ(&pwdev_priv->switch_ch_to)==1 || (remain_ch != pmlmeext->cur_channel)) { - DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__); - issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500); - + if (check_buddy_fwstate(padapter, WIFI_FW_STATION_STATE)) { + DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__); + issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500); + } + ATOMIC_SET(&pwdev_priv->switch_ch_to, 0); DBG_8192C("%s, set switch ch timer, duration=%d\n", __func__, duration-pwdinfo->ext_listen_interval); @@ -4907,8 +4948,10 @@ static int _cfg80211_rtw_mgmt_tx(_adapter *padapter, u8 tx_ch, const u8 *buf, si u16 ext_listen_period; if (ATOMIC_READ(&pwdev_priv->switch_ch_to)==1) { - DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__); - issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500); + if (check_buddy_fwstate(padapter, WIFI_FW_STATION_STATE)) { + DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__); + issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500); + } ATOMIC_SET(&pwdev_priv->switch_ch_to, 0); @@ -5022,30 +5065,43 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy, #else struct net_device *ndev, #endif +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)) || defined(COMPAT_KERNEL_RELEASE) struct ieee80211_channel *chan, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE) + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE) bool offchan, -#endif -#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)) + #endif + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)) enum nl80211_channel_type channel_type, #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE) bool channel_type_valid, #endif -#endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE) + #endif + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE) unsigned int wait, -#endif + #endif const u8 *buf, size_t len, -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) bool no_cck, -#endif -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) + #endif + #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)) bool dont_wait_for_ack, + #endif +#else + struct cfg80211_mgmt_tx_params *params, #endif u64 *cookie) { #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) struct net_device *ndev = wdev_to_ndev(wdev); +#endif +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) || defined(COMPAT_KERNEL_RELEASE) + struct ieee80211_channel *chan = params->chan; + bool offchan = params->offchan; + unsigned int wait = params->wait; + const u8 *buf = params->buf; + size_t len = params->len; + bool no_cck = params->no_cck; + bool dont_wait_for_ack = params->dont_wait_for_ack; #endif int ret = 0; int tx_ret; @@ -5778,7 +5834,7 @@ void rtw_cfg80211_init_wiphy(_adapter *padapter) } /* init regulary domain */ - rtw_regd_init(padapter, rtw_reg_notifier); + rtw_regd_init(padapter); /* copy mac_addr to wiphy */ _rtw_memcpy(wiphy->perm_addr, padapter->eeprompriv.mac_addr, ETH_ALEN); @@ -5866,7 +5922,11 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy) #endif #if defined(CONFIG_PM) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0)) +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0)) wiphy->wowlan = wowlan_stub; +#else + wiphy->wowlan = &wowlan_stub; +#endif #endif #if defined(CONFIG_TDLS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)) diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/ioctl_linux.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/ioctl_linux.c index 73999fd299b7..d9507337e815 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/ioctl_linux.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/ioctl_linux.c @@ -503,12 +503,18 @@ static inline char * iwe_stream_protocol_process(_adapter *padapter, { if(pnetwork->network.Configuration.DSConfig > 14) { - if(vht_cap == _TRUE) + #ifdef CONFIG_80211AC_VHT + if(vht_cap == _TRUE){ snprintf(iwe->u.name, IFNAMSIZ, "IEEE 802.11AC"); - else if(ht_cap == _TRUE) - snprintf(iwe->u.name, IFNAMSIZ, "IEEE 802.11an"); + } else - snprintf(iwe->u.name, IFNAMSIZ, "IEEE 802.11a"); + #endif + { + if(ht_cap == _TRUE) + snprintf(iwe->u.name, IFNAMSIZ, "IEEE 802.11an"); + else + snprintf(iwe->u.name, IFNAMSIZ, "IEEE 802.11a"); + } } else { @@ -581,10 +587,13 @@ static inline char * iwe_stream_rate_process(_adapter *padapter, i++; } +#ifdef CONFIG_80211AC_VHT if(vht_cap == _TRUE) { max_rate = vht_data_rate; } - else if(ht_cap == _TRUE) + else +#endif + if(ht_cap == _TRUE) { if(mcs_rate&0x8000)//MCS15 { @@ -649,12 +658,12 @@ static inline char * iwe_stream_wpa_wpa2_process(_adapter *padapter, printk("-----------------Len %d----------------\n", wpa_len); } - _rtw_memset(iwe, 0, sizeof(iwe)); + _rtw_memset(iwe, 0, sizeof(*iwe)); iwe->cmd = IWEVCUSTOM; iwe->u.data.length = strlen(pbuf); start = iwe_stream_add_point(info, start, stop, iwe,pbuf); - _rtw_memset(iwe, 0, sizeof(iwe)); + _rtw_memset(iwe, 0, sizeof(*iwe)); iwe->cmd =IWEVGENIE; iwe->u.data.length = wpa_len; start = iwe_stream_add_point(info, start, stop, iwe, wpa_ie); @@ -666,12 +675,12 @@ static inline char * iwe_stream_wpa_wpa2_process(_adapter *padapter, for (i = 0; i < rsn_len; i++) { p += sprintf(p, "%02x", rsn_ie[i]); } - _rtw_memset(iwe, 0, sizeof(iwe)); + _rtw_memset(iwe, 0, sizeof(*iwe)); iwe->cmd = IWEVCUSTOM; iwe->u.data.length = strlen(pbuf); start = iwe_stream_add_point(info, start, stop, iwe,pbuf); - _rtw_memset(iwe, 0, sizeof(iwe)); + _rtw_memset(iwe, 0, sizeof(*iwe)); iwe->cmd =IWEVGENIE; iwe->u.data.length = rsn_len; start = iwe_stream_add_point(info, start, stop, iwe, rsn_ie); @@ -753,12 +762,12 @@ static inline char * iwe_stream_wapi_process(_adapter *padapter, p += sprintf(p, "%02x", wapi_ie[i]); } - _rtw_memset(iwe, 0, sizeof(iwe)); + _rtw_memset(iwe, 0, sizeof(*iwe)); iwe->cmd = IWEVCUSTOM; iwe->u.data.length = strlen(buf_wapi); start = iwe_stream_add_point(info, start, stop, iwe,buf_wapi); - _rtw_memset(iwe, 0, sizeof(iwe)); + _rtw_memset(iwe, 0, sizeof(*iwe)); iwe->cmd =IWEVGENIE; iwe->u.data.length = wapi_len; start = iwe_stream_add_point(info, start, stop, iwe, wapi_ie); @@ -844,7 +853,7 @@ static inline char * iwe_stream_net_rsv_process(_adapter *padapter, pos = pnetwork->network.Reserved; p += sprintf(p, "fm=%02X%02X", pos[1], pos[0]); - _rtw_memset(iwe, 0, sizeof(iwe)); + _rtw_memset(iwe, 0, sizeof(*iwe)); iwe->cmd = IWEVCUSTOM; iwe->u.data.length = strlen(buf); start = iwe_stream_add_point(info, start, stop,iwe, buf); diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/mlme_linux.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/mlme_linux.c index 78ea10176705..4a12ed5e5321 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/mlme_linux.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/mlme_linux.c @@ -462,11 +462,7 @@ static int mgnt_netdev_open(struct net_device *pnetdev) init_usb_anchor(&phostapdpriv->anchored); - if(!rtw_netif_queue_stopped(pnetdev)) - rtw_netif_start_queue(pnetdev); - else - rtw_netif_wake_queue(pnetdev); - + rtw_netif_wake_queue(pnetdev); netif_carrier_on(pnetdev); @@ -484,9 +480,8 @@ static int mgnt_netdev_close(struct net_device *pnetdev) netif_carrier_off(pnetdev); - if (!rtw_netif_queue_stopped(pnetdev)) - rtw_netif_stop_queue(pnetdev); - + rtw_netif_stop_queue(pnetdev); + //rtw_write16(phostapdpriv->padapter, 0x0116, 0x3f3f); return 0; diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/os_intfs.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/os_intfs.c index c36266fd73cf..c5d387919fca 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/os_intfs.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/os_intfs.c @@ -606,7 +606,14 @@ unsigned int rtw_classify8021d(struct sk_buff *skb) return dscp >> 5; } -static u16 rtw_select_queue(struct net_device *dev, struct sk_buff *skb) +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; @@ -651,9 +658,13 @@ u16 rtw_recv_select_queue(struct sk_buff *skb) #endif -static int rtw_ndev_notifier_call(struct notifier_block * nb, unsigned long state, void *ndev) +static int rtw_ndev_notifier_call(struct notifier_block * nb, unsigned long state, void *ptr) { - struct net_device *dev = ndev; +#if (LINUX_VERSION_CODE>=KERNEL_VERSION(3,11,0)) + struct net_device *dev = netdev_notifier_info_to_dev(ptr); +#else + struct net_device *dev = ptr; +#endif #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,29)) if (dev->netdev_ops->ndo_do_ioctl != rtw_ioctl) @@ -1447,11 +1458,7 @@ int _netdev_vir_if_open(struct net_device *pnetdev) _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000); - if(!rtw_netif_queue_stopped(pnetdev)) - rtw_netif_start_queue(pnetdev); - else - rtw_netif_wake_queue(pnetdev); - + rtw_netif_wake_queue(pnetdev); DBG_871X(FUNC_NDEV_FMT" exit\n", FUNC_NDEV_ARG(pnetdev)); return 0; @@ -1492,8 +1499,7 @@ static int netdev_vir_if_close(struct net_device *pnetdev) if(pnetdev) { - if (!rtw_netif_queue_stopped(pnetdev)) - rtw_netif_stop_queue(pnetdev); + rtw_netif_stop_queue(pnetdev); } #ifdef CONFIG_IOCTL_CFG80211 @@ -1810,10 +1816,7 @@ int _netdev_if2_open(struct net_device *pnetdev) // secondary interface shares the timer with primary interface. //_set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000); - if(!rtw_netif_queue_stopped(pnetdev)) - rtw_netif_start_queue(pnetdev); - else - rtw_netif_wake_queue(pnetdev); + rtw_netif_wake_queue(pnetdev); DBG_871X("-871x_drv - if2_open, bup=%d\n", padapter->bup); return 0; @@ -1854,8 +1857,7 @@ static int netdev_if2_close(struct net_device *pnetdev) if(pnetdev) { - if (!rtw_netif_queue_stopped(pnetdev)) - rtw_netif_stop_queue(pnetdev); + rtw_netif_stop_queue(pnetdev); } #ifdef CONFIG_P2P @@ -2259,10 +2261,7 @@ int _netdev_open(struct net_device *pnetdev) #endif //netif_carrier_on(pnetdev);//call this func when rtw_joinbss_event_callback return success - if(!rtw_netif_queue_stopped(pnetdev)) - rtw_netif_start_queue(pnetdev); - else - rtw_netif_wake_queue(pnetdev); + rtw_netif_wake_queue(pnetdev); #ifdef CONFIG_BR_EXT netdev_br_init(pnetdev); @@ -2576,8 +2575,7 @@ static int netdev_close(struct net_device *pnetdev) //s1. if(pnetdev) { - if (!rtw_netif_queue_stopped(pnetdev)) - rtw_netif_stop_queue(pnetdev); + rtw_netif_stop_queue(pnetdev); } #ifndef CONFIG_ANDROID @@ -3322,10 +3320,7 @@ _func_enter_; // start netif queue if (pnetdev) { - if(!rtw_netif_queue_stopped(pnetdev)) - rtw_netif_start_queue(pnetdev); - else - rtw_netif_wake_queue(pnetdev); + rtw_netif_wake_queue(pnetdev); } } else{ @@ -3538,20 +3533,14 @@ _func_enter_; if (rtw_buddy_adapter_up(padapter)) { pbuddy_netdev = padapter->pbuddy_adapter->pnetdev; if(pbuddy_netdev){ - if (!rtw_netif_queue_stopped(pbuddy_netdev)) - rtw_netif_start_queue(pbuddy_netdev); - else - rtw_netif_wake_queue(pbuddy_netdev); + rtw_netif_wake_queue(pbuddy_netdev); } } #endif // start netif queue if (pnetdev) { - if(!rtw_netif_queue_stopped(pnetdev)) - rtw_netif_start_queue(pnetdev); - else - rtw_netif_wake_queue(pnetdev); + rtw_netif_wake_queue(pnetdev); } if( padapter->pid[1]!=0) { diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/rtw_proc.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/rtw_proc.c index af10d8e082ea..dd0947613929 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/rtw_proc.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/rtw_proc.c @@ -318,6 +318,26 @@ int proc_get_rx_info(struct seq_file *m, void *v) return 0; } +int proc_get_wifi_spec(struct seq_file *m, void *v) +{ + struct net_device *dev = m->private; + _adapter *padapter = (_adapter *)rtw_netdev_priv(dev); + struct registry_priv *pregpriv = &padapter->registrypriv; + + DBG_871X_SEL_NL(m,"wifi_spec=%d\n",pregpriv->wifi_spec); + return 0; +} + +static int proc_get_mac_qinfo(struct seq_file *m, void *v) +{ + struct net_device *dev = m->private; + _adapter *adapter = (_adapter *)rtw_netdev_priv(dev); + + rtw_hal_get_hwreg(adapter, HW_VAR_DUMP_MAC_QUEUE_INFO, (u8 *)m); + + return 0; +} + static int proc_get_cam(struct seq_file *m, void *v) { struct net_device *dev = m->private; @@ -415,10 +435,12 @@ const struct rtw_proc_hdl adapter_proc_hdls [] = { {"adapter_state", proc_get_adapter_state, NULL}, {"trx_info", proc_get_trx_info, NULL}, {"rate_ctl", proc_get_rate_ctl, proc_set_rate_ctl}, + {"mac_qinfo", proc_get_mac_qinfo, NULL}, {"cam", proc_get_cam, proc_set_cam}, {"cam_cache", proc_get_cam_cache, NULL}, {"suspend_info", proc_get_suspend_resume_info, NULL}, {"rx_info", proc_get_rx_info,NULL}, + {"wifi_spec",proc_get_wifi_spec,NULL}, #ifdef CONFIG_LAYER2_ROAMING {"roam_flags", proc_get_roam_flags, proc_set_roam_flags}, diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/usb_intf.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/usb_intf.c index 1c5ae3c7b07b..50fc3fa9ef6f 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/usb_intf.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/usb_intf.c @@ -957,10 +957,7 @@ int rtw_hw_resume(_adapter *padapter) netif_device_attach(pnetdev); netif_carrier_on(pnetdev); - if(!rtw_netif_queue_stopped(pnetdev)) - rtw_netif_start_queue(pnetdev); - else - rtw_netif_wake_queue(pnetdev); + rtw_netif_wake_queue(pnetdev); pwrpriv->bkeepfwalive = _FALSE; pwrpriv->brfoffbyhw = _FALSE; diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/wifi_regd.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/wifi_regd.c index 252fe1715c88..2831ff140adf 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/wifi_regd.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/wifi_regd.c @@ -268,10 +268,15 @@ static void _rtw_reg_apply_radar_flags(struct wiphy *wiphy) if (!_rtw_is_radar_freq(ch->center_freq)) continue; #ifdef CONFIG_DFS - if (!(ch->flags & IEEE80211_CHAN_DISABLED)) - ch->flags |= IEEE80211_CHAN_RADAR | - IEEE80211_CHAN_NO_IBSS; -#endif + if (!(ch->flags & IEEE80211_CHAN_DISABLED)) { + ch->flags |= IEEE80211_CHAN_RADAR; + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)) + ch->flags |= (IEEE80211_CHAN_NO_IBSS|IEEE80211_CHAN_PASSIVE_SCAN); + #else + ch->flags |= IEEE80211_CHAN_NO_IR; + #endif + } +#endif //CONFIG_DFS #if 0 /* @@ -356,10 +361,16 @@ static void _rtw_reg_apply_flags(struct wiphy *wiphy) ch = ieee80211_get_channel(wiphy, freq); if (ch) { - if (channel_set[i].ScanType == SCAN_PASSIVE) - ch->flags = IEEE80211_CHAN_PASSIVE_SCAN; - else + if (channel_set[i].ScanType == SCAN_PASSIVE) { + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)) + ch->flags = (IEEE80211_CHAN_NO_IBSS|IEEE80211_CHAN_PASSIVE_SCAN); + #else + ch->flags = IEEE80211_CHAN_NO_IR; + #endif + } + else { ch->flags = 0; + } } } @@ -474,27 +485,51 @@ static const struct ieee80211_regdomain *_rtw_regdomain_select(struct #endif } -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)) -static int _rtw_regd_init_wiphy(struct rtw_regulatory *reg, - struct wiphy *wiphy, - void (*reg_notifier) (struct wiphy * wiphy, - struct regulatory_request * - request)) +void _rtw_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request) +{ + struct rtw_regulatory *reg = NULL; + + DBG_8192C("%s\n", __func__); + + _rtw_reg_notifier_apply(wiphy, request, reg); +} + +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)) +int rtw_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request) #else -static int _rtw_regd_init_wiphy(struct rtw_regulatory *reg, - struct wiphy *wiphy, - int (*reg_notifier) (struct wiphy * wiphy, - struct regulatory_request * - request)) +void rtw_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request) #endif +{ + _rtw_reg_notifier(wiphy, request); + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)) + return 0; + #endif +} + +void rtw_reg_notify_by_driver(_adapter *adapter) +{ + if ((adapter->rtw_wdev != NULL) && (adapter->rtw_wdev->wiphy)) { + struct regulatory_request request; + request.initiator = NL80211_REGDOM_SET_BY_DRIVER; + rtw_reg_notifier(adapter->rtw_wdev->wiphy, &request); + } +} + +static void _rtw_regd_init_wiphy(struct rtw_regulatory *reg, struct wiphy *wiphy) { const struct ieee80211_regdomain *regd; - wiphy->reg_notifier = reg_notifier; + wiphy->reg_notifier = rtw_reg_notifier; + #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)) wiphy->flags |= WIPHY_FLAG_CUSTOM_REGULATORY; wiphy->flags &= ~WIPHY_FLAG_STRICT_REGULATORY; wiphy->flags &= ~WIPHY_FLAG_DISABLE_BEACON_HINTS; + #else + wiphy->regulatory_flags |= REGULATORY_CUSTOM_REG; + wiphy->regulatory_flags &= ~REGULATORY_STRICT_REG; + wiphy->regulatory_flags &= ~REGULATORY_DISABLE_BEACON_HINTS; + #endif regd = _rtw_regdomain_select(reg); wiphy_apply_custom_regulatory(wiphy, regd); @@ -503,7 +538,6 @@ static int _rtw_regd_init_wiphy(struct rtw_regulatory *reg, _rtw_reg_apply_flags(wiphy); _rtw_reg_apply_radar_flags(wiphy); _rtw_reg_apply_world_flags(wiphy, NL80211_REGDOM_SET_BY_DRIVER, reg); - return 0; } static struct country_code_to_enum_rd *_rtw_regd_find_country(u16 countrycode) @@ -517,17 +551,8 @@ static struct country_code_to_enum_rd *_rtw_regd_find_country(u16 countrycode) return NULL; } -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)) -int rtw_regd_init(_adapter * padapter, - void (*reg_notifier) (struct wiphy * wiphy, - struct regulatory_request * request)) -#else -int rtw_regd_init(_adapter * padapter, - int (*reg_notifier) (struct wiphy * wiphy, - struct regulatory_request * request)) -#endif +int rtw_regd_init(_adapter * padapter) { - //struct registry_priv *registrypriv = &padapter->registrypriv; struct wiphy *wiphy = padapter->rtw_wdev->wiphy; #if 0 @@ -545,28 +570,8 @@ int rtw_regd_init(_adapter * padapter, __func__, rtw_regd->alpha2[0], rtw_regd->alpha2[1]); #endif - _rtw_regd_init_wiphy(NULL, wiphy, reg_notifier); + _rtw_regd_init_wiphy(NULL, wiphy); return 0; } - -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 10, 0)) -void rtw_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request) -{ - struct rtw_regulatory *reg = NULL; - - DBG_8192C("%s\n", __func__); - - _rtw_reg_notifier_apply(wiphy, request, reg); -} -#else -int rtw_reg_notifier(struct wiphy *wiphy, struct regulatory_request *request) -{ - struct rtw_regulatory *reg = NULL; - - DBG_8192C("%s\n", __func__); - - return _rtw_reg_notifier_apply(wiphy, request, reg); -} -#endif #endif //CONFIG_IOCTL_CFG80211 diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/wifi_version.h b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/wifi_version.h old mode 100644 new mode 100755 index fa7b4f881f49..0cc47c18d6b3 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/wifi_version.h +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/wifi_version.h @@ -7,7 +7,7 @@ /* * Broadcom BCM4319 driver version. */ -#define RTL8192_DRV_VERSION "3.60.WFD" +#define RTL8192_DRV_VERSION "3.80.WFD" #endif /* WIFI_VERSION_H */ diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/xmit_linux.c b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/xmit_linux.c index 0b04a0b5832d..732408f0956e 100755 --- a/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/xmit_linux.c +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/xmit_linux.c @@ -21,6 +21,7 @@ #include +#define DBG_DUMP_OS_QUEUE_CTL 0 uint rtw_remainder_len(struct pkt_file *pfile) { @@ -187,28 +188,78 @@ void rtw_os_xmit_resource_free(_adapter *padapter, struct xmit_buf *pxmitbuf,u32 } } +void dump_os_queue(void *sel, _adapter *padapter) +{ + struct net_device *ndev = padapter->pnetdev; + +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + int i; + + for (i=0;i<4;i++) { + DBG_871X_SEL_NL(sel, "os_queue[%d]:%s\n" + , i, __netif_subqueue_stopped(ndev, i)?"stopped":"waked"); + } +#else + DBG_871X_SEL_NL(sel, "os_queue:%s\n" + , netif_queue_stopped(ndev)?"stopped":"waked"); +#endif +} + #define WMM_XMIT_THRESHOLD (NR_XMITFRAME*2/5) -void rtw_os_pkt_complete(_adapter *padapter, _pkt *pkt) +inline static bool rtw_os_need_wake_queue(_adapter *padapter, u16 qidx) { #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) - u16 queue; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; - queue = skb_get_queue_mapping(pkt); if (padapter->registrypriv.wifi_spec) { - if(__netif_subqueue_stopped(padapter->pnetdev, queue) && - (pxmitpriv->hwxmits[queue].accnt < WMM_XMIT_THRESHOLD)) - { - netif_wake_subqueue(padapter->pnetdev, queue); - } + if (pxmitpriv->hwxmits[qidx].accnt < WMM_XMIT_THRESHOLD) + return _TRUE; + } else { + return _TRUE; + } + return _FALSE; +#else + return _TRUE; +#endif +} + +inline static bool rtw_os_need_stop_queue(_adapter *padapter, u16 qidx) +{ + struct xmit_priv *pxmitpriv = &padapter->xmitpriv; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + if (padapter->registrypriv.wifi_spec) { + /* No free space for Tx, tx_worker is too slow */ + if (pxmitpriv->hwxmits[qidx].accnt > WMM_XMIT_THRESHOLD) + return _TRUE; } else { - if(__netif_subqueue_stopped(padapter->pnetdev, queue)) - netif_wake_subqueue(padapter->pnetdev, queue); + if(pxmitpriv->free_xmitframe_cnt<=4) + return _TRUE; } #else - if (netif_queue_stopped(padapter->pnetdev)) + if(pxmitpriv->free_xmitframe_cnt<=4) + return _TRUE; +#endif + return _FALSE; +} + +void rtw_os_pkt_complete(_adapter *padapter, _pkt *pkt) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + u16 qidx; + + qidx = skb_get_queue_mapping(pkt); + if (rtw_os_need_wake_queue(padapter, qidx)) { + if (DBG_DUMP_OS_QUEUE_CTL) + DBG_871X(FUNC_ADPT_FMT": netif_wake_subqueue[%d]\n", FUNC_ADPT_ARG(padapter), qidx); + netif_wake_subqueue(padapter->pnetdev, qidx); + } +#else + if (rtw_os_need_wake_queue(padapter, 0)) { + if (DBG_DUMP_OS_QUEUE_CTL) + DBG_871X(FUNC_ADPT_FMT": netif_wake_queue\n", FUNC_ADPT_ARG(padapter)); netif_wake_queue(padapter->pnetdev); + } #endif rtw_skb_free(pkt); @@ -259,30 +310,53 @@ void rtw_os_xmit_schedule(_adapter *padapter) #endif } -static void rtw_check_xmit_resource(_adapter *padapter, _pkt *pkt) +static bool rtw_check_xmit_resource(_adapter *padapter, _pkt *pkt) { + bool busy = _FALSE; struct xmit_priv *pxmitpriv = &padapter->xmitpriv; #if (LINUX_VERSION_CODE>=KERNEL_VERSION(2,6,35)) - u16 queue; + u16 qidx; + + qidx = skb_get_queue_mapping(pkt); + if (rtw_os_need_stop_queue(padapter, qidx)) { + if (DBG_DUMP_OS_QUEUE_CTL) + DBG_871X(FUNC_ADPT_FMT": netif_stop_subqueue[%d]\n", FUNC_ADPT_ARG(padapter), qidx); + netif_stop_subqueue(padapter->pnetdev, qidx); + busy = _TRUE; + } +#else + if (rtw_os_need_stop_queue(padapter, 0)) { + if (DBG_DUMP_OS_QUEUE_CTL) + DBG_871X(FUNC_ADPT_FMT": netif_stop_queue\n", FUNC_ADPT_ARG(padapter)); + rtw_netif_stop_queue(padapter->pnetdev); + busy = _TRUE; + } +#endif + return busy; +} - queue = skb_get_queue_mapping(pkt); - if (padapter->registrypriv.wifi_spec) { - /* No free space for Tx, tx_worker is too slow */ - if (pxmitpriv->hwxmits[queue].accnt > WMM_XMIT_THRESHOLD) { - //DBG_871X("%s(): stop netif_subqueue[%d]\n", __FUNCTION__, queue); - netif_stop_subqueue(padapter->pnetdev, queue); - } - } else { - if(pxmitpriv->free_xmitframe_cnt<=4) { - if (!netif_tx_queue_stopped(netdev_get_tx_queue(padapter->pnetdev, queue))) - netif_stop_subqueue(padapter->pnetdev, queue); +void rtw_os_wake_queue_at_free_stainfo(_adapter *padapter, int *qcnt_freed) +{ +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35)) + int i; + + for (i=0;i<4;i++) { + if (qcnt_freed[i] == 0) + continue; + + if(rtw_os_need_wake_queue(padapter, i)) { + if (DBG_DUMP_OS_QUEUE_CTL) + DBG_871X(FUNC_ADPT_FMT": netif_wake_subqueue[%d]\n", FUNC_ADPT_ARG(padapter), i); + netif_wake_subqueue(padapter->pnetdev, i); } } #else - if(pxmitpriv->free_xmitframe_cnt<=4) - { - if (!rtw_netif_queue_stopped(padapter->pnetdev)) - rtw_netif_stop_queue(padapter->pnetdev); + if (qcnt_freed[0] || qcnt_freed[1] || qcnt_freed[2] || qcnt_freed[3]) { + if(rtw_os_need_wake_queue(padapter, 0)) { + if (DBG_DUMP_OS_QUEUE_CTL) + DBG_871X(FUNC_ADPT_FMT": netif_wake_queue\n", FUNC_ADPT_ARG(padapter)); + netif_wake_queue(padapter->pnetdev); + } } #endif } @@ -426,7 +500,7 @@ _func_enter_; drop_packet: pxmitpriv->tx_drop++; - rtw_skb_free(pkt); + rtw_os_pkt_complete(padapter, pkt); RT_TRACE(_module_xmit_osdep_c_, _drv_notice_, ("rtw_xmit_entry: drop, tx_drop=%d\n", (u32)pxmitpriv->tx_drop)); exit: diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/runwpa b/drivers/net/wireless/rockchip_wlan/rtl8188eu/runwpa new file mode 100755 index 000000000000..f825e8bdb123 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/runwpa @@ -0,0 +1,20 @@ +#!/bin/bash + +if [ "`which iwconfig`" = "" ] ; then + echo "WARNING:Wireless tool not exist!" + echo " Please install it!" + exit +else + if [ `uname -r | cut -d. -f2` -eq 4 ]; then + wpa_supplicant -D ipw -c wpa1.conf -i wlan0 + else + if [ `iwconfig -v |awk '{print $4}' | head -n 1` -lt 18 ] ; then + wpa_supplicant -D ipw -c wpa1.conf -i wlan0 + else + wpa_supplicant -D wext -c wpa1.conf -i wlan0 + fi + + fi +fi + + diff --git a/drivers/net/wireless/rockchip_wlan/rtl8188eu/wlan0dhcp b/drivers/net/wireless/rockchip_wlan/rtl8188eu/wlan0dhcp new file mode 100755 index 000000000000..60433829cfe6 --- /dev/null +++ b/drivers/net/wireless/rockchip_wlan/rtl8188eu/wlan0dhcp @@ -0,0 +1,16 @@ +#!/bin/bash + +var0=`ps aux|awk '/dhclient wlan0/'|awk '$11!="awk"{print $2}'` + +kill $var0 +cp ifcfg-wlan0 /etc/sysconfig/network-scripts/ + +dhclient wlan0 + +var1=`ifconfig wlan0 |awk '/inet/{print $2}'|awk -F: '{print $2}'` + + +rm -f /etc/sysconfig/network-scripts/ifcfg-wlan0 + +echo "get ip: $var1" + -- 2.34.1