Skip to content

Commit

Permalink
brcmsmac: Don't weight AMPDU packets in txfifo
Browse files Browse the repository at this point in the history
According to the comments this "reduces rate lag," but in reality the
only way this value is used is for determining whether or not any frames
remain to be transmitted. Therefore there's no reason for AMPDU packets
to receive any weighting.

Signed-off-by: Seth Forshee <seth.forshee@canonical.com>
Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: Arend van Spriel <arend@broadcom.com>
Tested-by: Daniel Wagner <wagi@monom.org>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
  • Loading branch information
Seth Forshee authored and John W. Linville committed Nov 20, 2012
1 parent ef2c051 commit 5c8067c
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 23 deletions.
12 changes: 3 additions & 9 deletions drivers/net/wireless/brcm80211/brcmsmac/ampdu.c
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,6 @@
#define AMPDU_DEF_RETRY_LIMIT 5
/* default tx retry limit at reg rate */
#define AMPDU_DEF_RR_RETRY_LIMIT 2
/* default weight of ampdu in txfifo */
#define AMPDU_DEF_TXPKT_WEIGHT 2
/* default ffpld reserved bytes */
#define AMPDU_DEF_FFPLD_RSVD 2048
/* # of inis to be freed on detach */
Expand Down Expand Up @@ -114,7 +112,6 @@ struct brcms_fifo_info {
* mpdu_density: min mpdu spacing (0-7) ==> 2^(x-1)/8 usec
* max_pdu: max pdus allowed in ampdu
* dur: max duration of an ampdu (in msec)
* txpkt_weight: weight of ampdu in txfifo; reduces rate lag
* rx_factor: maximum rx ampdu factor (0-3) ==> 2^(13+x) bytes
* ffpld_rsvd: number of bytes to reserve for preload
* max_txlen: max size of ampdu per mcs, bw and sgi
Expand All @@ -136,7 +133,6 @@ struct ampdu_info {
u8 mpdu_density;
s8 max_pdu;
u8 dur;
u8 txpkt_weight;
u8 rx_factor;
u32 ffpld_rsvd;
u32 max_txlen[MCS_TABLE_SIZE][2][2];
Expand Down Expand Up @@ -247,7 +243,6 @@ struct ampdu_info *brcms_c_ampdu_attach(struct brcms_c_info *wlc)
ampdu->mpdu_density = AMPDU_DEF_MPDU_DENSITY;
ampdu->max_pdu = AUTO;
ampdu->dur = AMPDU_MAX_DUR;
ampdu->txpkt_weight = AMPDU_DEF_TXPKT_WEIGHT;

ampdu->ffpld_rsvd = AMPDU_DEF_FFPLD_RSVD;
/*
Expand Down Expand Up @@ -942,8 +937,7 @@ brcms_c_sendampdu(struct ampdu_info *ampdu, struct brcms_txq_info *qi,

while ((p = skb_dequeue(&session.skb_list)) != NULL)
brcms_c_txfifo(wlc, fifo, p,
skb_queue_empty(&session.skb_list),
ampdu->txpkt_weight);
skb_queue_empty(&session.skb_list));
}
/* endif (count) */
return err;
Expand Down Expand Up @@ -1162,7 +1156,7 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb,
/* update rate state */
antselid = brcms_c_antsel_antsel2id(wlc->asi, mimoantsel);

brcms_c_txfifo_complete(wlc, queue, ampdu->txpkt_weight);
brcms_c_txfifo_complete(wlc, queue);
}

void
Expand Down Expand Up @@ -1219,7 +1213,7 @@ brcms_c_ampdu_dotxstatus(struct ampdu_info *ampdu, struct scb *scb,
p = dma_getnexttxp(wlc->hw->di[queue],
DMA_RANGE_TRANSMITTED);
}
brcms_c_txfifo_complete(wlc, queue, ampdu->txpkt_weight);
brcms_c_txfifo_complete(wlc, queue);
}
}

Expand Down
19 changes: 9 additions & 10 deletions drivers/net/wireless/brcm80211/brcmsmac/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -982,7 +982,7 @@ brcms_c_dotxstatus(struct brcms_c_info *wlc, struct tx_status *txs)
totlen = p->len;
free_pdu = true;

brcms_c_txfifo_complete(wlc, queue, 1);
brcms_c_txfifo_complete(wlc, queue);

if (lastframe) {
/* remove PLCP & Broadcom tx descriptor header */
Expand Down Expand Up @@ -7319,8 +7319,7 @@ void brcms_c_send_q(struct brcms_c_info *wlc)
err = brcms_c_prep_pdu(wlc, pkt[0], &fifo);
if (!err) {
for (i = 0; i < count; i++)
brcms_c_txfifo(wlc, fifo, pkt[i], true,
1);
brcms_c_txfifo(wlc, fifo, pkt[i], true);
}
}

Expand All @@ -7340,7 +7339,7 @@ void brcms_c_send_q(struct brcms_c_info *wlc)

void
brcms_c_txfifo(struct brcms_c_info *wlc, uint fifo, struct sk_buff *p,
bool commit, s8 txpktpend)
bool commit)
{
u16 frameid = INVALIDFID;
struct d11txh *txh;
Expand All @@ -7358,9 +7357,9 @@ brcms_c_txfifo(struct brcms_c_info *wlc, uint fifo, struct sk_buff *p,
* used, this will be handled in brcms_b_txfifo()
*/
if (commit) {
wlc->core->txpktpend[fifo] += txpktpend;
BCMMSG(wlc->wiphy, "pktpend inc %d to %d\n",
txpktpend, wlc->core->txpktpend[fifo]);
wlc->core->txpktpend[fifo] += 1;
BCMMSG(wlc->wiphy, "pktpend inc 1 to %d\n",
wlc->core->txpktpend[fifo]);
}

/* Commit BCMC sequence number in the SHM frame ID location */
Expand Down Expand Up @@ -7424,10 +7423,10 @@ brcms_c_rspec_to_rts_rspec(struct brcms_c_info *wlc, u32 rspec,
}

void
brcms_c_txfifo_complete(struct brcms_c_info *wlc, uint fifo, s8 txpktpend)
brcms_c_txfifo_complete(struct brcms_c_info *wlc, uint fifo)
{
wlc->core->txpktpend[fifo] -= txpktpend;
BCMMSG(wlc->wiphy, "pktpend dec %d to %d\n", txpktpend,
wlc->core->txpktpend[fifo] -= 1;
BCMMSG(wlc->wiphy, "pktpend dec 1 to %d\n",
wlc->core->txpktpend[fifo]);

/* There is more room; mark precedences related to this FIFO sendable */
Expand Down
6 changes: 2 additions & 4 deletions drivers/net/wireless/brcm80211/brcmsmac/main.h
Original file line number Diff line number Diff line change
Expand Up @@ -638,10 +638,8 @@ struct brcms_bss_cfg {
};

extern void brcms_c_txfifo(struct brcms_c_info *wlc, uint fifo,
struct sk_buff *p,
bool commit, s8 txpktpend);
extern void brcms_c_txfifo_complete(struct brcms_c_info *wlc, uint fifo,
s8 txpktpend);
struct sk_buff *p, bool commit);
extern void brcms_c_txfifo_complete(struct brcms_c_info *wlc, uint fifo);
extern void brcms_c_txq_enq(struct brcms_c_info *wlc, struct scb *scb,
struct sk_buff *sdu, uint prec);
extern void brcms_c_print_txstatus(struct tx_status *txs);
Expand Down

0 comments on commit 5c8067c

Please sign in to comment.