From: Michael Buesch <mb@bu3sch.de>
To: bcm43xx-dev@lists.berlios.de
Cc: Larry Finger <Larry.Finger@lwfinger.net>, linux-wireless@vger.kernel.org
Subject: Re: [RFC] bcm43xx-mac80211: Provide information to allow transmission rate decreases
Date: Wed, 1 Aug 2007 22:05:16 +0200 [thread overview]
Message-ID: <200708012205.16529.mb@bu3sch.de> (raw)
In-Reply-To: <46b0e53e.ouY931+cZsSSSmLK%Larry.Finger@lwfinger.net>
On Wednesday 01 August 2007 21:55:42 Larry Finger wrote:
> Michael,
>
> This version saves the long- and short-retry limits in the phy struct
> and only sets excessive retries when one or the other is reached.
>
> Larry
> ---
>
> In bcm43xx-mac80211, the mechanism for decreasing the transmit rate cannot
> be triggered. This may be shown by walking away from the AP with a laptop.
> At some distance, communications will be lost and never recovered because
> the rate decreasing mechanism of rc80211_simple needs to see excessive_retries
> set in the ieee80211_tx_status struct. With this patch, the transmit rate
> will decrease until communications restart.
>
> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
> ---
>
> Index: wireless-dev/drivers/net/wireless/bcm43xx-mac80211/bcm43xx_dma.c
> ===================================================================
> --- wireless-dev.orig/drivers/net/wireless/bcm43xx-mac80211/bcm43xx_dma.c
> +++ wireless-dev/drivers/net/wireless/bcm43xx-mac80211/bcm43xx_dma.c
> @@ -1284,6 +1284,7 @@ void bcm43xx_dma_handle_txstatus(struct
> struct bcm43xx_dmaring *ring;
> struct bcm43xx_dmadesc_generic *desc;
> struct bcm43xx_dmadesc_meta *meta;
> + struct bcm43xx_phy *phy = &dev->phy;
> int slot;
>
> ring = parse_cookie(dev, status->cookie, &slot);
> @@ -1311,6 +1312,10 @@ void bcm43xx_dma_handle_txstatus(struct
> */
> if (status->acked)
> meta->txstat.flags |= IEEE80211_TX_STATUS_ACK;
> + else
> + if ((status->frame_count >= phy->lrlimit) ||
> + (status->frame_count >= phy->srlimit))
> + meta->txstat.excessive_retries = 1;
No, you need something like
if (is long frame)
if (cnt >= long_limit)
foo;
else
if (cnt >= short_limit)
foo;
And please use variable names like
short_retry_limit or something like that. It's more to type but
soooooo much easier to read :)
You could probably shorten that by short_retr_lim.
And I think we should store the stuff in struct bcm43xx_wldev, as it's
a mac attribute.
bcm43xx_phy is more about the actual PHY hardware calibration and stuff.
We tell the FW whether it's a long or short frame in the TXheader generation.
> meta->txstat.retry_count = status->frame_count - 1;
> ieee80211_tx_status_irqsafe(dev->wl->hw, meta->skb, &(meta->txstat));
> /* skb is freed by ieee80211_tx_status_irqsafe() */
> Index: wireless-dev/drivers/net/wireless/bcm43xx-mac80211/bcm43xx.h
> ===================================================================
> --- wireless-dev.orig/drivers/net/wireless/bcm43xx-mac80211/bcm43xx.h
> +++ wireless-dev/drivers/net/wireless/bcm43xx-mac80211/bcm43xx.h
> @@ -562,6 +562,8 @@ struct bcm43xx_phy {
> u16 lofcal;
>
> u16 initval;//FIXME rename?
> + u8 srlimit;
> + u8 lrlimit;
> };
>
> /* Data structures for DMA transmission, per 80211 core. */
> Index: wireless-dev/drivers/net/wireless/bcm43xx-mac80211/bcm43xx_main.c
> ===================================================================
> --- wireless-dev.orig/drivers/net/wireless/bcm43xx-mac80211/bcm43xx_main.c
> +++ wireless-dev/drivers/net/wireless/bcm43xx-mac80211/bcm43xx_main.c
> @@ -3333,10 +3333,12 @@ static int bcm43xx_wireless_core_init(st
> tmp = limit_value(modparam_short_retry, 0, 0xF);
> bcm43xx_shm_write16(dev, BCM43xx_SHM_SCRATCH,
> BCM43xx_SHM_SC_SRLIMIT, tmp);
> + phy->srlimit = tmp;
> tmp = limit_value(modparam_long_retry, 0, 0xF);
> bcm43xx_shm_write16(dev, BCM43xx_SHM_SCRATCH,
> BCM43xx_SHM_SC_LRLIMIT, tmp);
>
> + phy->lrlimit = tmp;
> bcm43xx_shm_write16(dev, BCM43xx_SHM_SHARED,
> BCM43xx_SHM_SH_SFFBLIM, 3);
> bcm43xx_shm_write16(dev, BCM43xx_SHM_SHARED,
--
Greetings Michael.
prev parent reply other threads:[~2007-08-01 20:05 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-08-01 19:55 [RFC] bcm43xx-mac80211: Provide information to allow transmission rate decreases Larry Finger
2007-08-01 20:05 ` Michael Buesch [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=200708012205.16529.mb@bu3sch.de \
--to=mb@bu3sch.de \
--cc=Larry.Finger@lwfinger.net \
--cc=bcm43xx-dev@lists.berlios.de \
--cc=linux-wireless@vger.kernel.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.