Merge ath-next from git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
ath.git patches for v5.12. Major changes: ath10k * support setting SAR limits via nl80211
This commit is contained in:
commit
e7bb4e71ab
|
@ -90,6 +90,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = true,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA988X_HW_2_0_VERSION,
|
||||
|
@ -124,6 +125,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = true,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9887_HW_1_0_VERSION,
|
||||
|
@ -159,6 +161,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_3_2_VERSION,
|
||||
|
@ -189,6 +192,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.tx_stats_over_pktlog = false,
|
||||
.bmi_large_size_download = true,
|
||||
.supports_peer_stats_info = true,
|
||||
.dynamic_sar_support = true,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_2_1_VERSION,
|
||||
|
@ -223,6 +227,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_2_1_VERSION,
|
||||
|
@ -257,6 +262,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_3_0_VERSION,
|
||||
|
@ -291,6 +297,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA6174_HW_3_2_VERSION,
|
||||
|
@ -329,6 +336,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.fw_diag_ce_download = true,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.supports_peer_stats_info = true,
|
||||
.dynamic_sar_support = true,
|
||||
},
|
||||
{
|
||||
.id = QCA99X0_HW_2_0_DEV_VERSION,
|
||||
|
@ -369,6 +377,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9984_HW_1_0_DEV_VERSION,
|
||||
|
@ -416,6 +425,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9888_HW_2_0_DEV_VERSION,
|
||||
|
@ -460,6 +470,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9377_HW_1_0_DEV_VERSION,
|
||||
|
@ -494,6 +505,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9377_HW_1_1_DEV_VERSION,
|
||||
|
@ -530,6 +542,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = true,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA9377_HW_1_1_DEV_VERSION,
|
||||
|
@ -557,6 +570,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.ast_skid_limit = 0x10,
|
||||
.num_wds_entries = 0x20,
|
||||
.uart_pin_workaround = true,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = QCA4019_HW_1_0_DEV_VERSION,
|
||||
|
@ -598,6 +612,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = true,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.dynamic_sar_support = false,
|
||||
},
|
||||
{
|
||||
.id = WCN3990_HW_1_0_DEV_VERSION,
|
||||
|
@ -625,6 +640,7 @@ static const struct ath10k_hw_params ath10k_hw_params_list[] = {
|
|||
.hw_filter_reset_required = false,
|
||||
.fw_diag_ce_download = false,
|
||||
.tx_stats_over_pktlog = false,
|
||||
.dynamic_sar_support = true,
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -1019,7 +1019,6 @@ struct ath10k {
|
|||
enum ath10k_hw_rev hw_rev;
|
||||
u16 dev_id;
|
||||
u32 chip_id;
|
||||
enum ath10k_dev_type dev_type;
|
||||
u32 target_version;
|
||||
u8 fw_version_major;
|
||||
u32 fw_version_minor;
|
||||
|
@ -1296,6 +1295,9 @@ struct ath10k {
|
|||
bool coex_support;
|
||||
int coex_gpio_pin;
|
||||
|
||||
s32 tx_power_2g_limit;
|
||||
s32 tx_power_5g_limit;
|
||||
|
||||
/* must be last */
|
||||
u8 drv_priv[] __aligned(sizeof(void *));
|
||||
};
|
||||
|
|
|
@ -449,6 +449,10 @@ void ath10k_htc_rx_completion_handler(struct ath10k *ar, struct sk_buff *skb)
|
|||
}
|
||||
|
||||
ep = &htc->endpoint[eid];
|
||||
if (ep->service_id == ATH10K_HTC_SVC_ID_UNUSED) {
|
||||
ath10k_warn(ar, "htc rx endpoint %d is not connected\n", eid);
|
||||
goto out;
|
||||
}
|
||||
|
||||
payload_len = __le16_to_cpu(hdr->len);
|
||||
|
||||
|
|
|
@ -2241,7 +2241,7 @@ struct htt_rx_chan_info {
|
|||
* Should be: sizeof(struct htt_host_rx_desc) + max rx MSDU size,
|
||||
* rounded up to a cache line size.
|
||||
*/
|
||||
#define HTT_RX_BUF_SIZE 1920
|
||||
#define HTT_RX_BUF_SIZE 2048
|
||||
#define HTT_RX_MSDU_SIZE (HTT_RX_BUF_SIZE - (int)sizeof(struct htt_rx_desc))
|
||||
|
||||
/* Refill a bunch of RX buffers for each refill round so that FW/HW can handle
|
||||
|
|
|
@ -2781,13 +2781,13 @@ static void ath10k_htt_rx_addba(struct ath10k *ar, struct htt_resp *resp)
|
|||
peer_id = MS(info0, HTT_RX_BA_INFO0_PEER_ID);
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT,
|
||||
"htt rx addba tid %hu peer_id %hu size %hhu\n",
|
||||
"htt rx addba tid %u peer_id %u size %u\n",
|
||||
tid, peer_id, ev->window_size);
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
peer = ath10k_peer_find_by_id(ar, peer_id);
|
||||
if (!peer) {
|
||||
ath10k_warn(ar, "received addba event for invalid peer_id: %hu\n",
|
||||
ath10k_warn(ar, "received addba event for invalid peer_id: %u\n",
|
||||
peer_id);
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
return;
|
||||
|
@ -2802,7 +2802,7 @@ static void ath10k_htt_rx_addba(struct ath10k *ar, struct htt_resp *resp)
|
|||
}
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT,
|
||||
"htt rx start rx ba session sta %pM tid %hu size %hhu\n",
|
||||
"htt rx start rx ba session sta %pM tid %u size %u\n",
|
||||
peer->addr, tid, ev->window_size);
|
||||
|
||||
ieee80211_start_rx_ba_session_offl(arvif->vif, peer->addr, tid);
|
||||
|
@ -2821,13 +2821,13 @@ static void ath10k_htt_rx_delba(struct ath10k *ar, struct htt_resp *resp)
|
|||
peer_id = MS(info0, HTT_RX_BA_INFO0_PEER_ID);
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT,
|
||||
"htt rx delba tid %hu peer_id %hu\n",
|
||||
"htt rx delba tid %u peer_id %u\n",
|
||||
tid, peer_id);
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
peer = ath10k_peer_find_by_id(ar, peer_id);
|
||||
if (!peer) {
|
||||
ath10k_warn(ar, "received addba event for invalid peer_id: %hu\n",
|
||||
ath10k_warn(ar, "received addba event for invalid peer_id: %u\n",
|
||||
peer_id);
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
return;
|
||||
|
@ -2842,7 +2842,7 @@ static void ath10k_htt_rx_delba(struct ath10k *ar, struct htt_resp *resp)
|
|||
}
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT,
|
||||
"htt rx stop rx ba session sta %pM tid %hu\n",
|
||||
"htt rx stop rx ba session sta %pM tid %u\n",
|
||||
peer->addr, tid);
|
||||
|
||||
ieee80211_stop_rx_ba_session_offl(arvif->vif, peer->addr, tid);
|
||||
|
@ -3102,7 +3102,7 @@ static void ath10k_htt_rx_tx_fetch_ind(struct ath10k *ar, struct sk_buff *skb)
|
|||
return;
|
||||
}
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT, "htt rx tx fetch ind num records %hu num resps %hu seq %hu\n",
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT, "htt rx tx fetch ind num records %u num resps %u seq %u\n",
|
||||
num_records, num_resp_ids,
|
||||
le16_to_cpu(resp->tx_fetch_ind.fetch_seq_num));
|
||||
|
||||
|
@ -3127,12 +3127,12 @@ static void ath10k_htt_rx_tx_fetch_ind(struct ath10k *ar, struct sk_buff *skb)
|
|||
max_num_msdus = le16_to_cpu(record->num_msdus);
|
||||
max_num_bytes = le32_to_cpu(record->num_bytes);
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT, "htt rx tx fetch record %i peer_id %hu tid %hhu msdus %zu bytes %zu\n",
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT, "htt rx tx fetch record %i peer_id %u tid %u msdus %zu bytes %zu\n",
|
||||
i, peer_id, tid, max_num_msdus, max_num_bytes);
|
||||
|
||||
if (unlikely(peer_id >= ar->htt.tx_q_state.num_peers) ||
|
||||
unlikely(tid >= ar->htt.tx_q_state.num_tids)) {
|
||||
ath10k_warn(ar, "received out of range peer_id %hu tid %hhu\n",
|
||||
ath10k_warn(ar, "received out of range peer_id %u tid %u\n",
|
||||
peer_id, tid);
|
||||
continue;
|
||||
}
|
||||
|
@ -3146,7 +3146,7 @@ static void ath10k_htt_rx_tx_fetch_ind(struct ath10k *ar, struct sk_buff *skb)
|
|||
*/
|
||||
|
||||
if (unlikely(!txq)) {
|
||||
ath10k_warn(ar, "failed to lookup txq for peer_id %hu tid %hhu\n",
|
||||
ath10k_warn(ar, "failed to lookup txq for peer_id %u tid %u\n",
|
||||
peer_id, tid);
|
||||
continue;
|
||||
}
|
||||
|
@ -3259,7 +3259,7 @@ static void ath10k_htt_rx_tx_mode_switch_ind(struct ath10k *ar,
|
|||
threshold = MS(info1, HTT_TX_MODE_SWITCH_IND_INFO1_THRESHOLD);
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT,
|
||||
"htt rx tx mode switch ind info0 0x%04hx info1 0x%04hx enable %d num records %zd mode %d threshold %hu\n",
|
||||
"htt rx tx mode switch ind info0 0x%04hx info1 0x%04x enable %d num records %zd mode %d threshold %u\n",
|
||||
info0, info1, enable, num_records, mode, threshold);
|
||||
|
||||
len += sizeof(resp->tx_mode_switch_ind.records[0]) * num_records;
|
||||
|
@ -3296,7 +3296,7 @@ static void ath10k_htt_rx_tx_mode_switch_ind(struct ath10k *ar,
|
|||
|
||||
if (unlikely(peer_id >= ar->htt.tx_q_state.num_peers) ||
|
||||
unlikely(tid >= ar->htt.tx_q_state.num_tids)) {
|
||||
ath10k_warn(ar, "received out of range peer_id %hu tid %hhu\n",
|
||||
ath10k_warn(ar, "received out of range peer_id %u tid %u\n",
|
||||
peer_id, tid);
|
||||
continue;
|
||||
}
|
||||
|
@ -3310,7 +3310,7 @@ static void ath10k_htt_rx_tx_mode_switch_ind(struct ath10k *ar,
|
|||
*/
|
||||
|
||||
if (unlikely(!txq)) {
|
||||
ath10k_warn(ar, "failed to lookup txq for peer_id %hu tid %hhu\n",
|
||||
ath10k_warn(ar, "failed to lookup txq for peer_id %u tid %u\n",
|
||||
peer_id, tid);
|
||||
continue;
|
||||
}
|
||||
|
@ -3348,7 +3348,7 @@ static inline s8 ath10k_get_legacy_rate_idx(struct ath10k *ar, u8 rate)
|
|||
return i;
|
||||
}
|
||||
|
||||
ath10k_warn(ar, "Invalid legacy rate %hhd peer stats", rate);
|
||||
ath10k_warn(ar, "Invalid legacy rate %d peer stats", rate);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
@ -3502,13 +3502,13 @@ ath10k_update_per_peer_tx_stats(struct ath10k *ar,
|
|||
return;
|
||||
|
||||
if (txrate.flags == WMI_RATE_PREAMBLE_VHT && txrate.mcs > 9) {
|
||||
ath10k_warn(ar, "Invalid VHT mcs %hhd peer stats", txrate.mcs);
|
||||
ath10k_warn(ar, "Invalid VHT mcs %d peer stats", txrate.mcs);
|
||||
return;
|
||||
}
|
||||
|
||||
if (txrate.flags == WMI_RATE_PREAMBLE_HT &&
|
||||
(txrate.mcs > 7 || txrate.nss < 1)) {
|
||||
ath10k_warn(ar, "Invalid HT mcs %hhd nss %hhd peer stats",
|
||||
ath10k_warn(ar, "Invalid HT mcs %d nss %d peer stats",
|
||||
txrate.mcs, txrate.nss);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -72,7 +72,7 @@ static void __ath10k_htt_tx_txq_recalc(struct ieee80211_hw *hw,
|
|||
|
||||
if (unlikely(peer_id >= ar->htt.tx_q_state.num_peers) ||
|
||||
unlikely(tid >= ar->htt.tx_q_state.num_tids)) {
|
||||
ath10k_warn(ar, "refusing to update txq for peer_id %hu tid %hhu due to out of bounds\n",
|
||||
ath10k_warn(ar, "refusing to update txq for peer_id %u tid %u due to out of bounds\n",
|
||||
peer_id, tid);
|
||||
return;
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ static void __ath10k_htt_tx_txq_recalc(struct ieee80211_hw *hw,
|
|||
ar->htt.tx_q_state.vaddr->map[tid][idx] &= ~bit;
|
||||
ar->htt.tx_q_state.vaddr->map[tid][idx] |= count ? bit : 0;
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT, "htt tx txq state update peer_id %hu tid %hhu count %hhu\n",
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT, "htt tx txq state update peer_id %u tid %u count %u\n",
|
||||
peer_id, tid, count);
|
||||
}
|
||||
|
||||
|
@ -213,7 +213,7 @@ void ath10k_htt_tx_free_msdu_id(struct ath10k_htt *htt, u16 msdu_id)
|
|||
|
||||
lockdep_assert_held(&htt->tx_lock);
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT, "htt tx free msdu_id %hu\n", msdu_id);
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT, "htt tx free msdu_id %u\n", msdu_id);
|
||||
|
||||
idr_remove(&htt->pending_tx, msdu_id);
|
||||
}
|
||||
|
@ -507,7 +507,7 @@ static int ath10k_htt_tx_clean_up_pending(int msdu_id, void *skb, void *ctx)
|
|||
struct ath10k_htt *htt = &ar->htt;
|
||||
struct htt_tx_done tx_done = {0};
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT, "force cleanup msdu_id %hu\n", msdu_id);
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT, "force cleanup msdu_id %u\n", msdu_id);
|
||||
|
||||
tx_done.msdu_id = msdu_id;
|
||||
tx_done.status = HTT_TX_COMPL_STATE_DISCARD;
|
||||
|
@ -1557,7 +1557,7 @@ static int ath10k_htt_tx_32(struct ath10k_htt *htt,
|
|||
|
||||
trace_ath10k_htt_tx(ar, msdu_id, msdu->len, vdev_id, tid);
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT,
|
||||
"htt tx flags0 %hhu flags1 %hu len %d id %hu frags_paddr %pad, msdu_paddr %pad vdev %hhu tid %hhu freq %hu\n",
|
||||
"htt tx flags0 %u flags1 %u len %d id %u frags_paddr %pad, msdu_paddr %pad vdev %u tid %u freq %u\n",
|
||||
flags0, flags1, msdu->len, msdu_id, &frags_paddr,
|
||||
&skb_cb->paddr, vdev_id, tid, freq);
|
||||
ath10k_dbg_dump(ar, ATH10K_DBG_HTT_DUMP, NULL, "htt tx msdu: ",
|
||||
|
@ -1766,7 +1766,7 @@ static int ath10k_htt_tx_64(struct ath10k_htt *htt,
|
|||
|
||||
trace_ath10k_htt_tx(ar, msdu_id, msdu->len, vdev_id, tid);
|
||||
ath10k_dbg(ar, ATH10K_DBG_HTT,
|
||||
"htt tx flags0 %hhu flags1 %hu len %d id %hu frags_paddr %pad, msdu_paddr %pad vdev %hhu tid %hhu freq %hu\n",
|
||||
"htt tx flags0 %u flags1 %u len %d id %u frags_paddr %pad, msdu_paddr %pad vdev %u tid %u freq %u\n",
|
||||
flags0, flags1, msdu->len, msdu_id, &frags_paddr,
|
||||
&skb_cb->paddr, vdev_id, tid, freq);
|
||||
ath10k_dbg_dump(ar, ATH10K_DBG_HTT_DUMP, NULL, "htt tx msdu: ",
|
||||
|
|
|
@ -623,6 +623,8 @@ struct ath10k_hw_params {
|
|||
|
||||
/* provides bitrates for sta_statistics using WMI_TLV_PEER_STATS_INFO_EVENTID */
|
||||
bool supports_peer_stats_info;
|
||||
|
||||
bool dynamic_sar_support;
|
||||
};
|
||||
|
||||
struct htt_rx_desc;
|
||||
|
|
|
@ -81,6 +81,17 @@ static struct ieee80211_rate ath10k_rates_rev2[] = {
|
|||
{ .bitrate = 540, .hw_value = ATH10K_HW_RATE_OFDM_54M },
|
||||
};
|
||||
|
||||
static const struct cfg80211_sar_freq_ranges ath10k_sar_freq_ranges[] = {
|
||||
{.start_freq = 2402, .end_freq = 2494 },
|
||||
{.start_freq = 5170, .end_freq = 5875 },
|
||||
};
|
||||
|
||||
static const struct cfg80211_sar_capa ath10k_sar_capa = {
|
||||
.type = NL80211_SAR_TYPE_POWER,
|
||||
.num_freq_ranges = (ARRAY_SIZE(ath10k_sar_freq_ranges)),
|
||||
.freq_ranges = &ath10k_sar_freq_ranges[0],
|
||||
};
|
||||
|
||||
#define ATH10K_MAC_FIRST_OFDM_RATE_IDX 4
|
||||
|
||||
#define ath10k_a_rates (ath10k_rates + ATH10K_MAC_FIRST_OFDM_RATE_IDX)
|
||||
|
@ -2177,7 +2188,8 @@ static void ath10k_peer_assoc_h_crypto(struct ath10k *ar,
|
|||
if (WARN_ON(ath10k_mac_vif_chan(vif, &def)))
|
||||
return;
|
||||
|
||||
bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid, NULL, 0,
|
||||
bss = cfg80211_get_bss(ar->hw->wiphy, def.chan, info->bssid,
|
||||
info->ssid_len ? info->ssid : NULL, info->ssid_len,
|
||||
IEEE80211_BSS_TYPE_ANY, IEEE80211_PRIVACY_ANY);
|
||||
if (bss) {
|
||||
const struct cfg80211_bss_ies *ies;
|
||||
|
@ -2880,6 +2892,158 @@ static int ath10k_mac_vif_recalc_txbf(struct ath10k *ar,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static bool ath10k_mac_is_connected(struct ath10k *ar)
|
||||
{
|
||||
struct ath10k_vif *arvif;
|
||||
|
||||
list_for_each_entry(arvif, &ar->arvifs, list) {
|
||||
if (arvif->is_up && arvif->vdev_type == WMI_VDEV_TYPE_STA)
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
|
||||
{
|
||||
int ret;
|
||||
u32 param;
|
||||
int tx_power_2g, tx_power_5g;
|
||||
bool connected;
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
/* ath10k internally uses unit of 0.5 dBm so multiply by 2 */
|
||||
tx_power_2g = txpower * 2;
|
||||
tx_power_5g = txpower * 2;
|
||||
|
||||
connected = ath10k_mac_is_connected(ar);
|
||||
|
||||
if (connected && ar->tx_power_2g_limit)
|
||||
if (tx_power_2g > ar->tx_power_2g_limit)
|
||||
tx_power_2g = ar->tx_power_2g_limit;
|
||||
|
||||
if (connected && ar->tx_power_5g_limit)
|
||||
if (tx_power_5g > ar->tx_power_5g_limit)
|
||||
tx_power_5g = ar->tx_power_5g_limit;
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower 2g: %d, 5g: %d\n",
|
||||
tx_power_2g, tx_power_5g);
|
||||
|
||||
param = ar->wmi.pdev_param->txpower_limit2g;
|
||||
ret = ath10k_wmi_pdev_set_param(ar, param, tx_power_2g);
|
||||
if (ret) {
|
||||
ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
|
||||
tx_power_2g, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
param = ar->wmi.pdev_param->txpower_limit5g;
|
||||
ret = ath10k_wmi_pdev_set_param(ar, param, tx_power_5g);
|
||||
if (ret) {
|
||||
ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
|
||||
tx_power_5g, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath10k_mac_txpower_recalc(struct ath10k *ar)
|
||||
{
|
||||
struct ath10k_vif *arvif;
|
||||
int ret, txpower = -1;
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
list_for_each_entry(arvif, &ar->arvifs, list) {
|
||||
/* txpower not initialized yet? */
|
||||
if (arvif->txpower == INT_MIN)
|
||||
continue;
|
||||
|
||||
if (txpower == -1)
|
||||
txpower = arvif->txpower;
|
||||
else
|
||||
txpower = min(txpower, arvif->txpower);
|
||||
}
|
||||
|
||||
if (txpower == -1)
|
||||
return 0;
|
||||
|
||||
ret = ath10k_mac_txpower_setup(ar, txpower);
|
||||
if (ret) {
|
||||
ath10k_warn(ar, "failed to setup tx power %d: %d\n",
|
||||
txpower, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath10k_mac_set_sar_power(struct ath10k *ar)
|
||||
{
|
||||
if (!ar->hw_params.dynamic_sar_support)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (!ath10k_mac_is_connected(ar))
|
||||
return 0;
|
||||
|
||||
/* if connected, then arvif->txpower must be valid */
|
||||
return ath10k_mac_txpower_recalc(ar);
|
||||
}
|
||||
|
||||
static int ath10k_mac_set_sar_specs(struct ieee80211_hw *hw,
|
||||
const struct cfg80211_sar_specs *sar)
|
||||
{
|
||||
const struct cfg80211_sar_sub_specs *sub_specs;
|
||||
struct ath10k *ar = hw->priv;
|
||||
u32 i;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
||||
if (!ar->hw_params.dynamic_sar_support) {
|
||||
ret = -EOPNOTSUPP;
|
||||
goto err;
|
||||
}
|
||||
|
||||
if (!sar || sar->type != NL80211_SAR_TYPE_POWER ||
|
||||
sar->num_sub_specs == 0) {
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
sub_specs = sar->sub_specs;
|
||||
|
||||
/* 0dbm is not a practical value for ath10k, so use 0
|
||||
* as no SAR limitation on it.
|
||||
*/
|
||||
ar->tx_power_2g_limit = 0;
|
||||
ar->tx_power_5g_limit = 0;
|
||||
|
||||
/* note the power is in 0.25dbm unit, while ath10k uses
|
||||
* 0.5dbm unit.
|
||||
*/
|
||||
for (i = 0; i < sar->num_sub_specs; i++) {
|
||||
if (sub_specs->freq_range_index == 0)
|
||||
ar->tx_power_2g_limit = sub_specs->power / 2;
|
||||
else if (sub_specs->freq_range_index == 1)
|
||||
ar->tx_power_5g_limit = sub_specs->power / 2;
|
||||
|
||||
sub_specs++;
|
||||
}
|
||||
|
||||
ret = ath10k_mac_set_sar_power(ar);
|
||||
if (ret) {
|
||||
ath10k_warn(ar, "failed to set sar power: %d", ret);
|
||||
goto err;
|
||||
}
|
||||
|
||||
err:
|
||||
mutex_unlock(&ar->conf_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* can be called only in mac80211 callbacks due to `key_count` usage */
|
||||
static void ath10k_bss_assoc(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
|
@ -2968,6 +3132,8 @@ static void ath10k_bss_assoc(struct ieee80211_hw *hw,
|
|||
|
||||
arvif->is_up = true;
|
||||
|
||||
ath10k_mac_set_sar_power(ar);
|
||||
|
||||
/* Workaround: Some firmware revisions (tested with qca6174
|
||||
* WLAN.RM.2.0-00073) have buggy powersave state machine and must be
|
||||
* poked with peer param command.
|
||||
|
@ -3010,6 +3176,8 @@ static void ath10k_bss_disassoc(struct ieee80211_hw *hw,
|
|||
|
||||
arvif->is_up = false;
|
||||
|
||||
ath10k_mac_txpower_recalc(ar);
|
||||
|
||||
cancel_delayed_work_sync(&arvif->connection_loss_work);
|
||||
}
|
||||
|
||||
|
@ -3763,23 +3931,16 @@ bool ath10k_mac_tx_frm_has_freq(struct ath10k *ar)
|
|||
static int ath10k_mac_tx_wmi_mgmt(struct ath10k *ar, struct sk_buff *skb)
|
||||
{
|
||||
struct sk_buff_head *q = &ar->wmi_mgmt_tx_queue;
|
||||
int ret = 0;
|
||||
|
||||
spin_lock_bh(&ar->data_lock);
|
||||
|
||||
if (skb_queue_len(q) == ATH10K_MAX_NUM_MGMT_PENDING) {
|
||||
if (skb_queue_len_lockless(q) >= ATH10K_MAX_NUM_MGMT_PENDING) {
|
||||
ath10k_warn(ar, "wmi mgmt tx queue is full\n");
|
||||
ret = -ENOSPC;
|
||||
goto unlock;
|
||||
return -ENOSPC;
|
||||
}
|
||||
|
||||
__skb_queue_tail(q, skb);
|
||||
skb_queue_tail(q, skb);
|
||||
ieee80211_queue_work(ar->hw, &ar->wmi_mgmt_tx_work);
|
||||
|
||||
unlock:
|
||||
spin_unlock_bh(&ar->data_lock);
|
||||
|
||||
return ret;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static enum ath10k_mac_tx_path
|
||||
|
@ -5207,65 +5368,6 @@ static int ath10k_config_ps(struct ath10k *ar)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static int ath10k_mac_txpower_setup(struct ath10k *ar, int txpower)
|
||||
{
|
||||
int ret;
|
||||
u32 param;
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC, "mac txpower %d\n", txpower);
|
||||
|
||||
param = ar->wmi.pdev_param->txpower_limit2g;
|
||||
ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
|
||||
if (ret) {
|
||||
ath10k_warn(ar, "failed to set 2g txpower %d: %d\n",
|
||||
txpower, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
param = ar->wmi.pdev_param->txpower_limit5g;
|
||||
ret = ath10k_wmi_pdev_set_param(ar, param, txpower * 2);
|
||||
if (ret) {
|
||||
ath10k_warn(ar, "failed to set 5g txpower %d: %d\n",
|
||||
txpower, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath10k_mac_txpower_recalc(struct ath10k *ar)
|
||||
{
|
||||
struct ath10k_vif *arvif;
|
||||
int ret, txpower = -1;
|
||||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
list_for_each_entry(arvif, &ar->arvifs, list) {
|
||||
/* txpower not initialized yet? */
|
||||
if (arvif->txpower == INT_MIN)
|
||||
continue;
|
||||
|
||||
if (txpower == -1)
|
||||
txpower = arvif->txpower;
|
||||
else
|
||||
txpower = min(txpower, arvif->txpower);
|
||||
}
|
||||
|
||||
if (txpower == -1)
|
||||
return 0;
|
||||
|
||||
ret = ath10k_mac_txpower_setup(ar, txpower);
|
||||
if (ret) {
|
||||
ath10k_warn(ar, "failed to setup tx power %d: %d\n",
|
||||
txpower, ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath10k_config(struct ieee80211_hw *hw, u32 changed)
|
||||
{
|
||||
struct ath10k *ar = hw->priv;
|
||||
|
@ -8069,7 +8171,7 @@ static int ath10k_mac_set_fixed_rate_params(struct ath10k_vif *arvif,
|
|||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC, "mac set fixed rate params vdev %i rate 0x%02hhx nss %hhu sgi %hhu\n",
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC, "mac set fixed rate params vdev %i rate 0x%02x nss %u sgi %u\n",
|
||||
arvif->vdev_id, rate, nss, sgi);
|
||||
|
||||
vdev_param = ar->wmi.vdev_param->fixed_rate;
|
||||
|
@ -8426,7 +8528,7 @@ static int ath10k_ampdu_action(struct ieee80211_hw *hw,
|
|||
enum ieee80211_ampdu_mlme_action action = params->action;
|
||||
u16 tid = params->tid;
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu action %d\n",
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %u action %d\n",
|
||||
arvif->vdev_id, sta->addr, tid, action);
|
||||
|
||||
switch (action) {
|
||||
|
@ -8522,7 +8624,7 @@ ath10k_mac_update_vif_chan(struct ath10k *ar,
|
|||
arvif = (void *)vifs[i].vif->drv_priv;
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC,
|
||||
"mac chanctx switch vdev_id %i freq %hu->%hu width %d->%d\n",
|
||||
"mac chanctx switch vdev_id %i freq %u->%u width %d->%d\n",
|
||||
arvif->vdev_id,
|
||||
vifs[i].old_ctx->def.chan->center_freq,
|
||||
vifs[i].new_ctx->def.chan->center_freq,
|
||||
|
@ -8596,7 +8698,7 @@ ath10k_mac_op_add_chanctx(struct ieee80211_hw *hw,
|
|||
struct ath10k *ar = hw->priv;
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC,
|
||||
"mac chanctx add freq %hu width %d ptr %pK\n",
|
||||
"mac chanctx add freq %u width %d ptr %pK\n",
|
||||
ctx->def.chan->center_freq, ctx->def.width, ctx);
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
@ -8620,7 +8722,7 @@ ath10k_mac_op_remove_chanctx(struct ieee80211_hw *hw,
|
|||
struct ath10k *ar = hw->priv;
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC,
|
||||
"mac chanctx remove freq %hu width %d ptr %pK\n",
|
||||
"mac chanctx remove freq %u width %d ptr %pK\n",
|
||||
ctx->def.chan->center_freq, ctx->def.width, ctx);
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
@ -8685,7 +8787,7 @@ ath10k_mac_op_change_chanctx(struct ieee80211_hw *hw,
|
|||
mutex_lock(&ar->conf_mutex);
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_MAC,
|
||||
"mac chanctx change freq %hu width %d ptr %pK changed %x\n",
|
||||
"mac chanctx change freq %u width %d ptr %pK changed %x\n",
|
||||
ctx->def.chan->center_freq, ctx->def.width, ctx, changed);
|
||||
|
||||
/* This shouldn't really happen because channel switching should use
|
||||
|
@ -9272,6 +9374,7 @@ static const struct ieee80211_ops ath10k_ops = {
|
|||
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||
.sta_add_debugfs = ath10k_sta_add_debugfs,
|
||||
#endif
|
||||
.set_sar_specs = ath10k_mac_set_sar_specs,
|
||||
};
|
||||
|
||||
#define CHAN2G(_channel, _freq, _flags) { \
|
||||
|
@ -10009,6 +10112,9 @@ int ath10k_mac_register(struct ath10k *ar)
|
|||
goto err_free;
|
||||
}
|
||||
|
||||
if (ar->hw_params.dynamic_sar_support)
|
||||
ar->hw->wiphy->sar_capa = &ath10k_sar_capa;
|
||||
|
||||
if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
|
||||
ar->hw->netdev_features = NETIF_F_HW_CSUM;
|
||||
|
||||
|
|
|
@ -283,7 +283,7 @@ TRACE_EVENT(ath10k_htt_pktlog,
|
|||
),
|
||||
|
||||
TP_printk(
|
||||
"%s %s %d size %hu",
|
||||
"%s %s %d size %u",
|
||||
__get_str(driver),
|
||||
__get_str(device),
|
||||
__entry->hw_type,
|
||||
|
@ -488,7 +488,7 @@ TRACE_EVENT(ath10k_wmi_diag_container,
|
|||
),
|
||||
|
||||
TP_printk(
|
||||
"%s %s diag container type %hhu timestamp %u code %u len %d",
|
||||
"%s %s diag container type %u timestamp %u code %u len %d",
|
||||
__get_str(driver),
|
||||
__get_str(device),
|
||||
__entry->type,
|
||||
|
|
|
@ -211,7 +211,7 @@ void ath10k_peer_map_event(struct ath10k_htt *htt,
|
|||
|
||||
if (ev->peer_id >= ATH10K_MAX_NUM_PEER_IDS) {
|
||||
ath10k_warn(ar,
|
||||
"received htt peer map event with idx out of bounds: %hu\n",
|
||||
"received htt peer map event with idx out of bounds: %u\n",
|
||||
ev->peer_id);
|
||||
return;
|
||||
}
|
||||
|
@ -247,7 +247,7 @@ void ath10k_peer_unmap_event(struct ath10k_htt *htt,
|
|||
|
||||
if (ev->peer_id >= ATH10K_MAX_NUM_PEER_IDS) {
|
||||
ath10k_warn(ar,
|
||||
"received htt peer unmap event with idx out of bounds: %hu\n",
|
||||
"received htt peer unmap event with idx out of bounds: %u\n",
|
||||
ev->peer_id);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -93,7 +93,7 @@ ath10k_wmi_tlv_iter(struct ath10k *ar, const void *ptr, size_t len,
|
|||
|
||||
if (tlv_len > len) {
|
||||
ath10k_dbg(ar, ATH10K_DBG_WMI,
|
||||
"wmi tlv parse failure of tag %hhu at byte %zd (%zu bytes left, %hhu expected)\n",
|
||||
"wmi tlv parse failure of tag %u at byte %zd (%zu bytes left, %u expected)\n",
|
||||
tlv_tag, ptr - begin, len, tlv_len);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -102,7 +102,7 @@ ath10k_wmi_tlv_iter(struct ath10k *ar, const void *ptr, size_t len,
|
|||
wmi_tlv_policies[tlv_tag].min_len &&
|
||||
wmi_tlv_policies[tlv_tag].min_len > tlv_len) {
|
||||
ath10k_dbg(ar, ATH10K_DBG_WMI,
|
||||
"wmi tlv parse failure of tag %hhu at byte %zd (%hhu bytes is less than min length %zu)\n",
|
||||
"wmi tlv parse failure of tag %u at byte %zd (%u bytes is less than min length %zu)\n",
|
||||
tlv_tag, ptr - begin, tlv_len,
|
||||
wmi_tlv_policies[tlv_tag].min_len);
|
||||
return -EINVAL;
|
||||
|
@ -421,7 +421,7 @@ static int ath10k_wmi_tlv_event_p2p_noa(struct ath10k *ar,
|
|||
vdev_id = __le32_to_cpu(ev->vdev_id);
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_WMI,
|
||||
"wmi tlv p2p noa vdev_id %i descriptors %hhu\n",
|
||||
"wmi tlv p2p noa vdev_id %i descriptors %u\n",
|
||||
vdev_id, noa->num_descriptors);
|
||||
|
||||
ath10k_p2p_noa_update_by_vdev_id(ar, vdev_id, noa);
|
||||
|
|
|
@ -9551,7 +9551,7 @@ static int ath10k_wmi_mgmt_tx_clean_up_pending(int msdu_id, void *ptr,
|
|||
struct sk_buff *msdu;
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_WMI,
|
||||
"force cleanup mgmt msdu_id %hu\n", msdu_id);
|
||||
"force cleanup mgmt msdu_id %u\n", msdu_id);
|
||||
|
||||
msdu = pkt_addr->vaddr;
|
||||
dma_unmap_single(ar->dev, pkt_addr->paddr,
|
||||
|
|
|
@ -875,14 +875,6 @@ extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_ipq6018
|
|||
extern const struct ce_pipe_config ath11k_target_ce_config_wlan_qca6390[];
|
||||
extern const struct service_to_pipe ath11k_target_service_to_ce_map_wlan_qca6390[];
|
||||
|
||||
void ath11k_peer_unmap_event(struct ath11k_base *ab, u16 peer_id);
|
||||
void ath11k_peer_map_event(struct ath11k_base *ab, u8 vdev_id, u16 peer_id,
|
||||
u8 *mac_addr, u16 ast_hash);
|
||||
struct ath11k_peer *ath11k_peer_find(struct ath11k_base *ab, int vdev_id,
|
||||
const u8 *addr);
|
||||
struct ath11k_peer *ath11k_peer_find_by_addr(struct ath11k_base *ab,
|
||||
const u8 *addr);
|
||||
struct ath11k_peer *ath11k_peer_find_by_id(struct ath11k_base *ab, int peer_id);
|
||||
int ath11k_core_qmi_firmware_ready(struct ath11k_base *ab);
|
||||
int ath11k_core_pre_init(struct ath11k_base *ab);
|
||||
int ath11k_core_init(struct ath11k_base *ath11k);
|
||||
|
|
|
@ -1292,7 +1292,7 @@ int ath11k_dp_htt_tlv_iter(struct ath11k_base *ab, const void *ptr, size_t len,
|
|||
len -= sizeof(*tlv);
|
||||
|
||||
if (tlv_len > len) {
|
||||
ath11k_err(ab, "htt tlv parse failure of tag %hhu at byte %zd (%zu bytes left, %hhu expected)\n",
|
||||
ath11k_err(ab, "htt tlv parse failure of tag %u at byte %zd (%zu bytes left, %u expected)\n",
|
||||
tlv_tag, ptr - begin, len, tlv_len);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -1381,22 +1381,22 @@ ath11k_update_per_peer_tx_stats(struct ath11k *ar,
|
|||
*/
|
||||
|
||||
if (flags == WMI_RATE_PREAMBLE_HE && mcs > 11) {
|
||||
ath11k_warn(ab, "Invalid HE mcs %hhd peer stats", mcs);
|
||||
ath11k_warn(ab, "Invalid HE mcs %d peer stats", mcs);
|
||||
return;
|
||||
}
|
||||
|
||||
if (flags == WMI_RATE_PREAMBLE_HE && mcs > ATH11K_HE_MCS_MAX) {
|
||||
ath11k_warn(ab, "Invalid HE mcs %hhd peer stats", mcs);
|
||||
ath11k_warn(ab, "Invalid HE mcs %d peer stats", mcs);
|
||||
return;
|
||||
}
|
||||
|
||||
if (flags == WMI_RATE_PREAMBLE_VHT && mcs > ATH11K_VHT_MCS_MAX) {
|
||||
ath11k_warn(ab, "Invalid VHT mcs %hhd peer stats", mcs);
|
||||
ath11k_warn(ab, "Invalid VHT mcs %d peer stats", mcs);
|
||||
return;
|
||||
}
|
||||
|
||||
if (flags == WMI_RATE_PREAMBLE_HT && (mcs > ATH11K_HT_MCS_MAX || nss < 1)) {
|
||||
ath11k_warn(ab, "Invalid HT mcs %hhd nss %hhd peer stats",
|
||||
ath11k_warn(ab, "Invalid HT mcs %d nss %d peer stats",
|
||||
mcs, nss);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -4849,7 +4849,7 @@ static int ath11k_mac_op_add_chanctx(struct ieee80211_hw *hw,
|
|||
struct ath11k_base *ab = ar->ab;
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_MAC,
|
||||
"mac chanctx add freq %hu width %d ptr %pK\n",
|
||||
"mac chanctx add freq %u width %d ptr %pK\n",
|
||||
ctx->def.chan->center_freq, ctx->def.width, ctx);
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
@ -4873,7 +4873,7 @@ static void ath11k_mac_op_remove_chanctx(struct ieee80211_hw *hw,
|
|||
struct ath11k_base *ab = ar->ab;
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_MAC,
|
||||
"mac chanctx remove freq %hu width %d ptr %pK\n",
|
||||
"mac chanctx remove freq %u width %d ptr %pK\n",
|
||||
ctx->def.chan->center_freq, ctx->def.width, ctx);
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
|
@ -5117,7 +5117,7 @@ ath11k_mac_update_vif_chan(struct ath11k *ar,
|
|||
arvif = (void *)vifs[i].vif->drv_priv;
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_MAC,
|
||||
"mac chanctx switch vdev_id %i freq %hu->%hu width %d->%d\n",
|
||||
"mac chanctx switch vdev_id %i freq %u->%u width %d->%d\n",
|
||||
arvif->vdev_id,
|
||||
vifs[i].old_ctx->def.chan->center_freq,
|
||||
vifs[i].new_ctx->def.chan->center_freq,
|
||||
|
@ -5214,7 +5214,7 @@ static void ath11k_mac_op_change_chanctx(struct ieee80211_hw *hw,
|
|||
mutex_lock(&ar->conf_mutex);
|
||||
|
||||
ath11k_dbg(ab, ATH11K_DBG_MAC,
|
||||
"mac chanctx change freq %hu width %d ptr %pK changed %x\n",
|
||||
"mac chanctx change freq %u width %d ptr %pK changed %x\n",
|
||||
ctx->def.chan->center_freq, ctx->def.width, ctx, changed);
|
||||
|
||||
/* This shouldn't really happen because channel switching should use
|
||||
|
@ -5583,7 +5583,7 @@ static int ath11k_mac_set_fixed_rate_params(struct ath11k_vif *arvif,
|
|||
|
||||
lockdep_assert_held(&ar->conf_mutex);
|
||||
|
||||
ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "mac set fixed rate params vdev %i rate 0x%02hhx nss %hhu sgi %hhu\n",
|
||||
ath11k_dbg(ar->ab, ATH11K_DBG_MAC, "mac set fixed rate params vdev %i rate 0x%02x nss %u sgi %u\n",
|
||||
arvif->vdev_id, rate, nss, sgi);
|
||||
|
||||
vdev_param = WMI_VDEV_PARAM_FIXED_RATE;
|
||||
|
@ -6360,17 +6360,20 @@ static int __ath11k_mac_register(struct ath11k *ar)
|
|||
ret = ath11k_regd_update(ar, true);
|
||||
if (ret) {
|
||||
ath11k_err(ar->ab, "ath11k regd update failed: %d\n", ret);
|
||||
goto err_free_if_combs;
|
||||
goto err_unregister_hw;
|
||||
}
|
||||
|
||||
ret = ath11k_debugfs_register(ar);
|
||||
if (ret) {
|
||||
ath11k_err(ar->ab, "debugfs registration failed: %d\n", ret);
|
||||
goto err_free_if_combs;
|
||||
goto err_unregister_hw;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err_unregister_hw:
|
||||
ieee80211_unregister_hw(ar->hw);
|
||||
|
||||
err_free_if_combs:
|
||||
kfree(ar->hw->wiphy->iface_combinations[0].limits);
|
||||
kfree(ar->hw->wiphy->iface_combinations);
|
||||
|
|
|
@ -43,7 +43,7 @@ TRACE_EVENT(ath11k_htt_pktlog,
|
|||
),
|
||||
|
||||
TP_printk(
|
||||
"%s %s size %hu pktlog_checksum %d",
|
||||
"%s %s size %u pktlog_checksum %d",
|
||||
__get_str(driver),
|
||||
__get_str(device),
|
||||
__entry->buf_len,
|
||||
|
|
|
@ -169,7 +169,7 @@ ath11k_wmi_tlv_iter(struct ath11k_base *ab, const void *ptr, size_t len,
|
|||
len -= sizeof(*tlv);
|
||||
|
||||
if (tlv_len > len) {
|
||||
ath11k_err(ab, "wmi tlv parse failure of tag %hhu at byte %zd (%zu bytes left, %hhu expected)\n",
|
||||
ath11k_err(ab, "wmi tlv parse failure of tag %u at byte %zd (%zu bytes left, %u expected)\n",
|
||||
tlv_tag, ptr - begin, len, tlv_len);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -177,7 +177,7 @@ ath11k_wmi_tlv_iter(struct ath11k_base *ab, const void *ptr, size_t len,
|
|||
if (tlv_tag < ARRAY_SIZE(wmi_tlv_policies) &&
|
||||
wmi_tlv_policies[tlv_tag].min_len &&
|
||||
wmi_tlv_policies[tlv_tag].min_len > tlv_len) {
|
||||
ath11k_err(ab, "wmi tlv parse failure of tag %hhu at byte %zd (%hhu bytes is less than min length %zu)\n",
|
||||
ath11k_err(ab, "wmi tlv parse failure of tag %u at byte %zd (%u bytes is less than min length %zu)\n",
|
||||
tlv_tag, ptr - begin, tlv_len,
|
||||
wmi_tlv_policies[tlv_tag].min_len);
|
||||
return -EINVAL;
|
||||
|
|
|
@ -485,7 +485,6 @@ static void init_hal_msg(struct wcn36xx_hal_msg_header *hdr,
|
|||
|
||||
#define PREPARE_HAL_PTT_MSG_BUF(send_buf, p_msg_body) \
|
||||
do { \
|
||||
memset(send_buf, 0, p_msg_body->header.len); \
|
||||
memcpy(send_buf, p_msg_body, p_msg_body->header.len); \
|
||||
} while (0)
|
||||
|
||||
|
|
Loading…
Reference in New Issue