1 | /* SPDX-License-Identifier: GPL-2.0 |
2 | * Copyright (c) 2019, Vladimir Oltean <olteanv@gmail.com> |
3 | */ |
4 | |
5 | /* Included by drivers/net/dsa/sja1105/sja1105.h and net/dsa/tag_sja1105.c */ |
6 | |
7 | #ifndef _NET_DSA_SJA1105_H |
8 | #define _NET_DSA_SJA1105_H |
9 | |
10 | #include <linux/skbuff.h> |
11 | #include <linux/etherdevice.h> |
12 | #include <linux/dsa/8021q.h> |
13 | #include <net/dsa.h> |
14 | |
15 | #define ETH_P_SJA1105 ETH_P_DSA_8021Q |
16 | #define ETH_P_SJA1105_META 0x0008 |
17 | #define ETH_P_SJA1110 0xdadc |
18 | |
19 | #define SJA1105_DEFAULT_VLAN (VLAN_N_VID - 1) |
20 | |
21 | /* IEEE 802.3 Annex 57A: Slow Protocols PDUs (01:80:C2:xx:xx:xx) */ |
22 | #define SJA1105_LINKLOCAL_FILTER_A 0x0180C2000000ull |
23 | #define SJA1105_LINKLOCAL_FILTER_A_MASK 0xFFFFFF000000ull |
24 | /* IEEE 1588 Annex F: Transport of PTP over Ethernet (01:1B:19:xx:xx:xx) */ |
25 | #define SJA1105_LINKLOCAL_FILTER_B 0x011B19000000ull |
26 | #define SJA1105_LINKLOCAL_FILTER_B_MASK 0xFFFFFF000000ull |
27 | |
28 | /* Source and Destination MAC of follow-up meta frames. |
29 | * Whereas the choice of SMAC only affects the unique identification of the |
30 | * switch as sender of meta frames, the DMAC must be an address that is present |
31 | * in the DSA conduit port's multicast MAC filter. |
32 | * 01-80-C2-00-00-0E is a good choice for this, as all profiles of IEEE 1588 |
33 | * over L2 use this address for some purpose already. |
34 | */ |
35 | #define SJA1105_META_SMAC 0x222222222222ull |
36 | #define SJA1105_META_DMAC 0x0180C200000Eull |
37 | |
38 | enum sja1110_meta_tstamp { |
39 | SJA1110_META_TSTAMP_TX = 0, |
40 | SJA1110_META_TSTAMP_RX = 1, |
41 | }; |
42 | |
43 | struct sja1105_deferred_xmit_work { |
44 | struct dsa_port *dp; |
45 | struct sk_buff *skb; |
46 | struct kthread_work work; |
47 | }; |
48 | |
49 | /* Global tagger data */ |
50 | struct sja1105_tagger_data { |
51 | void (*xmit_work_fn)(struct kthread_work *work); |
52 | void (*meta_tstamp_handler)(struct dsa_switch *ds, int port, u8 ts_id, |
53 | enum sja1110_meta_tstamp dir, u64 tstamp); |
54 | }; |
55 | |
56 | struct sja1105_skb_cb { |
57 | struct sk_buff *clone; |
58 | u64 tstamp; |
59 | /* Only valid for packets cloned for 2-step TX timestamping */ |
60 | u8 ts_id; |
61 | }; |
62 | |
63 | #define SJA1105_SKB_CB(skb) \ |
64 | ((struct sja1105_skb_cb *)((skb)->cb)) |
65 | |
66 | static inline struct sja1105_tagger_data * |
67 | sja1105_tagger_data(struct dsa_switch *ds) |
68 | { |
69 | BUG_ON(ds->dst->tag_ops->proto != DSA_TAG_PROTO_SJA1105 && |
70 | ds->dst->tag_ops->proto != DSA_TAG_PROTO_SJA1110); |
71 | |
72 | return ds->tagger_data; |
73 | } |
74 | |
75 | #endif /* _NET_DSA_SJA1105_H */ |
76 | |