aboutsummaryrefslogtreecommitdiff
path: root/platform/ext/target/arm/musca_s1/services/src/tfm_ioctl_ns_api.c
diff options
context:
space:
mode:
Diffstat (limited to 'platform/ext/target/arm/musca_s1/services/src/tfm_ioctl_ns_api.c')
-rw-r--r--platform/ext/target/arm/musca_s1/services/src/tfm_ioctl_ns_api.c299
1 files changed, 299 insertions, 0 deletions
diff --git a/platform/ext/target/arm/musca_s1/services/src/tfm_ioctl_ns_api.c b/platform/ext/target/arm/musca_s1/services/src/tfm_ioctl_ns_api.c
new file mode 100644
index 0000000000..d834f87007
--- /dev/null
+++ b/platform/ext/target/arm/musca_s1/services/src/tfm_ioctl_ns_api.c
@@ -0,0 +1,299 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#include <stdint.h>
+#include <stdbool.h>
+#include "tfm_platform_api.h"
+#include "tfm_ioctl_api.h"
+
+enum tfm_platform_err_t
+tfm_platform_set_pin_alt_func(uint32_t alt_func, uint64_t pin_mask,
+ uint32_t *result)
+{
+ enum tfm_platform_err_t ret;
+ psa_invec in_vec;
+ psa_outvec out_vec;
+ struct tfm_pin_service_args_t args;
+
+ if (result == NULL) {
+ return TFM_PLATFORM_ERR_INVALID_PARAM;
+ }
+
+ args.type = TFM_PIN_SERVICE_TYPE_SET_ALTFUNC;
+ args.u.set_altfunc.alt_func = alt_func;
+ args.u.set_altfunc.pin_mask = pin_mask;
+
+ in_vec.base = (const void *)&args;
+ in_vec.len = sizeof(args);
+
+ out_vec.base = (void *)result;
+ out_vec.len = sizeof(*result);
+
+ ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_PIN_SERVICE,
+ &in_vec,
+ &out_vec);
+
+ return ret;
+}
+
+enum tfm_platform_err_t
+tfm_platform_set_pin_default_in(uint32_t alt_func, uint32_t pin_value,
+ bool default_in_value, uint32_t *result)
+{
+ enum tfm_platform_err_t ret;
+ psa_invec in_vec;
+ psa_outvec out_vec;
+ struct tfm_pin_service_args_t args;
+
+ if (result == NULL) {
+ return TFM_PLATFORM_ERR_INVALID_PARAM;
+ }
+
+ args.type = TFM_PIN_SERVICE_TYPE_SET_DEFAULT_IN;
+ args.u.set_default_in.alt_func = alt_func;
+ args.u.set_default_in.pin_value = pin_value;
+ args.u.set_default_in.default_in_value = default_in_value;
+
+ in_vec.base = (const void *)&args;
+ in_vec.len = sizeof(args);
+
+ out_vec.base = (void *)result;
+ out_vec.len = sizeof(*result);
+
+ ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_PIN_SERVICE,
+ &in_vec,
+ &out_vec);
+
+ return ret;
+}
+
+enum tfm_platform_err_t
+tfm_platform_set_pin_mode(uint64_t pin_mask, uint32_t pin_mode,
+ uint32_t *result)
+{
+ enum tfm_platform_err_t ret;
+ psa_invec in_vec;
+ psa_outvec out_vec;
+ struct tfm_pin_service_args_t args;
+
+ if (result == NULL) {
+ return TFM_PLATFORM_ERR_INVALID_PARAM;
+ }
+
+ args.type = TFM_PIN_SERVICE_TYPE_SET_PIN_MODE;
+ args.u.set_pin_mode.pin_mask = pin_mask;
+ args.u.set_pin_mode.pin_mode = pin_mode;
+
+ in_vec.base = (const void *)&args;
+ in_vec.len = sizeof(args);
+
+ out_vec.base = (void *)result;
+ out_vec.len = sizeof(*result);
+
+ ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_PIN_SERVICE,
+ &in_vec,
+ &out_vec);
+
+ return ret;
+}
+
+enum tfm_platform_err_t tfm_platform_gpio_init(uint32_t *result)
+{
+ enum tfm_platform_err_t ret;
+ psa_invec in_vec;
+ psa_outvec out_vec;
+ struct tfm_gpio_service_args_t args;
+ struct tfm_gpio_service_out_t out;
+
+ args.type = TFM_GPIO_SERVICE_TYPE_INIT;
+
+ in_vec.base = (const void *)&args;
+ in_vec.len = sizeof(args);
+
+ out_vec.base = (void *)&out;
+ out_vec.len = sizeof(out);
+
+ ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE,
+ &in_vec,
+ &out_vec);
+
+ *result = out.u.result;
+
+ return ret;
+}
+
+enum tfm_platform_err_t
+tfm_platform_gpio_pin_config(uint32_t pin_num, uint32_t direction,
+ uint32_t *result)
+{
+ enum tfm_platform_err_t ret;
+ psa_invec in_vec;
+ psa_outvec out_vec;
+ struct tfm_gpio_service_args_t args;
+ struct tfm_gpio_service_out_t out;
+
+ args.type = TFM_GPIO_SERVICE_TYPE_PIN_CONFIG;
+ args.u.gpio_config.pin_num_or_mask = pin_num;
+ args.u.gpio_config.direction = direction;
+
+ in_vec.base = (const void *)&args;
+ in_vec.len = sizeof(args);
+
+ out_vec.base = (void *)&out;
+ out_vec.len = sizeof(out);
+
+ ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE,
+ &in_vec,
+ &out_vec);
+
+ *result = out.u.result;
+
+ return ret;
+}
+
+enum tfm_platform_err_t
+tfm_platform_gpio_pin_write(uint32_t pin_num, uint32_t value, uint32_t *result)
+{
+ enum tfm_platform_err_t ret;
+ psa_invec in_vec;
+ psa_outvec out_vec;
+ struct tfm_gpio_service_args_t args;
+ struct tfm_gpio_service_out_t out;
+
+ args.type = TFM_GPIO_SERVICE_TYPE_PIN_WRITE;
+ args.u.gpio_write.pin_num_or_mask = pin_num;
+ args.u.gpio_write.value = value;
+
+ in_vec.base = (const void *)&args;
+ in_vec.len = sizeof(args);
+
+ out_vec.base = (void *)&out;
+ out_vec.len = sizeof(out);
+
+ ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE,
+ &in_vec,
+ &out_vec);
+
+ *result = out.u.result;
+
+ return ret;
+}
+
+enum tfm_platform_err_t
+tfm_platform_gpio_pin_read(uint32_t pin_num, uint32_t *data, uint32_t *result)
+{
+ enum tfm_platform_err_t ret;
+ psa_invec in_vec;
+ psa_outvec out_vec;
+ struct tfm_gpio_service_args_t args;
+ struct tfm_gpio_service_out_t out;
+
+ args.type = TFM_GPIO_SERVICE_TYPE_PIN_READ;
+ args.u.gpio_read.pin_num_or_mask = pin_num;
+
+ in_vec.base = (const void *)&args;
+ in_vec.len = sizeof(args);
+
+ out_vec.base = (void *)&out;
+ out_vec.len = sizeof(out);
+
+ ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE,
+ &in_vec,
+ &out_vec);
+
+ *result = out.u.gpio_read_result.result;
+ *data = out.u.gpio_read_result.data;
+
+ return ret;
+}
+
+enum tfm_platform_err_t
+tfm_platform_gpio_port_config(uint32_t pin_mask, uint32_t direction,
+ uint32_t *result)
+{
+ enum tfm_platform_err_t ret;
+ psa_invec in_vec;
+ psa_outvec out_vec;
+ struct tfm_gpio_service_args_t args;
+ struct tfm_gpio_service_out_t out;
+
+ args.type = TFM_GPIO_SERVICE_TYPE_PORT_CONFIG;
+ args.u.gpio_config.pin_num_or_mask = pin_mask;
+ args.u.gpio_config.direction = direction;
+
+ in_vec.base = (const void *)&args;
+ in_vec.len = sizeof(args);
+
+ out_vec.base = (void *)&out;
+ out_vec.len = sizeof(out);
+
+ ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE,
+ &in_vec,
+ &out_vec);
+
+ *result = out.u.result;
+
+ return ret;
+}
+
+enum tfm_platform_err_t
+tfm_platform_gpio_port_write(uint32_t pin_mask, uint32_t value,
+ uint32_t *result)
+{
+ enum tfm_platform_err_t ret;
+ psa_invec in_vec;
+ psa_outvec out_vec;
+ struct tfm_gpio_service_args_t args;
+ struct tfm_gpio_service_out_t out;
+
+ args.type = TFM_GPIO_SERVICE_TYPE_PORT_WRITE;
+ args.u.gpio_write.pin_num_or_mask = pin_mask;
+ args.u.gpio_write.value = value;
+
+ in_vec.base = (const void *)&args;
+ in_vec.len = sizeof(args);
+
+ out_vec.base = (void *)&out;
+ out_vec.len = sizeof(out);
+
+ ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE,
+ &in_vec,
+ &out_vec);
+
+ *result = out.u.result;
+
+ return ret;
+
+}
+
+enum tfm_platform_err_t
+tfm_platform_gpio_port_read(uint32_t pin_mask, uint32_t *data, uint32_t *result)
+{
+ enum tfm_platform_err_t ret;
+ psa_invec in_vec;
+ psa_outvec out_vec;
+ struct tfm_gpio_service_args_t args;
+ struct tfm_gpio_service_out_t out;
+
+ args.type = TFM_GPIO_SERVICE_TYPE_PORT_READ;
+ args.u.gpio_read.pin_num_or_mask = pin_mask;
+
+ in_vec.base = (const void *)&args;
+ in_vec.len = sizeof(args);
+
+ out_vec.base = (void *)&out;
+ out_vec.len = sizeof(out);
+
+ ret = tfm_platform_ioctl(TFM_PLATFORM_IOCTL_GPIO_SERVICE,
+ &in_vec,
+ &out_vec);
+
+ *result = out.u.gpio_read_result.result;
+ *data = out.u.gpio_read_result.data;
+
+ return ret;
+}