root/drivers/net/ethernet/intel/iavf/iavf_ptp.h
/* SPDX-License-Identifier: GPL-2.0 */
/* Copyright(c) 2024 Intel Corporation. */

#ifndef _IAVF_PTP_H_
#define _IAVF_PTP_H_

#include "iavf_types.h"

/* bit indicating whether a 40bit timestamp is valid */
#define IAVF_PTP_40B_TSTAMP_VALID       BIT(24)

#if IS_ENABLED(CONFIG_PTP_1588_CLOCK)
void iavf_ptp_init(struct iavf_adapter *adapter);
void iavf_ptp_release(struct iavf_adapter *adapter);
void iavf_ptp_process_caps(struct iavf_adapter *adapter);
bool iavf_ptp_cap_supported(const struct iavf_adapter *adapter, u32 cap);
void iavf_virtchnl_send_ptp_cmd(struct iavf_adapter *adapter);
int iavf_ptp_set_ts_config(struct iavf_adapter *adapter,
                           struct kernel_hwtstamp_config *config,
                           struct netlink_ext_ack *extack);
u64 iavf_ptp_extend_32b_timestamp(u64 cached_phc_time, u32 in_tstamp);
#else /* IS_ENABLED(CONFIG_PTP_1588_CLOCK) */
static inline void iavf_ptp_init(struct iavf_adapter *adapter) { }
static inline void iavf_ptp_release(struct iavf_adapter *adapter) { }
static inline void iavf_ptp_process_caps(struct iavf_adapter *adapter) { }
static inline bool iavf_ptp_cap_supported(const struct iavf_adapter *adapter,
                                          u32 cap)
{
        return false;
}

static inline void iavf_virtchnl_send_ptp_cmd(struct iavf_adapter *adapter) { }
static inline int iavf_ptp_set_ts_config(struct iavf_adapter *adapter,
                                         struct kernel_hwtstamp_config *config,
                                         struct netlink_ext_ack *extack)
{
        return -1;
}

static inline u64 iavf_ptp_extend_32b_timestamp(u64 cached_phc_time,
                                                u32 in_tstamp)
{
        return 0;
}

#endif /* IS_ENABLED(CONFIG_PTP_1588_CLOCK) */
#endif /* _IAVF_PTP_H_ */