diff options
Diffstat (limited to 'drivers/net/wireless/rtlwifi/rtl8192cu/hw.c')
| -rw-r--r-- | drivers/net/wireless/rtlwifi/rtl8192cu/hw.c | 89 | 
1 files changed, 35 insertions, 54 deletions
| diff --git a/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c b/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c index b1ccff474c7..c08d0f4c5f3 100644 --- a/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c +++ b/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c @@ -1377,74 +1377,57 @@ void rtl92cu_card_disable(struct ieee80211_hw *hw)  void rtl92cu_set_check_bssid(struct ieee80211_hw *hw, bool check_bssid)  { -	/* dummy routine needed for callback from rtl_op_configure_filter() */ -} - -/*========================================================================== */ - -static void _rtl92cu_set_check_bssid(struct ieee80211_hw *hw, -			      enum nl80211_iftype type) -{  	struct rtl_priv *rtlpriv = rtl_priv(hw); -	u32 reg_rcr = rtl_read_dword(rtlpriv, REG_RCR);  	struct rtl_hal *rtlhal = rtl_hal(rtlpriv); -	struct rtl_phy *rtlphy = &(rtlpriv->phy); -	u8 filterout_non_associated_bssid = false; +	u32 reg_rcr = rtl_read_dword(rtlpriv, REG_RCR); -	switch (type) { -	case NL80211_IFTYPE_ADHOC: -	case NL80211_IFTYPE_STATION: -		filterout_non_associated_bssid = true; -		break; -	case NL80211_IFTYPE_UNSPECIFIED: -	case NL80211_IFTYPE_AP: -	default: -		break; -	} -	if (filterout_non_associated_bssid) { +	if (rtlpriv->psc.rfpwr_state != ERFON) +		return; + +	if (check_bssid) { +		u8 tmp;  		if (IS_NORMAL_CHIP(rtlhal->version)) { -			switch (rtlphy->current_io_type) { -			case IO_CMD_RESUME_DM_BY_SCAN: -				reg_rcr |= (RCR_CBSSID_DATA | RCR_CBSSID_BCN); -				rtlpriv->cfg->ops->set_hw_reg(hw, -						 HW_VAR_RCR, (u8 *)(®_rcr)); -				/* enable update TSF */ -				_rtl92cu_set_bcn_ctrl_reg(hw, 0, BIT(4)); -				break; -			case IO_CMD_PAUSE_DM_BY_SCAN: -				reg_rcr &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN); -				rtlpriv->cfg->ops->set_hw_reg(hw, -						 HW_VAR_RCR, (u8 *)(®_rcr)); -				/* disable update TSF */ -				_rtl92cu_set_bcn_ctrl_reg(hw, BIT(4), 0); -				break; -			} +			reg_rcr |= (RCR_CBSSID_DATA | RCR_CBSSID_BCN); +			tmp = BIT(4);  		} else { -			reg_rcr |= (RCR_CBSSID); -			rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR, -						      (u8 *)(®_rcr)); -			_rtl92cu_set_bcn_ctrl_reg(hw, 0, (BIT(4)|BIT(5))); +			reg_rcr |= RCR_CBSSID; +			tmp = BIT(4) | BIT(5);  		} -	} else if (filterout_non_associated_bssid == false) { +		rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR, +					      (u8 *) (®_rcr)); +		_rtl92cu_set_bcn_ctrl_reg(hw, 0, tmp); +	} else { +		u8 tmp;  		if (IS_NORMAL_CHIP(rtlhal->version)) { -			reg_rcr &= (~(RCR_CBSSID_DATA | RCR_CBSSID_BCN)); -			rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR, -						      (u8 *)(®_rcr)); -			_rtl92cu_set_bcn_ctrl_reg(hw, BIT(4), 0); +			reg_rcr &= ~(RCR_CBSSID_DATA | RCR_CBSSID_BCN); +			tmp = BIT(4);  		} else { -			reg_rcr &= (~RCR_CBSSID); -			rtlpriv->cfg->ops->set_hw_reg(hw, HW_VAR_RCR, -						      (u8 *)(®_rcr)); -			_rtl92cu_set_bcn_ctrl_reg(hw, (BIT(4)|BIT(5)), 0); +			reg_rcr &= ~RCR_CBSSID; +			tmp = BIT(4) | BIT(5);  		} +		reg_rcr &= (~(RCR_CBSSID_DATA | RCR_CBSSID_BCN)); +		rtlpriv->cfg->ops->set_hw_reg(hw, +					      HW_VAR_RCR, (u8 *) (®_rcr)); +		_rtl92cu_set_bcn_ctrl_reg(hw, tmp, 0);  	}  } +/*========================================================================== */ +  int rtl92cu_set_network_type(struct ieee80211_hw *hw, enum nl80211_iftype type)  { +	struct rtl_priv *rtlpriv = rtl_priv(hw); +  	if (_rtl92cu_set_media_status(hw, type))  		return -EOPNOTSUPP; -	_rtl92cu_set_check_bssid(hw, type); + +	if (rtlpriv->mac80211.link_state == MAC80211_LINKED) { +		if (type != NL80211_IFTYPE_AP) +			rtl92cu_set_check_bssid(hw, true); +	} else { +		rtl92cu_set_check_bssid(hw, false); +	} +  	return 0;  } @@ -2058,8 +2041,6 @@ void rtl92cu_update_hal_rate_table(struct ieee80211_hw *hw,  			       (shortgi_rate << 4) | (shortgi_rate);  	}  	rtl_write_dword(rtlpriv, REG_ARFR0 + ratr_index * 4, ratr_value); -	RT_TRACE(rtlpriv, COMP_RATR, DBG_DMESG, "%x\n", -		 rtl_read_dword(rtlpriv, REG_ARFR0));  }  void rtl92cu_update_hal_rate_mask(struct ieee80211_hw *hw, u8 rssi_level) |