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