| /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ | |
| /* | |
| * 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, \ | |
| }; |