Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
ptp_clock.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2018 Intel Corporation.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_INCLUDE_DRIVERS_PTP_CLOCK_H_
14#define ZEPHYR_INCLUDE_DRIVERS_PTP_CLOCK_H_
15
22
23#include <zephyr/kernel.h>
24#include <stdint.h>
25#include <zephyr/device.h>
26#include <zephyr/sys/util.h>
27#include <zephyr/net/ptp_time.h>
28
29#ifdef __cplusplus
30extern "C" {
31#endif
32
33/* Name of the PTP clock driver */
34#if !defined(PTP_CLOCK_NAME)
35#define PTP_CLOCK_NAME "PTP_CLOCK"
36#endif
37
42
47typedef int (*ptp_clock_api_set_t)(const struct device *dev, struct net_ptp_time *tm);
48
53typedef int (*ptp_clock_api_get_t)(const struct device *dev, struct net_ptp_time *tm);
54
59typedef int (*ptp_clock_api_adjust_t)(const struct device *dev, int increment);
60
65typedef int (*ptp_clock_api_rate_adjust_t)(const struct device *dev, double ratio);
66
88
90
99static inline int ptp_clock_set(const struct device *dev,
100 struct net_ptp_time *tm)
101{
102 return DEVICE_API_GET(ptp_clock, dev)->set(dev, tm);
103}
104
113__syscall int ptp_clock_get(const struct device *dev, struct net_ptp_time *tm);
114
115static inline int z_impl_ptp_clock_get(const struct device *dev,
116 struct net_ptp_time *tm)
117{
118 return DEVICE_API_GET(ptp_clock, dev)->get(dev, tm);
119}
120
129static inline int ptp_clock_adjust(const struct device *dev, int increment)
130{
131 return DEVICE_API_GET(ptp_clock, dev)->adjust(dev, increment);
132}
133
142static inline int ptp_clock_rate_adjust(const struct device *dev, double rate)
143{
144 return DEVICE_API_GET(ptp_clock, dev)->rate_adjust(dev, rate);
145}
146
147#ifdef __cplusplus
148}
149#endif
150
151#include <zephyr/syscalls/ptp_clock.h>
152
156
157#endif /* ZEPHYR_INCLUDE_DRIVERS_PTP_CLOCK_H_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1425
static int ptp_clock_rate_adjust(const struct device *dev, double rate)
Adjust the PTP clock rate ratio based on its nominal frequency.
Definition ptp_clock.h:142
static int ptp_clock_set(const struct device *dev, struct net_ptp_time *tm)
Set the time of the PTP clock.
Definition ptp_clock.h:99
int ptp_clock_get(const struct device *dev, struct net_ptp_time *tm)
Get the time of the PTP clock.
int(* ptp_clock_api_get_t)(const struct device *dev, struct net_ptp_time *tm)
Get the time of the PTP clock.
Definition ptp_clock.h:53
static int ptp_clock_adjust(const struct device *dev, int increment)
Adjust the PTP clock time.
Definition ptp_clock.h:129
int(* ptp_clock_api_adjust_t)(const struct device *dev, int increment)
Adjust the PTP clock time.
Definition ptp_clock.h:59
int(* ptp_clock_api_rate_adjust_t)(const struct device *dev, double ratio)
Adjust the PTP clock rate ratio based on its nominal frequency.
Definition ptp_clock.h:65
int(* ptp_clock_api_set_t)(const struct device *dev, struct net_ptp_time *tm)
@def_driverbackendgroup{PTP Clock,ptp_clock_interface}
Definition ptp_clock.h:47
Public kernel APIs.
Public functions for the Precision Time Protocol time specification.
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
(Generalized) Precision Time Protocol Timestamp format.
Definition ptp_time.h:111
@driver_ops{PTP Clock}
Definition ptp_clock.h:70
ptp_clock_api_set_t set
@driver_ops_mandatory Set the time of the PTP clock.
Definition ptp_clock.h:74
ptp_clock_api_get_t get
@driver_ops_mandatory Get the time of the PTP clock.
Definition ptp_clock.h:78
ptp_clock_api_rate_adjust_t rate_adjust
@driver_ops_mandatory Adjust the PTP clock rate ratio based on its nominal frequency.
Definition ptp_clock.h:86
ptp_clock_api_adjust_t adjust
@driver_ops_mandatory Adjust the PTP clock time.
Definition ptp_clock.h:82
Definition time.h:24
Misc utilities.