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