mt76: mt7663: introduce coredump support
[linux-2.6-microblaze.git] / include / linux / dsa / 8021q.h
1 /* SPDX-License-Identifier: GPL-2.0
2  * Copyright (c) 2019, Vladimir Oltean <olteanv@gmail.com>
3  */
4
5 #ifndef _NET_DSA_8021Q_H
6 #define _NET_DSA_8021Q_H
7
8 #include <linux/refcount.h>
9 #include <linux/types.h>
10
11 struct dsa_switch;
12 struct sk_buff;
13 struct net_device;
14 struct packet_type;
15 struct dsa_8021q_context;
16
17 struct dsa_8021q_crosschip_link {
18         struct list_head list;
19         int port;
20         struct dsa_8021q_context *other_ctx;
21         int other_port;
22         refcount_t refcount;
23 };
24
25 struct dsa_8021q_ops {
26         int (*vlan_add)(struct dsa_switch *ds, int port, u16 vid, u16 flags);
27         int (*vlan_del)(struct dsa_switch *ds, int port, u16 vid);
28 };
29
30 struct dsa_8021q_context {
31         const struct dsa_8021q_ops *ops;
32         struct dsa_switch *ds;
33         struct list_head crosschip_links;
34         /* EtherType of RX VID, used for filtering on master interface */
35         __be16 proto;
36 };
37
38 #define DSA_8021Q_N_SUBVLAN                     8
39
40 #if IS_ENABLED(CONFIG_NET_DSA_TAG_8021Q)
41
42 int dsa_8021q_setup(struct dsa_8021q_context *ctx, bool enabled);
43
44 int dsa_8021q_crosschip_bridge_join(struct dsa_8021q_context *ctx, int port,
45                                     struct dsa_8021q_context *other_ctx,
46                                     int other_port);
47
48 int dsa_8021q_crosschip_bridge_leave(struct dsa_8021q_context *ctx, int port,
49                                      struct dsa_8021q_context *other_ctx,
50                                      int other_port);
51
52 struct sk_buff *dsa_8021q_xmit(struct sk_buff *skb, struct net_device *netdev,
53                                u16 tpid, u16 tci);
54
55 u16 dsa_8021q_tx_vid(struct dsa_switch *ds, int port);
56
57 u16 dsa_8021q_rx_vid(struct dsa_switch *ds, int port);
58
59 u16 dsa_8021q_rx_vid_subvlan(struct dsa_switch *ds, int port, u16 subvlan);
60
61 int dsa_8021q_rx_switch_id(u16 vid);
62
63 int dsa_8021q_rx_source_port(u16 vid);
64
65 u16 dsa_8021q_rx_subvlan(u16 vid);
66
67 bool vid_is_dsa_8021q(u16 vid);
68
69 #else
70
71 int dsa_8021q_setup(struct dsa_8021q_context *ctx, bool enabled)
72 {
73         return 0;
74 }
75
76 int dsa_8021q_crosschip_bridge_join(struct dsa_8021q_context *ctx, int port,
77                                     struct dsa_8021q_context *other_ctx,
78                                     int other_port)
79 {
80         return 0;
81 }
82
83 int dsa_8021q_crosschip_bridge_leave(struct dsa_8021q_context *ctx, int port,
84                                      struct dsa_8021q_context *other_ctx,
85                                      int other_port)
86 {
87         return 0;
88 }
89
90 struct sk_buff *dsa_8021q_xmit(struct sk_buff *skb, struct net_device *netdev,
91                                u16 tpid, u16 tci)
92 {
93         return NULL;
94 }
95
96 u16 dsa_8021q_tx_vid(struct dsa_switch *ds, int port)
97 {
98         return 0;
99 }
100
101 u16 dsa_8021q_rx_vid(struct dsa_switch *ds, int port)
102 {
103         return 0;
104 }
105
106 u16 dsa_8021q_rx_vid_subvlan(struct dsa_switch *ds, int port, u16 subvlan)
107 {
108         return 0;
109 }
110
111 int dsa_8021q_rx_switch_id(u16 vid)
112 {
113         return 0;
114 }
115
116 int dsa_8021q_rx_source_port(u16 vid)
117 {
118         return 0;
119 }
120
121 u16 dsa_8021q_rx_subvlan(u16 vid)
122 {
123         return 0;
124 }
125
126 bool vid_is_dsa_8021q(u16 vid)
127 {
128         return false;
129 }
130
131 #endif /* IS_ENABLED(CONFIG_NET_DSA_TAG_8021Q) */
132
133 #endif /* _NET_DSA_8021Q_H */