]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - drivers/net/ethernet/mellanox/mlxsw/spectrum.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[mirror_ubuntu-artful-kernel.git] / drivers / net / ethernet / mellanox / mlxsw / spectrum.h
index 463ed6dcc7099f684f57b6d703688a7cff71b8dd..a23dc610d2593aedce974eddf94789d3aaf181a6 100644 (file)
@@ -44,6 +44,7 @@
 #include <linux/list.h>
 #include <net/switchdev.h>
 
+#include "port.h"
 #include "core.h"
 
 #define MLXSW_SP_VFID_BASE VLAN_N_VID
@@ -54,6 +55,8 @@
 #define MLXSW_SP_LAG_MAX 64
 #define MLXSW_SP_PORT_PER_LAG_MAX 16
 
+#define MLXSW_SP_MID_MAX 7000
+
 struct mlxsw_sp_port;
 
 struct mlxsw_sp_upper {
@@ -69,6 +72,14 @@ struct mlxsw_sp_vfid {
        u16 vid;
 };
 
+struct mlxsw_sp_mid {
+       struct list_head list;
+       unsigned char addr[ETH_ALEN];
+       u16 vid;
+       u16 mid;
+       unsigned int ref_count;
+};
+
 static inline u16 mlxsw_sp_vfid_to_fid(u16 vfid)
 {
        return MLXSW_SP_VFID_BASE + vfid;
@@ -93,6 +104,10 @@ struct mlxsw_sp {
                struct list_head list;
                unsigned long mapped[BITS_TO_LONGS(MLXSW_SP_VFID_BR_MAX)];
        } br_vfids;
+       struct {
+               struct list_head list;
+               unsigned long mapped[BITS_TO_LONGS(MLXSW_SP_MID_MAX)];
+       } br_mids;
        unsigned long active_fids[BITS_TO_LONGS(VLAN_N_VID)];
        struct mlxsw_sp_port **ports;
        struct mlxsw_core *core;
@@ -105,6 +120,7 @@ struct mlxsw_sp {
        } fdb_notify;
 #define MLXSW_SP_DEFAULT_AGEING_TIME 300
        u32 ageing_time;
+       struct mutex fdb_lock;  /* Make sure FDB sessions are atomic. */
        struct mlxsw_sp_upper master_bridge;
        struct mlxsw_sp_upper lags[MLXSW_SP_LAG_MAX];
 };
@@ -144,6 +160,7 @@ struct mlxsw_sp_port {
        } vport;
        /* 802.1Q bridge VLANs */
        unsigned long *active_vlans;
+       unsigned long *untagged_vlans;
        /* VLAN interfaces */
        struct list_head vports_list;
 };