wifi: iwlwifi: mld: Add support for WIPHY_DEBUGFS_READ_FILE_OPS_MLD macro
authorPagadala Yesu Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Wed, 12 Mar 2025 22:22:25 +0000 (00:22 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Tue, 18 Mar 2025 08:51:24 +0000 (09:51 +0100)
Introduced the WIPHY_DEBUGFS_READ_FILE_OPS_MLD macro to enable reading
data from the driver while holding the wiphy lock.
This will enable read operations with wiphy locked.

Signed-off-by: Pagadala Yesu Anjaneyulu <pagadala.yesu.anjaneyulu@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250313002008.b0ddb6b0a144.I1fab63f2c6f52fea61cc5d7b27775aed58adfd8d@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/intel/iwlwifi/mld/debugfs.h

index 13d9718..900aaed 100644 (file)
@@ -121,6 +121,16 @@ static ssize_t __iwl_dbgfs_##name##_write(struct file *file,               \
                .llseek = generic_file_llseek,                          \
        }
 
+#define WIPHY_DEBUGFS_READ_HANDLER_WRAPPER_MLD(name)                   \
+static ssize_t iwl_dbgfs_##name##_read_handler(struct wiphy *wiphy,    \
+                                      struct file *file, char *buf,    \
+                                      size_t count, void *data)        \
+{                                                                      \
+       struct ieee80211_hw *hw = wiphy_to_ieee80211_hw(wiphy);         \
+       struct iwl_mld *mld = IWL_MAC80211_GET_MLD(hw);                 \
+       return iwl_dbgfs_##name##_read(mld, buf, count);                \
+}
+
 #define WIPHY_DEBUGFS_WRITE_HANDLER_WRAPPER_MLD(name)                  \
 static ssize_t iwl_dbgfs_##name##_write_handler(struct wiphy *wiphy,   \
                                       struct file *file, char *buf,    \
@@ -147,6 +157,40 @@ static ssize_t __iwl_dbgfs_##name##_write(struct file *file,               \
                                NULL);                                  \
 }
 
+#define WIPHY_DEBUGFS_READ_WRAPPER_MLD(name)                           \
+WIPHY_DEBUGFS_READ_HANDLER_WRAPPER_MLD(name)                           \
+static ssize_t __iwl_dbgfs_##name##_read(struct file *file,            \
+                                       char __user *user_buf,          \
+                                       size_t count, loff_t *ppos)     \
+{                                                                      \
+       struct dbgfs_##name##_data *data = file->private_data;          \
+       struct iwl_mld *mld = data->arg;                                \
+                                                                       \
+       if (!data->read_done) {                                         \
+               data->read_done = true;                                 \
+               data->rlen = wiphy_locked_debugfs_read(mld->wiphy,      \
+                               file, data->buf, sizeof(data->buf),     \
+                               user_buf, count, ppos,                  \
+                               iwl_dbgfs_##name##_read_handler, NULL); \
+               return data->rlen;                                      \
+       }                                                               \
+                                                                       \
+       if (data->rlen < 0)                                             \
+               return data->rlen;                                      \
+       return simple_read_from_buffer(user_buf, count, ppos,           \
+                                      data->buf, data->rlen);          \
+}
+
+#define WIPHY_DEBUGFS_READ_FILE_OPS_MLD(name, bufsz)                   \
+       MLD_DEBUGFS_OPEN_WRAPPER(name, bufsz, struct iwl_mld)           \
+       WIPHY_DEBUGFS_READ_WRAPPER_MLD(name)                            \
+       static const struct file_operations iwl_dbgfs_##name##_ops = {  \
+               .read = __iwl_dbgfs_##name##_read,                      \
+               .open = _iwl_dbgfs_##name##_open,                       \
+               .llseek = generic_file_llseek,                          \
+               .release = _iwl_dbgfs_release,                          \
+       }
+
 #define WIPHY_DEBUGFS_WRITE_FILE_OPS_MLD(name, bufsz)                  \
        MLD_DEBUGFS_OPEN_WRAPPER(name, bufsz, struct iwl_mld)           \
        WIPHY_DEBUGFS_WRITE_WRAPPER_MLD(name)                           \