Merge ath-next from git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
ath.git patches for v5.6. Major changes: ar5523 * add support for SMCWUSBT-G2 USB device
This commit is contained in:
commit
2a13513f99
@ -50,7 +50,7 @@ Optional properties:
|
||||
entry in clock-names.
|
||||
- clock-names: Should contain the clock names "wifi_wcss_cmd", "wifi_wcss_ref",
|
||||
"wifi_wcss_rtc" for "qcom,ipq4019-wifi" compatible target and
|
||||
"cxo_ref_clk_pin" for "qcom,wcn3990-wifi"
|
||||
"cxo_ref_clk_pin" and optionally "qdss" for "qcom,wcn3990-wifi"
|
||||
compatible target.
|
||||
- qcom,msi_addr: MSI interrupt address.
|
||||
- qcom,msi_base: Base value to add before writing MSI data into
|
||||
@ -88,6 +88,9 @@ Optional properties:
|
||||
of the host capability QMI request
|
||||
- qcom,xo-cal-data: xo cal offset to be configured in xo trim register.
|
||||
|
||||
- qcom,msa-fixed-perm: Boolean context flag to disable SCM call for statically
|
||||
mapped msa region.
|
||||
|
||||
Example (to supply PCI based wifi block details):
|
||||
|
||||
In this example, the node is defined as child node of the PCI controller.
|
||||
@ -185,4 +188,5 @@ wifi@18000000 {
|
||||
vdd-3.3-ch0-supply = <&vreg_l25a_3p3>;
|
||||
memory-region = <&wifi_msa_mem>;
|
||||
iommus = <&apps_smmu 0x0040 0x1>;
|
||||
qcom,msa-fixed-perm;
|
||||
};
|
||||
|
@ -74,7 +74,7 @@ static void ar5523_read_reply(struct ar5523 *ar, struct ar5523_cmd_hdr *hdr,
|
||||
|
||||
if (cmd->odata) {
|
||||
if (cmd->olen < olen) {
|
||||
ar5523_err(ar, "olen to small %d < %d\n",
|
||||
ar5523_err(ar, "olen too small %d < %d\n",
|
||||
cmd->olen, olen);
|
||||
cmd->olen = 0;
|
||||
cmd->res = -EOVERFLOW;
|
||||
@ -1770,6 +1770,8 @@ static const struct usb_device_id ar5523_id_table[] = {
|
||||
AR5523_DEVICE_UX(0x0846, 0x4300), /* Netgear / WG111U */
|
||||
AR5523_DEVICE_UG(0x0846, 0x4250), /* Netgear / WG111T */
|
||||
AR5523_DEVICE_UG(0x0846, 0x5f00), /* Netgear / WPN111 */
|
||||
AR5523_DEVICE_UG(0x083a, 0x4506), /* SMC / EZ Connect
|
||||
SMCWUSBT-G2 */
|
||||
AR5523_DEVICE_UG(0x157e, 0x3006), /* Umedia / AR5523_1 */
|
||||
AR5523_DEVICE_UX(0x157e, 0x3205), /* Umedia / AR5523_2 */
|
||||
AR5523_DEVICE_UG(0x157e, 0x3006), /* Umedia / TEW444UBEU */
|
||||
|
@ -2140,7 +2140,7 @@ static bool ath10k_htt_rx_pn_check_replay_hl(struct ath10k *ar,
|
||||
if (last_pn_valid)
|
||||
pn_invalid = ath10k_htt_rx_pn_cmp48(&new_pn, last_pn);
|
||||
else
|
||||
peer->tids_last_pn_valid[tid] = 1;
|
||||
peer->tids_last_pn_valid[tid] = true;
|
||||
|
||||
if (!pn_invalid)
|
||||
last_pn->pn48 = new_pn.pn48;
|
||||
|
@ -816,7 +816,7 @@ ath10k_is_rssi_enable(struct ath10k_hw_params *hw,
|
||||
|
||||
#define TARGET_10_4_TX_DBG_LOG_SIZE 1024
|
||||
#define TARGET_10_4_NUM_WDS_ENTRIES 32
|
||||
#define TARGET_10_4_DMA_BURST_SIZE 0
|
||||
#define TARGET_10_4_DMA_BURST_SIZE 1
|
||||
#define TARGET_10_4_MAC_AGGR_DELIM 0
|
||||
#define TARGET_10_4_RX_SKIP_DEFRAG_TIMEOUT_DUP_DETECTION_CHECK 1
|
||||
#define TARGET_10_4_VOW_CONFIG 0
|
||||
|
@ -1578,7 +1578,7 @@ static int ath10k_pci_set_ram_config(struct ath10k *ar, u32 config)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* if an error happened returns < 0, otherwise the length */
|
||||
/* Always returns the length */
|
||||
static int ath10k_pci_dump_memory_sram(struct ath10k *ar,
|
||||
const struct ath10k_mem_region *region,
|
||||
u8 *buf)
|
||||
@ -1604,11 +1604,22 @@ static int ath10k_pci_dump_memory_reg(struct ath10k *ar,
|
||||
{
|
||||
struct ath10k_pci *ar_pci = ath10k_pci_priv(ar);
|
||||
u32 i;
|
||||
int ret;
|
||||
|
||||
mutex_lock(&ar->conf_mutex);
|
||||
if (ar->state != ATH10K_STATE_ON) {
|
||||
ath10k_warn(ar, "Skipping pci_dump_memory_reg invalid state\n");
|
||||
ret = -EIO;
|
||||
goto done;
|
||||
}
|
||||
|
||||
for (i = 0; i < region->len; i += 4)
|
||||
*(u32 *)(buf + i) = ioread32(ar_pci->mem + region->start + i);
|
||||
|
||||
return region->len;
|
||||
ret = region->len;
|
||||
done:
|
||||
mutex_unlock(&ar->conf_mutex);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* if an error happened returns < 0, otherwise the length */
|
||||
@ -1704,7 +1715,11 @@ static void ath10k_pci_dump_memory(struct ath10k *ar,
|
||||
count = ath10k_pci_dump_memory_sram(ar, current_region, buf);
|
||||
break;
|
||||
case ATH10K_MEM_REGION_TYPE_IOREG:
|
||||
count = ath10k_pci_dump_memory_reg(ar, current_region, buf);
|
||||
ret = ath10k_pci_dump_memory_reg(ar, current_region, buf);
|
||||
if (ret < 0)
|
||||
break;
|
||||
|
||||
count = ret;
|
||||
break;
|
||||
default:
|
||||
ret = ath10k_pci_dump_memory_generic(ar, current_region, buf);
|
||||
|
@ -84,6 +84,9 @@ static int ath10k_qmi_setup_msa_permissions(struct ath10k_qmi *qmi)
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
if (qmi->msa_fixed_perm)
|
||||
return 0;
|
||||
|
||||
for (i = 0; i < qmi->nr_mem_region; i++) {
|
||||
ret = ath10k_qmi_map_msa_permission(qmi, &qmi->mem_region[i]);
|
||||
if (ret)
|
||||
@ -102,6 +105,9 @@ static void ath10k_qmi_remove_msa_permission(struct ath10k_qmi *qmi)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (qmi->msa_fixed_perm)
|
||||
return;
|
||||
|
||||
for (i = 0; i < qmi->nr_mem_region; i++)
|
||||
ath10k_qmi_unmap_msa_permission(qmi, &qmi->mem_region[i]);
|
||||
}
|
||||
@ -1035,6 +1041,9 @@ static int ath10k_qmi_setup_msa_resources(struct ath10k_qmi *qmi, u32 msa_size)
|
||||
qmi->msa_mem_size = msa_size;
|
||||
}
|
||||
|
||||
if (of_property_read_bool(dev->of_node, "qcom,msa-fixed-perm"))
|
||||
qmi->msa_fixed_perm = true;
|
||||
|
||||
ath10k_dbg(ar, ATH10K_DBG_QMI, "msa pa: %pad , msa va: 0x%p\n",
|
||||
&qmi->msa_pa,
|
||||
qmi->msa_va);
|
||||
|
@ -104,6 +104,7 @@ struct ath10k_qmi {
|
||||
bool fw_ready;
|
||||
char fw_build_timestamp[MAX_TIMESTAMP_LEN + 1];
|
||||
struct ath10k_qmi_cal_data cal_data[MAX_NUM_CAL_V01];
|
||||
bool msa_fixed_perm;
|
||||
};
|
||||
|
||||
int ath10k_qmi_wlan_enable(struct ath10k *ar,
|
||||
|
@ -642,16 +642,23 @@ static int ath10k_sdio_mbox_rx_fetch(struct ath10k *ar)
|
||||
|
||||
ret = ath10k_sdio_readsb(ar, ar_sdio->mbox_info.htc_addr,
|
||||
skb->data, pkt->alloc_len);
|
||||
|
||||
if (ret) {
|
||||
ar_sdio->n_rx_pkts = 0;
|
||||
ath10k_sdio_mbox_free_rx_pkt(pkt);
|
||||
return ret;
|
||||
}
|
||||
if (ret)
|
||||
goto err;
|
||||
|
||||
htc_hdr = (struct ath10k_htc_hdr *)skb->data;
|
||||
pkt->act_len = le16_to_cpu(htc_hdr->len) + sizeof(*htc_hdr);
|
||||
|
||||
if (pkt->act_len > pkt->alloc_len) {
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
skb_put(skb, pkt->act_len);
|
||||
return 0;
|
||||
|
||||
err:
|
||||
ar_sdio->n_rx_pkts = 0;
|
||||
ath10k_sdio_mbox_free_rx_pkt(pkt);
|
||||
|
||||
return ret;
|
||||
}
|
||||
@ -687,6 +694,11 @@ static int ath10k_sdio_mbox_rx_fetch_bundle(struct ath10k *ar)
|
||||
htc_hdr = (struct ath10k_htc_hdr *)(ar_sdio->vsg_buffer + pkt_offset);
|
||||
pkt->act_len = le16_to_cpu(htc_hdr->len) + sizeof(*htc_hdr);
|
||||
|
||||
if (pkt->act_len > pkt->alloc_len ) {
|
||||
ret = -EINVAL;
|
||||
goto err;
|
||||
}
|
||||
|
||||
skb_put_data(pkt->skb, htc_hdr, pkt->act_len);
|
||||
pkt_offset += pkt->alloc_len;
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ static const char * const ath10k_regulators[] = {
|
||||
};
|
||||
|
||||
static const char * const ath10k_clocks[] = {
|
||||
"cxo_ref_clk_pin",
|
||||
"cxo_ref_clk_pin", "qdss",
|
||||
};
|
||||
|
||||
static void ath10k_snoc_htc_tx_cb(struct ath10k_ce_pipe *ce_state);
|
||||
@ -582,7 +582,7 @@ static void ath10k_snoc_process_rx_cb(struct ath10k_ce_pipe *ce_state,
|
||||
max_nbytes, DMA_FROM_DEVICE);
|
||||
|
||||
if (unlikely(max_nbytes < nbytes)) {
|
||||
ath10k_warn(ar, "rxed more than expected (nbytes %d, max %d)",
|
||||
ath10k_warn(ar, "rxed more than expected (nbytes %d, max %d)\n",
|
||||
nbytes, max_nbytes);
|
||||
dev_kfree_skb_any(skb);
|
||||
continue;
|
||||
@ -1201,7 +1201,7 @@ static int ath10k_snoc_request_irq(struct ath10k *ar)
|
||||
irqflags, ce_name[id], ar);
|
||||
if (ret) {
|
||||
ath10k_err(ar,
|
||||
"failed to register IRQ handler for CE %d: %d",
|
||||
"failed to register IRQ handler for CE %d: %d\n",
|
||||
id, ret);
|
||||
goto err_irq;
|
||||
}
|
||||
@ -1466,7 +1466,6 @@ MODULE_DEVICE_TABLE(of, ath10k_snoc_dt_match);
|
||||
static int ath10k_snoc_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct ath10k_snoc_drv_priv *drv_data;
|
||||
const struct of_device_id *of_id;
|
||||
struct ath10k_snoc *ar_snoc;
|
||||
struct device *dev;
|
||||
struct ath10k *ar;
|
||||
@ -1474,18 +1473,16 @@ static int ath10k_snoc_probe(struct platform_device *pdev)
|
||||
int ret;
|
||||
u32 i;
|
||||
|
||||
of_id = of_match_device(ath10k_snoc_dt_match, &pdev->dev);
|
||||
if (!of_id) {
|
||||
dev_err(&pdev->dev, "failed to find matching device tree id\n");
|
||||
dev = &pdev->dev;
|
||||
drv_data = device_get_match_data(dev);
|
||||
if (!drv_data) {
|
||||
dev_err(dev, "failed to find matching device tree id\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
drv_data = of_id->data;
|
||||
dev = &pdev->dev;
|
||||
|
||||
ret = dma_set_mask_and_coherent(dev, drv_data->dma_mask);
|
||||
if (ret) {
|
||||
dev_err(dev, "failed to set dma mask: %d", ret);
|
||||
dev_err(dev, "failed to set dma mask: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -9490,7 +9490,7 @@ static int ath10k_wmi_mgmt_tx_clean_up_pending(int msdu_id, void *ptr,
|
||||
|
||||
msdu = pkt_addr->vaddr;
|
||||
dma_unmap_single(ar->dev, pkt_addr->paddr,
|
||||
msdu->len, DMA_FROM_DEVICE);
|
||||
msdu->len, DMA_TO_DEVICE);
|
||||
ieee80211_free_txskb(ar->hw, msdu);
|
||||
|
||||
return 0;
|
||||
|
@ -22,7 +22,7 @@ config ATH11K_DEBUG
|
||||
|
||||
config ATH11K_DEBUGFS
|
||||
bool "QCA ath11k debugfs support"
|
||||
depends on ATH11K && DEBUG_FS
|
||||
depends on ATH11K && DEBUG_FS && MAC80211_DEBUGFS
|
||||
---help---
|
||||
Enable ath11k debugfs support
|
||||
|
||||
|
@ -17,8 +17,7 @@ ath11k-y += core.o \
|
||||
ce.o \
|
||||
peer.o
|
||||
|
||||
ath11k-$(CONFIG_ATH11K_DEBUGFS) += debug_htt_stats.o
|
||||
ath11k-$(CONFIG_MAC80211_DEBUGFS) += debugfs_sta.o
|
||||
ath11k-$(CONFIG_ATH11K_DEBUGFS) += debug_htt_stats.o debugfs_sta.o
|
||||
ath11k-$(CONFIG_NL80211_TESTMODE) += testmode.o
|
||||
ath11k-$(CONFIG_ATH11K_TRACING) += trace.o
|
||||
|
||||
|
@ -931,7 +931,22 @@ static ssize_t ath11k_write_pktlog_filter(struct file *file,
|
||||
HTT_RX_FILTER_TLV_FLAGS_PACKET_HEADER |
|
||||
HTT_RX_FILTER_TLV_FLAGS_ATTENTION;
|
||||
} else if (mode == ATH11K_PKTLOG_MODE_LITE) {
|
||||
ret = ath11k_dp_tx_htt_h2t_ppdu_stats_req(ar,
|
||||
HTT_PPDU_STATS_TAG_PKTLOG);
|
||||
if (ret) {
|
||||
ath11k_err(ar->ab, "failed to enable pktlog lite: %d\n", ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
rx_filter = HTT_RX_FILTER_TLV_LITE_MODE;
|
||||
} else {
|
||||
ret = ath11k_dp_tx_htt_h2t_ppdu_stats_req(ar,
|
||||
HTT_PPDU_STATS_TAG_DEFAULT);
|
||||
if (ret) {
|
||||
ath11k_err(ar->ab, "failed to send htt ppdu stats req: %d\n",
|
||||
ret);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
|
||||
tlv_filter.rx_filter = rx_filter;
|
||||
|
@ -172,6 +172,16 @@ static inline int ath11k_debug_is_extd_rx_stats_enabled(struct ath11k *ar)
|
||||
{
|
||||
return ar->debug.extd_rx_stats;
|
||||
}
|
||||
|
||||
void ath11k_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta, struct dentry *dir);
|
||||
void
|
||||
ath11k_accumulate_per_peer_tx_stats(struct ath11k_sta *arsta,
|
||||
struct ath11k_per_peer_tx_stats *peer_stats,
|
||||
u8 legacy_rate_idx);
|
||||
void ath11k_update_per_peer_stats_from_txcompl(struct ath11k *ar,
|
||||
struct sk_buff *msdu,
|
||||
struct hal_tx_status *ts);
|
||||
#else
|
||||
static inline int ath11k_debug_soc_create(struct ath11k_base *ab)
|
||||
{
|
||||
@ -243,19 +253,7 @@ static inline bool ath11k_debug_is_pktlog_peer_valid(struct ath11k *ar, u8 *addr
|
||||
{
|
||||
return false;
|
||||
}
|
||||
#endif /* CONFIG_ATH11K_DEBUGFS */
|
||||
|
||||
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||
void ath11k_sta_add_debugfs(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
||||
struct ieee80211_sta *sta, struct dentry *dir);
|
||||
void
|
||||
ath11k_accumulate_per_peer_tx_stats(struct ath11k_sta *arsta,
|
||||
struct ath11k_per_peer_tx_stats *peer_stats,
|
||||
u8 legacy_rate_idx);
|
||||
void ath11k_update_per_peer_stats_from_txcompl(struct ath11k *ar,
|
||||
struct sk_buff *msdu,
|
||||
struct hal_tx_status *ts);
|
||||
#else /* !CONFIG_MAC80211_DEBUGFS */
|
||||
static inline void
|
||||
ath11k_accumulate_per_peer_tx_stats(struct ath11k_sta *arsta,
|
||||
struct ath11k_per_peer_tx_stats *peer_stats,
|
||||
|
@ -776,11 +776,14 @@ static inline void htt_print_tx_peer_rate_stats_tlv(const void *tag_buf,
|
||||
u32 len = stats_req->buf_len;
|
||||
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
||||
char str_buf[HTT_MAX_STRING_LEN] = {0};
|
||||
char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS];
|
||||
char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS] = {NULL};
|
||||
u8 j;
|
||||
|
||||
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
|
||||
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++) {
|
||||
tx_gi[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
|
||||
if (!tx_gi[j])
|
||||
goto fail;
|
||||
}
|
||||
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "HTT_TX_PEER_RATE_STATS_TLV:");
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "tx_ldpc = %u",
|
||||
@ -841,15 +844,16 @@ static inline void htt_print_tx_peer_rate_stats_tlv(const void *tag_buf,
|
||||
HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "tx_dcm = %s\n", str_buf);
|
||||
|
||||
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
|
||||
kfree(tx_gi[j]);
|
||||
|
||||
if (len >= buf_len)
|
||||
buf[buf_len - 1] = 0;
|
||||
else
|
||||
buf[len] = 0;
|
||||
|
||||
stats_req->buf_len = len;
|
||||
|
||||
fail:
|
||||
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
|
||||
kfree(tx_gi[j]);
|
||||
}
|
||||
|
||||
static inline void htt_print_rx_peer_rate_stats_tlv(const void *tag_buf,
|
||||
@ -860,15 +864,21 @@ static inline void htt_print_rx_peer_rate_stats_tlv(const void *tag_buf,
|
||||
u32 len = stats_req->buf_len;
|
||||
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
||||
u8 j;
|
||||
char *rssi_chain[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS];
|
||||
char *rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS];
|
||||
char *rssi_chain[HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS] = {NULL};
|
||||
char *rx_gi[HTT_RX_PEER_STATS_NUM_GI_COUNTERS] = {NULL};
|
||||
char str_buf[HTT_MAX_STRING_LEN] = {0};
|
||||
|
||||
for (j = 0; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS; j++)
|
||||
for (j = 0; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS; j++) {
|
||||
rssi_chain[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
|
||||
if (!rssi_chain[j])
|
||||
goto fail;
|
||||
}
|
||||
|
||||
for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++)
|
||||
for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++) {
|
||||
rx_gi[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
|
||||
if (!rx_gi[j])
|
||||
goto fail;
|
||||
}
|
||||
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "HTT_RX_PEER_RATE_STATS_TLV:");
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "nsts = %u",
|
||||
@ -928,18 +938,19 @@ static inline void htt_print_rx_peer_rate_stats_tlv(const void *tag_buf,
|
||||
HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_pream = %s\n", str_buf);
|
||||
|
||||
for (j = 0; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS; j++)
|
||||
kfree(rssi_chain[j]);
|
||||
|
||||
for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++)
|
||||
kfree(rx_gi[j]);
|
||||
|
||||
if (len >= buf_len)
|
||||
buf[buf_len - 1] = 0;
|
||||
else
|
||||
buf[len] = 0;
|
||||
|
||||
stats_req->buf_len = len;
|
||||
|
||||
fail:
|
||||
for (j = 0; j < HTT_RX_PEER_STATS_NUM_SPATIAL_STREAMS; j++)
|
||||
kfree(rssi_chain[j]);
|
||||
|
||||
for (j = 0; j < HTT_RX_PEER_STATS_NUM_GI_COUNTERS; j++)
|
||||
kfree(rx_gi[j]);
|
||||
}
|
||||
|
||||
static inline void
|
||||
@ -2832,10 +2843,13 @@ static inline void htt_print_tx_pdev_rate_stats_tlv(const void *tag_buf,
|
||||
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
||||
u8 j;
|
||||
char str_buf[HTT_MAX_STRING_LEN] = {0};
|
||||
char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS];
|
||||
char *tx_gi[HTT_TX_PEER_STATS_NUM_GI_COUNTERS] = {NULL};
|
||||
|
||||
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
|
||||
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++) {
|
||||
tx_gi[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
|
||||
if (!tx_gi[j])
|
||||
goto fail;
|
||||
}
|
||||
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "HTT_TX_PDEV_RATE_STATS_TLV:");
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "mac_id = %u",
|
||||
@ -2988,15 +3002,15 @@ static inline void htt_print_tx_pdev_rate_stats_tlv(const void *tag_buf,
|
||||
HTT_TX_PDEV_STATS_NUM_DCM_COUNTERS);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "tx_dcm = %s\n", str_buf);
|
||||
|
||||
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
|
||||
kfree(tx_gi[j]);
|
||||
|
||||
if (len >= buf_len)
|
||||
buf[buf_len - 1] = 0;
|
||||
else
|
||||
buf[len] = 0;
|
||||
|
||||
stats_req->buf_len = len;
|
||||
fail:
|
||||
for (j = 0; j < HTT_TX_PEER_STATS_NUM_GI_COUNTERS; j++)
|
||||
kfree(tx_gi[j]);
|
||||
}
|
||||
|
||||
static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
|
||||
@ -3006,16 +3020,30 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
|
||||
u8 *buf = stats_req->buf;
|
||||
u32 len = stats_req->buf_len;
|
||||
u32 buf_len = ATH11K_HTT_STATS_BUF_SIZE;
|
||||
u8 j;
|
||||
char *rssi_chain[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];
|
||||
char *rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS];
|
||||
u8 i, j;
|
||||
u16 index = 0;
|
||||
char *rssi_chain[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS] = {NULL};
|
||||
char *rx_gi[HTT_RX_PDEV_STATS_NUM_GI_COUNTERS] = {NULL};
|
||||
char str_buf[HTT_MAX_STRING_LEN] = {0};
|
||||
char *rx_pilot_evm_db[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS] = {NULL};
|
||||
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
|
||||
rssi_chain[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
|
||||
if (!rssi_chain[j])
|
||||
goto fail;
|
||||
}
|
||||
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++)
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
|
||||
rx_gi[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
|
||||
if (!rx_gi[j])
|
||||
goto fail;
|
||||
}
|
||||
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
|
||||
rx_pilot_evm_db[j] = kmalloc(HTT_MAX_STRING_LEN, GFP_ATOMIC);
|
||||
if (!rx_pilot_evm_db[j])
|
||||
goto fail;
|
||||
}
|
||||
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "HTT_RX_PDEV_RATE_STATS_TLV:");
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "mac_id = %u",
|
||||
@ -3059,6 +3087,32 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
|
||||
ARRAY_TO_STRING(str_buf, htt_stats_buf->rx_bw,
|
||||
HTT_RX_PDEV_STATS_NUM_BW_COUNTERS);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_bw = %s ", str_buf);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_evm_nss_count = %u",
|
||||
htt_stats_buf->nss_count);
|
||||
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_evm_pilot_count = %u",
|
||||
htt_stats_buf->pilot_count);
|
||||
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
|
||||
index = 0;
|
||||
|
||||
for (i = 0; i < HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS; i++)
|
||||
index += snprintf(&rx_pilot_evm_db[j][index],
|
||||
HTT_MAX_STRING_LEN - index,
|
||||
" %u:%d,",
|
||||
i,
|
||||
htt_stats_buf->rx_pilot_evm_db[j][i]);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "pilot_evm_dB[%u] = %s ",
|
||||
j, rx_pilot_evm_db[j]);
|
||||
}
|
||||
|
||||
index = 0;
|
||||
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
|
||||
for (i = 0; i < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; i++)
|
||||
index += snprintf(&str_buf[index],
|
||||
HTT_MAX_STRING_LEN - index,
|
||||
" %u:%d,", i, htt_stats_buf->rx_pilot_evm_db_mean[i]);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "pilot_evm_dB_mean = %s ", str_buf);
|
||||
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
|
||||
ARRAY_TO_STRING(rssi_chain[j], htt_stats_buf->rssi_chain[j],
|
||||
@ -3079,12 +3133,6 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
|
||||
HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_pream = %s", str_buf);
|
||||
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
|
||||
kfree(rssi_chain[j]);
|
||||
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++)
|
||||
kfree(rx_gi[j]);
|
||||
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_11ax_su_ext = %u",
|
||||
htt_stats_buf->rx_11ax_su_ext);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_11ac_mumimo = %u",
|
||||
@ -3110,8 +3158,89 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
|
||||
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_active_dur_us_low = %u",
|
||||
htt_stats_buf->rx_active_dur_us_low);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_active_dur_us_high = %u\n",
|
||||
htt_stats_buf->rx_active_dur_us_high);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_active_dur_us_high = %u",
|
||||
htt_stats_buf->rx_active_dur_us_high);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_11ax_ul_ofdma = %u",
|
||||
htt_stats_buf->rx_11ax_ul_ofdma);
|
||||
|
||||
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
|
||||
ARRAY_TO_STRING(str_buf, htt_stats_buf->ul_ofdma_rx_mcs,
|
||||
HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_mcs = %s ", str_buf);
|
||||
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; j++) {
|
||||
ARRAY_TO_STRING(rx_gi[j], htt_stats_buf->ul_ofdma_rx_gi[j],
|
||||
HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_gi[%u] = %s ",
|
||||
j, rx_gi[j]);
|
||||
}
|
||||
|
||||
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
|
||||
ARRAY_TO_STRING(str_buf, htt_stats_buf->ul_ofdma_rx_nss,
|
||||
HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_nss = %s ", str_buf);
|
||||
|
||||
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
|
||||
ARRAY_TO_STRING(str_buf, htt_stats_buf->ul_ofdma_rx_bw,
|
||||
HTT_RX_PDEV_STATS_NUM_BW_COUNTERS);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_bw = %s ", str_buf);
|
||||
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_stbc = %u",
|
||||
htt_stats_buf->ul_ofdma_rx_stbc);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "ul_ofdma_rx_ldpc = %u",
|
||||
htt_stats_buf->ul_ofdma_rx_ldpc);
|
||||
|
||||
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
|
||||
ARRAY_TO_STRING(str_buf, htt_stats_buf->rx_ulofdma_non_data_ppdu,
|
||||
HTT_RX_PDEV_MAX_OFDMA_NUM_USER);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_ulofdma_non_data_ppdu = %s ",
|
||||
str_buf);
|
||||
|
||||
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
|
||||
ARRAY_TO_STRING(str_buf, htt_stats_buf->rx_ulofdma_data_ppdu,
|
||||
HTT_RX_PDEV_MAX_OFDMA_NUM_USER);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_ulofdma_data_ppdu = %s ",
|
||||
str_buf);
|
||||
|
||||
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
|
||||
ARRAY_TO_STRING(str_buf, htt_stats_buf->rx_ulofdma_mpdu_ok,
|
||||
HTT_RX_PDEV_MAX_OFDMA_NUM_USER);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_ulofdma_mpdu_ok = %s ", str_buf);
|
||||
|
||||
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
|
||||
ARRAY_TO_STRING(str_buf, htt_stats_buf->rx_ulofdma_mpdu_fail,
|
||||
HTT_RX_PDEV_MAX_OFDMA_NUM_USER);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "rx_ulofdma_mpdu_fail = %s",
|
||||
str_buf);
|
||||
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
|
||||
index = 0;
|
||||
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
|
||||
for (i = 0; i < HTT_RX_PDEV_MAX_OFDMA_NUM_USER; i++)
|
||||
index += snprintf(&str_buf[index],
|
||||
HTT_MAX_STRING_LEN - index,
|
||||
" %u:%d,",
|
||||
i, htt_stats_buf->rx_ul_fd_rssi[j][i]);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len,
|
||||
"rx_ul_fd_rssi: nss[%u] = %s", j, str_buf);
|
||||
}
|
||||
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "per_chain_rssi_pkt_type = %#x",
|
||||
htt_stats_buf->per_chain_rssi_pkt_type);
|
||||
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++) {
|
||||
index = 0;
|
||||
memset(str_buf, 0x0, HTT_MAX_STRING_LEN);
|
||||
for (i = 0; i < HTT_RX_PDEV_STATS_NUM_BW_COUNTERS; i++)
|
||||
index += snprintf(&str_buf[index],
|
||||
HTT_MAX_STRING_LEN - index,
|
||||
" %u:%d,",
|
||||
i,
|
||||
htt_stats_buf->rx_per_chain_rssi_in_dbm[j][i]);
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len,
|
||||
"rx_per_chain_rssi_in_dbm[%u] = %s ", j, str_buf);
|
||||
}
|
||||
len += HTT_DBG_OUT(buf + len, buf_len - len, "\n");
|
||||
|
||||
if (len >= buf_len)
|
||||
buf[buf_len - 1] = 0;
|
||||
@ -3119,6 +3248,16 @@ static inline void htt_print_rx_pdev_rate_stats_tlv(const void *tag_buf,
|
||||
buf[len] = 0;
|
||||
|
||||
stats_req->buf_len = len;
|
||||
|
||||
fail:
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
|
||||
kfree(rssi_chain[j]);
|
||||
|
||||
for (j = 0; j < HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS; j++)
|
||||
kfree(rx_pilot_evm_db[j]);
|
||||
|
||||
for (i = 0; i < HTT_RX_PDEV_STATS_NUM_GI_COUNTERS; i++)
|
||||
kfree(rx_gi[i]);
|
||||
}
|
||||
|
||||
static inline void htt_print_rx_soc_fw_stats_tlv(const void *tag_buf,
|
||||
|
@ -1231,6 +1231,8 @@ struct htt_tx_pdev_rate_stats_tlv {
|
||||
#define HTT_RX_PDEV_STATS_NUM_BW_COUNTERS 4
|
||||
#define HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS 8
|
||||
#define HTT_RX_PDEV_STATS_NUM_PREAMBLE_TYPES HTT_STATS_PREAM_COUNT
|
||||
#define HTT_RX_PDEV_MAX_OFDMA_NUM_USER 8
|
||||
#define HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS 16
|
||||
|
||||
struct htt_rx_pdev_rate_stats_tlv {
|
||||
u32 mac_id__word;
|
||||
@ -1269,6 +1271,46 @@ struct htt_rx_pdev_rate_stats_tlv {
|
||||
u32 rx_legacy_ofdm_rate[HTT_RX_PDEV_STATS_NUM_LEGACY_OFDM_STATS];
|
||||
u32 rx_active_dur_us_low;
|
||||
u32 rx_active_dur_us_high;
|
||||
|
||||
u32 rx_11ax_ul_ofdma;
|
||||
|
||||
u32 ul_ofdma_rx_mcs[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
|
||||
u32 ul_ofdma_rx_gi[HTT_TX_PDEV_STATS_NUM_GI_COUNTERS]
|
||||
[HTT_RX_PDEV_STATS_NUM_MCS_COUNTERS];
|
||||
u32 ul_ofdma_rx_nss[HTT_TX_PDEV_STATS_NUM_SPATIAL_STREAMS];
|
||||
u32 ul_ofdma_rx_bw[HTT_TX_PDEV_STATS_NUM_BW_COUNTERS];
|
||||
u32 ul_ofdma_rx_stbc;
|
||||
u32 ul_ofdma_rx_ldpc;
|
||||
|
||||
/* record the stats for each user index */
|
||||
u32 rx_ulofdma_non_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* ppdu level */
|
||||
u32 rx_ulofdma_data_ppdu[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* ppdu level */
|
||||
u32 rx_ulofdma_mpdu_ok[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* mpdu level */
|
||||
u32 rx_ulofdma_mpdu_fail[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* mpdu level */
|
||||
|
||||
u32 nss_count;
|
||||
u32 pilot_count;
|
||||
/* RxEVM stats in dB */
|
||||
s32 rx_pilot_evm_db[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
|
||||
[HTT_RX_PDEV_STATS_RXEVM_MAX_PILOTS_PER_NSS];
|
||||
/* rx_pilot_evm_db_mean:
|
||||
* EVM mean across pilots, computed as
|
||||
* mean(10*log10(rx_pilot_evm_linear)) = mean(rx_pilot_evm_db)
|
||||
*/
|
||||
s32 rx_pilot_evm_db_mean[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS];
|
||||
s8 rx_ul_fd_rssi[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
|
||||
[HTT_RX_PDEV_MAX_OFDMA_NUM_USER]; /* dBm units */
|
||||
/* per_chain_rssi_pkt_type:
|
||||
* This field shows what type of rx frame the per-chain RSSI was computed
|
||||
* on, by recording the frame type and sub-type as bit-fields within this
|
||||
* field:
|
||||
* BIT [3 : 0] :- IEEE80211_FC0_TYPE
|
||||
* BIT [7 : 4] :- IEEE80211_FC0_SUBTYPE
|
||||
* BIT [31 : 8] :- Reserved
|
||||
*/
|
||||
u32 per_chain_rssi_pkt_type;
|
||||
s8 rx_per_chain_rssi_in_dbm[HTT_RX_PDEV_STATS_NUM_SPATIAL_STREAMS]
|
||||
[HTT_RX_PDEV_STATS_NUM_BW_COUNTERS];
|
||||
};
|
||||
|
||||
/* == RX PDEV/SOC STATS == */
|
||||
|
@ -507,6 +507,14 @@ enum htt_ppdu_stats_tag_type {
|
||||
| BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_FLUSH) \
|
||||
| BIT(HTT_PPDU_STATS_TAG_USR_COMMON_ARRAY))
|
||||
|
||||
#define HTT_PPDU_STATS_TAG_PKTLOG (BIT(HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_64) | \
|
||||
BIT(HTT_PPDU_STATS_TAG_USR_MPDU_ENQ_BITMAP_256) | \
|
||||
BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_64) | \
|
||||
BIT(HTT_PPDU_STATS_TAG_USR_COMPLTN_BA_BITMAP_256) | \
|
||||
BIT(HTT_PPDU_STATS_TAG_INFO) | \
|
||||
BIT(HTT_PPDU_STATS_TAG_TX_MGMTCTRL_PAYLOAD) | \
|
||||
HTT_PPDU_STATS_TAG_DEFAULT)
|
||||
|
||||
/* HTT_H2T_MSG_TYPE_RX_RING_SELECTION_CFG Message
|
||||
*
|
||||
* details:
|
||||
|
@ -2067,7 +2067,8 @@ static void ath11k_dp_rx_deliver_msdu(struct ath11k *ar, struct napi_struct *nap
|
||||
struct sk_buff *msdu)
|
||||
{
|
||||
static const struct ieee80211_radiotap_he known = {
|
||||
.data1 = cpu_to_le16(IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN),
|
||||
.data1 = cpu_to_le16(IEEE80211_RADIOTAP_HE_DATA1_DATA_MCS_KNOWN |
|
||||
IEEE80211_RADIOTAP_HE_DATA1_BW_RU_ALLOC_KNOWN),
|
||||
.data2 = cpu_to_le16(IEEE80211_RADIOTAP_HE_DATA2_GI_KNOWN),
|
||||
};
|
||||
struct ieee80211_rx_status *status;
|
||||
|
@ -461,7 +461,7 @@ void ath11k_dp_tx_completion_handler(struct ath11k_base *ab, int ring_id)
|
||||
int hal_ring_id = dp->tx_ring[ring_id].tcl_comp_ring.ring_id;
|
||||
struct hal_srng *status_ring = &ab->hal.srng_list[hal_ring_id];
|
||||
struct sk_buff *msdu;
|
||||
struct hal_tx_status ts;
|
||||
struct hal_tx_status ts = { 0 };
|
||||
struct dp_tx_ring *tx_ring = &dp->tx_ring[ring_id];
|
||||
u32 *desc;
|
||||
u32 msdu_id;
|
||||
@ -630,7 +630,7 @@ int ath11k_dp_tx_htt_srng_setup(struct ath11k_base *ab, u32 ring_id,
|
||||
dma_addr_t hp_addr, tp_addr;
|
||||
enum htt_srng_ring_type htt_ring_type;
|
||||
enum htt_srng_ring_id htt_ring_id;
|
||||
int ret = 0;
|
||||
int ret;
|
||||
|
||||
skb = ath11k_htc_alloc_skb(ab, len);
|
||||
if (!skb)
|
||||
@ -642,9 +642,10 @@ int ath11k_dp_tx_htt_srng_setup(struct ath11k_base *ab, u32 ring_id,
|
||||
hp_addr = ath11k_hal_srng_get_hp_addr(ab, srng);
|
||||
tp_addr = ath11k_hal_srng_get_tp_addr(ab, srng);
|
||||
|
||||
if (ath11k_dp_tx_get_ring_id_type(ab, mac_id, ring_id,
|
||||
ring_type, &htt_ring_type,
|
||||
&htt_ring_id))
|
||||
ret = ath11k_dp_tx_get_ring_id_type(ab, mac_id, ring_id,
|
||||
ring_type, &htt_ring_type,
|
||||
&htt_ring_id);
|
||||
if (ret)
|
||||
goto err_free;
|
||||
|
||||
skb_put(skb, len);
|
||||
@ -669,10 +670,8 @@ int ath11k_dp_tx_htt_srng_setup(struct ath11k_base *ab, u32 ring_id,
|
||||
HAL_ADDR_MSB_REG_SHIFT;
|
||||
|
||||
ret = ath11k_hal_srng_get_entrysize(ring_type);
|
||||
if (ret < 0) {
|
||||
ret = -EINVAL;
|
||||
if (ret < 0)
|
||||
goto err_free;
|
||||
}
|
||||
|
||||
ring_entry_sz = ret;
|
||||
|
||||
@ -817,7 +816,7 @@ int ath11k_dp_tx_htt_rx_filter_setup(struct ath11k_base *ab, u32 ring_id,
|
||||
int len = sizeof(*cmd);
|
||||
enum htt_srng_ring_type htt_ring_type;
|
||||
enum htt_srng_ring_id htt_ring_id;
|
||||
int ret = 0;
|
||||
int ret;
|
||||
|
||||
skb = ath11k_htc_alloc_skb(ab, len);
|
||||
if (!skb)
|
||||
@ -826,9 +825,10 @@ int ath11k_dp_tx_htt_rx_filter_setup(struct ath11k_base *ab, u32 ring_id,
|
||||
memset(¶ms, 0, sizeof(params));
|
||||
ath11k_hal_srng_get_params(ab, srng, ¶ms);
|
||||
|
||||
if (ath11k_dp_tx_get_ring_id_type(ab, mac_id, ring_id,
|
||||
ring_type, &htt_ring_type,
|
||||
&htt_ring_id))
|
||||
ret = ath11k_dp_tx_get_ring_id_type(ab, mac_id, ring_id,
|
||||
ring_type, &htt_ring_type,
|
||||
&htt_ring_id);
|
||||
if (ret)
|
||||
goto err_free;
|
||||
|
||||
skb_put(skb, len);
|
||||
|
@ -3520,8 +3520,8 @@ static int ath11k_mac_copy_he_cap(struct ath11k *ar,
|
||||
static void ath11k_mac_setup_he_cap(struct ath11k *ar,
|
||||
struct ath11k_pdev_cap *cap)
|
||||
{
|
||||
struct ieee80211_supported_band *band = NULL;
|
||||
int count = 0;
|
||||
struct ieee80211_supported_band *band;
|
||||
int count;
|
||||
|
||||
if (cap->supported_bands & WMI_HOST_WLAN_2G_CAP) {
|
||||
count = ath11k_mac_copy_he_cap(ar, cap,
|
||||
@ -3529,6 +3529,7 @@ static void ath11k_mac_setup_he_cap(struct ath11k *ar,
|
||||
NL80211_BAND_2GHZ);
|
||||
band = &ar->mac.sbands[NL80211_BAND_2GHZ];
|
||||
band->iftype_data = ar->mac.iftype[NL80211_BAND_2GHZ];
|
||||
band->n_iftype_data = count;
|
||||
}
|
||||
|
||||
if (cap->supported_bands & WMI_HOST_WLAN_5G_CAP) {
|
||||
@ -3537,9 +3538,8 @@ static void ath11k_mac_setup_he_cap(struct ath11k *ar,
|
||||
NL80211_BAND_5GHZ);
|
||||
band = &ar->mac.sbands[NL80211_BAND_5GHZ];
|
||||
band->iftype_data = ar->mac.iftype[NL80211_BAND_5GHZ];
|
||||
band->n_iftype_data = count;
|
||||
}
|
||||
|
||||
band->n_iftype_data = count;
|
||||
}
|
||||
|
||||
static int __ath11k_set_antenna(struct ath11k *ar, u32 tx_ant, u32 rx_ant)
|
||||
@ -4212,12 +4212,6 @@ static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw,
|
||||
arvif->vdev_id, ret);
|
||||
}
|
||||
|
||||
ret = ath11k_mac_set_txbf_conf(arvif);
|
||||
if (ret) {
|
||||
ath11k_warn(ar->ab, "failed to set txbf conf for vdev %d: %d\n",
|
||||
arvif->vdev_id, ret);
|
||||
}
|
||||
|
||||
ath11k_dp_vdev_tx_attach(ar, arvif);
|
||||
|
||||
mutex_unlock(&ar->conf_mutex);
|
||||
@ -4567,6 +4561,11 @@ ath11k_mac_vdev_start_restart(struct ath11k_vif *arvif,
|
||||
arg.channel.freq, arg.vdev_id);
|
||||
}
|
||||
|
||||
ret = ath11k_mac_set_txbf_conf(arvif);
|
||||
if (ret)
|
||||
ath11k_warn(ab, "failed to set txbf conf for vdev %d: %d\n",
|
||||
arvif->vdev_id, ret);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5468,7 +5467,7 @@ static const struct ieee80211_ops ath11k_ops = {
|
||||
.flush = ath11k_mac_op_flush,
|
||||
.sta_statistics = ath11k_mac_op_sta_statistics,
|
||||
CFG80211_TESTMODE_CMD(ath11k_tm_cmd)
|
||||
#ifdef CONFIG_MAC80211_DEBUGFS
|
||||
#ifdef CONFIG_ATH11K_DEBUGFS
|
||||
.sta_add_debugfs = ath11k_sta_add_debugfs,
|
||||
#endif
|
||||
};
|
||||
|
@ -406,7 +406,7 @@ static bool ar9003_aic_cal_post_process(struct ath_hw *ah)
|
||||
sram.com_att_6db =
|
||||
ar9003_aic_find_index(1, fixed_com_att_db);
|
||||
|
||||
sram.valid = 1;
|
||||
sram.valid = true;
|
||||
|
||||
sram.rot_dir_att_db =
|
||||
min(max(rot_dir_path_att_db,
|
||||
|
@ -1620,7 +1620,7 @@ int wcn36xx_smd_send_beacon(struct wcn36xx *wcn, struct ieee80211_vif *vif,
|
||||
msg_body.beacon_length6 = msg_body.beacon_length + 6;
|
||||
|
||||
if (msg_body.beacon_length > BEACON_TEMPLATE_SIZE) {
|
||||
wcn36xx_err("Beacon is to big: beacon size=%d\n",
|
||||
wcn36xx_err("Beacon is too big: beacon size=%d\n",
|
||||
msg_body.beacon_length);
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
|
@ -762,7 +762,7 @@ int wil_priv_init(struct wil6210_priv *wil)
|
||||
*/
|
||||
wil->rx_buff_id_count = WIL_RX_BUFF_ARR_SIZE_DEFAULT;
|
||||
|
||||
wil->amsdu_en = 1;
|
||||
wil->amsdu_en = true;
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -1140,7 +1140,7 @@ static int wil_tx_desc_map(union wil_tx_desc *desc, dma_addr_t pa,
|
||||
void wil_tx_data_init(struct wil_ring_tx_data *txdata)
|
||||
{
|
||||
spin_lock_bh(&txdata->lock);
|
||||
txdata->dot1x_open = 0;
|
||||
txdata->dot1x_open = false;
|
||||
txdata->enabled = 0;
|
||||
txdata->idle = 0;
|
||||
txdata->last_idle = 0;
|
||||
|
@ -1513,14 +1513,14 @@ static void wmi_link_stats_parse(struct wil6210_vif *vif, u64 tsf,
|
||||
if (vif->fw_stats_ready) {
|
||||
/* clean old statistics */
|
||||
vif->fw_stats_tsf = 0;
|
||||
vif->fw_stats_ready = 0;
|
||||
vif->fw_stats_ready = false;
|
||||
}
|
||||
|
||||
wil_link_stats_store_basic(vif, payload + hdr_size);
|
||||
|
||||
if (!has_next) {
|
||||
vif->fw_stats_tsf = tsf;
|
||||
vif->fw_stats_ready = 1;
|
||||
vif->fw_stats_ready = true;
|
||||
}
|
||||
|
||||
break;
|
||||
@ -1535,14 +1535,14 @@ static void wmi_link_stats_parse(struct wil6210_vif *vif, u64 tsf,
|
||||
if (wil->fw_stats_global.ready) {
|
||||
/* clean old statistics */
|
||||
wil->fw_stats_global.tsf = 0;
|
||||
wil->fw_stats_global.ready = 0;
|
||||
wil->fw_stats_global.ready = false;
|
||||
}
|
||||
|
||||
wil_link_stats_store_global(vif, payload + hdr_size);
|
||||
|
||||
if (!has_next) {
|
||||
wil->fw_stats_global.tsf = tsf;
|
||||
wil->fw_stats_global.ready = 1;
|
||||
wil->fw_stats_global.ready = true;
|
||||
}
|
||||
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user