diff options
Diffstat (limited to 'drivers/net/wireless/iwlwifi/mvm')
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/d3.c | 2 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw-api-power.h | 34 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h | 44 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw-api.h | 13 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/fw.c | 54 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mac80211.c | 26 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/mvm.h | 1 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/ops.c | 10 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/rx.c | 5 | ||||
| -rw-r--r-- | drivers/net/wireless/iwlwifi/mvm/scan.c | 2 |
10 files changed, 97 insertions, 94 deletions
diff --git a/drivers/net/wireless/iwlwifi/mvm/d3.c b/drivers/net/wireless/iwlwifi/mvm/d3.c index a6c48c7b1e16..1b1b2bf26819 100644 --- a/drivers/net/wireless/iwlwifi/mvm/d3.c +++ b/drivers/net/wireless/iwlwifi/mvm/d3.c | |||
| @@ -1726,7 +1726,7 @@ iwl_mvm_netdetect_query_results(struct iwl_mvm *mvm, | |||
| 1726 | results->matched_profiles = le32_to_cpu(query->matched_profiles); | 1726 | results->matched_profiles = le32_to_cpu(query->matched_profiles); |
| 1727 | memcpy(results->matches, query->matches, sizeof(results->matches)); | 1727 | memcpy(results->matches, query->matches, sizeof(results->matches)); |
| 1728 | 1728 | ||
| 1729 | #ifdef CPTCFG_IWLWIFI_DEBUGFS | 1729 | #ifdef CONFIG_IWLWIFI_DEBUGFS |
| 1730 | mvm->last_netdetect_scans = le32_to_cpu(query->n_scans_done); | 1730 | mvm->last_netdetect_scans = le32_to_cpu(query->n_scans_done); |
| 1731 | #endif | 1731 | #endif |
| 1732 | 1732 | ||
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-power.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-power.h index 4fc0938b3fb6..b1baa33cc19b 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw-api-power.h +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-power.h | |||
| @@ -298,6 +298,40 @@ struct iwl_uapsd_misbehaving_ap_notif { | |||
| 298 | } __packed; | 298 | } __packed; |
| 299 | 299 | ||
| 300 | /** | 300 | /** |
| 301 | * struct iwl_reduce_tx_power_cmd - TX power reduction command | ||
| 302 | * REDUCE_TX_POWER_CMD = 0x9f | ||
| 303 | * @flags: (reserved for future implementation) | ||
| 304 | * @mac_context_id: id of the mac ctx for which we are reducing TX power. | ||
| 305 | * @pwr_restriction: TX power restriction in dBms. | ||
| 306 | */ | ||
| 307 | struct iwl_reduce_tx_power_cmd { | ||
| 308 | u8 flags; | ||
| 309 | u8 mac_context_id; | ||
| 310 | __le16 pwr_restriction; | ||
| 311 | } __packed; /* TX_REDUCED_POWER_API_S_VER_1 */ | ||
| 312 | |||
| 313 | /** | ||
| 314 | * struct iwl_dev_tx_power_cmd - TX power reduction command | ||
| 315 | * REDUCE_TX_POWER_CMD = 0x9f | ||
| 316 | * @set_mode: 0 - MAC tx power, 1 - device tx power | ||
| 317 | * @mac_context_id: id of the mac ctx for which we are reducing TX power. | ||
| 318 | * @pwr_restriction: TX power restriction in 1/8 dBms. | ||
| 319 | * @dev_24: device TX power restriction in 1/8 dBms | ||
| 320 | * @dev_52_low: device TX power restriction upper band - low | ||
| 321 | * @dev_52_high: device TX power restriction upper band - high | ||
| 322 | */ | ||
| 323 | struct iwl_dev_tx_power_cmd { | ||
| 324 | __le32 set_mode; | ||
| 325 | __le32 mac_context_id; | ||
| 326 | __le16 pwr_restriction; | ||
| 327 | __le16 dev_24; | ||
| 328 | __le16 dev_52_low; | ||
| 329 | __le16 dev_52_high; | ||
| 330 | } __packed; /* TX_REDUCED_POWER_API_S_VER_2 */ | ||
| 331 | |||
| 332 | #define IWL_DEV_MAX_TX_POWER 0x7FFF | ||
| 333 | |||
| 334 | /** | ||
| 301 | * struct iwl_beacon_filter_cmd | 335 | * struct iwl_beacon_filter_cmd |
| 302 | * REPLY_BEACON_FILTERING_CMD = 0xd2 (command) | 336 | * REPLY_BEACON_FILTERING_CMD = 0xd2 (command) |
| 303 | * @id_and_color: MAC contex identifier | 337 | * @id_and_color: MAC contex identifier |
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h b/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h index 4f81dcf57a73..d6cced47d561 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api-scan.h | |||
| @@ -122,46 +122,6 @@ enum iwl_scan_complete_status { | |||
| 122 | SCAN_COMP_STATUS_ERR_ALLOC_TE = 0x0C, | 122 | SCAN_COMP_STATUS_ERR_ALLOC_TE = 0x0C, |
| 123 | }; | 123 | }; |
| 124 | 124 | ||
| 125 | /** | ||
| 126 | * struct iwl_scan_results_notif - scan results for one channel | ||
| 127 | * ( SCAN_RESULTS_NOTIFICATION = 0x83 ) | ||
| 128 | * @channel: which channel the results are from | ||
| 129 | * @band: 0 for 5.2 GHz, 1 for 2.4 GHz | ||
| 130 | * @probe_status: SCAN_PROBE_STATUS_*, indicates success of probe request | ||
| 131 | * @num_probe_not_sent: # of request that weren't sent due to not enough time | ||
| 132 | * @duration: duration spent in channel, in usecs | ||
| 133 | * @statistics: statistics gathered for this channel | ||
| 134 | */ | ||
| 135 | struct iwl_scan_results_notif { | ||
| 136 | u8 channel; | ||
| 137 | u8 band; | ||
| 138 | u8 probe_status; | ||
| 139 | u8 num_probe_not_sent; | ||
| 140 | __le32 duration; | ||
| 141 | __le32 statistics[SCAN_RESULTS_STATISTICS]; | ||
| 142 | } __packed; /* SCAN_RESULT_NTF_API_S_VER_2 */ | ||
| 143 | |||
| 144 | /** | ||
| 145 | * struct iwl_scan_complete_notif - notifies end of scanning (all channels) | ||
| 146 | * ( SCAN_COMPLETE_NOTIFICATION = 0x84 ) | ||
| 147 | * @scanned_channels: number of channels scanned (and number of valid results) | ||
| 148 | * @status: one of SCAN_COMP_STATUS_* | ||
| 149 | * @bt_status: BT on/off status | ||
| 150 | * @last_channel: last channel that was scanned | ||
| 151 | * @tsf_low: TSF timer (lower half) in usecs | ||
| 152 | * @tsf_high: TSF timer (higher half) in usecs | ||
| 153 | * @results: array of scan results, only "scanned_channels" of them are valid | ||
| 154 | */ | ||
| 155 | struct iwl_scan_complete_notif { | ||
| 156 | u8 scanned_channels; | ||
| 157 | u8 status; | ||
| 158 | u8 bt_status; | ||
| 159 | u8 last_channel; | ||
| 160 | __le32 tsf_low; | ||
| 161 | __le32 tsf_high; | ||
| 162 | struct iwl_scan_results_notif results[]; | ||
| 163 | } __packed; /* SCAN_COMPLETE_NTF_API_S_VER_2 */ | ||
| 164 | |||
| 165 | /* scan offload */ | 125 | /* scan offload */ |
| 166 | #define IWL_SCAN_MAX_BLACKLIST_LEN 64 | 126 | #define IWL_SCAN_MAX_BLACKLIST_LEN 64 |
| 167 | #define IWL_SCAN_SHORT_BLACKLIST_LEN 16 | 127 | #define IWL_SCAN_SHORT_BLACKLIST_LEN 16 |
| @@ -554,7 +514,7 @@ struct iwl_scan_req_unified_lmac { | |||
| 554 | } __packed; | 514 | } __packed; |
| 555 | 515 | ||
| 556 | /** | 516 | /** |
| 557 | * struct iwl_lmac_scan_results_notif - scan results for one channel - | 517 | * struct iwl_scan_results_notif - scan results for one channel - |
| 558 | * SCAN_RESULT_NTF_API_S_VER_3 | 518 | * SCAN_RESULT_NTF_API_S_VER_3 |
| 559 | * @channel: which channel the results are from | 519 | * @channel: which channel the results are from |
| 560 | * @band: 0 for 5.2 GHz, 1 for 2.4 GHz | 520 | * @band: 0 for 5.2 GHz, 1 for 2.4 GHz |
| @@ -562,7 +522,7 @@ struct iwl_scan_req_unified_lmac { | |||
| 562 | * @num_probe_not_sent: # of request that weren't sent due to not enough time | 522 | * @num_probe_not_sent: # of request that weren't sent due to not enough time |
| 563 | * @duration: duration spent in channel, in usecs | 523 | * @duration: duration spent in channel, in usecs |
| 564 | */ | 524 | */ |
| 565 | struct iwl_lmac_scan_results_notif { | 525 | struct iwl_scan_results_notif { |
| 566 | u8 channel; | 526 | u8 channel; |
| 567 | u8 band; | 527 | u8 band; |
| 568 | u8 probe_status; | 528 | u8 probe_status; |
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw-api.h b/drivers/net/wireless/iwlwifi/mvm/fw-api.h index aab68cbae754..01b1da6ad359 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw-api.h +++ b/drivers/net/wireless/iwlwifi/mvm/fw-api.h | |||
| @@ -281,19 +281,6 @@ struct iwl_tx_ant_cfg_cmd { | |||
| 281 | __le32 valid; | 281 | __le32 valid; |
| 282 | } __packed; | 282 | } __packed; |
| 283 | 283 | ||
| 284 | /** | ||
| 285 | * struct iwl_reduce_tx_power_cmd - TX power reduction command | ||
| 286 | * REDUCE_TX_POWER_CMD = 0x9f | ||
| 287 | * @flags: (reserved for future implementation) | ||
| 288 | * @mac_context_id: id of the mac ctx for which we are reducing TX power. | ||
| 289 | * @pwr_restriction: TX power restriction in dBms. | ||
| 290 | */ | ||
| 291 | struct iwl_reduce_tx_power_cmd { | ||
| 292 | u8 flags; | ||
| 293 | u8 mac_context_id; | ||
| 294 | __le16 pwr_restriction; | ||
| 295 | } __packed; /* TX_REDUCED_POWER_API_S_VER_1 */ | ||
| 296 | |||
| 297 | /* | 284 | /* |
| 298 | * Calibration control struct. | 285 | * Calibration control struct. |
| 299 | * Sent as part of the phy configuration command. | 286 | * Sent as part of the phy configuration command. |
diff --git a/drivers/net/wireless/iwlwifi/mvm/fw.c b/drivers/net/wireless/iwlwifi/mvm/fw.c index bc5eac4960e1..df869633f4dd 100644 --- a/drivers/net/wireless/iwlwifi/mvm/fw.c +++ b/drivers/net/wireless/iwlwifi/mvm/fw.c | |||
| @@ -6,7 +6,7 @@ | |||
| 6 | * GPL LICENSE SUMMARY | 6 | * GPL LICENSE SUMMARY |
| 7 | * | 7 | * |
| 8 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. | 8 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. |
| 9 | * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH | 9 | * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH |
| 10 | * | 10 | * |
| 11 | * This program is free software; you can redistribute it and/or modify | 11 | * This program is free software; you can redistribute it and/or modify |
| 12 | * it under the terms of version 2 of the GNU General Public License as | 12 | * it under the terms of version 2 of the GNU General Public License as |
| @@ -32,7 +32,7 @@ | |||
| 32 | * BSD LICENSE | 32 | * BSD LICENSE |
| 33 | * | 33 | * |
| 34 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. | 34 | * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved. |
| 35 | * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH | 35 | * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH |
| 36 | * All rights reserved. | 36 | * All rights reserved. |
| 37 | * | 37 | * |
| 38 | * Redistribution and use in source and binary forms, with or without | 38 | * Redistribution and use in source and binary forms, with or without |
| @@ -322,7 +322,7 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm) | |||
| 322 | 322 | ||
| 323 | lockdep_assert_held(&mvm->mutex); | 323 | lockdep_assert_held(&mvm->mutex); |
| 324 | 324 | ||
| 325 | if (WARN_ON_ONCE(mvm->init_ucode_complete || mvm->calibrating)) | 325 | if (WARN_ON_ONCE(mvm->calibrating)) |
| 326 | return 0; | 326 | return 0; |
| 327 | 327 | ||
| 328 | iwl_init_notification_wait(&mvm->notif_wait, | 328 | iwl_init_notification_wait(&mvm->notif_wait, |
| @@ -396,8 +396,6 @@ int iwl_run_init_mvm_ucode(struct iwl_mvm *mvm, bool read_nvm) | |||
| 396 | */ | 396 | */ |
| 397 | ret = iwl_wait_notification(&mvm->notif_wait, &calib_wait, | 397 | ret = iwl_wait_notification(&mvm->notif_wait, &calib_wait, |
| 398 | MVM_UCODE_CALIB_TIMEOUT); | 398 | MVM_UCODE_CALIB_TIMEOUT); |
| 399 | if (!ret) | ||
| 400 | mvm->init_ucode_complete = true; | ||
| 401 | 399 | ||
| 402 | if (ret && iwl_mvm_is_radio_killed(mvm)) { | 400 | if (ret && iwl_mvm_is_radio_killed(mvm)) { |
| 403 | IWL_DEBUG_RF_KILL(mvm, "RFKILL while calibrating.\n"); | 401 | IWL_DEBUG_RF_KILL(mvm, "RFKILL while calibrating.\n"); |
| @@ -494,15 +492,6 @@ int iwl_mvm_fw_dbg_collect_desc(struct iwl_mvm *mvm, | |||
| 494 | 492 | ||
| 495 | mvm->fw_dump_desc = desc; | 493 | mvm->fw_dump_desc = desc; |
| 496 | 494 | ||
| 497 | /* stop recording */ | ||
| 498 | if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000) { | ||
| 499 | iwl_set_bits_prph(mvm->trans, MON_BUFF_SAMPLE_CTL, 0x100); | ||
| 500 | } else { | ||
| 501 | iwl_write_prph(mvm->trans, DBGC_IN_SAMPLE, 0); | ||
| 502 | /* wait before we collect the data till the DBGC stop */ | ||
| 503 | udelay(100); | ||
| 504 | } | ||
| 505 | |||
| 506 | queue_delayed_work(system_wq, &mvm->fw_dump_wk, delay); | 495 | queue_delayed_work(system_wq, &mvm->fw_dump_wk, delay); |
| 507 | 496 | ||
| 508 | return 0; | 497 | return 0; |
| @@ -658,25 +647,24 @@ int iwl_mvm_up(struct iwl_mvm *mvm) | |||
| 658 | * module loading, load init ucode now | 647 | * module loading, load init ucode now |
| 659 | * (for example, if we were in RFKILL) | 648 | * (for example, if we were in RFKILL) |
| 660 | */ | 649 | */ |
| 661 | if (!mvm->init_ucode_complete) { | 650 | ret = iwl_run_init_mvm_ucode(mvm, false); |
| 662 | ret = iwl_run_init_mvm_ucode(mvm, false); | 651 | if (ret && !iwlmvm_mod_params.init_dbg) { |
| 663 | if (ret && !iwlmvm_mod_params.init_dbg) { | 652 | IWL_ERR(mvm, "Failed to run INIT ucode: %d\n", ret); |
| 664 | IWL_ERR(mvm, "Failed to run INIT ucode: %d\n", ret); | 653 | /* this can't happen */ |
| 665 | /* this can't happen */ | 654 | if (WARN_ON(ret > 0)) |
| 666 | if (WARN_ON(ret > 0)) | 655 | ret = -ERFKILL; |
| 667 | ret = -ERFKILL; | 656 | goto error; |
| 668 | goto error; | 657 | } |
| 669 | } | 658 | if (!iwlmvm_mod_params.init_dbg) { |
| 670 | if (!iwlmvm_mod_params.init_dbg) { | 659 | /* |
| 671 | /* | 660 | * Stop and start the transport without entering low power |
| 672 | * should stop and start HW since that INIT | 661 | * mode. This will save the state of other components on the |
| 673 | * image just loaded | 662 | * device that are triggered by the INIT firwmare (MFUART). |
| 674 | */ | 663 | */ |
| 675 | iwl_trans_stop_device(mvm->trans); | 664 | _iwl_trans_stop_device(mvm->trans, false); |
| 676 | ret = iwl_trans_start_hw(mvm->trans); | 665 | _iwl_trans_start_hw(mvm->trans, false); |
| 677 | if (ret) | 666 | if (ret) |
| 678 | return ret; | 667 | return ret; |
| 679 | } | ||
| 680 | } | 668 | } |
| 681 | 669 | ||
| 682 | if (iwlmvm_mod_params.init_dbg) | 670 | if (iwlmvm_mod_params.init_dbg) |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mac80211.c b/drivers/net/wireless/iwlwifi/mvm/mac80211.c index 84555170b6f7..40265b9c66ae 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mac80211.c +++ b/drivers/net/wireless/iwlwifi/mvm/mac80211.c | |||
| @@ -1322,7 +1322,7 @@ static void iwl_mvm_restart_complete(struct iwl_mvm *mvm) | |||
| 1322 | 1322 | ||
| 1323 | clear_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status); | 1323 | clear_bit(IWL_MVM_STATUS_IN_HW_RESTART, &mvm->status); |
| 1324 | iwl_mvm_d0i3_enable_tx(mvm, NULL); | 1324 | iwl_mvm_d0i3_enable_tx(mvm, NULL); |
| 1325 | ret = iwl_mvm_update_quotas(mvm, false, NULL); | 1325 | ret = iwl_mvm_update_quotas(mvm, true, NULL); |
| 1326 | if (ret) | 1326 | if (ret) |
| 1327 | IWL_ERR(mvm, "Failed to update quotas after restart (%d)\n", | 1327 | IWL_ERR(mvm, "Failed to update quotas after restart (%d)\n", |
| 1328 | ret); | 1328 | ret); |
| @@ -1471,8 +1471,8 @@ static struct iwl_mvm_phy_ctxt *iwl_mvm_get_free_phy_ctxt(struct iwl_mvm *mvm) | |||
| 1471 | return NULL; | 1471 | return NULL; |
| 1472 | } | 1472 | } |
| 1473 | 1473 | ||
| 1474 | static int iwl_mvm_set_tx_power(struct iwl_mvm *mvm, struct ieee80211_vif *vif, | 1474 | static int iwl_mvm_set_tx_power_old(struct iwl_mvm *mvm, |
| 1475 | s8 tx_power) | 1475 | struct ieee80211_vif *vif, s8 tx_power) |
| 1476 | { | 1476 | { |
| 1477 | /* FW is in charge of regulatory enforcement */ | 1477 | /* FW is in charge of regulatory enforcement */ |
| 1478 | struct iwl_reduce_tx_power_cmd reduce_txpwr_cmd = { | 1478 | struct iwl_reduce_tx_power_cmd reduce_txpwr_cmd = { |
| @@ -1485,6 +1485,26 @@ static int iwl_mvm_set_tx_power(struct iwl_mvm *mvm, struct ieee80211_vif *vif, | |||
| 1485 | &reduce_txpwr_cmd); | 1485 | &reduce_txpwr_cmd); |
| 1486 | } | 1486 | } |
| 1487 | 1487 | ||
| 1488 | static int iwl_mvm_set_tx_power(struct iwl_mvm *mvm, struct ieee80211_vif *vif, | ||
| 1489 | s16 tx_power) | ||
| 1490 | { | ||
| 1491 | struct iwl_dev_tx_power_cmd cmd = { | ||
| 1492 | .set_mode = 0, | ||
| 1493 | .mac_context_id = | ||
| 1494 | cpu_to_le32(iwl_mvm_vif_from_mac80211(vif)->id), | ||
| 1495 | .pwr_restriction = cpu_to_le16(8 * tx_power), | ||
| 1496 | }; | ||
| 1497 | |||
| 1498 | if (!(mvm->fw->ucode_capa.api[0] & IWL_UCODE_TLV_API_TX_POWER_DEV)) | ||
| 1499 | return iwl_mvm_set_tx_power_old(mvm, vif, tx_power); | ||
| 1500 | |||
| 1501 | if (tx_power == IWL_DEFAULT_MAX_TX_POWER) | ||
| 1502 | cmd.pwr_restriction = cpu_to_le16(IWL_DEV_MAX_TX_POWER); | ||
| 1503 | |||
| 1504 | return iwl_mvm_send_cmd_pdu(mvm, REDUCE_TX_POWER_CMD, 0, | ||
| 1505 | sizeof(cmd), &cmd); | ||
| 1506 | } | ||
| 1507 | |||
| 1488 | static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw, | 1508 | static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw, |
| 1489 | struct ieee80211_vif *vif) | 1509 | struct ieee80211_vif *vif) |
| 1490 | { | 1510 | { |
diff --git a/drivers/net/wireless/iwlwifi/mvm/mvm.h b/drivers/net/wireless/iwlwifi/mvm/mvm.h index d5522a161242..cf70f681d1ac 100644 --- a/drivers/net/wireless/iwlwifi/mvm/mvm.h +++ b/drivers/net/wireless/iwlwifi/mvm/mvm.h | |||
| @@ -603,7 +603,6 @@ struct iwl_mvm { | |||
| 603 | 603 | ||
| 604 | enum iwl_ucode_type cur_ucode; | 604 | enum iwl_ucode_type cur_ucode; |
| 605 | bool ucode_loaded; | 605 | bool ucode_loaded; |
| 606 | bool init_ucode_complete; | ||
| 607 | bool calibrating; | 606 | bool calibrating; |
| 608 | u32 error_event_table; | 607 | u32 error_event_table; |
| 609 | u32 log_event_table; | 608 | u32 log_event_table; |
diff --git a/drivers/net/wireless/iwlwifi/mvm/ops.c b/drivers/net/wireless/iwlwifi/mvm/ops.c index a08b03d58d4b..1c66297d82c0 100644 --- a/drivers/net/wireless/iwlwifi/mvm/ops.c +++ b/drivers/net/wireless/iwlwifi/mvm/ops.c | |||
| @@ -865,6 +865,16 @@ static void iwl_mvm_fw_error_dump_wk(struct work_struct *work) | |||
| 865 | return; | 865 | return; |
| 866 | 866 | ||
| 867 | mutex_lock(&mvm->mutex); | 867 | mutex_lock(&mvm->mutex); |
| 868 | |||
| 869 | /* stop recording */ | ||
| 870 | if (mvm->cfg->device_family == IWL_DEVICE_FAMILY_7000) { | ||
| 871 | iwl_set_bits_prph(mvm->trans, MON_BUFF_SAMPLE_CTL, 0x100); | ||
| 872 | } else { | ||
| 873 | iwl_write_prph(mvm->trans, DBGC_IN_SAMPLE, 0); | ||
| 874 | /* wait before we collect the data till the DBGC stop */ | ||
| 875 | udelay(100); | ||
| 876 | } | ||
| 877 | |||
| 868 | iwl_mvm_fw_error_dump(mvm); | 878 | iwl_mvm_fw_error_dump(mvm); |
| 869 | 879 | ||
| 870 | /* start recording again if the firmware is not crashed */ | 880 | /* start recording again if the firmware is not crashed */ |
diff --git a/drivers/net/wireless/iwlwifi/mvm/rx.c b/drivers/net/wireless/iwlwifi/mvm/rx.c index 78ec7db64ba5..d6314ddf57b5 100644 --- a/drivers/net/wireless/iwlwifi/mvm/rx.c +++ b/drivers/net/wireless/iwlwifi/mvm/rx.c | |||
| @@ -478,6 +478,11 @@ static void iwl_mvm_stat_iterator(void *_data, u8 *mac, | |||
| 478 | if (vif->type != NL80211_IFTYPE_STATION) | 478 | if (vif->type != NL80211_IFTYPE_STATION) |
| 479 | return; | 479 | return; |
| 480 | 480 | ||
| 481 | if (sig == 0) { | ||
| 482 | IWL_DEBUG_RX(mvm, "RSSI is 0 - skip signal based decision\n"); | ||
| 483 | return; | ||
| 484 | } | ||
| 485 | |||
| 481 | mvmvif->bf_data.ave_beacon_signal = sig; | 486 | mvmvif->bf_data.ave_beacon_signal = sig; |
| 482 | 487 | ||
| 483 | /* BT Coex */ | 488 | /* BT Coex */ |
diff --git a/drivers/net/wireless/iwlwifi/mvm/scan.c b/drivers/net/wireless/iwlwifi/mvm/scan.c index 74e1c86289dc..1075a213bd6a 100644 --- a/drivers/net/wireless/iwlwifi/mvm/scan.c +++ b/drivers/net/wireless/iwlwifi/mvm/scan.c | |||
| @@ -319,7 +319,7 @@ int iwl_mvm_rx_scan_offload_iter_complete_notif(struct iwl_mvm *mvm, | |||
| 319 | struct iwl_device_cmd *cmd) | 319 | struct iwl_device_cmd *cmd) |
| 320 | { | 320 | { |
| 321 | struct iwl_rx_packet *pkt = rxb_addr(rxb); | 321 | struct iwl_rx_packet *pkt = rxb_addr(rxb); |
| 322 | struct iwl_scan_complete_notif *notif = (void *)pkt->data; | 322 | struct iwl_lmac_scan_complete_notif *notif = (void *)pkt->data; |
| 323 | 323 | ||
| 324 | IWL_DEBUG_SCAN(mvm, | 324 | IWL_DEBUG_SCAN(mvm, |
| 325 | "Scan offload iteration complete: status=0x%x scanned channels=%d\n", | 325 | "Scan offload iteration complete: status=0x%x scanned channels=%d\n", |
