mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-03 17:51:23 +00:00

New timestamping API was introduced in commit 66f7223039
("net: add
NDOs for configuring hardware timestamping") from kernel v6.6. It is
time to convert the mlxsw driver to the new API, so that the
ndo_eth_ioctl() path can be removed completely.
The UAPI is still ioctl-only, but it's best to remove the "ioctl"
mentions from the driver in case a netlink variant appears.
Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Ido Schimmel <idosch@nvidia.com>
Link: https://patch.msgid.link/20250512154411.848614-1-vladimir.oltean@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
220 lines
5.4 KiB
C
220 lines
5.4 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
|
|
/* Copyright (c) 2019 Mellanox Technologies. All rights reserved */
|
|
|
|
#ifndef _MLXSW_SPECTRUM_PTP_H
|
|
#define _MLXSW_SPECTRUM_PTP_H
|
|
|
|
#include <linux/device.h>
|
|
#include <linux/rhashtable.h>
|
|
|
|
struct mlxsw_sp;
|
|
struct mlxsw_sp_port;
|
|
struct mlxsw_sp_ptp_clock;
|
|
|
|
#if IS_REACHABLE(CONFIG_PTP_1588_CLOCK)
|
|
|
|
struct mlxsw_sp_ptp_clock *
|
|
mlxsw_sp1_ptp_clock_init(struct mlxsw_sp *mlxsw_sp, struct device *dev);
|
|
|
|
void mlxsw_sp1_ptp_clock_fini(struct mlxsw_sp_ptp_clock *clock);
|
|
|
|
struct mlxsw_sp_ptp_state *mlxsw_sp1_ptp_init(struct mlxsw_sp *mlxsw_sp);
|
|
|
|
void mlxsw_sp1_ptp_fini(struct mlxsw_sp_ptp_state *ptp_state);
|
|
|
|
void mlxsw_sp1_ptp_receive(struct mlxsw_sp *mlxsw_sp, struct sk_buff *skb,
|
|
u16 local_port);
|
|
|
|
void mlxsw_sp1_ptp_transmitted(struct mlxsw_sp *mlxsw_sp,
|
|
struct sk_buff *skb, u16 local_port);
|
|
|
|
void mlxsw_sp1_ptp_got_timestamp(struct mlxsw_sp *mlxsw_sp, bool ingress,
|
|
u16 local_port, u8 message_type,
|
|
u8 domain_number, u16 sequence_id,
|
|
u64 timestamp);
|
|
|
|
int mlxsw_sp1_ptp_hwtstamp_get(struct mlxsw_sp_port *mlxsw_sp_port,
|
|
struct kernel_hwtstamp_config *config);
|
|
|
|
int mlxsw_sp1_ptp_hwtstamp_set(struct mlxsw_sp_port *mlxsw_sp_port,
|
|
struct kernel_hwtstamp_config *config,
|
|
struct netlink_ext_ack *extack);
|
|
|
|
void mlxsw_sp1_ptp_shaper_work(struct work_struct *work);
|
|
|
|
int mlxsw_sp1_ptp_get_ts_info(struct mlxsw_sp *mlxsw_sp,
|
|
struct kernel_ethtool_ts_info *info);
|
|
|
|
int mlxsw_sp1_get_stats_count(void);
|
|
void mlxsw_sp1_get_stats_strings(u8 **p);
|
|
void mlxsw_sp1_get_stats(struct mlxsw_sp_port *mlxsw_sp_port,
|
|
u64 *data, int data_index);
|
|
|
|
struct mlxsw_sp_ptp_clock *
|
|
mlxsw_sp2_ptp_clock_init(struct mlxsw_sp *mlxsw_sp, struct device *dev);
|
|
|
|
void mlxsw_sp2_ptp_clock_fini(struct mlxsw_sp_ptp_clock *clock);
|
|
|
|
struct mlxsw_sp_ptp_state *mlxsw_sp2_ptp_init(struct mlxsw_sp *mlxsw_sp);
|
|
|
|
void mlxsw_sp2_ptp_fini(struct mlxsw_sp_ptp_state *ptp_state);
|
|
|
|
void mlxsw_sp2_ptp_receive(struct mlxsw_sp *mlxsw_sp, struct sk_buff *skb,
|
|
u16 local_port);
|
|
|
|
void mlxsw_sp2_ptp_transmitted(struct mlxsw_sp *mlxsw_sp,
|
|
struct sk_buff *skb, u16 local_port);
|
|
|
|
int mlxsw_sp2_ptp_hwtstamp_get(struct mlxsw_sp_port *mlxsw_sp_port,
|
|
struct kernel_hwtstamp_config *config);
|
|
|
|
int mlxsw_sp2_ptp_hwtstamp_set(struct mlxsw_sp_port *mlxsw_sp_port,
|
|
struct kernel_hwtstamp_config *config,
|
|
struct netlink_ext_ack *extack);
|
|
|
|
int mlxsw_sp2_ptp_get_ts_info(struct mlxsw_sp *mlxsw_sp,
|
|
struct kernel_ethtool_ts_info *info);
|
|
|
|
#else
|
|
|
|
static inline struct mlxsw_sp_ptp_clock *
|
|
mlxsw_sp1_ptp_clock_init(struct mlxsw_sp *mlxsw_sp, struct device *dev)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline void mlxsw_sp1_ptp_clock_fini(struct mlxsw_sp_ptp_clock *clock)
|
|
{
|
|
}
|
|
|
|
static inline struct mlxsw_sp_ptp_state *
|
|
mlxsw_sp1_ptp_init(struct mlxsw_sp *mlxsw_sp)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline void mlxsw_sp1_ptp_fini(struct mlxsw_sp_ptp_state *ptp_state)
|
|
{
|
|
}
|
|
|
|
static inline void mlxsw_sp1_ptp_receive(struct mlxsw_sp *mlxsw_sp,
|
|
struct sk_buff *skb, u16 local_port)
|
|
{
|
|
mlxsw_sp_rx_listener_no_mark_func(skb, local_port, mlxsw_sp);
|
|
}
|
|
|
|
static inline void mlxsw_sp1_ptp_transmitted(struct mlxsw_sp *mlxsw_sp,
|
|
struct sk_buff *skb, u16 local_port)
|
|
{
|
|
dev_kfree_skb_any(skb);
|
|
}
|
|
|
|
static inline void
|
|
mlxsw_sp1_ptp_got_timestamp(struct mlxsw_sp *mlxsw_sp, bool ingress,
|
|
u16 local_port, u8 message_type,
|
|
u8 domain_number,
|
|
u16 sequence_id, u64 timestamp)
|
|
{
|
|
}
|
|
|
|
static inline int
|
|
mlxsw_sp1_ptp_hwtstamp_get(struct mlxsw_sp_port *mlxsw_sp_port,
|
|
struct kernel_hwtstamp_config *config)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline int
|
|
mlxsw_sp1_ptp_hwtstamp_set(struct mlxsw_sp_port *mlxsw_sp_port,
|
|
struct kernel_hwtstamp_config *config,
|
|
struct netlink_ext_ack *extack)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline void mlxsw_sp1_ptp_shaper_work(struct work_struct *work)
|
|
{
|
|
}
|
|
|
|
static inline int mlxsw_sp1_get_stats_count(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void mlxsw_sp1_get_stats_strings(u8 **p)
|
|
{
|
|
}
|
|
|
|
static inline void mlxsw_sp1_get_stats(struct mlxsw_sp_port *mlxsw_sp_port,
|
|
u64 *data, int data_index)
|
|
{
|
|
}
|
|
|
|
static inline struct mlxsw_sp_ptp_clock *
|
|
mlxsw_sp2_ptp_clock_init(struct mlxsw_sp *mlxsw_sp, struct device *dev)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline void mlxsw_sp2_ptp_clock_fini(struct mlxsw_sp_ptp_clock *clock)
|
|
{
|
|
}
|
|
|
|
static inline struct mlxsw_sp_ptp_state *
|
|
mlxsw_sp2_ptp_init(struct mlxsw_sp *mlxsw_sp)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
static inline void mlxsw_sp2_ptp_fini(struct mlxsw_sp_ptp_state *ptp_state)
|
|
{
|
|
}
|
|
|
|
static inline void mlxsw_sp2_ptp_receive(struct mlxsw_sp *mlxsw_sp,
|
|
struct sk_buff *skb, u16 local_port)
|
|
{
|
|
mlxsw_sp_rx_listener_no_mark_func(skb, local_port, mlxsw_sp);
|
|
}
|
|
|
|
static inline void mlxsw_sp2_ptp_transmitted(struct mlxsw_sp *mlxsw_sp,
|
|
struct sk_buff *skb, u16 local_port)
|
|
{
|
|
dev_kfree_skb_any(skb);
|
|
}
|
|
|
|
static inline int
|
|
mlxsw_sp2_ptp_hwtstamp_get(struct mlxsw_sp_port *mlxsw_sp_port,
|
|
struct kernel_hwtstamp_config *config)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
|
|
static inline int
|
|
mlxsw_sp2_ptp_hwtstamp_set(struct mlxsw_sp_port *mlxsw_sp_port,
|
|
struct kernel_hwtstamp_config *config,
|
|
struct netlink_ext_ack *extack)
|
|
{
|
|
return -EOPNOTSUPP;
|
|
}
|
|
#endif
|
|
|
|
static inline void mlxsw_sp2_ptp_shaper_work(struct work_struct *work)
|
|
{
|
|
}
|
|
|
|
static inline int mlxsw_sp2_get_stats_count(void)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
static inline void mlxsw_sp2_get_stats_strings(u8 **p)
|
|
{
|
|
}
|
|
|
|
static inline void mlxsw_sp2_get_stats(struct mlxsw_sp_port *mlxsw_sp_port,
|
|
u64 *data, int data_index)
|
|
{
|
|
}
|
|
|
|
#endif
|