diff mbox

[RFC] ath9k: allow to receive probe request when offchannel

Message ID 1433912583-15918-1-git-send-email-janusz.dziedzic@tieto.com (mailing list archive)
State RFC
Delegated to: Kalle Valo
Headers show

Commit Message

Janusz.Dziedzic@tieto.com June 10, 2015, 5:03 a.m. UTC
This fix problem that p2p group negotiation didn't work
correctly when chanctx used, because we didn't receive
probe requests when offchannel and use_chanctx=1

Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
---
@Felix, Sujith could you review? I am not sure I put this in correct place.

 drivers/net/wireless/ath/ath9k/channel.c | 6 ++++++
 1 file changed, 6 insertions(+)

Comments

Janusz.Dziedzic@tieto.com June 15, 2015, 11:39 a.m. UTC | #1
adding Sujith correct mail

On 10 June 2015 at 07:03, Janusz Dziedzic <janusz.dziedzic@tieto.com> wrote:
> This fix problem that p2p group negotiation didn't work
> correctly when chanctx used, because we didn't receive
> probe requests when offchannel and use_chanctx=1
>
> Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
> ---
> @Felix, Sujith could you review? I am not sure I put this in correct place.
>
>  drivers/net/wireless/ath/ath9k/channel.c | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/drivers/net/wireless/ath/ath9k/channel.c b/drivers/net/wireless/ath/ath9k/channel.c
> index 2066650..6301d44 100644
> --- a/drivers/net/wireless/ath/ath9k/channel.c
> +++ b/drivers/net/wireless/ath/ath9k/channel.c
> @@ -1157,6 +1157,7 @@ static bool ath_chanctx_defer_switch(struct ath_softc *sc)
>  static void ath_offchannel_channel_change(struct ath_softc *sc)
>  {
>         struct ath_common *common = ath9k_hw_common(sc->sc_ah);
> +       u32 rfilt;
>
>         ath_dbg(common, CHAN_CTX, "%s: offchannel state: %s\n",
>                 __func__, offchannel_state_string(sc->offchannel.state));
> @@ -1179,6 +1180,11 @@ static void ath_offchannel_channel_change(struct ath_softc *sc)
>                 ath_scan_complete(sc, false);
>                 break;
>         case ATH_OFFCHANNEL_ROC_START:
> +               /* Allow to receive probe requests */
> +               rfilt = ath_calcrxfilter(sc);
> +               rfilt |= ATH9K_RX_FILTER_PROBEREQ;
> +               ath9k_hw_setrxfilter(sc->sc_ah, rfilt);
> +
>                 if (sc->cur_chan != &sc->offchannel.chan)
>                         break;
>
> --
> 1.9.1
>
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Felix Fietkau June 15, 2015, 11:46 a.m. UTC | #2
On 2015-06-10 07:03, Janusz Dziedzic wrote:
> This fix problem that p2p group negotiation didn't work
> correctly when chanctx used, because we didn't receive
> probe requests when offchannel and use_chanctx=1
> 
> Signed-off-by: Janusz Dziedzic <janusz.dziedzic@tieto.com>
> ---
> @Felix, Sujith could you review? I am not sure I put this in correct place.
> 
>  drivers/net/wireless/ath/ath9k/channel.c | 6 ++++++
>  1 file changed, 6 insertions(+)
> 
> diff --git a/drivers/net/wireless/ath/ath9k/channel.c b/drivers/net/wireless/ath/ath9k/channel.c
> index 2066650..6301d44 100644
> --- a/drivers/net/wireless/ath/ath9k/channel.c
> +++ b/drivers/net/wireless/ath/ath9k/channel.c
> @@ -1157,6 +1157,7 @@ static bool ath_chanctx_defer_switch(struct ath_softc *sc)
>  static void ath_offchannel_channel_change(struct ath_softc *sc)
>  {
>  	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
> +	u32 rfilt;
>  
>  	ath_dbg(common, CHAN_CTX, "%s: offchannel state: %s\n",
>  		__func__, offchannel_state_string(sc->offchannel.state));
> @@ -1179,6 +1180,11 @@ static void ath_offchannel_channel_change(struct ath_softc *sc)
>  		ath_scan_complete(sc, false);
>  		break;
>  	case ATH_OFFCHANNEL_ROC_START:
> +		/* Allow to receive probe requests */
> +		rfilt = ath_calcrxfilter(sc);
> +		rfilt |= ATH9K_RX_FILTER_PROBEREQ;
I think ath_calcrxfilter should set this, otherwise it might be
overwritten, e.g. on BB watchdog reset.

- Felix
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Sujith Manoharan June 15, 2015, 12:25 p.m. UTC | #3
Janusz Dziedzic wrote:
> >         case ATH_OFFCHANNEL_ROC_START:
> > +               /* Allow to receive probe requests */
> > +               rfilt = ath_calcrxfilter(sc);
> > +               rfilt |= ATH9K_RX_FILTER_PROBEREQ;
> > +               ath9k_hw_setrxfilter(sc->sc_ah, rfilt);
> > +

ath9k_set_offchannel_state() would be a better place to do this,
since setting up various bits in the HW for offchannel operation
is done there. Also, it would make sure that the HW state is
retained when a chip reset is done for some reason.

Sujith
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/wireless/ath/ath9k/channel.c b/drivers/net/wireless/ath/ath9k/channel.c
index 2066650..6301d44 100644
--- a/drivers/net/wireless/ath/ath9k/channel.c
+++ b/drivers/net/wireless/ath/ath9k/channel.c
@@ -1157,6 +1157,7 @@  static bool ath_chanctx_defer_switch(struct ath_softc *sc)
 static void ath_offchannel_channel_change(struct ath_softc *sc)
 {
 	struct ath_common *common = ath9k_hw_common(sc->sc_ah);
+	u32 rfilt;
 
 	ath_dbg(common, CHAN_CTX, "%s: offchannel state: %s\n",
 		__func__, offchannel_state_string(sc->offchannel.state));
@@ -1179,6 +1180,11 @@  static void ath_offchannel_channel_change(struct ath_softc *sc)
 		ath_scan_complete(sc, false);
 		break;
 	case ATH_OFFCHANNEL_ROC_START:
+		/* Allow to receive probe requests */
+		rfilt = ath_calcrxfilter(sc);
+		rfilt |= ATH9K_RX_FILTER_PROBEREQ;
+		ath9k_hw_setrxfilter(sc->sc_ah, rfilt);
+
 		if (sc->cur_chan != &sc->offchannel.chan)
 			break;