| /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
| /* |
| * |
| * (C) COPYRIGHT 2014, 2017, 2020-2021 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 _KERNEL_UTF_RESULTSET_H_ |
| #define _KERNEL_UTF_RESULTSET_H_ |
| |
| /* kutf_resultset.h |
| * Functions and structures for handling test results and result sets. |
| * |
| * This section of the kernel UTF contains structures and functions used for the |
| * management of Results and Result Sets. |
| */ |
| |
| /** |
| * enum kutf_result_status - Status values for a single Test error. |
| * @KUTF_RESULT_BENCHMARK: Result is a meta-result containing benchmark |
| * results. |
| * @KUTF_RESULT_SKIP: The test was skipped. |
| * @KUTF_RESULT_UNKNOWN: The test has an unknown result. |
| * @KUTF_RESULT_PASS: The test result passed. |
| * @KUTF_RESULT_DEBUG: The test result passed, but raised a debug |
| * message. |
| * @KUTF_RESULT_INFO: The test result passed, but raised |
| * an informative message. |
| * @KUTF_RESULT_WARN: The test result passed, but raised a warning |
| * message. |
| * @KUTF_RESULT_FAIL: The test result failed with a non-fatal error. |
| * @KUTF_RESULT_FATAL: The test result failed with a fatal error. |
| * @KUTF_RESULT_ABORT: The test result failed due to a non-UTF |
| * assertion failure. |
| * @KUTF_RESULT_USERDATA: User data is ready to be read, |
| * this is not seen outside the kernel |
| * @KUTF_RESULT_USERDATA_WAIT: Waiting for user data to be sent, |
| * this is not seen outside the kernel |
| * @KUTF_RESULT_TEST_FINISHED: The test has finished, no more results will |
| * be produced. This is not seen outside kutf |
| */ |
| enum kutf_result_status { |
| KUTF_RESULT_BENCHMARK = -3, |
| KUTF_RESULT_SKIP = -2, |
| KUTF_RESULT_UNKNOWN = -1, |
| |
| KUTF_RESULT_PASS = 0, |
| KUTF_RESULT_DEBUG = 1, |
| KUTF_RESULT_INFO = 2, |
| KUTF_RESULT_WARN = 3, |
| KUTF_RESULT_FAIL = 4, |
| KUTF_RESULT_FATAL = 5, |
| KUTF_RESULT_ABORT = 6, |
| |
| KUTF_RESULT_USERDATA = 7, |
| KUTF_RESULT_USERDATA_WAIT = 8, |
| KUTF_RESULT_TEST_FINISHED = 9 |
| }; |
| |
| /* The maximum size of a kutf_result_status result when |
| * converted to a string |
| */ |
| #define KUTF_ERROR_MAX_NAME_SIZE 21 |
| |
| #ifdef __KERNEL__ |
| |
| #include <kutf/kutf_mem.h> |
| #include <linux/wait.h> |
| |
| struct kutf_context; |
| |
| /** |
| * struct kutf_result - Represents a single test result. |
| * @node: Next result in the list of results. |
| * @status: The status summary (pass / warn / fail / etc). |
| * @message: A more verbose status message. |
| */ |
| struct kutf_result { |
| struct list_head node; |
| enum kutf_result_status status; |
| const char *message; |
| }; |
| |
| /** |
| * KUTF_RESULT_SET_WAITING_FOR_INPUT - Test is waiting for user data |
| * |
| * This flag is set within a struct kutf_result_set whenever the test is blocked |
| * waiting for user data. Attempts to dequeue results when this flag is set |
| * will cause a dummy %KUTF_RESULT_USERDATA_WAIT result to be produced. This |
| * is used to output a warning message and end of file. |
| */ |
| #define KUTF_RESULT_SET_WAITING_FOR_INPUT 1 |
| |
| /** |
| * struct kutf_result_set - Represents a set of results. |
| * @results: List head of a struct kutf_result list for storing the results |
| * @waitq: Wait queue signalled whenever new results are added. |
| * @flags: Flags see %KUTF_RESULT_SET_WAITING_FOR_INPUT |
| */ |
| struct kutf_result_set { |
| struct list_head results; |
| wait_queue_head_t waitq; |
| int flags; |
| }; |
| |
| /** |
| * kutf_create_result_set() - Create a new result set |
| * to which results can be added. |
| * |
| * Return: The created result set. |
| */ |
| struct kutf_result_set *kutf_create_result_set(void); |
| |
| /** |
| * kutf_add_result() - Add a result to the end of an existing result set. |
| * |
| * @context: The kutf context |
| * @status: The result status to add. |
| * @message: The result message to add. |
| * |
| * Return: 0 if the result is successfully added. -ENOMEM if allocation fails. |
| */ |
| int kutf_add_result(struct kutf_context *context, |
| enum kutf_result_status status, const char *message); |
| |
| /** |
| * kutf_remove_result() - Remove a result from the head of a result set. |
| * @set: The result set. |
| * |
| * This function will block until there is a result to read. The wait is |
| * interruptible, so this function will return with an ERR_PTR if interrupted. |
| * |
| * Return: result or ERR_PTR if interrupted |
| */ |
| struct kutf_result *kutf_remove_result( |
| struct kutf_result_set *set); |
| |
| /** |
| * kutf_destroy_result_set() - Free a previously created result set. |
| * |
| * @results: The result set whose resources to free. |
| */ |
| void kutf_destroy_result_set(struct kutf_result_set *results); |
| |
| /** |
| * kutf_set_waiting_for_input() - The test is waiting for userdata |
| * |
| * @set: The result set to update |
| * |
| * Causes the result set to always have results and return a fake |
| * %KUTF_RESULT_USERDATA_WAIT result. |
| */ |
| void kutf_set_waiting_for_input(struct kutf_result_set *set); |
| |
| /** |
| * kutf_clear_waiting_for_input() - The test is no longer waiting for userdata |
| * |
| * @set: The result set to update |
| * |
| * Cancels the effect of kutf_set_waiting_for_input() |
| */ |
| void kutf_clear_waiting_for_input(struct kutf_result_set *set); |
| |
| #endif /* __KERNEL__ */ |
| |
| #endif /* _KERNEL_UTF_RESULTSET_H_ */ |