162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/* Texas Instruments ICSSG Industrial Ethernet Peripheral (IEP) Driver
362306a36Sopenharmony_ci *
462306a36Sopenharmony_ci * Copyright (C) 2023 Texas Instruments Incorporated - https://www.ti.com/
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef __NET_TI_ICSS_IEP_H
962306a36Sopenharmony_ci#define __NET_TI_ICSS_IEP_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/mutex.h>
1262306a36Sopenharmony_ci#include <linux/ptp_clock_kernel.h>
1362306a36Sopenharmony_ci#include <linux/regmap.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_cistruct icss_iep;
1662306a36Sopenharmony_ciextern const struct icss_iep_clockops prueth_iep_clockops;
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci/* Firmware specific clock operations */
1962306a36Sopenharmony_cistruct icss_iep_clockops {
2062306a36Sopenharmony_ci	void (*settime)(void *clockops_data, u64 ns);
2162306a36Sopenharmony_ci	void (*adjtime)(void *clockops_data, s64 delta);
2262306a36Sopenharmony_ci	u64 (*gettime)(void *clockops_data, struct ptp_system_timestamp *sts);
2362306a36Sopenharmony_ci	int (*perout_enable)(void *clockops_data,
2462306a36Sopenharmony_ci			     struct ptp_perout_request *req, int on,
2562306a36Sopenharmony_ci			     u64 *cmp);
2662306a36Sopenharmony_ci	int (*extts_enable)(void *clockops_data, u32 index, int on);
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_cistruct icss_iep *icss_iep_get(struct device_node *np);
3062306a36Sopenharmony_cistruct icss_iep *icss_iep_get_idx(struct device_node *np, int idx);
3162306a36Sopenharmony_civoid icss_iep_put(struct icss_iep *iep);
3262306a36Sopenharmony_ciint icss_iep_init(struct icss_iep *iep, const struct icss_iep_clockops *clkops,
3362306a36Sopenharmony_ci		  void *clockops_data, u32 cycle_time_ns);
3462306a36Sopenharmony_ciint icss_iep_exit(struct icss_iep *iep);
3562306a36Sopenharmony_ciint icss_iep_get_count_low(struct icss_iep *iep);
3662306a36Sopenharmony_ciint icss_iep_get_count_hi(struct icss_iep *iep);
3762306a36Sopenharmony_ciint icss_iep_get_ptp_clock_idx(struct icss_iep *iep);
3862306a36Sopenharmony_civoid icss_iep_init_fw(struct icss_iep *iep);
3962306a36Sopenharmony_civoid icss_iep_exit_fw(struct icss_iep *iep);
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci#endif /* __NET_TI_ICSS_IEP_H */
42