root/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.h
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/*
 * Copyright (C) 2023 Intel Corporation
 * Copyright (C) 2012-2014 Intel Corporation
 * Copyright (C) 2013-2014 Intel Mobile Communications GmbH
 */
#define MVM_DEBUGFS_READ_FILE_OPS(name)                                 \
static const struct file_operations iwl_dbgfs_##name##_ops = {          \
        .read = iwl_dbgfs_##name##_read,                                \
        .open = simple_open,                                            \
        .llseek = generic_file_llseek,                                  \
}

#define MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)                \
static ssize_t _iwl_dbgfs_##name##_write(struct file *file,             \
                                         const char __user *user_buf,   \
                                         size_t count, loff_t *ppos)    \
{                                                                       \
        argtype *arg = file->private_data;                              \
        char buf[buflen] = {};                                          \
        size_t buf_size = min(count, sizeof(buf) -  1);                 \
                                                                        \
        if (copy_from_user(buf, user_buf, buf_size))                    \
                return -EFAULT;                                         \
                                                                        \
        return iwl_dbgfs_##name##_write(arg, buf, buf_size, ppos);      \
}                                                                       \

#define _MVM_DEBUGFS_READ_WRITE_FILE_OPS(name, buflen, argtype)         \
MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)                        \
static const struct file_operations iwl_dbgfs_##name##_ops = {          \
        .write = _iwl_dbgfs_##name##_write,                             \
        .read = iwl_dbgfs_##name##_read,                                \
        .open = simple_open,                                            \
        .llseek = generic_file_llseek,                                  \
};

#define _MVM_DEBUGFS_WRITE_FILE_OPS(name, buflen, argtype)              \
MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)                        \
static const struct file_operations iwl_dbgfs_##name##_ops = {          \
        .write = _iwl_dbgfs_##name##_write,                             \
        .open = simple_open,                                            \
        .llseek = generic_file_llseek,                                  \
};