1 | /* SPDX-License-Identifier: GPL-2.0 */ |
2 | /* Texas Instruments ICSSG Industrial Ethernet Peripheral (IEP) Driver |
3 | * |
4 | * Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/ |
5 | * |
6 | */ |
7 | |
8 | #ifndef __NET_TI_ICSS_IEP_H |
9 | #define __NET_TI_ICSS_IEP_H |
10 | |
11 | #include <linux/mutex.h> |
12 | #include <linux/ptp_clock_kernel.h> |
13 | #include <linux/regmap.h> |
14 | |
15 | struct icss_iep; |
16 | extern const struct icss_iep_clockops prueth_iep_clockops; |
17 | |
18 | /* Firmware specific clock operations */ |
19 | struct icss_iep_clockops { |
20 | void (*settime)(void *clockops_data, u64 ns); |
21 | void (*adjtime)(void *clockops_data, s64 delta); |
22 | u64 (*gettime)(void *clockops_data, struct ptp_system_timestamp *sts); |
23 | int (*perout_enable)(void *clockops_data, |
24 | struct ptp_perout_request *req, int on, |
25 | u64 *cmp); |
26 | int (*extts_enable)(void *clockops_data, u32 index, int on); |
27 | }; |
28 | |
29 | struct icss_iep *icss_iep_get(struct device_node *np); |
30 | struct icss_iep *icss_iep_get_idx(struct device_node *np, int idx); |
31 | void icss_iep_put(struct icss_iep *iep); |
32 | int icss_iep_init(struct icss_iep *iep, const struct icss_iep_clockops *clkops, |
33 | void *clockops_data, u32 cycle_time_ns); |
34 | int icss_iep_exit(struct icss_iep *iep); |
35 | int icss_iep_get_count_low(struct icss_iep *iep); |
36 | int icss_iep_get_count_hi(struct icss_iep *iep); |
37 | int icss_iep_get_ptp_clock_idx(struct icss_iep *iep); |
38 | void icss_iep_init_fw(struct icss_iep *iep); |
39 | void icss_iep_exit_fw(struct icss_iep *iep); |
40 | |
41 | #endif /* __NET_TI_ICSS_IEP_H */ |
42 | |