aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/mwifiex/11n_rxreorder.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/mwifiex/11n_rxreorder.c')
-rw-r--r--drivers/net/wireless/mwifiex/11n_rxreorder.c42
1 files changed, 22 insertions, 20 deletions
diff --git a/drivers/net/wireless/mwifiex/11n_rxreorder.c b/drivers/net/wireless/mwifiex/11n_rxreorder.c
index 06f5d368402..9c44088054d 100644
--- a/drivers/net/wireless/mwifiex/11n_rxreorder.c
+++ b/drivers/net/wireless/mwifiex/11n_rxreorder.c
@@ -220,7 +220,7 @@ mwifiex_flush_data(unsigned long context)
220 */ 220 */
221static void 221static void
222mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta, 222mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,
223 int tid, int win_size, int seq_num) 223 int tid, int win_size, int seq_num)
224{ 224{
225 int i; 225 int i;
226 struct mwifiex_rx_reorder_tbl *tbl, *new_node; 226 struct mwifiex_rx_reorder_tbl *tbl, *new_node;
@@ -240,7 +240,7 @@ mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta,
240 new_node = kzalloc(sizeof(struct mwifiex_rx_reorder_tbl), GFP_KERNEL); 240 new_node = kzalloc(sizeof(struct mwifiex_rx_reorder_tbl), GFP_KERNEL);
241 if (!new_node) { 241 if (!new_node) {
242 dev_err(priv->adapter->dev, "%s: failed to alloc new_node\n", 242 dev_err(priv->adapter->dev, "%s: failed to alloc new_node\n",
243 __func__); 243 __func__);
244 return; 244 return;
245 } 245 }
246 246
@@ -352,7 +352,8 @@ int mwifiex_cmd_11n_addba_rsp_gen(struct mwifiex_private *priv,
352 cmd_addba_req->block_ack_param_set = cpu_to_le16(block_ack_param_set); 352 cmd_addba_req->block_ack_param_set = cpu_to_le16(block_ack_param_set);
353 353
354 mwifiex_11n_create_rx_reorder_tbl(priv, cmd_addba_req->peer_mac_addr, 354 mwifiex_11n_create_rx_reorder_tbl(priv, cmd_addba_req->peer_mac_addr,
355 tid, win_size, le16_to_cpu(cmd_addba_req->ssn)); 355 tid, win_size,
356 le16_to_cpu(cmd_addba_req->ssn));
356 return 0; 357 return 0;
357} 358}
358 359
@@ -416,11 +417,11 @@ int mwifiex_11n_rx_reorder_pkt(struct mwifiex_private *priv,
416 * packet 417 * packet
417 */ 418 */
418 if ((start_win + TWOPOW11) > (MAX_TID_VALUE - 1)) {/* Wrap */ 419 if ((start_win + TWOPOW11) > (MAX_TID_VALUE - 1)) {/* Wrap */
419 if (seq_num >= ((start_win + (TWOPOW11)) & (MAX_TID_VALUE - 1)) 420 if (seq_num >= ((start_win + TWOPOW11) &
420 && (seq_num < start_win)) 421 (MAX_TID_VALUE - 1)) && (seq_num < start_win))
421 return -1; 422 return -1;
422 } else if ((seq_num < start_win) 423 } else if ((seq_num < start_win) ||
423 || (seq_num > (start_win + (TWOPOW11)))) { 424 (seq_num > (start_win + TWOPOW11))) {
424 return -1; 425 return -1;
425 } 426 }
426 427
@@ -431,10 +432,11 @@ int mwifiex_11n_rx_reorder_pkt(struct mwifiex_private *priv,
431 if (pkt_type == PKT_TYPE_BAR) 432 if (pkt_type == PKT_TYPE_BAR)
432 seq_num = ((seq_num + win_size) - 1) & (MAX_TID_VALUE - 1); 433 seq_num = ((seq_num + win_size) - 1) & (MAX_TID_VALUE - 1);
433 434
434 if (((end_win < start_win) 435 if (((end_win < start_win) &&
435 && (seq_num < (TWOPOW11 - (MAX_TID_VALUE - start_win))) 436 (seq_num < (TWOPOW11 - (MAX_TID_VALUE - start_win))) &&
436 && (seq_num > end_win)) || ((end_win > start_win) 437 (seq_num > end_win)) ||
437 && ((seq_num > end_win) || (seq_num < start_win)))) { 438 ((end_win > start_win) && ((seq_num > end_win) ||
439 (seq_num < start_win)))) {
438 end_win = seq_num; 440 end_win = seq_num;
439 if (((seq_num - win_size) + 1) >= 0) 441 if (((seq_num - win_size) + 1) >= 0)
440 start_win = (end_win - win_size) + 1; 442 start_win = (end_win - win_size) + 1;
@@ -483,15 +485,15 @@ mwifiex_del_ba_tbl(struct mwifiex_private *priv, int tid, u8 *peer_mac,
483 else 485 else
484 cleanup_rx_reorder_tbl = (initiator) ? false : true; 486 cleanup_rx_reorder_tbl = (initiator) ? false : true;
485 487
486 dev_dbg(priv->adapter->dev, "event: DELBA: %pM tid=%d, " 488 dev_dbg(priv->adapter->dev, "event: DELBA: %pM tid=%d initiator=%d\n",
487 "initiator=%d\n", peer_mac, tid, initiator); 489 peer_mac, tid, initiator);
488 490
489 if (cleanup_rx_reorder_tbl) { 491 if (cleanup_rx_reorder_tbl) {
490 tbl = mwifiex_11n_get_rx_reorder_tbl(priv, tid, 492 tbl = mwifiex_11n_get_rx_reorder_tbl(priv, tid,
491 peer_mac); 493 peer_mac);
492 if (!tbl) { 494 if (!tbl) {
493 dev_dbg(priv->adapter->dev, 495 dev_dbg(priv->adapter->dev,
494 "event: TID, TA not found in table\n"); 496 "event: TID, TA not found in table\n");
495 return; 497 return;
496 } 498 }
497 mwifiex_del_rx_reorder_entry(priv, tbl); 499 mwifiex_del_rx_reorder_entry(priv, tbl);
@@ -499,7 +501,7 @@ mwifiex_del_ba_tbl(struct mwifiex_private *priv, int tid, u8 *peer_mac,
499 ptx_tbl = mwifiex_get_ba_tbl(priv, tid, peer_mac); 501 ptx_tbl = mwifiex_get_ba_tbl(priv, tid, peer_mac);
500 if (!ptx_tbl) { 502 if (!ptx_tbl) {
501 dev_dbg(priv->adapter->dev, 503 dev_dbg(priv->adapter->dev,
502 "event: TID, RA not found in table\n"); 504 "event: TID, RA not found in table\n");
503 return; 505 return;
504 } 506 }
505 507
@@ -538,13 +540,13 @@ int mwifiex_ret_11n_addba_resp(struct mwifiex_private *priv,
538 IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK) 540 IEEE80211_ADDBA_PARAM_BUF_SIZE_MASK)
539 >> BLOCKACKPARAM_WINSIZE_POS; 541 >> BLOCKACKPARAM_WINSIZE_POS;
540 542
541 dev_dbg(priv->adapter->dev, "cmd: ADDBA RSP: %pM" 543 dev_dbg(priv->adapter->dev,
542 " tid=%d ssn=%d win_size=%d\n", 544 "cmd: ADDBA RSP: %pM tid=%d ssn=%d win_size=%d\n",
543 add_ba_rsp->peer_mac_addr, 545 add_ba_rsp->peer_mac_addr, tid,
544 tid, add_ba_rsp->ssn, win_size); 546 add_ba_rsp->ssn, win_size);
545 } else { 547 } else {
546 dev_err(priv->adapter->dev, "ADDBA RSP: failed %pM tid=%d)\n", 548 dev_err(priv->adapter->dev, "ADDBA RSP: failed %pM tid=%d)\n",
547 add_ba_rsp->peer_mac_addr, tid); 549 add_ba_rsp->peer_mac_addr, tid);
548 550
549 tbl = mwifiex_11n_get_rx_reorder_tbl(priv, tid, 551 tbl = mwifiex_11n_get_rx_reorder_tbl(priv, tid,
550 add_ba_rsp->peer_mac_addr); 552 add_ba_rsp->peer_mac_addr);