#include #include #include static void test_sbi_ecall_version(struct sbiunit_test_case *test) { SBIUNIT_EXPECT_EQ(test, sbi_ecall_version_major(), SBI_ECALL_VERSION_MAJOR); SBIUNIT_EXPECT_EQ(test, sbi_ecall_version_minor(), SBI_ECALL_VERSION_MINOR); } static void test_sbi_ecall_impid(struct sbiunit_test_case *test) { unsigned long old_impid = sbi_ecall_get_impid(); sbi_ecall_set_impid(42); SBIUNIT_EXPECT_EQ(test, sbi_ecall_get_impid(), 42); sbi_ecall_set_impid(old_impid); } static int dummy_handler(unsigned long extid, unsigned long funcid, struct sbi_trap_regs *regs, struct sbi_ecall_return *out) { return 0; } static void test_sbi_ecall_register_find_extension(struct sbiunit_test_case *test) { struct sbi_ecall_extension test_ext = { /* Use experimental extension space for no overlap */ .extid_start = SBI_EXT_EXPERIMENTAL_START, .extid_end = SBI_EXT_EXPERIMENTAL_START, .name = "TestExt", .handle = dummy_handler, }; SBIUNIT_EXPECT_EQ(test, sbi_ecall_register_extension(&test_ext), 0); SBIUNIT_EXPECT_EQ(test, sbi_ecall_find_extension(SBI_EXT_EXPERIMENTAL_START), &test_ext); sbi_ecall_unregister_extension(&test_ext); SBIUNIT_EXPECT_EQ(test, sbi_ecall_find_extension(SBI_EXT_EXPERIMENTAL_START), NULL); } static struct sbiunit_test_case ecall_tests[] = { SBIUNIT_TEST_CASE(test_sbi_ecall_version), SBIUNIT_TEST_CASE(test_sbi_ecall_impid), SBIUNIT_TEST_CASE(test_sbi_ecall_register_find_extension), SBIUNIT_END_CASE, }; SBIUNIT_TEST_SUITE(ecall_test_suite, ecall_tests);