#endif
}
-static void ResumeTxBeacon(_adapter *padapter)
-{
- HAL_DATA_TYPE* pHalData = GET_HAL_DATA(padapter);
-
- // 2010.03.01. Marked by tynli. No need to call workitem beacause we record the value
- // which should be read from register to a global variable.
-
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) | BIT6);
- pHalData->RegFwHwTxQCtrl |= BIT6;
- rtw_write8(padapter, REG_TBTT_PROHIBIT+1, 0xff);
- pHalData->RegReg542 |= BIT0;
- rtw_write8(padapter, REG_TBTT_PROHIBIT+2, pHalData->RegReg542);
-}
void UpdateInterruptMask8188EU(PADAPTER padapter,u8 bHIMR0 ,u32 AddMSR, u32 RemoveMSR)
{
HAL_DATA_TYPE *pHalData;
}
-static void StopTxBeacon(_adapter *padapter)
-{
- HAL_DATA_TYPE* pHalData = GET_HAL_DATA(padapter);
-
- // 2010.03.01. Marked by tynli. No need to call workitem beacause we record the value
- // which should be read from register to a global variable.
-
- rtw_write8(padapter, REG_FWHW_TXQ_CTRL+2, (pHalData->RegFwHwTxQCtrl) & (~BIT6));
- pHalData->RegFwHwTxQCtrl &= (~BIT6);
- rtw_write8(padapter, REG_TBTT_PROHIBIT+1, 0x64);
- pHalData->RegReg542 &= ~(BIT0);
- rtw_write8(padapter, REG_TBTT_PROHIBIT+2, pHalData->RegReg542);
-
- //todo: CheckFwRsvdPageContent(Adapter); // 2010.06.23. Added by tynli.
-
-}
-
-
-static void hw_var_set_opmode(PADAPTER Adapter, u8 variable, u8* val)
-{
- u8 val8;
- u8 mode = *((u8 *)val);
- //HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
-
-#ifdef CONFIG_CONCURRENT_MODE
- if(Adapter->iface_type == IFACE_PORT1)
- {
- // disable Port1 TSF update
- rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(4));
-
- // set net_type
- val8 = rtw_read8(Adapter, MSR)&0x03;
- val8 |= (mode<<2);
- rtw_write8(Adapter, MSR, val8);
-
- DBG_871X("%s()-%d mode = %d\n", __FUNCTION__, __LINE__, mode);
-
- if((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_))
- {
- if(!check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE))
- {
- #ifdef CONFIG_INTERRUPT_BASED_TXBCN
-
- #ifdef CONFIG_INTERRUPT_BASED_TXBCN_EARLY_INT
- rtw_write8(Adapter, REG_DRVERLYINT, 0x05);//restore early int time to 5ms
- UpdateInterruptMask8188EU(Adapter,_TRUE, 0, IMR_BCNDMAINT0_88E);
- #endif // CONFIG_INTERRUPT_BASED_TXBCN_EARLY_INT
-
- #ifdef CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR
- UpdateInterruptMask8188EU(Adapter,_TRUE ,0, (IMR_TBDER_88E|IMR_TBDOK_88E));
- #endif// CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR
-
- #endif //CONFIG_INTERRUPT_BASED_TXBCN
-
-
- StopTxBeacon(Adapter);
- }
-
- rtw_write8(Adapter,REG_BCN_CTRL_1, 0x11);//disable atim wnd and disable beacon function
- //rtw_write8(Adapter,REG_BCN_CTRL_1, 0x18);
- }
- else if((mode == _HW_STATE_ADHOC_) /*|| (mode == _HW_STATE_AP_)*/)
- {
- ResumeTxBeacon(Adapter);
- rtw_write8(Adapter,REG_BCN_CTRL_1, 0x1a);
- //BIT4 - If set 0, hw will clr bcnq when tx becon ok/fail or port 1
- rtw_write8(Adapter, REG_MBID_NUM, rtw_read8(Adapter, REG_MBID_NUM)|BIT(3)|BIT(4));
- }
- else if(mode == _HW_STATE_AP_)
- {
-#ifdef CONFIG_INTERRUPT_BASED_TXBCN
- #ifdef CONFIG_INTERRUPT_BASED_TXBCN_EARLY_INT
- UpdateInterruptMask8188EU(Adapter,_TRUE ,IMR_BCNDMAINT0_88E, 0);
- #endif//CONFIG_INTERRUPT_BASED_TXBCN_EARLY_INT
-
- #ifdef CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR
- UpdateInterruptMask8188EU(Adapter,_TRUE ,(IMR_TBDER_88E|IMR_TBDOK_88E), 0);
- #endif//CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR
-
-#endif //CONFIG_INTERRUPT_BASED_TXBCN
-
- ResumeTxBeacon(Adapter);
-
- rtw_write8(Adapter, REG_BCN_CTRL_1, 0x12);
-
- //Set RCR
- //rtw_write32(padapter, REG_RCR, 0x70002a8e);//CBSSID_DATA must set to 0
- //rtw_write32(Adapter, REG_RCR, 0x7000228e);//CBSSID_DATA must set to 0
- rtw_write32(Adapter, REG_RCR, 0x7000208e);//CBSSID_DATA must set to 0,reject ICV_ERR packet
- //enable to rx data frame
- rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF);
- //enable to rx ps-poll
- rtw_write16(Adapter, REG_RXFLTMAP1, 0x0400);
-
- //Beacon Control related register for first time
- rtw_write8(Adapter, REG_BCNDMATIM, 0x02); // 2ms
-
- //rtw_write8(Adapter, REG_BCN_MAX_ERR, 0xFF);
- rtw_write8(Adapter, REG_ATIMWND_1, 0x0a); // 10ms for port1
- rtw_write16(Adapter, REG_BCNTCFG, 0x00);
- rtw_write16(Adapter, REG_TBTT_PROHIBIT, 0xff04);
- rtw_write16(Adapter, REG_TSFTR_SYN_OFFSET, 0x7fff);// +32767 (~32ms)
-
- //reset TSF2
- rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(1));
-
-
- //BIT4 - If set 0, hw will clr bcnq when tx becon ok/fail or port 1
- rtw_write8(Adapter, REG_MBID_NUM, rtw_read8(Adapter, REG_MBID_NUM)|BIT(3)|BIT(4));
- //enable BCN1 Function for if2
- //don't enable update TSF1 for if2 (due to TSF update when beacon/probe rsp are received)
- rtw_write8(Adapter, REG_BCN_CTRL_1, (DIS_TSF_UDT0_NORMAL_CHIP|EN_BCN_FUNCTION | EN_TXBCN_RPT|BIT(1)));
-
-#ifdef CONFIG_CONCURRENT_MODE
- if(check_buddy_fwstate(Adapter, WIFI_FW_NULL_STATE))
- rtw_write8(Adapter, REG_BCN_CTRL,
- rtw_read8(Adapter, REG_BCN_CTRL) & ~EN_BCN_FUNCTION);
-#endif
- //BCN1 TSF will sync to BCN0 TSF with offset(0x518) if if1_sta linked
- //rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(5));
- //rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(3));
-
- //dis BCN0 ATIM WND if if1 is station
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(0));
-
-#ifdef CONFIG_TSF_RESET_OFFLOAD
- // Reset TSF for STA+AP concurrent mode
- if ( check_buddy_fwstate(Adapter, (WIFI_STATION_STATE|WIFI_ASOC_STATE)) ) {
- if (reset_tsf(Adapter, IFACE_PORT1) == _FALSE)
- DBG_871X("ERROR! %s()-%d: Reset port1 TSF fail\n",
- __FUNCTION__, __LINE__);
- }
-#endif // CONFIG_TSF_RESET_OFFLOAD
- }
- }
- else
-#endif //CONFIG_CONCURRENT_MODE
- {
- // disable Port0 TSF update
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
-
- // set net_type
- val8 = rtw_read8(Adapter, MSR)&0x0c;
- val8 |= mode;
- rtw_write8(Adapter, MSR, val8);
-
- DBG_871X("%s()-%d mode = %d\n", __FUNCTION__, __LINE__, mode);
-
- if((mode == _HW_STATE_STATION_) || (mode == _HW_STATE_NOLINK_))
- {
-#ifdef CONFIG_CONCURRENT_MODE
- if(!check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE))
-#endif //CONFIG_CONCURRENT_MODE
- {
- #ifdef CONFIG_INTERRUPT_BASED_TXBCN
- #ifdef CONFIG_INTERRUPT_BASED_TXBCN_EARLY_INT
- rtw_write8(Adapter, REG_DRVERLYINT, 0x05);//restore early int time to 5ms
- UpdateInterruptMask8188EU(Adapter,_TRUE, 0, IMR_BCNDMAINT0_88E);
- #endif//CONFIG_INTERRUPT_BASED_TXBCN_EARLY_INT
-
- #ifdef CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR
- UpdateInterruptMask8188EU(Adapter,_TRUE ,0, (IMR_TBDER_88E|IMR_TBDOK_88E));
- #endif //CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR
-
- #endif //CONFIG_INTERRUPT_BASED_TXBCN
- StopTxBeacon(Adapter);
- }
-
- rtw_write8(Adapter,REG_BCN_CTRL, 0x19);//disable atim wnd
- //rtw_write8(Adapter,REG_BCN_CTRL, 0x18);
- }
- else if((mode == _HW_STATE_ADHOC_) /*|| (mode == _HW_STATE_AP_)*/)
- {
- ResumeTxBeacon(Adapter);
- rtw_write8(Adapter,REG_BCN_CTRL, 0x1a);
- //BIT3 - If set 0, hw will clr bcnq when tx becon ok/fail or port 0
- rtw_write8(Adapter, REG_MBID_NUM, rtw_read8(Adapter, REG_MBID_NUM)|BIT(3)|BIT(4));
- }
- else if(mode == _HW_STATE_AP_)
- {
-
-#ifdef CONFIG_INTERRUPT_BASED_TXBCN
- #ifdef CONFIG_INTERRUPT_BASED_TXBCN_EARLY_INT
- UpdateInterruptMask8188EU(Adapter,_TRUE ,IMR_BCNDMAINT0_88E, 0);
- #endif//CONFIG_INTERRUPT_BASED_TXBCN_EARLY_INT
-
- #ifdef CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR
- UpdateInterruptMask8188EU(Adapter,_TRUE ,(IMR_TBDER_88E|IMR_TBDOK_88E), 0);
- #endif//CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR
-
-#endif //CONFIG_INTERRUPT_BASED_TXBCN
-
-
- ResumeTxBeacon(Adapter);
-
- rtw_write8(Adapter, REG_BCN_CTRL, 0x12);
-
- //Set RCR
- //rtw_write32(padapter, REG_RCR, 0x70002a8e);//CBSSID_DATA must set to 0
- //rtw_write32(Adapter, REG_RCR, 0x7000228e);//CBSSID_DATA must set to 0
- rtw_write32(Adapter, REG_RCR, 0x7000208e);//CBSSID_DATA must set to 0,reject ICV_ERR packet
- //enable to rx data frame
- rtw_write16(Adapter, REG_RXFLTMAP2, 0xFFFF);
- //enable to rx ps-poll
- rtw_write16(Adapter, REG_RXFLTMAP1, 0x0400);
-
- //Beacon Control related register for first time
- rtw_write8(Adapter, REG_BCNDMATIM, 0x02); // 2ms
-
- //rtw_write8(Adapter, REG_BCN_MAX_ERR, 0xFF);
- rtw_write8(Adapter, REG_ATIMWND, 0x0a); // 10ms
- rtw_write16(Adapter, REG_BCNTCFG, 0x00);
- rtw_write16(Adapter, REG_TBTT_PROHIBIT, 0xff04);
- rtw_write16(Adapter, REG_TSFTR_SYN_OFFSET, 0x7fff);// +32767 (~32ms)
-
- //reset TSF
- rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(0));
-
- //BIT3 - If set 0, hw will clr bcnq when tx becon ok/fail or port 0
- rtw_write8(Adapter, REG_MBID_NUM, rtw_read8(Adapter, REG_MBID_NUM)|BIT(3)|BIT(4));
-
- //enable BCN0 Function for if1
- //don't enable update TSF0 for if1 (due to TSF update when beacon/probe rsp are received)
- #if defined(CONFIG_INTERRUPT_BASED_TXBCN_BCN_OK_ERR)
- rtw_write8(Adapter, REG_BCN_CTRL, (DIS_TSF_UDT0_NORMAL_CHIP|EN_BCN_FUNCTION | EN_TXBCN_RPT|BIT(1)));
- #else
- rtw_write8(Adapter, REG_BCN_CTRL, (DIS_TSF_UDT0_NORMAL_CHIP|EN_BCN_FUNCTION |BIT(1)));
- #endif
-
-#ifdef CONFIG_CONCURRENT_MODE
- if(check_buddy_fwstate(Adapter, WIFI_FW_NULL_STATE))
- rtw_write8(Adapter, REG_BCN_CTRL_1,
- rtw_read8(Adapter, REG_BCN_CTRL_1) & ~EN_BCN_FUNCTION);
-#endif
-
- //dis BCN1 ATIM WND if if2 is station
- rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(0));
-#ifdef CONFIG_TSF_RESET_OFFLOAD
- // Reset TSF for STA+AP concurrent mode
- if ( check_buddy_fwstate(Adapter, (WIFI_STATION_STATE|WIFI_ASOC_STATE)) ) {
- if (reset_tsf(Adapter, IFACE_PORT0) == _FALSE)
- DBG_871X("ERROR! %s()-%d: Reset port0 TSF fail\n",
- __FUNCTION__, __LINE__);
- }
-#endif // CONFIG_TSF_RESET_OFFLOAD
- }
- }
-
-}
-
static void hw_var_set_macaddr(PADAPTER Adapter, u8 variable, u8* val)
{
u8 idx = 0;
}
-static void hw_var_set_correct_tsf(PADAPTER Adapter, u8 variable, u8* val)
-{
-#ifdef CONFIG_CONCURRENT_MODE
- u64 tsf;
- struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- PADAPTER pbuddy_adapter = Adapter->pbuddy_adapter;
-
- //tsf = pmlmeext->TSFValue - ((u32)pmlmeext->TSFValue % (pmlmeinfo->bcn_interval*1024)) -1024; //us
- tsf = pmlmeext->TSFValue - rtw_modular64(pmlmeext->TSFValue, (pmlmeinfo->bcn_interval*1024)) -1024; //us
-
- if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
- {
- //pHalData->RegTxPause |= STOP_BCNQ;BIT(6)
- //rtw_write8(Adapter, REG_TXPAUSE, (rtw_read8(Adapter, REG_TXPAUSE)|BIT(6)));
- StopTxBeacon(Adapter);
- }
-
- if(Adapter->iface_type == IFACE_PORT1)
- {
- //disable related TSF function
- rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(3)));
-
- rtw_write32(Adapter, REG_TSFTR1, tsf);
- rtw_write32(Adapter, REG_TSFTR1+4, tsf>>32);
-
-
- //enable related TSF function
- rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(3));
-
- // Update buddy port's TSF if it is SoftAP for beacon TX issue!
- if ( (pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE
- && check_buddy_fwstate(Adapter, WIFI_AP_STATE)
- ) {
- //disable related TSF function
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(3)));
-
- rtw_write32(Adapter, REG_TSFTR, tsf);
- rtw_write32(Adapter, REG_TSFTR+4, tsf>>32);
-
- //enable related TSF function
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(3));
-#ifdef CONFIG_TSF_RESET_OFFLOAD
- // Update buddy port's TSF(TBTT) if it is SoftAP for beacon TX issue!
- if (reset_tsf(Adapter, IFACE_PORT0) == _FALSE)
- DBG_871X("ERROR! %s()-%d: Reset port0 TSF fail\n",
- __FUNCTION__, __LINE__);
-
-#endif // CONFIG_TSF_RESET_OFFLOAD
- }
-
-
- }
- else
- {
- //disable related TSF function
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(3)));
-
- rtw_write32(Adapter, REG_TSFTR, tsf);
- rtw_write32(Adapter, REG_TSFTR+4, tsf>>32);
-
- //enable related TSF function
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(3));
-
- // Update buddy port's TSF if it is SoftAP for beacon TX issue!
- if ( (pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE
- && check_buddy_fwstate(Adapter, WIFI_AP_STATE)
- ) {
- //disable related TSF function
- rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(3)));
-
- rtw_write32(Adapter, REG_TSFTR1, tsf);
- rtw_write32(Adapter, REG_TSFTR1+4, tsf>>32);
-
- //enable related TSF function
- rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(3));
-#ifdef CONFIG_TSF_RESET_OFFLOAD
- // Update buddy port's TSF if it is SoftAP for beacon TX issue!
- if (reset_tsf(Adapter, IFACE_PORT1) == _FALSE)
- DBG_871X("ERROR! %s()-%d: Reset port1 TSF fail\n",
- __FUNCTION__, __LINE__);
-#endif // CONFIG_TSF_RESET_OFFLOAD
- }
-
- }
-
-
- if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
- {
- //pHalData->RegTxPause &= (~STOP_BCNQ);
- //rtw_write8(Adapter, REG_TXPAUSE, (rtw_read8(Adapter, REG_TXPAUSE)&(~BIT(6))));
- ResumeTxBeacon(Adapter);
- }
-#endif
-}
-
static void hw_var_set_mlme_disconnect(PADAPTER Adapter, u8 variable, u8* val)
{
#ifdef CONFIG_CONCURRENT_MODE
#endif
}
-static void hw_var_set_mlme_sitesurvey(PADAPTER Adapter, u8 variable, u8* val)
-{
-#ifdef CONFIG_CONCURRENT_MODE
- struct mlme_priv *pmlmepriv=&(Adapter->mlmepriv);
- struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
- u32 value_rcr, rcr_clear_bit, value_rxfltmap2;
-
-#ifdef CONFIG_FIND_BEST_CHANNEL
- rcr_clear_bit = (RCR_CBSSID_BCN | RCR_CBSSID_DATA);
- // Recieve all data frames
- value_rxfltmap2 = 0xFFFF;
-#else /* CONFIG_FIND_BEST_CHANNEL */
- rcr_clear_bit = RCR_CBSSID_BCN;
- //config RCR to receive different BSSID & not to receive data frame
- value_rxfltmap2 = 0;
-#endif /* CONFIG_FIND_BEST_CHANNEL */
-
- if( (check_fwstate(pmlmepriv, WIFI_AP_STATE) == _TRUE)
- #ifdef CONFIG_CONCURRENT_MODE
- || (check_buddy_fwstate(Adapter, WIFI_AP_STATE) == _TRUE)
- #endif
- ){
- rcr_clear_bit = RCR_CBSSID_BCN;
- }
-#ifdef CONFIG_TDLS
- // TDLS will clear RCR_CBSSID_DATA bit for connection.
- else if (Adapter->tdlsinfo.link_established == _TRUE)
- {
- rcr_clear_bit = RCR_CBSSID_BCN;
- }
-#endif // CONFIG_TDLS
-
- value_rcr = rtw_read32(Adapter, REG_RCR);
- if(*((u8 *)val))//under sitesurvey
- {
- value_rcr &= ~(rcr_clear_bit);
- rtw_write32(Adapter, REG_RCR, value_rcr);
- rtw_write16(Adapter, REG_RXFLTMAP2, value_rxfltmap2);
-
- //disable update TSF
- if((pmlmeinfo->state&0x03) == WIFI_FW_STATION_STATE)
- {
- if(Adapter->iface_type == IFACE_PORT1)
- {
- rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)|BIT(4));
- }
- else
- {
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
- }
- }
-
- if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
- check_buddy_fwstate(Adapter, _FW_LINKED))
- {
- StopTxBeacon(Adapter);
- }
- }
- else//sitesurvey done
- {
- //enable to rx data frame
- //write32(Adapter, REG_RCR, read32(padapter, REG_RCR)|RCR_ADF);
- if(check_fwstate(pmlmepriv, (_FW_LINKED|WIFI_AP_STATE))
- || check_buddy_fwstate(Adapter, (_FW_LINKED|WIFI_AP_STATE)))
- rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
-
- //enable update TSF
- if(Adapter->iface_type == IFACE_PORT1)
- rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(4)));
- else
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
-
- value_rcr |= rcr_clear_bit;
- rtw_write32(Adapter, REG_RCR, value_rcr);
-
- if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
- check_buddy_fwstate(Adapter, _FW_LINKED))
- {
- ResumeTxBeacon(Adapter);
- }
- }
-#endif
-}
-
-static void hw_var_set_mlme_join(PADAPTER Adapter, u8 variable, u8* val)
-{
-#ifdef CONFIG_CONCURRENT_MODE
- u8 RetryLimit = 0x30;
- u8 type = *((u8 *)val);
- HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
- struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
-
- if(type == 0) // prepare to join
- {
- if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
- check_buddy_fwstate(Adapter, _FW_LINKED))
- {
- StopTxBeacon(Adapter);
- }
-
- //enable to rx data frame.Accept all data frame
- //rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF);
- rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
-
- if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE))
- rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_BCN);
- else
- rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
-
- if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
- {
- RetryLimit = (pEEPROM->CustomerID == RT_CID_CCX) ? 7 : 48;
- }
- else // Ad-hoc Mode
- {
- RetryLimit = 0x7;
- }
- }
- else if(type == 1) //joinbss_event call back when join res < 0
- {
- if(check_buddy_mlmeinfo_state(Adapter, _HW_STATE_NOLINK_))
- rtw_write16(Adapter, REG_RXFLTMAP2,0x00);
-
- if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
- check_buddy_fwstate(Adapter, _FW_LINKED))
- {
- ResumeTxBeacon(Adapter);
-
- //reset TSF 1/2 after ResumeTxBeacon
- rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(1)|BIT(0));
-
- }
- }
- else if(type == 2) //sta add event call back
- {
-
- //enable update TSF
- if(Adapter->iface_type == IFACE_PORT1)
- rtw_write8(Adapter, REG_BCN_CTRL_1, rtw_read8(Adapter, REG_BCN_CTRL_1)&(~BIT(4)));
- else
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
-
-
- if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE))
- {
- //fixed beacon issue for 8191su...........
- rtw_write8(Adapter,0x542 ,0x02);
- RetryLimit = 0x7;
- }
-
-
- if(check_buddy_mlmeinfo_state(Adapter, WIFI_FW_AP_STATE) &&
- check_buddy_fwstate(Adapter, _FW_LINKED))
- {
- ResumeTxBeacon(Adapter);
-
- //reset TSF 1/2 after ResumeTxBeacon
- rtw_write8(Adapter, REG_DUAL_TSF_RST, BIT(1)|BIT(0));
- }
-
- }
-
- rtw_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT);
-
-#endif
-}
-
void SetHwReg8188EU(PADAPTER Adapter, u8 variable, u8* val)
{
HAL_DATA_TYPE *pHalData = GET_HAL_DATA(Adapter);
rtw_write8(Adapter, MSR, val8);
}
break;
- case HW_VAR_SET_OPMODE:
- hw_var_set_opmode(Adapter, variable, val);
- break;
case HW_VAR_MAC_ADDR:
hw_var_set_macaddr(Adapter, variable, val);
break;
case HW_VAR_BCN_FUNC:
hw_var_set_bcn_func(Adapter, variable, val);
break;
- case HW_VAR_CORRECT_TSF:
-#ifdef CONFIG_CONCURRENT_MODE
- hw_var_set_correct_tsf(Adapter, variable, val);
-#else
- {
- u64 tsf;
- struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- //tsf = pmlmeext->TSFValue - ((u32)pmlmeext->TSFValue % (pmlmeinfo->bcn_interval*1024)) -1024; //us
- tsf = pmlmeext->TSFValue - rtw_modular64(pmlmeext->TSFValue, (pmlmeinfo->bcn_interval*1024)) -1024; //us
-
- if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
- {
- //pHalData->RegTxPause |= STOP_BCNQ;BIT(6)
- //rtw_write8(Adapter, REG_TXPAUSE, (rtw_read8(Adapter, REG_TXPAUSE)|BIT(6)));
- StopTxBeacon(Adapter);
- }
-
- //disable related TSF function
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(3)));
-
- rtw_write32(Adapter, REG_TSFTR, tsf);
- rtw_write32(Adapter, REG_TSFTR+4, tsf>>32);
-
- //enable related TSF function
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(3));
-
-
- if(((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) || ((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE))
- {
- //pHalData->RegTxPause &= (~STOP_BCNQ);
- //rtw_write8(Adapter, REG_TXPAUSE, (rtw_read8(Adapter, REG_TXPAUSE)&(~BIT(6))));
- ResumeTxBeacon(Adapter);
- }
- }
-#endif
- break;
case HW_VAR_CHECK_BSSID:
if(*((u8 *)val))
{
//disable update TSF
rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
}
-#endif
- break;
- case HW_VAR_MLME_SITESURVEY:
-#ifdef CONFIG_CONCURRENT_MODE
- hw_var_set_mlme_sitesurvey(Adapter, variable, val);
-#else
- {
- u32 value_rcr, rcr_clear_bit, value_rxfltmap2;
-#ifdef CONFIG_FIND_BEST_CHANNEL
-
- rcr_clear_bit = (RCR_CBSSID_BCN | RCR_CBSSID_DATA);
-
- // Recieve all data frames
- value_rxfltmap2 = 0xFFFF;
-
-#else /* CONFIG_FIND_BEST_CHANNEL */
-
- rcr_clear_bit = RCR_CBSSID_BCN;
-
- //config RCR to receive different BSSID & not to receive data frame
- value_rxfltmap2 = 0;
-
-#endif /* CONFIG_FIND_BEST_CHANNEL */
-
- if (check_fwstate(&Adapter->mlmepriv, WIFI_AP_STATE) == _TRUE) {
- rcr_clear_bit = RCR_CBSSID_BCN;
- }
- #ifdef CONFIG_TDLS
- // TDLS will clear RCR_CBSSID_DATA bit for connection.
- else if (Adapter->tdlsinfo.link_established == _TRUE) {
- rcr_clear_bit = RCR_CBSSID_BCN;
- }
- #endif // CONFIG_TDLS
-
- value_rcr = rtw_read32(Adapter, REG_RCR);
- if(*((u8 *)val))//under sitesurvey
- {
- //config RCR to receive different BSSID & not to receive data frame
- value_rcr &= ~(rcr_clear_bit);
- rtw_write32(Adapter, REG_RCR, value_rcr);
- rtw_write16(Adapter, REG_RXFLTMAP2, value_rxfltmap2);
-
- //disable update TSF
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)|BIT(4));
- }
- else//sitesurvey done
- {
- struct mlme_ext_priv *pmlmeext = &Adapter->mlmeextpriv;
- struct mlme_ext_info *pmlmeinfo = &(pmlmeext->mlmext_info);
-
- if ((is_client_associated_to_ap(Adapter) == _TRUE) ||
- ((pmlmeinfo->state&0x03) == WIFI_FW_ADHOC_STATE) )
- {
- //enable to rx data frame
- //rtw_write32(Adapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF);
- rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
-
- //enable update TSF
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
- }
- else if((pmlmeinfo->state&0x03) == WIFI_FW_AP_STATE)
- {
- //rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_ADF);
- rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
-
- //enable update TSF
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
- }
-
- value_rcr |= rcr_clear_bit;
- if(((pmlmeinfo->state&0x03) != WIFI_FW_AP_STATE) && (Adapter->in_cta_test)) {
- u32 v = rtw_read32(Adapter, REG_RCR);
- v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN );//| RCR_ADF
- rtw_write32(Adapter, REG_RCR, v);
- } else {
- rtw_write32(Adapter, REG_RCR, value_rcr);
- }
- }
- }
-#endif
- break;
- case HW_VAR_MLME_JOIN:
-#ifdef CONFIG_CONCURRENT_MODE
- hw_var_set_mlme_join(Adapter, variable, val);
-#else
- {
- u8 RetryLimit = 0x30;
- u8 type = *((u8 *)val);
- struct mlme_priv *pmlmepriv = &Adapter->mlmepriv;
- EEPROM_EFUSE_PRIV *pEEPROM = GET_EEPROM_EFUSE_PRIV(Adapter);
-
- if(type == 0) // prepare to join
- {
- //enable to rx data frame.Accept all data frame
- //rtw_write32(padapter, REG_RCR, rtw_read32(padapter, REG_RCR)|RCR_ADF);
- rtw_write16(Adapter, REG_RXFLTMAP2,0xFFFF);
-
- if(Adapter->in_cta_test)
- {
- u32 v = rtw_read32(Adapter, REG_RCR);
- v &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN );//| RCR_ADF
- rtw_write32(Adapter, REG_RCR, v);
- }
- else
- {
- rtw_write32(Adapter, REG_RCR, rtw_read32(Adapter, REG_RCR)|RCR_CBSSID_DATA|RCR_CBSSID_BCN);
- }
-
- if(check_fwstate(pmlmepriv, WIFI_STATION_STATE) == _TRUE)
- {
- RetryLimit = (pEEPROM->CustomerID == RT_CID_CCX) ? 7 : 48;
- }
- else // Ad-hoc Mode
- {
- RetryLimit = 0x7;
- }
- }
- else if(type == 1) //joinbss_event call back when join res < 0
- {
- rtw_write16(Adapter, REG_RXFLTMAP2,0x00);
- }
- else if(type == 2) //sta add event call back
- {
- //enable update TSF
- rtw_write8(Adapter, REG_BCN_CTRL, rtw_read8(Adapter, REG_BCN_CTRL)&(~BIT(4)));
-
- if(check_fwstate(pmlmepriv, WIFI_ADHOC_STATE|WIFI_ADHOC_MASTER_STATE))
- {
- RetryLimit = 0x7;
- }
- }
-
- rtw_write16(Adapter, REG_RL, RetryLimit << RETRY_LIMIT_SHORT_SHIFT | RetryLimit << RETRY_LIMIT_LONG_SHIFT);
- }
#endif
break;
case HW_VAR_ON_RCR_AM: