1 /* SPDX-License-Identifier: (GPL-2.0 OR MIT) */ 2 /* 3 * Microsemi Ocelot Switch driver 4 * 5 * Copyright (c) 2017 Microsemi Corporation 6 */ 7 8 #ifndef _MSCC_OCELOT_H_ 9 #define _MSCC_OCELOT_H_ 10 11 #include <linux/bitops.h> 12 #include <linux/etherdevice.h> 13 #include <linux/if_vlan.h> 14 #include <linux/net_tstamp.h> 15 #include <linux/phy.h> 16 #include <linux/phy/phy.h> 17 #include <linux/platform_device.h> 18 #include <linux/ptp_clock_kernel.h> 19 #include <linux/regmap.h> 20 21 #include <soc/mscc/ocelot_qsys.h> 22 #include <soc/mscc/ocelot_sys.h> 23 #include <soc/mscc/ocelot_dev.h> 24 #include <soc/mscc/ocelot_ana.h> 25 #include <soc/mscc/ocelot.h> 26 #include "ocelot_rew.h" 27 #include "ocelot_qs.h" 28 #include "ocelot_tc.h" 29 #include "ocelot_ptp.h" 30 31 #define PGID_AGGR 64 32 #define PGID_SRC 80 33 34 /* Reserved PGIDs */ 35 #define PGID_CPU (PGID_AGGR - 5) 36 #define PGID_UC (PGID_AGGR - 4) 37 #define PGID_MC (PGID_AGGR - 3) 38 #define PGID_MCIPV4 (PGID_AGGR - 2) 39 #define PGID_MCIPV6 (PGID_AGGR - 1) 40 41 #define OCELOT_BUFFER_CELL_SZ 60 42 43 #define OCELOT_STATS_CHECK_DELAY (2 * HZ) 44 45 #define OCELOT_PTP_QUEUE_SZ 128 46 47 struct frame_info { 48 u32 len; 49 u16 port; 50 u16 vid; 51 u8 tag_type; 52 u16 rew_op; 53 u32 timestamp; /* rew_val */ 54 }; 55 56 struct ocelot_multicast { 57 struct list_head list; 58 unsigned char addr[ETH_ALEN]; 59 u16 vid; 60 u16 ports; 61 }; 62 63 struct ocelot_port_private { 64 struct ocelot_port port; 65 struct net_device *dev; 66 struct phy_device *phy; 67 u8 chip_port; 68 69 u8 vlan_aware; 70 71 struct phy *serdes; 72 73 struct ocelot_port_tc tc; 74 }; 75 76 u32 ocelot_port_readl(struct ocelot_port *port, u32 reg); 77 void ocelot_port_writel(struct ocelot_port *port, u32 val, u32 reg); 78 79 #define ocelot_field_write(ocelot, reg, val) regmap_field_write((ocelot)->regfields[(reg)], (val)) 80 #define ocelot_field_read(ocelot, reg, val) regmap_field_read((ocelot)->regfields[(reg)], (val)) 81 82 int ocelot_chip_init(struct ocelot *ocelot, const struct ocelot_ops *ops); 83 int ocelot_probe_port(struct ocelot *ocelot, u8 port, 84 void __iomem *regs, 85 struct phy_device *phy); 86 87 void ocelot_set_cpu_port(struct ocelot *ocelot, int cpu, 88 enum ocelot_tag_prefix injection, 89 enum ocelot_tag_prefix extraction); 90 91 extern struct notifier_block ocelot_netdevice_nb; 92 extern struct notifier_block ocelot_switchdev_nb; 93 extern struct notifier_block ocelot_switchdev_blocking_nb; 94 95 #define ocelot_field_write(ocelot, reg, val) regmap_field_write((ocelot)->regfields[(reg)], (val)) 96 #define ocelot_field_read(ocelot, reg, val) regmap_field_read((ocelot)->regfields[(reg)], (val)) 97 98 #endif 99