From: Benoit Papillault <benoit.papillault@free.fr>
To: Felix Fietkau <nbd@openwrt.org>
Cc: linux-wireless@vger.kernel.org, lrodriguez@atheros.com,
linville@tuxdriver.com
Subject: Re: [PATCH 2/2] ath9k: remove VEOL support for ad-hoc
Date: Thu, 13 May 2010 23:05:34 +0200 [thread overview]
Message-ID: <4BEC699E.4090308@free.fr> (raw)
In-Reply-To: <1273775845-10056-2-git-send-email-nbd@openwrt.org>
Le 13/05/2010 20:37, Felix Fietkau a écrit :
> With VEOL, Beacon transmission in ad-hoc does not currently work.
> I believe for larger ad-hoc networks, VEOL is too unreliable, as
> it can get beacon transmissions stuck during synchronization.
> Use SWBA based beacon trasmission similar to AP mode instead.
>
> Signed-off-by: Felix Fietkau<nbd@openwrt.org>
This is very good step toward IBSS. Thanks Felix!
Acked-by: Benoit Papillault <benoit.papillault@free.fr>
> ---
> drivers/net/wireless/ath/ath9k/beacon.c | 63 +++++--------------------------
> 1 files changed, 10 insertions(+), 53 deletions(-)
>
> diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c
> index 77face7..f43d85a 100644
> --- a/drivers/net/wireless/ath/ath9k/beacon.c
> +++ b/drivers/net/wireless/ath/ath9k/beacon.c
> @@ -76,22 +76,13 @@ static void ath_beacon_setup(struct ath_softc *sc, struct ath_vif *avp,
> ds = bf->bf_desc;
> flags = ATH9K_TXDESC_NOACK;
>
> - if (((sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC) ||
> - (sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT))&&
> - (ah->caps.hw_caps& ATH9K_HW_CAP_VEOL)) {
> - ds->ds_link = bf->bf_daddr; /* self-linked */
> - flags |= ATH9K_TXDESC_VEOL;
> - /* Let hardware handle antenna switching. */
> - antenna = 0;
> - } else {
> - ds->ds_link = 0;
> - /*
> - * Switch antenna every beacon.
> - * Should only switch every beacon period, not for every SWBA
> - * XXX assumes two antennae
> - */
> - antenna = ((sc->beacon.ast_be_xmit / sc->nbcnvifs)& 1 ? 2 : 1);
> - }
> + ds->ds_link = 0;
> + /*
> + * Switch antenna every beacon.
> + * Should only switch every beacon period, not for every SWBA
> + * XXX assumes two antennae
> + */
> + antenna = ((sc->beacon.ast_be_xmit / sc->nbcnvifs)& 1 ? 2 : 1);
>
> sband =&sc->sbands[common->hw->conf.channel->band];
> rate = sband->bitrates[rateidx].hw_value;
> @@ -215,36 +206,6 @@ static struct ath_buf *ath_beacon_generate(struct ieee80211_hw *hw,
> return bf;
> }
>
> -/*
> - * Startup beacon transmission for adhoc mode when they are sent entirely
> - * by the hardware using the self-linked descriptor + veol trick.
> -*/
> -static void ath_beacon_start_adhoc(struct ath_softc *sc,
> - struct ieee80211_vif *vif)
> -{
> - struct ath_hw *ah = sc->sc_ah;
> - struct ath_common *common = ath9k_hw_common(ah);
> - struct ath_buf *bf;
> - struct ath_vif *avp;
> - struct sk_buff *skb;
> -
> - avp = (void *)vif->drv_priv;
> -
> - if (avp->av_bcbuf == NULL)
> - return;
> -
> - bf = avp->av_bcbuf;
> - skb = bf->bf_mpdu;
> -
> - ath_beacon_setup(sc, avp, bf, 0);
> -
> - /* NB: caller is known to have already stopped tx dma */
> - ath9k_hw_puttxbuf(ah, sc->beacon.beaconq, bf->bf_daddr);
> - ath9k_hw_txstart(ah, sc->beacon.beaconq);
> - ath_print(common, ATH_DBG_BEACON, "TXDP%u = %llx (%p)\n",
> - sc->beacon.beaconq, ito64(bf->bf_daddr), bf->bf_desc);
> -}
> -
> int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif)
> {
> struct ath_softc *sc = aphy->sc;
> @@ -265,7 +226,8 @@ int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif)
> list_del(&avp->av_bcbuf->list);
>
> if (sc->sc_ah->opmode == NL80211_IFTYPE_AP ||
> - !(sc->sc_ah->caps.hw_caps& ATH9K_HW_CAP_VEOL)) {
> + sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC ||
> + sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT) {
> int slot;
> /*
> * Assign the vif to a beacon xmit slot. As
> @@ -715,8 +677,7 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc,
> * self-linked tx descriptor and let the hardware deal with things.
> */
> intval |= ATH9K_BEACON_ENA;
> - if (!(ah->caps.hw_caps& ATH9K_HW_CAP_VEOL))
> - ah->imask |= ATH9K_INT_SWBA;
> + ah->imask |= ATH9K_INT_SWBA;
>
> ath_beaconq_config(sc);
>
> @@ -726,10 +687,6 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc,
> ath9k_beacon_init(sc, nexttbtt, intval);
> sc->beacon.bmisscnt = 0;
> ath9k_hw_set_interrupts(ah, ah->imask);
> -
> - /* FIXME: Handle properly when vif is NULL */
> - if (vif&& ah->caps.hw_caps& ATH9K_HW_CAP_VEOL)
> - ath_beacon_start_adhoc(sc, vif);
> }
>
> void ath_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif)
prev parent reply other threads:[~2010-05-13 21:05 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-13 18:37 [PATCH 1/2] ath9k: change beacon allocation to prefer the first beacon slot Felix Fietkau
2010-05-13 18:37 ` [PATCH 2/2] ath9k: remove VEOL support for ad-hoc Felix Fietkau
2010-05-13 21:05 ` Benoit Papillault [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4BEC699E.4090308@free.fr \
--to=benoit.papillault@free.fr \
--cc=linux-wireless@vger.kernel.org \
--cc=linville@tuxdriver.com \
--cc=lrodriguez@atheros.com \
--cc=nbd@openwrt.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.