update rtl8188eu wifi driver to RTL8188EUS_linux_v4.3.0.7_12758.20141114
authorhwg <hwg@rock-chips.com>
Thu, 12 Feb 2015 07:02:51 +0000 (15:02 +0800)
committerhwg <hwg@rock-chips.com>
Thu, 12 Feb 2015 07:03:22 +0000 (15:03 +0800)
39 files changed:
drivers/net/wireless/rockchip_wlan/rtl8188eu/Kconfig
drivers/net/wireless/rockchip_wlan/rtl8188eu/Makefile
drivers/net/wireless/rockchip_wlan/rtl8188eu/clean [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_ap.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_cmd.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_debug.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_ieee80211.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_mlme.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_mlme_ext.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_p2p.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_sreset.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_sta_mgt.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/core/rtw_xmit.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/hal_intf.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/rtl8188e_cmd.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/rtl8188e_hal_init.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/usb/usb_halinit.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/hal/rtl8188e/usb/usb_ops_linux.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/ifcfg-wlan0 [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8188eu/include/hal_com_reg.h
drivers/net/wireless/rockchip_wlan/rtl8188eu/include/hal_intf.h
drivers/net/wireless/rockchip_wlan/rtl8188eu/include/ioctl_cfg80211.h
drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtl8188e_hal.h
drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtl8188e_spec.h
drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_mlme.h
drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_version.h [changed mode: 0644->0755]
drivers/net/wireless/rockchip_wlan/rtl8188eu/include/rtw_wifi_regd.h
drivers/net/wireless/rockchip_wlan/rtl8188eu/include/xmit_osdep.h
drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/ioctl_cfg80211.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/ioctl_linux.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/mlme_linux.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/os_intfs.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/rtw_proc.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/usb_intf.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/wifi_regd.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/wifi_version.h [changed mode: 0644->0755]
drivers/net/wireless/rockchip_wlan/rtl8188eu/os_dep/linux/xmit_linux.c
drivers/net/wireless/rockchip_wlan/rtl8188eu/runwpa [new file with mode: 0755]
drivers/net/wireless/rockchip_wlan/rtl8188eu/wlan0dhcp [new file with mode: 0755]

index 2451fe0fd9f31837f88497d6677d4717581ed850..013175c374b2f65c5f68c1fab9f2c5e144b623b9 100755 (executable)
@@ -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
 
index 507087617d82e0e978d4d4fcd215434651cf0326..5551eea01f804fd85d7811ca3906f41431fec530 100755 (executable)
@@ -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 (executable)
index 0000000..8766421
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/bash
+rmmod 8192cu
+rmmod 8192ce
+rmmod 8192du
+rmmod 8192de
index f9a0cf77410038c4db2251de1178b9171a96ef4f..9e6e8aebba82c2a764b8bd7b80a17f9d196d0e44 100755 (executable)
@@ -1720,7 +1720,7 @@ int rtw_check_beacon_data(_adapter *padapter, u8 *pbuf,  int len)
        if(p && ie_len>0)\r
        {\r
                u8 rf_type=0;\r
-               u8 max_rx_ampdu_factor=0;\r
+               u32 max_rx_ampdu_factor=0;\r
                struct rtw_ieee80211_ht_cap *pht_cap = (struct rtw_ieee80211_ht_cap *)(p+2);\r
 \r
                pHT_caps_ie=p;\r
index b4cd99822822eb78526193d0edd9cd56c4423655..6d8aa04380980e4710c9716868fc96a5f9678c7b 100755 (executable)
@@ -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."));
        } 
 
index 6413f5b921fd7e575fb63b151bc48dd96beec1cc..b63b77990dc273733588b4f28202924d9f868e12 100755 (executable)
@@ -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"
index 789d30fa4ec00c57907f96577051e5a676ca6a03..7316cdcac13e14e4dfadb329217fdabd4a657f25 100755 (executable)
@@ -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)
index 563f7d7d6b4ea5bcef4dd778fc2e2e22ed2fc761..fde65664c36a8c344cf61338d0d59ea9334c27ee 100755 (executable)
@@ -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;
index a5dd76fc973c9b40c8947ab5543db1bca284c7b5..3fcef9eabbf1cf41bb20830e9106070963db5acc 100755 (executable)
@@ -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;
index 986dae83bd5fbefc8ed56a38c18083605f5636de..eaa3ea266e48ca1496526458493e8788ab09df4b 100755 (executable)
@@ -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 )
                {
index 62a8adf7239d1e7665148a1a10d9892cccdcec16..e9010473b799e226d7a2abda648de7bd0ae90ba2 100755 (executable)
@@ -267,8 +267,7 @@ void sreset_stop_adapter(_adapter *padapter)
 \r
        DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));\r
 \r
-       if (!rtw_netif_queue_stopped(padapter->pnetdev))\r
-               rtw_netif_stop_queue(padapter->pnetdev);\r
+       rtw_netif_stop_queue(padapter->pnetdev);\r
 \r
        rtw_cancel_all_timer(padapter);\r
 \r
@@ -307,11 +306,10 @@ void sreset_start_adapter(_adapter *padapter)
        tasklet_hi_schedule(&pxmitpriv->xmit_tasklet);\r
        #endif\r
 \r
-       _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);\r
-\r
-       if (rtw_netif_queue_stopped(padapter->pnetdev))\r
-               rtw_netif_wake_queue(padapter->pnetdev);\r
+       if (is_primary_adapter(padapter))\r
+               _set_timer(&padapter->mlmepriv.dynamic_chk_timer, 2000);\r
 \r
+       rtw_netif_wake_queue(padapter->pnetdev);\r
 }\r
 \r
 void sreset_reset(_adapter *padapter)\r
index f03f727d9ee6e8e59e1ac9d19013e98d67302577..2d266a2b24c5b78bb951a87569599dbb92fef16c 100755 (executable)
@@ -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);
index e73e56a773b7c903ce18da5b9719311b100d6c45..4b21cc6ca3bd90575ab194e9c98c696e508e97c2 100755 (executable)
@@ -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--;
index 8348b3854bc98d815861750620af5e03295b3e24..67febfcfa045a0e904acfc72ed379a81275f805b 100755 (executable)
@@ -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;
 }
index 70b22c198478ae7847b47910ef4d1c283676e303..cc763cfba00a74aeabcde4b2159a124e40ec20f1 100755 (executable)
@@ -44,9 +44,8 @@ static u8 _is_fw_read_cmd_down(_adapter* padapter, u8 msgbox_num)
                if(0 == valid ){\r
                        read_down = _TRUE;\r
                }\r
-#ifdef CONFIG_WOWLAN\r
-               rtw_msleep_os(2);\r
-#endif\r
+               else
+                       rtw_msleep_os(1);
        }while( (!read_down) && (retry_cnts--));\r
 \r
        return read_down;\r
index 9086df1ceb5e440029bee979bd8dc1e7e731cb29..10dd48ade6e6dff96a431872d788ee998ee1b1f1 100755 (executable)
@@ -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;
+}
+
index 2ec19037812ab4828862f349c05092f7bda2158a..b384481b6c005f7d2edf2832f7ae54ffe8ec4010 100755 (executable)
@@ -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;
        }
 
index b40e3b8a2aaae269bec832b2b1d4147b60d9e6e2..51d33c05804191b1e85d95de684ef6cc71452f35 100755 (executable)
@@ -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 (executable)
index 0000000..20dcbec
--- /dev/null
@@ -0,0 +1,4 @@
+#DHCP client\r
+DEVICE=wlan0\r
+BOOTPROTO=dhcp\r
+ONBOOT=yes
\ No newline at end of file
index a8fc3dfcc328fe4ae8b1408fed42108228a5c0f7..b29fa34b6badd3fd279b597b1375ef7e6a9f0fea 100755 (executable)
 //     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
 #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
 
index 0c3b95979dbbdafe59fbbf9b573f33676c58d065..4fd09fcea40fdd8bb3bf38a2b204e7b877415b91 100755 (executable)
@@ -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);
index 2cae2c53f45a64a862b8bc8c9889d32163c22777..d21341d65385696c429a22c87587c8c7a13d6f9f 100755 (executable)
@@ -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)\r
 #elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))\r
 #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->pnetdev, freq, sig_dbm, buf, len, gfp)\r
-#else\r
+#elif (LINUX_VERSION_CODE < KERNEL_VERSION(3,12,0))\r
 #define rtw_cfg80211_rx_mgmt(adapter, freq, sig_dbm, buf, len, gfp) cfg80211_rx_mgmt((adapter)->rtw_wdev, freq, sig_dbm, buf, len, gfp)\r
+#else\r
+#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)\r
 #endif\r
 \r
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,4,0))  && !defined(COMPAT_KERNEL_RELEASE)\r
index d203258aaf03689378b491a52a4c9dcb45d133d3..bf9a8bd55d248813cef7504946835d52aaccb91f 100755 (executable)
@@ -295,6 +295,7 @@ void _InitTransferPageSize(PADAPTER padapter);
 \r
 void SetHwReg8188E(PADAPTER padapter, u8 variable, u8 *val);\r
 void GetHwReg8188E(PADAPTER padapter, u8 variable, u8 *val);\r
+u8 GetHalDefVar8188E(PADAPTER Adapter, HAL_DEF_VARIABLE eVariable, PVOID pValue);\r
 \r
 #endif //__RTL8188E_HAL_H__\r
 \r
index 0fb93b59a99420524772425cdec54c68974d8711..0c7ef4fe392037608d5767b933f99246a2a88f7e 100755 (executable)
@@ -49,6 +49,8 @@
 #define REG_HISRE_88E                                  0x00BC //RTL8188E\r
 #define REG_MACID_NO_LINK_0                    0x0484\r
 #define REG_MACID_NO_LINK_1                    0x0488\r
+#define REG_MACID_PAUSE_0                      0x048c\r
+#define REG_MACID_PAUSE_1                      0x0490\r
 \r
 //-----------------------------------------------------\r
 //\r
index 1a6a9eb3928c8c98cf9fde60e6e14bcab78b009f..4e0642a2778d6a5e73e7a5e009915b36083aa69c 100755 (executable)
 //     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; \
old mode 100644 (file)
new mode 100755 (executable)
index 9f7c48b..2d5046f
@@ -1 +1 @@
-#define DRIVERVERSION  "v4.3.0.5_11894.20140718_beta"
+#define DRIVERVERSION  "v4.3.0.7_12758.20141114"
index d69653d81d45e07b3db404c0cf8a5ad2ffa137d5..aea6365290f8b3e9479962c98c1d1b95fade0a4c 100755 (executable)
@@ -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
index 79d0a8864bfedbfac5435bd80d8a7e7de6f99dfd..d489ebfcf6426c75418a491a1102a38a95b1f332 100755 (executable)
@@ -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_
 
index 1a95cf55eb7173b17e56c04d409914c6f75022ee..1a01894444c90cb0d5d465c83b5eed5dca6d72fe 100755 (executable)
@@ -667,6 +667,11 @@ void rtw_cfg80211_ibss_indicate_connect(_adapter *padapter)
        struct wlan_network  *cur_network = &(pmlmepriv->cur_network);\r
        struct wireless_dev *pwdev = padapter->rtw_wdev;\r
        struct cfg80211_bss *bss = NULL;\r
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0))\r
+       struct wiphy *wiphy = pwdev->wiphy;\r
+       int freq = (int)cur_network->network.Configuration.DSConfig;\r
+       struct ieee80211_channel *chan;\r
+#endif\r
 \r
        DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));\r
        if (pwdev->iftype != NL80211_IFTYPE_ADHOC) \r
@@ -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));\r
        }\r
        //notify cfg80211 that device joined an IBSS\r
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 15, 0))\r
+       chan = ieee80211_get_channel(wiphy, freq);\r
+       cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, chan, GFP_ATOMIC);\r
+#else\r
        cfg80211_ibss_joined(padapter->pnetdev, cur_network->network.MacAddress, GFP_ATOMIC);\r
+#endif\r
 }\r
 \r
 void rtw_cfg80211_indicate_connect(_adapter *padapter)\r
@@ -817,14 +827,18 @@ check_bss:
        }\r
        else\r
        {\r
+       #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0) || defined(COMPAT_KERNEL_RELEASE)\r
                DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state);\r
+       #endif\r
                cfg80211_connect_result(padapter->pnetdev, cur_network->network.MacAddress\r
                        , pmlmepriv->assoc_req+sizeof(struct rtw_ieee80211_hdr_3addr)+2\r
                        , pmlmepriv->assoc_req_len-sizeof(struct rtw_ieee80211_hdr_3addr)-2\r
                        , pmlmepriv->assoc_rsp+sizeof(struct rtw_ieee80211_hdr_3addr)+6\r
                        , pmlmepriv->assoc_rsp_len-sizeof(struct rtw_ieee80211_hdr_3addr)-6\r
                        , WLAN_STATUS_SUCCESS, GFP_ATOMIC);\r
+       #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0) || defined(COMPAT_KERNEL_RELEASE)\r
                DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state);\r
+       #endif\r
        }\r
 }\r
 \r
@@ -863,6 +877,7 @@ void rtw_cfg80211_indicate_disconnect(_adapter *padapter)
 #endif //CONFIG_P2P\r
 \r
        if (!padapter->mlmepriv.not_indic_disco) {\r
+               #if LINUX_VERSION_CODE < KERNEL_VERSION(3, 11, 0) || defined(COMPAT_KERNEL_RELEASE)\r
                DBG_8192C("pwdev->sme_state(b)=%d\n", pwdev->sme_state);\r
 \r
                if(pwdev->sme_state==CFG80211_SME_CONNECTING)\r
@@ -874,6 +889,14 @@ void rtw_cfg80211_indicate_disconnect(_adapter *padapter)
                        //DBG_8192C("pwdev->sme_state=%d\n", pwdev->sme_state);\r
 \r
                DBG_8192C("pwdev->sme_state(a)=%d\n", pwdev->sme_state);\r
+               #else\r
+\r
+               if(check_fwstate(&padapter->mlmepriv, _FW_LINKED))\r
+                       cfg80211_disconnected(padapter->pnetdev, 0, NULL, 0, GFP_ATOMIC);\r
+               else\r
+                       cfg80211_connect_result(padapter->pnetdev, NULL, NULL, 0, NULL, 0,\r
+                               WLAN_STATUS_UNSPECIFIED_FAILURE, GFP_ATOMIC/*GFP_KERNEL*/);\r
+               #endif\r
        }\r
 }\r
        \r
@@ -1543,13 +1566,13 @@ static int cfg80211_rtw_add_key(struct wiphy *wiphy, struct net_device *ndev,
        \r
        if (params->seq_len && params->seq) \r
        {       \r
-               _rtw_memcpy(param->u.crypt.seq, params->seq, params->seq_len);\r
+               _rtw_memcpy(param->u.crypt.seq, (u8 *)params->seq, params->seq_len);\r
        }\r
 \r
        if(params->key_len && params->key)\r
        {\r
                param->u.crypt.key_len = params->key_len;               \r
-               _rtw_memcpy(param->u.crypt.key, params->key, params->key_len);\r
+               _rtw_memcpy(param->u.crypt.key, (u8 *)params->key, params->key_len);\r
        }       \r
 \r
        if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)\r
@@ -1676,9 +1699,13 @@ static int cfg80211_rtw_set_default_key(struct wiphy *wiphy,
 \r
 }\r
 \r
-static int cfg80211_rtw_get_station(struct wiphy *wiphy,\r
-                                   struct net_device *ndev,\r
-                                   u8 *mac, struct station_info *sinfo)\r
+static int cfg80211_rtw_get_station(struct wiphy *wiphy, struct net_device *ndev,\r
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0))\r
+       u8 *mac,\r
+#else\r
+       const u8 *mac,\r
+#endif\r
+       struct station_info *sinfo)\r
 {\r
        int ret = 0;\r
        _adapter *padapter = (_adapter *)rtw_netdev_priv(ndev);\r
@@ -1694,7 +1721,7 @@ static int cfg80211_rtw_get_station(struct wiphy *wiphy,
                goto exit;\r
        }\r
 \r
-       psta = rtw_get_stainfo(pstapriv, mac);\r
+       psta = rtw_get_stainfo(pstapriv, (u8 *)mac);\r
        if (psta == NULL) {\r
                DBG_8192C("%s, sta_info is null\n", __func__);\r
                ret = -ENOENT;\r
@@ -1712,7 +1739,7 @@ static int cfg80211_rtw_get_station(struct wiphy *wiphy,
        {\r
                struct wlan_network  *cur_network = &(pmlmepriv->cur_network);\r
 \r
-               if (_rtw_memcmp(mac, cur_network->network.MacAddress, ETH_ALEN) == _FALSE) {\r
+               if (_rtw_memcmp((u8 *)mac, cur_network->network.MacAddress, ETH_ALEN) == _FALSE) {\r
                        DBG_871X("%s, mismatch bssid="MAC_FMT"\n", __func__, MAC_ARG(cur_network->network.MacAddress));\r
                        ret = -ENOENT;\r
                        goto exit;\r
@@ -2320,18 +2347,15 @@ if (padapter->registrypriv.mp_mode == 1)
 #endif /* CONFIG_CONCURRENT_MODE */\r
 \r
 #ifdef CONFIG_P2P\r
-       if( pwdinfo->driver_interface == DRIVER_CFG80211 )\r
+       if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))\r
        {\r
-               if(!rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE) && !rtw_p2p_chk_state(pwdinfo, P2P_STATE_IDLE))\r
-               {\r
-                       rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);\r
-                       rtw_free_network_queue(padapter, _TRUE);\r
+               rtw_p2p_set_state(pwdinfo, P2P_STATE_FIND_PHASE_SEARCH);\r
+               rtw_free_network_queue(padapter, _TRUE);\r
 \r
-                       if(social_channel == 0)\r
-                               rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);\r
-                       else\r
-                               rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_SOCIAL_LAST);\r
-               }\r
+               if(social_channel == 0)\r
+                       rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_NONE);\r
+               else\r
+                       rtw_p2p_findphase_ex_set(pwdinfo, P2P_FINDPHASE_EX_SOCIAL_LAST);\r
        }\r
 #endif //CONFIG_P2P\r
 \r
@@ -2867,7 +2891,7 @@ static int cfg80211_rtw_join_ibss(struct wiphy *wiphy, struct net_device *ndev,
        \r
        _rtw_memset(&ndis_ssid, 0, sizeof(NDIS_802_11_SSID));                   \r
        ndis_ssid.SsidLength = params->ssid_len;\r
-       _rtw_memcpy(ndis_ssid.Ssid, params->ssid, params->ssid_len);\r
+       _rtw_memcpy(ndis_ssid.Ssid, (u8 *)params->ssid, params->ssid_len);\r
 \r
        //DBG_8192C("ssid=%s, len=%zu\n", ndis_ssid.Ssid, params->ssid_len);\r
        \r
@@ -3012,7 +3036,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
        \r
        _rtw_memset(&ndis_ssid, 0, sizeof(NDIS_802_11_SSID));                   \r
        ndis_ssid.SsidLength = sme->ssid_len;\r
-       _rtw_memcpy(ndis_ssid.Ssid, sme->ssid, sme->ssid_len);\r
+       _rtw_memcpy(ndis_ssid.Ssid, (u8 *)sme->ssid, sme->ssid_len);\r
 \r
        DBG_8192C("ssid=%s, len=%zu\n", ndis_ssid.Ssid, sme->ssid_len);\r
        \r
@@ -3066,7 +3090,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
 \r
        DBG_8192C("%s, ie_len=%zu\n", __func__, sme->ie_len);\r
                        \r
-       ret = rtw_cfg80211_set_wpa_ie(padapter, sme->ie, sme->ie_len);\r
+       ret = rtw_cfg80211_set_wpa_ie(padapter, (u8 *)sme->ie, sme->ie_len);\r
        if (ret < 0)\r
                goto exit;\r
 \r
@@ -3162,7 +3186,7 @@ static int cfg80211_rtw_connect(struct wiphy *wiphy, struct net_device *ndev,
 \r
        //rtw_set_802_11_encryption_mode(padapter, padapter->securitypriv.ndisencryptstatus);\r
 \r
-       if (rtw_set_802_11_connect(padapter, sme->bssid, &ndis_ssid) == _FALSE) {\r
+       if (rtw_set_802_11_connect(padapter, (u8 *)sme->bssid, &ndis_ssid) == _FALSE) {\r
                ret = -1;\r
                goto exit;\r
        }\r
@@ -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)\r
                , MAC_ARG(pmksa->bssid), KEY_ARG(pmksa->pmkid));\r
 \r
-       if ( _rtw_memcmp( pmksa->bssid, strZeroMacAddress, ETH_ALEN ) == _TRUE )\r
+       if ( _rtw_memcmp((u8 *)pmksa->bssid, strZeroMacAddress, ETH_ALEN ) == _TRUE )\r
        {\r
                return -EINVAL;\r
        }\r
@@ -3318,11 +3342,11 @@ static int cfg80211_rtw_set_pmksa(struct wiphy *wiphy,
        //overwrite PMKID\r
        for(index=0 ; index<NUM_PMKID_CACHE; index++)\r
        {\r
-               if( _rtw_memcmp( psecuritypriv->PMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE )\r
+               if( _rtw_memcmp(psecuritypriv->PMKIDList[index].Bssid, (u8 *)pmksa->bssid, ETH_ALEN) ==_TRUE )\r
                { // BSSID is matched, the same AP => rewrite with new PMKID.\r
                        DBG_871X(FUNC_NDEV_FMT" BSSID exists in the PMKList.\n", FUNC_NDEV_ARG(ndev));\r
 \r
-                       _rtw_memcpy( psecuritypriv->PMKIDList[index].PMKID, pmksa->pmkid, WLAN_PMKID_LEN);\r
+                       _rtw_memcpy( psecuritypriv->PMKIDList[index].PMKID, (u8 *)pmksa->pmkid, WLAN_PMKID_LEN);\r
                        psecuritypriv->PMKIDList[index].bUsed = _TRUE;\r
                        psecuritypriv->PMKIDIndex = index+1;\r
                        blInserted = _TRUE;\r
@@ -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",\r
                        FUNC_NDEV_ARG(ndev), psecuritypriv->PMKIDIndex );\r
 \r
-               _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, pmksa->bssid, ETH_ALEN);\r
-               _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].PMKID, pmksa->pmkid, WLAN_PMKID_LEN);\r
+               _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].Bssid, (u8 *)pmksa->bssid, ETH_ALEN);\r
+               _rtw_memcpy(psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].PMKID, (u8 *)pmksa->pmkid, WLAN_PMKID_LEN);\r
 \r
                psecuritypriv->PMKIDList[psecuritypriv->PMKIDIndex].bUsed = _TRUE;\r
                psecuritypriv->PMKIDIndex++ ;\r
@@ -3363,10 +3387,10 @@ static int cfg80211_rtw_del_pmksa(struct wiphy *wiphy,
 \r
        for(index=0 ; index<NUM_PMKID_CACHE; index++)\r
        {\r
-               if( _rtw_memcmp( psecuritypriv->PMKIDList[index].Bssid, pmksa->bssid, ETH_ALEN) ==_TRUE )\r
+               if( _rtw_memcmp(psecuritypriv->PMKIDList[index].Bssid, (u8 *)pmksa->bssid, ETH_ALEN) ==_TRUE )\r
                { // BSSID is matched, the same AP => Remove this PMKID information and reset it. \r
-                       _rtw_memset( psecuritypriv->PMKIDList[index].Bssid, 0x00, ETH_ALEN );\r
-                       _rtw_memset( psecuritypriv->PMKIDList[index].PMKID, 0x00, WLAN_PMKID_LEN );\r
+                       _rtw_memset(psecuritypriv->PMKIDList[index].Bssid, 0x00, ETH_ALEN );\r
+                       _rtw_memset(psecuritypriv->PMKIDList[index].PMKID, 0x00, WLAN_PMKID_LEN );\r
                        psecuritypriv->PMKIDList[index].bUsed = _FALSE;\r
                        bMatched = _TRUE;\r
                        DBG_871X(FUNC_NDEV_FMT" clear id:%hhu\n", FUNC_NDEV_ARG(ndev), index);          \r
@@ -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;\r
 \r
                if(0)\r
-               DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%d), from ie:(%s,%d)\n", FUNC_ADPT_ARG(adapter),\r
-                       settings->ssid, settings->ssid_len,\r
-                       pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength);\r
+                       DBG_871X(FUNC_ADPT_FMT" ssid:(%s,%zu), from ie:(%s,%d)\n", FUNC_ADPT_ARG(adapter),\r
+                               settings->ssid, settings->ssid_len,\r
+                               pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength);\r
 \r
                _rtw_memcpy(pbss_network->Ssid.Ssid, (void *)settings->ssid, settings->ssid_len);\r
                pbss_network->Ssid.SsidLength = settings->ssid_len;\r
@@ -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;\r
 \r
                if(0)\r
-               DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),\r
-                       pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,\r
-                       pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);\r
+                       DBG_871X(FUNC_ADPT_FMT" after ssid:(%s,%d), (%s,%d)\n", FUNC_ADPT_ARG(adapter),\r
+                               pbss_network->Ssid.Ssid, pbss_network->Ssid.SsidLength,\r
+                               pbss_network_ext->Ssid.Ssid, pbss_network_ext->Ssid.SsidLength);\r
        }\r
 \r
        return ret;\r
@@ -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))\r
 \r
 static int     cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev,\r
-                              u8 *mac, struct station_parameters *params)\r
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0))\r
+       u8 *mac,\r
+#else\r
+       const u8 *mac,\r
+#endif\r
+       struct station_parameters *params)\r
 {\r
        DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));\r
        \r
@@ -4102,7 +4131,12 @@ static int       cfg80211_rtw_add_station(struct wiphy *wiphy, struct net_device *ndev
 }\r
 \r
 static int     cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev,\r
-                              u8 *mac)\r
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0))\r
+       u8 *mac\r
+#else\r
+       const u8 *mac\r
+#endif\r
+)\r
 {\r
        int ret=0;      \r
        _irqL irqL;\r
@@ -4156,7 +4190,7 @@ static int        cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev
                \r
                plist = get_next(plist);        \r
        \r
-               if(_rtw_memcmp(mac, psta->hwaddr, ETH_ALEN))            \r
+               if(_rtw_memcmp((u8 *)mac, psta->hwaddr, ETH_ALEN))\r
                {\r
                        if(psta->dot8021xalg == 1 && psta->bpairwise_key_installed == _FALSE)\r
                        {\r
@@ -4193,7 +4227,12 @@ static int       cfg80211_rtw_del_station(struct wiphy *wiphy, struct net_device *ndev
 }\r
 \r
 static int     cfg80211_rtw_change_station(struct wiphy *wiphy, struct net_device *ndev,\r
-                                 u8 *mac, struct station_parameters *params)\r
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,16,0))\r
+       u8 *mac,\r
+#else\r
+       const u8 *mac,\r
+#endif\r
+       struct station_parameters *params)\r
 {\r
        DBG_871X(FUNC_NDEV_FMT"\n", FUNC_NDEV_ARG(ndev));\r
        \r
@@ -4718,9 +4757,11 @@ static s32 cfg80211_rtw_remain_on_channel(struct wiphy *wiphy,
                                if(ATOMIC_READ(&pwdev_priv->switch_ch_to)==1 ||\r
                                        (remain_ch != pmlmeext->cur_channel))\r
                                {\r
-                                       DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);           \r
-                                       issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);\r
-                               \r
+                                       if (check_buddy_fwstate(padapter, WIFI_FW_STATION_STATE)) {\r
+                                               DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);\r
+                                               issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);\r
+                                       }\r
+\r
                                        ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);\r
                        \r
                                        DBG_8192C("%s, set switch ch timer, duration=%d\n", __func__, duration-pwdinfo->ext_listen_interval);\r
@@ -4907,8 +4948,10 @@ static int _cfg80211_rtw_mgmt_tx(_adapter *padapter, u8 tx_ch, const u8 *buf, si
                        u16 ext_listen_period;\r
                        \r
                        if (ATOMIC_READ(&pwdev_priv->switch_ch_to)==1) {\r
-                               DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);\r
-                               issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);\r
+                               if (check_buddy_fwstate(padapter, WIFI_FW_STATION_STATE)) {\r
+                                       DBG_8192C("%s, issue nulldata pwrbit=1\n", __func__);\r
+                                       issue_nulldata(padapter->pbuddy_adapter, NULL, 1, 3, 500);\r
+                               }\r
 \r
                                ATOMIC_SET(&pwdev_priv->switch_ch_to, 0);\r
 \r
@@ -5022,30 +5065,43 @@ static int cfg80211_rtw_mgmt_tx(struct wiphy *wiphy,
 #else\r
        struct net_device *ndev,\r
 #endif\r
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,14,0)) || defined(COMPAT_KERNEL_RELEASE)\r
        struct ieee80211_channel *chan,\r
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)\r
+       #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)\r
        bool offchan,\r
-#endif\r
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))\r
+       #endif\r
+       #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0))\r
        enum nl80211_channel_type channel_type,\r
        #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE)\r
        bool channel_type_valid,\r
        #endif\r
-#endif\r
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)\r
+       #endif\r
+       #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38)) || defined(COMPAT_KERNEL_RELEASE)\r
        unsigned int wait,\r
-#endif\r
+       #endif\r
        const u8 *buf, size_t len,\r
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))\r
+       #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))\r
        bool no_cck,\r
-#endif\r
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))\r
+       #endif\r
+       #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))\r
        bool dont_wait_for_ack,\r
+       #endif\r
+#else\r
+       struct cfg80211_mgmt_tx_params *params,\r
 #endif\r
        u64 *cookie)\r
 {\r
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))\r
        struct net_device *ndev = wdev_to_ndev(wdev);\r
+#endif\r
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,14,0)) || defined(COMPAT_KERNEL_RELEASE)\r
+       struct ieee80211_channel *chan = params->chan;\r
+       bool offchan = params->offchan;\r
+       unsigned int wait = params->wait;\r
+       const u8 *buf = params->buf;\r
+       size_t len = params->len;\r
+       bool no_cck = params->no_cck;\r
+       bool dont_wait_for_ack = params->dont_wait_for_ack;\r
 #endif\r
        int ret = 0;\r
        int tx_ret;\r
@@ -5778,7 +5834,7 @@ void rtw_cfg80211_init_wiphy(_adapter *padapter)
        }\r
 \r
        /* init regulary domain */\r
-       rtw_regd_init(padapter, rtw_reg_notifier);\r
+       rtw_regd_init(padapter);\r
 \r
        /* copy mac_addr to wiphy */\r
        _rtw_memcpy(wiphy->perm_addr, padapter->eeprompriv.mac_addr, ETH_ALEN);\r
@@ -5866,7 +5922,11 @@ static void rtw_cfg80211_preinit_wiphy(_adapter *padapter, struct wiphy *wiphy)
 #endif\r
 \r
 #if defined(CONFIG_PM) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 0, 0))\r
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,11,0))\r
        wiphy->wowlan = wowlan_stub;\r
+#else\r
+       wiphy->wowlan = &wowlan_stub;\r
+#endif\r
 #endif\r
 \r
 #if defined(CONFIG_TDLS) && (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))\r
index 73999fd299b74f42d4cb023be8e28d715bcb34fe..d9507337e815e9327c6b1252c8ea898c745babfb 100755 (executable)
@@ -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);
index 78ea1017670575db94f0c5e8744dbff4794542f9..4a12ed5e53210bf0ff67e89db256d0ecab535fb4 100755 (executable)
@@ -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;       
index c36266fd73cf159faad80dcbc422b00942f9f808..c5d387919fcae6a8c092619d0eb4534e4b45c4b3 100755 (executable)
@@ -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) {
index af10d8e082ea3067851cb9f0fbd91492096a5976..dd0947613929bf91bf9bf95a4bc9f1f1caa9d126 100755 (executable)
@@ -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},
index 1c5ae3c7b07bd054df0219285b4893885aa1b3eb..50fc3fa9ef6faa9817c4cfe9cc27a5392445fc64 100755 (executable)
@@ -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;
index 252fe1715c88cf7d4c7ac11fd0fc0187aaa49e10..2831ff140adf914434cd7c62b518ddf3f1cdab75 100755 (executable)
@@ -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
old mode 100644 (file)
new mode 100755 (executable)
index fa7b4f8..0cc47c1
@@ -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 */
 
index 0b04a0b5832dba46907d847a4a71d1944084e4d9..732408f0956e628077fd94943af21a0449e094a8 100755 (executable)
@@ -21,6 +21,7 @@
 
 #include <drv_types.h>
 
+#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 (executable)
index 0000000..f825e8b
--- /dev/null
@@ -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 (executable)
index 0000000..6043382
--- /dev/null
@@ -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"
+