Commit 5c8067ca authored by Seth Forshee's avatar Seth Forshee Committed by John W. Linville

brcmsmac: Don't weight AMPDU packets in txfifo

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: default avatarSeth Forshee <seth.forshee@canonical.com>
Reviewed-by: default avatarPieter-Paul Giesberts <pieterpg@broadcom.com>
Reviewed-by: default avatarArend van Spriel <arend@broadcom.com>
Tested-by: default avatarDaniel Wagner <wagi@monom.org>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent ef2c0512
...@@ -40,8 +40,6 @@ ...@@ -40,8 +40,6 @@
#define AMPDU_DEF_RETRY_LIMIT 5 #define AMPDU_DEF_RETRY_LIMIT 5
/* default tx retry limit at reg rate */ /* default tx retry limit at reg rate */
#define AMPDU_DEF_RR_RETRY_LIMIT 2 #define AMPDU_DEF_RR_RETRY_LIMIT 2
/* default weight of ampdu in txfifo */
#define AMPDU_DEF_TXPKT_WEIGHT 2
/* default ffpld reserved bytes */ /* default ffpld reserved bytes */
#define AMPDU_DEF_FFPLD_RSVD 2048 #define AMPDU_DEF_FFPLD_RSVD 2048
/* # of inis to be freed on detach */ /* # of inis to be freed on detach */
...@@ -114,7 +112,6 @@ struct brcms_fifo_info { ...@@ -114,7 +112,6 @@ struct brcms_fifo_info {
* mpdu_density: min mpdu spacing (0-7) ==> 2^(x-1)/8 usec * mpdu_density: min mpdu spacing (0-7) ==> 2^(x-1)/8 usec
* max_pdu: max pdus allowed in ampdu * max_pdu: max pdus allowed in ampdu
* dur: max duration of an ampdu (in msec) * 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 * rx_factor: maximum rx ampdu factor (0-3) ==> 2^(13+x) bytes
* ffpld_rsvd: number of bytes to reserve for preload * ffpld_rsvd: number of bytes to reserve for preload
* max_txlen: max size of ampdu per mcs, bw and sgi * max_txlen: max size of ampdu per mcs, bw and sgi
...@@ -136,7 +133,6 @@ struct ampdu_info { ...@@ -136,7 +133,6 @@ struct ampdu_info {
u8 mpdu_density; u8 mpdu_density;
s8 max_pdu; s8 max_pdu;
u8 dur; u8 dur;
u8 txpkt_weight;
u8 rx_factor; u8 rx_factor;
u32 ffpld_rsvd; u32 ffpld_rsvd;
u32 max_txlen[MCS_TABLE_SIZE][2][2]; u32 max_txlen[MCS_TABLE_SIZE][2][2];
...@@ -247,7 +243,6 @@ struct ampdu_info *brcms_c_ampdu_attach(struct brcms_c_info *wlc) ...@@ -247,7 +243,6 @@ struct ampdu_info *brcms_c_ampdu_attach(struct brcms_c_info *wlc)
ampdu->mpdu_density = AMPDU_DEF_MPDU_DENSITY; ampdu->mpdu_density = AMPDU_DEF_MPDU_DENSITY;
ampdu->max_pdu = AUTO; ampdu->max_pdu = AUTO;
ampdu->dur = AMPDU_MAX_DUR; ampdu->dur = AMPDU_MAX_DUR;
ampdu->txpkt_weight = AMPDU_DEF_TXPKT_WEIGHT;
ampdu->ffpld_rsvd = AMPDU_DEF_FFPLD_RSVD; ampdu->ffpld_rsvd = AMPDU_DEF_FFPLD_RSVD;
/* /*
...@@ -942,8 +937,7 @@ brcms_c_sendampdu(struct ampdu_info *ampdu, struct brcms_txq_info *qi, ...@@ -942,8 +937,7 @@ brcms_c_sendampdu(struct ampdu_info *ampdu, struct brcms_txq_info *qi,
while ((p = skb_dequeue(&session.skb_list)) != NULL) while ((p = skb_dequeue(&session.skb_list)) != NULL)
brcms_c_txfifo(wlc, fifo, p, brcms_c_txfifo(wlc, fifo, p,
skb_queue_empty(&session.skb_list), skb_queue_empty(&session.skb_list));
ampdu->txpkt_weight);
} }
/* endif (count) */ /* endif (count) */
return err; return err;
...@@ -1162,7 +1156,7 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb, ...@@ -1162,7 +1156,7 @@ brcms_c_ampdu_dotxstatus_complete(struct ampdu_info *ampdu, struct scb *scb,
/* update rate state */ /* update rate state */
antselid = brcms_c_antsel_antsel2id(wlc->asi, mimoantsel); antselid = brcms_c_antsel_antsel2id(wlc->asi, mimoantsel);
brcms_c_txfifo_complete(wlc, queue, ampdu->txpkt_weight); brcms_c_txfifo_complete(wlc, queue);
} }
void void
...@@ -1219,7 +1213,7 @@ brcms_c_ampdu_dotxstatus(struct ampdu_info *ampdu, struct scb *scb, ...@@ -1219,7 +1213,7 @@ brcms_c_ampdu_dotxstatus(struct ampdu_info *ampdu, struct scb *scb,
p = dma_getnexttxp(wlc->hw->di[queue], p = dma_getnexttxp(wlc->hw->di[queue],
DMA_RANGE_TRANSMITTED); DMA_RANGE_TRANSMITTED);
} }
brcms_c_txfifo_complete(wlc, queue, ampdu->txpkt_weight); brcms_c_txfifo_complete(wlc, queue);
} }
} }
......
...@@ -982,7 +982,7 @@ brcms_c_dotxstatus(struct brcms_c_info *wlc, struct tx_status *txs) ...@@ -982,7 +982,7 @@ brcms_c_dotxstatus(struct brcms_c_info *wlc, struct tx_status *txs)
totlen = p->len; totlen = p->len;
free_pdu = true; free_pdu = true;
brcms_c_txfifo_complete(wlc, queue, 1); brcms_c_txfifo_complete(wlc, queue);
if (lastframe) { if (lastframe) {
/* remove PLCP & Broadcom tx descriptor header */ /* remove PLCP & Broadcom tx descriptor header */
...@@ -7319,8 +7319,7 @@ void brcms_c_send_q(struct brcms_c_info *wlc) ...@@ -7319,8 +7319,7 @@ void brcms_c_send_q(struct brcms_c_info *wlc)
err = brcms_c_prep_pdu(wlc, pkt[0], &fifo); err = brcms_c_prep_pdu(wlc, pkt[0], &fifo);
if (!err) { if (!err) {
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
brcms_c_txfifo(wlc, fifo, pkt[i], true, brcms_c_txfifo(wlc, fifo, pkt[i], true);
1);
} }
} }
...@@ -7340,7 +7339,7 @@ void brcms_c_send_q(struct brcms_c_info *wlc) ...@@ -7340,7 +7339,7 @@ void brcms_c_send_q(struct brcms_c_info *wlc)
void void
brcms_c_txfifo(struct brcms_c_info *wlc, uint fifo, struct sk_buff *p, brcms_c_txfifo(struct brcms_c_info *wlc, uint fifo, struct sk_buff *p,
bool commit, s8 txpktpend) bool commit)
{ {
u16 frameid = INVALIDFID; u16 frameid = INVALIDFID;
struct d11txh *txh; struct d11txh *txh;
...@@ -7358,9 +7357,9 @@ brcms_c_txfifo(struct brcms_c_info *wlc, uint fifo, struct sk_buff *p, ...@@ -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() * used, this will be handled in brcms_b_txfifo()
*/ */
if (commit) { if (commit) {
wlc->core->txpktpend[fifo] += txpktpend; wlc->core->txpktpend[fifo] += 1;
BCMMSG(wlc->wiphy, "pktpend inc %d to %d\n", BCMMSG(wlc->wiphy, "pktpend inc 1 to %d\n",
txpktpend, wlc->core->txpktpend[fifo]); wlc->core->txpktpend[fifo]);
} }
/* Commit BCMC sequence number in the SHM frame ID location */ /* Commit BCMC sequence number in the SHM frame ID location */
...@@ -7424,10 +7423,10 @@ brcms_c_rspec_to_rts_rspec(struct brcms_c_info *wlc, u32 rspec, ...@@ -7424,10 +7423,10 @@ brcms_c_rspec_to_rts_rspec(struct brcms_c_info *wlc, u32 rspec,
} }
void 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; wlc->core->txpktpend[fifo] -= 1;
BCMMSG(wlc->wiphy, "pktpend dec %d to %d\n", txpktpend, BCMMSG(wlc->wiphy, "pktpend dec 1 to %d\n",
wlc->core->txpktpend[fifo]); wlc->core->txpktpend[fifo]);
/* There is more room; mark precedences related to this FIFO sendable */ /* There is more room; mark precedences related to this FIFO sendable */
......
...@@ -638,10 +638,8 @@ struct brcms_bss_cfg { ...@@ -638,10 +638,8 @@ struct brcms_bss_cfg {
}; };
extern void brcms_c_txfifo(struct brcms_c_info *wlc, uint fifo, extern void brcms_c_txfifo(struct brcms_c_info *wlc, uint fifo,
struct sk_buff *p, struct sk_buff *p, bool commit);
bool commit, s8 txpktpend); extern void brcms_c_txfifo_complete(struct brcms_c_info *wlc, uint fifo);
extern void brcms_c_txfifo_complete(struct brcms_c_info *wlc, uint fifo,
s8 txpktpend);
extern void brcms_c_txq_enq(struct brcms_c_info *wlc, struct scb *scb, extern void brcms_c_txq_enq(struct brcms_c_info *wlc, struct scb *scb,
struct sk_buff *sdu, uint prec); struct sk_buff *sdu, uint prec);
extern void brcms_c_print_txstatus(struct tx_status *txs); extern void brcms_c_print_txstatus(struct tx_status *txs);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment