Commit 939ecf6b authored by Emmanuel Grumbach's avatar Emmanuel Grumbach

Merge remote-tracking branch 'iwlwifi-fixes/master' into iwlwifi-next

parents e03bbb62 8e96440e
...@@ -245,3 +245,4 @@ const struct iwl_cfg iwl7265_n_cfg = { ...@@ -245,3 +245,4 @@ const struct iwl_cfg iwl7265_n_cfg = {
MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK)); MODULE_FIRMWARE(IWL7260_MODULE_FIRMWARE(IWL7260_UCODE_API_OK));
MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK)); MODULE_FIRMWARE(IWL3160_MODULE_FIRMWARE(IWL3160_UCODE_API_OK));
MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK));
...@@ -187,7 +187,7 @@ static const __le32 iwl_combined_lookup[BT_COEX_MAX_LUT][BT_COEX_LUT_SIZE] = { ...@@ -187,7 +187,7 @@ static const __le32 iwl_combined_lookup[BT_COEX_MAX_LUT][BT_COEX_LUT_SIZE] = {
cpu_to_le32(0xcc00aaaa), cpu_to_le32(0xcc00aaaa),
cpu_to_le32(0x0000aaaa), cpu_to_le32(0x0000aaaa),
cpu_to_le32(0xc0004000), cpu_to_le32(0xc0004000),
cpu_to_le32(0x00000000), cpu_to_le32(0x00004000),
cpu_to_le32(0xf0005000), cpu_to_le32(0xf0005000),
cpu_to_le32(0xf0005000), cpu_to_le32(0xf0005000),
}, },
...@@ -210,16 +210,16 @@ static const __le32 iwl_combined_lookup[BT_COEX_MAX_LUT][BT_COEX_LUT_SIZE] = { ...@@ -210,16 +210,16 @@ static const __le32 iwl_combined_lookup[BT_COEX_MAX_LUT][BT_COEX_LUT_SIZE] = {
/* Tx Tx disabled */ /* Tx Tx disabled */
cpu_to_le32(0xaaaaaaaa), cpu_to_le32(0xaaaaaaaa),
cpu_to_le32(0xaaaaaaaa), cpu_to_le32(0xaaaaaaaa),
cpu_to_le32(0xaaaaaaaa), cpu_to_le32(0xeeaaaaaa),
cpu_to_le32(0xaaaaaaaa), cpu_to_le32(0xaaaaaaaa),
cpu_to_le32(0xcc00ff28), cpu_to_le32(0xcc00ff28),
cpu_to_le32(0x0000aaaa), cpu_to_le32(0x0000aaaa),
cpu_to_le32(0xcc00aaaa), cpu_to_le32(0xcc00aaaa),
cpu_to_le32(0x0000aaaa), cpu_to_le32(0x0000aaaa),
cpu_to_le32(0xC0004000), cpu_to_le32(0xc0004000),
cpu_to_le32(0xC0004000), cpu_to_le32(0xc0004000),
cpu_to_le32(0xF0005000), cpu_to_le32(0xf0005000),
cpu_to_le32(0xF0005000), cpu_to_le32(0xf0005000),
}, },
}; };
...@@ -611,14 +611,14 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm) ...@@ -611,14 +611,14 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
bt_cmd->flags |= cpu_to_le32(BT_COEX_SYNC2SCO); bt_cmd->flags |= cpu_to_le32(BT_COEX_SYNC2SCO);
if (IWL_MVM_BT_COEX_CORUNNING) { if (IWL_MVM_BT_COEX_CORUNNING) {
bt_cmd->valid_bit_msk = cpu_to_le32(BT_VALID_CORUN_LUT_20 | bt_cmd->valid_bit_msk |= cpu_to_le32(BT_VALID_CORUN_LUT_20 |
BT_VALID_CORUN_LUT_40); BT_VALID_CORUN_LUT_40);
bt_cmd->flags |= cpu_to_le32(BT_COEX_CORUNNING); bt_cmd->flags |= cpu_to_le32(BT_COEX_CORUNNING);
} }
if (IWL_MVM_BT_COEX_MPLUT) { if (IWL_MVM_BT_COEX_MPLUT) {
bt_cmd->flags |= cpu_to_le32(BT_COEX_MPLUT); bt_cmd->flags |= cpu_to_le32(BT_COEX_MPLUT);
bt_cmd->valid_bit_msk = cpu_to_le32(BT_VALID_MULTI_PRIO_LUT); bt_cmd->valid_bit_msk |= cpu_to_le32(BT_VALID_MULTI_PRIO_LUT);
} }
if (mvm->cfg->bt_shared_single_ant) if (mvm->cfg->bt_shared_single_ant)
...@@ -1270,6 +1270,7 @@ int iwl_mvm_rx_ant_coupling_notif(struct iwl_mvm *mvm, ...@@ -1270,6 +1270,7 @@ int iwl_mvm_rx_ant_coupling_notif(struct iwl_mvm *mvm,
struct iwl_rx_packet *pkt = rxb_addr(rxb); struct iwl_rx_packet *pkt = rxb_addr(rxb);
u32 ant_isolation = le32_to_cpup((void *)pkt->data); u32 ant_isolation = le32_to_cpup((void *)pkt->data);
u8 __maybe_unused lower_bound, upper_bound; u8 __maybe_unused lower_bound, upper_bound;
int ret;
u8 lut; u8 lut;
struct iwl_bt_coex_cmd *bt_cmd; struct iwl_bt_coex_cmd *bt_cmd;
...@@ -1326,5 +1327,8 @@ int iwl_mvm_rx_ant_coupling_notif(struct iwl_mvm *mvm, ...@@ -1326,5 +1327,8 @@ int iwl_mvm_rx_ant_coupling_notif(struct iwl_mvm *mvm,
memcpy(bt_cmd->bt4_corun_lut40, antenna_coupling_ranges[lut].lut20, memcpy(bt_cmd->bt4_corun_lut40, antenna_coupling_ranges[lut].lut20,
sizeof(bt_cmd->bt4_corun_lut40)); sizeof(bt_cmd->bt4_corun_lut40));
return 0; ret = iwl_mvm_send_cmd(mvm, &cmd);
kfree(bt_cmd);
return ret;
} }
...@@ -187,9 +187,9 @@ enum iwl_scan_type { ...@@ -187,9 +187,9 @@ enum iwl_scan_type {
* this number of packets were received (typically 1) * this number of packets were received (typically 1)
* @passive2active: is auto switching from passive to active during scan allowed * @passive2active: is auto switching from passive to active during scan allowed
* @rxchain_sel_flags: RXON_RX_CHAIN_* * @rxchain_sel_flags: RXON_RX_CHAIN_*
* @max_out_time: in usecs, max out of serving channel time * @max_out_time: in TUs, max out of serving channel time
* @suspend_time: how long to pause scan when returning to service channel: * @suspend_time: how long to pause scan when returning to service channel:
* bits 0-19: beacon interal in usecs (suspend before executing) * bits 0-19: beacon interal in TUs (suspend before executing)
* bits 20-23: reserved * bits 20-23: reserved
* bits 24-31: number of beacons (suspend between channels) * bits 24-31: number of beacons (suspend between channels)
* @rxon_flags: RXON_FLG_* * @rxon_flags: RXON_FLG_*
...@@ -387,8 +387,8 @@ enum scan_framework_client { ...@@ -387,8 +387,8 @@ enum scan_framework_client {
* @quiet_plcp_th: quiet channel num of packets threshold * @quiet_plcp_th: quiet channel num of packets threshold
* @good_CRC_th: passive to active promotion threshold * @good_CRC_th: passive to active promotion threshold
* @rx_chain: RXON rx chain. * @rx_chain: RXON rx chain.
* @max_out_time: max uSec to be out of assoceated channel * @max_out_time: max TUs to be out of assoceated channel
* @suspend_time: pause scan this long when returning to service channel * @suspend_time: pause scan this TUs when returning to service channel
* @flags: RXON flags * @flags: RXON flags
* @filter_flags: RXONfilter * @filter_flags: RXONfilter
* @tx_cmd: tx command for active scan; for 2GHz and for 5GHz. * @tx_cmd: tx command for active scan; for 2GHz and for 5GHz.
......
...@@ -1334,6 +1334,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm, ...@@ -1334,6 +1334,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
*/ */
iwl_mvm_remove_time_event(mvm, mvmvif, iwl_mvm_remove_time_event(mvm, mvmvif,
&mvmvif->time_event_data); &mvmvif->time_event_data);
iwl_mvm_sf_update(mvm, vif, false);
WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, CMD_SYNC)); WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, CMD_SYNC));
} else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS | } else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS |
BSS_CHANGED_QOS)) { BSS_CHANGED_QOS)) {
......
This diff is collapsed.
...@@ -156,6 +156,7 @@ enum { ...@@ -156,6 +156,7 @@ enum {
#define IWL_RATE_HIGH_TH 10880 /* 85% */ #define IWL_RATE_HIGH_TH 10880 /* 85% */
#define IWL_RATE_INCREASE_TH 6400 /* 50% */ #define IWL_RATE_INCREASE_TH 6400 /* 50% */
#define RS_SR_FORCE_DECREASE 1920 /* 15% */ #define RS_SR_FORCE_DECREASE 1920 /* 15% */
#define RS_SR_NO_DECREASE 10880 /* 85% */
#define TPC_SR_FORCE_INCREASE 9600 /* 75% */ #define TPC_SR_FORCE_INCREASE 9600 /* 75% */
#define TPC_SR_NO_INCREASE 10880 /* 85% */ #define TPC_SR_NO_INCREASE 10880 /* 85% */
...@@ -326,15 +327,22 @@ struct iwl_lq_sta { ...@@ -326,15 +327,22 @@ struct iwl_lq_sta {
u32 visited_columns; /* Bitmask marking which Tx columns were u32 visited_columns; /* Bitmask marking which Tx columns were
* explored during a search cycle * explored during a search cycle
*/ */
u64 last_tx;
bool is_vht; bool is_vht;
enum ieee80211_band band; enum ieee80211_band band;
struct rs_rate_stats tx_stats[RS_COLUMN_COUNT][IWL_RATE_COUNT]; struct rs_rate_stats tx_stats[RS_COLUMN_COUNT][IWL_RATE_COUNT];
/* The following are bitmaps of rates; IWL_RATE_6M_MASK, etc. */ /* The following are bitmaps of rates; IWL_RATE_6M_MASK, etc. */
u16 active_legacy_rate; unsigned long active_legacy_rate;
u16 active_siso_rate; unsigned long active_siso_rate;
u16 active_mimo2_rate; unsigned long active_mimo2_rate;
/* Highest rate per Tx mode */
u8 max_legacy_rate_idx;
u8 max_siso_rate_idx;
u8 max_mimo2_rate_idx;
s8 max_rate_idx; /* Max rate set by user */ s8 max_rate_idx; /* Max rate set by user */
u8 missed_rate_counter; u8 missed_rate_counter;
......
...@@ -277,51 +277,22 @@ static void iwl_mvm_scan_calc_params(struct iwl_mvm *mvm, ...@@ -277,51 +277,22 @@ static void iwl_mvm_scan_calc_params(struct iwl_mvm *mvm,
IEEE80211_IFACE_ITER_NORMAL, IEEE80211_IFACE_ITER_NORMAL,
iwl_mvm_scan_condition_iterator, iwl_mvm_scan_condition_iterator,
&global_bound); &global_bound);
/*
* Under low latency traffic passive scan is fragmented meaning
* that dwell on a particular channel will be fragmented. Each fragment
* dwell time is 20ms and fragments period is 105ms. Skipping to next
* channel will be delayed by the same period - 105ms. So suspend_time
* parameter describing both fragments and channels skipping periods is
* set to 105ms. This value is chosen so that overall passive scan
* duration will not be too long. Max_out_time in this case is set to
* 70ms, so for active scanning operating channel will be left for 70ms
* while for passive still for 20ms (fragment dwell).
*/
if (global_bound) {
if (!iwl_mvm_low_latency(mvm)) {
params->suspend_time = ieee80211_tu_to_usec(100);
params->max_out_time = ieee80211_tu_to_usec(600);
} else {
params->suspend_time = ieee80211_tu_to_usec(105);
/* P2P doesn't support fragmented passive scan, so
* configure max_out_time to be at least longest dwell
* time for passive scan.
*/
if (vif->type == NL80211_IFTYPE_STATION && !vif->p2p) {
params->max_out_time = ieee80211_tu_to_usec(70);
params->passive_fragmented = true;
} else {
u32 passive_dwell;
/* if (!global_bound)
* Use band G so that passive channel dwell time goto not_bound;
* will be assigned with maximum value.
*/ params->suspend_time = 100;
band = IEEE80211_BAND_2GHZ; params->max_out_time = 600;
passive_dwell = iwl_mvm_get_passive_dwell(band);
params->max_out_time = if (iwl_mvm_low_latency(mvm)) {
ieee80211_tu_to_usec(passive_dwell); params->suspend_time = 250;
} params->max_out_time = 250;
}
} }
not_bound:
for (band = IEEE80211_BAND_2GHZ; band < IEEE80211_NUM_BANDS; band++) { for (band = IEEE80211_BAND_2GHZ; band < IEEE80211_NUM_BANDS; band++) {
if (params->passive_fragmented) params->dwell[band].passive = iwl_mvm_get_passive_dwell(band);
params->dwell[band].passive = 20;
else
params->dwell[band].passive =
iwl_mvm_get_passive_dwell(band);
params->dwell[band].active = iwl_mvm_get_active_dwell(band, params->dwell[band].active = iwl_mvm_get_active_dwell(band,
n_ssids); n_ssids);
} }
......
...@@ -271,7 +271,8 @@ int iwl_mvm_sf_update(struct iwl_mvm *mvm, struct ieee80211_vif *changed_vif, ...@@ -271,7 +271,8 @@ int iwl_mvm_sf_update(struct iwl_mvm *mvm, struct ieee80211_vif *changed_vif,
return -EINVAL; return -EINVAL;
if (changed_vif->type != NL80211_IFTYPE_STATION) { if (changed_vif->type != NL80211_IFTYPE_STATION) {
new_state = SF_UNINIT; new_state = SF_UNINIT;
} else if (changed_vif->bss_conf.assoc) { } else if (changed_vif->bss_conf.assoc &&
changed_vif->bss_conf.dtim_period) {
mvmvif = iwl_mvm_vif_from_mac80211(changed_vif); mvmvif = iwl_mvm_vif_from_mac80211(changed_vif);
sta_id = mvmvif->ap_sta_id; sta_id = mvmvif->ap_sta_id;
new_state = SF_FULL_ON; new_state = SF_FULL_ON;
......
...@@ -373,12 +373,14 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = { ...@@ -373,12 +373,14 @@ static DEFINE_PCI_DEVICE_TABLE(iwl_hw_card_ids) = {
{IWL_PCI_DEVICE(0x095A, 0x500A, iwl7265_2n_cfg)}, {IWL_PCI_DEVICE(0x095A, 0x500A, iwl7265_2n_cfg)},
{IWL_PCI_DEVICE(0x095B, 0x5200, iwl7265_2n_cfg)}, {IWL_PCI_DEVICE(0x095B, 0x5200, iwl7265_2n_cfg)},
{IWL_PCI_DEVICE(0x095A, 0x5002, iwl7265_n_cfg)}, {IWL_PCI_DEVICE(0x095A, 0x5002, iwl7265_n_cfg)},
{IWL_PCI_DEVICE(0x095A, 0x5102, iwl7265_n_cfg)},
{IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)}, {IWL_PCI_DEVICE(0x095B, 0x5202, iwl7265_n_cfg)},
{IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)}, {IWL_PCI_DEVICE(0x095A, 0x9010, iwl7265_2ac_cfg)},
{IWL_PCI_DEVICE(0x095A, 0x9012, iwl7265_2ac_cfg)}, {IWL_PCI_DEVICE(0x095A, 0x9012, iwl7265_2ac_cfg)},
{IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)}, {IWL_PCI_DEVICE(0x095A, 0x9110, iwl7265_2ac_cfg)},
{IWL_PCI_DEVICE(0x095A, 0x9112, iwl7265_2ac_cfg)}, {IWL_PCI_DEVICE(0x095A, 0x9112, iwl7265_2ac_cfg)},
{IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)}, {IWL_PCI_DEVICE(0x095A, 0x9210, iwl7265_2ac_cfg)},
{IWL_PCI_DEVICE(0x095A, 0x9200, iwl7265_2ac_cfg)},
{IWL_PCI_DEVICE(0x095A, 0x9510, iwl7265_2ac_cfg)}, {IWL_PCI_DEVICE(0x095A, 0x9510, iwl7265_2ac_cfg)},
{IWL_PCI_DEVICE(0x095A, 0x9310, iwl7265_2ac_cfg)}, {IWL_PCI_DEVICE(0x095A, 0x9310, iwl7265_2ac_cfg)},
{IWL_PCI_DEVICE(0x095A, 0x9410, iwl7265_2ac_cfg)}, {IWL_PCI_DEVICE(0x095A, 0x9410, iwl7265_2ac_cfg)},
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment