aboutsummaryrefslogtreecommitdiff
path: root/platform/ext/target/arm/musca_s1/services/include/tfm_ioctl_api.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/ext/target/arm/musca_s1/services/include/tfm_ioctl_api.h')
-rw-r--r--platform/ext/target/arm/musca_s1/services/include/tfm_ioctl_api.h250
1 files changed, 250 insertions, 0 deletions
diff --git a/platform/ext/target/arm/musca_s1/services/include/tfm_ioctl_api.h b/platform/ext/target/arm/musca_s1/services/include/tfm_ioctl_api.h
new file mode 100644
index 0000000000..49feb4210e
--- /dev/null
+++ b/platform/ext/target/arm/musca_s1/services/include/tfm_ioctl_api.h
@@ -0,0 +1,250 @@
+/*
+ * Copyright (c) 2019-2020, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#ifndef __TFM_IOCTL_API__
+#define __TFM_IOCTL_API__
+
+#include <limits.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include "tfm_platform_api.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+enum tfm_platform_ioctl_request_types_t {
+ TFM_PLATFORM_IOCTL_PIN_SERVICE,
+ TFM_PLATFORM_IOCTL_GPIO_SERVICE,
+};
+
+/*!
+ * \enum tfm_gpio_service_type_t
+ *
+ * \brief GPIO service types (supported types may vary based on the platform)
+ */
+enum tfm_gpio_service_type_t {
+ TFM_GPIO_SERVICE_TYPE_INIT = 0, /*!< Init */
+ TFM_GPIO_SERVICE_TYPE_PIN_CONFIG, /*!< Pin config */
+ TFM_GPIO_SERVICE_TYPE_PIN_WRITE, /*!< Pin write */
+ TFM_GPIO_SERVICE_TYPE_PIN_READ, /*!< Pin read */
+ TFM_GPIO_SERVICE_TYPE_PORT_CONFIG, /*!< Port config */
+ TFM_GPIO_SERVICE_TYPE_PORT_WRITE, /*!< Port write */
+ TFM_GPIO_SERVICE_TYPE_PORT_READ, /*!< Port read */
+ TFM_GPIO_SERVICE_TYPE_MAX = INT_MAX /*!< Max to force enum max size */
+};
+
+/*!
+ * \struct tfm_gpio_service_args_t
+ *
+ * \brief Argument list for each platform GPIO service
+ */
+struct tfm_gpio_service_args_t {
+ enum tfm_gpio_service_type_t type;
+ union {
+ struct gpio_config_args { /*!< TFM_GPIO_SERVICE_TYPE_PIN_CONFIG ||
+ TFM_GPIO_SERVICE_TYPE_PORT_CONFIG */
+ uint32_t pin_num_or_mask;
+ uint32_t direction;
+ } gpio_config;
+ struct gpio_write_args { /*!< TFM_GPIO_SERVICE_TYPE_PIN_WRITE ||
+ TFM_GPIO_SERVICE_TYPE_PORT_WRITE */
+ uint32_t pin_num_or_mask;
+ uint32_t value;
+ } gpio_write;
+ struct gpio_read_args { /*!< TFM_GPIO_SERVICE_TYPE_PIN_READ ||
+ TFM_GPIO_SERVICE_TYPE_PORT_READ */
+ uint32_t pin_num_or_mask;
+ } gpio_read;
+ } u;
+};
+
+/*!
+ * \struct tfm_gpio_service_out_t
+ *
+ * \brief Output list for each GPIO platform service
+ */
+struct tfm_gpio_service_out_t {
+ union {
+ uint32_t result; /*!< Generic result */
+ struct gpio_read_result { /*!< TFM_GPIO_SERVICE_TYPE_PIN_READ ||
+ TFM_GPIO_SERVICE_TYPE_PORT_READ */
+ uint32_t result;
+ uint32_t data;
+ } gpio_read_result;
+ } u;
+};
+
+/*!
+ * \enum tfm_pin_service_type_t
+ *
+ * \brief Pin service types
+ */
+enum tfm_pin_service_type_t {
+ TFM_PIN_SERVICE_TYPE_SET_ALTFUNC = 0, /*!< Set alternate function type */
+ TFM_PIN_SERVICE_TYPE_SET_DEFAULT_IN, /*!< Set default in function type */
+ TFM_PIN_SERVICE_TYPE_SET_PIN_MODE, /*!< Set pin mode function type */
+ TFM_PIN_SERVICE_TYPE_MAX = INT_MAX /*!< Max to force enum max size */
+};
+
+/*!
+ * \struct tfm_pin_service_args_t
+ *
+ * \brief Argument list for each platform pin service
+ */
+struct tfm_pin_service_args_t {
+ enum tfm_pin_service_type_t type;
+ union {
+ struct set_altfunc { /*!< TFM_PIN_SERVICE_TYPE_SET_ALTFUNC */
+ uint32_t alt_func;
+ uint64_t pin_mask;
+ } set_altfunc;
+ struct set_default_in { /*!< TFM_PIN_SERVICE_TYPE_SET_DEFAULT_IN */
+ uint32_t alt_func;
+ uint32_t pin_value;
+ bool default_in_value;
+ } set_default_in;
+ struct set_pin_mode { /*!< TFM_PIN_SERVICE_TYPE_SET_PIN_MODE */
+ uint64_t pin_mask;
+ uint32_t pin_mode;
+ } set_pin_mode;
+ } u;
+};
+
+/*!
+ * \brief Sets pin alternate function for the given pins
+ *
+ * \param[in] alt_func Alternate function to set (allowed values vary
+ * based on the platform)
+ * \param[in] pin_mask Pin mask of the selected pins
+ * \param[out] result Return error value
+ *
+ * \return Returns values as specified by the \ref tfm_platform_err_t
+ */
+enum tfm_platform_err_t
+tfm_platform_set_pin_alt_func(uint32_t alt_func, uint64_t pin_mask,
+ uint32_t *result);
+
+/*!
+ * \brief Sets default in value to use when the alternate function is not
+ * selected for the pin
+ *
+ * \param[in] alt_func Alternate function to use (allowed values vary
+ * based on the platform)
+ * \param[in] pin_value Pin value to use
+ * \param[in] default_in_value Default in value to set
+ * \param[out] result Return error value
+ *
+ * \return Returns values as specified by the \ref tfm_platform_err_t
+ */
+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);
+
+/*!
+ * \brief Sets pin mode for the selected pins
+ *
+ * \param[in] pin_mask Pin mask of the selected pins
+ * \param[in] pin_mode Pin mode to set for the selected pins
+ * \param[out] result Return error value
+ *
+ * \return Returns values as specified by the \ref tfm_platform_err_t
+ */
+enum tfm_platform_err_t
+tfm_platform_set_pin_mode(uint64_t pin_mask, uint32_t pin_mode,
+ uint32_t *result);
+
+/*!
+ * \brief Initializes GPIO module
+ *
+ * \param[out] result Return error value
+ *
+ * \return Returns values as specified by the \ref tfm_platform_err_t
+ */
+enum tfm_platform_err_t tfm_platform_gpio_init(uint32_t *result);
+
+/*!
+ * \brief Configures a GPIO pin as input or output
+ *
+ * \param[in] pin_num Pin number of the selected pin
+ * \param[in] direction Direction of the pin: 0 for input, 1 for output
+ * \param[out] result Return error value
+ *
+ * \return Returns values as specified by the \ref tfm_platform_err_t
+ */
+enum tfm_platform_err_t
+tfm_platform_gpio_pin_config(uint32_t pin_num, uint32_t direction,
+ uint32_t *result);
+
+/*!
+ * \brief Sets state of a selected GPIO pin
+ *
+ * \param[in] pin_num Pin number of the selected pin
+ * \param[in] value Value to set for the pin
+ * \param[out] result Return error value
+ *
+ * \return Returns values as specified by the \ref tfm_platform_err_t
+ */
+enum tfm_platform_err_t
+tfm_platform_gpio_pin_write(uint32_t pin_num, uint32_t value, uint32_t *result);
+
+/*!
+ * \brief Reads state of a selected GPIO pin
+ *
+ * \param[in] pin_num Pin number of the selected pin
+ * \param[in,out] data Bit value read from the IO pin
+ * \param[out] result Return error value
+ *
+ * \return Returns values as specified by the \ref tfm_platform_err_t
+ */
+enum tfm_platform_err_t
+tfm_platform_gpio_pin_read(uint32_t pin_num, uint32_t *data, uint32_t *result);
+
+/*!
+ * \brief Configures GPIO pins as input or output
+ *
+ * \param[in] pin_mask Pin mask of the selected pins
+ * \param[in] direction Direction of the pin: 0 for input, 1 for output
+ * \param[out] result Return error value
+ *
+ * \return Returns values as specified by the \ref tfm_platform_err_t
+ */
+enum tfm_platform_err_t
+tfm_platform_gpio_port_config(uint32_t pin_mask, uint32_t direction,
+ uint32_t *result);
+
+/*!
+ * \brief Sets state of a selected GPIO pins
+ *
+ * \param[in] pin_mask Pin mask of the selected pins
+ * \param[in] value Value mask to set for the pins
+ * \param[out] result Return error value
+ *
+ * \return Returns values as specified by the \ref tfm_platform_err_t
+ */
+enum tfm_platform_err_t
+tfm_platform_gpio_port_write(uint32_t pin_mask, uint32_t value,
+ uint32_t *result);
+
+/*!
+ * \brief Reads state of a selected GPIO pins
+ *
+ * \param[in] pin_mask Pin mask of the selected pins
+ * \param[in,out] data Bit value mask read from the IO pins
+ * \param[out] result Return error value
+ *
+ * \return Returns values as specified by the \ref tfm_platform_err_t
+ */
+enum tfm_platform_err_t
+tfm_platform_gpio_port_read(uint32_t pin_mask, uint32_t *data,
+ uint32_t *result);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TFM_IOCTL_API__ */