Linux Audio

Check our new training course

Linux kernel drivers training

May 6-19, 2025
Register
Loading...
v6.8
 1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
 2/*
 3 * Copyright (C) 2023 Intel Corporation
 4 * Copyright (C) 2012-2014 Intel Corporation
 5 * Copyright (C) 2013-2014 Intel Mobile Communications GmbH
 6 */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 7#define MVM_DEBUGFS_READ_FILE_OPS(name)					\
 8static const struct file_operations iwl_dbgfs_##name##_ops = {		\
 9	.read = iwl_dbgfs_##name##_read,				\
10	.open = simple_open,						\
11	.llseek = generic_file_llseek,					\
12}
13
14#define MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)		\
15static ssize_t _iwl_dbgfs_##name##_write(struct file *file,		\
16					 const char __user *user_buf,	\
17					 size_t count, loff_t *ppos)	\
18{									\
19	argtype *arg = file->private_data;				\
20	char buf[buflen] = {};						\
21	size_t buf_size = min(count, sizeof(buf) -  1);			\
22									\
23	if (copy_from_user(buf, user_buf, buf_size))			\
24		return -EFAULT;						\
25									\
26	return iwl_dbgfs_##name##_write(arg, buf, buf_size, ppos);	\
27}									\
28
29#define _MVM_DEBUGFS_READ_WRITE_FILE_OPS(name, buflen, argtype)		\
30MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)			\
31static const struct file_operations iwl_dbgfs_##name##_ops = {		\
32	.write = _iwl_dbgfs_##name##_write,				\
33	.read = iwl_dbgfs_##name##_read,				\
34	.open = simple_open,						\
35	.llseek = generic_file_llseek,					\
36};
37
38#define _MVM_DEBUGFS_WRITE_FILE_OPS(name, buflen, argtype)		\
39MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)			\
40static const struct file_operations iwl_dbgfs_##name##_ops = {		\
41	.write = _iwl_dbgfs_##name##_write,				\
42	.open = simple_open,						\
43	.llseek = generic_file_llseek,					\
44};
v4.17
  1/******************************************************************************
  2 *
  3 * This file is provided under a dual BSD/GPLv2 license.  When using or
  4 * redistributing this file, you may do so under either license.
  5 *
  6 * GPL LICENSE SUMMARY
  7 *
  8 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
  9 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
 10 *
 11 * This program is free software; you can redistribute it and/or modify
 12 * it under the terms of version 2 of the GNU General Public License as
 13 * published by the Free Software Foundation.
 14 *
 15 * This program is distributed in the hope that it will be useful, but
 16 * WITHOUT ANY WARRANTY; without even the implied warranty of
 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 18 * General Public License for more details.
 19 *
 20 * You should have received a copy of the GNU General Public License
 21 * along with this program; if not, write to the Free Software
 22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110,
 23 * USA
 24 *
 25 * The full GNU General Public License is included in this distribution
 26 * in the file called COPYING.
 27 *
 28 * Contact Information:
 29 *  Intel Linux Wireless <linuxwifi@intel.com>
 30 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
 31 *
 32 * BSD LICENSE
 33 *
 34 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
 35 * Copyright(c) 2013 - 2014 Intel Mobile Communications GmbH
 36 * All rights reserved.
 37 *
 38 * Redistribution and use in source and binary forms, with or without
 39 * modification, are permitted provided that the following conditions
 40 * are met:
 41 *
 42 *  * Redistributions of source code must retain the above copyright
 43 *    notice, this list of conditions and the following disclaimer.
 44 *  * Redistributions in binary form must reproduce the above copyright
 45 *    notice, this list of conditions and the following disclaimer in
 46 *    the documentation and/or other materials provided with the
 47 *    distribution.
 48 *  * Neither the name Intel Corporation nor the names of its
 49 *    contributors may be used to endorse or promote products derived
 50 *    from this software without specific prior written permission.
 51 *
 52 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 53 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 54 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 55 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 56 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 57 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 58 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 59 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 60 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 61 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 62 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 63 *
 64 *****************************************************************************/
 65
 66#define MVM_DEBUGFS_READ_FILE_OPS(name)					\
 67static const struct file_operations iwl_dbgfs_##name##_ops = {		\
 68	.read = iwl_dbgfs_##name##_read,				\
 69	.open = simple_open,						\
 70	.llseek = generic_file_llseek,					\
 71}
 72
 73#define MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)		\
 74static ssize_t _iwl_dbgfs_##name##_write(struct file *file,		\
 75					 const char __user *user_buf,	\
 76					 size_t count, loff_t *ppos)	\
 77{									\
 78	argtype *arg = file->private_data;				\
 79	char buf[buflen] = {};						\
 80	size_t buf_size = min(count, sizeof(buf) -  1);			\
 81									\
 82	if (copy_from_user(buf, user_buf, buf_size))			\
 83		return -EFAULT;						\
 84									\
 85	return iwl_dbgfs_##name##_write(arg, buf, buf_size, ppos);	\
 86}									\
 87
 88#define _MVM_DEBUGFS_READ_WRITE_FILE_OPS(name, buflen, argtype)		\
 89MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)			\
 90static const struct file_operations iwl_dbgfs_##name##_ops = {		\
 91	.write = _iwl_dbgfs_##name##_write,				\
 92	.read = iwl_dbgfs_##name##_read,				\
 93	.open = simple_open,						\
 94	.llseek = generic_file_llseek,					\
 95};
 96
 97#define _MVM_DEBUGFS_WRITE_FILE_OPS(name, buflen, argtype)		\
 98MVM_DEBUGFS_WRITE_WRAPPER(name, buflen, argtype)			\
 99static const struct file_operations iwl_dbgfs_##name##_ops = {		\
100	.write = _iwl_dbgfs_##name##_write,				\
101	.open = simple_open,						\
102	.llseek = generic_file_llseek,					\
103};