156 lines
6.6 KiB
C
156 lines
6.6 KiB
C
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
/*
|
|
*
|
|
* (C) COPYRIGHT 2019-2023 ARM Limited. All rights reserved.
|
|
*
|
|
* This program is free software and is provided to you under the terms of the
|
|
* GNU General Public License version 2 as published by the Free Software
|
|
* Foundation, and any use by you of this program is subject to the terms
|
|
* of such GNU license.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, you can access it online at
|
|
* http://www.gnu.org/licenses/gpl-2.0.html.
|
|
*
|
|
*/
|
|
|
|
#ifndef _KBASE_DEBUGFS_HELPER_H_
|
|
#define _KBASE_DEBUGFS_HELPER_H_
|
|
|
|
/**
|
|
* typedef kbase_debugfs_helper_set_attr_fn - Type of function to set an
|
|
* attribute value from an array
|
|
*
|
|
* @array: Address of an object that can be accessed like an array.
|
|
* @index: An element index. The valid range depends on the use-case.
|
|
* @value: Attribute value to be set.
|
|
*/
|
|
typedef void kbase_debugfs_helper_set_attr_fn(void *array, size_t index, size_t value);
|
|
|
|
/**
|
|
* kbase_debugfs_helper_set_attr_from_string - Parse a string to reconfigure an
|
|
* array
|
|
*
|
|
* @buf: Input string to parse. Must be nul-terminated!
|
|
* @array: Address of an object that can be accessed like an array.
|
|
* @nelems: Number of elements in the array.
|
|
* @set_attr_fn: Function to be called back for each array element.
|
|
*
|
|
* The given function is called once for each attribute value found in the
|
|
* input string. It is not an error if the string specifies fewer attribute
|
|
* values than the specified number of array elements.
|
|
*
|
|
* The number base of each attribute value is detected automatically
|
|
* according to the standard rules (e.g. prefix "0x" for hexadecimal).
|
|
* Attribute values are separated by one or more space characters.
|
|
* Additional leading and trailing spaces are ignored.
|
|
*
|
|
* Return: 0 if success, negative error code otherwise.
|
|
*/
|
|
int kbase_debugfs_helper_set_attr_from_string(const char *buf, void *array, size_t nelems,
|
|
kbase_debugfs_helper_set_attr_fn *set_attr_fn);
|
|
|
|
/**
|
|
* kbase_debugfs_string_validator - Validate a string to be written to a
|
|
* debugfs file for any incorrect formats
|
|
* or wrong values.
|
|
*
|
|
* @buf: Null-terminated string to validate.
|
|
*
|
|
* This function is to be used before any writes to debugfs values are done
|
|
* such that any strings with erroneous values (such as octal 09 or
|
|
* hexadecimal 0xGH are fully ignored) - without this validation, any correct
|
|
* values before the first incorrect one will still be entered into the
|
|
* debugfs file. This essentially iterates the values through kstrtoul to see
|
|
* if it is valid.
|
|
*
|
|
* It is largely similar to set_attr_from_string to iterate through the values
|
|
* of the input string. This function also requires the input string to be
|
|
* writable.
|
|
*
|
|
* Return: 0 with no error, else -22 (the invalid return value of kstrtoul) if
|
|
* any value in the string was wrong or with an incorrect format.
|
|
*/
|
|
int kbase_debugfs_string_validator(char *const buf);
|
|
|
|
/**
|
|
* typedef kbase_debugfs_helper_get_attr_fn - Type of function to get an
|
|
* attribute value from an array
|
|
*
|
|
* @array: Address of an object that can be accessed like an array.
|
|
* @index: An element index. The valid range depends on the use-case.
|
|
*
|
|
* Return: Value of attribute.
|
|
*/
|
|
typedef size_t kbase_debugfs_helper_get_attr_fn(void *array, size_t index);
|
|
|
|
/**
|
|
* kbase_debugfs_helper_get_attr_to_string - Construct a formatted string
|
|
* from elements in an array
|
|
*
|
|
* @buf: Buffer in which to store the formatted output string.
|
|
* @size: The size of the buffer, in bytes.
|
|
* @array: Address of an object that can be accessed like an array.
|
|
* @nelems: Number of elements in the array.
|
|
* @get_attr_fn: Function to be called back for each array element.
|
|
*
|
|
* The given function is called once for each array element to get the
|
|
* value of the attribute to be inspected. The attribute values are
|
|
* written to the buffer as a formatted string of decimal numbers
|
|
* separated by spaces and terminated by a linefeed.
|
|
*
|
|
* Return: Number of characters written excluding the nul terminator.
|
|
*/
|
|
ssize_t kbase_debugfs_helper_get_attr_to_string(char *buf, size_t size, void *array, size_t nelems,
|
|
kbase_debugfs_helper_get_attr_fn *get_attr_fn);
|
|
|
|
/**
|
|
* kbase_debugfs_helper_seq_read - Implements reads from a virtual file for an
|
|
* array
|
|
*
|
|
* @sfile: A virtual file previously opened by calling single_open.
|
|
* @nelems: Number of elements in the array.
|
|
* @get_attr_fn: Function to be called back for each array element.
|
|
*
|
|
* The virtual file must have been opened by calling single_open and passing
|
|
* the address of an object that can be accessed like an array.
|
|
*
|
|
* The given function is called once for each array element to get the
|
|
* value of the attribute to be inspected. The attribute values are
|
|
* written to the buffer as a formatted string of decimal numbers
|
|
* separated by spaces and terminated by a linefeed.
|
|
*
|
|
* Return: 0 if success, negative error code otherwise.
|
|
*/
|
|
int kbase_debugfs_helper_seq_read(struct seq_file *sfile, size_t nelems,
|
|
kbase_debugfs_helper_get_attr_fn *get_attr_fn);
|
|
|
|
/**
|
|
* kbase_debugfs_helper_seq_write - Implements writes to a virtual file for an
|
|
* array
|
|
*
|
|
* @file: A virtual file previously opened by calling single_open.
|
|
* @ubuf: Source address in user space.
|
|
* @count: Number of bytes written to the virtual file.
|
|
* @nelems: Number of elements in the array.
|
|
* @set_attr_fn: Function to be called back for each array element.
|
|
*
|
|
* The virtual file must have been opened by calling single_open and passing
|
|
* the address of an object that can be accessed like an array.
|
|
*
|
|
* The given function is called once for each attribute value found in the
|
|
* data written to the virtual file. For further details, refer to the
|
|
* description of set_attr_from_string.
|
|
*
|
|
* Return: 0 if success, negative error code otherwise.
|
|
*/
|
|
int kbase_debugfs_helper_seq_write(struct file *file, const char __user *ubuf, size_t count,
|
|
size_t nelems, kbase_debugfs_helper_set_attr_fn *set_attr_fn);
|
|
|
|
#endif /*_KBASE_DEBUGFS_HELPER_H_ */
|