mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-26 11:28:28 +00:00
Merge branch 'for-john' of git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-fixes
This commit is contained in:
commit
3b924ea1ac
@ -40,7 +40,7 @@
|
|||||||
#include "commands.h"
|
#include "commands.h"
|
||||||
#include "power.h"
|
#include "power.h"
|
||||||
|
|
||||||
static bool force_cam;
|
static bool force_cam = true;
|
||||||
module_param(force_cam, bool, 0644);
|
module_param(force_cam, bool, 0644);
|
||||||
MODULE_PARM_DESC(force_cam, "force continuously aware mode (no power saving at all)");
|
MODULE_PARM_DESC(force_cam, "force continuously aware mode (no power saving at all)");
|
||||||
|
|
||||||
|
@ -83,6 +83,8 @@
|
|||||||
#define IWL7260_TX_POWER_VERSION 0xffff /* meaningless */
|
#define IWL7260_TX_POWER_VERSION 0xffff /* meaningless */
|
||||||
#define IWL3160_NVM_VERSION 0x709
|
#define IWL3160_NVM_VERSION 0x709
|
||||||
#define IWL3160_TX_POWER_VERSION 0xffff /* meaningless */
|
#define IWL3160_TX_POWER_VERSION 0xffff /* meaningless */
|
||||||
|
#define IWL3165_NVM_VERSION 0x709
|
||||||
|
#define IWL3165_TX_POWER_VERSION 0xffff /* meaningless */
|
||||||
#define IWL7265_NVM_VERSION 0x0a1d
|
#define IWL7265_NVM_VERSION 0x0a1d
|
||||||
#define IWL7265_TX_POWER_VERSION 0xffff /* meaningless */
|
#define IWL7265_TX_POWER_VERSION 0xffff /* meaningless */
|
||||||
|
|
||||||
@ -92,6 +94,9 @@
|
|||||||
#define IWL3160_FW_PRE "iwlwifi-3160-"
|
#define IWL3160_FW_PRE "iwlwifi-3160-"
|
||||||
#define IWL3160_MODULE_FIRMWARE(api) IWL3160_FW_PRE __stringify(api) ".ucode"
|
#define IWL3160_MODULE_FIRMWARE(api) IWL3160_FW_PRE __stringify(api) ".ucode"
|
||||||
|
|
||||||
|
#define IWL3165_FW_PRE "iwlwifi-3165-"
|
||||||
|
#define IWL3165_MODULE_FIRMWARE(api) IWL3165_FW_PRE __stringify(api) ".ucode"
|
||||||
|
|
||||||
#define IWL7265_FW_PRE "iwlwifi-7265-"
|
#define IWL7265_FW_PRE "iwlwifi-7265-"
|
||||||
#define IWL7265_MODULE_FIRMWARE(api) IWL7265_FW_PRE __stringify(api) ".ucode"
|
#define IWL7265_MODULE_FIRMWARE(api) IWL7265_FW_PRE __stringify(api) ".ucode"
|
||||||
|
|
||||||
@ -213,6 +218,16 @@ static const struct iwl_pwr_tx_backoff iwl7265_pwr_tx_backoffs[] = {
|
|||||||
{0},
|
{0},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const struct iwl_cfg iwl3165_2ac_cfg = {
|
||||||
|
.name = "Intel(R) Dual Band Wireless AC 3165",
|
||||||
|
.fw_name_pre = IWL3165_FW_PRE,
|
||||||
|
IWL_DEVICE_7000,
|
||||||
|
.ht_params = &iwl7000_ht_params,
|
||||||
|
.nvm_ver = IWL3165_NVM_VERSION,
|
||||||
|
.nvm_calib_ver = IWL3165_TX_POWER_VERSION,
|
||||||
|
.pwr_tx_backoffs = iwl7265_pwr_tx_backoffs,
|
||||||
|
};
|
||||||
|
|
||||||
const struct iwl_cfg iwl7265_2ac_cfg = {
|
const struct iwl_cfg iwl7265_2ac_cfg = {
|
||||||
.name = "Intel(R) Dual Band Wireless AC 7265",
|
.name = "Intel(R) Dual Band Wireless AC 7265",
|
||||||
.fw_name_pre = IWL7265_FW_PRE,
|
.fw_name_pre = IWL7265_FW_PRE,
|
||||||
@ -245,4 +260,5 @@ 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(IWL3165_MODULE_FIRMWARE(IWL3160_UCODE_API_OK));
|
||||||
MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK));
|
MODULE_FIRMWARE(IWL7265_MODULE_FIRMWARE(IWL7260_UCODE_API_OK));
|
||||||
|
@ -120,6 +120,8 @@ enum iwl_led_mode {
|
|||||||
#define IWL_LONG_WD_TIMEOUT 10000
|
#define IWL_LONG_WD_TIMEOUT 10000
|
||||||
#define IWL_MAX_WD_TIMEOUT 120000
|
#define IWL_MAX_WD_TIMEOUT 120000
|
||||||
|
|
||||||
|
#define IWL_DEFAULT_MAX_TX_POWER 22
|
||||||
|
|
||||||
/* Antenna presence definitions */
|
/* Antenna presence definitions */
|
||||||
#define ANT_NONE 0x0
|
#define ANT_NONE 0x0
|
||||||
#define ANT_A BIT(0)
|
#define ANT_A BIT(0)
|
||||||
@ -335,6 +337,7 @@ extern const struct iwl_cfg iwl7260_n_cfg;
|
|||||||
extern const struct iwl_cfg iwl3160_2ac_cfg;
|
extern const struct iwl_cfg iwl3160_2ac_cfg;
|
||||||
extern const struct iwl_cfg iwl3160_2n_cfg;
|
extern const struct iwl_cfg iwl3160_2n_cfg;
|
||||||
extern const struct iwl_cfg iwl3160_n_cfg;
|
extern const struct iwl_cfg iwl3160_n_cfg;
|
||||||
|
extern const struct iwl_cfg iwl3165_2ac_cfg;
|
||||||
extern const struct iwl_cfg iwl7265_2ac_cfg;
|
extern const struct iwl_cfg iwl7265_2ac_cfg;
|
||||||
extern const struct iwl_cfg iwl7265_2n_cfg;
|
extern const struct iwl_cfg iwl7265_2n_cfg;
|
||||||
extern const struct iwl_cfg iwl7265_n_cfg;
|
extern const struct iwl_cfg iwl7265_n_cfg;
|
||||||
|
@ -146,8 +146,6 @@ static const u8 iwl_nvm_channels_family_8000[] = {
|
|||||||
#define LAST_2GHZ_HT_PLUS 9
|
#define LAST_2GHZ_HT_PLUS 9
|
||||||
#define LAST_5GHZ_HT 161
|
#define LAST_5GHZ_HT 161
|
||||||
|
|
||||||
#define DEFAULT_MAX_TX_POWER 16
|
|
||||||
|
|
||||||
/* rate data (static) */
|
/* rate data (static) */
|
||||||
static struct ieee80211_rate iwl_cfg80211_rates[] = {
|
static struct ieee80211_rate iwl_cfg80211_rates[] = {
|
||||||
{ .bitrate = 1 * 10, .hw_value = 0, .hw_value_short = 0, },
|
{ .bitrate = 1 * 10, .hw_value = 0, .hw_value_short = 0, },
|
||||||
@ -295,7 +293,7 @@ static int iwl_init_channel_map(struct device *dev, const struct iwl_cfg *cfg,
|
|||||||
* Default value - highest tx power value. max_power
|
* Default value - highest tx power value. max_power
|
||||||
* is not used in mvm, and is used for backwards compatibility
|
* is not used in mvm, and is used for backwards compatibility
|
||||||
*/
|
*/
|
||||||
channel->max_power = DEFAULT_MAX_TX_POWER;
|
channel->max_power = IWL_DEFAULT_MAX_TX_POWER;
|
||||||
is_5ghz = channel->band == IEEE80211_BAND_5GHZ;
|
is_5ghz = channel->band == IEEE80211_BAND_5GHZ;
|
||||||
IWL_DEBUG_EEPROM(dev,
|
IWL_DEBUG_EEPROM(dev,
|
||||||
"Ch. %d [%sGHz] %s%s%s%s%s%s%s(0x%02x %ddBm): Ad-Hoc %ssupported\n",
|
"Ch. %d [%sGHz] %s%s%s%s%s%s%s(0x%02x %ddBm): Ad-Hoc %ssupported\n",
|
||||||
|
@ -585,8 +585,6 @@ int iwl_send_bt_init_conf(struct iwl_mvm *mvm)
|
|||||||
lockdep_assert_held(&mvm->mutex);
|
lockdep_assert_held(&mvm->mutex);
|
||||||
|
|
||||||
if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS)) {
|
if (unlikely(mvm->bt_force_ant_mode != BT_FORCE_ANT_DIS)) {
|
||||||
u32 mode;
|
|
||||||
|
|
||||||
switch (mvm->bt_force_ant_mode) {
|
switch (mvm->bt_force_ant_mode) {
|
||||||
case BT_FORCE_ANT_BT:
|
case BT_FORCE_ANT_BT:
|
||||||
mode = BT_COEX_BT;
|
mode = BT_COEX_BT;
|
||||||
@ -756,7 +754,8 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
|
|||||||
struct iwl_bt_iterator_data *data = _data;
|
struct iwl_bt_iterator_data *data = _data;
|
||||||
struct iwl_mvm *mvm = data->mvm;
|
struct iwl_mvm *mvm = data->mvm;
|
||||||
struct ieee80211_chanctx_conf *chanctx_conf;
|
struct ieee80211_chanctx_conf *chanctx_conf;
|
||||||
enum ieee80211_smps_mode smps_mode;
|
/* default smps_mode is AUTOMATIC - only used for client modes */
|
||||||
|
enum ieee80211_smps_mode smps_mode = IEEE80211_SMPS_AUTOMATIC;
|
||||||
u32 bt_activity_grading;
|
u32 bt_activity_grading;
|
||||||
int ave_rssi;
|
int ave_rssi;
|
||||||
|
|
||||||
@ -764,8 +763,6 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
|
|||||||
|
|
||||||
switch (vif->type) {
|
switch (vif->type) {
|
||||||
case NL80211_IFTYPE_STATION:
|
case NL80211_IFTYPE_STATION:
|
||||||
/* default smps_mode for BSS / P2P client is AUTOMATIC */
|
|
||||||
smps_mode = IEEE80211_SMPS_AUTOMATIC;
|
|
||||||
break;
|
break;
|
||||||
case NL80211_IFTYPE_AP:
|
case NL80211_IFTYPE_AP:
|
||||||
if (!mvmvif->ap_ibss_active)
|
if (!mvmvif->ap_ibss_active)
|
||||||
@ -797,7 +794,7 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
|
|||||||
else if (bt_activity_grading >= BT_LOW_TRAFFIC)
|
else if (bt_activity_grading >= BT_LOW_TRAFFIC)
|
||||||
smps_mode = IEEE80211_SMPS_DYNAMIC;
|
smps_mode = IEEE80211_SMPS_DYNAMIC;
|
||||||
|
|
||||||
/* relax SMPS contraints for next association */
|
/* relax SMPS constraints for next association */
|
||||||
if (!vif->bss_conf.assoc)
|
if (!vif->bss_conf.assoc)
|
||||||
smps_mode = IEEE80211_SMPS_AUTOMATIC;
|
smps_mode = IEEE80211_SMPS_AUTOMATIC;
|
||||||
|
|
||||||
|
@ -74,8 +74,7 @@ static void iwl_dbgfs_update_pm(struct iwl_mvm *mvm,
|
|||||||
|
|
||||||
switch (param) {
|
switch (param) {
|
||||||
case MVM_DEBUGFS_PM_KEEP_ALIVE: {
|
case MVM_DEBUGFS_PM_KEEP_ALIVE: {
|
||||||
struct ieee80211_hw *hw = mvm->hw;
|
int dtimper = vif->bss_conf.dtim_period ?: 1;
|
||||||
int dtimper = hw->conf.ps_dtim_period ?: 1;
|
|
||||||
int dtimper_msec = dtimper * vif->bss_conf.beacon_int;
|
int dtimper_msec = dtimper * vif->bss_conf.beacon_int;
|
||||||
|
|
||||||
IWL_DEBUG_POWER(mvm, "debugfs: set keep_alive= %d sec\n", val);
|
IWL_DEBUG_POWER(mvm, "debugfs: set keep_alive= %d sec\n", val);
|
||||||
|
@ -1563,14 +1563,14 @@ enum iwl_sf_scenario {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Smart Fifo configuration command.
|
* Smart Fifo configuration command.
|
||||||
* @state: smart fifo state, types listed in iwl_sf_sate.
|
* @state: smart fifo state, types listed in enum %iwl_sf_sate.
|
||||||
* @watermark: Minimum allowed availabe free space in RXF for transient state.
|
* @watermark: Minimum allowed availabe free space in RXF for transient state.
|
||||||
* @long_delay_timeouts: aging and idle timer values for each scenario
|
* @long_delay_timeouts: aging and idle timer values for each scenario
|
||||||
* in long delay state.
|
* in long delay state.
|
||||||
* @full_on_timeouts: timer values for each scenario in full on state.
|
* @full_on_timeouts: timer values for each scenario in full on state.
|
||||||
*/
|
*/
|
||||||
struct iwl_sf_cfg_cmd {
|
struct iwl_sf_cfg_cmd {
|
||||||
enum iwl_sf_state state;
|
__le32 state;
|
||||||
__le32 watermark[SF_TRANSIENT_STATES_NUMBER];
|
__le32 watermark[SF_TRANSIENT_STATES_NUMBER];
|
||||||
__le32 long_delay_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES];
|
__le32 long_delay_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES];
|
||||||
__le32 full_on_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES];
|
__le32 full_on_timeouts[SF_NUM_SCENARIO][SF_NUM_TIMEOUT_TYPES];
|
||||||
|
@ -721,11 +721,6 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
|
|||||||
!force_assoc_off) {
|
!force_assoc_off) {
|
||||||
u32 dtim_offs;
|
u32 dtim_offs;
|
||||||
|
|
||||||
/* Allow beacons to pass through as long as we are not
|
|
||||||
* associated, or we do not have dtim period information.
|
|
||||||
*/
|
|
||||||
cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_BEACON);
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The DTIM count counts down, so when it is N that means N
|
* The DTIM count counts down, so when it is N that means N
|
||||||
* more beacon intervals happen until the DTIM TBTT. Therefore
|
* more beacon intervals happen until the DTIM TBTT. Therefore
|
||||||
@ -759,6 +754,11 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
|
|||||||
ctxt_sta->is_assoc = cpu_to_le32(1);
|
ctxt_sta->is_assoc = cpu_to_le32(1);
|
||||||
} else {
|
} else {
|
||||||
ctxt_sta->is_assoc = cpu_to_le32(0);
|
ctxt_sta->is_assoc = cpu_to_le32(0);
|
||||||
|
|
||||||
|
/* Allow beacons to pass through as long as we are not
|
||||||
|
* associated, or we do not have dtim period information.
|
||||||
|
*/
|
||||||
|
cmd.filter_flags |= cpu_to_le32(MAC_FILTER_IN_BEACON);
|
||||||
}
|
}
|
||||||
|
|
||||||
ctxt_sta->bi = cpu_to_le32(vif->bss_conf.beacon_int);
|
ctxt_sta->bi = cpu_to_le32(vif->bss_conf.beacon_int);
|
||||||
|
@ -396,12 +396,14 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
|
|||||||
else
|
else
|
||||||
hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
|
hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
|
||||||
|
|
||||||
/* TODO: enable that only for firmwares that don't crash */
|
if (IWL_UCODE_API(mvm->fw->ucode_ver) >= 10) {
|
||||||
/* hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN; */
|
hw->wiphy->flags |= WIPHY_FLAG_SUPPORTS_SCHED_SCAN;
|
||||||
hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX;
|
hw->wiphy->max_sched_scan_ssids = PROBE_OPTION_MAX;
|
||||||
hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES;
|
hw->wiphy->max_match_sets = IWL_SCAN_MAX_PROFILES;
|
||||||
/* we create the 802.11 header and zero length SSID IE. */
|
/* we create the 802.11 header and zero length SSID IE. */
|
||||||
hw->wiphy->max_sched_scan_ie_len = SCAN_OFFLOAD_PROBE_REQ_SIZE - 24 - 2;
|
hw->wiphy->max_sched_scan_ie_len =
|
||||||
|
SCAN_OFFLOAD_PROBE_REQ_SIZE - 24 - 2;
|
||||||
|
}
|
||||||
|
|
||||||
hw->wiphy->features |= NL80211_FEATURE_P2P_GO_CTWIN |
|
hw->wiphy->features |= NL80211_FEATURE_P2P_GO_CTWIN |
|
||||||
NL80211_FEATURE_LOW_PRIORITY_SCAN |
|
NL80211_FEATURE_LOW_PRIORITY_SCAN |
|
||||||
@ -1524,11 +1526,6 @@ 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);
|
||||||
} else if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS |
|
|
||||||
BSS_CHANGED_QOS)) {
|
|
||||||
ret = iwl_mvm_power_update_mac(mvm);
|
|
||||||
if (ret)
|
|
||||||
IWL_ERR(mvm, "failed to update power mode\n");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changes & BSS_CHANGED_BEACON_INFO) {
|
if (changes & BSS_CHANGED_BEACON_INFO) {
|
||||||
@ -1536,6 +1533,12 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
|
|||||||
WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, 0));
|
WARN_ON(iwl_mvm_enable_beacon_filter(mvm, vif, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (changes & (BSS_CHANGED_PS | BSS_CHANGED_P2P_PS | BSS_CHANGED_QOS)) {
|
||||||
|
ret = iwl_mvm_power_update_mac(mvm);
|
||||||
|
if (ret)
|
||||||
|
IWL_ERR(mvm, "failed to update power mode\n");
|
||||||
|
}
|
||||||
|
|
||||||
if (changes & BSS_CHANGED_TXPOWER) {
|
if (changes & BSS_CHANGED_TXPOWER) {
|
||||||
IWL_DEBUG_CALIB(mvm, "Changing TX Power to %d\n",
|
IWL_DEBUG_CALIB(mvm, "Changing TX Power to %d\n",
|
||||||
bss_conf->txpower);
|
bss_conf->txpower);
|
||||||
|
@ -281,7 +281,6 @@ static void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm,
|
|||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
struct iwl_mac_power_cmd *cmd)
|
struct iwl_mac_power_cmd *cmd)
|
||||||
{
|
{
|
||||||
struct ieee80211_hw *hw = mvm->hw;
|
|
||||||
struct ieee80211_chanctx_conf *chanctx_conf;
|
struct ieee80211_chanctx_conf *chanctx_conf;
|
||||||
struct ieee80211_channel *chan;
|
struct ieee80211_channel *chan;
|
||||||
int dtimper, dtimper_msec;
|
int dtimper, dtimper_msec;
|
||||||
@ -292,7 +291,7 @@ static void iwl_mvm_power_build_cmd(struct iwl_mvm *mvm,
|
|||||||
|
|
||||||
cmd->id_and_color = cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id,
|
cmd->id_and_color = cpu_to_le32(FW_CMD_ID_AND_COLOR(mvmvif->id,
|
||||||
mvmvif->color));
|
mvmvif->color));
|
||||||
dtimper = hw->conf.ps_dtim_period ?: 1;
|
dtimper = vif->bss_conf.dtim_period;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Regardless of power management state the driver must set
|
* Regardless of power management state the driver must set
|
||||||
@ -885,7 +884,7 @@ int iwl_mvm_update_d0i3_power_mode(struct iwl_mvm *mvm,
|
|||||||
iwl_mvm_power_build_cmd(mvm, vif, &cmd);
|
iwl_mvm_power_build_cmd(mvm, vif, &cmd);
|
||||||
if (enable) {
|
if (enable) {
|
||||||
/* configure skip over dtim up to 300 msec */
|
/* configure skip over dtim up to 300 msec */
|
||||||
int dtimper = mvm->hw->conf.ps_dtim_period ?: 1;
|
int dtimper = vif->bss_conf.dtim_period ?: 1;
|
||||||
int dtimper_msec = dtimper * vif->bss_conf.beacon_int;
|
int dtimper_msec = dtimper * vif->bss_conf.beacon_int;
|
||||||
|
|
||||||
if (WARN_ON(!dtimper_msec))
|
if (WARN_ON(!dtimper_msec))
|
||||||
|
@ -149,13 +149,13 @@ static void iwl_mvm_get_signal_strength(struct iwl_mvm *mvm,
|
|||||||
le32_to_cpu(phy_info->non_cfg_phy[IWL_RX_INFO_ENERGY_ANT_ABC_IDX]);
|
le32_to_cpu(phy_info->non_cfg_phy[IWL_RX_INFO_ENERGY_ANT_ABC_IDX]);
|
||||||
energy_a = (val & IWL_RX_INFO_ENERGY_ANT_A_MSK) >>
|
energy_a = (val & IWL_RX_INFO_ENERGY_ANT_A_MSK) >>
|
||||||
IWL_RX_INFO_ENERGY_ANT_A_POS;
|
IWL_RX_INFO_ENERGY_ANT_A_POS;
|
||||||
energy_a = energy_a ? -energy_a : -256;
|
energy_a = energy_a ? -energy_a : S8_MIN;
|
||||||
energy_b = (val & IWL_RX_INFO_ENERGY_ANT_B_MSK) >>
|
energy_b = (val & IWL_RX_INFO_ENERGY_ANT_B_MSK) >>
|
||||||
IWL_RX_INFO_ENERGY_ANT_B_POS;
|
IWL_RX_INFO_ENERGY_ANT_B_POS;
|
||||||
energy_b = energy_b ? -energy_b : -256;
|
energy_b = energy_b ? -energy_b : S8_MIN;
|
||||||
energy_c = (val & IWL_RX_INFO_ENERGY_ANT_C_MSK) >>
|
energy_c = (val & IWL_RX_INFO_ENERGY_ANT_C_MSK) >>
|
||||||
IWL_RX_INFO_ENERGY_ANT_C_POS;
|
IWL_RX_INFO_ENERGY_ANT_C_POS;
|
||||||
energy_c = energy_c ? -energy_c : -256;
|
energy_c = energy_c ? -energy_c : S8_MIN;
|
||||||
max_energy = max(energy_a, energy_b);
|
max_energy = max(energy_a, energy_b);
|
||||||
max_energy = max(max_energy, energy_c);
|
max_energy = max(max_energy, energy_c);
|
||||||
|
|
||||||
|
@ -172,7 +172,7 @@ static int iwl_mvm_sf_config(struct iwl_mvm *mvm, u8 sta_id,
|
|||||||
enum iwl_sf_state new_state)
|
enum iwl_sf_state new_state)
|
||||||
{
|
{
|
||||||
struct iwl_sf_cfg_cmd sf_cmd = {
|
struct iwl_sf_cfg_cmd sf_cmd = {
|
||||||
.state = new_state,
|
.state = cpu_to_le32(new_state),
|
||||||
};
|
};
|
||||||
struct ieee80211_sta *sta;
|
struct ieee80211_sta *sta;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -168,10 +168,14 @@ static void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm,
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* for data packets, rate info comes from the table inside the fw. This
|
* for data packets, rate info comes from the table inside the fw. This
|
||||||
* table is controlled by LINK_QUALITY commands
|
* table is controlled by LINK_QUALITY commands. Exclude ctrl port
|
||||||
|
* frames like EAPOLs which should be treated as mgmt frames. This
|
||||||
|
* avoids them being sent initially in high rates which increases the
|
||||||
|
* chances for completion of the 4-Way handshake.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (ieee80211_is_data(fc) && sta) {
|
if (ieee80211_is_data(fc) && sta &&
|
||||||
|
!(info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO)) {
|
||||||
tx_cmd->initial_rate_index = 0;
|
tx_cmd->initial_rate_index = 0;
|
||||||
tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE);
|
tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE);
|
||||||
return;
|
return;
|
||||||
|
@ -352,11 +352,17 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
|
|||||||
{IWL_PCI_DEVICE(0x08B3, 0x8060, iwl3160_2n_cfg)},
|
{IWL_PCI_DEVICE(0x08B3, 0x8060, iwl3160_2n_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x08B3, 0x8062, iwl3160_n_cfg)},
|
{IWL_PCI_DEVICE(0x08B3, 0x8062, iwl3160_n_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x08B4, 0x8270, iwl3160_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x08B4, 0x8270, iwl3160_2ac_cfg)},
|
||||||
|
{IWL_PCI_DEVICE(0x08B4, 0x8370, iwl3160_2ac_cfg)},
|
||||||
|
{IWL_PCI_DEVICE(0x08B4, 0x8272, iwl3160_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x08B3, 0x8470, iwl3160_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x08B3, 0x8470, iwl3160_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x08B3, 0x8570, iwl3160_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x08B3, 0x8570, iwl3160_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x08B3, 0x1070, iwl3160_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x08B3, 0x1070, iwl3160_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x08B3, 0x1170, iwl3160_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x08B3, 0x1170, iwl3160_2ac_cfg)},
|
||||||
|
|
||||||
|
/* 3165 Series */
|
||||||
|
{IWL_PCI_DEVICE(0x3165, 0x4010, iwl3165_2ac_cfg)},
|
||||||
|
{IWL_PCI_DEVICE(0x3165, 0x4210, iwl3165_2ac_cfg)},
|
||||||
|
|
||||||
/* 7265 Series */
|
/* 7265 Series */
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x5010, iwl7265_2ac_cfg)},
|
||||||
{IWL_PCI_DEVICE(0x095A, 0x5110, iwl7265_2ac_cfg)},
|
{IWL_PCI_DEVICE(0x095A, 0x5110, iwl7265_2ac_cfg)},
|
||||||
@ -378,6 +384,7 @@ static const struct pci_device_id iwl_hw_card_ids[] = {
|
|||||||
{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, 0x900A, 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)},
|
||||||
|
Loading…
Reference in New Issue
Block a user