diff options
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.h | 250 |
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__ */ |