ath10k: Added support for extended dbglog module id for 10.4
authorMaharaja Kennadyrajan <c_mkenna@qti.qualcomm.com>
Tue, 23 Aug 2016 10:05:36 +0000 (15:35 +0530)
committerKalle Valo <kvalo@qca.qualcomm.com>
Fri, 2 Sep 2016 15:55:55 +0000 (18:55 +0300)
For 10.4 fw versions, dbglog module id has been extended from u32
to u64, hence this patch fixes the same in the ath10k driver side.

This patch doesn't break the older 10.4 releases. The FW change
is already present in the older FWs.

Signed-off-by: Maharaja Kennadyrajan <c_mkenna@qti.qualcomm.com>
Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
drivers/net/wireless/ath/ath10k/core.h
drivers/net/wireless/ath/ath10k/debug.c
drivers/net/wireless/ath/ath10k/wmi-ops.h
drivers/net/wireless/ath/ath10k/wmi-tlv.c
drivers/net/wireless/ath/ath10k/wmi.c
drivers/net/wireless/ath/ath10k/wmi.h

index 7e329dcf9f4d48724aa83b65e3dbc985fcb1b38e..e13e0781fcae0a5de366d3a136b56f83448b034d 100644 (file)
@@ -441,7 +441,7 @@ struct ath10k_debug {
        struct completion tpc_complete;
 
        /* protected by conf_mutex */
-       u32 fw_dbglog_mask;
+       u64 fw_dbglog_mask;
        u32 fw_dbglog_level;
        u32 pktlog_filter;
        u32 reg_addr;
index 8f0fd41dfd4b4a5c29582589244b179be50b759c..832da6ed9f13c002ca0c597793c6da618b6c29d1 100644 (file)
@@ -1228,9 +1228,9 @@ static ssize_t ath10k_read_fw_dbglog(struct file *file,
 {
        struct ath10k *ar = file->private_data;
        unsigned int len;
-       char buf[64];
+       char buf[96];
 
-       len = scnprintf(buf, sizeof(buf), "0x%08x %u\n",
+       len = scnprintf(buf, sizeof(buf), "0x%16llx %u\n",
                        ar->debug.fw_dbglog_mask, ar->debug.fw_dbglog_level);
 
        return simple_read_from_buffer(user_buf, count, ppos, buf, len);
@@ -1242,15 +1242,16 @@ static ssize_t ath10k_write_fw_dbglog(struct file *file,
 {
        struct ath10k *ar = file->private_data;
        int ret;
-       char buf[64];
-       unsigned int log_level, mask;
+       char buf[96];
+       unsigned int log_level;
+       u64 mask;
 
        simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count);
 
        /* make sure that buf is null terminated */
        buf[sizeof(buf) - 1] = 0;
 
-       ret = sscanf(buf, "%x %u", &mask, &log_level);
+       ret = sscanf(buf, "%llx %u", &mask, &log_level);
 
        if (!ret)
                return -EINVAL;
index c67eda78b69e68e16c7a558986d8f5f57e4bed76..c9a8bb1186f2615ca80b477e0e384170f593c597 100644 (file)
@@ -125,7 +125,7 @@ struct wmi_ops {
                                             enum wmi_force_fw_hang_type type,
                                             u32 delay_ms);
        struct sk_buff *(*gen_mgmt_tx)(struct ath10k *ar, struct sk_buff *skb);
-       struct sk_buff *(*gen_dbglog_cfg)(struct ath10k *ar, u32 module_enable,
+       struct sk_buff *(*gen_dbglog_cfg)(struct ath10k *ar, u64 module_enable,
                                          u32 log_level);
        struct sk_buff *(*gen_pktlog_enable)(struct ath10k *ar, u32 filter);
        struct sk_buff *(*gen_pktlog_disable)(struct ath10k *ar);
@@ -945,7 +945,7 @@ ath10k_wmi_force_fw_hang(struct ath10k *ar,
 }
 
 static inline int
-ath10k_wmi_dbglog_cfg(struct ath10k *ar, u32 module_enable, u32 log_level)
+ath10k_wmi_dbglog_cfg(struct ath10k *ar, u64 module_enable, u32 log_level)
 {
        struct sk_buff *skb;
 
index a42f52dd9a3605d6eccd8e63061ba417b1d015c6..e64f59300a7cb7d00c9add8168ca6b3dea5ecebd 100644 (file)
@@ -2468,7 +2468,7 @@ ath10k_wmi_tlv_op_gen_force_fw_hang(struct ath10k *ar,
 }
 
 static struct sk_buff *
-ath10k_wmi_tlv_op_gen_dbglog_cfg(struct ath10k *ar, u32 module_enable,
+ath10k_wmi_tlv_op_gen_dbglog_cfg(struct ath10k *ar, u64 module_enable,
                                 u32 log_level) {
        struct wmi_tlv_dbglog_cmd *cmd;
        struct wmi_tlv *tlv;
index 15b7efc184a4e2734c9d25e79ec3054b87b52931..eb4ab6fa688ff7285f85ec34cae2e52c248017d7 100644 (file)
@@ -6937,7 +6937,7 @@ ath10k_wmi_op_gen_force_fw_hang(struct ath10k *ar,
 }
 
 static struct sk_buff *
-ath10k_wmi_op_gen_dbglog_cfg(struct ath10k *ar, u32 module_enable,
+ath10k_wmi_op_gen_dbglog_cfg(struct ath10k *ar, u64 module_enable,
                             u32 log_level)
 {
        struct wmi_dbglog_cfg_cmd *cmd;
@@ -6974,6 +6974,44 @@ ath10k_wmi_op_gen_dbglog_cfg(struct ath10k *ar, u32 module_enable,
        return skb;
 }
 
+static struct sk_buff *
+ath10k_wmi_10_4_op_gen_dbglog_cfg(struct ath10k *ar, u64 module_enable,
+                                 u32 log_level)
+{
+       struct wmi_10_4_dbglog_cfg_cmd *cmd;
+       struct sk_buff *skb;
+       u32 cfg;
+
+       skb = ath10k_wmi_alloc_skb(ar, sizeof(*cmd));
+       if (!skb)
+               return ERR_PTR(-ENOMEM);
+
+       cmd = (struct wmi_10_4_dbglog_cfg_cmd *)skb->data;
+
+       if (module_enable) {
+               cfg = SM(log_level,
+                        ATH10K_DBGLOG_CFG_LOG_LVL);
+       } else {
+               /* set back defaults, all modules with WARN level */
+               cfg = SM(ATH10K_DBGLOG_LEVEL_WARN,
+                        ATH10K_DBGLOG_CFG_LOG_LVL);
+               module_enable = ~0;
+       }
+
+       cmd->module_enable = __cpu_to_le64(module_enable);
+       cmd->module_valid = __cpu_to_le64(~0);
+       cmd->config_enable = __cpu_to_le32(cfg);
+       cmd->config_valid = __cpu_to_le32(ATH10K_DBGLOG_CFG_LOG_LVL_MASK);
+
+       ath10k_dbg(ar, ATH10K_DBG_WMI,
+                  "wmi dbglog cfg modules 0x%016llx 0x%016llx config %08x %08x\n",
+                  __le64_to_cpu(cmd->module_enable),
+                  __le64_to_cpu(cmd->module_valid),
+                  __le32_to_cpu(cmd->config_enable),
+                  __le32_to_cpu(cmd->config_valid));
+       return skb;
+}
+
 static struct sk_buff *
 ath10k_wmi_op_gen_pktlog_enable(struct ath10k *ar, u32 ev_bitmap)
 {
@@ -8092,7 +8130,7 @@ static const struct wmi_ops wmi_10_4_ops = {
        .gen_pdev_set_wmm = ath10k_wmi_op_gen_pdev_set_wmm,
        .gen_force_fw_hang = ath10k_wmi_op_gen_force_fw_hang,
        .gen_mgmt_tx = ath10k_wmi_op_gen_mgmt_tx,
-       .gen_dbglog_cfg = ath10k_wmi_op_gen_dbglog_cfg,
+       .gen_dbglog_cfg = ath10k_wmi_10_4_op_gen_dbglog_cfg,
        .gen_pktlog_enable = ath10k_wmi_op_gen_pktlog_enable,
        .gen_pktlog_disable = ath10k_wmi_op_gen_pktlog_disable,
        .gen_pdev_set_quiet_mode = ath10k_wmi_op_gen_pdev_set_quiet_mode,
index 2f89c4b2d4f210e4cd0efdaee590ee036b27eb71..48e04b92e231f4fdbc212b6f71c17d17e3382701 100644 (file)
@@ -6174,6 +6174,20 @@ struct wmi_dbglog_cfg_cmd {
        __le32 config_valid;
 } __packed;
 
+struct wmi_10_4_dbglog_cfg_cmd {
+       /* bitmask to hold mod id config*/
+       __le64 module_enable;
+
+       /* see ATH10K_DBGLOG_CFG_ */
+       __le32 config_enable;
+
+       /* mask of module id bits to be changed */
+       __le64 module_valid;
+
+       /* mask of config bits to be changed, see ATH10K_DBGLOG_CFG_ */
+       __le32 config_valid;
+} __packed;
+
 enum wmi_roam_reason {
        WMI_ROAM_REASON_BETTER_AP = 1,
        WMI_ROAM_REASON_BEACON_MISS = 2,