| /* SPDX-License-Identifier: GPL-2.0 */ |
| /* Microchip switch tag common header |
| * |
| * Copyright (C) 2022 Microchip Technology Inc. |
| */ |
| |
| #ifndef _NET_DSA_KSZ_COMMON_H_ |
| #define _NET_DSA_KSZ_COMMON_H_ |
| |
| #include <net/dsa.h> |
| |
| /* All time stamps from the KSZ consist of 2 bits for seconds and 30 bits for |
| * nanoseconds. This is NOT the same as 32 bits for nanoseconds. |
| */ |
| #define KSZ_TSTAMP_SEC_MASK GENMASK(31, 30) |
| #define KSZ_TSTAMP_NSEC_MASK GENMASK(29, 0) |
| |
| static inline ktime_t ksz_decode_tstamp(u32 tstamp) |
| { |
| u64 ns = FIELD_GET(KSZ_TSTAMP_SEC_MASK, tstamp) * NSEC_PER_SEC + |
| FIELD_GET(KSZ_TSTAMP_NSEC_MASK, tstamp); |
| |
| return ns_to_ktime(ns); |
| } |
| |
| struct ksz_deferred_xmit_work { |
| struct dsa_port *dp; |
| struct sk_buff *skb; |
| struct kthread_work work; |
| }; |
| |
| struct ksz_tagger_data { |
| void (*xmit_work_fn)(struct kthread_work *work); |
| void (*hwtstamp_set_state)(struct dsa_switch *ds, bool on); |
| }; |
| |
| struct ksz_skb_cb { |
| struct sk_buff *clone; |
| unsigned int ptp_type; |
| bool update_correction; |
| u32 tstamp; |
| }; |
| |
| #define KSZ_SKB_CB(skb) \ |
| ((struct ksz_skb_cb *)((skb)->cb)) |
| |
| static inline struct ksz_tagger_data * |
| ksz_tagger_data(struct dsa_switch *ds) |
| { |
| return ds->tagger_data; |
| } |
| |
| #endif /* _NET_DSA_KSZ_COMMON_H_ */ |