1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2 /*
3  * Copyright (C) 2012-2014 Intel Corporation
4  * Copyright (C) 2013-2014 Intel Mobile Communications GmbH
5  */
6 #define MVM_DEBUGFS_READ_FILE_OPS(name)					\
7 static const struct file_operations iwl_dbgfs_##name##_ops = {		\
8 	.read = iwl_dbgfs_##name##_read,				\
9 	.open = simple_open,						\
10 	.llseek = generic_file_llseek,					\
11 }
12 
13 #define MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)		\
14 static ssize_t _iwl_dbgfs_##name##_write(struct file *file,		\
15 					 const char __user *user_buf,	\
16 					 size_t count, loff_t *ppos)	\
17 {									\
18 	argtype *arg = file->private_data;				\
19 	char buf[buflen] = {};						\
20 	size_t buf_size = min(count, sizeof(buf) -  1);			\
21 									\
22 	if (copy_from_user(buf, user_buf, buf_size))			\
23 		return -EFAULT;						\
24 									\
25 	return iwl_dbgfs_##name##_write(arg, buf, buf_size, ppos);	\
26 }									\
27 
28 #define _MVM_DEBUGFS_READ_WRITE_FILE_OPS(name, buflen, argtype)		\
29 MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)			\
30 static const struct file_operations iwl_dbgfs_##name##_ops = {		\
31 	.write = _iwl_dbgfs_##name##_write,				\
32 	.read = iwl_dbgfs_##name##_read,				\
33 	.open = simple_open,						\
34 	.llseek = generic_file_llseek,					\
35 };
36 
37 #define _MVM_DEBUGFS_WRITE_FILE_OPS(name, buflen, argtype)		\
38 MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)			\
39 static const struct file_operations iwl_dbgfs_##name##_ops = {		\
40 	.write = _iwl_dbgfs_##name##_write,				\
41 	.open = simple_open,						\
42 	.llseek = generic_file_llseek,					\
43 };
44