spectrum_ptp.h (5027B)
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 u16 local_port); 35 36void mlxsw_sp1_ptp_transmitted(struct mlxsw_sp *mlxsw_sp, 37 struct sk_buff *skb, u16 local_port); 38 39void mlxsw_sp1_ptp_got_timestamp(struct mlxsw_sp *mlxsw_sp, bool ingress, 40 u16 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, u16 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, u16 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 u16 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, u16 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, u16 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