diff options
Diffstat (limited to 'drivers/net/wireless/mwifiex/11n_rxreorder.c')
-rw-r--r-- | drivers/net/wireless/mwifiex/11n_rxreorder.c | 42 |
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 06f5d3684027..9c44088054dd 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 | */ |
221 | static void | 221 | static void |
222 | mwifiex_11n_create_rx_reorder_tbl(struct mwifiex_private *priv, u8 *ta, | 222 | mwifiex_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); |