mwifiex: create separate function mwifiex_11n_dispatch_pkt()

Existing mwifiex_11n_dispatch_pkt() function is renamed as
mwifiex_11n_dispatch_pkt_until_start_win() and a new function
mwifiex_11n_dispatch_pkt() is created for a common code which
dispatches single packet based on interface type.

Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Amitkumar Karwar 2014-03-07 19:41:30 -08:00 committed by John W. Linville
parent 63410c37d2
commit 5e6e43eb20

View File

@ -26,6 +26,17 @@
#include "11n.h" #include "11n.h"
#include "11n_rxreorder.h" #include "11n_rxreorder.h"
/* This function will process the rx packet and forward it to kernel/upper
* layer.
*/
static int mwifiex_11n_dispatch_pkt(struct mwifiex_private *priv, void *payload)
{
if (priv->bss_role == MWIFIEX_BSS_ROLE_UAP)
return mwifiex_handle_uap_rx_forward(priv, payload);
return mwifiex_process_rx_packet(priv, payload);
}
/* /*
* This function dispatches all packets in the Rx reorder table until the * This function dispatches all packets in the Rx reorder table until the
* start window. * start window.
@ -35,8 +46,9 @@
* circular buffer. * circular buffer.
*/ */
static void static void
mwifiex_11n_dispatch_pkt(struct mwifiex_private *priv, mwifiex_11n_dispatch_pkt_until_start_win(struct mwifiex_private *priv,
struct mwifiex_rx_reorder_tbl *tbl, int start_win) struct mwifiex_rx_reorder_tbl *tbl,
int start_win)
{ {
int pkt_to_send, i; int pkt_to_send, i;
void *rx_tmp_ptr; void *rx_tmp_ptr;
@ -54,12 +66,8 @@ mwifiex_11n_dispatch_pkt(struct mwifiex_private *priv,
tbl->rx_reorder_ptr[i] = NULL; tbl->rx_reorder_ptr[i] = NULL;
} }
spin_unlock_irqrestore(&priv->rx_pkt_lock, flags); spin_unlock_irqrestore(&priv->rx_pkt_lock, flags);
if (rx_tmp_ptr) { if (rx_tmp_ptr)
if (priv->bss_role == MWIFIEX_BSS_ROLE_UAP) mwifiex_11n_dispatch_pkt(priv, rx_tmp_ptr);
mwifiex_handle_uap_rx_forward(priv, rx_tmp_ptr);
else
mwifiex_process_rx_packet(priv, rx_tmp_ptr);
}
} }
spin_lock_irqsave(&priv->rx_pkt_lock, flags); spin_lock_irqsave(&priv->rx_pkt_lock, flags);
@ -101,11 +109,7 @@ mwifiex_11n_scan_and_dispatch(struct mwifiex_private *priv,
rx_tmp_ptr = tbl->rx_reorder_ptr[i]; rx_tmp_ptr = tbl->rx_reorder_ptr[i];
tbl->rx_reorder_ptr[i] = NULL; tbl->rx_reorder_ptr[i] = NULL;
spin_unlock_irqrestore(&priv->rx_pkt_lock, flags); spin_unlock_irqrestore(&priv->rx_pkt_lock, flags);
mwifiex_11n_dispatch_pkt(priv, rx_tmp_ptr);
if (priv->bss_role == MWIFIEX_BSS_ROLE_UAP)
mwifiex_handle_uap_rx_forward(priv, rx_tmp_ptr);
else
mwifiex_process_rx_packet(priv, rx_tmp_ptr);
} }
spin_lock_irqsave(&priv->rx_pkt_lock, flags); spin_lock_irqsave(&priv->rx_pkt_lock, flags);
@ -141,7 +145,7 @@ mwifiex_del_rx_reorder_entry(struct mwifiex_private *priv,
return; return;
start_win = (tbl->start_win + tbl->win_size) & (MAX_TID_VALUE - 1); start_win = (tbl->start_win + tbl->win_size) & (MAX_TID_VALUE - 1);
mwifiex_11n_dispatch_pkt(priv, tbl, start_win); mwifiex_11n_dispatch_pkt_until_start_win(priv, tbl, start_win);
del_timer_sync(&tbl->timer_context.timer); del_timer_sync(&tbl->timer_context.timer);
@ -238,7 +242,8 @@ mwifiex_flush_data(unsigned long context)
dev_dbg(ctx->priv->adapter->dev, "info: flush data %d\n", seq_num); dev_dbg(ctx->priv->adapter->dev, "info: flush data %d\n", seq_num);
start_win = (ctx->ptr->start_win + seq_num + 1) & (MAX_TID_VALUE - 1); start_win = (ctx->ptr->start_win + seq_num + 1) & (MAX_TID_VALUE - 1);
mwifiex_11n_dispatch_pkt(ctx->priv, ctx->ptr, start_win); mwifiex_11n_dispatch_pkt_until_start_win(ctx->priv, ctx->ptr,
start_win);
} }
/* /*
@ -267,7 +272,7 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,
*/ */
tbl = mwifiex_11n_get_rx_reorder_tbl(priv, tid, ta); tbl = mwifiex_11n_get_rx_reorder_tbl(priv, tid, ta);
if (tbl) { if (tbl) {
mwifiex_11n_dispatch_pkt(priv, tbl, seq_num); mwifiex_11n_dispatch_pkt_until_start_win(priv, tbl, seq_num);
return; return;
} }
/* if !tbl then create one */ /* if !tbl then create one */
@ -459,12 +464,8 @@ int mwifiex_11n_rx_reorder_pkt(struct mwifiex_private *priv,
tbl = mwifiex_11n_get_rx_reorder_tbl(priv, tid, ta); tbl = mwifiex_11n_get_rx_reorder_tbl(priv, tid, ta);
if (!tbl) { if (!tbl) {
if (pkt_type != PKT_TYPE_BAR) { if (pkt_type != PKT_TYPE_BAR)
if (priv->bss_role == MWIFIEX_BSS_ROLE_UAP) mwifiex_11n_dispatch_pkt(priv, payload);
mwifiex_handle_uap_rx_forward(priv, payload);
else
mwifiex_process_rx_packet(priv, payload);
}
return 0; return 0;
} }
start_win = tbl->start_win; start_win = tbl->start_win;
@ -520,7 +521,7 @@ int mwifiex_11n_rx_reorder_pkt(struct mwifiex_private *priv,
start_win = (end_win - win_size) + 1; start_win = (end_win - win_size) + 1;
else else
start_win = (MAX_TID_VALUE - (win_size - seq_num)) + 1; start_win = (MAX_TID_VALUE - (win_size - seq_num)) + 1;
mwifiex_11n_dispatch_pkt(priv, tbl, start_win); mwifiex_11n_dispatch_pkt_until_start_win(priv, tbl, start_win);
} }
if (pkt_type != PKT_TYPE_BAR) { if (pkt_type != PKT_TYPE_BAR) {