/* SPDX-License-Identifier: GPL-2.0 */
|
/*
|
* DPAA2 Ethernet Switch declarations
|
*
|
* Copyright 2014-2016 Freescale Semiconductor Inc.
|
* Copyright 2017-2018 NXP
|
*
|
*/
|
|
#ifndef __ETHSW_H
|
#define __ETHSW_H
|
|
#include <linux/netdevice.h>
|
#include <linux/etherdevice.h>
|
#include <linux/rtnetlink.h>
|
#include <linux/if_vlan.h>
|
#include <uapi/linux/if_bridge.h>
|
#include <net/switchdev.h>
|
#include <linux/if_bridge.h>
|
|
#include "dpsw.h"
|
|
/* Number of IRQs supported */
|
#define DPSW_IRQ_NUM 2
|
|
/* Port is member of VLAN */
|
#define ETHSW_VLAN_MEMBER 1
|
/* VLAN to be treated as untagged on egress */
|
#define ETHSW_VLAN_UNTAGGED 2
|
/* Untagged frames will be assigned to this VLAN */
|
#define ETHSW_VLAN_PVID 4
|
/* VLAN configured on the switch */
|
#define ETHSW_VLAN_GLOBAL 8
|
|
/* Maximum Frame Length supported by HW (currently 10k) */
|
#define DPAA2_MFL (10 * 1024)
|
#define ETHSW_MAX_FRAME_LENGTH (DPAA2_MFL - VLAN_ETH_HLEN - ETH_FCS_LEN)
|
#define ETHSW_L2_MAX_FRM(mtu) ((mtu) + VLAN_ETH_HLEN + ETH_FCS_LEN)
|
|
#define ETHSW_FEATURE_MAC_ADDR BIT(0)
|
|
extern const struct ethtool_ops dpaa2_switch_port_ethtool_ops;
|
|
struct ethsw_core;
|
|
/* Per port private data */
|
struct ethsw_port_priv {
|
struct net_device *netdev;
|
u16 idx;
|
struct ethsw_core *ethsw_data;
|
u8 link_state;
|
u8 stp_state;
|
bool flood;
|
|
u8 vlans[VLAN_VID_MASK + 1];
|
u16 pvid;
|
struct net_device *bridge_dev;
|
};
|
|
/* Switch data */
|
struct ethsw_core {
|
struct device *dev;
|
struct fsl_mc_io *mc_io;
|
u16 dpsw_handle;
|
struct dpsw_attr sw_attr;
|
u16 major, minor;
|
unsigned long features;
|
int dev_id;
|
struct ethsw_port_priv **ports;
|
|
u8 vlans[VLAN_VID_MASK + 1];
|
bool learning;
|
|
struct notifier_block port_nb;
|
struct notifier_block port_switchdev_nb;
|
struct notifier_block port_switchdevb_nb;
|
struct workqueue_struct *workqueue;
|
};
|
|
#endif /* __ETHSW_H */
|