LCOV - code coverage report
Current view: top level - zephyr/drivers/misc/timeaware_gpio - timeaware_gpio.h Hit Total Coverage
Test: new.info Lines: 7 8 87.5 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /*
       2             :  * Copyright (c) 2023 Intel Corporation.
       3             :  *
       4             :  * SPDX-License-Identifier: Apache-2.0
       5             :  */
       6             : 
       7             : /**
       8             :  * @file
       9             :  * @brief Public APIs for Time-aware GPIO drivers
      10             :  */
      11             : #ifndef ZEPHYR_DRIVERS_MISC_TIMEAWARE_GPIO_TIMEAWARE_GPIO
      12             : #define ZEPHYR_DRIVERS_MISC_TIMEAWARE_GPIO_TIMEAWARE_GPIO
      13             : 
      14             : /**
      15             :  * @brief Time-aware GPIO Interface
      16             :  * @defgroup tgpio_interface Time-aware GPIO Interface
      17             :  * @since 3.5
      18             :  * @version 0.1.0
      19             :  * @ingroup io_interfaces
      20             :  * @{
      21             :  */
      22             : 
      23             : #include <zephyr/sys/__assert.h>
      24             : #include <zephyr/sys/slist.h>
      25             : 
      26             : #include <zephyr/types.h>
      27             : #include <stddef.h>
      28             : #include <zephyr/device.h>
      29             : #include <zephyr/internal/syscall_handler.h>
      30             : 
      31             : #ifdef __cplusplus
      32             : extern "C" {
      33             : #endif
      34             : 
      35             : /**
      36             :  * @brief Event polarity
      37             :  */
      38           0 : enum tgpio_pin_polarity {
      39             :         TGPIO_RISING_EDGE = 0,
      40             :         TGPIO_FALLING_EDGE,
      41             :         TGPIO_TOGGLE_EDGE,
      42             : };
      43             : 
      44             : /**
      45             :  * @cond INTERNAL_HIDDEN
      46             :  *
      47             :  * TGPIO driver API definition and system call entry points
      48             :  *
      49             :  * (Internal use only.)
      50             :  */
      51             : 
      52             : __subsystem struct tgpio_driver_api {
      53             :         int (*pin_disable)(const struct device *dev, uint32_t pin);
      54             :         int (*get_time)(const struct device *dev, uint64_t *current_time);
      55             :         int (*cyc_per_sec)(const struct device *dev, uint32_t *cycles);
      56             :         int (*set_perout)(const struct device *dev, uint32_t pin, uint64_t start_time,
      57             :                           uint64_t repeat_interval, bool periodic_enable);
      58             :         int (*config_ext_ts)(const struct device *dev, uint32_t pin, uint32_t event_polarity);
      59             :         int (*read_ts_ec)(const struct device *dev, uint32_t pin, uint64_t *timestamp,
      60             :                           uint64_t *event_count);
      61             : };
      62             : 
      63             : /**
      64             :  * @endcond
      65             :  */
      66             : 
      67             : /**
      68             :  * @brief Get time from ART timer
      69             :  *
      70             :  * @param dev TGPIO device
      71             :  * @param current_time Pointer to store timer value in cycles
      72             :  *
      73             :  * @return 0 if successful
      74             :  * @return negative errno code on failure.
      75             :  */
      76           1 : __syscall int tgpio_port_get_time(const struct device *dev, uint64_t *current_time);
      77             : 
      78             : static inline int z_impl_tgpio_port_get_time(const struct device *dev, uint64_t *current_time)
      79             : {
      80             :         const struct tgpio_driver_api *api = (const struct tgpio_driver_api *)dev->api;
      81             : 
      82             :         return api->get_time(dev, current_time);
      83             : }
      84             : 
      85             : /**
      86             :  * @brief Get current running rate
      87             :  *
      88             :  * @param dev TGPIO device
      89             :  * @param cycles pointer to store current running frequency
      90             :  *
      91             :  * @return 0 if successful, negative errno code on failure.
      92             :  */
      93           1 : __syscall int tgpio_port_get_cycles_per_second(const struct device *dev, uint32_t *cycles);
      94             : 
      95             : static inline int z_impl_tgpio_port_get_cycles_per_second(const struct device *dev,
      96             :                                                            uint32_t *cycles)
      97             : {
      98             :         const struct tgpio_driver_api *api = (const struct tgpio_driver_api *)dev->api;
      99             : 
     100             :         return api->cyc_per_sec(dev, cycles);
     101             : }
     102             : 
     103             : /**
     104             :  * @brief Disable operation on pin
     105             :  *
     106             :  * @param dev TGPIO device
     107             :  * @param pin TGPIO pin
     108             :  *
     109             :  * @return 0 if successful, negative errno code on failure.
     110             :  */
     111           1 : __syscall int tgpio_pin_disable(const struct device *dev, uint32_t pin);
     112             : 
     113             : static inline int z_impl_tgpio_pin_disable(const struct device *dev, uint32_t pin)
     114             : {
     115             :         const struct tgpio_driver_api *api = (const struct tgpio_driver_api *)dev->api;
     116             : 
     117             :         return api->pin_disable(dev, pin);
     118             : }
     119             : 
     120             : /**
     121             :  * @brief Enable/Continue operation on pin
     122             :  *
     123             :  * @param dev TGPIO device
     124             :  * @param pin TGPIO pin
     125             :  * @param event_polarity TGPIO pin event polarity
     126             :  *
     127             :  * @return 0 if successful, negative errno code on failure.
     128             :  */
     129           1 : __syscall int tgpio_pin_config_ext_timestamp(const struct device *dev, uint32_t pin,
     130             :                                               uint32_t event_polarity);
     131             : 
     132             : static inline int z_impl_tgpio_pin_config_ext_timestamp(const struct device *dev, uint32_t pin,
     133             :                                                          uint32_t event_polarity)
     134             : {
     135             :         const struct tgpio_driver_api *api = (const struct tgpio_driver_api *)dev->api;
     136             : 
     137             :         return api->config_ext_ts(dev, pin, event_polarity);
     138             : }
     139             : 
     140             : /**
     141             :  * @brief Enable periodic pulse generation on a pin
     142             :  *
     143             :  * @param dev TGPIO device
     144             :  * @param pin TGPIO pin
     145             :  * @param start_time start_time of first pulse in hw cycles
     146             :  * @param repeat_interval repeat interval between two pulses in hw cycles
     147             :  * @param periodic_enable enables periodic mode if 'true' is passed.
     148             :  *
     149             :  * @return 0 if successful, negative errno code on failure.
     150             :  */
     151           1 : __syscall int tgpio_pin_periodic_output(const struct device *dev, uint32_t pin,
     152             :                                          uint64_t start_time, uint64_t repeat_interval,
     153             :                                          bool periodic_enable);
     154             : 
     155             : static inline int z_impl_tgpio_pin_periodic_output(const struct device *dev, uint32_t pin,
     156             :                                                     uint64_t start_time, uint64_t repeat_interval,
     157             :                                                     bool periodic_enable)
     158             : {
     159             :         const struct tgpio_driver_api *api = (const struct tgpio_driver_api *)dev->api;
     160             : 
     161             :         return api->set_perout(dev, pin, start_time, repeat_interval, periodic_enable);
     162             : }
     163             : 
     164             : /**
     165             :  * @brief Read timestamp and event counter from TGPIO
     166             :  *
     167             :  * @param dev TGPIO device
     168             :  * @param pin TGPIO pin
     169             :  * @param timestamp timestamp of the last pulse received
     170             :  * @param event_count number of pulses received since the pin is enabled
     171             :  *
     172             :  * @return 0 if successful, negative errno code on failure.
     173             :  */
     174           1 : __syscall int tgpio_pin_read_ts_ec(const struct device *dev, uint32_t pin, uint64_t *timestamp,
     175             :                                     uint64_t *event_count);
     176             : 
     177             : static inline int z_impl_tgpio_pin_read_ts_ec(const struct device *dev, uint32_t pin,
     178             :                                                uint64_t *timestamp, uint64_t *event_count)
     179             : {
     180             :         const struct tgpio_driver_api *api = (const struct tgpio_driver_api *)dev->api;
     181             : 
     182             :         return api->read_ts_ec(dev, pin, timestamp, event_count);
     183             : }
     184             : 
     185             : /**
     186             :  * @}
     187             :  */
     188             : 
     189             : #ifdef __cplusplus
     190             : }
     191             : #endif
     192             : 
     193             : #include <zephyr/syscalls/timeaware_gpio.h>
     194             : 
     195             : #endif /* ZEPHYR_DRIVERS_MISC_TIMEAWARE_GPIO_TIMEAWARE_GPIO */

Generated by: LCOV version 1.14