aboutsummaryrefslogtreecommitdiff
path: root/tftf/framework/include/tftf.h
diff options
context:
space:
mode:
Diffstat (limited to 'tftf/framework/include/tftf.h')
-rw-r--r--tftf/framework/include/tftf.h169
1 files changed, 169 insertions, 0 deletions
diff --git a/tftf/framework/include/tftf.h b/tftf/framework/include/tftf.h
new file mode 100644
index 000000000..8231e284a
--- /dev/null
+++ b/tftf/framework/include/tftf.h
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2018, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef __TFTF_H__
+#define __TFTF_H__
+
+#ifndef __ASSEMBLY__
+#include <status.h>
+#include <stddef.h>
+#include <tftf_lib.h>
+
+#define TFTF_WELCOME_STR "Booting trusted firmware test framework"
+
+/* Maximum size of test output (in bytes) */
+#define TESTCASE_OUTPUT_MAX_SIZE 512
+
+/* Size of build message used to differentiate different TFTF binaries */
+#define BUILD_MESSAGE_SIZE 0x20
+
+extern const char build_message[];
+
+typedef test_result_t (*test_function_t)(void);
+
+typedef struct {
+ /* Test result (success, crashed, failed, ...). */
+ test_result_t result;
+ unsigned long long duration;
+ /*
+ * Offset of test output string from TEST_NVM_RESULT_BUFFER_OFFSET.
+ * Only relevant if test has an output, i.e. if \a output_size is not
+ * zero.
+ */
+ unsigned output_offset;
+ /* Size of test output string, excluding final \0. */
+ unsigned output_size;
+} TESTCASE_RESULT;
+
+typedef struct {
+ unsigned index;
+ const char *name;
+ const char *description;
+ test_function_t test;
+} test_case_t;
+
+typedef struct {
+ const char *name;
+ const char *description;
+ const test_case_t *testcases;
+} test_suite_t;
+
+/*
+ * Reference to a specific test.
+ */
+typedef struct {
+ unsigned int testsuite_idx;
+ unsigned int testcase_idx;
+} test_ref_t;
+
+/*
+ * The progress in the execution of a test.
+ * This is used to implement the following state machine.
+ *
+ * +-> TEST_READY (initial state of the test) <--------------+
+ * | | |
+ * | | Test framework prepares the test environment. |
+ * | | |
+ * | v |
+ * | TEST_IN_PROGRESS |
+ * | | |
+ * | | Hand over to the test function. |
+ * | | If the test wants to reboot the platform ---> TEST_REBOOTING |
+ * | | Test function returns into framework. | |
+ * | | | Reboot |
+ * | | | |
+ * | | +---------+
+ * | v
+ * | TEST_COMPLETE
+ * | |
+ * | | Do some framework management.
+ * | | Move to next test.
+ * +--------+
+ */
+typedef enum {
+ TEST_PROGRESS_MIN = 0,
+ TEST_READY = TEST_PROGRESS_MIN,
+ TEST_IN_PROGRESS,
+ TEST_COMPLETE,
+ TEST_REBOOTING,
+
+ TEST_PROGRESS_MAX,
+} test_progress_t;
+
+#define TEST_PROGRESS_IS_VALID(_progress) \
+ ((_progress >= TEST_PROGRESS_MIN) && (_progress < TEST_PROGRESS_MAX))
+
+/*
+ * The definition of this global variable is generated by the script
+ * 'tftf_generate_test_list' during the build process
+ */
+extern const test_suite_t testsuites[];
+
+extern TESTCASE_RESULT testcase_results[];
+
+/* Set/Get the test to run in NVM */
+STATUS tftf_set_test_to_run(const test_ref_t test_to_run);
+STATUS tftf_get_test_to_run(test_ref_t *test_to_run);
+/* Set/Get the progress of the current test in NVM */
+STATUS tftf_set_test_progress(test_progress_t test_progress);
+STATUS tftf_get_test_progress(test_progress_t *test_progress);
+
+/**
+** Save test result into NVM.
+*/
+STATUS tftf_testcase_set_result(const test_case_t *testcase,
+ test_result_t result,
+ unsigned long long duration);
+/**
+** Get a testcase result from NVM.
+**
+** @param[in] testcase The targeted testcase.
+** @param[out] result Testcase result. Only \a result.result and
+** \a result.duration are of interest for the caller and the 2 other fields
+** should be ignored (they correspond to a location in NVM).
+** @param[out] test_output Buffer to store the test output, if any.
+** \a test_output must be big enough to hold the whole test output.
+** Test output will be \a TESTCASE_OUTPUT_MAX_SIZE bytes maximum.
+*/
+STATUS tftf_testcase_get_result(const test_case_t *testcase, TESTCASE_RESULT *result, char *test_output);
+
+void tftf_report_generate(void);
+
+/*
+ * Exit the TFTF.
+ * This function can be used when a fatal error is encountered or as part of the
+ * normal termination process. It does the necessary cleanups then put the
+ * core in a low-power state.
+ */
+void __dead2 tftf_exit(void);
+
+void tftf_arch_setup(void);
+
+/*
+ * This function detects the power state format used by PSCI which can
+ * be either extended or original format. For the Original format,
+ * the State-ID can either be NULL or can be using the recommended encoding.
+ * This function needs to be invoked once during cold boot prior to the
+ * invocation of any PSCI power state helper functions.
+ */
+void tftf_detect_psci_pstate_format(void);
+
+/*
+ * Run the next test on the calling CPU.
+ * Once the test is complete, if the calling CPU is the last one to exit the
+ * test then do the necessary bookkeeping, report the overall test result and
+ * move on to the next test. Otherwise, shut down the calling CPU.
+ *
+ * This function never returns.
+ */
+void __dead2 run_tests(void);
+
+/* Entry point for a CPU that has just been powered up */
+void tftf_hotplug_entry(void);
+
+#endif /*__ASSEMBLY__*/
+
+#endif