CONFIG_PNO_SET_DEBUG = n
CONFIG_AP_WOWLAN = n
######### Notify SDIO Host Keep Power During Syspend ##########
-CONFIG_RTW_SDIO_PM_KEEP_POWER = n
+CONFIG_RTW_SDIO_PM_KEEP_POWER = y
###################### Platform Related #######################
CONFIG_PLATFORM_I386_PC = n
CONFIG_PLATFORM_ANDROID_X86 = n
CONFIG_PLATFORM_ARM_TCC8900 = n
CONFIG_PLATFORM_ARM_TCC8920 = n
CONFIG_PLATFORM_ARM_TCC8920_JB42 = n
-CONFIG_PLATFORM_ARM_RK2818 = y
+CONFIG_PLATFORM_ARM_RK2818 = n
CONFIG_PLATFORM_ARM_RK3066 = n
-CONFIG_PLATFORM_ARM_RK3188 = n
+CONFIG_PLATFORM_ARM_RK3188 = y
CONFIG_PLATFORM_ARM_URBETTER = n
CONFIG_PLATFORM_ARM_TI_PANDA = n
CONFIG_PLATFORM_MIPS_JZ4760 = n
CONFIG_PLATFORM_ARM_SUN7I = n
CONFIG_PLATFORM_ARM_SUN8I = n
CONFIG_PLATFORM_ACTIONS_ATM702X = n
+CONFIG_PLATFORM_ACTIONS_ATM705X = n
CONFIG_PLATFORM_ACTIONS_ATV5201 = n
CONFIG_PLATFORM_ARM_RTD299X = n
CONFIG_PLATFORM_ARM_SPREADTRUM_6820 = n
CONFIG_PLATFORM_ARM_SPREADTRUM_8810 = n
CONFIG_PLATFORM_ARM_WMT = n
CONFIG_PLATFORM_TI_DM365 = n
+CONFIG_PLATFORM_AML = n
CONFIG_PLATFORM_MOZART = n
CONFIG_PLATFORM_RTK119X = n
###############################################################
MODULE_NAME :=wlan
endif
+ifeq ($(CONFIG_PLATFORM_ACTIONS_ATM705X), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN
+# default setting for Android 4.1, 4.2, 4.3, 4.4
+EXTRA_CFLAGS += -DCONFIG_PLATFORM_ACTIONS_ATM705X
+EXTRA_CFLAGS += -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS
+
+# Enable this for Android 5.0
+EXTRA_CFLAGS += -DCONFIG_RADIO_WORK
+
+ifeq ($(CONFIG_SDIO_HCI), y)
+EXTRA_CFLAGS += -DCONFIG_PLATFORM_OPS
+_PLATFORM_FILES += platform/platform_arm_act_sdio.o
+endif
+
+ARCH := arm
+CROSS_COMPILE := /opt/arm-2011.09/bin/arm-none-linux-gnueabi-
+KSRC := /home/android_sdk/Action-semi/705a_android_L/android/kernel
+endif
+
ifeq ($(CONFIG_PLATFORM_TI_AM3517), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_ANDROID -DCONFIG_PLATFORM_SHUTTLE
CROSS_COMPILE := arm-eabi-
KVER := 2.6.18
endif
+ifeq ($(CONFIG_PLATFORM_AML), y)
+EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -fno-pic
+EXTRA_CFLAGS += -DCONFIG_IOCTL_CFG80211 -DCONFIG_CONCURRENT_MODE
+EXTRA_CFLAGS += -DCONFIG_P2P_IPS -DRTW_USE_CFG80211_STA_EVENT
+EXTRA_CFLAGS += -DCONFIG_LPS_SLOW_TRANSITION
+ARCH := arm
+KVER :=
+CROSS_COMPILE := arm-none-linux-gnueabi-
+KSRC := ../../../../
+endif
+
ifeq ($(CONFIG_PLATFORM_MOZART), y)
EXTRA_CFLAGS += -DCONFIG_LITTLE_ENDIAN -DCONFIG_PLATFORM_MOZART
ARCH := arm
EXTRA_CFLAGS += -DRTW_SUPPORT_PLATFORM_SHUTDOWN
# default setting for Special function
EXTRA_CFLAGS += -DCONFIG_P2P_IPS
+ifeq ($(CONFIG_SDIO_HCI), y)
+EXTRA_CFLAGS += -DCONFIG_RESUME_IN_WORKQUEUE
+endif
ARCH := arm
CROSS_COMPILE := /home/android_sdk/Rockchip/Rk3188/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin/arm-eabi-
KSRC := /home/android_sdk/Rockchip/Rk3188/kernel
--- /dev/null
+#!/bin/bash
+rmmod 8192cu
+rmmod 8192ce
+rmmod 8192du
+rmmod 8192de
struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);\r
struct sta_priv *pstapriv = &padapter->stapriv;\r
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;\r
+ struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);\r
struct wlan_acl_pool *pacl_list = &pstapriv->acl_list;\r
\r
pmlmepriv->update_bcn = _FALSE;\r
#ifdef CONFIG_80211N_HT\r
pmlmepriv->num_sta_no_ht = 0;\r
#endif //CONFIG_80211N_HT\r
+\r
+ pmlmeinfo->HT_info_enable =0;\r
+ pmlmeinfo->HT_caps_enable=0;\r
+ pmlmeinfo->HT_enable=0;\r
+\r
pmlmepriv->num_sta_ht_20mhz = 0;\r
\r
pmlmepriv->olbc = _FALSE;\r
struct rtw_ieee80211_channel *ch, int ch_num)
{
u8 res = _FAIL;
+#ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
+ u8 wireless_mode = 0;
+ u32 mlmext_info_state = 0;
+#endif
struct cmd_obj *ph2c;
struct sitesurvey_parm *psurveyPara;
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
if(res == _SUCCESS) {
pmlmepriv->scan_start_time = rtw_get_current_time();
-
#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 );
- else
+ mlmext_info_state =
+ padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state;
+ wireless_mode = padapter->registrypriv.wireless_mode;
+
+ if((mlmext_info_state & 0x03) == WIFI_FW_AP_STATE) {
+ if(IsSupported5G(wireless_mode) && IsSupported24G(wireless_mode))
+ _set_timer(&pmlmepriv->scan_to_timer,
+ CONC_SCANNING_TIMEOUT_DUAL_BAND);
+ else
+ _set_timer(&pmlmepriv->scan_to_timer,
+ CONC_SCANNING_TIMEOUT_SINGLE_BAND);
+ } else
#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
_set_timer(&pmlmepriv->scan_to_timer, SCANNING_TIMEOUT);
u8 *rtw_get_wps_ie(u8 *in_ie, uint in_len, u8 *wps_ie, uint *wps_ielen)
{
uint cnt;
- u8 *wpsie_ptr=NULL;
- u8 eid, wps_oui[4]={0x0,0x50,0xf2,0x04};
+ u8 *wpsie_ptr = NULL;
+ u8 eid, wps_oui[4] = {0x00, 0x50, 0xf2, 0x04};
- if(wps_ielen)
+ if (wps_ielen)
*wps_ielen = 0;
- if(!in_ie || in_len<=0)
+ if (!in_ie) {
+ rtw_warn_on(1);
+ return wpsie_ptr;
+ }
+
+ if (in_len <= 0)
return wpsie_ptr;
cnt = 0;
- while(cnt<in_len)
- {
+ while (cnt + 1 + 4 < in_len) {
eid = in_ie[cnt];
- if((eid==_WPA_IE_ID_)&&(_rtw_memcmp(&in_ie[cnt+2], wps_oui, 4)==_TRUE))
- {
- wpsie_ptr = &in_ie[cnt];
+ if (cnt + 1 + 4 >= MAX_IE_SZ) {
+ rtw_warn_on(1);
+ return NULL;
+ }
- if(wps_ie)
- _rtw_memcpy(wps_ie, &in_ie[cnt], in_ie[cnt+1]+2);
-
- if(wps_ielen)
- *wps_ielen = in_ie[cnt+1]+2;
-
- cnt+=in_ie[cnt+1]+2;
+ if (eid == WLAN_EID_VENDOR_SPECIFIC && _rtw_memcmp(&in_ie[cnt + 2], wps_oui, 4) == _TRUE) {
+ wpsie_ptr = in_ie + cnt;
+
+ if (wps_ie)
+ _rtw_memcpy(wps_ie, &in_ie[cnt], in_ie[cnt + 1] + 2);
+
+ if (wps_ielen)
+ *wps_ielen = in_ie[cnt + 1] + 2;
break;
+ } else {
+ cnt += in_ie[cnt + 1] + 2;
}
- else
- {
- cnt+=in_ie[cnt+1]+2; //goto next
- }
- }
+ }
return wpsie_ptr;
}
static int __init rtw_mem_init(void)\r
{\r
int i;\r
+ u32 max_recvbuf_sz = 0;\r
SIZE_PTR tmpaddr=0;\r
SIZE_PTR alignment=0;\r
struct sk_buff *pskb=NULL;\r
\r
skb_queue_head_init(&rtk_skb_mem_q);\r
\r
+ if (max_recvbuf_sz == 0)\r
+ max_recvbuf_sz = MAX_RECVBUF_SZ;\r
+\r
+ DBG_871X("%s: max_recvbuf_sz: %d\n", __func__, max_recvbuf_sz);\r
+\r
for(i=0; i<NR_PREALLOC_RECV_SKB; i++)\r
{\r
- pskb = __dev_alloc_skb(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);\r
+ pskb = __dev_alloc_skb(max_recvbuf_sz + RECVBUFF_ALIGN_SZ, in_interrupt() ? GFP_ATOMIC : GFP_KERNEL);\r
if(pskb)\r
{ \r
tmpaddr = (SIZE_PTR)pskb->data;\r
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
-
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);
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
{
#endif //CONFIG_80211AC_VHT
u8 cap_content[8] = {0};
u8 *pframe;
+ u8 null_content[8] = {0};
if (phtpriv->bss_coexist) {
}
#endif //CONFIG_80211AC_VHT
- pframe = rtw_set_ie(out_ie+*pout_len, EID_EXTCapability, 8, cap_content , pout_len);
+ /*
+ * From 802.11 specification,if a STA does not support any of
+ * capabilities defined in the Extended Capabilities element,
+ * then the STA is not required to transmit the
+ * Extended Capabilities element.
+ */
+ if (_FALSE == _rtw_memcmp(cap_content, null_content, 8)) {
+ pframe = rtw_set_ie(out_ie + *pout_len,
+ EID_EXTCapability, 8, cap_content , pout_len);
+ }
}
#endif
}
#endif //CONFIG_CONCURRENT_MODE
+
+static const char *miracast_mode_str[] = {
+ "DISABLED",
+ "SOURCE",
+ "SINK",
+ "INVALID",
+};
+
+const char *get_miracast_mode_str(int mode)
+{
+ if (mode < MIRACAST_DISABLED || mode >= MIRACAST_INVALID)
+ mode = MIRACAST_INVALID;
+
+ return miracast_mode_str[mode];
+}
reason = le16_to_cpu(*(unsigned short *)(pframe + WLAN_HDR_A3_LEN));
- DBG_871X("%s Reason code(%d)\n", __FUNCTION__,reason);
-
rtw_lock_rx_suspend_timeout(8000);
#ifdef CONFIG_AP_MODE
//rtw_free_stainfo(padapter, psta);
//_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- DBG_871X_LEVEL(_drv_always_, "ap recv deauth reason code(%d) sta:%pM\n",
- reason, GetAddr2Ptr(pframe));
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" reason=%u, ta=%pM\n"
+ , FUNC_ADPT_ARG(padapter), reason, GetAddr2Ptr(pframe));
psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
if(psta)
}
}
- DBG_871X_LEVEL(_drv_always_, "sta recv deauth reason code(%d) sta:%pM, ignore = %d\n",
- reason, GetAddr3Ptr(pframe), ignore_received_deauth);
-
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" reason=%u, ta=%pM, ignore=%d\n"
+ , FUNC_ADPT_ARG(padapter), reason, GetAddr2Ptr(pframe), ignore_received_deauth);
+
if ( 0 == ignore_received_deauth )
{
- receive_disconnect(padapter, GetAddr3Ptr(pframe) ,reason);
+ receive_disconnect(padapter, GetAddr2Ptr(pframe), reason);
}
}
pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
reason = le16_to_cpu(*(unsigned short *)(pframe + WLAN_HDR_A3_LEN));
- DBG_871X("%s Reason code(%d)\n", __FUNCTION__,reason);
-
rtw_lock_rx_suspend_timeout(8000);
#ifdef CONFIG_AP_MODE
//rtw_free_stainfo(padapter, psta);
//_exit_critical_bh(&(pstapriv->sta_hash_lock), &irqL);
- DBG_871X_LEVEL(_drv_always_, "ap recv disassoc reason code(%d) sta:%pM\n",
- reason, GetAddr2Ptr(pframe));
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" reason=%u, ta=%pM\n"
+ , FUNC_ADPT_ARG(padapter), reason, GetAddr2Ptr(pframe));
psta = rtw_get_stainfo(pstapriv, GetAddr2Ptr(pframe));
if(psta)
else
#endif
{
- DBG_871X_LEVEL(_drv_always_, "sta recv disassoc reason code(%d) sta:%pM\n",
- reason, GetAddr3Ptr(pframe));
-
- receive_disconnect(padapter, GetAddr3Ptr(pframe), reason);
+ DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" reason=%u, ta=%pM\n"
+ , FUNC_ADPT_ARG(padapter), reason, GetAddr2Ptr(pframe));
+
+ receive_disconnect(padapter, GetAddr2Ptr(pframe), reason);
}
pmlmepriv->LinkDetectInfo.bBusyTraffic = _FALSE;
return _SUCCESS;
//val8 |= 0x0f;
//rtw_hal_set_hwreg(padapter, HW_VAR_TXPAUSE, (u8 *)(&val8));
#if defined(CONFIG_STA_MODE_SCAN_UNDER_AP_MODE) || defined(CONFIG_ATMEL_RC_PATCH)
- if((padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state&0x03) == WIFI_FW_AP_STATE)
- {
- if( pmlmeinfo->scan_cnt == RTW_SCAN_NUM_OF_CH )
- {
- pmlmeinfo->scan_cnt = 0;
- survey_channel = pbuddy_mlmeext->cur_channel;
- stay_buddy_ch = 1;
- }
- else
- {
- if( pmlmeinfo->scan_cnt == 0 )
+ if ((padapter->pbuddy_adapter->mlmeextpriv.mlmext_info.state&0x03) == WIFI_FW_AP_STATE) {
+ if (pmlmeinfo->scan_cnt == RTW_SCAN_NUM_OF_CH) {
+ if (pmlmeinfo->backop_cnt == 0)
+ stay_buddy_ch = 1;
+ else if (pmlmeinfo->backop_cnt == RTW_STAY_AP_CH_MILLISECOND)
stay_buddy_ch = 2;
+
+ if (stay_buddy_ch == 2) {
+ pmlmeinfo->scan_cnt = 1;
+ pmlmeinfo->backop_cnt = 0;
+ } else if (stay_buddy_ch == 1) {
+ pmlmeinfo->backop_cnt++;
+ survey_channel = pbuddy_mlmeext->cur_channel;
+ } else {
+ pmlmeinfo->backop_cnt++;
+ set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
+ return;
+ }
+ } else {
pmlmeinfo->scan_cnt++;
}
}
// assume home channel is 6, channel switch sequence will be
// 1,2-6-3,4-6-5,6-6-7,8-6-9,10-6-11,12-6-13,14
//if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE)==_TRUE)
-
- if( stay_buddy_ch == 1 ){
- channel_scan_time_ms = pmlmeext->chan_scan_time * RTW_STAY_AP_CH_MILLISECOND;
- }
- else {
- if( check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
- channel_scan_time_ms = 20;
- else
- channel_scan_time_ms = 40
- }
-#elif defined(CONFIG_STA_MODE_SCAN_UNDER_AP_MODE)
- if( stay_buddy_ch == 1 )
- channel_scan_time_ms = pmlmeext->chan_scan_time * RTW_STAY_AP_CH_MILLISECOND ;
- else
- channel_scan_time_ms = pmlmeext->chan_scan_time;
+ if (check_fwstate(pmlmepriv, _FW_LINKED) == _TRUE)
+ set_survey_timer(pmlmeext, 20);
+ else
+ set_survey_timer(pmlmeext, 40);
#else
- channel_scan_time_ms = pmlmeext->chan_scan_time;
+ set_survey_timer(pmlmeext, pmlmeext->chan_scan_time);
#endif
- set_survey_timer(pmlmeext, channel_scan_time_ms);
#if defined(CONFIG_SIGNAL_DISPLAY_DBM) && defined(CONFIG_BACKGROUND_NOISE_MONITOR)
{
struct noise_info info;
#if defined(CONFIG_STA_MODE_SCAN_UNDER_AP_MODE) || defined(CONFIG_ATMEL_RC_PATCH)
pmlmeinfo->scan_cnt = 0;
+ pmlmeinfo->backop_cnt = 0;
#endif
#ifdef CONFIG_ANTENNA_DIVERSITY
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- //check A3
if (!(_rtw_memcmp(MacAddr, get_my_bssid(&pmlmeinfo->network), ETH_ALEN)))
return _SUCCESS;
if(pmlmeext->sitesurvey_res.state == SCAN_PROCESS)
{
#if defined(CONFIG_STA_MODE_SCAN_UNDER_AP_MODE) || defined(CONFIG_ATMEL_RC_PATCH)
- if( padapter->mlmeextpriv.mlmext_info.scan_cnt != RTW_SCAN_NUM_OF_CH )
+ if (padapter->mlmeextpriv.mlmext_info.scan_cnt != RTW_SCAN_NUM_OF_CH
+ || padapter->mlmeextpriv.mlmext_info.backop_cnt == RTW_STAY_AP_CH_MILLISECOND)
#endif
pmlmeext->sitesurvey_res.channel_idx++;
}
return H2C_SUCCESS;
}
+u8 rtw_scan_sparse(_adapter *adapter, struct rtw_ieee80211_channel *ch, u8 ch_num)
+{
+/* interval larger than this is treated as backgroud scan */
+#ifndef RTW_SCAN_SPARSE_BG_INTERVAL_MS
+#define RTW_SCAN_SPARSE_BG_INTERVAL_MS 12000
+#endif
+
+#ifndef RTW_SCAN_SPARSE_CH_NUM_MIRACAST
+#define RTW_SCAN_SPARSE_CH_NUM_MIRACAST 1
+#endif
+#ifndef RTW_SCAN_SPARSE_CH_NUM_BG
+#define RTW_SCAN_SPARSE_CH_NUM_BG 4
+#endif
+
+#define SCAN_SPARSE_CH_NUM_INVALID 255
+
+ static u8 token = 255;
+ u32 interval;
+ bool busy_traffic = _FALSE;
+ bool miracast_enabled = _FALSE;
+ bool bg_scan = _FALSE;
+ u8 max_allow_ch = SCAN_SPARSE_CH_NUM_INVALID;
+ u8 scan_division_num;
+ u8 ret_num = ch_num;
+ struct registry_priv *regsty = dvobj_to_regsty(adapter_to_dvobj(adapter));
+ struct mlme_ext_priv *mlmeext = &adapter->mlmeextpriv;
+
+ if (regsty->wifi_spec)
+ goto exit;
+
+ /* assume ch_num > 6 is normal scan */
+ if (ch_num <= 6)
+ goto exit;
+
+ if (mlmeext->last_scan_time == 0)
+ mlmeext->last_scan_time = rtw_get_current_time();
+
+ interval = rtw_get_passing_time_ms(mlmeext->last_scan_time);
+
+ if (adapter->mlmepriv.LinkDetectInfo.bBusyTraffic == _TRUE
+ #ifdef CONFIG_CONCURRENT_MODE
+ || (adapter->pbuddy_adapter && adapter->pbuddy_adapter->mlmepriv.LinkDetectInfo.bBusyTraffic == _TRUE)
+ #endif
+ )
+ busy_traffic = _TRUE;
+
+ #ifdef CONFIG_WFD
+ if (is_miracast_enabled(adapter->wfd_info.stack_wfd_mode)
+ #ifdef CONFIG_CONCURRENT_MODE
+ || (adapter->pbuddy_adapter && is_miracast_enabled(adapter->pbuddy_adapter->wfd_info.stack_wfd_mode))
+ #endif
+ )
+ miracast_enabled = _TRUE;
+ #endif
+
+ if (interval > RTW_SCAN_SPARSE_BG_INTERVAL_MS)
+ bg_scan = _TRUE;
+
+ /* max_allow_ch by conditions*/
+
+ #if RTW_SCAN_SPARSE_MIRACAST
+ if (miracast_enabled == _TRUE && busy_traffic == _TRUE)
+ max_allow_ch = rtw_min(max_allow_ch, RTW_SCAN_SPARSE_CH_NUM_MIRACAST);
+ #endif
+
+ #if RTW_SCAN_SPARSE_BG
+ if (bg_scan == _TRUE)
+ max_allow_ch = rtw_min(max_allow_ch, RTW_SCAN_SPARSE_CH_NUM_BG);
+ #endif
+
+
+ if (max_allow_ch != SCAN_SPARSE_CH_NUM_INVALID) {
+ int i;
+ int k = 0;
+
+ scan_division_num = (ch_num / max_allow_ch) + ((ch_num % max_allow_ch)?1:0);
+ token = (token + 1) % scan_division_num;
+
+ if (0)
+ DBG_871X("scan_division_num:%u, token:%u\n", scan_division_num, token);
+
+ for (i = 0; i < ch_num; i++) {
+ if (ch[i].hw_value && (i % scan_division_num) == token
+ ) {
+ if (i != k)
+ _rtw_memcpy(&ch[k], &ch[i], sizeof(struct rtw_ieee80211_channel));
+ k++;
+ }
+ }
+
+ _rtw_memset(&ch[k], 0, sizeof(struct rtw_ieee80211_channel));
+
+ ret_num = k;
+ mlmeext->last_scan_time = rtw_get_current_time();
+ }
+
+exit:
+ return ret_num;
+}
+
int rtw_scan_ch_decision(_adapter *padapter, struct rtw_ieee80211_channel *out,
u32 out_num, struct rtw_ieee80211_channel *in, u32 in_num)
{
}
}
-#ifdef CONFIG_SCAN_SPARSE //partial scan, ASUS RK3188 use the feature
- /* assume j>6 is normal scan */
- if ((j > 6) && (padapter->registrypriv.wifi_spec != 1))
- {
- static u8 token = 0;
- u32 interval;
-
- if (pmlmeext->last_scan_time == 0)
- pmlmeext->last_scan_time = rtw_get_current_time();
-
- interval = rtw_get_passing_time_ms(pmlmeext->last_scan_time);
- if ((interval > ALLOW_SCAN_INTERVAL)
-#if 0 // Miracast can't do AP scan
- || (padapter->mlmepriv.LinkDetectInfo.bBusyTraffic == _TRUE)
-#ifdef CONFIG_CONCURRENT_MODE
- || (padapter->pbuddy_adapter
- && (padapter->pbuddy_adapter->mlmepriv.LinkDetectInfo.bBusyTraffic == _TRUE))
-#endif // CONFIG_CONCURRENT_MODE
-#endif
- )
- {
- // modify scan plan
- int k = 0;
- _rtw_memset(in, 0, sizeof(struct rtw_ieee80211_channel)*in_num);
- _rtw_memcpy(in, out, sizeof(struct rtw_ieee80211_channel)*j);
- _rtw_memset(out, 0, sizeof(struct rtw_ieee80211_channel)*j);
-
- for (i=0;i<j;i++) {
- if (in[i].hw_value && (i%SCAN_DIVISION_NUM) == token) {
- _rtw_memcpy(&out[k], &in[i], sizeof(struct rtw_ieee80211_channel));
- k++;
- }
- if(k>=out_num)
- break;
- }
-
- j = k;
- token = (token+1)%SCAN_DIVISION_NUM;
- }
-
- pmlmeext->last_scan_time = rtw_get_current_time();
- }
-#endif //CONFIG_SCAN_SPARSE
+ /* scan_sparse */
+ j = rtw_scan_sparse(padapter, out, j);
return j;
}
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;
}
rtw_free_assoc_resources(pbuddy_adapter, 1);
}
}
-
-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);
*ch = cur_ch;
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 )
{
pcfg80211_wdinfo->is_ro_ch = _FALSE;
pcfg80211_wdinfo->last_ro_ch_time = rtw_get_current_time();
- if (pcfg80211_wdinfo->not_indic_ro_ch_exp == _TRUE)
- return;
-
- DBG_871X("cfg80211_remain_on_channel_expired, ch=%d, bw=%d, offset=%d\n",
- rtw_get_oper_ch(padapter), rtw_get_oper_bw(padapter), rtw_get_oper_choffset(padapter));
+ DBG_871X("cfg80211_remain_on_channel_expired cookie:0x%llx, ch=%d, bw=%d, offset=%d\n"
+ , pcfg80211_wdinfo->remain_on_ch_cookie
+ , rtw_get_oper_ch(padapter), rtw_get_oper_bw(padapter), rtw_get_oper_choffset(padapter));
rtw_cfg80211_remain_on_channel_expired(padapter,
pcfg80211_wdinfo->remain_on_ch_cookie,
u4Byte Weighting=0;\r
PSTA_INFO_T pEntry;\r
\r
- if(pPktinfo->StationID == 0xFF)\r
+ if (pPktinfo->StationID >= ODM_ASSOCIATE_ENTRY_NUM)\r
return;\r
\r
#if (RTL8723B_SUPPORT == 1)||(RTL8821A_SUPPORT == 1)\r
tx_index_offset = 0x0010;
break;
}
- for (index = 0 ; index < 12 ; index++) {
+ for (index = 0 ; index < 11 ; index++) {
if (pContent[tx_index_offset + index] == 0xFF) {
return _FALSE;
} else {
do{
valid = rtw_read8(padapter,REG_HMETFR) & BIT(msgbox_num);
- if(0 == valid ){
+ if (0 == valid)
read_down = _TRUE;
- }
-#ifdef CONFIG_WOWLAN
else
rtw_msleep_os(1);
-#endif
}while( (!read_down) && (retry_cnts--));
return read_down;
#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
{
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;
+ }
+ #endif // CONFIG_TDLS
value_rcr = rtw_read32(adapter, REG_RCR);
if(*((u8 *)val))//under sitesurvey
{
*(( u32*)pValue) = DRVINFO_SZ;
break;
case HAL_DEF_MAX_RECVBUF_SZ:
- *(( u32*)pValue) = MAX_RECVBUF_SZ;
+ *(( u32*)pValue) = MAX_RX_DMA_BUFFER_SIZE_88E(Adapter);
break;
case HAL_DEF_RX_PACKET_OFFSET:
*(( u32*)pValue) = RXDESC_SIZE + DRVINFO_SZ;
}\r
\r
// 2010.07.13 AMPDU aggregation number B\r
+#ifdef CONFIG_MINIMAL_MEMORY_USAGE\r
+ val |= 1;\r
+ val = val << 8;\r
+ val |= 1;\r
+#else\r
val |= MAX_AGGR_NUM;\r
val = val << 8;\r
val |= MAX_AGGR_NUM;\r
+#endif\r
rtw_write16(Adapter, REG_MAX_AGGR_NUM, val);\r
//rtw_write8(Adapter, REG_MAX_AGGR_NUM, 0x0B); \r
\r
ODM_PACKET_INFO_T pkt_info;
u8 *sa = NULL;
struct sta_priv *pstapriv;
- struct sta_info *psta;
+ struct sta_info *psta = NULL;
//_irqL irqL;
pkt_info.bPacketMatchBSSID =_FALSE;
}
*/
sa = get_ta(wlanhdr);
-
- pstapriv = &padapter->stapriv;
pkt_info.StationID = 0xFF;
- psta = rtw_get_stainfo(pstapriv, sa);
- if (psta)
- {
- pkt_info.StationID = psta->mac_id;
- //DBG_8192C("%s ==> StationID(%d)\n",__FUNCTION__,pkt_info.StationID);
- }
+
+ if (_rtw_memcmp(myid(&padapter->eeprompriv), sa, ETH_ALEN) == _TRUE) {
+ static u32 start_time = 0;
+
+ if ((start_time == 0) || (rtw_get_passing_time_ms(start_time) > 5000)) {
+ DBG_871X_LEVEL(_drv_always_, "Warning!!! %s: Confilc mac addr!!\n", __func__);
+ start_time = rtw_get_current_time();
+ }
+ } else {
+ pstapriv = &padapter->stapriv;
+ psta = rtw_get_stainfo(pstapriv, sa);
+ if (psta)
+ pkt_info.StationID = psta->mac_id;
+ }
+
pkt_info.DataRate = pattrib->data_rate;
//rtl8188e_query_rx_phy_status(precvframe, pphy_status);
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;\r
unsigned int diff_time;\r
u32 txdma_status;\r
+ u16 timeout = 0;\r
\r
if( (txdma_status=rtw_read32(padapter, REG_TXDMA_STATUS)) !=0x00){\r
DBG_871X("%s REG_TXDMA_STATUS:0x%08x\n", __FUNCTION__, txdma_status); \r
rtw_hal_sreset_reset(padapter);\r
}\r
-#ifdef CONFIG_USB_HCI\r
+\r
//total xmit irp = 4\r
- //DBG_8192C("==>%s free_xmitbuf_cnt(%d),txirp_cnt(%d)\n",__FUNCTION__,pxmitpriv->free_xmitbuf_cnt,pxmitpriv->txirp_cnt);\r
+ //DBG_8192C("==>%s free_xmitbuf_cnt(%d), free_xmit_extbuf_cnt(%d)\n",\r
+ // __func__, pxmitpriv->free_xmitbuf_cnt,\r
+ // pxmitpriv->free_xmit_extbuf_cnt);\r
//if(pxmitpriv->txirp_cnt == NR_XMITBUFF+1)\r
current_time = rtw_get_current_time();\r
\r
if(0 == pxmitpriv->free_xmitbuf_cnt || 0 == pxmitpriv->free_xmit_extbuf_cnt) {\r
\r
+ if (padapter->interface_type == RTW_SDIO &&\r
+ pxmitpriv->free_xmitbuf_cnt == 0)\r
+ return;\r
+\r
diff_time = rtw_get_passing_time_ms(psrtpriv->last_tx_time);\r
\r
if (diff_time > 2000) {\r
}\r
}\r
}\r
-#endif //CONFIG_USB_HCI\r
\r
if (psrtpriv->dbg_trigger_point == SRESET_TGP_XMIT_STATUS) {\r
psrtpriv->dbg_trigger_point = SRESET_TGP_NULL;\r
{
s32 res;
u32 i, n;
+ u32 max_recvbuf_sz = 0;
struct recv_priv *precvpriv;
struct recv_buf *precvbuf;
SIZE_PTR tmpaddr=0;
SIZE_PTR alignment=0;
- precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
+ rtw_hal_get_def_var(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
+ if (max_recvbuf_sz == 0)
+ max_recvbuf_sz = MAX_RECVBUF_SZ;
+
+ precvbuf->pskb = rtw_skb_alloc(max_recvbuf_sz + RECVBUFF_ALIGN_SZ);
if(precvbuf->pskb)
{
_rtw_up_sema(&pxmitpriv->SdioXmitTerminateSema);
RT_TRACE(_module_hal_xmit_c_, _drv_notice_, ("-%s\n", __FUNCTION__));
- DBG_871X("exit %s\n", __FUNCTION__);
thread_exit();
}
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
struct registry_priv *pregistrypriv = &padapter->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;
BOOLEAN bWiFiConfig = pregistrypriv->wifi_spec;
- if(bWiFiConfig)
- {
+ if(bWiFiConfig){
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;
- }
// NOTE: This step shall be proceed before writting REG_RQPN.
- if (pHalData->OutEpQueueSel & TX_SELE_NQ) {
+ 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);
struct registry_priv *pregistrypriv;
u8 valueDMATimeout;
u8 valueDMAPageCount;
+ u32 pagesize = 0;
pregistrypriv = &padapter->registrypriv;
}
else
{
+#ifdef CONFIG_MINIMAL_MEMORY_USAGE
+ valueDMATimeout = 0x06;
+ rtw_hal_get_def_var(padapter, HAL_DEF_TX_PAGE_SIZE, (u8 *)&pagesize);
+ if (pagesize != 0 && MAX_RECVBUF_SZ < 8192)
+ valueDMAPageCount = (MAX_RECVBUF_SZ / pagesize) + 1;
+ else
+ valueDMAPageCount = 0x24;
+ DBG_871X("%s DMAPageCount: 0x%02x\n", __func__, valueDMAPageCount);
+#else
valueDMATimeout = 0x06;
valueDMAPageCount = 0x24;
+#endif
}
rtw_write8(padapter, REG_RXDMA_AGG_PG_TH+1, valueDMATimeout);
s32 ret;
u8 txpktbuf_bndy;
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(padapter);
+ PDM_ODM_T pDM_Odm = &pHalData->odmpriv;
struct pwrctrl_priv *pwrctrlpriv = adapter_to_pwrctl(padapter);
struct registry_priv *pregistrypriv = &padapter->registrypriv;
u8 is92C = IS_92C_SERIAL(pHalData->VersionID);
rtw_write32(padapter, REG_FWHW_TXQ_CTRL, rtw_read32(padapter, REG_FWHW_TXQ_CTRL)|BIT(12));
#endif //CONFIG_XMIT_ACK
+ if (padapter->registrypriv.wifi_spec==1) {
+ ODM_SetBBReg(pDM_Odm,
+ rOFDM0_ECCAThreshold, bMaskDWord, 0x00fe0301);
+ }
+
//RT_TRACE(COMP_INIT, DBG_LOUD, ("<---Initializepadapter8192CSdio()\n"));
DBG_8192C("-rtl8188es_hal_init\n");
SDIO_HIMR_BCNERLY_INT_MSK |
#endif //CONFIG_EXT_CLK
// SDIO_HIMR_C2HCMD_MSK |
-#ifdef CONFIG_LPS_LCLK
+#if defined(CONFIG_LPS_LCLK) && !defined(CONFIG_DETECT_CPWM_BY_POLLING)
SDIO_HIMR_CPWM1_MSK |
SDIO_HIMR_CPWM2_MSK |
#endif
static struct recv_buf* sd_recv_rxfifo(PADAPTER padapter, u32 size)
{
u32 readsize, ret;
+ u32 max_recvbuf_sz = 0;
u8 *preadbuf;
struct recv_priv *precvpriv;
struct recv_buf *precvbuf;
DBG_871X("%s: alloc_skb for rx buffer\n", __FUNCTION__);
- precvbuf->pskb = rtw_skb_alloc(MAX_RECVBUF_SZ + RECVBUFF_ALIGN_SZ);
+ rtw_hal_get_def_var(padapter, HAL_DEF_MAX_RECVBUF_SZ, &max_recvbuf_sz);
+ if (max_recvbuf_sz == 0)
+ max_recvbuf_sz = MAX_RECVBUF_SZ;
+
+ precvbuf->pskb = rtw_skb_alloc(max_recvbuf_sz + RECVBUFF_ALIGN_SZ);
if(precvbuf->pskb)
{
--- /dev/null
+#DHCP client\r
+DEVICE=wlan0\r
+BOOTPROTO=dhcp\r
+ONBOOT=yes
\ No newline at end of file
#ifdef CONFIG_EFUSE_CONFIG_FILE
#ifndef EFUSE_MAP_PATH
-#define EFUSE_MAP_PATH "/system/etc/firmware/wifi_efuse_8189e.map"
+#define EFUSE_MAP_PATH "/system/etc/wifi/wifi_efuse_8189e.map"
#endif //EFUSE_MAP_PATH
#endif
#define CONFIG_SDIO_HCI
#define PLATFORM_LINUX
-#define CONFIG_IOCTL_CFG80211
+//#define CONFIG_IOCTL_CFG80211
#ifdef CONFIG_IOCTL_CFG80211
- #define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */
+ //#define RTW_USE_CFG80211_STA_EVENT /* Indecate new sta asoc through cfg80211_new_sta */
#define CONFIG_CFG80211_FORCE_COMPATIBLE_2_6_37_UNDER
//#define CONFIG_DEBUG_CFG80211
#define CONFIG_SET_SCAN_DENY_TIMER
#define CONFIG_80211N_HT
#define CONFIG_RECV_REORDERING_CTRL
-#define CONFIG_CONCURRENT_MODE
+//#define CONFIG_CONCURRENT_MODE
#ifdef CONFIG_CONCURRENT_MODE
#define CONFIG_TSF_RESET_OFFLOAD // For 2 PORT TSF SYNC.
//#define CONFIG_HWPORT_SWAP //Port0->Sec , Port1 -> Pri
#define CONFIG_AP_MODE
#ifdef CONFIG_AP_MODE
- #define CONFIG_INTERRUPT_BASED_TXBCN // Tx Beacon when driver early interrupt occurs
+ #define CONFIG_INTERRUPT_BASED_TXBCN
#if defined(CONFIG_CONCURRENT_MODE) && defined(CONFIG_INTERRUPT_BASED_TXBCN)
#undef CONFIG_INTERRUPT_BASED_TXBCN
#endif
//#define CONFIG_DBG_P2P
#define CONFIG_P2P_PS
- #define CONFIG_P2P_IPS
+ //#define CONFIG_P2P_IPS
#define CONFIG_P2P_OP_CHK_SOCIAL_CH
#define CONFIG_CFG80211_ONECHANNEL_UNDER_CONCURRENT //replace CONFIG_P2P_CHK_INVITE_CH_LIST flag
#define CONFIG_P2P_INVITE_IOT
/*
* Debug Related Config
*/
-#define DBG 0
+#define DBG 1
//#define CONFIG_DEBUG /* DBG_871X, etc... */
//#define CONFIG_DEBUG_RTL871X /* RT_TRACE, RT_PRINT_DATA, _func_enter_, _func_exit_ */
#define DYNAMIC_CAMID_ALLOC
+#define RTW_SCAN_SPARSE_MIRACAST 1
+#define RTW_SCAN_SPARSE_BG 0
+
#ifndef CONFIG_RTW_HIQ_FILTER
#define CONFIG_RTW_HIQ_FILTER 1
#endif
#define dvobj_to_pwrctl(dvobj) (&(dvobj->pwrctl_priv))
#define pwrctl_to_dvobj(pwrctl) container_of(pwrctl, struct dvobj_priv, pwrctl_priv)
+#define dvobj_to_regsty(dvobj) (&(dvobj->if1->registrypriv))
#define dvobj_to_macidctl(dvobj) (&(dvobj->macid_ctl))
#ifdef PLATFORM_LINUX
\r
\r
//#define MAX_RX_DMA_BUFFER_SIZE_88E 0x2400 //9k for 88E nornal chip , //MaxRxBuff=10k-max(TxReportSize(64*8), WOLPattern(16*24))\r
-#define MAX_RX_DMA_BUFFER_SIZE_88E(__Adapter) ((!IS_VENDOR_8188E_I_CUT_SERIES(__Adapter))?0x2400:0x3C00)\r
+#define MAX_RX_DMA_BUFFER_SIZE_88E(__Adapter) ((!IS_VENDOR_8188E_I_CUT_SERIES(__Adapter))?0x2600:0x3E00)\r
\r
\r
-#define MAX_TX_REPORT_BUFFER_SIZE 0x0400 // 1k \r
+#define MAX_TX_REPORT_BUFFER_SIZE 0x0200 // 1k \r
\r
\r
// Note: We will divide number of page equally for each queue other than public queue!\r
#elif defined(CONFIG_SDIO_HCI) || defined(CONFIG_GSPI_HCI)
-
-#define MAX_RECVBUF_SZ (10240)
-
+ #ifdef CONFIG_MINIMAL_MEMORY_USAGE
+ #define MAX_RECVBUF_SZ (4000)
+ #else
+ #define MAX_RECVBUF_SZ (10240)
+ #endif
#endif
ANDROID_WIFI_CMD_MACADDR,
+ ANDROID_WIFI_CMD_BLOCK_SCAN,
ANDROID_WIFI_CMD_BLOCK,
ANDROID_WIFI_CMD_WFD_ENABLE,
#if defined(RTW_ENABLE_WIFI_CONTROL_FUNC)
int rtw_android_wifictrl_func_add(void);
void rtw_android_wifictrl_func_del(void);
-void* wl_android_prealloc(int section, unsigned long size);
+void* rtw_wl_android_prealloc(int section, unsigned long size);
int wifi_get_irq_number(unsigned long *irq_flags_ptr);
int wifi_set_power(int on, unsigned long msec);
// 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
u8 token; // Used to record the dialog token of p2p invitation request frame.
};
+#define MIRACAST_DISABLED 0
+#define MIRACAST_SOURCE 1
+#define MIRACAST_SINK 2
+#define MIRACAST_INVALID 3
+
+#define is_miracast_enabled(mode) \
+ (mode == MIRACAST_SOURCE || mode == MIRACAST_SINK)
+
+const char *get_miracast_mode_str(int mode);
+
#ifdef CONFIG_WFD
struct wifi_display_info{
// 0 -> WFD Source Device
// 1 -> WFD Primary Sink Device
enum SCAN_RESULT_TYPE scan_result_type; // Used when P2P is enable. This parameter will impact the scan result.
-
+ u8 stack_wfd_mode;
};
#endif //CONFIG_WFD
u8 restore_channel;
struct ieee80211_channel remain_on_ch_channel;
enum nl80211_channel_type remain_on_ch_type;
- u64 remain_on_ch_cookie;
+ ATOMIC_T ro_ch_cookie_gen;
+ u64 remain_on_ch_cookie;
bool not_indic_ro_ch_exp;
bool is_ro_ch;
u32 last_ro_ch_time; /* this will be updated at the beginning and end of ro_ch */
#if defined(CONFIG_STA_MODE_SCAN_UNDER_AP_MODE) || defined(CONFIG_ATMEL_RC_PATCH)
u8 scan_cnt;
+ u8 backop_cnt;
#endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
};
-#define DRIVERVERSION "v4.3.10_12447.20141008"
+#define DRIVERVERSION "v4.3.10.1_13373.20150129"
struct cfg80211_ssid *ssids = request->ssids;\r
int social_channel = 0, j = 0;\r
bool need_indicate_scan_done = _FALSE;\r
+ bool ps_denied = _FALSE;\r
\r
_adapter *padapter;\r
struct rtw_wdev_priv *pwdev_priv;\r
pwdev_priv->scan_request = request;\r
_exit_critical_bh(&pwdev_priv->scan_req_lock, &irqL);\r
\r
+ if (adapter_wdev_data(padapter)->block_scan == _TRUE) {\r
+ DBG_871X(FUNC_ADPT_FMT" wdev_priv.block_scan is set\n", FUNC_ADPT_ARG(padapter));\r
+ need_indicate_scan_done = _TRUE;\r
+ goto check_need_indicate_scan_done;\r
+ }\r
+\r
if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)\r
{\r
#ifdef CONFIG_DEBUG_CFG80211\r
}\r
\r
rtw_ps_deny(padapter, PS_DENY_SCAN);\r
+ ps_denied = _TRUE;\r
if(_FAIL == rtw_pwr_wakeup(padapter)) {\r
need_indicate_scan_done = _TRUE;\r
goto check_need_indicate_scan_done;\r
}\r
\r
cancel_ps_deny:\r
- rtw_ps_deny_cancel(padapter, PS_DENY_SCAN);\r
+ if (ps_denied == _TRUE)\r
+ rtw_ps_deny_cancel(padapter, PS_DENY_SCAN);\r
\r
exit:\r
return ret;\r
pstapriv->asoc_list_cnt--;\r
\r
//_exit_critical_bh(&pstapriv->asoc_list_lock, &irqL);\r
- updated = ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);\r
+ if (check_fwstate(pmlmepriv, (WIFI_AP_STATE)) == _TRUE)\r
+ updated = ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_PREV_AUTH_NOT_VALID);\r
+ else\r
+ updated = ap_free_sta(padapter, psta, _TRUE, WLAN_REASON_DEAUTH_LEAVING);\r
//_enter_critical_bh(&pstapriv->asoc_list_lock, &irqL);\r
\r
psta = NULL;\r
struct mlme_ext_priv *pmlmeext;\r
struct wifidirect_info *pwdinfo;\r
struct cfg80211_wifidirect_info *pcfg80211_wdinfo;\r
- u8 is_p2p_find = _FALSE;\r
- \r
+\r
+#ifndef CONFIG_RADIO_WORK\r
+ #define RTW_ROCH_DURATION_ENLARGE\r
+ #define RTW_ROCH_BACK_OP\r
+#endif\r
+\r
if (ndev == NULL) {\r
return -EINVAL;\r
}\r
pmlmeext = &padapter->mlmeextpriv;\r
pwdinfo = &padapter->wdinfo;\r
pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;\r
- #ifdef CONFIG_CONCURRENT_MODE\r
- is_p2p_find=(duration < (pwdinfo->ext_listen_interval))? _TRUE : _FALSE;\r
- #endif\r
- DBG_871X(FUNC_ADPT_FMT" ch:%u duration:%d\n", FUNC_ADPT_ARG(padapter), remain_ch, duration);\r
+\r
+ *cookie = ATOMIC_INC_RETURN(&pcfg80211_wdinfo->ro_ch_cookie_gen);\r
+\r
+ DBG_871X(FUNC_ADPT_FMT" ch:%u duration:%d, cookie:0x%llx\n",\r
+ FUNC_ADPT_ARG(padapter), remain_ch, duration, *cookie);\r
\r
if(pcfg80211_wdinfo->is_ro_ch == _TRUE)\r
{\r
- pcfg80211_wdinfo->not_indic_ro_ch_exp = _TRUE;\r
DBG_8192C("%s, cancel ro ch timer\n", __func__);\r
_cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);\r
#ifdef CONFIG_CONCURRENT_MODE\r
ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);\r
#endif //CONFIG_CONCURRENT_MODE\r
p2p_protocol_wk_hdl(padapter, P2P_RO_CH_WK);\r
- pcfg80211_wdinfo->not_indic_ro_ch_exp = _FALSE;\r
}\r
\r
pcfg80211_wdinfo->is_ro_ch = _TRUE;\r
\r
rtw_scan_abort(padapter);\r
#ifdef CONFIG_CONCURRENT_MODE \r
- if ((rtw_buddy_adapter_up(padapter)) && is_p2p_find) //don't scan_abort during p2p_listen.\r
- rtw_scan_abort(padapter->pbuddy_adapter); \r
+ if (rtw_buddy_adapter_up(padapter))\r
+ rtw_scan_abort(padapter->pbuddy_adapter);\r
#endif //CONFIG_CONCURRENT_MODE\r
\r
if (check_fwstate(&padapter->mlmepriv, _FW_UNDER_LINKING|WIFI_UNDER_WPS) == _TRUE)\r
\r
rtw_p2p_set_state(pwdinfo, P2P_STATE_LISTEN);\r
\r
- \r
- if(duration < 400)\r
- duration = duration*3;//extend from exper.\r
-\r
+ #ifdef RTW_ROCH_DURATION_ENLARGE\r
+ if (duration < 400)\r
+ duration = duration * 3; /* extend from exper */\r
+ #endif\r
\r
+#ifdef RTW_ROCH_BACK_OP\r
#ifdef CONFIG_CONCURRENT_MODE\r
- if (check_buddy_fwstate(padapter, _FW_LINKED))\r
- {\r
- if (is_p2p_find) // p2p_find , duration<1000\r
- duration = duration + pwdinfo->ext_listen_interval;\r
- else // p2p_listen, duration=5000\r
- duration = pwdinfo->ext_listen_interval \r
- + (pwdinfo->ext_listen_interval/4);\r
+ if(check_buddy_fwstate(padapter, _FW_LINKED) &&\r
+ (duration<pwdinfo->ext_listen_interval)) {\r
+ duration = duration + pwdinfo->ext_listen_interval;\r
}\r
#endif\r
+#endif /* RTW_ROCH_BACK_OP */\r
\r
pcfg80211_wdinfo->restore_channel = rtw_get_oper_ch(padapter);\r
\r
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
+ #ifdef RTW_ROCH_BACK_OP\r
DBG_8192C("%s, set switch ch timer, duration=%d\n", __func__, duration-pwdinfo->ext_listen_interval);\r
- _set_timer(&pwdinfo->ap_p2p_switch_timer, duration-pwdinfo->ext_listen_interval); \r
- } \r
+ _set_timer(&pwdinfo->ap_p2p_switch_timer, duration-pwdinfo->ext_listen_interval);\r
+ #endif\r
+ }\r
}\r
\r
ready_on_channel = _TRUE;\r
pwdinfo = &padapter->wdinfo;\r
pcfg80211_wdinfo = &padapter->cfg80211_wdinfo;\r
\r
- DBG_871X(FUNC_ADPT_FMT"\n", FUNC_ADPT_ARG(padapter));\r
+ DBG_871X(FUNC_ADPT_FMT" cookie:0x%llx\n",\r
+ FUNC_ADPT_ARG(padapter), cookie);\r
\r
if (pcfg80211_wdinfo->is_ro_ch == _TRUE) {\r
- pcfg80211_wdinfo->not_indic_ro_ch_exp = _TRUE;\r
DBG_8192C("%s, cancel ro ch timer\n", __func__);\r
_cancel_timer_ex(&padapter->cfg80211_wdinfo.remain_on_ch_timer);\r
#ifdef CONFIG_CONCURRENT_MODE\r
ATOMIC_SET(&pwdev_priv->ro_ch_to, 1);\r
#endif\r
p2p_protocol_wk_hdl(padapter, P2P_RO_CH_WK);\r
- pcfg80211_wdinfo->not_indic_ro_ch_exp = _FALSE;\r
}\r
\r
#if 0\r
\r
DBG_8192C("%s:rf_type=%d\n", __func__, rf_type);\r
\r
- /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */\r
+ if (padapter->registrypriv.wireless_mode & WIRELESS_11G)\r
{\r
bands = wiphy->bands[IEEE80211_BAND_2GHZ];\r
if(bands)\r
rtw_cfg80211_init_ht_capab(&bands->ht_cap, IEEE80211_BAND_2GHZ, rf_type);\r
}\r
\r
- /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */\r
+ if (padapter->registrypriv.wireless_mode & WIRELESS_11A)\r
{\r
bands = wiphy->bands[IEEE80211_BAND_5GHZ];\r
if(bands)\r
| BIT(NL80211_IFTYPE_ADHOC)\r
#ifdef CONFIG_AP_MODE\r
| BIT(NL80211_IFTYPE_AP)\r
+ #ifndef CONFIG_RADIO_WORK\r
| BIT(NL80211_IFTYPE_MONITOR)\r
+ #endif\r
#endif\r
#if defined(CONFIG_P2P) && ((LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,37)) || defined(COMPAT_KERNEL_RELEASE))\r
| BIT(NL80211_IFTYPE_P2P_CLIENT)\r
#endif \r
\r
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0))\r
+ #ifndef CONFIG_RADIO_WORK\r
wiphy->software_iftypes |= BIT(NL80211_IFTYPE_MONITOR);\r
+ #endif\r
#endif\r
\r
/*\r
wiphy->cipher_suites = rtw_cipher_suites;\r
wiphy->n_cipher_suites = ARRAY_SIZE(rtw_cipher_suites);\r
\r
- /* if (padapter->registrypriv.wireless_mode & WIRELESS_11G) */\r
+ if (padapter->registrypriv.wireless_mode & WIRELESS_11G)\r
wiphy->bands[IEEE80211_BAND_2GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_2GHZ);\r
- /* if (padapter->registrypriv.wireless_mode & WIRELESS_11A) */\r
+ if (padapter->registrypriv.wireless_mode & WIRELESS_11A)\r
wiphy->bands[IEEE80211_BAND_5GHZ] = rtw_spt_band_alloc(IEEE80211_BAND_5GHZ);\r
\r
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38) && LINUX_VERSION_CODE < KERNEL_VERSION(3,0,0))\r
\r
u8 bandroid_scan;\r
bool block;\r
+ bool block_scan;\r
bool power_mgmt;\r
\r
#ifdef CONFIG_CONCURRENT_MODE\r
int rtw_network_mode = Ndis802_11IBSS;//Ndis802_11Infrastructure;//infra, ad-hoc, auto
//NDIS_802_11_SSID ssid;
int rtw_channel = 1;//ad-hoc support requirement
-int rtw_wireless_mode = WIRELESS_MODE_MAX;
+int rtw_wireless_mode = WIRELESS_11BG_24N;
int rtw_vrtl_carrier_sense = AUTO_VCS;
int rtw_vcs_type = RTS_CTS;//*
int rtw_rts_thresh = 2347;//*
int rtw_soft_ap = 0;
//int smart_ps = 1;
#ifdef CONFIG_POWER_SAVING
-#ifdef CONFIG_PLATFORM_INTEL_BYT
int rtw_power_mgnt = PS_MODE_MAX;
-#else
-int rtw_power_mgnt = PS_MODE_MIN;
-#endif
#ifdef CONFIG_IPS_LEVEL_2
int rtw_ips_mode = IPS_LEVEL_2;
#else
}
#ifdef CONFIG_LPS
else
- rtw_set_ps_mode(padapter, PS_MODE_DTIM, 0, 0, "WOWLAN");
+ rtw_set_ps_mode(padapter, PS_MODE_MAX, 0, 0, "WOWLAN");
#endif //#ifdef CONFIG_LPS
}
if (rtw_chk_roam_flags(padapter, RTW_ROAM_ON_RESUME)) {
if (pwrpriv->wowlan_wake_reason == FWDecisionDisconnect ||
+ pwrpriv->wowlan_wake_reason == Rx_Pairwisekey ||
pwrpriv->wowlan_wake_reason == Rx_DisAssoc ||
pwrpriv->wowlan_wake_reason == Rx_DeAuth) {
}
if (pwrpriv->wowlan_wake_reason == Rx_GTK ||
+ pwrpriv->wowlan_wake_reason == Rx_Pairwisekey ||
pwrpriv->wowlan_wake_reason == Rx_DisAssoc ||
pwrpriv->wowlan_wake_reason == Rx_DeAuth) {
rtw_lock_ext_suspend_timeout(8000);
"MACADDR",
+ "BLOCK_SCAN",
"BLOCK",
"WFD-ENABLE",
"WFD-DISABLE",
return bytes_written;
}
+int rtw_android_set_block_scan(struct net_device *net, char *command, int total_len)
+{
+ _adapter *adapter = (_adapter *)rtw_netdev_priv(net);
+ char *block_value = command + strlen(android_wifi_cmd_str[ANDROID_WIFI_CMD_BLOCK_SCAN]) + 1;
+
+ #ifdef CONFIG_IOCTL_CFG80211
+ adapter_wdev_data(adapter)->block_scan = (*block_value == '0')?_FALSE:_TRUE;
+ #endif
+
+ return 0;
+}
+
int rtw_android_set_block(struct net_device *net, char *command, int total_len)
{
_adapter *adapter = (_adapter *)rtw_netdev_priv(net);
return bytes_written;
}
-enum {
- MIRACAST_DISABLED = 0,
- MIRACAST_SOURCE,
- MIRACAST_SINK,
- MIRACAST_INVALID,
-};
-
-static const char *miracast_mode_str[] = {
- "DISABLED",
- "SOURCE",
- "SINK",
- "INVALID",
-};
-
-static const char *get_miracast_mode_str(int mode)
-{
- if (mode < MIRACAST_DISABLED || mode >= MIRACAST_INVALID)
- mode = MIRACAST_INVALID;
-
- return miracast_mode_str[mode];
-}
-
int rtw_android_set_miracast_mode(struct net_device *net, char *command, int total_len)
{
_adapter *adapter = (_adapter *)rtw_netdev_priv(net);
case ANDROID_WIFI_CMD_MACADDR:
bytes_written = rtw_android_get_macaddr(net, command, priv_cmd.total_len);
break;
-
+
+ case ANDROID_WIFI_CMD_BLOCK_SCAN:
+ bytes_written = rtw_android_set_block_scan(net, command, priv_cmd.total_len);
+ break;
+
case ANDROID_WIFI_CMD_BLOCK:
bytes_written = rtw_android_set_block(net, command, priv_cmd.total_len);
break;
static int wifi_add_dev(void);
static void wifi_del_dev(void);
+extern int rockchip_wifi_get_oob_irq(void);
int rtw_android_wifictrl_func_add(void)
{
int ret = 0;
+#if 1
+ oob_irq = rockchip_wifi_get_oob_irq();
+ printk("%s: rockchip_wifi_get_oob_irq :%d\n", __func__, oob_irq);
+#else
sema_init(&wifi_control_sem, 0);
ret = wifi_add_dev();
ret = -EINVAL;
DBG_871X("%s: platform_driver_register timeout\n", __FUNCTION__);
}
-
+#endif
return ret;
}
void rtw_android_wifictrl_func_del(void)
{
+#if 0
if (g_wifidev_registered)
{
wifi_del_dev();
g_wifidev_registered = 0;
}
+#endif
}
-void *wl_android_prealloc(int section, unsigned long size)
+void *rtw_wl_android_prealloc(int section, unsigned long size)
{
void *alloc_ptr = NULL;
if (wifi_control_data && wifi_control_data->mem_prealloc) {
PSDIO_DATA psdio_data;
struct sdio_func *func;
int err;
+ int i = 0;
_func_enter_;
//3 1. init SDIO bus
sdio_claim_host(func);
- err = sdio_enable_func(func);
- if (err) {
+ //try several times if fail
+ for(i=0; i<10; i++)
+ {
+ err = sdio_enable_func(func);
+ if(err)
+ {
+ printk("%s:err=%d,i=%d\n",__func__, err, i);
+ mdelay(2);
+ continue;
+ }
+ else
+ {
+ break;
+ }
+ }
+
+ if (i>=10 && err) {
dvobj->drv_dbg.dbg_sdio_init_error_cnt++;
DBG_8192C(KERN_CRIT "%s: sdio_enable_func FAIL(%d)!\n", __func__, err);
goto release;
/*
* Broadcom BCM4319 driver version.
*/
-#define RTL8192_DRV_VERSION "4.00"
+#define RTL8192_DRV_VERSION "4.20"
#endif /* WIFI_VERSION_H */
--- /dev/null
+#!/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
+
+
--- /dev/null
+#!/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"
+