LCOV - code coverage report
Current view: top level - zephyr/drivers/misc/timeaware_gpio - timeaware_gpio.h Coverage Total Hit
Test: new.info Lines: 87.5 % 8 7
Test Date: 2025-09-05 16:43:28

            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 2.0-1