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 36extern const struct ethtool_ops ethsw_port_ethtool_ops; 37 38struct ethsw_core; 39 40/* Per port private data */ 41struct 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 */ 55struct 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 */ 68