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_sys.h> 22 #include <soc/mscc/ocelot.h> 23 #include "ocelot_ana.h" 24 #include "ocelot_dev.h" 25 #include "ocelot_qsys.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 phy_interface_t phy_mode; 72 struct phy *serdes; 73 74 struct ocelot_port_tc tc; 75 }; 76 77 u32 ocelot_port_readl(struct ocelot_port *port, u32 reg); 78 void ocelot_port_writel(struct ocelot_port *port, u32 val, u32 reg); 79 80 #define ocelot_field_write(ocelot, reg, val) regmap_field_write((ocelot)->regfields[(reg)], (val)) 81 #define ocelot_field_read(ocelot, reg, val) regmap_field_read((ocelot)->regfields[(reg)], (val)) 82 83 int ocelot_chip_init(struct ocelot *ocelot, const struct ocelot_ops *ops); 84 int ocelot_probe_port(struct ocelot *ocelot, u8 port, 85 void __iomem *regs, 86 struct phy_device *phy); 87 88 void ocelot_set_cpu_port(struct ocelot *ocelot, int cpu, 89 enum ocelot_tag_prefix injection, 90 enum ocelot_tag_prefix extraction); 91 92 extern struct notifier_block ocelot_netdevice_nb; 93 extern struct notifier_block ocelot_switchdev_nb; 94 extern struct notifier_block ocelot_switchdev_blocking_nb; 95 96 #define ocelot_field_write(ocelot, reg, val) regmap_field_write((ocelot)->regfields[(reg)], (val)) 97 #define ocelot_field_read(ocelot, reg, val) regmap_field_read((ocelot)->regfields[(reg)], (val)) 98 99 #endif 100