linux/drivers/net/ethernet/mellanox/mlxsw/spectrum_ptp.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
   2/* Copyright (c) 2019 Mellanox Technologies. All rights reserved */
   3
   4#ifndef _MLXSW_SPECTRUM_PTP_H
   5#define _MLXSW_SPECTRUM_PTP_H
   6
   7#include <linux/device.h>
   8#include <linux/rhashtable.h>
   9
  10struct mlxsw_sp;
  11struct mlxsw_sp_port;
  12struct mlxsw_sp_ptp_clock;
  13
  14enum {
  15        MLXSW_SP_PTP_MESSAGE_TYPE_SYNC,
  16        MLXSW_SP_PTP_MESSAGE_TYPE_DELAY_REQ,
  17        MLXSW_SP_PTP_MESSAGE_TYPE_PDELAY_REQ,
  18        MLXSW_SP_PTP_MESSAGE_TYPE_PDELAY_RESP,
  19};
  20
  21static inline int mlxsw_sp_ptp_get_ts_info_noptp(struct ethtool_ts_info *info)
  22{
  23        info->so_timestamping = SOF_TIMESTAMPING_RX_SOFTWARE |
  24                                SOF_TIMESTAMPING_SOFTWARE;
  25        info->phc_index = -1;
  26        return 0;
  27}
  28
  29#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
  30
  31struct mlxsw_sp_ptp_clock *
  32mlxsw_sp1_ptp_clock_init(struct mlxsw_sp *mlxsw_sp, struct device *dev);
  33
  34void mlxsw_sp1_ptp_clock_fini(struct mlxsw_sp_ptp_clock *clock);
  35
  36struct mlxsw_sp_ptp_state *mlxsw_sp1_ptp_init(struct mlxsw_sp *mlxsw_sp);
  37
  38void mlxsw_sp1_ptp_fini(struct mlxsw_sp_ptp_state *ptp_state);
  39
  40void mlxsw_sp1_ptp_receive(struct mlxsw_sp *mlxsw_sp, struct sk_buff *skb,
  41                           u8 local_port);
  42
  43void mlxsw_sp1_ptp_transmitted(struct mlxsw_sp *mlxsw_sp,
  44                               struct sk_buff *skb, u8 local_port);
  45
  46void mlxsw_sp1_ptp_got_timestamp(struct mlxsw_sp *mlxsw_sp, bool ingress,
  47                                 u8 local_port, u8 message_type,
  48                                 u8 domain_number, u16 sequence_id,
  49                                 u64 timestamp);
  50
  51int mlxsw_sp1_ptp_hwtstamp_get(struct mlxsw_sp_port *mlxsw_sp_port,
  52                               struct hwtstamp_config *config);
  53
  54int mlxsw_sp1_ptp_hwtstamp_set(struct mlxsw_sp_port *mlxsw_sp_port,
  55                               struct hwtstamp_config *config);
  56
  57void mlxsw_sp1_ptp_shaper_work(struct work_struct *work);
  58
  59int mlxsw_sp1_ptp_get_ts_info(struct mlxsw_sp *mlxsw_sp,
  60                              struct ethtool_ts_info *info);
  61
  62int mlxsw_sp1_get_stats_count(void);
  63void mlxsw_sp1_get_stats_strings(u8 **p);
  64void mlxsw_sp1_get_stats(struct mlxsw_sp_port *mlxsw_sp_port,
  65                         u64 *data, int data_index);
  66
  67#else
  68
  69static inline struct mlxsw_sp_ptp_clock *
  70mlxsw_sp1_ptp_clock_init(struct mlxsw_sp *mlxsw_sp, struct device *dev)
  71{
  72        return NULL;
  73}
  74
  75static inline void mlxsw_sp1_ptp_clock_fini(struct mlxsw_sp_ptp_clock *clock)
  76{
  77}
  78
  79static inline struct mlxsw_sp_ptp_state *
  80mlxsw_sp1_ptp_init(struct mlxsw_sp *mlxsw_sp)
  81{
  82        return NULL;
  83}
  84
  85static inline void mlxsw_sp1_ptp_fini(struct mlxsw_sp_ptp_state *ptp_state)
  86{
  87}
  88
  89static inline void mlxsw_sp1_ptp_receive(struct mlxsw_sp *mlxsw_sp,
  90                                         struct sk_buff *skb, u8 local_port)
  91{
  92        mlxsw_sp_rx_listener_no_mark_func(skb, local_port, mlxsw_sp);
  93}
  94
  95static inline void mlxsw_sp1_ptp_transmitted(struct mlxsw_sp *mlxsw_sp,
  96                                             struct sk_buff *skb, u8 local_port)
  97{
  98        dev_kfree_skb_any(skb);
  99}
 100
 101static inline void
 102mlxsw_sp1_ptp_got_timestamp(struct mlxsw_sp *mlxsw_sp, bool ingress,
 103                            u8 local_port, u8 message_type,
 104                            u8 domain_number,
 105                            u16 sequence_id, u64 timestamp)
 106{
 107}
 108
 109static inline int
 110mlxsw_sp1_ptp_hwtstamp_get(struct mlxsw_sp_port *mlxsw_sp_port,
 111                           struct hwtstamp_config *config)
 112{
 113        return -EOPNOTSUPP;
 114}
 115
 116static inline int
 117mlxsw_sp1_ptp_hwtstamp_set(struct mlxsw_sp_port *mlxsw_sp_port,
 118                           struct hwtstamp_config *config)
 119{
 120        return -EOPNOTSUPP;
 121}
 122
 123static inline void mlxsw_sp1_ptp_shaper_work(struct work_struct *work)
 124{
 125}
 126
 127static inline int mlxsw_sp1_ptp_get_ts_info(struct mlxsw_sp *mlxsw_sp,
 128                                            struct ethtool_ts_info *info)
 129{
 130        return mlxsw_sp_ptp_get_ts_info_noptp(info);
 131}
 132
 133static inline int mlxsw_sp1_get_stats_count(void)
 134{
 135        return 0;
 136}
 137
 138static inline void mlxsw_sp1_get_stats_strings(u8 **p)
 139{
 140}
 141
 142static inline void mlxsw_sp1_get_stats(struct mlxsw_sp_port *mlxsw_sp_port,
 143                                       u64 *data, int data_index)
 144{
 145}
 146#endif
 147
 148static inline struct mlxsw_sp_ptp_clock *
 149mlxsw_sp2_ptp_clock_init(struct mlxsw_sp *mlxsw_sp, struct device *dev)
 150{
 151        return NULL;
 152}
 153
 154static inline void mlxsw_sp2_ptp_clock_fini(struct mlxsw_sp_ptp_clock *clock)
 155{
 156}
 157
 158static inline struct mlxsw_sp_ptp_state *
 159mlxsw_sp2_ptp_init(struct mlxsw_sp *mlxsw_sp)
 160{
 161        return NULL;
 162}
 163
 164static inline void mlxsw_sp2_ptp_fini(struct mlxsw_sp_ptp_state *ptp_state)
 165{
 166}
 167
 168static inline void mlxsw_sp2_ptp_receive(struct mlxsw_sp *mlxsw_sp,
 169                                         struct sk_buff *skb, u8 local_port)
 170{
 171        mlxsw_sp_rx_listener_no_mark_func(skb, local_port, mlxsw_sp);
 172}
 173
 174static inline void mlxsw_sp2_ptp_transmitted(struct mlxsw_sp *mlxsw_sp,
 175                                             struct sk_buff *skb, u8 local_port)
 176{
 177        dev_kfree_skb_any(skb);
 178}
 179
 180static inline int
 181mlxsw_sp2_ptp_hwtstamp_get(struct mlxsw_sp_port *mlxsw_sp_port,
 182                           struct hwtstamp_config *config)
 183{
 184        return -EOPNOTSUPP;
 185}
 186
 187static inline int
 188mlxsw_sp2_ptp_hwtstamp_set(struct mlxsw_sp_port *mlxsw_sp_port,
 189                           struct hwtstamp_config *config)
 190{
 191        return -EOPNOTSUPP;
 192}
 193
 194static inline void mlxsw_sp2_ptp_shaper_work(struct work_struct *work)
 195{
 196}
 197
 198static inline int mlxsw_sp2_ptp_get_ts_info(struct mlxsw_sp *mlxsw_sp,
 199                                            struct ethtool_ts_info *info)
 200{
 201        return mlxsw_sp_ptp_get_ts_info_noptp(info);
 202}
 203
 204static inline int mlxsw_sp2_get_stats_count(void)
 205{
 206        return 0;
 207}
 208
 209static inline void mlxsw_sp2_get_stats_strings(u8 **p)
 210{
 211}
 212
 213static inline void mlxsw_sp2_get_stats(struct mlxsw_sp_port *mlxsw_sp_port,
 214                                       u64 *data, int data_index)
 215{
 216}
 217
 218#endif
 219