Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / drivers / staging / fsl-dpaa2 / ethsw / ethsw.h
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 #define ETHSW_VLAN_MEMBER       1
27 #define ETHSW_VLAN_UNTAGGED     2
28 #define ETHSW_VLAN_PVID         4
29 #define ETHSW_VLAN_GLOBAL       8
30
31 /* Maximum Frame Length supported by HW (currently 10k) */
32 #define DPAA2_MFL               (10 * 1024)
33 #define ETHSW_MAX_FRAME_LENGTH  (DPAA2_MFL - VLAN_ETH_HLEN - ETH_FCS_LEN)
34 #define ETHSW_L2_MAX_FRM(mtu)   ((mtu) + VLAN_ETH_HLEN + ETH_FCS_LEN)
35
36 extern const struct ethtool_ops ethsw_port_ethtool_ops;
37
38 struct ethsw_core;
39
40 /* Per port private data */
41 struct ethsw_port_priv {
42         struct net_device       *netdev;
43         u16                     idx;
44         struct ethsw_core       *ethsw_data;
45         u8                      link_state;
46         u8                      stp_state;
47         bool                    flood;
48
49         u8                      vlans[VLAN_VID_MASK + 1];
50         u16                     pvid;
51         struct net_device       *bridge_dev;
52 };
53
54 /* Switch data */
55 struct ethsw_core {
56         struct device                   *dev;
57         struct fsl_mc_io                *mc_io;
58         u16                             dpsw_handle;
59         struct dpsw_attr                sw_attr;
60         int                             dev_id;
61         struct ethsw_port_priv          **ports;
62
63         u8                              vlans[VLAN_VID_MASK + 1];
64         bool                            learning;
65 };
66
67 #endif  /* __ETHSW_H */