diff options
author | J-Alves <joao.alves@arm.com> | 2021-03-09 10:04:39 +0000 |
---|---|---|
committer | J-Alves <joao.alves@arm.com> | 2021-10-12 12:21:23 +0100 |
commit | b4e89a2f216eb579dc3dd4f34b02db19f031fa14 (patch) | |
tree | e0bd780a09dfb6a4fa50a26ab0bf76ceb107e2eb /spm/cactus/cactus_tests | |
parent | bb467d1965e6435b3e14fa53ff3e6f87b7ff1982 (diff) |
feat(cactus): commands for notifications bindings
Added test command to test FFA_NOTIFICATION_BIND and
FFA_NOTIFICATION_UNBIND interfaces.
Both commands allow for the arguments to the call to be propagated in
the request payload. If the call to the interfaces returns with an error
Cactus places it in the response CACTUS_ERROR and adds the respective
FF-A error code.
Signed-off-by: J-Alves <joao.alves@arm.com>
Change-Id: I3fc3a5e559d0c6d6742f5d86973f6e67891ad790
Diffstat (limited to 'spm/cactus/cactus_tests')
-rw-r--r-- | spm/cactus/cactus_tests/cactus_test_notifications.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/spm/cactus/cactus_tests/cactus_test_notifications.c b/spm/cactus/cactus_tests/cactus_test_notifications.c new file mode 100644 index 0000000..dc6c256 --- /dev/null +++ b/spm/cactus/cactus_tests/cactus_test_notifications.c @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2021, Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: BSD-3-Clause + */ + +#include "cactus_message_loop.h" +#include "cactus_test_cmds.h" +#include "cactus_tests.h" +#include <debug.h> +#include <ffa_helpers.h> + +CACTUS_CMD_HANDLER(notifications_bind, CACTUS_NOTIFICATION_BIND_CMD) +{ + ffa_id_t source = ffa_dir_msg_source(*args); + ffa_id_t vm_id = ffa_dir_msg_dest(*args); + ffa_id_t receiver = cactus_notification_get_receiver(*args); + ffa_id_t sender = cactus_notification_get_sender(*args); + ffa_notification_bitmap_t notifications = + cactus_notification_get_notifications(*args); + uint32_t flags = cactus_notification_get_flags(*args); + smc_ret_values ret; + + VERBOSE("Partition %x requested to bind notifications '%llx' to %x\n", + source, notifications, receiver); + + ret = ffa_notification_bind(sender, receiver, flags, notifications); + + if (is_ffa_call_error(ret)) { + return cactus_error_resp(vm_id, source, ffa_error_code(ret)); + } + + return cactus_response(vm_id, source, CACTUS_SUCCESS); +} + +CACTUS_CMD_HANDLER(notifications_unbind, CACTUS_NOTIFICATION_UNBIND_CMD) +{ + ffa_id_t source = ffa_dir_msg_source(*args); + ffa_id_t vm_id = ffa_dir_msg_dest(*args); + ffa_id_t receiver = cactus_notification_get_receiver(*args); + ffa_id_t sender = cactus_notification_get_sender(*args); + ffa_notification_bitmap_t notifications = + cactus_notification_get_notifications(*args); + smc_ret_values ret; + + VERBOSE("Partition %x requested to unbind notifications '%llx' to %x\n", + source, notifications, receiver); + + ret = ffa_notification_unbind(sender, receiver, notifications); + + if (is_ffa_call_error(ret)) { + return cactus_error_resp(vm_id, source, ffa_error_code(ret)); + } + + return cactus_response(vm_id, source, CACTUS_SUCCESS); +} |