linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH for 3.9] rtlwifi: rtl8192cu: Fix problem that prevents reassociation
@ 2013-03-13 15:28 Larry Finger
  2013-03-13 15:28 ` John W. Linville
  2013-03-13 16:43 ` Jussi Kivilinna
  0 siblings, 2 replies; 6+ messages in thread
From: Larry Finger @ 2013-03-13 15:28 UTC (permalink / raw)
  To: John W Linville; +Cc: jussi.kivilinna, alessandro.lannocca, linux-wireless

The driver was failing to clear the BSSID when a disconnect happened. That
prevented a reconnection. This problem is reported at
https://bugzilla.redhat.com/show_bug.cgi?id=789605,
https://bugzilla.redhat.com/show_bug.cgi?id=866786,
https://bugzilla.redhat.com/show_bug.cgi?id=906734, and
https://bugzilla.kernel.org/show_bug.cgi?id=46171.

Thanks to Jussi Kivilinna for making the critical observation
that led to the solution.

Reported-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Tested-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
Tested-by: Alessandro Lannocca <alessandro.lannocca@gmail.com>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Stable <stable@vger.kernel.org>
---

John,

As you can see by the number of bug reports, this patch should be
pushed as soon as possible.

Thanks,

Larry
---

 base.h         |    3 +
 pci.c          |    2 -
 rtl8192cu/hw.c |   87 ++++++++++++++++++++++-----------------------------------
 3 files changed, 39 insertions(+), 53 deletions(-)

Index: linux-2.6/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c
===================================================================
--- linux-2.6.orig/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c
+++ linux-2.6/drivers/net/wireless/rtlwifi/rtl8192cu/hw.c
@@ -1377,74 +1377,57 @@ void rtl92cu_card_disable(struct ieee802
 
 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 *)(&reg_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 *)(&reg_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 *)(&reg_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 *) (&reg_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 *)(&reg_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 *)(&reg_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 *) (&reg_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;
 }
 
Index: linux-2.6/drivers/net/wireless/rtlwifi/base.h
===================================================================
--- linux-2.6.orig/drivers/net/wireless/rtlwifi/base.h
+++ linux-2.6/drivers/net/wireless/rtlwifi/base.h
@@ -143,5 +143,8 @@ extern struct attribute_group rtl_attrib
 int rtlwifi_rate_mapping(struct ieee80211_hw *hw,
 			 bool isht, u8 desc_rate, bool first_ampdu);
 bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb);
+struct sk_buff *rtl_make_del_ba(struct ieee80211_hw *hw,
+				u8 *sa, u8 *bssid, u16 tid);
+void rtl_lps_change_work_callback(struct work_struct *work);
 
 #endif
Index: linux-2.6/drivers/net/wireless/rtlwifi/pci.c
===================================================================
--- linux-2.6.orig/drivers/net/wireless/rtlwifi/pci.c
+++ linux-2.6/drivers/net/wireless/rtlwifi/pci.c
@@ -939,7 +939,7 @@ static void _rtl_pci_prepare_bcn_tasklet
 	return;
 }
 
-static void rtl_lps_leave_work_callback(struct work_struct *work)
+void rtl_lps_leave_work_callback(struct work_struct *work)
 {
 	struct rtl_works *rtlworks =
 	    container_of(work, struct rtl_works, lps_leave_work);

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH for 3.9] rtlwifi: rtl8192cu: Fix problem that prevents reassociation
  2013-03-13 15:28 [PATCH for 3.9] rtlwifi: rtl8192cu: Fix problem that prevents reassociation Larry Finger
@ 2013-03-13 15:28 ` John W. Linville
  2013-03-13 16:43 ` Jussi Kivilinna
  1 sibling, 0 replies; 6+ messages in thread
From: John W. Linville @ 2013-03-13 15:28 UTC (permalink / raw)
  To: Larry Finger; +Cc: jussi.kivilinna, alessandro.lannocca, linux-wireless

On Wed, Mar 13, 2013 at 10:28:13AM -0500, Larry Finger wrote:
> The driver was failing to clear the BSSID when a disconnect happened. That
> prevented a reconnection. This problem is reported at
> https://bugzilla.redhat.com/show_bug.cgi?id=789605,
> https://bugzilla.redhat.com/show_bug.cgi?id=866786,
> https://bugzilla.redhat.com/show_bug.cgi?id=906734, and
> https://bugzilla.kernel.org/show_bug.cgi?id=46171.
> 
> Thanks to Jussi Kivilinna for making the critical observation
> that led to the solution.
> 
> Reported-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
> Tested-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
> Tested-by: Alessandro Lannocca <alessandro.lannocca@gmail.com>
> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
> Cc: Stable <stable@vger.kernel.org>
> ---
> 
> John,
> 
> As you can see by the number of bug reports, this patch should be
> pushed as soon as possible.
> 
> Thanks,
> 
> Larry

Got it -- disregard my earlier query... :-)

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH for 3.9] rtlwifi: rtl8192cu: Fix problem that prevents reassociation
  2013-03-13 15:28 [PATCH for 3.9] rtlwifi: rtl8192cu: Fix problem that prevents reassociation Larry Finger
  2013-03-13 15:28 ` John W. Linville
@ 2013-03-13 16:43 ` Jussi Kivilinna
  2013-03-13 18:01   ` Larry Finger
  2013-03-13 18:46   ` John W. Linville
  1 sibling, 2 replies; 6+ messages in thread
From: Jussi Kivilinna @ 2013-03-13 16:43 UTC (permalink / raw)
  To: Larry Finger; +Cc: John W Linville, alessandro.lannocca, linux-wireless

On 13.03.2013 17:28, Larry Finger wrote:
> The driver was failing to clear the BSSID when a disconnect happened. That
> prevented a reconnection. This problem is reported at
> https://bugzilla.redhat.com/show_bug.cgi?id=789605,
> https://bugzilla.redhat.com/show_bug.cgi?id=866786,
> https://bugzilla.redhat.com/show_bug.cgi?id=906734, and
> https://bugzilla.kernel.org/show_bug.cgi?id=46171.
> 
> Thanks to Jussi Kivilinna for making the critical observation
> that led to the solution.
> 
> Reported-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
> Tested-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
> Tested-by: Alessandro Lannocca <alessandro.lannocca@gmail.com>
> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
> Cc: Stable <stable@vger.kernel.org>
> ---
> 
> John,
> 
> As you can see by the number of bug reports, this patch should be
> pushed as soon as possible.
> 
> Thanks,
> 
> Larry
> ---
> 
>  base.h         |    3 +
>  pci.c          |    2 -

Seems like leak from another patch/change?

>  rtl8192cu/hw.c |   87 ++++++++++++++++++++++-----------------------------------
>  3 files changed, 39 insertions(+), 53 deletions(-)
> 

<snip>

>  
> Index: linux-2.6/drivers/net/wireless/rtlwifi/base.h
> ===================================================================
> --- linux-2.6.orig/drivers/net/wireless/rtlwifi/base.h
> +++ linux-2.6/drivers/net/wireless/rtlwifi/base.h
> @@ -143,5 +143,8 @@ extern struct attribute_group rtl_attrib
>  int rtlwifi_rate_mapping(struct ieee80211_hw *hw,
>  			 bool isht, u8 desc_rate, bool first_ampdu);
>  bool rtl_tx_mgmt_proc(struct ieee80211_hw *hw, struct sk_buff *skb);
> +struct sk_buff *rtl_make_del_ba(struct ieee80211_hw *hw,
> +				u8 *sa, u8 *bssid, u16 tid);
> +void rtl_lps_change_work_callback(struct work_struct *work);
>  
>  #endif
> Index: linux-2.6/drivers/net/wireless/rtlwifi/pci.c
> ===================================================================
> --- linux-2.6.orig/drivers/net/wireless/rtlwifi/pci.c
> +++ linux-2.6/drivers/net/wireless/rtlwifi/pci.c
> @@ -939,7 +939,7 @@ static void _rtl_pci_prepare_bcn_tasklet
>  	return;
>  }
>  
> -static void rtl_lps_leave_work_callback(struct work_struct *work)
> +void rtl_lps_leave_work_callback(struct work_struct *work)
>  {
>  	struct rtl_works *rtlworks =
>  	    container_of(work, struct rtl_works, lps_leave_work);
> 


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH for 3.9] rtlwifi: rtl8192cu: Fix problem that prevents reassociation
  2013-03-13 16:43 ` Jussi Kivilinna
@ 2013-03-13 18:01   ` Larry Finger
  2013-03-13 18:46   ` John W. Linville
  1 sibling, 0 replies; 6+ messages in thread
From: Larry Finger @ 2013-03-13 18:01 UTC (permalink / raw)
  To: Jussi Kivilinna; +Cc: John W Linville, alessandro.lannocca, linux-wireless

On 03/13/2013 11:43 AM, Jussi Kivilinna wrote:
> On 13.03.2013 17:28, Larry Finger wrote:
>> The driver was failing to clear the BSSID when a disconnect happened. That
>> prevented a reconnection. This problem is reported at
>> https://bugzilla.redhat.com/show_bug.cgi?id=789605,
>> https://bugzilla.redhat.com/show_bug.cgi?id=866786,
>> https://bugzilla.redhat.com/show_bug.cgi?id=906734, and
>> https://bugzilla.kernel.org/show_bug.cgi?id=46171.
>>
>> Thanks to Jussi Kivilinna for making the critical observation
>> that led to the solution.
>>
>> Reported-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
>> Tested-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
>> Tested-by: Alessandro Lannocca <alessandro.lannocca@gmail.com>
>> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
>> Cc: Stable <stable@vger.kernel.org>
>> ---
>>
>> John,
>>
>> As you can see by the number of bug reports, this patch should be
>> pushed as soon as possible.
>>
>> Thanks,
>>
>> Larry
>> ---
>>
>>   base.h         |    3 +
>>   pci.c          |    2 -
>
> Seems like leak from another patch/change?
>
>>   rtl8192cu/hw.c |   87 ++++++++++++++++++++++-----------------------------------
>>   3 files changed, 39 insertions(+), 53 deletions(-)

Yes, there were some differences between having the patch at the end of the 
line. I'll fix and send V2.

Larry



^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH for 3.9] rtlwifi: rtl8192cu: Fix problem that prevents reassociation
  2013-03-13 16:43 ` Jussi Kivilinna
  2013-03-13 18:01   ` Larry Finger
@ 2013-03-13 18:46   ` John W. Linville
  2013-03-13 19:15     ` Larry Finger
  1 sibling, 1 reply; 6+ messages in thread
From: John W. Linville @ 2013-03-13 18:46 UTC (permalink / raw)
  To: Jussi Kivilinna; +Cc: Larry Finger, alessandro.lannocca, linux-wireless

On Wed, Mar 13, 2013 at 06:43:55PM +0200, Jussi Kivilinna wrote:
> On 13.03.2013 17:28, Larry Finger wrote:
> > The driver was failing to clear the BSSID when a disconnect happened. That
> > prevented a reconnection. This problem is reported at
> > https://bugzilla.redhat.com/show_bug.cgi?id=789605,
> > https://bugzilla.redhat.com/show_bug.cgi?id=866786,
> > https://bugzilla.redhat.com/show_bug.cgi?id=906734, and
> > https://bugzilla.kernel.org/show_bug.cgi?id=46171.
> > 
> > Thanks to Jussi Kivilinna for making the critical observation
> > that led to the solution.
> > 
> > Reported-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
> > Tested-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
> > Tested-by: Alessandro Lannocca <alessandro.lannocca@gmail.com>
> > Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
> > Cc: Stable <stable@vger.kernel.org>
> > ---
> > 
> > John,
> > 
> > As you can see by the number of bug reports, this patch should be
> > pushed as soon as possible.
> > 
> > Thanks,
> > 
> > Larry
> > ---
> > 
> >  base.h         |    3 +
> >  pci.c          |    2 -
> 
> Seems like leak from another patch/change?

I edited-out those bits...

-- 
John W. Linville		Someday the world will need a hero, and you
linville@tuxdriver.com			might be all we have.  Be ready.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH for 3.9] rtlwifi: rtl8192cu: Fix problem that prevents reassociation
  2013-03-13 18:46   ` John W. Linville
@ 2013-03-13 19:15     ` Larry Finger
  0 siblings, 0 replies; 6+ messages in thread
From: Larry Finger @ 2013-03-13 19:15 UTC (permalink / raw)
  To: John W. Linville; +Cc: Jussi Kivilinna, alessandro.lannocca, linux-wireless

On 03/13/2013 01:46 PM, John W. Linville wrote:
> On Wed, Mar 13, 2013 at 06:43:55PM +0200, Jussi Kivilinna wrote:
>> On 13.03.2013 17:28, Larry Finger wrote:
>>> The driver was failing to clear the BSSID when a disconnect happened. That
>>> prevented a reconnection. This problem is reported at
>>> https://bugzilla.redhat.com/show_bug.cgi?id=789605,
>>> https://bugzilla.redhat.com/show_bug.cgi?id=866786,
>>> https://bugzilla.redhat.com/show_bug.cgi?id=906734, and
>>> https://bugzilla.kernel.org/show_bug.cgi?id=46171.
>>>
>>> Thanks to Jussi Kivilinna for making the critical observation
>>> that led to the solution.
>>>
>>> Reported-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
>>> Tested-by: Jussi Kivilinna <jussi.kivilinna@iki.fi>
>>> Tested-by: Alessandro Lannocca <alessandro.lannocca@gmail.com>
>>> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
>>> Cc: Stable <stable@vger.kernel.org>
>>> ---
>>>
>>> John,
>>>
>>> As you can see by the number of bug reports, this patch should be
>>> pushed as soon as possible.
>>>
>>> Thanks,
>>>
>>> Larry
>>> ---
>>>
>>>   base.h         |    3 +
>>>   pci.c          |    2 -
>>
>> Seems like leak from another patch/change?
>
> I edited-out those bits...

Thanks,

Larry



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-03-13 19:15 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-13 15:28 [PATCH for 3.9] rtlwifi: rtl8192cu: Fix problem that prevents reassociation Larry Finger
2013-03-13 15:28 ` John W. Linville
2013-03-13 16:43 ` Jussi Kivilinna
2013-03-13 18:01   ` Larry Finger
2013-03-13 18:46   ` John W. Linville
2013-03-13 19:15     ` Larry Finger

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).