diff options
| -rw-r--r-- | drivers/bcma/driver_chipcommon_nflash.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/brcm80211/brcmsmac/main.c | 25 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/dvm/tx.c | 24 | ||||
| -rw-r--r-- | drivers/net/wireless/mwifiex/scan.c | 9 | ||||
| -rw-r--r-- | drivers/net/wireless/rtlwifi/usb.c | 4 | ||||
| -rw-r--r-- | net/wireless/scan.c | 2 |
6 files changed, 25 insertions, 41 deletions
diff --git a/drivers/bcma/driver_chipcommon_nflash.c b/drivers/bcma/driver_chipcommon_nflash.c index dbda91e4dff5..1f0b83e18f68 100644 --- a/drivers/bcma/driver_chipcommon_nflash.c +++ b/drivers/bcma/driver_chipcommon_nflash.c | |||
| @@ -21,7 +21,7 @@ int bcma_nflash_init(struct bcma_drv_cc *cc) | |||
| 21 | struct bcma_bus *bus = cc->core->bus; | 21 | struct bcma_bus *bus = cc->core->bus; |
| 22 | 22 | ||
| 23 | if (bus->chipinfo.id != BCMA_CHIP_ID_BCM4706 && | 23 | if (bus->chipinfo.id != BCMA_CHIP_ID_BCM4706 && |
| 24 | cc->core->id.rev != 0x38) { | 24 | cc->core->id.rev != 38) { |
| 25 | bcma_err(bus, "NAND flash on unsupported board!\n"); | 25 | bcma_err(bus, "NAND flash on unsupported board!\n"); |
| 26 | return -ENOTSUPP; | 26 | return -ENOTSUPP; |
| 27 | } | 27 | } |
diff --git a/drivers/net/wireless/brcm80211/brcmsmac/main.c b/drivers/net/wireless/brcm80211/brcmsmac/main.c index 17594de4199e..9f3d7e9f3bb5 100644 --- a/drivers/net/wireless/brcm80211/brcmsmac/main.c +++ b/drivers/net/wireless/brcm80211/brcmsmac/main.c | |||
| @@ -1027,7 +1027,6 @@ brcms_c_dotxstatus(struct brcms_c_info *wlc, struct tx_status *txs) | |||
| 1027 | static bool | 1027 | static bool |
| 1028 | brcms_b_txstatus(struct brcms_hardware *wlc_hw, bool bound, bool *fatal) | 1028 | brcms_b_txstatus(struct brcms_hardware *wlc_hw, bool bound, bool *fatal) |
| 1029 | { | 1029 | { |
| 1030 | bool morepending = false; | ||
| 1031 | struct bcma_device *core; | 1030 | struct bcma_device *core; |
| 1032 | struct tx_status txstatus, *txs; | 1031 | struct tx_status txstatus, *txs; |
| 1033 | u32 s1, s2; | 1032 | u32 s1, s2; |
| @@ -1041,23 +1040,20 @@ brcms_b_txstatus(struct brcms_hardware *wlc_hw, bool bound, bool *fatal) | |||
| 1041 | txs = &txstatus; | 1040 | txs = &txstatus; |
| 1042 | core = wlc_hw->d11core; | 1041 | core = wlc_hw->d11core; |
| 1043 | *fatal = false; | 1042 | *fatal = false; |
| 1044 | s1 = bcma_read32(core, D11REGOFFS(frmtxstatus)); | ||
| 1045 | while (!(*fatal) | ||
| 1046 | && (s1 & TXS_V)) { | ||
| 1047 | /* !give others some time to run! */ | ||
| 1048 | if (n >= max_tx_num) { | ||
| 1049 | morepending = true; | ||
| 1050 | break; | ||
| 1051 | } | ||
| 1052 | 1043 | ||
| 1044 | while (n < max_tx_num) { | ||
| 1045 | s1 = bcma_read32(core, D11REGOFFS(frmtxstatus)); | ||
| 1053 | if (s1 == 0xffffffff) { | 1046 | if (s1 == 0xffffffff) { |
| 1054 | brcms_err(core, "wl%d: %s: dead chip\n", wlc_hw->unit, | 1047 | brcms_err(core, "wl%d: %s: dead chip\n", wlc_hw->unit, |
| 1055 | __func__); | 1048 | __func__); |
| 1056 | *fatal = true; | 1049 | *fatal = true; |
| 1057 | return false; | 1050 | return false; |
| 1058 | } | 1051 | } |
| 1059 | s2 = bcma_read32(core, D11REGOFFS(frmtxstatus2)); | 1052 | /* only process when valid */ |
| 1053 | if (!(s1 & TXS_V)) | ||
| 1054 | break; | ||
| 1060 | 1055 | ||
| 1056 | s2 = bcma_read32(core, D11REGOFFS(frmtxstatus2)); | ||
| 1061 | txs->status = s1 & TXS_STATUS_MASK; | 1057 | txs->status = s1 & TXS_STATUS_MASK; |
| 1062 | txs->frameid = (s1 & TXS_FID_MASK) >> TXS_FID_SHIFT; | 1058 | txs->frameid = (s1 & TXS_FID_MASK) >> TXS_FID_SHIFT; |
| 1063 | txs->sequence = s2 & TXS_SEQ_MASK; | 1059 | txs->sequence = s2 & TXS_SEQ_MASK; |
| @@ -1065,15 +1061,12 @@ brcms_b_txstatus(struct brcms_hardware *wlc_hw, bool bound, bool *fatal) | |||
| 1065 | txs->lasttxtime = 0; | 1061 | txs->lasttxtime = 0; |
| 1066 | 1062 | ||
| 1067 | *fatal = brcms_c_dotxstatus(wlc_hw->wlc, txs); | 1063 | *fatal = brcms_c_dotxstatus(wlc_hw->wlc, txs); |
| 1068 | 1064 | if (*fatal == true) | |
| 1069 | s1 = bcma_read32(core, D11REGOFFS(frmtxstatus)); | 1065 | return false; |
| 1070 | n++; | 1066 | n++; |
| 1071 | } | 1067 | } |
| 1072 | 1068 | ||
| 1073 | if (*fatal) | 1069 | return n >= max_tx_num; |
| 1074 | return false; | ||
| 1075 | |||
| 1076 | return morepending; | ||
| 1077 | } | 1070 | } |
| 1078 | 1071 | ||
| 1079 | static void brcms_c_tbtt(struct brcms_c_info *wlc) | 1072 | static void brcms_c_tbtt(struct brcms_c_info *wlc) |
diff --git a/drivers/net/wireless/iwlwifi/dvm/tx.c b/drivers/net/wireless/iwlwifi/dvm/tx.c index 31534f7c0548..279796419ea0 100644 --- a/drivers/net/wireless/iwlwifi/dvm/tx.c +++ b/drivers/net/wireless/iwlwifi/dvm/tx.c | |||
| @@ -1153,6 +1153,13 @@ int iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb, | |||
| 1153 | next_reclaimed = ssn; | 1153 | next_reclaimed = ssn; |
| 1154 | } | 1154 | } |
| 1155 | 1155 | ||
| 1156 | if (tid != IWL_TID_NON_QOS) { | ||
| 1157 | priv->tid_data[sta_id][tid].next_reclaimed = | ||
| 1158 | next_reclaimed; | ||
| 1159 | IWL_DEBUG_TX_REPLY(priv, "Next reclaimed packet:%d\n", | ||
| 1160 | next_reclaimed); | ||
| 1161 | } | ||
| 1162 | |||
| 1156 | iwl_trans_reclaim(priv->trans, txq_id, ssn, &skbs); | 1163 | iwl_trans_reclaim(priv->trans, txq_id, ssn, &skbs); |
| 1157 | 1164 | ||
| 1158 | iwlagn_check_ratid_empty(priv, sta_id, tid); | 1165 | iwlagn_check_ratid_empty(priv, sta_id, tid); |
| @@ -1203,28 +1210,11 @@ int iwlagn_rx_reply_tx(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb, | |||
| 1203 | if (!is_agg) | 1210 | if (!is_agg) |
| 1204 | iwlagn_non_agg_tx_status(priv, ctx, hdr->addr1); | 1211 | iwlagn_non_agg_tx_status(priv, ctx, hdr->addr1); |
| 1205 | 1212 | ||
| 1206 | /* | ||
| 1207 | * W/A for FW bug - the seq_ctl isn't updated when the | ||
| 1208 | * queues are flushed. Fetch it from the packet itself | ||
| 1209 | */ | ||
| 1210 | if (!is_agg && status == TX_STATUS_FAIL_FIFO_FLUSHED) { | ||
| 1211 | next_reclaimed = le16_to_cpu(hdr->seq_ctrl); | ||
| 1212 | next_reclaimed = | ||
| 1213 | SEQ_TO_SN(next_reclaimed + 0x10); | ||
| 1214 | } | ||
| 1215 | |||
| 1216 | is_offchannel_skb = | 1213 | is_offchannel_skb = |
| 1217 | (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN); | 1214 | (info->flags & IEEE80211_TX_CTL_TX_OFFCHAN); |
| 1218 | freed++; | 1215 | freed++; |
| 1219 | } | 1216 | } |
| 1220 | 1217 | ||
| 1221 | if (tid != IWL_TID_NON_QOS) { | ||
| 1222 | priv->tid_data[sta_id][tid].next_reclaimed = | ||
| 1223 | next_reclaimed; | ||
| 1224 | IWL_DEBUG_TX_REPLY(priv, "Next reclaimed packet:%d\n", | ||
| 1225 | next_reclaimed); | ||
| 1226 | } | ||
| 1227 | |||
| 1228 | WARN_ON(!is_agg && freed != 1); | 1218 | WARN_ON(!is_agg && freed != 1); |
| 1229 | 1219 | ||
| 1230 | /* | 1220 | /* |
diff --git a/drivers/net/wireless/mwifiex/scan.c b/drivers/net/wireless/mwifiex/scan.c index 9189a32b7844..973a9d90e9ea 100644 --- a/drivers/net/wireless/mwifiex/scan.c +++ b/drivers/net/wireless/mwifiex/scan.c | |||
| @@ -1563,7 +1563,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv, | |||
| 1563 | dev_err(adapter->dev, "SCAN_RESP: too many AP returned (%d)\n", | 1563 | dev_err(adapter->dev, "SCAN_RESP: too many AP returned (%d)\n", |
| 1564 | scan_rsp->number_of_sets); | 1564 | scan_rsp->number_of_sets); |
| 1565 | ret = -1; | 1565 | ret = -1; |
| 1566 | goto done; | 1566 | goto check_next_scan; |
| 1567 | } | 1567 | } |
| 1568 | 1568 | ||
| 1569 | bytes_left = le16_to_cpu(scan_rsp->bss_descript_size); | 1569 | bytes_left = le16_to_cpu(scan_rsp->bss_descript_size); |
| @@ -1634,7 +1634,8 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv, | |||
| 1634 | if (!beacon_size || beacon_size > bytes_left) { | 1634 | if (!beacon_size || beacon_size > bytes_left) { |
| 1635 | bss_info += bytes_left; | 1635 | bss_info += bytes_left; |
| 1636 | bytes_left = 0; | 1636 | bytes_left = 0; |
| 1637 | return -1; | 1637 | ret = -1; |
| 1638 | goto check_next_scan; | ||
| 1638 | } | 1639 | } |
| 1639 | 1640 | ||
| 1640 | /* Initialize the current working beacon pointer for this BSS | 1641 | /* Initialize the current working beacon pointer for this BSS |
| @@ -1690,7 +1691,7 @@ int mwifiex_ret_802_11_scan(struct mwifiex_private *priv, | |||
| 1690 | dev_err(priv->adapter->dev, | 1691 | dev_err(priv->adapter->dev, |
| 1691 | "%s: bytes left < IE length\n", | 1692 | "%s: bytes left < IE length\n", |
| 1692 | __func__); | 1693 | __func__); |
| 1693 | goto done; | 1694 | goto check_next_scan; |
| 1694 | } | 1695 | } |
| 1695 | if (element_id == WLAN_EID_DS_PARAMS) { | 1696 | if (element_id == WLAN_EID_DS_PARAMS) { |
| 1696 | channel = *(current_ptr | ||
