mirror of
https://github.com/lwfinger/rtl8188eu.git
synced 2024-11-10 07:29:40 +00:00
rtl8188eu: Fix some instances where open bracket should be moved to previous line
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
This commit is contained in:
parent
11ab93f073
commit
e6a0d110e4
3 changed files with 241 additions and 574 deletions
375
core/rtw_ap.c
375
core/rtw_ap.c
|
@ -89,8 +89,7 @@ static void update_BCNTIM(struct adapter *padapter)
|
||||||
|
|
||||||
/* update TIM IE */
|
/* update TIM IE */
|
||||||
/* if (pstapriv->tim_bitmap) */
|
/* if (pstapriv->tim_bitmap) */
|
||||||
if (true)
|
if (true) {
|
||||||
{
|
|
||||||
u8 *p, *dst_ie, *premainder_ie = NULL, *pbackup_remainder_ie = NULL;
|
u8 *p, *dst_ie, *premainder_ie = NULL, *pbackup_remainder_ie = NULL;
|
||||||
__le16 tim_bitmap_le;
|
__le16 tim_bitmap_le;
|
||||||
uint offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
|
uint offset, tmp_len, tim_ielen, tim_ie_offset, remainder_ielen;
|
||||||
|
@ -98,8 +97,7 @@ static void update_BCNTIM(struct adapter *padapter)
|
||||||
tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
|
tim_bitmap_le = cpu_to_le16(pstapriv->tim_bitmap);
|
||||||
|
|
||||||
p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, _TIM_IE_, &tim_ielen, pnetwork_mlmeext->IELength - _FIXED_IE_LENGTH_);
|
p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, _TIM_IE_, &tim_ielen, pnetwork_mlmeext->IELength - _FIXED_IE_LENGTH_);
|
||||||
if (p != NULL && tim_ielen>0)
|
if (p != NULL && tim_ielen>0) {
|
||||||
{
|
|
||||||
tim_ielen += 2;
|
tim_ielen += 2;
|
||||||
|
|
||||||
premainder_ie = p+tim_ielen;
|
premainder_ie = p+tim_ielen;
|
||||||
|
@ -110,9 +108,7 @@ static void update_BCNTIM(struct adapter *padapter)
|
||||||
|
|
||||||
/* append TIM IE from dst_ie offset */
|
/* append TIM IE from dst_ie offset */
|
||||||
dst_ie = p;
|
dst_ie = p;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
tim_ielen = 0;
|
tim_ielen = 0;
|
||||||
|
|
||||||
/* calucate head_len */
|
/* calucate head_len */
|
||||||
|
@ -126,9 +122,7 @@ static void update_BCNTIM(struct adapter *padapter)
|
||||||
/* get supported rates len */
|
/* get supported rates len */
|
||||||
p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &tmp_len, (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_));
|
p = rtw_get_ie(pie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &tmp_len, (pnetwork_mlmeext->IELength - _BEACON_IE_OFFSET_));
|
||||||
if (p != NULL)
|
if (p != NULL)
|
||||||
{
|
|
||||||
offset += tmp_len+2;
|
offset += tmp_len+2;
|
||||||
}
|
|
||||||
|
|
||||||
/* DS Parameter Set IE, len =3 */
|
/* DS Parameter Set IE, len =3 */
|
||||||
offset += 3;
|
offset += 3;
|
||||||
|
@ -142,8 +136,7 @@ static void update_BCNTIM(struct adapter *padapter)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remainder_ielen>0)
|
if (remainder_ielen>0) {
|
||||||
{
|
|
||||||
pbackup_remainder_ie = rtw_malloc(remainder_ielen);
|
pbackup_remainder_ie = rtw_malloc(remainder_ielen);
|
||||||
if (pbackup_remainder_ie && premainder_ie)
|
if (pbackup_remainder_ie && premainder_ie)
|
||||||
memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
|
memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
|
||||||
|
@ -166,19 +159,15 @@ static void update_BCNTIM(struct adapter *padapter)
|
||||||
else
|
else
|
||||||
*dst_ie++ = 0;
|
*dst_ie++ = 0;
|
||||||
|
|
||||||
if (tim_ielen ==4)
|
if (tim_ielen ==4) {
|
||||||
{
|
|
||||||
*dst_ie++ = *(u8*)&tim_bitmap_le;
|
*dst_ie++ = *(u8*)&tim_bitmap_le;
|
||||||
}
|
} else if (tim_ielen ==5) {
|
||||||
else if (tim_ielen ==5)
|
|
||||||
{
|
|
||||||
memcpy(dst_ie, &tim_bitmap_le, 2);
|
memcpy(dst_ie, &tim_bitmap_le, 2);
|
||||||
dst_ie+=2;
|
dst_ie+=2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy remainder IE */
|
/* copy remainder IE */
|
||||||
if (pbackup_remainder_ie)
|
if (pbackup_remainder_ie) {
|
||||||
{
|
|
||||||
memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
|
memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
|
||||||
|
|
||||||
rtw_mfree(pbackup_remainder_ie, remainder_ielen);
|
rtw_mfree(pbackup_remainder_ie, remainder_ielen);
|
||||||
|
@ -200,16 +189,12 @@ void rtw_add_bcn_ie(struct adapter *padapter, struct wlan_bssid_ex *pnetwork, u8
|
||||||
u8 *p, *dst_ie, *premainder_ie = NULL, *pbackup_remainder_ie = NULL;
|
u8 *p, *dst_ie, *premainder_ie = NULL, *pbackup_remainder_ie = NULL;
|
||||||
u32 i, offset, ielen, ie_offset, remainder_ielen = 0;
|
u32 i, offset, ielen, ie_offset, remainder_ielen = 0;
|
||||||
|
|
||||||
for (i = sizeof(struct ndis_802_11_fixed_ies); i < pnetwork->IELength;)
|
for (i = sizeof(struct ndis_802_11_fixed_ies); i < pnetwork->IELength;) {
|
||||||
{
|
|
||||||
pIE = (struct ndis_802_11_variable_ies *)(pnetwork->IEs + i);
|
pIE = (struct ndis_802_11_variable_ies *)(pnetwork->IEs + i);
|
||||||
|
|
||||||
if (pIE->ElementID > index)
|
if (pIE->ElementID > index) {
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
} else if (pIE->ElementID == index) { /* already exist the same IE */
|
||||||
else if (pIE->ElementID == index) /* already exist the same IE */
|
|
||||||
{
|
|
||||||
p = (u8 *)pIE;
|
p = (u8 *)pIE;
|
||||||
ielen = pIE->Length;
|
ielen = pIE->Length;
|
||||||
bmatch = true;
|
bmatch = true;
|
||||||
|
@ -221,8 +206,7 @@ void rtw_add_bcn_ie(struct adapter *padapter, struct wlan_bssid_ex *pnetwork, u8
|
||||||
i += (pIE->Length + 2);
|
i += (pIE->Length + 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p != NULL && ielen>0)
|
if (p != NULL && ielen>0) {
|
||||||
{
|
|
||||||
ielen += 2;
|
ielen += 2;
|
||||||
|
|
||||||
premainder_ie = p+ielen;
|
premainder_ie = p+ielen;
|
||||||
|
@ -237,8 +221,7 @@ void rtw_add_bcn_ie(struct adapter *padapter, struct wlan_bssid_ex *pnetwork, u8
|
||||||
dst_ie = (p+ielen);
|
dst_ie = (p+ielen);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remainder_ielen>0)
|
if (remainder_ielen>0) {
|
||||||
{
|
|
||||||
pbackup_remainder_ie = rtw_malloc(remainder_ielen);
|
pbackup_remainder_ie = rtw_malloc(remainder_ielen);
|
||||||
if (pbackup_remainder_ie && premainder_ie)
|
if (pbackup_remainder_ie && premainder_ie)
|
||||||
memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
|
memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
|
||||||
|
@ -251,8 +234,7 @@ void rtw_add_bcn_ie(struct adapter *padapter, struct wlan_bssid_ex *pnetwork, u8
|
||||||
dst_ie+=len;
|
dst_ie+=len;
|
||||||
|
|
||||||
/* copy remainder IE */
|
/* copy remainder IE */
|
||||||
if (pbackup_remainder_ie)
|
if (pbackup_remainder_ie) {
|
||||||
{
|
|
||||||
memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
|
memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
|
||||||
|
|
||||||
rtw_mfree(pbackup_remainder_ie, remainder_ielen);
|
rtw_mfree(pbackup_remainder_ie, remainder_ielen);
|
||||||
|
@ -269,8 +251,7 @@ void rtw_remove_bcn_ie(struct adapter *padapter, struct wlan_bssid_ex *pnetwork,
|
||||||
u8 *pie = pnetwork->IEs;
|
u8 *pie = pnetwork->IEs;
|
||||||
|
|
||||||
p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, index, &ielen, pnetwork->IELength - _FIXED_IE_LENGTH_);
|
p = rtw_get_ie(pie + _FIXED_IE_LENGTH_, index, &ielen, pnetwork->IELength - _FIXED_IE_LENGTH_);
|
||||||
if (p != NULL && ielen>0)
|
if (p != NULL && ielen>0) {
|
||||||
{
|
|
||||||
ielen += 2;
|
ielen += 2;
|
||||||
|
|
||||||
premainder_ie = p+ielen;
|
premainder_ie = p+ielen;
|
||||||
|
@ -285,16 +266,14 @@ void rtw_remove_bcn_ie(struct adapter *padapter, struct wlan_bssid_ex *pnetwork,
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (remainder_ielen>0)
|
if (remainder_ielen>0) {
|
||||||
{
|
|
||||||
pbackup_remainder_ie = rtw_malloc(remainder_ielen);
|
pbackup_remainder_ie = rtw_malloc(remainder_ielen);
|
||||||
if (pbackup_remainder_ie && premainder_ie)
|
if (pbackup_remainder_ie && premainder_ie)
|
||||||
memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
|
memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* copy remainder IE */
|
/* copy remainder IE */
|
||||||
if (pbackup_remainder_ie)
|
if (pbackup_remainder_ie) {
|
||||||
{
|
|
||||||
memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
|
memcpy(dst_ie, pbackup_remainder_ie, remainder_ielen);
|
||||||
|
|
||||||
rtw_mfree(pbackup_remainder_ie, remainder_ielen);
|
rtw_mfree(pbackup_remainder_ie, remainder_ielen);
|
||||||
|
@ -308,13 +287,8 @@ u8 chk_sta_is_alive(struct sta_info *psta)
|
||||||
{
|
{
|
||||||
u8 ret = false;
|
u8 ret = false;
|
||||||
|
|
||||||
if ((psta->sta_stats.last_rx_data_pkts + psta->sta_stats.last_rx_ctrl_pkts) == (psta->sta_stats.rx_data_pkts + psta->sta_stats.rx_ctrl_pkts))
|
if ((psta->sta_stats.last_rx_data_pkts + psta->sta_stats.last_rx_ctrl_pkts) != (psta->sta_stats.rx_data_pkts + psta->sta_stats.rx_ctrl_pkts))
|
||||||
{
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ret = true;
|
ret = true;
|
||||||
}
|
|
||||||
|
|
||||||
sta_update_last_rx_pkts(psta);
|
sta_update_last_rx_pkts(psta);
|
||||||
|
|
||||||
|
@ -338,16 +312,13 @@ void expire_timeout_chk(struct adapter *padapter)
|
||||||
plist = get_next(phead);
|
plist = get_next(phead);
|
||||||
|
|
||||||
/* check auth_queue */
|
/* check auth_queue */
|
||||||
while ((rtw_end_of_queue_search(phead, plist)) == false)
|
while ((rtw_end_of_queue_search(phead, plist)) == false) {
|
||||||
{
|
|
||||||
psta = LIST_CONTAINOR(plist, struct sta_info, auth_list);
|
psta = LIST_CONTAINOR(plist, struct sta_info, auth_list);
|
||||||
plist = get_next(plist);
|
plist = get_next(plist);
|
||||||
|
|
||||||
if (psta->expire_to>0)
|
if (psta->expire_to>0) {
|
||||||
{
|
|
||||||
psta->expire_to--;
|
psta->expire_to--;
|
||||||
if (psta->expire_to == 0)
|
if (psta->expire_to == 0) {
|
||||||
{
|
|
||||||
rtw_list_delete(&psta->auth_list);
|
rtw_list_delete(&psta->auth_list);
|
||||||
pstapriv->auth_list_cnt--;
|
pstapriv->auth_list_cnt--;
|
||||||
|
|
||||||
|
@ -376,8 +347,7 @@ void expire_timeout_chk(struct adapter *padapter)
|
||||||
plist = get_next(phead);
|
plist = get_next(phead);
|
||||||
|
|
||||||
/* check asoc_queue */
|
/* check asoc_queue */
|
||||||
while ((rtw_end_of_queue_search(phead, plist)) == false)
|
while ((rtw_end_of_queue_search(phead, plist)) == false) {
|
||||||
{
|
|
||||||
psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
|
psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
|
||||||
plist = get_next(plist);
|
plist = get_next(plist);
|
||||||
if (chk_sta_is_alive(psta) || !psta->expire_to) {
|
if (chk_sta_is_alive(psta) || !psta->expire_to) {
|
||||||
|
@ -388,12 +358,10 @@ void expire_timeout_chk(struct adapter *padapter)
|
||||||
psta->expire_to--;
|
psta->expire_to--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (psta->expire_to <= 0)
|
if (psta->expire_to <= 0) {
|
||||||
{
|
|
||||||
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
struct mlme_ext_priv *pmlmeext = &padapter->mlmeextpriv;
|
||||||
|
|
||||||
if (padapter->registrypriv.wifi_spec == 1)
|
if (padapter->registrypriv.wifi_spec == 1) {
|
||||||
{
|
|
||||||
psta->expire_to = pstapriv->expire_to;
|
psta->expire_to = pstapriv->expire_to;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -430,9 +398,7 @@ void expire_timeout_chk(struct adapter *padapter)
|
||||||
|
|
||||||
DBG_871X("asoc expire "MAC_FMT", state =0x%x\n", MAC_ARG(psta->hwaddr), psta->state);
|
DBG_871X("asoc expire "MAC_FMT", state =0x%x\n", MAC_ARG(psta->hwaddr), psta->state);
|
||||||
updated = ap_free_sta(padapter, psta, false, WLAN_REASON_DEAUTH_LEAVING);
|
updated = ap_free_sta(padapter, psta, false, WLAN_REASON_DEAUTH_LEAVING);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
/* TODO: Aging mechanism to digest frames in sleep_q to avoid running out of xmitframe */
|
/* TODO: Aging mechanism to digest frames in sleep_q to avoid running out of xmitframe */
|
||||||
if (psta->sleepq_len > (NR_XMITFRAME/pstapriv->asoc_list_cnt)
|
if (psta->sleepq_len > (NR_XMITFRAME/pstapriv->asoc_list_cnt)
|
||||||
&& padapter->xmitpriv.free_xmitframe_cnt < ((NR_XMITFRAME/pstapriv->asoc_list_cnt)/2)
|
&& padapter->xmitpriv.free_xmitframe_cnt < ((NR_XMITFRAME/pstapriv->asoc_list_cnt)/2)
|
||||||
|
@ -470,15 +436,12 @@ void expire_timeout_chk(struct adapter *padapter)
|
||||||
ret = issue_nulldata(padapter, psta->hwaddr, 0, 3, 50);
|
ret = issue_nulldata(padapter, psta->hwaddr, 0, 3, 50);
|
||||||
|
|
||||||
psta->keep_alive_trycnt++;
|
psta->keep_alive_trycnt++;
|
||||||
if (ret == _SUCCESS)
|
if (ret == _SUCCESS) {
|
||||||
{
|
|
||||||
DBG_871X("asoc check, sta(" MAC_FMT ") is alive\n", MAC_ARG(psta->hwaddr));
|
DBG_871X("asoc check, sta(" MAC_FMT ") is alive\n", MAC_ARG(psta->hwaddr));
|
||||||
psta->expire_to = pstapriv->expire_to;
|
psta->expire_to = pstapriv->expire_to;
|
||||||
psta->keep_alive_trycnt = 0;
|
psta->keep_alive_trycnt = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
} else if (psta->keep_alive_trycnt <= 3) {
|
||||||
else if (psta->keep_alive_trycnt <= 3)
|
|
||||||
{
|
|
||||||
DBG_871X("ack check for asoc expire, keep_alive_trycnt =%d\n", psta->keep_alive_trycnt);
|
DBG_871X("ack check for asoc expire, keep_alive_trycnt =%d\n", psta->keep_alive_trycnt);
|
||||||
psta->expire_to = 1;
|
psta->expire_to = 1;
|
||||||
continue;
|
continue;
|
||||||
|
@ -524,14 +487,12 @@ void add_RATid(struct adapter *padapter, struct sta_info *psta, u8 rssi_level)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* b/g mode ra_bitmap */
|
/* b/g mode ra_bitmap */
|
||||||
for (i =0; i<sizeof(psta->bssrateset); i++)
|
for (i =0; i<sizeof(psta->bssrateset); i++) {
|
||||||
{
|
|
||||||
if (psta->bssrateset[i])
|
if (psta->bssrateset[i])
|
||||||
tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
|
tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
|
||||||
}
|
}
|
||||||
/* n mode ra_bitmap */
|
/* n mode ra_bitmap */
|
||||||
if (psta_ht->ht_option)
|
if (psta_ht->ht_option) {
|
||||||
{
|
|
||||||
rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
|
rtw_hal_get_hwreg(padapter, HW_VAR_RF_TYPE, (u8 *)(&rf_type));
|
||||||
if (rf_type == RF_2T2R)
|
if (rf_type == RF_2T2R)
|
||||||
limit =16;/* 2R */
|
limit =16;/* 2R */
|
||||||
|
@ -571,8 +532,7 @@ void add_RATid(struct adapter *padapter, struct sta_info *psta, u8 rssi_level)
|
||||||
raid = networktype_to_raid(sta_band);
|
raid = networktype_to_raid(sta_band);
|
||||||
init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
|
init_rate = get_highest_rate_idx(tx_ra_bitmap&0x0fffffff)&0x3f;
|
||||||
|
|
||||||
if (psta->aid < NUM_STA)
|
if (psta->aid < NUM_STA) {
|
||||||
{
|
|
||||||
u8 arg = 0;
|
u8 arg = 0;
|
||||||
|
|
||||||
arg = psta->mac_id&0x1f;
|
arg = psta->mac_id&0x1f;
|
||||||
|
@ -599,10 +559,7 @@ void add_RATid(struct adapter *padapter, struct sta_info *psta, u8 rssi_level)
|
||||||
/* set ra_id, init_rate */
|
/* set ra_id, init_rate */
|
||||||
psta->raid = raid;
|
psta->raid = raid;
|
||||||
psta->init_rate = init_rate;
|
psta->init_rate = init_rate;
|
||||||
|
} else {
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DBG_871X("station aid %d exceed the max number\n", psta->aid);
|
DBG_871X("station aid %d exceed the max number\n", psta->aid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -619,8 +576,7 @@ void update_bmc_sta(struct adapter *padapter)
|
||||||
struct wlan_bssid_ex *pcur_network = (struct wlan_bssid_ex *)&pmlmepriv->cur_network.network;
|
struct wlan_bssid_ex *pcur_network = (struct wlan_bssid_ex *)&pmlmepriv->cur_network.network;
|
||||||
struct sta_info *psta = rtw_get_bcmc_stainfo(padapter);
|
struct sta_info *psta = rtw_get_bcmc_stainfo(padapter);
|
||||||
|
|
||||||
if (psta)
|
if (psta) {
|
||||||
{
|
|
||||||
psta->aid = 0;/* default set to 0 */
|
psta->aid = 0;/* default set to 0 */
|
||||||
/* psta->mac_id = psta->aid+4; */
|
/* psta->mac_id = psta->aid+4; */
|
||||||
psta->mac_id = psta->aid + 1;
|
psta->mac_id = psta->aid + 1;
|
||||||
|
@ -640,8 +596,7 @@ void update_bmc_sta(struct adapter *padapter)
|
||||||
psta->bssratelen = supportRateNum;
|
psta->bssratelen = supportRateNum;
|
||||||
|
|
||||||
/* b/g mode ra_bitmap */
|
/* b/g mode ra_bitmap */
|
||||||
for (i =0; i<supportRateNum; i++)
|
for (i =0; i<supportRateNum; i++) {
|
||||||
{
|
|
||||||
if (psta->bssrateset[i])
|
if (psta->bssrateset[i])
|
||||||
tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
|
tx_ra_bitmap |= rtw_get_bit_value_from_ieee_value(psta->bssrateset[i]&0x7f);
|
||||||
}
|
}
|
||||||
|
@ -664,8 +619,6 @@ void update_bmc_sta(struct adapter *padapter)
|
||||||
/* DBG_871X("Add id %d val %08x to ratr for bmc sta\n", psta->aid, tx_ra_bitmap); */
|
/* DBG_871X("Add id %d val %08x to ratr for bmc sta\n", psta->aid, tx_ra_bitmap); */
|
||||||
/* ap mode */
|
/* ap mode */
|
||||||
rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, psta, true);
|
rtw_hal_set_odm_var(padapter, HAL_ODM_STA_INFO, psta, true);
|
||||||
|
|
||||||
/* if (pHalData->fw_ractrl == true) */
|
|
||||||
{
|
{
|
||||||
u8 arg = 0;
|
u8 arg = 0;
|
||||||
|
|
||||||
|
@ -673,19 +626,11 @@ void update_bmc_sta(struct adapter *padapter)
|
||||||
|
|
||||||
arg |= BIT(7);
|
arg |= BIT(7);
|
||||||
|
|
||||||
/* if (shortGIrate ==true) */
|
|
||||||
/* arg |= BIT(5); */
|
|
||||||
|
|
||||||
tx_ra_bitmap |= ((raid<<28)&0xf0000000);
|
tx_ra_bitmap |= ((raid<<28)&0xf0000000);
|
||||||
|
|
||||||
DBG_871X("update_bmc_sta, mask =0x%x, arg =0x%x\n", tx_ra_bitmap, arg);
|
DBG_871X("update_bmc_sta, mask =0x%x, arg =0x%x\n", tx_ra_bitmap, arg);
|
||||||
|
|
||||||
/* bitmap[0:27] = tx_rate_bitmap */
|
|
||||||
/* bitmap[28:31]= Rate Adaptive id */
|
|
||||||
/* arg[0:4] = macid */
|
|
||||||
/* arg[5] = Short GI */
|
|
||||||
rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg, 0);
|
rtw_hal_add_ra_tid(padapter, tx_ra_bitmap, arg, 0);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* set ra_id, init_rate */
|
/* set ra_id, init_rate */
|
||||||
|
@ -697,10 +642,7 @@ void update_bmc_sta(struct adapter *padapter)
|
||||||
spin_lock_bh(&psta->lock);
|
spin_lock_bh(&psta->lock);
|
||||||
psta->state = _FW_LINKED;
|
psta->state = _FW_LINKED;
|
||||||
spin_unlock_bh(&psta->lock);
|
spin_unlock_bh(&psta->lock);
|
||||||
|
} else {
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DBG_871X("add_RATid_bmc_sta error!\n");
|
DBG_871X("add_RATid_bmc_sta error!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -741,31 +683,23 @@ void update_sta_info_apmode(struct adapter *padapter, struct sta_info *psta)
|
||||||
/* ERP */
|
/* ERP */
|
||||||
VCS_update(padapter, psta);
|
VCS_update(padapter, psta);
|
||||||
/* HT related cap */
|
/* HT related cap */
|
||||||
if (phtpriv_sta->ht_option)
|
if (phtpriv_sta->ht_option) {
|
||||||
{
|
|
||||||
/* check if sta supports rx ampdu */
|
/* check if sta supports rx ampdu */
|
||||||
phtpriv_sta->ampdu_enable = phtpriv_ap->ampdu_enable;
|
phtpriv_sta->ampdu_enable = phtpriv_ap->ampdu_enable;
|
||||||
|
|
||||||
/* check if sta support s Short GI */
|
/* check if sta support s Short GI */
|
||||||
if ((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40))
|
if ((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SGI_20|IEEE80211_HT_CAP_SGI_40))
|
||||||
{
|
|
||||||
phtpriv_sta->sgi = true;
|
phtpriv_sta->sgi = true;
|
||||||
}
|
|
||||||
|
|
||||||
/* bwmode */
|
/* bwmode */
|
||||||
if ((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH))
|
if ((phtpriv_sta->ht_cap.cap_info & phtpriv_ap->ht_cap.cap_info) & cpu_to_le16(IEEE80211_HT_CAP_SUP_WIDTH)) {
|
||||||
{
|
|
||||||
/* phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_40; */
|
/* phtpriv_sta->bwmode = HT_CHANNEL_WIDTH_40; */
|
||||||
phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
|
phtpriv_sta->bwmode = pmlmeext->cur_bwmode;
|
||||||
phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
|
phtpriv_sta->ch_offset = pmlmeext->cur_ch_offset;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
psta->qos_option = true;
|
psta->qos_option = true;
|
||||||
|
} else {
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
phtpriv_sta->ampdu_enable = false;
|
phtpriv_sta->ampdu_enable = false;
|
||||||
|
|
||||||
phtpriv_sta->sgi = false;
|
phtpriv_sta->sgi = false;
|
||||||
|
@ -857,17 +791,14 @@ static void start_bss_network(struct adapter *padapter, u8 *pbuf)
|
||||||
/* if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd, */
|
/* if there is wpsie in beacon, the hostapd will update beacon twice when stating hostapd, */
|
||||||
/* and at first time the security ie ( RSN/WPA IE) will not include in beacon. */
|
/* and at first time the security ie ( RSN/WPA IE) will not include in beacon. */
|
||||||
if (NULL == rtw_get_wps_ie(pnetwork->IEs+_FIXED_IE_LENGTH_, pnetwork->IELength-_FIXED_IE_LENGTH_, NULL, NULL))
|
if (NULL == rtw_get_wps_ie(pnetwork->IEs+_FIXED_IE_LENGTH_, pnetwork->IELength-_FIXED_IE_LENGTH_, NULL, NULL))
|
||||||
{
|
|
||||||
pmlmeext->bstart_bss = true;
|
pmlmeext->bstart_bss = true;
|
||||||
}
|
|
||||||
|
|
||||||
/* todo: update wmm, ht cap */
|
/* todo: update wmm, ht cap */
|
||||||
/* pmlmeinfo->WMM_enable; */
|
/* pmlmeinfo->WMM_enable; */
|
||||||
/* pmlmeinfo->HT_enable; */
|
/* pmlmeinfo->HT_enable; */
|
||||||
if (pmlmepriv->qospriv.qos_option)
|
if (pmlmepriv->qospriv.qos_option)
|
||||||
pmlmeinfo->WMM_enable = true;
|
pmlmeinfo->WMM_enable = true;
|
||||||
if (pmlmepriv->htpriv.ht_option)
|
if (pmlmepriv->htpriv.ht_option) {
|
||||||
{
|
|
||||||
pmlmeinfo->WMM_enable = true;
|
pmlmeinfo->WMM_enable = true;
|
||||||
pmlmeinfo->HT_enable = true;
|
pmlmeinfo->HT_enable = true;
|
||||||
/* pmlmeinfo->HT_info_enable = true; */
|
/* pmlmeinfo->HT_info_enable = true; */
|
||||||
|
@ -876,8 +807,7 @@ static void start_bss_network(struct adapter *padapter, u8 *pbuf)
|
||||||
update_hw_ht_param(padapter);
|
update_hw_ht_param(padapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pmlmepriv->cur_network.join_res != true) /* setting only at first time */
|
if (pmlmepriv->cur_network.join_res != true) { /* setting only at first time */
|
||||||
{
|
|
||||||
/* WEP Key will be set before this function, do not clear CAM. */
|
/* WEP Key will be set before this function, do not clear CAM. */
|
||||||
if ((psecuritypriv->dot11PrivacyAlgrthm != _WEP40_) && (psecuritypriv->dot11PrivacyAlgrthm != _WEP104_))
|
if ((psecuritypriv->dot11PrivacyAlgrthm != _WEP40_) && (psecuritypriv->dot11PrivacyAlgrthm != _WEP104_))
|
||||||
flush_all_cam_entry(padapter); /* clear CAM */
|
flush_all_cam_entry(padapter); /* clear CAM */
|
||||||
|
@ -909,24 +839,20 @@ static void start_bss_network(struct adapter *padapter, u8 *pbuf)
|
||||||
UpdateBrateTbl(padapter, pnetwork->SupportedRates);
|
UpdateBrateTbl(padapter, pnetwork->SupportedRates);
|
||||||
rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, pnetwork->SupportedRates);
|
rtw_hal_set_hwreg(padapter, HW_VAR_BASIC_RATE, pnetwork->SupportedRates);
|
||||||
|
|
||||||
if (pmlmepriv->cur_network.join_res != true) /* setting only at first time */
|
if (pmlmepriv->cur_network.join_res != true) { /* setting only at first time */
|
||||||
{
|
|
||||||
/* turn on all dynamic functions */
|
/* turn on all dynamic functions */
|
||||||
Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, true);
|
Switch_DM_Func(padapter, DYNAMIC_ALL_FUNC_ENABLE, true);
|
||||||
}
|
}
|
||||||
/* set channel, bwmode */
|
/* set channel, bwmode */
|
||||||
p = rtw_get_ie((pnetwork->IEs + sizeof(struct ndis_802_11_fixed_ies)), _HT_ADD_INFO_IE_, &ie_len, (pnetwork->IELength - sizeof(struct ndis_802_11_fixed_ies)));
|
p = rtw_get_ie((pnetwork->IEs + sizeof(struct ndis_802_11_fixed_ies)), _HT_ADD_INFO_IE_, &ie_len, (pnetwork->IELength - sizeof(struct ndis_802_11_fixed_ies)));
|
||||||
if ( p && ie_len)
|
if ( p && ie_len) {
|
||||||
{
|
|
||||||
pht_info = (struct HT_info_element *)(p+2);
|
pht_info = (struct HT_info_element *)(p+2);
|
||||||
|
|
||||||
if ((pregpriv->cbw40_enable) && (pht_info->infos[0] & BIT(2)))
|
if ((pregpriv->cbw40_enable) && (pht_info->infos[0] & BIT(2))) {
|
||||||
{
|
|
||||||
/* switch to the 40M Hz mode */
|
/* switch to the 40M Hz mode */
|
||||||
/* pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40; */
|
/* pmlmeext->cur_bwmode = HT_CHANNEL_WIDTH_40; */
|
||||||
cur_bwmode = HT_CHANNEL_WIDTH_40;
|
cur_bwmode = HT_CHANNEL_WIDTH_40;
|
||||||
switch (pht_info->infos[0] & 0x3)
|
switch (pht_info->infos[0] & 0x3) {
|
||||||
{
|
|
||||||
case 1:
|
case 1:
|
||||||
/* pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER; */
|
/* pmlmeext->cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER; */
|
||||||
cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
|
cur_ch_offset = HAL_PRIME_CHNL_OFFSET_LOWER;
|
||||||
|
@ -972,8 +898,7 @@ static void start_bss_network(struct adapter *padapter, u8 *pbuf)
|
||||||
pwdinfo->p2p_group_ssid_len = pnetwork->Ssid.SsidLength;
|
pwdinfo->p2p_group_ssid_len = pnetwork->Ssid.SsidLength;
|
||||||
#endif /* CONFIG_P2P */
|
#endif /* CONFIG_P2P */
|
||||||
|
|
||||||
if (true == pmlmeext->bstart_bss)
|
if (true == pmlmeext->bstart_bss) {
|
||||||
{
|
|
||||||
update_beacon(padapter, _TIM_IE_, NULL, false);
|
update_beacon(padapter, _TIM_IE_, NULL, false);
|
||||||
|
|
||||||
/* issue beacon frame */
|
/* issue beacon frame */
|
||||||
|
@ -1051,8 +976,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
|
|
||||||
/* SSID */
|
/* SSID */
|
||||||
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength -_BEACON_IE_OFFSET_));
|
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SSID_IE_, &ie_len, (pbss_network->IELength -_BEACON_IE_OFFSET_));
|
||||||
if (p && ie_len>0)
|
if (p && ie_len>0) {
|
||||||
{
|
|
||||||
memset(&pbss_network->Ssid, 0, sizeof(struct ndis_802_11_ssid));
|
memset(&pbss_network->Ssid, 0, sizeof(struct ndis_802_11_ssid));
|
||||||
memcpy(pbss_network->Ssid.Ssid, (p + 2), ie_len);
|
memcpy(pbss_network->Ssid.Ssid, (p + 2), ie_len);
|
||||||
pbss_network->Ssid.SsidLength = ie_len;
|
pbss_network->Ssid.SsidLength = ie_len;
|
||||||
|
@ -1070,16 +994,14 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX);
|
memset(supportRate, 0, NDIS_802_11_LENGTH_RATES_EX);
|
||||||
/* get supported rates */
|
/* get supported rates */
|
||||||
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
|
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _SUPPORTEDRATES_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
|
||||||
if (p != NULL)
|
if (p != NULL) {
|
||||||
{
|
|
||||||
memcpy(supportRate, p+2, ie_len);
|
memcpy(supportRate, p+2, ie_len);
|
||||||
supportRateNum = ie_len;
|
supportRateNum = ie_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* get ext_supported rates */
|
/* get ext_supported rates */
|
||||||
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, pbss_network->IELength - _BEACON_IE_OFFSET_);
|
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _EXT_SUPPORTEDRATES_IE_, &ie_len, pbss_network->IELength - _BEACON_IE_OFFSET_);
|
||||||
if (p != NULL)
|
if (p != NULL) {
|
||||||
{
|
|
||||||
memcpy(supportRate+supportRateNum, p+2, ie_len);
|
memcpy(supportRate+supportRateNum, p+2, ie_len);
|
||||||
supportRateNum += ie_len;
|
supportRateNum += ie_len;
|
||||||
|
|
||||||
|
@ -1092,9 +1014,7 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
/* parsing ERP_IE */
|
/* parsing ERP_IE */
|
||||||
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
|
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
|
||||||
if (p && ie_len>0)
|
if (p && ie_len>0)
|
||||||
{
|
|
||||||
ERP_IE_handler(padapter, (struct ndis_802_11_variable_ies *)p);
|
ERP_IE_handler(padapter, (struct ndis_802_11_variable_ies *)p);
|
||||||
}
|
|
||||||
|
|
||||||
/* update privacy/security */
|
/* update privacy/security */
|
||||||
if (cap & BIT(4))
|
if (cap & BIT(4))
|
||||||
|
@ -1109,10 +1029,8 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
|
psecuritypriv->wpa2_group_cipher = _NO_PRIVACY_;
|
||||||
psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
|
psecuritypriv->wpa2_pairwise_cipher = _NO_PRIVACY_;
|
||||||
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
|
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _RSN_IE_2_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
|
||||||
if (p && ie_len>0)
|
if (p && ie_len>0) {
|
||||||
{
|
if (rtw_parse_wpa2_ie(p, ie_len+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) {
|
||||||
if (rtw_parse_wpa2_ie(p, ie_len+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS)
|
|
||||||
{
|
|
||||||
psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
|
psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
|
||||||
|
|
||||||
psecuritypriv->dot8021xalg = 1;/* psk, todo:802.1x */
|
psecuritypriv->dot8021xalg = 1;/* psk, todo:802.1x */
|
||||||
|
@ -1129,13 +1047,10 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
group_cipher = 0; pairwise_cipher = 0;
|
group_cipher = 0; pairwise_cipher = 0;
|
||||||
psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
|
psecuritypriv->wpa_group_cipher = _NO_PRIVACY_;
|
||||||
psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
|
psecuritypriv->wpa_pairwise_cipher = _NO_PRIVACY_;
|
||||||
for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
|
for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2)) {
|
||||||
{
|
|
||||||
p = rtw_get_ie(p, _SSN_IE_1_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
|
p = rtw_get_ie(p, _SSN_IE_1_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
|
||||||
if ((p) && (_rtw_memcmp(p+2, OUI1, 4)))
|
if ((p) && (_rtw_memcmp(p+2, OUI1, 4))) {
|
||||||
{
|
if (rtw_parse_wpa_ie(p, ie_len+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS) {
|
||||||
if (rtw_parse_wpa_ie(p, ie_len+2, &group_cipher, &pairwise_cipher, NULL) == _SUCCESS)
|
|
||||||
{
|
|
||||||
psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
|
psecuritypriv->dot11AuthAlgrthm = dot11AuthAlgrthm_8021X;
|
||||||
|
|
||||||
psecuritypriv->dot8021xalg = 1;/* psk, todo:802.1x */
|
psecuritypriv->dot8021xalg = 1;/* psk, todo:802.1x */
|
||||||
|
@ -1152,22 +1067,16 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((p == NULL) || (ie_len == 0))
|
if ((p == NULL) || (ie_len == 0))
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* wmm */
|
/* wmm */
|
||||||
ie_len = 0;
|
ie_len = 0;
|
||||||
pmlmepriv->qospriv.qos_option = 0;
|
pmlmepriv->qospriv.qos_option = 0;
|
||||||
if (pregistrypriv->wmm_enable)
|
if (pregistrypriv->wmm_enable) {
|
||||||
{
|
for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2)) {
|
||||||
for (p = ie + _BEACON_IE_OFFSET_; ;p += (ie_len + 2))
|
|
||||||
{
|
|
||||||
p = rtw_get_ie(p, _VENDOR_SPECIFIC_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
|
p = rtw_get_ie(p, _VENDOR_SPECIFIC_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_ - (ie_len + 2)));
|
||||||
if ((p) && _rtw_memcmp(p+2, WMM_PARA_IE, 6))
|
if ((p) && _rtw_memcmp(p+2, WMM_PARA_IE, 6)) {
|
||||||
{
|
|
||||||
pmlmepriv->qospriv.qos_option = 1;
|
pmlmepriv->qospriv.qos_option = 1;
|
||||||
|
|
||||||
*(p+8) |= BIT(7);/* QoS Info, support U-APSD */
|
*(p+8) |= BIT(7);/* QoS Info, support U-APSD */
|
||||||
|
@ -1182,15 +1091,12 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((p == NULL) || (ie_len == 0))
|
if ((p == NULL) || (ie_len == 0))
|
||||||
{
|
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* parsing HT_CAP_IE */
|
/* parsing HT_CAP_IE */
|
||||||
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_CAPABILITY_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
|
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_CAPABILITY_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
|
||||||
if (p && ie_len>0)
|
if (p && ie_len>0) {
|
||||||
{
|
|
||||||
u8 rf_type;
|
u8 rf_type;
|
||||||
|
|
||||||
struct ieee80211_ht_cap *pht_cap = (struct ieee80211_ht_cap *)(p+2);
|
struct ieee80211_ht_cap *pht_cap = (struct ieee80211_ht_cap *)(p+2);
|
||||||
|
@ -1204,13 +1110,9 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
|
|
||||||
if ((psecuritypriv->wpa_pairwise_cipher & WPA_CIPHER_CCMP) ||
|
if ((psecuritypriv->wpa_pairwise_cipher & WPA_CIPHER_CCMP) ||
|
||||||
(psecuritypriv->wpa2_pairwise_cipher & WPA_CIPHER_CCMP))
|
(psecuritypriv->wpa2_pairwise_cipher & WPA_CIPHER_CCMP))
|
||||||
{
|
|
||||||
pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&(0x07<<2));
|
pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&(0x07<<2));
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&0x00);
|
pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_DENSITY&0x00);
|
||||||
}
|
|
||||||
|
|
||||||
pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_FACTOR & 0x03); /* set Max Rx AMPDU size to 64K */
|
pht_cap->ampdu_params_info |= (IEEE80211_HT_CAP_AMPDU_FACTOR & 0x03); /* set Max Rx AMPDU size to 64K */
|
||||||
|
|
||||||
|
@ -1226,11 +1128,8 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
/* parsing HT_INFO_IE */
|
/* parsing HT_INFO_IE */
|
||||||
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_ADD_INFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
|
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _HT_ADD_INFO_IE_, &ie_len, (pbss_network->IELength - _BEACON_IE_OFFSET_));
|
||||||
if (p && ie_len>0)
|
if (p && ie_len>0)
|
||||||
{
|
|
||||||
pHT_info_ie =p;
|
pHT_info_ie =p;
|
||||||
}
|
switch (network_type) {
|
||||||
switch (network_type)
|
|
||||||
{
|
|
||||||
case WIRELESS_11B:
|
case WIRELESS_11B:
|
||||||
pbss_network->NetworkTypeInUse = Ndis802_11DS;
|
pbss_network->NetworkTypeInUse = Ndis802_11DS;
|
||||||
break;
|
break;
|
||||||
|
@ -1252,23 +1151,13 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
|
|
||||||
pmlmepriv->htpriv.ht_option = false;
|
pmlmepriv->htpriv.ht_option = false;
|
||||||
|
|
||||||
if ( (psecuritypriv->wpa2_pairwise_cipher&WPA_CIPHER_TKIP) ||
|
|
||||||
(psecuritypriv->wpa_pairwise_cipher&WPA_CIPHER_TKIP))
|
|
||||||
{
|
|
||||||
/* todo: */
|
|
||||||
/* ht_cap = false; */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ht_cap */
|
/* ht_cap */
|
||||||
if (pregistrypriv->ht_enable && ht_cap ==true)
|
if (pregistrypriv->ht_enable && ht_cap) {
|
||||||
{
|
|
||||||
pmlmepriv->htpriv.ht_option = true;
|
pmlmepriv->htpriv.ht_option = true;
|
||||||
pmlmepriv->qospriv.qos_option = 1;
|
pmlmepriv->qospriv.qos_option = 1;
|
||||||
|
|
||||||
if (pregistrypriv->ampdu_enable ==1)
|
if (pregistrypriv->ampdu_enable ==1)
|
||||||
{
|
|
||||||
pmlmepriv->htpriv.ampdu_enable = true;
|
pmlmepriv->htpriv.ampdu_enable = true;
|
||||||
}
|
|
||||||
|
|
||||||
HT_caps_handler(padapter, (struct ndis_802_11_variable_ies *)pHT_caps_ie);
|
HT_caps_handler(padapter, (struct ndis_802_11_variable_ies *)pHT_caps_ie);
|
||||||
|
|
||||||
|
@ -1281,13 +1170,10 @@ int rtw_check_beacon_data(struct adapter *padapter, u8 *pbuf, int len)
|
||||||
|
|
||||||
/* alloc sta_info for ap itself */
|
/* alloc sta_info for ap itself */
|
||||||
psta = rtw_get_stainfo(&padapter->stapriv, pbss_network->MacAddress);
|
psta = rtw_get_stainfo(&padapter->stapriv, pbss_network->MacAddress);
|
||||||
if (!psta)
|
if (!psta) {
|
||||||
{
|
|
||||||
psta = rtw_alloc_stainfo(&padapter->stapriv, pbss_network->MacAddress);
|
psta = rtw_alloc_stainfo(&padapter->stapriv, pbss_network->MacAddress);
|
||||||
if (psta == NULL)
|
if (psta == NULL)
|
||||||
{
|
|
||||||
return _FAIL;
|
return _FAIL;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
psta->state |= WIFI_AP_STATE; /* Aries, add, fix bug of flush_cam_entry at STOP AP mode , 0724 */
|
psta->state |= WIFI_AP_STATE; /* Aries, add, fix bug of flush_cam_entry at STOP AP mode , 0724 */
|
||||||
rtw_indicate_connect( padapter);
|
rtw_indicate_connect( padapter);
|
||||||
|
@ -1332,15 +1218,12 @@ int rtw_acl_add_sta(struct adapter *padapter, u8 *addr)
|
||||||
phead = get_list_head(pacl_node_q);
|
phead = get_list_head(pacl_node_q);
|
||||||
plist = get_next(phead);
|
plist = get_next(phead);
|
||||||
|
|
||||||
while ((rtw_end_of_queue_search(phead, plist)) == false)
|
while ((rtw_end_of_queue_search(phead, plist)) == false) {
|
||||||
{
|
|
||||||
paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
|
paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
|
||||||
plist = get_next(plist);
|
plist = get_next(plist);
|
||||||
|
|
||||||
if (_rtw_memcmp(paclnode->addr, addr, ETH_ALEN))
|
if (_rtw_memcmp(paclnode->addr, addr, ETH_ALEN)) {
|
||||||
{
|
if (paclnode->valid == true) {
|
||||||
if (paclnode->valid == true)
|
|
||||||
{
|
|
||||||
added = true;
|
added = true;
|
||||||
DBG_871X("%s, sta has been added\n", __func__);
|
DBG_871X("%s, sta has been added\n", __func__);
|
||||||
break;
|
break;
|
||||||
|
@ -1355,12 +1238,10 @@ int rtw_acl_add_sta(struct adapter *padapter, u8 *addr)
|
||||||
|
|
||||||
spin_lock_bh(&(pacl_node_q->lock));
|
spin_lock_bh(&(pacl_node_q->lock));
|
||||||
|
|
||||||
for (i =0; i< NUM_ACL; i++)
|
for (i =0; i< NUM_ACL; i++) {
|
||||||
{
|
|
||||||
paclnode = &pacl_list->aclnode[i];
|
paclnode = &pacl_list->aclnode[i];
|
||||||
|
|
||||||
if (paclnode->valid == false)
|
if (paclnode->valid == false) {
|
||||||
{
|
|
||||||
_rtw_init_listhead(&paclnode->list);
|
_rtw_init_listhead(&paclnode->list);
|
||||||
|
|
||||||
memcpy(paclnode->addr, addr, ETH_ALEN);
|
memcpy(paclnode->addr, addr, ETH_ALEN);
|
||||||
|
@ -1399,15 +1280,12 @@ int rtw_acl_remove_sta(struct adapter *padapter, u8 *addr)
|
||||||
phead = get_list_head(pacl_node_q);
|
phead = get_list_head(pacl_node_q);
|
||||||
plist = get_next(phead);
|
plist = get_next(phead);
|
||||||
|
|
||||||
while ((rtw_end_of_queue_search(phead, plist)) == false)
|
while ((rtw_end_of_queue_search(phead, plist)) == false) {
|
||||||
{
|
|
||||||
paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
|
paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
|
||||||
plist = get_next(plist);
|
plist = get_next(plist);
|
||||||
|
|
||||||
if (_rtw_memcmp(paclnode->addr, addr, ETH_ALEN))
|
if (_rtw_memcmp(paclnode->addr, addr, ETH_ALEN)) {
|
||||||
{
|
if (paclnode->valid == true) {
|
||||||
if (paclnode->valid == true)
|
|
||||||
{
|
|
||||||
paclnode->valid = false;
|
paclnode->valid = false;
|
||||||
|
|
||||||
rtw_list_delete(&paclnode->list);
|
rtw_list_delete(&paclnode->list);
|
||||||
|
@ -1447,8 +1325,7 @@ static void update_bcn_erpinfo_ie(struct adapter *padapter)
|
||||||
|
|
||||||
/* parsing ERP_IE */
|
/* parsing ERP_IE */
|
||||||
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &len, (pnetwork->IELength - _BEACON_IE_OFFSET_));
|
p = rtw_get_ie(ie + _BEACON_IE_OFFSET_, _ERPINFO_IE_, &len, (pnetwork->IELength - _BEACON_IE_OFFSET_));
|
||||||
if (p && len>0)
|
if (p && len>0) {
|
||||||
{
|
|
||||||
struct ndis_802_11_variable_ies * pIE = (struct ndis_802_11_variable_ies *)p;
|
struct ndis_802_11_variable_ies * pIE = (struct ndis_802_11_variable_ies *)p;
|
||||||
|
|
||||||
if (pmlmepriv->num_sta_non_erp == 1)
|
if (pmlmepriv->num_sta_non_erp == 1)
|
||||||
|
@ -1520,8 +1397,7 @@ static void update_bcn_wps_ie(struct adapter *padapter)
|
||||||
|
|
||||||
remainder_ielen = ielen - wps_offset - wps_ielen;
|
remainder_ielen = ielen - wps_offset - wps_ielen;
|
||||||
|
|
||||||
if (remainder_ielen>0)
|
if (remainder_ielen>0) {
|
||||||
{
|
|
||||||
pbackup_remainder_ie = rtw_malloc(remainder_ielen);
|
pbackup_remainder_ie = rtw_malloc(remainder_ielen);
|
||||||
if (pbackup_remainder_ie)
|
if (pbackup_remainder_ie)
|
||||||
memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
|
memcpy(pbackup_remainder_ie, premainder_ie, remainder_ielen);
|
||||||
|
@ -1532,8 +1408,7 @@ static void update_bcn_wps_ie(struct adapter *padapter)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wps_ielen = (uint)pwps_ie_src[1];/* to get ie data len */
|
wps_ielen = (uint)pwps_ie_src[1];/* to get ie data len */
|
||||||
if ((wps_offset+wps_ielen+2+remainder_ielen)<=MAX_IE_SZ)
|
if ((wps_offset+wps_ielen+2+remainder_ielen)<=MAX_IE_SZ) {
|
||||||
{
|
|
||||||
memcpy(pwps_ie, pwps_ie_src, wps_ielen+2);
|
memcpy(pwps_ie, pwps_ie_src, wps_ielen+2);
|
||||||
pwps_ie += (wps_ielen+2);
|
pwps_ie += (wps_ielen+2);
|
||||||
|
|
||||||
|
@ -1558,24 +1433,15 @@ static void update_bcn_vendor_spec_ie(struct adapter *padapter, u8*oui)
|
||||||
{
|
{
|
||||||
DBG_871X("%s\n", __FUNCTION__);
|
DBG_871X("%s\n", __FUNCTION__);
|
||||||
|
|
||||||
if (_rtw_memcmp(RTW_WPA_OUI, oui, 4))
|
if (_rtw_memcmp(RTW_WPA_OUI, oui, 4)) {
|
||||||
{
|
|
||||||
update_bcn_wpa_ie(padapter);
|
update_bcn_wpa_ie(padapter);
|
||||||
}
|
} else if (_rtw_memcmp(WMM_OUI, oui, 4)) {
|
||||||
else if (_rtw_memcmp(WMM_OUI, oui, 4))
|
|
||||||
{
|
|
||||||
update_bcn_wmm_ie(padapter);
|
update_bcn_wmm_ie(padapter);
|
||||||
}
|
} else if (_rtw_memcmp(WPS_OUI, oui, 4)) {
|
||||||
else if (_rtw_memcmp(WPS_OUI, oui, 4))
|
|
||||||
{
|
|
||||||
update_bcn_wps_ie(padapter);
|
update_bcn_wps_ie(padapter);
|
||||||
}
|
} else if (_rtw_memcmp(P2P_OUI, oui, 4)) {
|
||||||
else if (_rtw_memcmp(P2P_OUI, oui, 4))
|
|
||||||
{
|
|
||||||
update_bcn_p2p_ie(padapter);
|
update_bcn_p2p_ie(padapter);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
DBG_871X("unknown OUI type!\n");
|
DBG_871X("unknown OUI type!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1602,8 +1468,7 @@ void update_beacon(struct adapter *padapter, u8 ie_id, u8 *oui, u8 tx)
|
||||||
|
|
||||||
spin_lock_bh(&pmlmepriv->bcn_update_lock);
|
spin_lock_bh(&pmlmepriv->bcn_update_lock);
|
||||||
|
|
||||||
switch (ie_id)
|
switch (ie_id) {
|
||||||
{
|
|
||||||
case 0xFF:
|
case 0xFF:
|
||||||
|
|
||||||
update_bcn_fixed_ie(padapter);/* 8: TimeStamp, 2: Beacon Interval 2:Capability */
|
update_bcn_fixed_ie(padapter);/* 8: TimeStamp, 2: Beacon Interval 2:Capability */
|
||||||
|
@ -1744,8 +1609,7 @@ static int rtw_ht_operation_update(struct adapter *padapter)
|
||||||
void associated_clients_update(struct adapter *padapter, u8 updated)
|
void associated_clients_update(struct adapter *padapter, u8 updated)
|
||||||
{
|
{
|
||||||
/* update associcated stations cap. */
|
/* update associcated stations cap. */
|
||||||
if (updated == true)
|
if (updated == true) {
|
||||||
{
|
|
||||||
unsigned long irqL;
|
unsigned long irqL;
|
||||||
struct list_head *phead, *plist;
|
struct list_head *phead, *plist;
|
||||||
struct sta_info *psta = NULL;
|
struct sta_info *psta = NULL;
|
||||||
|
@ -1757,8 +1621,7 @@ void associated_clients_update(struct adapter *padapter, u8 updated)
|
||||||
plist = get_next(phead);
|
plist = get_next(phead);
|
||||||
|
|
||||||
/* check asoc_queue */
|
/* check asoc_queue */
|
||||||
while ((rtw_end_of_queue_search(phead, plist)) == false)
|
while ((rtw_end_of_queue_search(phead, plist)) == false) {
|
||||||
{
|
|
||||||
psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
|
psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
|
||||||
|
|
||||||
plist = get_next(plist);
|
plist = get_next(plist);
|
||||||
|
@ -1831,42 +1694,34 @@ void bss_cap_update_on_sta_join(struct adapter *padapter, struct sta_info *psta)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT))
|
if (!(psta->capability & WLAN_CAPABILITY_SHORT_SLOT)) {
|
||||||
{
|
if (!psta->no_short_slot_time_set) {
|
||||||
if (!psta->no_short_slot_time_set)
|
|
||||||
{
|
|
||||||
psta->no_short_slot_time_set = 1;
|
psta->no_short_slot_time_set = 1;
|
||||||
|
|
||||||
pmlmepriv->num_sta_no_short_slot_time++;
|
pmlmepriv->num_sta_no_short_slot_time++;
|
||||||
|
|
||||||
if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
|
if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
|
||||||
(pmlmepriv->num_sta_no_short_slot_time == 1))
|
(pmlmepriv->num_sta_no_short_slot_time == 1)) {
|
||||||
{
|
|
||||||
beacon_updated = true;
|
beacon_updated = true;
|
||||||
update_beacon(padapter, 0xFF, NULL, true);
|
update_beacon(padapter, 0xFF, NULL, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
else
|
if (psta->no_short_slot_time_set) {
|
||||||
{
|
|
||||||
if (psta->no_short_slot_time_set)
|
|
||||||
{
|
|
||||||
psta->no_short_slot_time_set = 0;
|
psta->no_short_slot_time_set = 0;
|
||||||
|
|
||||||
pmlmepriv->num_sta_no_short_slot_time--;
|
pmlmepriv->num_sta_no_short_slot_time--;
|
||||||
|
|
||||||
if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
|
if ((pmlmeext->cur_wireless_mode > WIRELESS_11B) &&
|
||||||
(pmlmepriv->num_sta_no_short_slot_time == 0))
|
(pmlmepriv->num_sta_no_short_slot_time == 0)) {
|
||||||
{
|
|
||||||
beacon_updated = true;
|
beacon_updated = true;
|
||||||
update_beacon(padapter, 0xFF, NULL, true);
|
update_beacon(padapter, 0xFF, NULL, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (psta->flags & WLAN_STA_HT)
|
if (psta->flags & WLAN_STA_HT) {
|
||||||
{
|
|
||||||
u16 ht_capab = le16_to_cpu(psta->htpriv.ht_cap.cap_info);
|
u16 ht_capab = le16_to_cpu(psta->htpriv.ht_cap.cap_info);
|
||||||
|
|
||||||
DBG_871X("HT: STA " MAC_FMT " HT Capabilities "
|
DBG_871X("HT: STA " MAC_FMT " HT Capabilities "
|
||||||
|
@ -1898,10 +1753,7 @@ void bss_cap_update_on_sta_join(struct adapter *padapter, struct sta_info *psta)
|
||||||
__FUNCTION__, MAC_ARG(psta->hwaddr),
|
__FUNCTION__, MAC_ARG(psta->hwaddr),
|
||||||
pmlmepriv->num_sta_ht_20mhz);
|
pmlmepriv->num_sta_ht_20mhz);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!psta->no_ht_set) {
|
if (!psta->no_ht_set) {
|
||||||
psta->no_ht_set = 1;
|
psta->no_ht_set = 1;
|
||||||
pmlmepriv->num_sta_no_ht++;
|
pmlmepriv->num_sta_no_ht++;
|
||||||
|
@ -1914,8 +1766,7 @@ void bss_cap_update_on_sta_join(struct adapter *padapter, struct sta_info *psta)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rtw_ht_operation_update(padapter) > 0)
|
if (rtw_ht_operation_update(padapter) > 0) {
|
||||||
{
|
|
||||||
update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, false);
|
update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, false);
|
||||||
update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, true);
|
update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, true);
|
||||||
}
|
}
|
||||||
|
@ -1939,9 +1790,8 @@ u8 bss_cap_update_on_sta_leave(struct adapter *padapter, struct sta_info *psta)
|
||||||
if (psta->no_short_preamble_set) {
|
if (psta->no_short_preamble_set) {
|
||||||
psta->no_short_preamble_set = 0;
|
psta->no_short_preamble_set = 0;
|
||||||
pmlmepriv->num_sta_no_short_preamble--;
|
pmlmepriv->num_sta_no_short_preamble--;
|
||||||
if (pmlmeext->cur_wireless_mode > WIRELESS_11B
|
if (pmlmeext->cur_wireless_mode > WIRELESS_11B &&
|
||||||
&& pmlmepriv->num_sta_no_short_preamble == 0)
|
pmlmepriv->num_sta_no_short_preamble == 0) {
|
||||||
{
|
|
||||||
beacon_updated = true;
|
beacon_updated = true;
|
||||||
update_beacon(padapter, 0xFF, NULL, true);
|
update_beacon(padapter, 0xFF, NULL, true);
|
||||||
}
|
}
|
||||||
|
@ -1950,8 +1800,7 @@ u8 bss_cap_update_on_sta_leave(struct adapter *padapter, struct sta_info *psta)
|
||||||
if (psta->nonerp_set) {
|
if (psta->nonerp_set) {
|
||||||
psta->nonerp_set = 0;
|
psta->nonerp_set = 0;
|
||||||
pmlmepriv->num_sta_non_erp--;
|
pmlmepriv->num_sta_non_erp--;
|
||||||
if (pmlmepriv->num_sta_non_erp == 0)
|
if (pmlmepriv->num_sta_non_erp == 0) {
|
||||||
{
|
|
||||||
beacon_updated = true;
|
beacon_updated = true;
|
||||||
update_beacon(padapter, _ERPINFO_IE_, NULL, true);
|
update_beacon(padapter, _ERPINFO_IE_, NULL, true);
|
||||||
}
|
}
|
||||||
|
@ -1960,9 +1809,8 @@ u8 bss_cap_update_on_sta_leave(struct adapter *padapter, struct sta_info *psta)
|
||||||
if (psta->no_short_slot_time_set) {
|
if (psta->no_short_slot_time_set) {
|
||||||
psta->no_short_slot_time_set = 0;
|
psta->no_short_slot_time_set = 0;
|
||||||
pmlmepriv->num_sta_no_short_slot_time--;
|
pmlmepriv->num_sta_no_short_slot_time--;
|
||||||
if (pmlmeext->cur_wireless_mode > WIRELESS_11B
|
if (pmlmeext->cur_wireless_mode > WIRELESS_11B &&
|
||||||
&& pmlmepriv->num_sta_no_short_slot_time == 0)
|
pmlmepriv->num_sta_no_short_slot_time == 0) {
|
||||||
{
|
|
||||||
beacon_updated = true;
|
beacon_updated = true;
|
||||||
update_beacon(padapter, 0xFF, NULL, true);
|
update_beacon(padapter, 0xFF, NULL, true);
|
||||||
}
|
}
|
||||||
|
@ -1983,8 +1831,7 @@ u8 bss_cap_update_on_sta_leave(struct adapter *padapter, struct sta_info *psta)
|
||||||
pmlmepriv->num_sta_ht_20mhz--;
|
pmlmepriv->num_sta_ht_20mhz--;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rtw_ht_operation_update(padapter) > 0)
|
if (rtw_ht_operation_update(padapter) > 0) {
|
||||||
{
|
|
||||||
update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, false);
|
update_beacon(padapter, _HT_CAPABILITY_IE_, NULL, false);
|
||||||
update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, true);
|
update_beacon(padapter, _HT_ADD_INFO_IE_, NULL, true);
|
||||||
}
|
}
|
||||||
|
@ -2006,8 +1853,7 @@ u8 ap_free_sta(struct adapter *padapter, struct sta_info *psta, bool active, u16
|
||||||
if (!psta)
|
if (!psta)
|
||||||
return beacon_updated;
|
return beacon_updated;
|
||||||
|
|
||||||
if (active == true)
|
if (active == true) {
|
||||||
{
|
|
||||||
/* tear down Rx AMPDU */
|
/* tear down Rx AMPDU */
|
||||||
send_delba(padapter, 0, psta->hwaddr);/* recipient */
|
send_delba(padapter, 0, psta->hwaddr);/* recipient */
|
||||||
|
|
||||||
|
@ -2064,8 +1910,7 @@ int rtw_ap_inform_ch_switch (struct adapter *padapter, u8 new_ch, u8 ch_offset)
|
||||||
plist = get_next(phead);
|
plist = get_next(phead);
|
||||||
|
|
||||||
/* for each sta in asoc_queue */
|
/* for each sta in asoc_queue */
|
||||||
while ((rtw_end_of_queue_search(phead, plist)) == false)
|
while ((rtw_end_of_queue_search(phead, plist)) == false) {
|
||||||
{
|
|
||||||
psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
|
psta = LIST_CONTAINOR(plist, struct sta_info, asoc_list);
|
||||||
plist = get_next(plist);
|
plist = get_next(plist);
|
||||||
|
|
||||||
|
@ -2150,13 +1995,10 @@ void sta_info_update(struct adapter *padapter, struct sta_info *psta)
|
||||||
psta->qos_option = 0;
|
psta->qos_option = 0;
|
||||||
|
|
||||||
/* update 802.11n ht cap. */
|
/* update 802.11n ht cap. */
|
||||||
if (WLAN_STA_HT&flags)
|
if (WLAN_STA_HT&flags) {
|
||||||
{
|
|
||||||
psta->htpriv.ht_option = true;
|
psta->htpriv.ht_option = true;
|
||||||
psta->qos_option = 1;
|
psta->qos_option = 1;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
psta->htpriv.ht_option = false;
|
psta->htpriv.ht_option = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2169,8 +2011,7 @@ void sta_info_update(struct adapter *padapter, struct sta_info *psta)
|
||||||
/* called >= TSR LEVEL for USB or SDIO Interface*/
|
/* called >= TSR LEVEL for USB or SDIO Interface*/
|
||||||
void ap_sta_info_defer_update(struct adapter *padapter, struct sta_info *psta)
|
void ap_sta_info_defer_update(struct adapter *padapter, struct sta_info *psta)
|
||||||
{
|
{
|
||||||
if (psta->state & _FW_LINKED)
|
if (psta->state & _FW_LINKED) {
|
||||||
{
|
|
||||||
/* add ratid */
|
/* add ratid */
|
||||||
add_RATid(padapter, psta, 0);/* DM_RATR_STA_INIT */
|
add_RATid(padapter, psta, 0);/* DM_RATR_STA_INIT */
|
||||||
}
|
}
|
||||||
|
@ -2197,8 +2038,7 @@ void rtw_ap_restore_network(struct adapter *padapter)
|
||||||
start_bss_network(padapter, (u8*)&mlmepriv->cur_network.network);
|
start_bss_network(padapter, (u8*)&mlmepriv->cur_network.network);
|
||||||
|
|
||||||
if ((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
|
if ((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
|
||||||
(padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
|
(padapter->securitypriv.dot11PrivacyAlgrthm == _AES_)) {
|
||||||
{
|
|
||||||
/* restore group key, WEP keys is restored in ips_leave() */
|
/* restore group key, WEP keys is restored in ips_leave() */
|
||||||
rtw_set_key(padapter, psecuritypriv, psecuritypriv->dot118021XGrpKeyid, 0, false);
|
rtw_set_key(padapter, psecuritypriv, psecuritypriv->dot118021XGrpKeyid, 0, false);
|
||||||
}
|
}
|
||||||
|
@ -2227,17 +2067,13 @@ void rtw_ap_restore_network(struct adapter *padapter)
|
||||||
|
|
||||||
if (psta == NULL) {
|
if (psta == NULL) {
|
||||||
DBG_871X(FUNC_ADPT_FMT" sta_info is null\n", FUNC_ADPT_ARG(padapter));
|
DBG_871X(FUNC_ADPT_FMT" sta_info is null\n", FUNC_ADPT_ARG(padapter));
|
||||||
}
|
} else if (psta->state &_FW_LINKED) {
|
||||||
else if (psta->state &_FW_LINKED)
|
|
||||||
{
|
|
||||||
Update_RA_Entry(padapter, psta);
|
Update_RA_Entry(padapter, psta);
|
||||||
/* pairwise key */
|
/* pairwise key */
|
||||||
/* per sta pairwise key and settings */
|
/* per sta pairwise key and settings */
|
||||||
if ( (padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
|
if ((padapter->securitypriv.dot11PrivacyAlgrthm == _TKIP_) ||
|
||||||
(padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
|
(padapter->securitypriv.dot11PrivacyAlgrthm == _AES_))
|
||||||
{
|
|
||||||
rtw_setstakey_cmd(padapter, (unsigned char *)psta, true, false);
|
rtw_setstakey_cmd(padapter, (unsigned char *)psta, true, false);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2286,8 +2122,7 @@ void start_ap_mode(struct adapter *padapter)
|
||||||
_rtw_init_listhead(&(pacl_list->acl_node_q.queue));
|
_rtw_init_listhead(&(pacl_list->acl_node_q.queue));
|
||||||
pacl_list->num = 0;
|
pacl_list->num = 0;
|
||||||
pacl_list->mode = 0;
|
pacl_list->mode = 0;
|
||||||
for (i = 0; i < NUM_ACL; i++)
|
for (i = 0; i < NUM_ACL; i++) {
|
||||||
{
|
|
||||||
_rtw_init_listhead(&pacl_list->aclnode[i].list);
|
_rtw_init_listhead(&pacl_list->aclnode[i].list);
|
||||||
pacl_list->aclnode[i].valid = false;
|
pacl_list->aclnode[i].valid = false;
|
||||||
}
|
}
|
||||||
|
@ -2317,13 +2152,11 @@ void stop_ap_mode(struct adapter *padapter)
|
||||||
spin_lock_bh(&(pacl_node_q->lock));
|
spin_lock_bh(&(pacl_node_q->lock));
|
||||||
phead = get_list_head(pacl_node_q);
|
phead = get_list_head(pacl_node_q);
|
||||||
plist = get_next(phead);
|
plist = get_next(phead);
|
||||||
while ((rtw_end_of_queue_search(phead, plist)) == false)
|
while ((rtw_end_of_queue_search(phead, plist)) == false) {
|
||||||
{
|
|
||||||
paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
|
paclnode = LIST_CONTAINOR(plist, struct rtw_wlan_acl_node, list);
|
||||||
plist = get_next(plist);
|
plist = get_next(plist);
|
||||||
|
|
||||||
if (paclnode->valid == true)
|
if (paclnode->valid == true) {
|
||||||
{
|
|
||||||
paclnode->valid = false;
|
paclnode->valid = false;
|
||||||
|
|
||||||
rtw_list_delete(&paclnode->list);
|
rtw_list_delete(&paclnode->list);
|
||||||
|
|
|
@ -304,33 +304,26 @@ static void convert_ipv6_mac_to_mc(struct sk_buff *skb)
|
||||||
|
|
||||||
static __inline__ int __nat25_network_hash(unsigned char *networkAddr)
|
static __inline__ int __nat25_network_hash(unsigned char *networkAddr)
|
||||||
{
|
{
|
||||||
if (networkAddr[0] == NAT25_IPV4)
|
if (networkAddr[0] == NAT25_IPV4) {
|
||||||
{
|
|
||||||
unsigned long x;
|
unsigned long x;
|
||||||
|
|
||||||
x = networkAddr[7] ^ networkAddr[8] ^ networkAddr[9] ^ networkAddr[10];
|
x = networkAddr[7] ^ networkAddr[8] ^ networkAddr[9] ^ networkAddr[10];
|
||||||
|
|
||||||
return x & (NAT25_HASH_SIZE - 1);
|
return x & (NAT25_HASH_SIZE - 1);
|
||||||
}
|
} else if (networkAddr[0] == NAT25_IPX) {
|
||||||
else if (networkAddr[0] == NAT25_IPX)
|
|
||||||
{
|
|
||||||
unsigned long x;
|
unsigned long x;
|
||||||
|
|
||||||
x = networkAddr[1] ^ networkAddr[2] ^ networkAddr[3] ^ networkAddr[4] ^ networkAddr[5] ^
|
x = networkAddr[1] ^ networkAddr[2] ^ networkAddr[3] ^ networkAddr[4] ^ networkAddr[5] ^
|
||||||
networkAddr[6] ^ networkAddr[7] ^ networkAddr[8] ^ networkAddr[9] ^ networkAddr[10];
|
networkAddr[6] ^ networkAddr[7] ^ networkAddr[8] ^ networkAddr[9] ^ networkAddr[10];
|
||||||
|
|
||||||
return x & (NAT25_HASH_SIZE - 1);
|
return x & (NAT25_HASH_SIZE - 1);
|
||||||
}
|
} else if (networkAddr[0] == NAT25_APPLE) {
|
||||||
else if (networkAddr[0] == NAT25_APPLE)
|
|
||||||
{
|
|
||||||
unsigned long x;
|
unsigned long x;
|
||||||
|
|
||||||
x = networkAddr[1] ^ networkAddr[2] ^ networkAddr[3];
|
x = networkAddr[1] ^ networkAddr[2] ^ networkAddr[3];
|
||||||
|
|
||||||
return x & (NAT25_HASH_SIZE - 1);
|
return x & (NAT25_HASH_SIZE - 1);
|
||||||
}
|
} else if (networkAddr[0] == NAT25_PPPOE) {
|
||||||
else if (networkAddr[0] == NAT25_PPPOE)
|
|
||||||
{
|
|
||||||
unsigned long x;
|
unsigned long x;
|
||||||
|
|
||||||
x = networkAddr[0] ^ networkAddr[1] ^ networkAddr[2] ^ networkAddr[3] ^ networkAddr[4] ^ networkAddr[5] ^ networkAddr[6] ^ networkAddr[7] ^ networkAddr[8];
|
x = networkAddr[0] ^ networkAddr[1] ^ networkAddr[2] ^ networkAddr[3] ^ networkAddr[4] ^ networkAddr[5] ^ networkAddr[6] ^ networkAddr[7] ^ networkAddr[8];
|
||||||
|
@ -338,8 +331,7 @@ static __inline__ int __nat25_network_hash(unsigned char *networkAddr)
|
||||||
return x & (NAT25_HASH_SIZE - 1);
|
return x & (NAT25_HASH_SIZE - 1);
|
||||||
}
|
}
|
||||||
#ifdef CL_IPV6_PASS
|
#ifdef CL_IPV6_PASS
|
||||||
else if (networkAddr[0] == NAT25_IPV6)
|
else if (networkAddr[0] == NAT25_IPV6) {
|
||||||
{
|
|
||||||
unsigned long x;
|
unsigned long x;
|
||||||
|
|
||||||
x = networkAddr[1] ^ networkAddr[2] ^ networkAddr[3] ^ networkAddr[4] ^ networkAddr[5] ^
|
x = networkAddr[1] ^ networkAddr[2] ^ networkAddr[3] ^ networkAddr[4] ^ networkAddr[5] ^
|
||||||
|
@ -350,8 +342,7 @@ static __inline__ int __nat25_network_hash(unsigned char *networkAddr)
|
||||||
return x & (NAT25_HASH_SIZE - 1);
|
return x & (NAT25_HASH_SIZE - 1);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
else
|
else {
|
||||||
{
|
|
||||||
unsigned long x = 0;
|
unsigned long x = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -401,12 +392,9 @@ static int __nat25_db_network_lookup_and_replace(struct adapter *priv,
|
||||||
spin_lock_bh(&priv->br_ext_lock);
|
spin_lock_bh(&priv->br_ext_lock);
|
||||||
|
|
||||||
db = priv->nethash[__nat25_network_hash(networkAddr)];
|
db = priv->nethash[__nat25_network_hash(networkAddr)];
|
||||||
while (db != NULL)
|
while (db != NULL) {
|
||||||
{
|
if (!memcmp(db->networkAddr, networkAddr, MAX_NETWORK_ADDR_LEN)) {
|
||||||
if (!memcmp(db->networkAddr, networkAddr, MAX_NETWORK_ADDR_LEN))
|
if (!__nat25_has_expired(priv, db)) {
|
||||||
{
|
|
||||||
if (!__nat25_has_expired(priv, db))
|
|
||||||
{
|
|
||||||
/* replace the destination mac address */
|
/* replace the destination mac address */
|
||||||
memcpy(skb->data, db->macAddr, ETH_ALEN);
|
memcpy(skb->data, db->macAddr, ETH_ALEN);
|
||||||
atomic_inc(&db->use_count);
|
atomic_inc(&db->use_count);
|
||||||
|
@ -479,10 +467,8 @@ static void __nat25_db_network_insert(struct adapter *priv,
|
||||||
|
|
||||||
hash = __nat25_network_hash(networkAddr);
|
hash = __nat25_network_hash(networkAddr);
|
||||||
db = priv->nethash[hash];
|
db = priv->nethash[hash];
|
||||||
while (db != NULL)
|
while (db != NULL) {
|
||||||
{
|
if (!memcmp(db->networkAddr, networkAddr, MAX_NETWORK_ADDR_LEN)) {
|
||||||
if (!memcmp(db->networkAddr, networkAddr, MAX_NETWORK_ADDR_LEN))
|
|
||||||
{
|
|
||||||
memcpy(db->macAddr, macAddr, ETH_ALEN);
|
memcpy(db->macAddr, macAddr, ETH_ALEN);
|
||||||
db->ageing_timer = jiffies;
|
db->ageing_timer = jiffies;
|
||||||
spin_unlock_bh(&priv->br_ext_lock);
|
spin_unlock_bh(&priv->br_ext_lock);
|
||||||
|
@ -522,16 +508,14 @@ void nat25_db_cleanup(struct adapter *priv)
|
||||||
unsigned long irqL;
|
unsigned long irqL;
|
||||||
spin_lock_bh(&priv->br_ext_lock);
|
spin_lock_bh(&priv->br_ext_lock);
|
||||||
|
|
||||||
for (i =0; i<NAT25_HASH_SIZE; i++)
|
for (i =0; i<NAT25_HASH_SIZE; i++) {
|
||||||
{
|
|
||||||
struct nat25_network_db_entry *f;
|
struct nat25_network_db_entry *f;
|
||||||
f = priv->nethash[i];
|
f = priv->nethash[i];
|
||||||
while (f != NULL) {
|
while (f != NULL) {
|
||||||
struct nat25_network_db_entry *g;
|
struct nat25_network_db_entry *g;
|
||||||
|
|
||||||
g = f->next_hash;
|
g = f->next_hash;
|
||||||
if (priv->scdb_entry == f)
|
if (priv->scdb_entry == f) {
|
||||||
{
|
|
||||||
memset(priv->scdb_mac, 0, ETH_ALEN);
|
memset(priv->scdb_mac, 0, ETH_ALEN);
|
||||||
memset(priv->scdb_ip, 0, 4);
|
memset(priv->scdb_ip, 0, 4);
|
||||||
priv->scdb_entry = NULL;
|
priv->scdb_entry = NULL;
|
||||||
|
@ -554,22 +538,17 @@ void nat25_db_expire(struct adapter *priv)
|
||||||
|
|
||||||
/* if (!priv->ethBrExtInfo.nat25_disable) */
|
/* if (!priv->ethBrExtInfo.nat25_disable) */
|
||||||
{
|
{
|
||||||
for (i =0; i<NAT25_HASH_SIZE; i++)
|
for (i =0; i<NAT25_HASH_SIZE; i++) {
|
||||||
{
|
|
||||||
struct nat25_network_db_entry *f;
|
struct nat25_network_db_entry *f;
|
||||||
f = priv->nethash[i];
|
f = priv->nethash[i];
|
||||||
|
|
||||||
while (f != NULL)
|
while (f != NULL) {
|
||||||
{
|
|
||||||
struct nat25_network_db_entry *g;
|
struct nat25_network_db_entry *g;
|
||||||
g = f->next_hash;
|
g = f->next_hash;
|
||||||
|
|
||||||
if (__nat25_has_expired(priv, f))
|
if (__nat25_has_expired(priv, f)) {
|
||||||
{
|
if (atomic_dec_and_test(&f->use_count)) {
|
||||||
if (atomic_dec_and_test(&f->use_count))
|
if (priv->scdb_entry == f) {
|
||||||
{
|
|
||||||
if (priv->scdb_entry == f)
|
|
||||||
{
|
|
||||||
memset(priv->scdb_mac, 0, ETH_ALEN);
|
memset(priv->scdb_mac, 0, ETH_ALEN);
|
||||||
memset(priv->scdb_ip, 0, 4);
|
memset(priv->scdb_ip, 0, 4);
|
||||||
priv->scdb_entry = NULL;
|
priv->scdb_entry = NULL;
|
||||||
|
@ -578,12 +557,10 @@ void nat25_db_expire(struct adapter *priv)
|
||||||
rtw_mfree((u8 *) f, sizeof(struct nat25_network_db_entry));
|
rtw_mfree((u8 *) f, sizeof(struct nat25_network_db_entry));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
f = g;
|
f = g;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock_bh(&priv->br_ext_lock);
|
spin_unlock_bh(&priv->br_ext_lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -635,8 +612,8 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
if (protocol == ETH_P_IP) {
|
if (protocol == ETH_P_IP) {
|
||||||
struct iphdr* iph = (struct iphdr *)(skb->data + ETH_HLEN);
|
struct iphdr* iph = (struct iphdr *)(skb->data + ETH_HLEN);
|
||||||
|
|
||||||
if (((unsigned char*)(iph) + (iph->ihl<<2)) >= (skb->data + ETH_HLEN + skb->len))
|
if (((unsigned char*)(iph) + (iph->ihl<<2)) >=
|
||||||
{
|
(skb->data + ETH_HLEN + skb->len)) {
|
||||||
DEBUG_WARN("NAT25: malformed IP packet !\n");
|
DEBUG_WARN("NAT25: malformed IP packet !\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
@ -646,30 +623,26 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
case NAT25_INSERT:
|
case NAT25_INSERT:
|
||||||
{
|
tmp = be32_to_cpu(iph->saddr);
|
||||||
tmp = be32_to_cpu(iph->saddr);
|
/* some muticast with source IP is all zero, maybe other case is illegal */
|
||||||
/* some muticast with source IP is all zero, maybe other case is illegal */
|
/* in class A, B, C, host address is all zero or all one is illegal */
|
||||||
/* in class A, B, C, host address is all zero or all one is illegal */
|
if (iph->saddr == 0)
|
||||||
if (iph->saddr == 0)
|
return 0;
|
||||||
return 0;
|
DEBUG_INFO("NAT25: Insert IP, SA =%08x, DA =%08x\n", iph->saddr, iph->daddr);
|
||||||
DEBUG_INFO("NAT25: Insert IP, SA =%08x, DA =%08x\n", iph->saddr, iph->daddr);
|
__nat25_generate_ipv4_network_addr(networkAddr, &tmp);
|
||||||
__nat25_generate_ipv4_network_addr(networkAddr, &tmp);
|
/* record source IP address and , source mac address into db */
|
||||||
/* record source IP address and , source mac address into db */
|
__nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr);
|
||||||
__nat25_db_network_insert(priv, skb->data+ETH_ALEN, networkAddr);
|
|
||||||
|
|
||||||
__nat25_db_print(priv);
|
__nat25_db_print(priv);
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case NAT25_LOOKUP:
|
case NAT25_LOOKUP:
|
||||||
{
|
DEBUG_INFO("NAT25: Lookup IP, SA =%08x, DA =%08x\n", iph->saddr, iph->daddr);
|
||||||
DEBUG_INFO("NAT25: Lookup IP, SA =%08x, DA =%08x\n", iph->saddr, iph->daddr);
|
|
||||||
#ifdef SUPPORT_TX_MCAST2UNI
|
#ifdef SUPPORT_TX_MCAST2UNI
|
||||||
if (priv->pshare->rf_ft_var.mc2u_disable ||
|
if (priv->pshare->rf_ft_var.mc2u_disable ||
|
||||||
((((OPMODE & (WIFI_STATION_STATE|WIFI_ASOC_STATE)) ==
|
((((OPMODE & (WIFI_STATION_STATE|WIFI_ASOC_STATE)) ==
|
||||||
(WIFI_STATION_STATE|WIFI_ASOC_STATE)) &&
|
(WIFI_STATION_STATE|WIFI_ASOC_STATE)) &&
|
||||||
!checkIPMcAndReplace(priv, skb, &iph->daddr)) ||
|
!checkIPMcAndReplace(priv, skb, &iph->daddr)) ||
|
||||||
(OPMODE & WIFI_ADHOC_STATE)))
|
(OPMODE & WIFI_ADHOC_STATE)))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
tmp = be32_to_cpu(iph->daddr);
|
tmp = be32_to_cpu(iph->daddr);
|
||||||
|
@ -691,7 +664,6 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -702,20 +674,17 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
/*---------------------------------------------------*/
|
/*---------------------------------------------------*/
|
||||||
/* Handle ARP frame */
|
/* Handle ARP frame */
|
||||||
/*---------------------------------------------------*/
|
/*---------------------------------------------------*/
|
||||||
else if (protocol == ETH_P_ARP)
|
else if (protocol == ETH_P_ARP) {
|
||||||
{
|
|
||||||
struct arphdr *arp = (struct arphdr *)(skb->data + ETH_HLEN);
|
struct arphdr *arp = (struct arphdr *)(skb->data + ETH_HLEN);
|
||||||
unsigned char *arp_ptr = (unsigned char *)(arp + 1);
|
unsigned char *arp_ptr = (unsigned char *)(arp + 1);
|
||||||
unsigned int *sender, *target;
|
unsigned int *sender, *target;
|
||||||
|
|
||||||
if (arp->ar_pro != __constant_htons(ETH_P_IP))
|
if (arp->ar_pro != __constant_htons(ETH_P_IP)) {
|
||||||
{
|
|
||||||
DEBUG_WARN("NAT25: arp protocol unknown (%4x)!\n", htons(arp->ar_pro));
|
DEBUG_WARN("NAT25: arp protocol unknown (%4x)!\n", htons(arp->ar_pro));
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (method)
|
switch (method) {
|
||||||
{
|
|
||||||
case NAT25_CHECK:
|
case NAT25_CHECK:
|
||||||
return 0; /* skb_copy for all ARP frame */
|
return 0; /* skb_copy for all ARP frame */
|
||||||
|
|
||||||
|
@ -767,71 +736,53 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
/* Handle IPX and Apple Talk frame */
|
/* Handle IPX and Apple Talk frame */
|
||||||
/*---------------------------------------------------*/
|
/*---------------------------------------------------*/
|
||||||
else if ((protocol == ETH_P_IPX) ||
|
else if ((protocol == ETH_P_IPX) ||
|
||||||
(protocol <= ETH_FRAME_LEN))
|
(protocol <= ETH_FRAME_LEN)) {
|
||||||
{
|
|
||||||
unsigned char ipx_header[2] = {0xFF, 0xFF};
|
unsigned char ipx_header[2] = {0xFF, 0xFF};
|
||||||
struct ipxhdr *ipx = NULL;
|
struct ipxhdr *ipx = NULL;
|
||||||
struct elapaarp *ea = NULL;
|
struct elapaarp *ea = NULL;
|
||||||
struct ddpehdr *ddp = NULL;
|
struct ddpehdr *ddp = NULL;
|
||||||
unsigned char *framePtr = skb->data + ETH_HLEN;
|
unsigned char *framePtr = skb->data + ETH_HLEN;
|
||||||
|
|
||||||
if (protocol == ETH_P_IPX)
|
if (protocol == ETH_P_IPX) {
|
||||||
{
|
|
||||||
DEBUG_INFO("NAT25: Protocol =IPX (Ethernet II)\n");
|
DEBUG_INFO("NAT25: Protocol =IPX (Ethernet II)\n");
|
||||||
ipx = (struct ipxhdr *)framePtr;
|
ipx = (struct ipxhdr *)framePtr;
|
||||||
}
|
} else if (protocol <= ETH_FRAME_LEN) {
|
||||||
else if (protocol <= ETH_FRAME_LEN)
|
if (!memcmp(ipx_header, framePtr, 2)) {
|
||||||
{
|
|
||||||
if (!memcmp(ipx_header, framePtr, 2))
|
|
||||||
{
|
|
||||||
DEBUG_INFO("NAT25: Protocol =IPX (Ethernet 802.3)\n");
|
DEBUG_INFO("NAT25: Protocol =IPX (Ethernet 802.3)\n");
|
||||||
ipx = (struct ipxhdr *)framePtr;
|
ipx = (struct ipxhdr *)framePtr;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
unsigned char ipx_8022_type = 0xE0;
|
unsigned char ipx_8022_type = 0xE0;
|
||||||
unsigned char snap_8022_type = 0xAA;
|
unsigned char snap_8022_type = 0xAA;
|
||||||
|
|
||||||
if (*framePtr == snap_8022_type)
|
if (*framePtr == snap_8022_type) {
|
||||||
{
|
|
||||||
unsigned char ipx_snap_id[5] = {0x0, 0x0, 0x0, 0x81, 0x37}; /* IPX SNAP ID */
|
unsigned char ipx_snap_id[5] = {0x0, 0x0, 0x0, 0x81, 0x37}; /* IPX SNAP ID */
|
||||||
unsigned char aarp_snap_id[5] = {0x00, 0x00, 0x00, 0x80, 0xF3}; /* Apple Talk AARP SNAP ID */
|
unsigned char aarp_snap_id[5] = {0x00, 0x00, 0x00, 0x80, 0xF3}; /* Apple Talk AARP SNAP ID */
|
||||||
unsigned char ddp_snap_id[5] = {0x08, 0x00, 0x07, 0x80, 0x9B}; /* Apple Talk DDP SNAP ID */
|
unsigned char ddp_snap_id[5] = {0x08, 0x00, 0x07, 0x80, 0x9B}; /* Apple Talk DDP SNAP ID */
|
||||||
|
|
||||||
framePtr += 3; /* eliminate the 802.2 header */
|
framePtr += 3; /* eliminate the 802.2 header */
|
||||||
|
|
||||||
if (!memcmp(ipx_snap_id, framePtr, 5))
|
if (!memcmp(ipx_snap_id, framePtr, 5)) {
|
||||||
{
|
|
||||||
framePtr += 5; /* eliminate the SNAP header */
|
framePtr += 5; /* eliminate the SNAP header */
|
||||||
|
|
||||||
DEBUG_INFO("NAT25: Protocol =IPX (Ethernet SNAP)\n");
|
DEBUG_INFO("NAT25: Protocol =IPX (Ethernet SNAP)\n");
|
||||||
ipx = (struct ipxhdr *)framePtr;
|
ipx = (struct ipxhdr *)framePtr;
|
||||||
}
|
} else if (!memcmp(aarp_snap_id, framePtr, 5)) {
|
||||||
else if (!memcmp(aarp_snap_id, framePtr, 5))
|
|
||||||
{
|
|
||||||
framePtr += 5; /* eliminate the SNAP header */
|
framePtr += 5; /* eliminate the SNAP header */
|
||||||
|
|
||||||
ea = (struct elapaarp *)framePtr;
|
ea = (struct elapaarp *)framePtr;
|
||||||
}
|
} else if (!memcmp(ddp_snap_id, framePtr, 5)) {
|
||||||
else if (!memcmp(ddp_snap_id, framePtr, 5))
|
|
||||||
{
|
|
||||||
framePtr += 5; /* eliminate the SNAP header */
|
framePtr += 5; /* eliminate the SNAP header */
|
||||||
|
|
||||||
ddp = (struct ddpehdr *)framePtr;
|
ddp = (struct ddpehdr *)framePtr;
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
DEBUG_WARN("NAT25: Protocol =Ethernet SNAP %02x%02x%02x%02x%02x\n", framePtr[0],
|
DEBUG_WARN("NAT25: Protocol =Ethernet SNAP %02x%02x%02x%02x%02x\n", framePtr[0],
|
||||||
framePtr[1], framePtr[2], framePtr[3], framePtr[4]);
|
framePtr[1], framePtr[2], framePtr[3], framePtr[4]);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
} else if (*framePtr == ipx_8022_type) {
|
||||||
else if (*framePtr == ipx_8022_type)
|
|
||||||
{
|
|
||||||
framePtr += 3; /* eliminate the 802.2 header */
|
framePtr += 3; /* eliminate the 802.2 header */
|
||||||
|
|
||||||
if (!memcmp(ipx_header, framePtr, 2))
|
if (!memcmp(ipx_header, framePtr, 2)) {
|
||||||
{
|
|
||||||
DEBUG_INFO("NAT25: Protocol =IPX (Ethernet 802.2)\n");
|
DEBUG_INFO("NAT25: Protocol =IPX (Ethernet 802.2)\n");
|
||||||
ipx = (struct ipxhdr *)framePtr;
|
ipx = (struct ipxhdr *)framePtr;
|
||||||
}
|
}
|
||||||
|
@ -846,13 +797,10 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* IPX */
|
/* IPX */
|
||||||
if (ipx != NULL)
|
if (ipx != NULL) {
|
||||||
{
|
switch (method) {
|
||||||
switch (method)
|
|
||||||
{
|
|
||||||
case NAT25_CHECK:
|
case NAT25_CHECK:
|
||||||
if (!memcmp(skb->data+ETH_ALEN, ipx->ipx_source.node, ETH_ALEN))
|
if (!memcmp(skb->data+ETH_ALEN, ipx->ipx_source.node, ETH_ALEN)) {
|
||||||
{
|
|
||||||
DEBUG_INFO("NAT25: Check IPX skb_copy\n");
|
DEBUG_INFO("NAT25: Check IPX skb_copy\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -923,20 +871,15 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
} else if (ea != NULL) {
|
||||||
|
/* AARP */
|
||||||
/* AARP */
|
|
||||||
else if (ea != NULL)
|
|
||||||
{
|
|
||||||
/* Sanity check fields. */
|
/* Sanity check fields. */
|
||||||
if (ea->hw_len != ETH_ALEN || ea->pa_len != AARP_PA_ALEN)
|
if (ea->hw_len != ETH_ALEN || ea->pa_len != AARP_PA_ALEN) {
|
||||||
{
|
|
||||||
DEBUG_WARN("NAT25: Appletalk AARP Sanity check fail!\n");
|
DEBUG_WARN("NAT25: Appletalk AARP Sanity check fail!\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (method)
|
switch (method) {
|
||||||
{
|
|
||||||
case NAT25_CHECK:
|
case NAT25_CHECK:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -979,13 +922,9 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
default:
|
default:
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
} else if (ddp != NULL) {
|
||||||
|
/* DDP */
|
||||||
/* DDP */
|
switch (method) {
|
||||||
else if (ddp != NULL)
|
|
||||||
{
|
|
||||||
switch (method)
|
|
||||||
{
|
|
||||||
case NAT25_CHECK:
|
case NAT25_CHECK:
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -1031,23 +970,19 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
/* Handle PPPoE frame */
|
/* Handle PPPoE frame */
|
||||||
/*---------------------------------------------------*/
|
/*---------------------------------------------------*/
|
||||||
else if ((protocol == ETH_P_PPP_DISC) ||
|
else if ((protocol == ETH_P_PPP_DISC) ||
|
||||||
(protocol == ETH_P_PPP_SES))
|
(protocol == ETH_P_PPP_SES)) {
|
||||||
{
|
|
||||||
struct pppoe_hdr *ph = (struct pppoe_hdr *)(skb->data + ETH_HLEN);
|
struct pppoe_hdr *ph = (struct pppoe_hdr *)(skb->data + ETH_HLEN);
|
||||||
__be16 *pMagic;
|
__be16 *pMagic;
|
||||||
|
|
||||||
switch (method)
|
switch (method) {
|
||||||
{
|
|
||||||
case NAT25_CHECK:
|
case NAT25_CHECK:
|
||||||
if (ph->sid == 0)
|
if (ph->sid == 0)
|
||||||
return 0;
|
return 0;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case NAT25_INSERT:
|
case NAT25_INSERT:
|
||||||
if (ph->sid == 0) /* Discovery phase according to tag */
|
if (ph->sid == 0) { /* Discovery phase according to tag */
|
||||||
{
|
if (ph->code == PADI_CODE || ph->code == PADR_CODE) {
|
||||||
if (ph->code == PADI_CODE || ph->code == PADR_CODE)
|
|
||||||
{
|
|
||||||
if (priv->ethBrExtInfo.addPPPoETag) {
|
if (priv->ethBrExtInfo.addPPPoETag) {
|
||||||
struct pppoe_tag *tag, *pOldTag;
|
struct pppoe_tag *tag, *pOldTag;
|
||||||
unsigned char tag_buf[40];
|
unsigned char tag_buf[40];
|
||||||
|
@ -1102,9 +1037,7 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
return -1;
|
return -1;
|
||||||
}
|
} else { /* session phase */
|
||||||
else /* session phase */
|
|
||||||
{
|
|
||||||
DEBUG_INFO("NAT25: Insert PPPoE, insert session packet to %s\n", skb->dev->name);
|
DEBUG_INFO("NAT25: Insert PPPoE, insert session packet to %s\n", skb->dev->name);
|
||||||
|
|
||||||
__nat25_generate_pppoe_network_addr(networkAddr, skb->data, &(ph->sid));
|
__nat25_generate_pppoe_network_addr(networkAddr, skb->data, &(ph->sid));
|
||||||
|
@ -1121,8 +1054,7 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
case NAT25_LOOKUP:
|
case NAT25_LOOKUP:
|
||||||
if (ph->code == PADO_CODE || ph->code == PADS_CODE)
|
if (ph->code == PADO_CODE || ph->code == PADS_CODE) {
|
||||||
{
|
|
||||||
if (priv->ethBrExtInfo.addPPPoETag) {
|
if (priv->ethBrExtInfo.addPPPoETag) {
|
||||||
struct pppoe_tag *tag;
|
struct pppoe_tag *tag;
|
||||||
unsigned char *ptr;
|
unsigned char *ptr;
|
||||||
|
@ -1199,10 +1131,8 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
/*---------------------------------------------------*/
|
/*---------------------------------------------------*/
|
||||||
/* Handle EAP frame */
|
/* Handle EAP frame */
|
||||||
/*---------------------------------------------------*/
|
/*---------------------------------------------------*/
|
||||||
else if (protocol == 0x888e)
|
else if (protocol == 0x888e) {
|
||||||
{
|
switch (method) {
|
||||||
switch (method)
|
|
||||||
{
|
|
||||||
case NAT25_CHECK:
|
case NAT25_CHECK:
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -1221,10 +1151,8 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
/* Handle C-Media proprietary frame */
|
/* Handle C-Media proprietary frame */
|
||||||
/*---------------------------------------------------*/
|
/*---------------------------------------------------*/
|
||||||
else if ((protocol == 0xe2ae) ||
|
else if ((protocol == 0xe2ae) ||
|
||||||
(protocol == 0xe2af))
|
(protocol == 0xe2af)) {
|
||||||
{
|
switch (method) {
|
||||||
switch (method)
|
|
||||||
{
|
|
||||||
case NAT25_CHECK:
|
case NAT25_CHECK:
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
@ -1243,25 +1171,21 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
/* Handle IPV6 frame */
|
/* Handle IPV6 frame */
|
||||||
/*---------------------------------------------------*/
|
/*---------------------------------------------------*/
|
||||||
#ifdef CL_IPV6_PASS
|
#ifdef CL_IPV6_PASS
|
||||||
else if (protocol == ETH_P_IPV6)
|
else if (protocol == ETH_P_IPV6) {
|
||||||
{
|
|
||||||
struct ipv6hdr *iph = (struct ipv6hdr *)(skb->data + ETH_HLEN);
|
struct ipv6hdr *iph = (struct ipv6hdr *)(skb->data + ETH_HLEN);
|
||||||
|
|
||||||
if (sizeof(*iph) >= (skb->len - ETH_HLEN))
|
if (sizeof(*iph) >= (skb->len - ETH_HLEN)) {
|
||||||
{
|
|
||||||
DEBUG_WARN("NAT25: malformed IPv6 packet !\n");
|
DEBUG_WARN("NAT25: malformed IPv6 packet !\n");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (method)
|
switch (method) {
|
||||||
{
|
|
||||||
case NAT25_CHECK:
|
case NAT25_CHECK:
|
||||||
if (skb->data[0] & 1)
|
if (skb->data[0] & 1)
|
||||||
return 0;
|
return 0;
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
case NAT25_INSERT:
|
case NAT25_INSERT: {
|
||||||
{
|
|
||||||
DEBUG_INFO("NAT25: Insert IP, SA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x,"
|
DEBUG_INFO("NAT25: Insert IP, SA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x,"
|
||||||
" DA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x\n",
|
" DA =%4x:%4x:%4x:%4x:%4x:%4x:%4x:%4x\n",
|
||||||
iph->saddr.s6_addr16[0], iph->saddr.s6_addr16[1], iph->saddr.s6_addr16[2], iph->saddr.s6_addr16[3],
|
iph->saddr.s6_addr16[0], iph->saddr.s6_addr16[1], iph->saddr.s6_addr16[2], iph->saddr.s6_addr16[3],
|
||||||
|
@ -1318,8 +1242,7 @@ int nat25_db_handle(struct adapter *priv, struct sk_buff *skb, int method)
|
||||||
|
|
||||||
int nat25_handle_frame(struct adapter *priv, struct sk_buff *skb)
|
int nat25_handle_frame(struct adapter *priv, struct sk_buff *skb)
|
||||||
{
|
{
|
||||||
if (!(skb->data[0] & 1))
|
if (!(skb->data[0] & 1)) {
|
||||||
{
|
|
||||||
int is_vlan_tag =0, i, retval =0;
|
int is_vlan_tag =0, i, retval =0;
|
||||||
unsigned short vlan_hdr =0;
|
unsigned short vlan_hdr =0;
|
||||||
|
|
||||||
|
@ -1331,8 +1254,7 @@ int nat25_handle_frame(struct adapter *priv, struct sk_buff *skb)
|
||||||
skb_pull(skb, 4);
|
skb_pull(skb, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!priv->ethBrExtInfo.nat25_disable)
|
if (!priv->ethBrExtInfo.nat25_disable) {
|
||||||
{
|
|
||||||
unsigned long irqL;
|
unsigned long irqL;
|
||||||
spin_lock_bh(&priv->br_ext_lock);
|
spin_lock_bh(&priv->br_ext_lock);
|
||||||
/*
|
/*
|
||||||
|
@ -1411,24 +1333,19 @@ void dhcp_flag_bcast(struct adapter *priv, struct sk_buff *skb)
|
||||||
if (!priv->ethBrExtInfo.dhcp_bcst_disable) {
|
if (!priv->ethBrExtInfo.dhcp_bcst_disable) {
|
||||||
__be16 protocol = *((__be16 *)(skb->data + 2 * ETH_ALEN));
|
__be16 protocol = *((__be16 *)(skb->data + 2 * ETH_ALEN));
|
||||||
|
|
||||||
if (protocol == __constant_htons(ETH_P_IP)) /* IP */
|
if (protocol == __constant_htons(ETH_P_IP)) { /* IP */
|
||||||
{
|
|
||||||
struct iphdr* iph = (struct iphdr *)(skb->data + ETH_HLEN);
|
struct iphdr* iph = (struct iphdr *)(skb->data + ETH_HLEN);
|
||||||
|
|
||||||
if (iph->protocol == IPPROTO_UDP) /* UDP */
|
if (iph->protocol == IPPROTO_UDP) { /* UDP */
|
||||||
{
|
|
||||||
struct udphdr *udph = (struct udphdr *)((SIZE_PTR)iph + (iph->ihl << 2));
|
struct udphdr *udph = (struct udphdr *)((SIZE_PTR)iph + (iph->ihl << 2));
|
||||||
|
|
||||||
if ((udph->source == __constant_htons(CLIENT_PORT))
|
if ((udph->source == __constant_htons(CLIENT_PORT)) &&
|
||||||
&& (udph->dest == __constant_htons(SERVER_PORT))) /* DHCP request */
|
(udph->dest == __constant_htons(SERVER_PORT))) { /* DHCP request */
|
||||||
{
|
|
||||||
struct dhcpMessage *dhcph =
|
struct dhcpMessage *dhcph =
|
||||||
(struct dhcpMessage *)((SIZE_PTR)udph + sizeof(struct udphdr));
|
(struct dhcpMessage *)((SIZE_PTR)udph + sizeof(struct udphdr));
|
||||||
|
|
||||||
if (dhcph->cookie == DHCP_MAGIC) /* match magic word */
|
if (dhcph->cookie == DHCP_MAGIC) { /* match magic word */
|
||||||
{
|
if (!(dhcph->flags & BROADCAST_FLAG)) { /* if not broadcast */
|
||||||
if (!(dhcph->flags & BROADCAST_FLAG)) /* if not broadcast */
|
|
||||||
{
|
|
||||||
register int sum = 0;
|
register int sum = 0;
|
||||||
|
|
||||||
DEBUG_INFO("DHCP: change flag of DHCP request to broadcast.\n");
|
DEBUG_INFO("DHCP: change flag of DHCP request to broadcast.\n");
|
||||||
|
@ -1458,8 +1375,7 @@ void *scdb_findEntry(struct adapter *priv, unsigned char *macAddr,
|
||||||
__nat25_generate_ipv4_network_addr(networkAddr, (unsigned int *)ipAddr);
|
__nat25_generate_ipv4_network_addr(networkAddr, (unsigned int *)ipAddr);
|
||||||
hash = __nat25_network_hash(networkAddr);
|
hash = __nat25_network_hash(networkAddr);
|
||||||
db = priv->nethash[hash];
|
db = priv->nethash[hash];
|
||||||
while (db != NULL)
|
while (db != NULL) {
|
||||||
{
|
|
||||||
if (!memcmp(db->networkAddr, networkAddr, MAX_NETWORK_ADDR_LEN)) {
|
if (!memcmp(db->networkAddr, networkAddr, MAX_NETWORK_ADDR_LEN)) {
|
||||||
/* spin_unlock_bh(&priv->br_ext_lock); */
|
/* spin_unlock_bh(&priv->br_ext_lock); */
|
||||||
return (void *)db;
|
return (void *)db;
|
||||||
|
|
188
core/rtw_cmd.c
188
core/rtw_cmd.c
|
@ -185,13 +185,10 @@ struct cmd_obj *_rtw_dequeue_cmd(struct __queue *queue)
|
||||||
unsigned long irqL;
|
unsigned long irqL;
|
||||||
struct cmd_obj *obj;
|
struct cmd_obj *obj;
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
_enter_critical(&queue->lock, &irqL);
|
_enter_critical(&queue->lock, &irqL);
|
||||||
if (rtw_is_list_empty(&(queue->queue)))
|
if (rtw_is_list_empty(&(queue->queue))) {
|
||||||
obj = NULL;
|
obj = NULL;
|
||||||
else
|
} else {
|
||||||
{
|
|
||||||
obj = LIST_CONTAINOR(get_next(&(queue->queue)), struct cmd_obj, list);
|
obj = LIST_CONTAINOR(get_next(&(queue->queue)), struct cmd_obj, list);
|
||||||
rtw_list_delete(&obj->list);
|
rtw_list_delete(&obj->list);
|
||||||
}
|
}
|
||||||
|
@ -237,28 +234,20 @@ static int rtw_cmd_filter(struct cmd_priv *pcmdpriv, struct cmd_obj *cmd_obj)
|
||||||
u8 bAllow = false; /* set to true to allow enqueuing cmd when hw_init_completed is false */
|
u8 bAllow = false; /* set to true to allow enqueuing cmd when hw_init_completed is false */
|
||||||
|
|
||||||
/* To decide allow or not */
|
/* To decide allow or not */
|
||||||
if ( (adapter_to_pwrctl(pcmdpriv->padapter)->bHWPwrPindetect)
|
if ((adapter_to_pwrctl(pcmdpriv->padapter)->bHWPwrPindetect) &&
|
||||||
&&(!pcmdpriv->padapter->registrypriv.usbss_enable)
|
(!pcmdpriv->padapter->registrypriv.usbss_enable)) {
|
||||||
)
|
if (cmd_obj->cmdcode == GEN_CMD_CODE(_Set_Drv_Extra)) {
|
||||||
{
|
|
||||||
if (cmd_obj->cmdcode == GEN_CMD_CODE(_Set_Drv_Extra) )
|
|
||||||
{
|
|
||||||
struct drvextra_cmd_parm *pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)cmd_obj->parmbuf;
|
struct drvextra_cmd_parm *pdrvextra_cmd_parm = (struct drvextra_cmd_parm *)cmd_obj->parmbuf;
|
||||||
if (pdrvextra_cmd_parm->ec_id == POWER_SAVING_CTRL_WK_CID)
|
if (pdrvextra_cmd_parm->ec_id == POWER_SAVING_CTRL_WK_CID)
|
||||||
{
|
|
||||||
/* DBG_871X("==>enqueue POWER_SAVING_CTRL_WK_CID\n"); */
|
|
||||||
bAllow = true;
|
bAllow = true;
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmd_obj->cmdcode == GEN_CMD_CODE(_SetChannelPlan))
|
if (cmd_obj->cmdcode == GEN_CMD_CODE(_SetChannelPlan))
|
||||||
bAllow = true;
|
bAllow = true;
|
||||||
|
|
||||||
if ( (pcmdpriv->padapter->hw_init_completed ==false && bAllow == false)
|
if ((pcmdpriv->padapter->hw_init_completed ==false && bAllow == false) ||
|
||||||
|| pcmdpriv->cmdthd_running == false /* com_thread not running */
|
pcmdpriv->cmdthd_running == false) { /* com_thread not running */
|
||||||
)
|
|
||||||
{
|
|
||||||
/* DBG_871X("%s:%s: drop cmdcode:%u, hw_init_completed:%u, cmdthd_running:%u\n", caller_func, __FUNCTION__, */
|
/* DBG_871X("%s:%s: drop cmdcode:%u, hw_init_completed:%u, cmdthd_running:%u\n", caller_func, __FUNCTION__, */
|
||||||
/* cmd_obj->cmdcode, */
|
/* cmd_obj->cmdcode, */
|
||||||
/* pcmdpriv->padapter->hw_init_completed, */
|
/* pcmdpriv->padapter->hw_init_completed, */
|
||||||
|
@ -322,18 +311,11 @@ void rtw_free_cmd_obj(struct cmd_obj *pcmd)
|
||||||
;
|
;
|
||||||
|
|
||||||
if ((pcmd->cmdcode!=_JoinBss_CMD_) &&(pcmd->cmdcode!= _CreateBss_CMD_))
|
if ((pcmd->cmdcode!=_JoinBss_CMD_) &&(pcmd->cmdcode!= _CreateBss_CMD_))
|
||||||
{
|
|
||||||
/* free parmbuf in cmd_obj */
|
|
||||||
rtw_mfree((unsigned char*)pcmd->parmbuf, pcmd->cmdsz);
|
rtw_mfree((unsigned char*)pcmd->parmbuf, pcmd->cmdsz);
|
||||||
}
|
|
||||||
|
|
||||||
if (pcmd->rsp!= NULL)
|
if (pcmd->rsp!= NULL) {
|
||||||
{
|
|
||||||
if (pcmd->rspsz!= 0)
|
if (pcmd->rspsz!= 0)
|
||||||
{
|
|
||||||
/* free rsp in cmd_obj */
|
|
||||||
rtw_mfree((unsigned char*)pcmd->rsp, pcmd->rspsz);
|
rtw_mfree((unsigned char*)pcmd->rsp, pcmd->rspsz);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* free cmd_obj */
|
/* free cmd_obj */
|
||||||
|
@ -345,8 +327,7 @@ void rtw_free_cmd_obj(struct cmd_obj *pcmd)
|
||||||
void rtw_stop_cmd_thread(struct adapter *adapter)
|
void rtw_stop_cmd_thread(struct adapter *adapter)
|
||||||
{
|
{
|
||||||
if (adapter->cmdThread && adapter->cmdpriv.cmdthd_running == true
|
if (adapter->cmdThread && adapter->cmdpriv.cmdthd_running == true
|
||||||
&& adapter->cmdpriv.stop_req == 0)
|
&& adapter->cmdpriv.stop_req == 0) {
|
||||||
{
|
|
||||||
adapter->cmdpriv.stop_req = 1;
|
adapter->cmdpriv.stop_req = 1;
|
||||||
_rtw_up_sema(&adapter->cmdpriv.cmd_queue_sema);
|
_rtw_up_sema(&adapter->cmdpriv.cmd_queue_sema);
|
||||||
_rtw_down_sema(&adapter->cmdpriv.terminate_cmdthread_sema);
|
_rtw_down_sema(&adapter->cmdpriv.terminate_cmdthread_sema);
|
||||||
|
@ -376,8 +357,7 @@ int rtw_cmd_thread(void * context)
|
||||||
|
|
||||||
RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("start r871x rtw_cmd_thread !!!!\n"));
|
RT_TRACE(_module_rtl871x_cmd_c_, _drv_info_, ("start r871x rtw_cmd_thread !!!!\n"));
|
||||||
|
|
||||||
while (1)
|
while (1) {
|
||||||
{
|
|
||||||
if (_rtw_down_sema(&pcmdpriv->cmd_queue_sema) == _FAIL) {
|
if (_rtw_down_sema(&pcmdpriv->cmd_queue_sema) == _FAIL) {
|
||||||
DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" _rtw_down_sema(&pcmdpriv->cmd_queue_sema) return _FAIL, break\n", FUNC_ADPT_ARG(padapter));
|
DBG_871X_LEVEL(_drv_always_, FUNC_ADPT_FMT" _rtw_down_sema(&pcmdpriv->cmd_queue_sema) return _FAIL, break\n", FUNC_ADPT_ARG(padapter));
|
||||||
break;
|
break;
|
||||||
|
@ -999,8 +979,7 @@ u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network* pnetwork)
|
||||||
t_len = sizeof(struct wlan_bssid_ex);
|
t_len = sizeof(struct wlan_bssid_ex);
|
||||||
|
|
||||||
/* for hidden ap to set fw_state here */
|
/* for hidden ap to set fw_state here */
|
||||||
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) != true)
|
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE|WIFI_ADHOC_STATE) != true) {
|
||||||
{
|
|
||||||
switch (ndis_network_mode)
|
switch (ndis_network_mode)
|
||||||
{
|
{
|
||||||
case Ndis802_11IBSS:
|
case Ndis802_11IBSS:
|
||||||
|
@ -1020,8 +999,7 @@ u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network* pnetwork)
|
||||||
}
|
}
|
||||||
|
|
||||||
psecnetwork =(struct wlan_bssid_ex *)&psecuritypriv->sec_bss;
|
psecnetwork =(struct wlan_bssid_ex *)&psecuritypriv->sec_bss;
|
||||||
if (psecnetwork == NULL)
|
if (psecnetwork == NULL) {
|
||||||
{
|
|
||||||
if (pcmd != NULL)
|
if (pcmd != NULL)
|
||||||
rtw_mfree((unsigned char *)pcmd, sizeof(struct cmd_obj));
|
rtw_mfree((unsigned char *)pcmd, sizeof(struct cmd_obj));
|
||||||
|
|
||||||
|
@ -1052,45 +1030,35 @@ u8 rtw_joinbss_cmd(struct adapter *padapter, struct wlan_network* pnetwork)
|
||||||
/* the driver just has the bssid information for PMKIDList searching. */
|
/* the driver just has the bssid information for PMKIDList searching. */
|
||||||
|
|
||||||
if ( pmlmepriv->assoc_by_bssid == false )
|
if ( pmlmepriv->assoc_by_bssid == false )
|
||||||
{
|
|
||||||
memcpy( &pmlmepriv->assoc_bssid[ 0 ], &pnetwork->network.MacAddress[ 0 ], ETH_ALEN );
|
memcpy( &pmlmepriv->assoc_bssid[ 0 ], &pnetwork->network.MacAddress[ 0 ], ETH_ALEN );
|
||||||
}
|
|
||||||
|
|
||||||
psecnetwork->IELength = rtw_restruct_sec_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0], pnetwork->network.IELength);
|
psecnetwork->IELength = rtw_restruct_sec_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0], pnetwork->network.IELength);
|
||||||
|
|
||||||
pqospriv->qos_option = 0;
|
pqospriv->qos_option = 0;
|
||||||
|
|
||||||
if (pregistrypriv->wmm_enable)
|
if (pregistrypriv->wmm_enable) {
|
||||||
{
|
|
||||||
u32 tmp_len;
|
u32 tmp_len;
|
||||||
|
|
||||||
tmp_len = rtw_restruct_wmm_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0], pnetwork->network.IELength, psecnetwork->IELength);
|
tmp_len = rtw_restruct_wmm_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0], pnetwork->network.IELength, psecnetwork->IELength);
|
||||||
|
|
||||||
if (psecnetwork->IELength != tmp_len)
|
if (psecnetwork->IELength != tmp_len) {
|
||||||
{
|
|
||||||
psecnetwork->IELength = tmp_len;
|
psecnetwork->IELength = tmp_len;
|
||||||
pqospriv->qos_option = 1; /* There is WMM IE in this corresp. beacon */
|
pqospriv->qos_option = 1; /* There is WMM IE in this corresp. beacon */
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
pqospriv->qos_option = 0;/* There is no WMM IE in this corresp. beacon */
|
pqospriv->qos_option = 0;/* There is no WMM IE in this corresp. beacon */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
phtpriv->ht_option = false;
|
phtpriv->ht_option = false;
|
||||||
if (pregistrypriv->ht_enable)
|
if (pregistrypriv->ht_enable) {
|
||||||
{
|
|
||||||
/* Added by Albert 2010/06/23 */
|
/* Added by Albert 2010/06/23 */
|
||||||
/* For the WEP mode, we will use the bg mode to do the connection to avoid some IOT issue. */
|
/* For the WEP mode, we will use the bg mode to do the connection to avoid some IOT issue. */
|
||||||
/* Especially for Realtek 8192u SoftAP. */
|
/* Especially for Realtek 8192u SoftAP. */
|
||||||
if ( ( padapter->securitypriv.dot11PrivacyAlgrthm != _WEP40_ ) &&
|
if ( ( padapter->securitypriv.dot11PrivacyAlgrthm != _WEP40_ ) &&
|
||||||
( padapter->securitypriv.dot11PrivacyAlgrthm != _WEP104_ ) &&
|
( padapter->securitypriv.dot11PrivacyAlgrthm != _WEP104_ ) &&
|
||||||
( padapter->securitypriv.dot11PrivacyAlgrthm != _TKIP_ ))
|
( padapter->securitypriv.dot11PrivacyAlgrthm != _TKIP_ ))
|
||||||
{
|
|
||||||
/* rtw_restructure_ht_ie */
|
|
||||||
rtw_restructure_ht_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0],
|
rtw_restructure_ht_ie(padapter, &pnetwork->network.IEs[0], &psecnetwork->IEs[0],
|
||||||
pnetwork->network.IELength, &psecnetwork->IELength);
|
pnetwork->network.IELength, &psecnetwork->IELength);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->network.IEs, pnetwork->network.IELength);
|
pmlmeinfo->assoc_AP_vendor = check_assoc_AP(pnetwork->network.IEs, pnetwork->network.IELength);
|
||||||
|
|
||||||
|
@ -1238,8 +1206,7 @@ u8 rtw_setstakey_cmd(struct adapter *padapter, u8 *psta, u8 unicast_key, bool en
|
||||||
/* jeff: set this becasue at least sw key is ready */
|
/* jeff: set this becasue at least sw key is ready */
|
||||||
padapter->securitypriv.busetkipkey =true;
|
padapter->securitypriv.busetkipkey =true;
|
||||||
|
|
||||||
if (enqueue)
|
if (enqueue) {
|
||||||
{
|
|
||||||
ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
|
ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
|
||||||
if ( ph2c == NULL) {
|
if ( ph2c == NULL) {
|
||||||
rtw_mfree((u8 *) psetstakey_para, sizeof(struct set_stakey_parm));
|
rtw_mfree((u8 *) psetstakey_para, sizeof(struct set_stakey_parm));
|
||||||
|
@ -1282,14 +1249,9 @@ u8 rtw_clearstakey_cmd(struct adapter *padapter, u8 *psta, u8 entry, u8 enqueue)
|
||||||
struct sta_info* sta = (struct sta_info* )psta;
|
struct sta_info* sta = (struct sta_info* )psta;
|
||||||
u8 res =_SUCCESS;
|
u8 res =_SUCCESS;
|
||||||
|
|
||||||
;
|
if (!enqueue) {
|
||||||
|
|
||||||
if (!enqueue)
|
|
||||||
{
|
|
||||||
clear_cam_entry(padapter, entry);
|
clear_cam_entry(padapter, entry);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
|
ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
|
||||||
if ( ph2c == NULL) {
|
if ( ph2c == NULL) {
|
||||||
res = _FAIL;
|
res = _FAIL;
|
||||||
|
@ -1685,8 +1647,7 @@ u8 rtw_set_chplan_cmd(struct adapter*padapter, u8 chplan, u8 enqueue)
|
||||||
}
|
}
|
||||||
setChannelPlan_param->channel_plan =chplan;
|
setChannelPlan_param->channel_plan =chplan;
|
||||||
|
|
||||||
if (enqueue)
|
if (enqueue) {
|
||||||
{
|
|
||||||
/* need enqueue, prepare cmd_obj and enqueue */
|
/* need enqueue, prepare cmd_obj and enqueue */
|
||||||
pcmdobj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
|
pcmdobj = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
|
||||||
if (pcmdobj == NULL) {
|
if (pcmdobj == NULL) {
|
||||||
|
@ -1697,9 +1658,7 @@ u8 rtw_set_chplan_cmd(struct adapter*padapter, u8 chplan, u8 enqueue)
|
||||||
|
|
||||||
init_h2fwcmd_w_parm_no_rsp(pcmdobj, setChannelPlan_param, GEN_CMD_CODE(_SetChannelPlan));
|
init_h2fwcmd_w_parm_no_rsp(pcmdobj, setChannelPlan_param, GEN_CMD_CODE(_SetChannelPlan));
|
||||||
res = rtw_enqueue_cmd(pcmdpriv, pcmdobj);
|
res = rtw_enqueue_cmd(pcmdpriv, pcmdobj);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
/* no need to enqueue, do the cmd hdl directly and free cmd parameter */
|
/* no need to enqueue, do the cmd hdl directly and free cmd parameter */
|
||||||
if ( H2C_SUCCESS !=set_chplan_hdl(padapter, (unsigned char *)setChannelPlan_param) )
|
if ( H2C_SUCCESS !=set_chplan_hdl(padapter, (unsigned char *)setChannelPlan_param) )
|
||||||
res = _FAIL;
|
res = _FAIL;
|
||||||
|
@ -1866,31 +1825,21 @@ static void traffic_status_watchdog(struct adapter *padapter)
|
||||||
if (BT_1Ant(padapter) == false)
|
if (BT_1Ant(padapter) == false)
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
/* check traffic for powersaving. */
|
/* check traffic for powersaving. */
|
||||||
if ( ((pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod + pmlmepriv->LinkDetectInfo.NumTxOkInPeriod) > 8 ) ||
|
if (((pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod +
|
||||||
(pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod > 2) )
|
pmlmepriv->LinkDetectInfo.NumTxOkInPeriod) > 8 ) ||
|
||||||
{
|
(pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod > 2))
|
||||||
/* DBG_871X("Tx = %d, Rx = %d\n", pmlmepriv->LinkDetectInfo.NumTxOkInPeriod, pmlmepriv->LinkDetectInfo.NumRxUnicastOkInPeriod); */
|
|
||||||
bEnterPS = false;
|
bEnterPS = false;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
bEnterPS = true;
|
bEnterPS = true;
|
||||||
}
|
|
||||||
|
|
||||||
/* LeisurePS only work in infra mode. */
|
/* LeisurePS only work in infra mode. */
|
||||||
if (bEnterPS)
|
if (bEnterPS)
|
||||||
{
|
LPS_Enter(padapter);
|
||||||
LPS_Enter(padapter);
|
else
|
||||||
|
LPS_Leave(padapter);
|
||||||
}
|
}
|
||||||
else
|
} else {
|
||||||
{
|
|
||||||
LPS_Leave(padapter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
LPS_Leave(padapter);
|
LPS_Leave(padapter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1915,9 +1864,7 @@ void dynamic_chk_wk_hdl(struct adapter *padapter, u8 *pbuf, int sz)
|
||||||
|
|
||||||
#ifdef CONFIG_AP_MODE
|
#ifdef CONFIG_AP_MODE
|
||||||
if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true)
|
if (check_fwstate(pmlmepriv, WIFI_AP_STATE) == true)
|
||||||
{
|
|
||||||
expire_timeout_chk(padapter);
|
expire_timeout_chk(padapter);
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
rtw_hal_sreset_xmit_status_check(padapter);
|
rtw_hal_sreset_xmit_status_check(padapter);
|
||||||
|
@ -1941,16 +1888,11 @@ static void lps_ctrl_wk_hdl(struct adapter *padapter, u8 lps_ctrl_type)
|
||||||
struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
|
struct mlme_priv *pmlmepriv = &(padapter->mlmepriv);
|
||||||
u8 mstatus;
|
u8 mstatus;
|
||||||
|
|
||||||
;
|
if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE)) ||
|
||||||
|
(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE)))
|
||||||
if ((check_fwstate(pmlmepriv, WIFI_ADHOC_MASTER_STATE) == true)
|
|
||||||
|| (check_fwstate(pmlmepriv, WIFI_ADHOC_STATE) == true))
|
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
switch (lps_ctrl_type)
|
switch (lps_ctrl_type) {
|
||||||
{
|
|
||||||
case LPS_CTRL_SCAN:
|
case LPS_CTRL_SCAN:
|
||||||
/* DBG_871X("LPS_CTRL_SCAN\n"); */
|
/* DBG_871X("LPS_CTRL_SCAN\n"); */
|
||||||
#ifdef CONFIG_BT_COEXIST
|
#ifdef CONFIG_BT_COEXIST
|
||||||
|
@ -2047,9 +1989,7 @@ u8 rtw_lps_ctrl_wk_cmd(struct adapter*padapter, u8 lps_ctrl_type, u8 enqueue)
|
||||||
init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
|
init_h2fwcmd_w_parm_no_rsp(ph2c, pdrvextra_cmd_parm, GEN_CMD_CODE(_Set_Drv_Extra));
|
||||||
|
|
||||||
res = rtw_enqueue_cmd(pcmdpriv, ph2c);
|
res = rtw_enqueue_cmd(pcmdpriv, ph2c);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
lps_ctrl_wk_hdl(padapter, lps_ctrl_type);
|
lps_ctrl_wk_hdl(padapter, lps_ctrl_type);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2121,8 +2061,7 @@ u8 rtw_antenna_select_cmd(struct adapter*padapter, u8 antenna, u8 enqueue)
|
||||||
rtw_hal_get_def_var(padapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(bSupportAntDiv));
|
rtw_hal_get_def_var(padapter, HAL_DEF_IS_SUPPORT_ANT_DIV, &(bSupportAntDiv));
|
||||||
if (false == bSupportAntDiv ) return res;
|
if (false == bSupportAntDiv ) return res;
|
||||||
|
|
||||||
if (true == enqueue)
|
if (true == enqueue) {
|
||||||
{
|
|
||||||
ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
|
ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
|
||||||
if (ph2c == NULL) {
|
if (ph2c == NULL) {
|
||||||
res = _FAIL;
|
res = _FAIL;
|
||||||
|
@ -2179,12 +2118,8 @@ u8 p2p_protocol_wk_cmd(struct adapter*padapter, int intCmdType )
|
||||||
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
|
struct cmd_priv *pcmdpriv = &padapter->cmdpriv;
|
||||||
u8 res = _SUCCESS;
|
u8 res = _SUCCESS;
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
|
if (rtw_p2p_chk_state(pwdinfo, P2P_STATE_NONE))
|
||||||
{
|
|
||||||
return res;
|
return res;
|
||||||
}
|
|
||||||
|
|
||||||
ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
|
ph2c = (struct cmd_obj*)rtw_zmalloc(sizeof(struct cmd_obj));
|
||||||
if (ph2c == NULL) {
|
if (ph2c == NULL) {
|
||||||
|
@ -2263,8 +2198,7 @@ static void rtw_chk_hi_queue_hdl(struct adapter *padapter)
|
||||||
if (!psta_bmc)
|
if (!psta_bmc)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (psta_bmc->sleepq_len == 0)
|
if (psta_bmc->sleepq_len == 0) {
|
||||||
{
|
|
||||||
u8 val = 0;
|
u8 val = 0;
|
||||||
|
|
||||||
/* while ((rtw_read32(padapter, 0x414)&0x00ffff00)!=0) */
|
/* while ((rtw_read32(padapter, 0x414)&0x00ffff00)!=0) */
|
||||||
|
@ -2446,8 +2380,7 @@ u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf)
|
||||||
|
|
||||||
pdrvextra_cmd = (struct drvextra_cmd_parm*)pbuf;
|
pdrvextra_cmd = (struct drvextra_cmd_parm*)pbuf;
|
||||||
|
|
||||||
switch (pdrvextra_cmd->ec_id)
|
switch (pdrvextra_cmd->ec_id) {
|
||||||
{
|
|
||||||
case DYNAMIC_CHK_WK_CID:
|
case DYNAMIC_CHK_WK_CID:
|
||||||
dynamic_chk_wk_hdl(padapter, pdrvextra_cmd->pbuf, pdrvextra_cmd->type_size);
|
dynamic_chk_wk_hdl(padapter, pdrvextra_cmd->pbuf, pdrvextra_cmd->type_size);
|
||||||
break;
|
break;
|
||||||
|
@ -2495,9 +2428,7 @@ u8 rtw_drvextra_cmd_hdl(struct adapter *padapter, unsigned char *pbuf)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pdrvextra_cmd->pbuf && pdrvextra_cmd->type_size>0)
|
if (pdrvextra_cmd->pbuf && pdrvextra_cmd->type_size>0)
|
||||||
{
|
|
||||||
rtw_mfree(pdrvextra_cmd->pbuf, pdrvextra_cmd->type_size);
|
rtw_mfree(pdrvextra_cmd->pbuf, pdrvextra_cmd->type_size);
|
||||||
}
|
|
||||||
|
|
||||||
return H2C_SUCCESS;
|
return H2C_SUCCESS;
|
||||||
}
|
}
|
||||||
|
@ -2508,8 +2439,7 @@ void rtw_survey_cmd_callback(struct adapter* padapter , struct cmd_obj *pcmd)
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
if (pcmd->res == H2C_DROPPED)
|
if (pcmd->res == H2C_DROPPED) {
|
||||||
{
|
|
||||||
/* TODO: cancel timer and do timeout handler directly... */
|
/* TODO: cancel timer and do timeout handler directly... */
|
||||||
/* need to make timeout handlerOS independent */
|
/* need to make timeout handlerOS independent */
|
||||||
_set_timer(&pmlmepriv->scan_to_timer, 1);
|
_set_timer(&pmlmepriv->scan_to_timer, 1);
|
||||||
|
@ -2531,8 +2461,7 @@ void rtw_disassoc_cmd_callback(struct adapter* padapter, struct cmd_obj *pcmd)
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
if (pcmd->res != H2C_SUCCESS)
|
if (pcmd->res != H2C_SUCCESS) {
|
||||||
{
|
|
||||||
spin_lock_bh(&pmlmepriv->lock);
|
spin_lock_bh(&pmlmepriv->lock);
|
||||||
set_fwstate(pmlmepriv, _FW_LINKED);
|
set_fwstate(pmlmepriv, _FW_LINKED);
|
||||||
spin_unlock_bh(&pmlmepriv->lock);
|
spin_unlock_bh(&pmlmepriv->lock);
|
||||||
|
@ -2559,14 +2488,11 @@ void rtw_joinbss_cmd_callback(struct adapter* padapter, struct cmd_obj *pcmd)
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
if (pcmd->res == H2C_DROPPED)
|
if (pcmd->res == H2C_DROPPED) {
|
||||||
{
|
|
||||||
/* TODO: cancel timer and do timeout handler directly... */
|
/* TODO: cancel timer and do timeout handler directly... */
|
||||||
/* need to make timeout handlerOS independent */
|
/* need to make timeout handlerOS independent */
|
||||||
_set_timer(&pmlmepriv->assoc_timer, 1);
|
_set_timer(&pmlmepriv->assoc_timer, 1);
|
||||||
}
|
} else if (pcmd->res != H2C_SUCCESS) {
|
||||||
else if (pcmd->res != H2C_SUCCESS)
|
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("********Error:rtw_select_and_join_from_scanned_queue Wait Sema Fail ************\n"));
|
RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("********Error:rtw_select_and_join_from_scanned_queue Wait Sema Fail ************\n"));
|
||||||
_set_timer(&pmlmepriv->assoc_timer, 1);
|
_set_timer(&pmlmepriv->assoc_timer, 1);
|
||||||
}
|
}
|
||||||
|
@ -2585,8 +2511,7 @@ void rtw_createbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd)
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
if ((pcmd->res != H2C_SUCCESS))
|
if ((pcmd->res != H2C_SUCCESS)) {
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("\n ********Error: rtw_createbss_cmd_callback Fail ************\n\n."));
|
RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("\n ********Error: rtw_createbss_cmd_callback Fail ************\n\n."));
|
||||||
_set_timer(&pmlmepriv->assoc_timer, 1 );
|
_set_timer(&pmlmepriv->assoc_timer, 1 );
|
||||||
}
|
}
|
||||||
|
@ -2614,23 +2539,18 @@ void rtw_createbss_cmd_callback(struct adapter *padapter, struct cmd_obj *pcmd)
|
||||||
|
|
||||||
spin_lock_bh(&pmlmepriv->lock);
|
spin_lock_bh(&pmlmepriv->lock);
|
||||||
|
|
||||||
if (check_fwstate(pmlmepriv, WIFI_AP_STATE) )
|
if (check_fwstate(pmlmepriv, WIFI_AP_STATE) ) {
|
||||||
{
|
|
||||||
psta = rtw_get_stainfo(&padapter->stapriv, pnetwork->MacAddress);
|
psta = rtw_get_stainfo(&padapter->stapriv, pnetwork->MacAddress);
|
||||||
if (!psta)
|
if (!psta) {
|
||||||
{
|
psta = rtw_alloc_stainfo(&padapter->stapriv, pnetwork->MacAddress);
|
||||||
psta = rtw_alloc_stainfo(&padapter->stapriv, pnetwork->MacAddress);
|
if (psta == NULL) {
|
||||||
if (psta == NULL)
|
RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("\nCan't alloc sta_info when createbss_cmd_callback\n"));
|
||||||
{
|
goto createbss_cmd_fail ;
|
||||||
RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("\nCan't alloc sta_info when createbss_cmd_callback\n"));
|
}
|
||||||
goto createbss_cmd_fail ;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
rtw_indicate_connect( padapter);
|
rtw_indicate_connect( padapter);
|
||||||
}
|
} else {
|
||||||
else
|
|
||||||
{
|
|
||||||
unsigned long irqL;
|
unsigned long irqL;
|
||||||
|
|
||||||
pwlan = _rtw_alloc_network(pmlmepriv);
|
pwlan = _rtw_alloc_network(pmlmepriv);
|
||||||
|
@ -2686,8 +2606,7 @@ void rtw_setstaKey_cmdrsp_callback(struct adapter* padapter , struct cmd_obj *p
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
if (psta == NULL)
|
if (psta == NULL) {
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("\nERROR: rtw_setstaKey_cmdrsp_callback => can't get sta_info\n\n"));
|
RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("\nERROR: rtw_setstaKey_cmdrsp_callback => can't get sta_info\n\n"));
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
@ -2707,8 +2626,7 @@ void rtw_setassocsta_cmdrsp_callback(struct adapter* padapter, struct cmd_obj *
|
||||||
|
|
||||||
;
|
;
|
||||||
|
|
||||||
if (psta == NULL)
|
if (psta == NULL) {
|
||||||
{
|
|
||||||
RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("\nERROR: setassocsta_cmdrsp_callbac => can't get sta_info\n\n"));
|
RT_TRACE(_module_rtl871x_cmd_c_, _drv_err_, ("\nERROR: setassocsta_cmdrsp_callbac => can't get sta_info\n\n"));
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue