Line data Source code
1 0 : /* 2 : * Copyright (c) 2018 Intel Corporation. 3 : * 4 : * SPDX-License-Identifier: Apache-2.0 5 : */ 6 : 7 : #ifndef ZEPHYR_INCLUDE_DRIVERS_PTP_CLOCK_H_ 8 : #define ZEPHYR_INCLUDE_DRIVERS_PTP_CLOCK_H_ 9 : 10 : #include <zephyr/kernel.h> 11 : #include <stdint.h> 12 : #include <zephyr/device.h> 13 : #include <zephyr/sys/util.h> 14 : #include <zephyr/net/ptp_time.h> 15 : 16 : #ifdef __cplusplus 17 : extern "C" { 18 : #endif 19 : 20 : /* Name of the PTP clock driver */ 21 : #if !defined(PTP_CLOCK_NAME) 22 0 : #define PTP_CLOCK_NAME "PTP_CLOCK" 23 : #endif 24 : 25 0 : __subsystem struct ptp_clock_driver_api { 26 0 : int (*set)(const struct device *dev, struct net_ptp_time *tm); 27 0 : int (*get)(const struct device *dev, struct net_ptp_time *tm); 28 0 : int (*adjust)(const struct device *dev, int increment); 29 0 : int (*rate_adjust)(const struct device *dev, double ratio); 30 : }; 31 : 32 : /** 33 : * @brief Set the time of the PTP clock. 34 : * 35 : * @param dev PTP clock device 36 : * @param tm Time to set 37 : * 38 : * @return 0 if ok, <0 if error 39 : */ 40 1 : static inline int ptp_clock_set(const struct device *dev, 41 : struct net_ptp_time *tm) 42 : { 43 : const struct ptp_clock_driver_api *api = 44 : (const struct ptp_clock_driver_api *)dev->api; 45 : 46 : return api->set(dev, tm); 47 : } 48 : 49 : /** 50 : * @brief Get the time of the PTP clock. 51 : * 52 : * @param dev PTP clock device 53 : * @param tm Where to store the current time. 54 : * 55 : * @return 0 if ok, <0 if error 56 : */ 57 1 : __syscall int ptp_clock_get(const struct device *dev, struct net_ptp_time *tm); 58 : 59 : static inline int z_impl_ptp_clock_get(const struct device *dev, 60 : struct net_ptp_time *tm) 61 : { 62 : const struct ptp_clock_driver_api *api = 63 : (const struct ptp_clock_driver_api *)dev->api; 64 : 65 : return api->get(dev, tm); 66 : } 67 : 68 : /** 69 : * @brief Adjust the PTP clock time. 70 : * 71 : * @param dev PTP clock device 72 : * @param increment Increment of the clock in nanoseconds 73 : * 74 : * @return 0 if ok, <0 if error 75 : */ 76 1 : static inline int ptp_clock_adjust(const struct device *dev, int increment) 77 : { 78 : const struct ptp_clock_driver_api *api = 79 : (const struct ptp_clock_driver_api *)dev->api; 80 : 81 : return api->adjust(dev, increment); 82 : } 83 : 84 : /** 85 : * @brief Adjust the PTP clock time change rate when compared to its neighbor. 86 : * 87 : * @param dev PTP clock device 88 : * @param rate Rate of the clock time change 89 : * 90 : * @return 0 if ok, <0 if error 91 : */ 92 1 : static inline int ptp_clock_rate_adjust(const struct device *dev, double rate) 93 : { 94 : const struct ptp_clock_driver_api *api = 95 : (const struct ptp_clock_driver_api *)dev->api; 96 : 97 : return api->rate_adjust(dev, rate); 98 : } 99 : 100 : #ifdef __cplusplus 101 : } 102 : #endif 103 : 104 : #include <zephyr/syscalls/ptp_clock.h> 105 : 106 : #endif /* ZEPHYR_INCLUDE_DRIVERS_PTP_CLOCK_H_ */