mirror of
https://github.com/torvalds/linux.git
synced 2024-12-29 14:21:47 +00:00
mwl8k: Enable support to support additional ampdu streams
Currently, we have 2 ampdu streams that can be created simultaneously. Firmware is capable of supporting additional streams. Add support to use these streams. Signed-off-by: Nishant Sarmukadam <nishants@marvell.com> Signed-off-by: Yogesh Ashok Powar <yogeshp@marvell.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
5f2a14940d
commit
7fb978b7e9
@ -101,6 +101,18 @@ MODULE_PARM_DESC(ap_mode_default,
|
||||
#define MWL8K_MAX_TX_QUEUES (MWL8K_TX_WMM_QUEUES + MWL8K_MAX_AMPDU_QUEUES)
|
||||
#define mwl8k_tx_queues(priv) (MWL8K_TX_WMM_QUEUES + (priv)->num_ampdu_queues)
|
||||
|
||||
/* txpriorities are mapped with hw queues.
|
||||
* Each hw queue has a txpriority.
|
||||
*/
|
||||
#define TOTAL_HW_TX_QUEUES 8
|
||||
|
||||
/* Each HW queue can have one AMPDU stream.
|
||||
* But, because one of the hw queue is reserved,
|
||||
* maximum AMPDU queues that can be created are
|
||||
* one short of total tx queues.
|
||||
*/
|
||||
#define MWL8K_NUM_AMPDU_STREAMS (TOTAL_HW_TX_QUEUES - 1)
|
||||
|
||||
struct rxd_ops {
|
||||
int rxd_size;
|
||||
void (*rxd_init)(void *rxd, dma_addr_t next_dma_addr);
|
||||
@ -1733,7 +1745,7 @@ mwl8k_add_stream(struct ieee80211_hw *hw, struct ieee80211_sta *sta, u8 tid)
|
||||
struct mwl8k_priv *priv = hw->priv;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < priv->num_ampdu_queues; i++) {
|
||||
for (i = 0; i < MWL8K_NUM_AMPDU_STREAMS; i++) {
|
||||
stream = &priv->ampdu[i];
|
||||
if (stream->state == AMPDU_NO_STREAM) {
|
||||
stream->sta = sta;
|
||||
@ -1780,7 +1792,7 @@ mwl8k_lookup_stream(struct ieee80211_hw *hw, u8 *addr, u8 tid)
|
||||
struct mwl8k_priv *priv = hw->priv;
|
||||
int i;
|
||||
|
||||
for (i = 0 ; i < priv->num_ampdu_queues; i++) {
|
||||
for (i = 0; i < MWL8K_NUM_AMPDU_STREAMS; i++) {
|
||||
struct mwl8k_ampdu_stream *stream;
|
||||
stream = &priv->ampdu[i];
|
||||
if (stream->state == AMPDU_NO_STREAM)
|
||||
@ -1827,6 +1839,13 @@ static inline void mwl8k_tx_count_packet(struct ieee80211_sta *sta, u8 tid)
|
||||
tx_stats->pkts++;
|
||||
}
|
||||
|
||||
/* The hardware ampdu queues start from 5.
|
||||
* txpriorities for ampdu queues are
|
||||
* 5 6 7 0 1 2 3 4 ie., queue 5 is highest
|
||||
* and queue 3 is lowest (queue 4 is reserved)
|
||||
*/
|
||||
#define BA_QUEUE 5
|
||||
|
||||
static void
|
||||
mwl8k_txq_xmit(struct ieee80211_hw *hw,
|
||||
int index,
|
||||
@ -1927,8 +1946,12 @@ mwl8k_txq_xmit(struct ieee80211_hw *hw,
|
||||
if (stream != NULL) {
|
||||
if (stream->state == AMPDU_STREAM_ACTIVE) {
|
||||
WARN_ON(!(qos & MWL8K_QOS_ACK_POLICY_BLOCKACK));
|
||||
txpriority = stream->idx + MWL8K_TX_WMM_QUEUES;
|
||||
index = stream->idx + MWL8K_TX_WMM_QUEUES;
|
||||
txpriority = (BA_QUEUE + stream->idx) %
|
||||
TOTAL_HW_TX_QUEUES;
|
||||
if (stream->idx <= 1)
|
||||
index = stream->idx +
|
||||
MWL8K_TX_WMM_QUEUES;
|
||||
|
||||
} else if (stream->state == AMPDU_STREAM_NEW) {
|
||||
/* We get here if the driver sends us packets
|
||||
* after we've initiated a stream, but before
|
||||
|
Loading…
Reference in New Issue
Block a user