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
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)
--- /dev/null
+#!/bin/bash
+rmmod 8192cu
+rmmod 8192ce
+rmmod 8192du
+rmmod 8192de
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
#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 {
{
//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."));
}
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"
}
}
- 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)
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);
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);
#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);
}
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;
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;
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);
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)
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;
}
}
}
-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);
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;
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 )
{
\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
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
struct xmit_priv *pxmitpriv= &padapter->xmitpriv;
struct sta_priv *pstapriv = &padapter->stapriv;
struct hw_xmit *phwxmit;
-
+ int pending_qcnt[4];
_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);
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);
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);
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);
{
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--;
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;
}
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
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;
_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);
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;
_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;
+}
+
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;
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);
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)
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);
}
{
//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)
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)
#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);
}
}
}
*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);
#endif //(RATE_ADAPTIVE_SUPPORT == 1)
break;
default:
- bResult = GetHalDefVar(Adapter, eVariable, pValue);
+ bResult = GetHalDefVar8188E(Adapter, eVariable, pValue);
break;
}
_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))
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)
--- /dev/null
+#DHCP client\r
+DEVICE=wlan0\r
+BOOTPROTO=dhcp\r
+ONBOOT=yes
\ No newline at end of file
// 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
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{
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);
#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
\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
#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
// 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
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; \
-#define DRIVERVERSION "v4.3.0.5_11894.20140718_beta"
+#define DRIVERVERSION "v4.3.0.7_12758.20141114"
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
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_
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
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
}\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
#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
//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
\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
\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
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
{\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
#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
\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
\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
\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
\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
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
//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
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
\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
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
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
#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
}\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
\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
}\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
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
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
#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
}\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
#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
{
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
{
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
{
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);
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);
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);
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);
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);
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;
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;
#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)
_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;
if(pnetdev)
{
- if (!rtw_netif_queue_stopped(pnetdev))
- rtw_netif_stop_queue(pnetdev);
+ rtw_netif_stop_queue(pnetdev);
}
#ifdef CONFIG_IOCTL_CFG80211
// 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;
if(pnetdev)
{
- if (!rtw_netif_queue_stopped(pnetdev))
- rtw_netif_stop_queue(pnetdev);
+ rtw_netif_stop_queue(pnetdev);
}
#ifdef CONFIG_P2P
#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);
//s1.
if(pnetdev)
{
- if (!rtw_netif_queue_stopped(pnetdev))
- rtw_netif_stop_queue(pnetdev);
+ rtw_netif_stop_queue(pnetdev);
}
#ifndef CONFIG_ANDROID
// 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{
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) {
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;
{"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},
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;
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
/*
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;
+ }
}
}
#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);
_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)
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
__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
/*
* Broadcom BCM4319 driver version.
*/
-#define RTL8192_DRV_VERSION "3.60.WFD"
+#define RTL8192_DRV_VERSION "3.80.WFD"
#endif /* WIFI_VERSION_H */
#include <drv_types.h>
+#define DBG_DUMP_OS_QUEUE_CTL 0
uint rtw_remainder_len(struct pkt_file *pfile)
{
}
}
+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);
#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
}
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:
--- /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"
+