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