wifi: iwlwifi: mvm: add a debugfs hook to clear the monitor data
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Thu, 7 Dec 2023 02:50:10 +0000 (04:50 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 12 Dec 2023 09:36:59 +0000 (10:36 +0100)
This can be used by the user space when it wants to clear the data we
collected so far for privacy reasons.

Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20231207044813.d5e97d5ec0d9.I7a5e836e6109e1fce7e6301dba8d1f28e60a5440@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/dbg.c
drivers/net/wireless/intel/iwlwifi/fw/dbg.h
drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.c
drivers/net/wireless/intel/iwlwifi/iwl-dbg-tlv.h
drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c

index 7ee9b7c8a3ab714e6d33589c9d64406c6792ec52..f6e399d1e95c6b33ff837f5050fc2d8ac5bfad52 100644 (file)
@@ -3395,3 +3395,13 @@ void iwl_fw_disable_dbg_asserts(struct iwl_fw_runtime *fwrt)
        iwl_trans_send_cmd(fwrt->trans, &hcmd);
 }
 IWL_EXPORT_SYMBOL(iwl_fw_disable_dbg_asserts);
+
+void iwl_fw_dbg_clear_monitor_buf(struct iwl_fw_runtime *fwrt)
+{
+       struct iwl_fw_dbg_params params = {0};
+
+       iwl_fw_dbg_stop_sync(fwrt);
+       iwl_dbg_tlv_init_cfg(fwrt);
+       iwl_fw_dbg_stop_restart_recording(fwrt, &params, false);
+}
+IWL_EXPORT_SYMBOL(iwl_fw_dbg_clear_monitor_buf);
index 66b233250c7c3b06ab692bcf2e767462a0ebc50e..eb38c686b5cb5777a128882607ea5d5f13d453af 100644 (file)
@@ -330,6 +330,7 @@ void iwl_send_dbg_dump_complete_cmd(struct iwl_fw_runtime *fwrt,
                                    u32 timepoint,
                                    u32 timepoint_data);
 void iwl_fw_disable_dbg_asserts(struct iwl_fw_runtime *fwrt);
+void iwl_fw_dbg_clear_monitor_buf(struct iwl_fw_runtime *fwrt);
 
 #define IWL_FW_CHECK_FAILED(_obj, _fmt, ...)                           \
        IWL_ERR_LIMIT(_obj, _fmt, __VA_ARGS__)
index b658cf228fbe2da9d291db2d6d0655a48b4602de..3b14f647674350e3fdef138eb880b07df6eb5770 100644 (file)
@@ -1274,7 +1274,7 @@ iwl_dbg_tlv_tp_trigger(struct iwl_fw_runtime *fwrt, bool sync,
        return 0;
 }
 
-static void iwl_dbg_tlv_init_cfg(struct iwl_fw_runtime *fwrt)
+void iwl_dbg_tlv_init_cfg(struct iwl_fw_runtime *fwrt)
 {
        enum iwl_fw_ini_buffer_location *ini_dest = &fwrt->trans->dbg.ini_dest;
        int ret, i;
index 06fb7d6653905a5a62f1f031ab2abb3aa726d7b7..7ed6329fd8ca1f38ae3a16231160ebb033ee9b78 100644 (file)
@@ -57,6 +57,7 @@ void _iwl_dbg_tlv_time_point(struct iwl_fw_runtime *fwrt,
                             enum iwl_fw_ini_time_point tp_id,
                             union iwl_dbg_tlv_tp_data *tp_data,
                             bool sync);
+void iwl_dbg_tlv_init_cfg(struct iwl_fw_runtime *fwrt);
 
 static inline void iwl_dbg_tlv_time_point(struct iwl_fw_runtime *fwrt,
                                          enum iwl_fw_ini_time_point tp_id,
index 329c545f65fde880e56e76249ee70157f22a142d..e016fce7ab246418e82cb246bac1c98a8b86109b 100644 (file)
@@ -1714,6 +1714,20 @@ static ssize_t iwl_dbgfs_fw_dbg_collect_write(struct iwl_mvm *mvm,
        return count;
 }
 
+static ssize_t iwl_dbgfs_fw_dbg_clear_write(struct iwl_mvm *mvm,
+                                           char *buf, size_t count,
+                                           loff_t *ppos)
+{
+       if (mvm->trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_9000)
+               return -EOPNOTSUPP;
+
+       mutex_lock(&mvm->mutex);
+       iwl_fw_dbg_clear_monitor_buf(&mvm->fwrt);
+       mutex_unlock(&mvm->mutex);
+
+       return count;
+}
+
 static ssize_t iwl_dbgfs_dbg_time_point_write(struct iwl_mvm *mvm,
                                              char *buf, size_t count,
                                              loff_t *ppos)
@@ -2166,6 +2180,7 @@ MVM_DEBUGFS_WRITE_FILE_OPS(bt_force_ant, 10);
 MVM_DEBUGFS_READ_WRITE_FILE_OPS(scan_ant_rxchain, 8);
 MVM_DEBUGFS_READ_WRITE_FILE_OPS(fw_dbg_conf, 8);
 MVM_DEBUGFS_WRITE_FILE_OPS(fw_dbg_collect, 64);
+MVM_DEBUGFS_WRITE_FILE_OPS(fw_dbg_clear, 64);
 MVM_DEBUGFS_WRITE_FILE_OPS(dbg_time_point, 64);
 MVM_DEBUGFS_WRITE_FILE_OPS(indirection_tbl,
                           (IWL_RSS_INDIRECTION_TABLE_SIZE * 2));
@@ -2372,6 +2387,7 @@ void iwl_mvm_dbgfs_register(struct iwl_mvm *mvm)
        MVM_DEBUGFS_ADD_FILE(prph_reg, mvm->debugfs_dir, 0600);
        MVM_DEBUGFS_ADD_FILE(fw_dbg_conf, mvm->debugfs_dir, 0600);
        MVM_DEBUGFS_ADD_FILE(fw_dbg_collect, mvm->debugfs_dir, 0200);
+       MVM_DEBUGFS_ADD_FILE(fw_dbg_clear, mvm->debugfs_dir, 0200);
        MVM_DEBUGFS_ADD_FILE(dbg_time_point, mvm->debugfs_dir, 0200);
        MVM_DEBUGFS_ADD_FILE(send_echo_cmd, mvm->debugfs_dir, 0200);
        MVM_DEBUGFS_ADD_FILE(indirection_tbl, mvm->debugfs_dir, 0200);