1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /* TI K3 AM65 CPTS driver interface
3 *
4 * Copyright (C) 2020 Texas Instruments Incorporated - http://www.ti.com
5 */
6
7 #ifndef K3_CPTS_H_
8 #define K3_CPTS_H_
9
10 #include <linux/device.h>
11 #include <linux/of.h>
12
13 struct am65_cpts;
14
15 struct am65_cpts_estf_cfg {
16 u64 ns_period;
17 u64 ns_start;
18 };
19
20 #if IS_ENABLED(CONFIG_TI_K3_AM65_CPTS)
21 void am65_cpts_release(struct am65_cpts *cpts);
22 struct am65_cpts *am65_cpts_create(struct device *dev, void __iomem *regs,
23 struct device_node *node);
24 int am65_cpts_phc_index(struct am65_cpts *cpts);
25 void am65_cpts_rx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb);
26 void am65_cpts_tx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb);
27 void am65_cpts_prep_tx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb);
28 u64 am65_cpts_ns_gettime(struct am65_cpts *cpts);
29 int am65_cpts_estf_enable(struct am65_cpts *cpts, int idx,
30 struct am65_cpts_estf_cfg *cfg);
31 void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx);
32 void am65_cpts_suspend(struct am65_cpts *cpts);
33 void am65_cpts_resume(struct am65_cpts *cpts);
34 #else
am65_cpts_release(struct am65_cpts * cpts)35 static inline void am65_cpts_release(struct am65_cpts *cpts)
36 {
37 }
38
am65_cpts_create(struct device * dev,void __iomem * regs,struct device_node * node)39 static inline struct am65_cpts *am65_cpts_create(struct device *dev,
40 void __iomem *regs,
41 struct device_node *node)
42 {
43 return ERR_PTR(-EOPNOTSUPP);
44 }
45
am65_cpts_phc_index(struct am65_cpts * cpts)46 static inline int am65_cpts_phc_index(struct am65_cpts *cpts)
47 {
48 return -1;
49 }
50
am65_cpts_rx_timestamp(struct am65_cpts * cpts,struct sk_buff * skb)51 static inline void am65_cpts_rx_timestamp(struct am65_cpts *cpts,
52 struct sk_buff *skb)
53 {
54 }
55
am65_cpts_tx_timestamp(struct am65_cpts * cpts,struct sk_buff * skb)56 static inline void am65_cpts_tx_timestamp(struct am65_cpts *cpts,
57 struct sk_buff *skb)
58 {
59 }
60
am65_cpts_prep_tx_timestamp(struct am65_cpts * cpts,struct sk_buff * skb)61 static inline void am65_cpts_prep_tx_timestamp(struct am65_cpts *cpts,
62 struct sk_buff *skb)
63 {
64 }
65
am65_cpts_ns_gettime(struct am65_cpts * cpts)66 static inline s64 am65_cpts_ns_gettime(struct am65_cpts *cpts)
67 {
68 return 0;
69 }
70
am65_cpts_estf_enable(struct am65_cpts * cpts,int idx,struct am65_cpts_estf_cfg * cfg)71 static inline int am65_cpts_estf_enable(struct am65_cpts *cpts, int idx,
72 struct am65_cpts_estf_cfg *cfg)
73 {
74 return 0;
75 }
76
am65_cpts_estf_disable(struct am65_cpts * cpts,int idx)77 static inline void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx)
78 {
79 }
80
am65_cpts_suspend(struct am65_cpts * cpts)81 static inline void am65_cpts_suspend(struct am65_cpts *cpts)
82 {
83 }
84
am65_cpts_resume(struct am65_cpts * cpts)85 static inline void am65_cpts_resume(struct am65_cpts *cpts)
86 {
87 }
88 #endif
89
90 #endif /* K3_CPTS_H_ */
91