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_tx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb);
26 void am65_cpts_prep_tx_timestamp(struct am65_cpts *cpts, struct sk_buff *skb);
27 void am65_cpts_rx_enable(struct am65_cpts *cpts, bool en);
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
35 static inline void am65_cpts_release(struct am65_cpts *cpts)
36 {
37 }
38 
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 
46 static inline int am65_cpts_phc_index(struct am65_cpts *cpts)
47 {
48 	return -1;
49 }
50 
51 static inline void am65_cpts_tx_timestamp(struct am65_cpts *cpts,
52 					  struct sk_buff *skb)
53 {
54 }
55 
56 static inline void am65_cpts_prep_tx_timestamp(struct am65_cpts *cpts,
57 					       struct sk_buff *skb)
58 {
59 }
60 
61 static inline void am65_cpts_rx_enable(struct am65_cpts *cpts, bool en)
62 {
63 }
64 
65 static inline s64 am65_cpts_ns_gettime(struct am65_cpts *cpts)
66 {
67 	return 0;
68 }
69 
70 static inline int am65_cpts_estf_enable(struct am65_cpts *cpts, int idx,
71 					struct am65_cpts_estf_cfg *cfg)
72 {
73 	return 0;
74 }
75 
76 static inline void am65_cpts_estf_disable(struct am65_cpts *cpts, int idx)
77 {
78 }
79 
80 static inline void am65_cpts_suspend(struct am65_cpts *cpts)
81 {
82 }
83 
84 static inline void am65_cpts_resume(struct am65_cpts *cpts)
85 {
86 }
87 #endif
88 
89 #endif /* K3_CPTS_H_ */
90