blob: 1d22335e5dce49efd440ef133c515657c58cc8be [file] [log] [blame]
mardyk01f5b46352023-10-24 16:23:23 -05001/*
mardyk017b51dbe2024-01-17 15:25:36 -06002 * Copyright (c) 2023-2024, Arm Limited. All rights reserved.
mardyk01f5b46352023-10-24 16:23:23 -05003 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
mardyk017b51dbe2024-01-17 15:25:36 -06007#include <fuzz_names.h>
mardyk01f5b46352023-10-24 16:23:23 -05008#include <sdei_fuzz_helper.h>
9
mardyk017b51dbe2024-01-17 15:25:36 -060010/*
11 * SDEI function that has no arguments
12 */
mardyk01f5b46352023-10-24 16:23:23 -050013void tftf_test_sdei_noarg(int64_t (*sdei_func)(void), char *funcstr)
14{
15 int64_t ret = (*sdei_func)();
16
17 if (ret < 0) {
18 tftf_testcase_printf("%s failed: 0x%llx\n", funcstr, ret);
19 }
20}
21
mardyk017b51dbe2024-01-17 15:25:36 -060022/*
23 * SDEI function that has single argument
24 */
mardyk01f5b46352023-10-24 16:23:23 -050025void tftf_test_sdei_singlearg(int64_t (*sdei_func)(uint64_t), char *funcstr)
26{
27 int64_t ret = (*sdei_func)(0);
28
29 if (ret < 0) {
30 tftf_testcase_printf("%s failed: 0x%llx\n", funcstr, ret);
31 }
32}
33
mardyk017b51dbe2024-01-17 15:25:36 -060034/*
35 * SDEI function called from fuzzer
36 */
37void run_sdei_fuzz(int funcid)
mardyk01f5b46352023-10-24 16:23:23 -050038{
mardyk017b51dbe2024-01-17 15:25:36 -060039 if (funcid == sdei_version_funcid) {
mardyk01f5b46352023-10-24 16:23:23 -050040 long long ret = sdei_version();
41
42 if (ret != MAKE_SDEI_VERSION(1, 0, 0)) {
43 tftf_testcase_printf("Unexpected SDEI version: 0x%llx\n",
44 ret);
45 }
mardyk017b51dbe2024-01-17 15:25:36 -060046 } else if (funcid == sdei_pe_unmask_funcid) {
47 tftf_test_sdei_noarg(sdei_pe_unmask, "sdei_pe_unmuask");
48 } else if (funcid == sdei_pe_mask_funcid) {
mardyk01f5b46352023-10-24 16:23:23 -050049 tftf_test_sdei_noarg(sdei_pe_mask, "sdei_pe_mask");
mardyk017b51dbe2024-01-17 15:25:36 -060050 } else if (funcid == sdei_event_status_funcid) {
mardyk01f5b46352023-10-24 16:23:23 -050051 tftf_test_sdei_singlearg((int64_t (*)(uint64_t))sdei_event_status,
52 "sdei_event_status");
mardyk017b51dbe2024-01-17 15:25:36 -060053 } else if (funcid == sdei_event_signal_funcid) {
mardyk01f5b46352023-10-24 16:23:23 -050054 tftf_test_sdei_singlearg(sdei_event_signal, "sdei_event_signal");
mardyk017b51dbe2024-01-17 15:25:36 -060055 } else if (funcid == sdei_private_reset_funcid) {
mardyk01f5b46352023-10-24 16:23:23 -050056 tftf_test_sdei_noarg(sdei_private_reset, "sdei_private_reset");
mardyk017b51dbe2024-01-17 15:25:36 -060057 } else if (funcid == sdei_shared_reset_funcid) {
mardyk01f5b46352023-10-24 16:23:23 -050058 tftf_test_sdei_noarg(sdei_shared_reset, "sdei_shared_reset");
59 }
60}