0001
0002
0003 #ifndef __LINUX_HTE_H
0004 #define __LINUX_HTE_H
0005
0006 #include <linux/errno.h>
0007
0008 struct hte_chip;
0009 struct hte_device;
0010 struct of_phandle_args;
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021 enum hte_edge {
0022 HTE_EDGE_NO_SETUP = 1U << 0,
0023 HTE_RISING_EDGE_TS = 1U << 1,
0024 HTE_FALLING_EDGE_TS = 1U << 2,
0025 };
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035 enum hte_return {
0036 HTE_CB_HANDLED,
0037 HTE_RUN_SECOND_CB,
0038 };
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048 struct hte_ts_data {
0049 u64 tsc;
0050 u64 seq;
0051 int raw_level;
0052 };
0053
0054
0055
0056
0057
0058
0059
0060 struct hte_clk_info {
0061 u64 hz;
0062 clockid_t type;
0063 };
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074 typedef enum hte_return (*hte_ts_cb_t)(struct hte_ts_data *ts, void *data);
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085 typedef enum hte_return (*hte_ts_sec_cb_t)(void *data);
0086
0087
0088
0089
0090
0091
0092
0093
0094
0095
0096
0097 struct hte_line_attr {
0098 u32 line_id;
0099 void *line_data;
0100 unsigned long edge_flags;
0101 const char *name;
0102 };
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113 struct hte_ts_desc {
0114 struct hte_line_attr attr;
0115 void *hte_data;
0116 };
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136 struct hte_ops {
0137 int (*request)(struct hte_chip *chip, struct hte_ts_desc *desc,
0138 u32 xlated_id);
0139 int (*release)(struct hte_chip *chip, struct hte_ts_desc *desc,
0140 u32 xlated_id);
0141 int (*enable)(struct hte_chip *chip, u32 xlated_id);
0142 int (*disable)(struct hte_chip *chip, u32 xlated_id);
0143 int (*get_clk_src_info)(struct hte_chip *chip,
0144 struct hte_clk_info *ci);
0145 };
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163 struct hte_chip {
0164 const char *name;
0165 struct device *dev;
0166 const struct hte_ops *ops;
0167 u32 nlines;
0168 int (*xlate_of)(struct hte_chip *gc,
0169 const struct of_phandle_args *args,
0170 struct hte_ts_desc *desc, u32 *xlated_id);
0171 int (*xlate_plat)(struct hte_chip *gc, struct hte_ts_desc *desc,
0172 u32 *xlated_id);
0173 bool (*match_from_linedata)(const struct hte_chip *chip,
0174 const struct hte_ts_desc *hdesc);
0175 u8 of_hte_n_cells;
0176
0177 struct hte_device *gdev;
0178 void *data;
0179 };
0180
0181 #if IS_ENABLED(CONFIG_HTE)
0182
0183 int devm_hte_register_chip(struct hte_chip *chip);
0184 int hte_push_ts_ns(const struct hte_chip *chip, u32 xlated_id,
0185 struct hte_ts_data *data);
0186
0187
0188 int hte_init_line_attr(struct hte_ts_desc *desc, u32 line_id,
0189 unsigned long edge_flags, const char *name,
0190 void *data);
0191 int hte_ts_get(struct device *dev, struct hte_ts_desc *desc, int index);
0192 int hte_ts_put(struct hte_ts_desc *desc);
0193 int hte_request_ts_ns(struct hte_ts_desc *desc, hte_ts_cb_t cb,
0194 hte_ts_sec_cb_t tcb, void *data);
0195 int devm_hte_request_ts_ns(struct device *dev, struct hte_ts_desc *desc,
0196 hte_ts_cb_t cb, hte_ts_sec_cb_t tcb, void *data);
0197 int of_hte_req_count(struct device *dev);
0198 int hte_enable_ts(struct hte_ts_desc *desc);
0199 int hte_disable_ts(struct hte_ts_desc *desc);
0200 int hte_get_clk_src_info(const struct hte_ts_desc *desc,
0201 struct hte_clk_info *ci);
0202
0203 #else
0204 static inline int devm_hte_register_chip(struct hte_chip *chip)
0205 {
0206 return -EOPNOTSUPP;
0207 }
0208
0209 static inline int hte_push_ts_ns(const struct hte_chip *chip,
0210 u32 xlated_id,
0211 const struct hte_ts_data *data)
0212 {
0213 return -EOPNOTSUPP;
0214 }
0215
0216 static inline int hte_init_line_attr(struct hte_ts_desc *desc, u32 line_id,
0217 unsigned long edge_flags,
0218 const char *name, void *data)
0219 {
0220 return -EOPNOTSUPP;
0221 }
0222
0223 static inline int hte_ts_get(struct device *dev, struct hte_ts_desc *desc,
0224 int index)
0225 {
0226 return -EOPNOTSUPP;
0227 }
0228
0229 static inline int hte_ts_put(struct hte_ts_desc *desc)
0230 {
0231 return -EOPNOTSUPP;
0232 }
0233
0234 static inline int hte_request_ts_ns(struct hte_ts_desc *desc, hte_ts_cb_t cb,
0235 hte_ts_sec_cb_t tcb, void *data)
0236 {
0237 return -EOPNOTSUPP;
0238 }
0239
0240 static inline int devm_hte_request_ts_ns(struct device *dev,
0241 struct hte_ts_desc *desc,
0242 hte_ts_cb_t cb,
0243 hte_ts_sec_cb_t tcb,
0244 void *data)
0245 {
0246 return -EOPNOTSUPP;
0247 }
0248
0249 static inline int of_hte_req_count(struct device *dev)
0250 {
0251 return -EOPNOTSUPP;
0252 }
0253
0254 static inline int hte_enable_ts(struct hte_ts_desc *desc)
0255 {
0256 return -EOPNOTSUPP;
0257 }
0258
0259 static inline int hte_disable_ts(struct hte_ts_desc *desc)
0260 {
0261 return -EOPNOTSUPP;
0262 }
0263
0264 static inline int hte_get_clk_src_info(const struct hte_ts_desc *desc,
0265 struct hte_clk_info *ci)
0266 {
0267 return -EOPNOTSUPP;
0268 }
0269 #endif
0270
0271 #endif