|
@@ -3231,267 +3231,6 @@ rtl819x_ifcheck_resetornot(struct net_device *dev)
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-static void CamRestoreAllEntry(struct net_device *dev)
|
|
|
-{
|
|
|
- u8 EntryId = 0;
|
|
|
- struct r8192_priv *priv = ieee80211_priv(dev);
|
|
|
- const u8* MacAddr = priv->ieee80211->current_network.bssid;
|
|
|
-
|
|
|
- static const u8 CAM_CONST_ADDR[4][6] = {
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x00},
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x01},
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x02},
|
|
|
- {0x00, 0x00, 0x00, 0x00, 0x00, 0x03}};
|
|
|
- static const u8 CAM_CONST_BROAD[] =
|
|
|
- {0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
|
|
|
-
|
|
|
- RT_TRACE(COMP_SEC, "CamRestoreAllEntry: \n");
|
|
|
-
|
|
|
-
|
|
|
- if ((priv->ieee80211->pairwise_key_type == KEY_TYPE_WEP40)||
|
|
|
- (priv->ieee80211->pairwise_key_type == KEY_TYPE_WEP104))
|
|
|
- {
|
|
|
-
|
|
|
- for(EntryId=0; EntryId<4; EntryId++)
|
|
|
- {
|
|
|
- {
|
|
|
- MacAddr = CAM_CONST_ADDR[EntryId];
|
|
|
- setKey(dev,
|
|
|
- EntryId ,
|
|
|
- EntryId,
|
|
|
- priv->ieee80211->pairwise_key_type,
|
|
|
- MacAddr,
|
|
|
- 0,
|
|
|
- NULL);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- else if(priv->ieee80211->pairwise_key_type == KEY_TYPE_TKIP)
|
|
|
- {
|
|
|
-
|
|
|
- {
|
|
|
- if(priv->ieee80211->iw_mode == IW_MODE_ADHOC)
|
|
|
- setKey(dev,
|
|
|
- 4,
|
|
|
- 0,
|
|
|
- priv->ieee80211->pairwise_key_type,
|
|
|
- (u8*)dev->dev_addr,
|
|
|
- 0,
|
|
|
- NULL);
|
|
|
- else
|
|
|
- setKey(dev,
|
|
|
- 4,
|
|
|
- 0,
|
|
|
- priv->ieee80211->pairwise_key_type,
|
|
|
- MacAddr,
|
|
|
- 0,
|
|
|
- NULL);
|
|
|
- }
|
|
|
- }
|
|
|
- else if(priv->ieee80211->pairwise_key_type == KEY_TYPE_CCMP)
|
|
|
- {
|
|
|
-
|
|
|
- {
|
|
|
- if(priv->ieee80211->iw_mode == IW_MODE_ADHOC)
|
|
|
- setKey(dev,
|
|
|
- 4,
|
|
|
- 0,
|
|
|
- priv->ieee80211->pairwise_key_type,
|
|
|
- (u8*)dev->dev_addr,
|
|
|
- 0,
|
|
|
- NULL);
|
|
|
- else
|
|
|
- setKey(dev,
|
|
|
- 4,
|
|
|
- 0,
|
|
|
- priv->ieee80211->pairwise_key_type,
|
|
|
- MacAddr,
|
|
|
- 0,
|
|
|
- NULL);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- if(priv->ieee80211->group_key_type == KEY_TYPE_TKIP)
|
|
|
- {
|
|
|
- MacAddr = CAM_CONST_BROAD;
|
|
|
- for(EntryId=1 ; EntryId<4 ; EntryId++)
|
|
|
- {
|
|
|
- {
|
|
|
- setKey(dev,
|
|
|
- EntryId,
|
|
|
- EntryId,
|
|
|
- priv->ieee80211->group_key_type,
|
|
|
- MacAddr,
|
|
|
- 0,
|
|
|
- NULL);
|
|
|
- }
|
|
|
- }
|
|
|
- if(priv->ieee80211->iw_mode == IW_MODE_ADHOC)
|
|
|
- setKey(dev,
|
|
|
- 0,
|
|
|
- 0,
|
|
|
- priv->ieee80211->group_key_type,
|
|
|
- CAM_CONST_ADDR[0],
|
|
|
- 0,
|
|
|
- NULL);
|
|
|
- }
|
|
|
- else if(priv->ieee80211->group_key_type == KEY_TYPE_CCMP)
|
|
|
- {
|
|
|
- MacAddr = CAM_CONST_BROAD;
|
|
|
- for(EntryId=1; EntryId<4 ; EntryId++)
|
|
|
- {
|
|
|
- {
|
|
|
- setKey(dev,
|
|
|
- EntryId ,
|
|
|
- EntryId,
|
|
|
- priv->ieee80211->group_key_type,
|
|
|
- MacAddr,
|
|
|
- 0,
|
|
|
- NULL);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if(priv->ieee80211->iw_mode == IW_MODE_ADHOC)
|
|
|
- setKey(dev,
|
|
|
- 0 ,
|
|
|
- 0,
|
|
|
- priv->ieee80211->group_key_type,
|
|
|
- CAM_CONST_ADDR[0],
|
|
|
- 0,
|
|
|
- NULL);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-/*
|
|
|
- * This function is used to fix Tx/Rx stop bug temporarily.
|
|
|
- * This function will do "system reset" to NIC when Tx or Rx is stuck.
|
|
|
- * The method checking Tx/Rx stuck of this function is supported by FW,
|
|
|
- * which reports Tx and Rx counter to register 0x128 and 0x130.
|
|
|
- */
|
|
|
-static void rtl819x_ifsilentreset(struct net_device *dev)
|
|
|
-{
|
|
|
- struct r8192_priv *priv = ieee80211_priv(dev);
|
|
|
- u8 reset_times = 0;
|
|
|
- int reset_status = 0;
|
|
|
- struct ieee80211_device *ieee = priv->ieee80211;
|
|
|
-
|
|
|
-
|
|
|
- return;
|
|
|
-
|
|
|
- // 2007.07.20. If we need to check CCK stop, please uncomment this line.
|
|
|
- //bStuck = Adapter->HalFunc.CheckHWStopHandler(Adapter);
|
|
|
-
|
|
|
- if(priv->ResetProgress==RESET_TYPE_NORESET)
|
|
|
- {
|
|
|
-RESET_START:
|
|
|
-#ifdef ENABLE_LPS
|
|
|
- //LZM for PS-Poll AID issue. 090429
|
|
|
- if(priv->ieee80211->state == IEEE80211_LINKED)
|
|
|
- LeisurePSLeave(dev);
|
|
|
-#endif
|
|
|
-
|
|
|
- RT_TRACE(COMP_RESET,"=========>Reset progress!! \n");
|
|
|
-
|
|
|
- // Set the variable for reset.
|
|
|
- priv->ResetProgress = RESET_TYPE_SILENT;
|
|
|
-// rtl8192_close(dev);
|
|
|
-
|
|
|
- down(&priv->wx_sem);
|
|
|
- if(priv->up == 0)
|
|
|
- {
|
|
|
- RT_TRACE(COMP_ERR,"%s():the driver is not up! return\n",__FUNCTION__);
|
|
|
- up(&priv->wx_sem);
|
|
|
- return ;
|
|
|
- }
|
|
|
- priv->up = 0;
|
|
|
- RT_TRACE(COMP_RESET,"%s():======>start to down the driver\n",__FUNCTION__);
|
|
|
- if(!netif_queue_stopped(dev))
|
|
|
- netif_stop_queue(dev);
|
|
|
-
|
|
|
- dm_backup_dynamic_mechanism_state(dev);
|
|
|
-
|
|
|
- rtl8192_irq_disable(dev);
|
|
|
- rtl8192_cancel_deferred_work(priv);
|
|
|
- deinit_hal_dm(dev);
|
|
|
- del_timer_sync(&priv->watch_dog_timer);
|
|
|
- ieee->sync_scan_hurryup = 1;
|
|
|
- if(ieee->state == IEEE80211_LINKED)
|
|
|
- {
|
|
|
- down(&ieee->wx_sem);
|
|
|
- printk("ieee->state is IEEE80211_LINKED\n");
|
|
|
- ieee80211_stop_send_beacons(priv->ieee80211);
|
|
|
- del_timer_sync(&ieee->associate_timer);
|
|
|
- cancel_delayed_work(&ieee->associate_retry_wq);
|
|
|
- ieee80211_stop_scan(ieee);
|
|
|
- up(&ieee->wx_sem);
|
|
|
- }
|
|
|
- else{
|
|
|
- printk("ieee->state is NOT LINKED\n");
|
|
|
- ieee80211_softmac_stop_protocol(priv->ieee80211,true);
|
|
|
- }
|
|
|
- rtl8192_halt_adapter(dev, true);
|
|
|
- up(&priv->wx_sem);
|
|
|
- RT_TRACE(COMP_RESET,"%s():<==========down process is finished\n",__FUNCTION__);
|
|
|
- RT_TRACE(COMP_RESET,"%s():===========>start to up the driver\n",__FUNCTION__);
|
|
|
- reset_status = _rtl8192_up(dev);
|
|
|
-
|
|
|
- RT_TRACE(COMP_RESET,"%s():<===========up process is finished\n",__FUNCTION__);
|
|
|
- if(reset_status == -1)
|
|
|
- {
|
|
|
- if(reset_times < 3)
|
|
|
- {
|
|
|
- reset_times++;
|
|
|
- goto RESET_START;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- RT_TRACE(COMP_ERR," ERR!!! %s(): Reset Failed!!\n",__FUNCTION__);
|
|
|
- }
|
|
|
- }
|
|
|
- ieee->is_silent_reset = 1;
|
|
|
- EnableHWSecurityConfig8192(dev);
|
|
|
- if(ieee->state == IEEE80211_LINKED && ieee->iw_mode == IW_MODE_INFRA)
|
|
|
- {
|
|
|
- ieee->set_chan(ieee->dev, ieee->current_network.channel);
|
|
|
-
|
|
|
- queue_work(ieee->wq, &ieee->associate_complete_wq);
|
|
|
-
|
|
|
- }
|
|
|
- else if(ieee->state == IEEE80211_LINKED && ieee->iw_mode == IW_MODE_ADHOC)
|
|
|
- {
|
|
|
- ieee->set_chan(ieee->dev, ieee->current_network.channel);
|
|
|
- ieee->link_change(ieee->dev);
|
|
|
-
|
|
|
- // notify_wx_assoc_event(ieee);
|
|
|
-
|
|
|
- ieee80211_start_send_beacons(ieee);
|
|
|
-
|
|
|
- if (ieee->data_hard_resume)
|
|
|
- ieee->data_hard_resume(ieee->dev);
|
|
|
- netif_carrier_on(ieee->dev);
|
|
|
- }
|
|
|
-
|
|
|
- CamRestoreAllEntry(dev);
|
|
|
-
|
|
|
- // Restore the previous setting for all dynamic mechanism
|
|
|
- dm_restore_dynamic_mechanism_state(dev);
|
|
|
-
|
|
|
- priv->ResetProgress = RESET_TYPE_NORESET;
|
|
|
- priv->reset_count++;
|
|
|
-
|
|
|
- priv->bForcedSilentReset =false;
|
|
|
- priv->bResetInProgress = false;
|
|
|
-
|
|
|
- // For test --> force write UFWP.
|
|
|
- write_nic_byte(priv, UFWP, 1);
|
|
|
- RT_TRACE(COMP_RESET, "Reset finished!! ====>[%d]\n", priv->reset_count);
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
#ifdef ENABLE_IPS
|
|
|
void InactivePsWorkItemCallback(struct net_device *dev)
|
|
|
{
|
|
@@ -3850,7 +3589,6 @@ static void rtl819x_watchdog_wqcallback(struct work_struct *work)
|
|
|
if( ((priv->force_reset) || (!priv->bDisableNormalResetCheck && ResetType==RESET_TYPE_SILENT))) // This is control by OID set in Pomelo
|
|
|
{
|
|
|
priv->watchdog_last_time = 1;
|
|
|
- rtl819x_ifsilentreset(dev);
|
|
|
}
|
|
|
else
|
|
|
priv->watchdog_last_time = 0;
|