1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * DPAA2 Ethernet Switch declarations
4  *
5  * Copyright 2014-2016 Freescale Semiconductor Inc.
6  * Copyright 2017-2018 NXP
7  *
8  */
9 
10 #ifndef __ETHSW_H
11 #define __ETHSW_H
12 
13 #include <linux/netdevice.h>
14 #include <linux/etherdevice.h>
15 #include <linux/rtnetlink.h>
16 #include <linux/if_vlan.h>
17 #include <uapi/linux/if_bridge.h>
18 #include <net/switchdev.h>
19 #include <linux/if_bridge.h>
20 
21 #include "dpsw.h"
22 
23 /* Number of IRQs supported */
24 #define DPSW_IRQ_NUM	2
25 
26 /* Port is member of VLAN */
27 #define ETHSW_VLAN_MEMBER	1
28 /* VLAN to be treated as untagged on egress */
29 #define ETHSW_VLAN_UNTAGGED	2
30 /* Untagged frames will be assigned to this VLAN */
31 #define ETHSW_VLAN_PVID		4
32 /* VLAN configured on the switch */
33 #define ETHSW_VLAN_GLOBAL	8
34 
35 /* Maximum Frame Length supported by HW (currently 10k) */
36 #define DPAA2_MFL		(10 * 1024)
37 #define ETHSW_MAX_FRAME_LENGTH	(DPAA2_MFL - VLAN_ETH_HLEN - ETH_FCS_LEN)
38 #define ETHSW_L2_MAX_FRM(mtu)	((mtu) + VLAN_ETH_HLEN + ETH_FCS_LEN)
39 
40 #define ETHSW_FEATURE_MAC_ADDR	BIT(0)
41 
42 extern const struct ethtool_ops dpaa2_switch_port_ethtool_ops;
43 
44 struct ethsw_core;
45 
46 /* Per port private data */
47 struct ethsw_port_priv {
48 	struct net_device	*netdev;
49 	u16			idx;
50 	struct ethsw_core	*ethsw_data;
51 	u8			link_state;
52 	u8			stp_state;
53 	bool			flood;
54 
55 	u8			vlans[VLAN_VID_MASK + 1];
56 	u16			pvid;
57 	struct net_device	*bridge_dev;
58 };
59 
60 /* Switch data */
61 struct ethsw_core {
62 	struct device			*dev;
63 	struct fsl_mc_io		*mc_io;
64 	u16				dpsw_handle;
65 	struct dpsw_attr		sw_attr;
66 	u16				major, minor;
67 	unsigned long			features;
68 	int				dev_id;
69 	struct ethsw_port_priv		**ports;
70 
71 	u8				vlans[VLAN_VID_MASK + 1];
72 	bool				learning;
73 
74 	struct notifier_block		port_nb;
75 	struct notifier_block		port_switchdev_nb;
76 	struct notifier_block		port_switchdevb_nb;
77 	struct workqueue_struct		*workqueue;
78 };
79 
80 #endif	/* __ETHSW_H */
81