Skip to content

Commit

Permalink
Merge pull request #149 from francois-berder-imgtec/update-wifi-driver
Browse files Browse the repository at this point in the history
Update wifi driver to version 6.8
  • Loading branch information
nikhil-zinjurde-imgtec authored Sep 27, 2016
2 parents a0d274f + 0c60975 commit 9ef30b6
Show file tree
Hide file tree
Showing 5 changed files with 4,441 additions and 0 deletions.
Binary file modified target/linux/pistachio/base-files/lib/firmware/img/uccp420wlan/MAC_LOADER.ldr
100755 → 100644
Binary file not shown.
Binary file modified target/linux/pistachio/base-files/lib/firmware/img/uccp420wlan/MCP_LOADER.ldr
100755 → 100644
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
From 8ac8d331fb755610cfc78ca808b7b58b20b0ddfc Mon Sep 17 00:00:00 2001
From: Chaitanya Tata <[email protected]>
Date: Fri, 29 Jul 2016 13:39:40 +0530
Subject: [PATCH 1/3] uccp420wlan: Tx data path fixes

1) If we get a tx_done for a spare token, but have pending frames for
other than tx_done->queue, adjust the counters of outstanding_tokens
for both queues. This fixes a issue of negative outstanding tokens.

2) In discard channdel switch path, if there are no pending frames
free the token by holding the tx_lock. This fixes TSMC data issue.

Change-Id: Iccb4d66935f708be77559ee17953a5c21a5d8cc2
---
drivers/net/wireless/uccp420wlan/src/tx.c | 43 +++++++++++++++++++------------
1 file changed, 27 insertions(+), 16 deletions(-)
mode change 100644 => 100755 drivers/net/wireless/uccp420wlan/src/tx.c

diff --git a/drivers/net/wireless/uccp420wlan/src/tx.c b/drivers/net/wireless/uccp420wlan/src/tx.c
old mode 100644
new mode 100755
index e81ffcc..d883d0d
--- a/drivers/net/wireless/uccp420wlan/src/tx.c
+++ b/drivers/net/wireless/uccp420wlan/src/tx.c
@@ -361,10 +361,10 @@ void free_token(struct mac80211_dev *dev,

test = tx->outstanding_tokens[queue];
if (WARN_ON_ONCE(test < 0 || test > 4)) {
- pr_warn("%s: invalid outstanding_tokens: %d, old:%d\n",
- __func__,
- test,
- old_token);
+ UCCP_DEBUG_TX("%s: invalid outstanding_tokens: %d, old:%d\n",
+ __func__,
+ test,
+ old_token);
}
}

@@ -863,9 +863,9 @@ int uccp420wlan_tx_alloc_token(struct mac80211_dev *dev,
out:
spin_unlock_bh(&tx->lock);

- UCCP_DEBUG_TX("%s-UMACTX:Alloc buf Result *id= %d\n",
+ UCCP_DEBUG_TX("%s-UMACTX:Alloc buf Result *id= %d out_tok:%d\n",
dev->name,
- token_id);
+ token_id, tx->outstanding_tokens[ac]);
/* If token is available, just return tokenid, list will be sent*/
return token_id;
}
@@ -985,6 +985,12 @@ int uccp420wlan_tx_free_buff_req(struct mac80211_dev *dev,

if (pkts_pend) {
*ac = cnt;
+ /* Spare Token Case*/
+ if (tx_done->queue != *ac) {
+ /*Adjust the counters*/
+ tx->outstanding_tokens[tx_done->queue]--;
+ tx->outstanding_tokens[*ac]++;
+ }
break;
}
}
@@ -1361,6 +1367,12 @@ unsigned int uccp420wlan_proc_tx_dscrd_chsw(struct mac80211_dev *dev,
desc_id);
if (pkts_pend) {
queue = cnt;
+ if (tx_done->queue != queue) {
+ unsigned int txd_q = tx_done->queue;
+ /*Adjust the counters*/
+ tx->outstanding_tokens[txd_q]--;
+ tx->outstanding_tokens[queue]++;
+ }
break;
}
}
@@ -1388,16 +1400,6 @@ unsigned int uccp420wlan_proc_tx_dscrd_chsw(struct mac80211_dev *dev,
goto tx_done;
}

- if (txq_len == 1)
- dev->stats->tx_cmd_send_count_single--;
- else
- dev->stats->tx_cmd_send_count_multi--;
-
-out:
- spin_unlock_bh(&tx->lock);
-
- return pkts_pend;
-
tx_done:
skb_queue_walk_safe(&tx_done_list, skb, tmp) {
tx_status(skb,
@@ -1407,6 +1409,15 @@ tx_done:
tx_info_1st_mpdu);
}

+ spin_lock_bh(&tx->lock);
+out:
+ if (!pkts_pend) {
+ /* Mark the token as available */
+ free_token(dev, desc_id, tx_done->queue);
+ dev->tx.desc_chan_map[desc_id] = -1;
+ }
+ spin_unlock_bh(&tx->lock);
+
return pkts_pend;
}
#endif
--
2.6.2

Loading

0 comments on commit 9ef30b6

Please sign in to comment.