Zephyr Project API 4.2.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
13#ifndef ZEPHYR_INCLUDE_DRIVERS_PTP_CLOCK_H_
14#define ZEPHYR_INCLUDE_DRIVERS_PTP_CLOCK_H_
15
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
38__subsystem struct ptp_clock_driver_api {
39 int (*set)(const struct device *dev, struct net_ptp_time *tm);
40 int (*get)(const struct device *dev, struct net_ptp_time *tm);
41 int (*adjust)(const struct device *dev, int increment);
42 int (*rate_adjust)(const struct device *dev, double ratio);
43};
44
53static inline int ptp_clock_set(const struct device *dev,
54 struct net_ptp_time *tm)
55{
56 const struct ptp_clock_driver_api *api =
57 (const struct ptp_clock_driver_api *)dev->api;
58
59 return api->set(dev, tm);
60}
61
70__syscall int ptp_clock_get(const struct device *dev, struct net_ptp_time *tm);
71
72static inline int z_impl_ptp_clock_get(const struct device *dev,
73 struct net_ptp_time *tm)
74{
75 const struct ptp_clock_driver_api *api =
76 (const struct ptp_clock_driver_api *)dev->api;
77
78 return api->get(dev, tm);
79}
80
89static inline int ptp_clock_adjust(const struct device *dev, int increment)
90{
91 const struct ptp_clock_driver_api *api =
92 (const struct ptp_clock_driver_api *)dev->api;
93
94 return api->adjust(dev, increment);
95}
96
105static inline int ptp_clock_rate_adjust(const struct device *dev, double rate)
106{
107 const struct ptp_clock_driver_api *api =
108 (const struct ptp_clock_driver_api *)dev->api;
109
110 return api->rate_adjust(dev, rate);
111}
112
113#ifdef __cplusplus
114}
115#endif
116
117#include <zephyr/syscalls/ptp_clock.h>
118
123#endif /* ZEPHYR_INCLUDE_DRIVERS_PTP_CLOCK_H_ */
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:105
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:53
int ptp_clock_get(const struct device *dev, struct net_ptp_time *tm)
Get the time of the PTP clock.
static int ptp_clock_adjust(const struct device *dev, int increment)
Adjust the PTP clock time.
Definition ptp_clock.h:89
Public kernel APIs.
Public functions for the Precision Time Protocol time specification.
Runtime device structure (in ROM) per driver instance.
Definition device.h:510
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:516
(Generalized) Precision Time Protocol Timestamp format.
Definition ptp_time.h:111
Definition ptp_clock.h:38
int(* get)(const struct device *dev, struct net_ptp_time *tm)
Definition ptp_clock.h:40
int(* adjust)(const struct device *dev, int increment)
Definition ptp_clock.h:41
int(* rate_adjust)(const struct device *dev, double ratio)
Definition ptp_clock.h:42
int(* set)(const struct device *dev, struct net_ptp_time *tm)
Definition ptp_clock.h:39
Definition time.h:24
Misc utilities.