mirror of
https://github.com/ukui/kernel.git
synced 2026-03-09 10:07:04 -07:00
Merge tag 'wireless-drivers-next-for-davem-2017-11-03' of git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/wireless-drivers-next
Kalle Valo says: ==================== wireless-drivers-next patches for 4.15 Mostly fixes this time, but also few new features. Major changes: wil6210 * remove ssid debugfs file rsi * add WOWLAN support for suspend, hibernate and shutdown states ath10k * add support for CCMP-256, GCMP and GCMP-256 ciphers on hardware where it's supported (QCA99x0 and QCA4019) ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -14569,7 +14569,6 @@ L: wil6210@qca.qualcomm.com
|
||||
S: Supported
|
||||
W: http://wireless.kernel.org/en/users/Drivers/wil6210
|
||||
F: drivers/net/wireless/ath/wil6210/
|
||||
F: include/uapi/linux/wil6210_uapi.h
|
||||
|
||||
WIMAX STACK
|
||||
M: Inaky Perez-Gonzalez <inaky.perez-gonzalez@intel.com>
|
||||
|
||||
@@ -184,11 +184,14 @@ static void bcma_core_mips_print_irq(struct bcma_device *dev, unsigned int irq)
|
||||
{
|
||||
int i;
|
||||
static const char *irq_name[] = {"2(S)", "3", "4", "5", "6", "D", "I"};
|
||||
char interrupts[20];
|
||||
char *ints = interrupts;
|
||||
|
||||
bcma_debug(dev->bus, "core 0x%04x, irq :", dev->id.id);
|
||||
for (i = 0; i <= 6; i++)
|
||||
pr_cont(" %s%s", irq_name[i], i == irq ? "*" : " ");
|
||||
pr_cont("\n");
|
||||
for (i = 0; i < ARRAY_SIZE(irq_name); i++)
|
||||
ints += sprintf(ints, " %s%c",
|
||||
irq_name[i], i == irq ? '*' : ' ');
|
||||
|
||||
bcma_debug(dev->bus, "core 0x%04x, irq:%s\n", dev->id.id, interrupts);
|
||||
}
|
||||
|
||||
static void bcma_core_mips_dump_irq(struct bcma_bus *bus)
|
||||
|
||||
@@ -889,9 +889,9 @@ static void ar5523_tx_work(struct work_struct *work)
|
||||
mutex_unlock(&ar->mutex);
|
||||
}
|
||||
|
||||
static void ar5523_tx_wd_timer(unsigned long arg)
|
||||
static void ar5523_tx_wd_timer(struct timer_list *t)
|
||||
{
|
||||
struct ar5523 *ar = (struct ar5523 *) arg;
|
||||
struct ar5523 *ar = from_timer(ar, t, tx_wd_timer);
|
||||
|
||||
ar5523_dbg(ar, "TX watchdog timer triggered\n");
|
||||
ieee80211_queue_work(ar->hw, &ar->tx_wd_work);
|
||||
@@ -1599,8 +1599,7 @@ static int ar5523_probe(struct usb_interface *intf,
|
||||
mutex_init(&ar->mutex);
|
||||
|
||||
INIT_DELAYED_WORK(&ar->stat_work, ar5523_stat_work);
|
||||
init_timer(&ar->tx_wd_timer);
|
||||
setup_timer(&ar->tx_wd_timer, ar5523_tx_wd_timer, (unsigned long) ar);
|
||||
timer_setup(&ar->tx_wd_timer, ar5523_tx_wd_timer, 0);
|
||||
INIT_WORK(&ar->tx_wd_work, ar5523_tx_wd_work);
|
||||
INIT_WORK(&ar->tx_work, ar5523_tx_work);
|
||||
INIT_LIST_HEAD(&ar->tx_queue_pending);
|
||||
|
||||
@@ -74,6 +74,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.spectral_bin_discard = 0,
|
||||
.vht160_mcs_rx_highest = 0,
|
||||
.vht160_mcs_tx_highest = 0,
|
||||
.n_cipher_suites = 8,
|
||||
},
|
||||
{
|
||||
.id = QCA9887_HW_1_0_VERSION,
|
||||
@@ -97,6 +98,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.spectral_bin_discard = 0,
|
||||
.vht160_mcs_rx_highest = 0,
|
||||
.vht160_mcs_tx_highest = 0,
|
||||
.n_cipher_suites = 8,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_2_1_VERSION,
|
||||
@@ -119,6 +121,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.spectral_bin_discard = 0,
|
||||
.vht160_mcs_rx_highest = 0,
|
||||
.vht160_mcs_tx_highest = 0,
|
||||
.n_cipher_suites = 8,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_2_1_VERSION,
|
||||
@@ -141,6 +144,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.spectral_bin_discard = 0,
|
||||
.vht160_mcs_rx_highest = 0,
|
||||
.vht160_mcs_tx_highest = 0,
|
||||
.n_cipher_suites = 8,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_3_0_VERSION,
|
||||
@@ -163,6 +167,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.spectral_bin_discard = 0,
|
||||
.vht160_mcs_rx_highest = 0,
|
||||
.vht160_mcs_tx_highest = 0,
|
||||
.n_cipher_suites = 8,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_3_2_VERSION,
|
||||
@@ -188,6 +193,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.spectral_bin_discard = 0,
|
||||
.vht160_mcs_rx_highest = 0,
|
||||
.vht160_mcs_tx_highest = 0,
|
||||
.n_cipher_suites = 8,
|
||||
},
|
||||
{
|
||||
.id = QCA99X0_HW_2_0_DEV_VERSION,
|
||||
@@ -216,6 +222,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.spectral_bin_discard = 4,
|
||||
.vht160_mcs_rx_highest = 0,
|
||||
.vht160_mcs_tx_highest = 0,
|
||||
.n_cipher_suites = 11,
|
||||
},
|
||||
{
|
||||
.id = QCA9984_HW_1_0_DEV_VERSION,
|
||||
@@ -249,6 +256,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
*/
|
||||
.vht160_mcs_rx_highest = 1560,
|
||||
.vht160_mcs_tx_highest = 1560,
|
||||
.n_cipher_suites = 11,
|
||||
},
|
||||
{
|
||||
.id = QCA9888_HW_2_0_DEV_VERSION,
|
||||
@@ -281,6 +289,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
*/
|
||||
.vht160_mcs_rx_highest = 780,
|
||||
.vht160_mcs_tx_highest = 780,
|
||||
.n_cipher_suites = 11,
|
||||
},
|
||||
{
|
||||
.id = QCA9377_HW_1_0_DEV_VERSION,
|
||||
@@ -303,6 +312,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.spectral_bin_discard = 0,
|
||||
.vht160_mcs_rx_highest = 0,
|
||||
.vht160_mcs_tx_highest = 0,
|
||||
.n_cipher_suites = 8,
|
||||
},
|
||||
{
|
||||
.id = QCA9377_HW_1_1_DEV_VERSION,
|
||||
@@ -327,6 +337,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.spectral_bin_discard = 0,
|
||||
.vht160_mcs_rx_highest = 0,
|
||||
.vht160_mcs_tx_highest = 0,
|
||||
.n_cipher_suites = 8,
|
||||
},
|
||||
{
|
||||
.id = QCA4019_HW_1_0_DEV_VERSION,
|
||||
@@ -356,6 +367,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
||||
.spectral_bin_discard = 4,
|
||||
.vht160_mcs_rx_highest = 0,
|
||||
.vht160_mcs_tx_highest = 0,
|
||||
.n_cipher_suites = 11,
|
||||
},
|
||||
};
|
||||
|
||||
@@ -377,6 +389,7 @@ static const char *const ath10k_core_fw_feature_str[] = {
|
||||
[ATH10K_FW_FEATURE_BTCOEX_PARAM] = "btcoex-param",
|
||||
[ATH10K_FW_FEATURE_SKIP_NULL_FUNC_WAR] = "skip-null-func-war",
|
||||
[ATH10K_FW_FEATURE_ALLOWS_MESH_BCAST] = "allows-mesh-bcast",
|
||||
[ATH10K_FW_FEATURE_NO_PS] = "no-ps",
|
||||
};
|
||||
|
||||
static unsigned int ath10k_core_get_fw_feature_str(char *buf,
|
||||
|
||||
@@ -612,6 +612,9 @@ enum ath10k_fw_features {
|
||||
*/
|
||||
ATH10K_FW_FEATURE_ALLOWS_MESH_BCAST = 16,
|
||||
|
||||
/* Firmware does not support power save in station mode. */
|
||||
ATH10K_FW_FEATURE_NO_PS = 17,
|
||||
|
||||
/* keep last */
|
||||
ATH10K_FW_FEATURE_COUNT,
|
||||
};
|
||||
|
||||
@@ -200,9 +200,9 @@ static void ath10k_htt_rx_msdu_buff_replenish(struct ath10k_htt *htt)
|
||||
spin_unlock_bh(&htt->rx_ring.lock);
|
||||
}
|
||||
|
||||
static void ath10k_htt_rx_ring_refill_retry(unsigned long arg)
|
||||
static void ath10k_htt_rx_ring_refill_retry(struct timer_list *t)
|
||||
{
|
||||
struct ath10k_htt *htt = (struct ath10k_htt *)arg;
|
||||
struct ath10k_htt *htt = from_timer(htt, t, rx_ring.refill_retry_timer);
|
||||
|
||||
ath10k_htt_rx_msdu_buff_replenish(htt);
|
||||
}
|
||||
@@ -507,7 +507,7 @@ int ath10k_htt_rx_alloc(struct ath10k_htt *htt)
|
||||
*htt->rx_ring.alloc_idx.vaddr = 0;
|
||||
|
||||
/* Initialize the Rx refill retry timer */
|
||||
setup_timer(timer, ath10k_htt_rx_ring_refill_retry, (unsigned long)htt);
|
||||
timer_setup(timer, ath10k_htt_rx_ring_refill_retry, 0);
|
||||
|
||||
spin_lock_init(&htt->rx_ring.lock);
|
||||
|
||||
|
||||
@@ -310,7 +310,7 @@ static struct ath10k_hw_ce_dst_src_wm_regs wcn3990_wm_dst_ring = {
|
||||
.wm_high = &wcn3990_dst_wm_high,
|
||||
};
|
||||
|
||||
struct ath10k_hw_ce_regs wcn3990_ce_regs = {
|
||||
const struct ath10k_hw_ce_regs wcn3990_ce_regs = {
|
||||
.sr_base_addr = 0x00000000,
|
||||
.sr_size_addr = 0x00000008,
|
||||
.dr_base_addr = 0x0000000c,
|
||||
@@ -457,7 +457,7 @@ static struct ath10k_hw_ce_dst_src_wm_regs qcax_wm_dst_ring = {
|
||||
.wm_high = &qcax_dst_wm_high,
|
||||
};
|
||||
|
||||
struct ath10k_hw_ce_regs qcax_ce_regs = {
|
||||
const struct ath10k_hw_ce_regs qcax_ce_regs = {
|
||||
.sr_base_addr = 0x00000000,
|
||||
.sr_size_addr = 0x00000004,
|
||||
.dr_base_addr = 0x00000008,
|
||||
@@ -604,8 +604,13 @@ static void ath10k_hw_qca988x_set_coverage_class(struct ath10k *ar,
|
||||
|
||||
/* Only modify registers if the core is started. */
|
||||
if ((ar->state != ATH10K_STATE_ON) &&
|
||||
(ar->state != ATH10K_STATE_RESTARTED))
|
||||
(ar->state != ATH10K_STATE_RESTARTED)) {
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
/* Store config value for when radio boots up */
|
||||
ar->fw_coverage.coverage_class = value;
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
goto unlock;
|
||||
}
|
||||
|
||||
/* Retrieve the current values of the two registers that need to be
|
||||
* adjusted.
|
||||
@@ -637,7 +642,7 @@ static void ath10k_hw_qca988x_set_coverage_class(struct ath10k *ar,
|
||||
ar->fw_coverage.reg_ack_cts_timeout_orig = timeout_reg;
|
||||
ar->fw_coverage.reg_phyclk = phyclk_reg;
|
||||
|
||||
/* Calculat new value based on the (original) firmware calculation. */
|
||||
/* Calculate new value based on the (original) firmware calculation. */
|
||||
slottime_reg = ar->fw_coverage.reg_slottime_orig;
|
||||
timeout_reg = ar->fw_coverage.reg_ack_cts_timeout_orig;
|
||||
|
||||
|
||||
@@ -369,8 +369,8 @@ extern const struct ath10k_hw_values qca99x0_values;
|
||||
extern const struct ath10k_hw_values qca9888_values;
|
||||
extern const struct ath10k_hw_values qca4019_values;
|
||||
extern const struct ath10k_hw_values wcn3990_values;
|
||||
extern struct ath10k_hw_ce_regs wcn3990_ce_regs;
|
||||
extern struct ath10k_hw_ce_regs qcax_ce_regs;
|
||||
extern const struct ath10k_hw_ce_regs wcn3990_ce_regs;
|
||||
extern const struct ath10k_hw_ce_regs qcax_ce_regs;
|
||||
|
||||
void ath10k_hw_fill_survey_time(struct ath10k *ar, struct survey_info *survey,
|
||||
u32 cc, u32 rcc, u32 cc_prev, u32 rcc_prev);
|
||||
@@ -550,6 +550,9 @@ struct ath10k_hw_params {
|
||||
*/
|
||||
int vht160_mcs_rx_highest;
|
||||
int vht160_mcs_tx_highest;
|
||||
|
||||
/* Number of ciphers supported (i.e First N) in cipher_suites array */
|
||||
int n_cipher_suites;
|
||||
};
|
||||
|
||||
struct htt_rx_desc;
|
||||
|
||||
@@ -242,6 +242,16 @@ static int ath10k_send_key(struct ath10k_vif *arvif,
|
||||
case WLAN_CIPHER_SUITE_WEP104:
|
||||
arg.key_cipher = WMI_CIPHER_WEP;
|
||||
break;
|
||||
case WLAN_CIPHER_SUITE_CCMP_256:
|
||||
arg.key_cipher = WMI_CIPHER_AES_CCM;
|
||||
break;
|
||||
case WLAN_CIPHER_SUITE_GCMP:
|
||||
case WLAN_CIPHER_SUITE_GCMP_256:
|
||||
arg.key_cipher = WMI_CIPHER_AES_GCM;
|
||||
break;
|
||||
case WLAN_CIPHER_SUITE_BIP_GMAC_128:
|
||||
case WLAN_CIPHER_SUITE_BIP_GMAC_256:
|
||||
case WLAN_CIPHER_SUITE_BIP_CMAC_256:
|
||||
case WLAN_CIPHER_SUITE_AES_CMAC:
|
||||
WARN_ON(1);
|
||||
return -EINVAL;
|
||||
@@ -5575,6 +5585,59 @@ static void ath10k_mac_op_set_coverage_class(struct ieee80211_hw *hw, s16 value)
|
||||
ar->hw_params.hw_ops->set_coverage_class(ar, value);
|
||||
}
|
||||
|
||||
struct ath10k_mac_tdls_iter_data {
|
||||
u32 num_tdls_stations;
|
||||
struct ieee80211_vif *curr_vif;
|
||||
};
|
||||
|
||||
static void ath10k_mac_tdls_vif_stations_count_iter(void *data,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct ath10k_mac_tdls_iter_data *iter_data = data;
|
||||
struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
|
||||
struct ieee80211_vif *sta_vif = arsta->arvif->vif;
|
||||
|
||||
if (sta->tdls && sta_vif == iter_data->curr_vif)
|
||||
iter_data->num_tdls_stations++;
|
||||
}
|
||||
|
||||
static int ath10k_mac_tdls_vif_stations_count(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
struct ath10k_mac_tdls_iter_data data = {};
|
||||
|
||||
data.curr_vif = vif;
|
||||
|
||||
ieee80211_iterate_stations_atomic(hw,
|
||||
ath10k_mac_tdls_vif_stations_count_iter,
|
||||
&data);
|
||||
return data.num_tdls_stations;
|
||||
}
|
||||
|
||||
static void ath10k_mac_tdls_vifs_count_iter(void *data, u8 *mac,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
struct ath10k_vif *arvif = (void *)vif->drv_priv;
|
||||
int *num_tdls_vifs = data;
|
||||
|
||||
if (vif->type != NL80211_IFTYPE_STATION)
|
||||
return;
|
||||
|
||||
if (ath10k_mac_tdls_vif_stations_count(arvif->ar->hw, vif) > 0)
|
||||
(*num_tdls_vifs)++;
|
||||
}
|
||||
|
||||
static int ath10k_mac_tdls_vifs_count(struct ieee80211_hw *hw)
|
||||
{
|
||||
int num_tdls_vifs = 0;
|
||||
|
||||
ieee80211_iterate_active_interfaces_atomic(hw,
|
||||
IEEE80211_IFACE_ITER_NORMAL,
|
||||
ath10k_mac_tdls_vifs_count_iter,
|
||||
&num_tdls_vifs);
|
||||
return num_tdls_vifs;
|
||||
}
|
||||
|
||||
static int ath10k_hw_scan(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_scan_request *hw_req)
|
||||
@@ -5588,6 +5651,11 @@ static int ath10k_hw_scan(struct ieee80211_hw *hw,
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
||||
if (ath10k_mac_tdls_vif_stations_count(hw, vif) > 0) {
|
||||
ret = -EBUSY;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
switch (ar->scan.state) {
|
||||
case ATH10K_SCAN_IDLE:
|
||||
@@ -5723,7 +5791,10 @@ static int ath10k_set_key(struct ieee80211_hw *hw, enum set_key_cmd cmd,
|
||||
u32 flags2;
|
||||
|
||||
/* this one needs to be done in software */
|
||||
if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC)
|
||||
if (key->cipher == WLAN_CIPHER_SUITE_AES_CMAC ||
|
||||
key->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_128 ||
|
||||
key->cipher == WLAN_CIPHER_SUITE_BIP_GMAC_256 ||
|
||||
key->cipher == WLAN_CIPHER_SUITE_BIP_CMAC_256)
|
||||
return 1;
|
||||
|
||||
if (arvif->nohwcrypt)
|
||||
@@ -6000,59 +6071,6 @@ static void ath10k_mac_dec_num_stations(struct ath10k_vif *arvif,
|
||||
ar->num_stations--;
|
||||
}
|
||||
|
||||
struct ath10k_mac_tdls_iter_data {
|
||||
u32 num_tdls_stations;
|
||||
struct ieee80211_vif *curr_vif;
|
||||
};
|
||||
|
||||
static void ath10k_mac_tdls_vif_stations_count_iter(void *data,
|
||||
struct ieee80211_sta *sta)
|
||||
{
|
||||
struct ath10k_mac_tdls_iter_data *iter_data = data;
|
||||
struct ath10k_sta *arsta = (struct ath10k_sta *)sta->drv_priv;
|
||||
struct ieee80211_vif *sta_vif = arsta->arvif->vif;
|
||||
|
||||
if (sta->tdls && sta_vif == iter_data->curr_vif)
|
||||
iter_data->num_tdls_stations++;
|
||||
}
|
||||
|
||||
static int ath10k_mac_tdls_vif_stations_count(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
struct ath10k_mac_tdls_iter_data data = {};
|
||||
|
||||
data.curr_vif = vif;
|
||||
|
||||
ieee80211_iterate_stations_atomic(hw,
|
||||
ath10k_mac_tdls_vif_stations_count_iter,
|
||||
&data);
|
||||
return data.num_tdls_stations;
|
||||
}
|
||||
|
||||
static void ath10k_mac_tdls_vifs_count_iter(void *data, u8 *mac,
|
||||
struct ieee80211_vif *vif)
|
||||
{
|
||||
struct ath10k_vif *arvif = (void *)vif->drv_priv;
|
||||
int *num_tdls_vifs = data;
|
||||
|
||||
if (vif->type != NL80211_IFTYPE_STATION)
|
||||
return;
|
||||
|
||||
if (ath10k_mac_tdls_vif_stations_count(arvif->ar->hw, vif) > 0)
|
||||
(*num_tdls_vifs)++;
|
||||
}
|
||||
|
||||
static int ath10k_mac_tdls_vifs_count(struct ieee80211_hw *hw)
|
||||
{
|
||||
int num_tdls_vifs = 0;
|
||||
|
||||
ieee80211_iterate_active_interfaces_atomic(hw,
|
||||
IEEE80211_IFACE_ITER_NORMAL,
|
||||
ath10k_mac_tdls_vifs_count_iter,
|
||||
&num_tdls_vifs);
|
||||
return num_tdls_vifs;
|
||||
}
|
||||
|
||||
static int ath10k_sta_state(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta,
|
||||
@@ -6477,6 +6495,11 @@ static int ath10k_remain_on_channel(struct ieee80211_hw *hw,
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
||||
if (ath10k_mac_tdls_vif_stations_count(hw, vif) > 0) {
|
||||
ret = -EBUSY;
|
||||
goto exit;
|
||||
}
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
switch (ar->scan.state) {
|
||||
case ATH10K_SCAN_IDLE:
|
||||
@@ -8074,7 +8097,22 @@ int ath10k_mac_register(struct ath10k *ar)
|
||||
WLAN_CIPHER_SUITE_WEP104,
|
||||
WLAN_CIPHER_SUITE_TKIP,
|
||||
WLAN_CIPHER_SUITE_CCMP,
|
||||
|
||||
/* Do not add hardware supported ciphers before this line.
|
||||
* Allow software encryption for all chips. Don't forget to
|
||||
* update n_cipher_suites below.
|
||||
*/
|
||||
WLAN_CIPHER_SUITE_AES_CMAC,
|
||||
WLAN_CIPHER_SUITE_BIP_CMAC_256,
|
||||
WLAN_CIPHER_SUITE_BIP_GMAC_128,
|
||||
WLAN_CIPHER_SUITE_BIP_GMAC_256,
|
||||
|
||||
/* Only QCA99x0 and QCA4019 varients support GCMP-128, GCMP-256
|
||||
* and CCMP-256 in hardware.
|
||||
*/
|
||||
WLAN_CIPHER_SUITE_GCMP,
|
||||
WLAN_CIPHER_SUITE_GCMP_256,
|
||||
WLAN_CIPHER_SUITE_CCMP_256,
|
||||
};
|
||||
struct ieee80211_supported_band *band;
|
||||
void *channels;
|
||||
@@ -8146,8 +8184,13 @@ int ath10k_mac_register(struct ath10k *ar)
|
||||
BIT(NL80211_IFTYPE_P2P_GO);
|
||||
|
||||
ieee80211_hw_set(ar->hw, SIGNAL_DBM);
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_PS);
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_DYNAMIC_PS);
|
||||
|
||||
if (!test_bit(ATH10K_FW_FEATURE_NO_PS,
|
||||
ar->running_fw->fw_file.fw_features)) {
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_PS);
|
||||
ieee80211_hw_set(ar->hw, SUPPORTS_DYNAMIC_PS);
|
||||
}
|
||||
|
||||
ieee80211_hw_set(ar->hw, MFP_CAPABLE);
|
||||
ieee80211_hw_set(ar->hw, REPORTS_TX_ACK_STATUS);
|
||||
ieee80211_hw_set(ar->hw, HAS_RATE_CONTROL);
|
||||
@@ -8313,7 +8356,18 @@ int ath10k_mac_register(struct ath10k *ar)
|
||||
}
|
||||
|
||||
ar->hw->wiphy->cipher_suites = cipher_suites;
|
||||
ar->hw->wiphy->n_cipher_suites = ARRAY_SIZE(cipher_suites);
|
||||
|
||||
/* QCA988x and QCA6174 family chips do not support CCMP-256, GCMP-128
|
||||
* and GCMP-256 ciphers in hardware. Fetch number of ciphers supported
|
||||
* from chip specific hw_param table.
|
||||
*/
|
||||
if (!ar->hw_params.n_cipher_suites ||
|
||||
ar->hw_params.n_cipher_suites > ARRAY_SIZE(cipher_suites)) {
|
||||
ath10k_err(ar, "invalid hw_params.n_cipher_suites %d\n",
|
||||
ar->hw_params.n_cipher_suites);
|
||||
ar->hw_params.n_cipher_suites = 8;
|
||||
}
|
||||
ar->hw->wiphy->n_cipher_suites = ar->hw_params.n_cipher_suites;
|
||||
|
||||
wiphy_ext_feature_set(ar->hw->wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
|
||||
|
||||
|
||||
@@ -585,10 +585,10 @@ skip:
|
||||
spin_unlock_irqrestore(&ar_pci->ps_lock, flags);
|
||||
}
|
||||
|
||||
static void ath10k_pci_ps_timer(unsigned long ptr)
|
||||
static void ath10k_pci_ps_timer(struct timer_list *t)
|
||||
{
|
||||
struct ath10k *ar = (void *)ptr;
|
||||
struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
|
||||
struct ath10k_pci *ar_pci = from_timer(ar_pci, t, ps_timer);
|
||||
struct ath10k *ar = ar_pci->ar;
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&ar_pci->ps_lock, flags);
|
||||
@@ -838,9 +838,10 @@ void ath10k_pci_rx_post(struct ath10k *ar)
|
||||
ath10k_pci_rx_post_pipe(&ar_pci->pipe_info[i]);
|
||||
}
|
||||
|
||||
void ath10k_pci_rx_replenish_retry(unsigned long ptr)
|
||||
void ath10k_pci_rx_replenish_retry(struct timer_list *t)
|
||||
{
|
||||
struct ath10k *ar = (void *)ptr;
|
||||
struct ath10k_pci *ar_pci = from_timer(ar_pci, t, rx_post_retry);
|
||||
struct ath10k *ar = ar_pci->ar;
|
||||
|
||||
ath10k_pci_rx_post(ar);
|
||||
}
|
||||
@@ -2577,9 +2578,13 @@ void ath10k_pci_hif_power_down(struct ath10k *ar)
|
||||
*/
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
static int ath10k_pci_hif_suspend(struct ath10k *ar)
|
||||
{
|
||||
/* Nothing to do; the important stuff is in the driver suspend. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath10k_pci_suspend(struct ath10k *ar)
|
||||
{
|
||||
/* The grace timer can still be counting down and ar->ps_awake be true.
|
||||
* It is known that the device may be asleep after resuming regardless
|
||||
@@ -2592,6 +2597,12 @@ static int ath10k_pci_hif_suspend(struct ath10k *ar)
|
||||
}
|
||||
|
||||
static int ath10k_pci_hif_resume(struct ath10k *ar)
|
||||
{
|
||||
/* Nothing to do; the important stuff is in the driver resume. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath10k_pci_resume(struct ath10k *ar)
|
||||
{
|
||||
struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
|
||||
struct pci_dev *pdev = ar_pci->pdev;
|
||||
@@ -2615,7 +2626,6 @@ static int ath10k_pci_hif_resume(struct ath10k *ar)
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
static bool ath10k_pci_validate_cal(void *data, size_t size)
|
||||
{
|
||||
@@ -2770,10 +2780,8 @@ static const struct ath10k_hif_ops ath10k_pci_hif_ops = {
|
||||
.power_down = ath10k_pci_hif_power_down,
|
||||
.read32 = ath10k_pci_read32,
|
||||
.write32 = ath10k_pci_write32,
|
||||
#ifdef CONFIG_PM
|
||||
.suspend = ath10k_pci_hif_suspend,
|
||||
.resume = ath10k_pci_hif_resume,
|
||||
#endif
|
||||
.fetch_cal_eeprom = ath10k_pci_hif_fetch_cal_eeprom,
|
||||
};
|
||||
|
||||
@@ -3157,8 +3165,7 @@ int ath10k_pci_setup_resource(struct ath10k *ar)
|
||||
spin_lock_init(&ce->ce_lock);
|
||||
spin_lock_init(&ar_pci->ps_lock);
|
||||
|
||||
setup_timer(&ar_pci->rx_post_retry, ath10k_pci_rx_replenish_retry,
|
||||
(unsigned long)ar);
|
||||
timer_setup(&ar_pci->rx_post_retry, ath10k_pci_rx_replenish_retry, 0);
|
||||
|
||||
if (QCA_REV_6174(ar) || QCA_REV_9377(ar))
|
||||
ath10k_pci_override_ce_config(ar);
|
||||
@@ -3284,8 +3291,7 @@ static int ath10k_pci_probe(struct pci_dev *pdev,
|
||||
ar->id.subsystem_vendor = pdev->subsystem_vendor;
|
||||
ar->id.subsystem_device = pdev->subsystem_device;
|
||||
|
||||
setup_timer(&ar_pci->ps_timer, ath10k_pci_ps_timer,
|
||||
(unsigned long)ar);
|
||||
timer_setup(&ar_pci->ps_timer, ath10k_pci_ps_timer, 0);
|
||||
|
||||
ret = ath10k_pci_setup_resource(ar);
|
||||
if (ret) {
|
||||
@@ -3401,11 +3407,7 @@ static __maybe_unused int ath10k_pci_pm_suspend(struct device *dev)
|
||||
struct ath10k *ar = dev_get_drvdata(dev);
|
||||
int ret;
|
||||
|
||||
if (test_bit(ATH10K_FW_FEATURE_WOWLAN_SUPPORT,
|
||||
ar->running_fw->fw_file.fw_features))
|
||||
return 0;
|
||||
|
||||
ret = ath10k_hif_suspend(ar);
|
||||
ret = ath10k_pci_suspend(ar);
|
||||
if (ret)
|
||||
ath10k_warn(ar, "failed to suspend hif: %d\n", ret);
|
||||
|
||||
@@ -3417,11 +3419,7 @@ static __maybe_unused int ath10k_pci_pm_resume(struct device *dev)
|
||||
struct ath10k *ar = dev_get_drvdata(dev);
|
||||
int ret;
|
||||
|
||||
if (test_bit(ATH10K_FW_FEATURE_WOWLAN_SUPPORT,
|
||||
ar->running_fw->fw_file.fw_features))
|
||||
return 0;
|
||||
|
||||
ret = ath10k_hif_resume(ar);
|
||||
ret = ath10k_pci_resume(ar);
|
||||
if (ret)
|
||||
ath10k_warn(ar, "failed to resume hif: %d\n", ret);
|
||||
|
||||
|
||||
@@ -278,7 +278,7 @@ void ath10k_pci_hif_power_down(struct ath10k *ar);
|
||||
int ath10k_pci_alloc_pipes(struct ath10k *ar);
|
||||
void ath10k_pci_free_pipes(struct ath10k *ar);
|
||||
void ath10k_pci_free_pipes(struct ath10k *ar);
|
||||
void ath10k_pci_rx_replenish_retry(unsigned long ptr);
|
||||
void ath10k_pci_rx_replenish_retry(struct timer_list *t);
|
||||
void ath10k_pci_ce_deinit(struct ath10k *ar);
|
||||
void ath10k_pci_init_napi(struct ath10k *ar);
|
||||
int ath10k_pci_init_pipes(struct ath10k *ar);
|
||||
|
||||
@@ -406,7 +406,7 @@ static ssize_t write_file_spectral_count(struct file *file,
|
||||
if (kstrtoul(buf, 0, &val))
|
||||
return -EINVAL;
|
||||
|
||||
if (val < 0 || val > 255)
|
||||
if (val > 255)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
||||
@@ -7870,7 +7870,8 @@ ath10k_wmi_10_4_gen_update_fw_tdls_state(struct ath10k *ar, u32 vdev_id,
|
||||
if (!skb)
|
||||
return ERR_PTR(-ENOMEM);
|
||||
|
||||
if (test_bit(WMI_SERVICE_TDLS_EXPLICIT_MODE_ONLY, ar->wmi.svc_map))
|
||||
if (test_bit(WMI_SERVICE_TDLS_EXPLICIT_MODE_ONLY, ar->wmi.svc_map) &&
|
||||
state == WMI_TDLS_ENABLE_ACTIVE)
|
||||
state = WMI_TDLS_ENABLE_PASSIVE;
|
||||
|
||||
if (test_bit(WMI_SERVICE_TDLS_UAPSD_BUFFER_STA, ar->wmi.svc_map))
|
||||
|
||||
@@ -4751,6 +4751,7 @@ struct wmi_key_seq_counter {
|
||||
#define WMI_CIPHER_WAPI 0x5
|
||||
#define WMI_CIPHER_CKIP 0x6
|
||||
#define WMI_CIPHER_AES_CMAC 0x7
|
||||
#define WMI_CIPHER_AES_GCM 0x8
|
||||
|
||||
struct wmi_vdev_install_key_cmd {
|
||||
__le32 vdev_id;
|
||||
|
||||
@@ -3589,10 +3589,8 @@ static int ath6kl_cfg80211_vif_init(struct ath6kl_vif *vif)
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
setup_timer(&vif->disconnect_timer, disconnect_timer_handler,
|
||||
(unsigned long) vif->ndev);
|
||||
setup_timer(&vif->sched_scan_timer, ath6kl_wmi_sscan_timer,
|
||||
(unsigned long) vif);
|
||||
timer_setup(&vif->disconnect_timer, disconnect_timer_handler, 0);
|
||||
timer_setup(&vif->sched_scan_timer, ath6kl_wmi_sscan_timer, 0);
|
||||
|
||||
set_bit(WMM_ENABLED, &vif->flags);
|
||||
spin_lock_init(&vif->if_lock);
|
||||
|
||||
@@ -893,7 +893,7 @@ static inline u32 ath6kl_get_hi_item_addr(struct ath6kl *ar,
|
||||
|
||||
int ath6kl_configure_target(struct ath6kl *ar);
|
||||
void ath6kl_detect_error(unsigned long ptr);
|
||||
void disconnect_timer_handler(unsigned long ptr);
|
||||
void disconnect_timer_handler(struct timer_list *t);
|
||||
void init_netdev(struct net_device *dev);
|
||||
void ath6kl_cookie_init(struct ath6kl *ar);
|
||||
void ath6kl_cookie_cleanup(struct ath6kl *ar);
|
||||
|
||||
@@ -494,10 +494,9 @@ void ath6kl_connect_ap_mode_sta(struct ath6kl_vif *vif, u16 aid, u8 *mac_addr,
|
||||
netif_wake_queue(vif->ndev);
|
||||
}
|
||||
|
||||
void disconnect_timer_handler(unsigned long ptr)
|
||||
void disconnect_timer_handler(struct timer_list *t)
|
||||
{
|
||||
struct net_device *dev = (struct net_device *)ptr;
|
||||
struct ath6kl_vif *vif = netdev_priv(dev);
|
||||
struct ath6kl_vif *vif = from_timer(vif, t, disconnect_timer);
|
||||
|
||||
ath6kl_init_profile_info(vif);
|
||||
ath6kl_disconnect(vif);
|
||||
|
||||
@@ -1620,10 +1620,10 @@ void ath6kl_rx(struct htc_target *target, struct htc_packet *packet)
|
||||
ath6kl_deliver_frames_to_nw_stack(vif->ndev, skb);
|
||||
}
|
||||
|
||||
static void aggr_timeout(unsigned long arg)
|
||||
static void aggr_timeout(struct timer_list *t)
|
||||
{
|
||||
u8 i, j;
|
||||
struct aggr_info_conn *aggr_conn = (struct aggr_info_conn *) arg;
|
||||
struct aggr_info_conn *aggr_conn = from_timer(aggr_conn, t, timer);
|
||||
struct rxtid *rxtid;
|
||||
struct rxtid_stats *stats;
|
||||
|
||||
@@ -1753,7 +1753,7 @@ void aggr_conn_init(struct ath6kl_vif *vif, struct aggr_info *aggr_info,
|
||||
|
||||
aggr_conn->aggr_sz = AGGR_SZ_DEFAULT;
|
||||
aggr_conn->dev = vif->ndev;
|
||||
setup_timer(&aggr_conn->timer, aggr_timeout, (unsigned long)aggr_conn);
|
||||
timer_setup(&aggr_conn->timer, aggr_timeout, 0);
|
||||
aggr_conn->aggr_info = aggr_info;
|
||||
|
||||
aggr_conn->timer_scheduled = false;
|
||||
|
||||
@@ -1078,9 +1078,9 @@ static int ath6kl_wmi_tkip_micerr_event_rx(struct wmi *wmi, u8 *datap, int len,
|
||||
return 0;
|
||||
}
|
||||
|
||||
void ath6kl_wmi_sscan_timer(unsigned long ptr)
|
||||
void ath6kl_wmi_sscan_timer(struct timer_list *t)
|
||||
{
|
||||
struct ath6kl_vif *vif = (struct ath6kl_vif *) ptr;
|
||||
struct ath6kl_vif *vif = from_timer(vif, t, sched_scan_timer);
|
||||
|
||||
cfg80211_sched_scan_results(vif->ar->wiphy, 0);
|
||||
}
|
||||
|
||||
@@ -2719,7 +2719,7 @@ int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type,
|
||||
|
||||
int ath6kl_wmi_set_inact_period(struct wmi *wmi, u8 if_idx, int inact_timeout);
|
||||
|
||||
void ath6kl_wmi_sscan_timer(unsigned long ptr);
|
||||
void ath6kl_wmi_sscan_timer(struct timer_list *t);
|
||||
|
||||
int ath6kl_wmi_get_challenge_resp_cmd(struct wmi *wmi, u32 cookie, u32 source);
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user