1 /* 2 * include/net/dsa.h - Driver for Distributed Switch Architecture switch chips 3 * Copyright (c) 2008-2009 Marvell Semiconductor 4 * 5 * This program is free software; you can redistribute it and/or modify 6 * it under the terms of the GNU General Public License as published by 7 * the Free Software Foundation; either version 2 of the License, or 8 * (at your option) any later version. 9 */ 10 11 #ifndef __LINUX_NET_DSA_H 12 #define __LINUX_NET_DSA_H 13 14 #include <linux/if.h> 15 #include <linux/if_ether.h> 16 #include <linux/list.h> 17 #include <linux/notifier.h> 18 #include <linux/timer.h> 19 #include <linux/workqueue.h> 20 #include <linux/of.h> 21 #include <linux/ethtool.h> 22 #include <linux/net_tstamp.h> 23 #include <linux/phy.h> 24 #include <linux/platform_data/dsa.h> 25 #include <net/devlink.h> 26 #include <net/switchdev.h> 27 28 struct tc_action; 29 struct phy_device; 30 struct fixed_phy_status; 31 struct phylink_link_state; 32 33 enum dsa_tag_protocol { 34 DSA_TAG_PROTO_NONE = 0, 35 DSA_TAG_PROTO_BRCM, 36 DSA_TAG_PROTO_BRCM_PREPEND, 37 DSA_TAG_PROTO_DSA, 38 DSA_TAG_PROTO_EDSA, 39 DSA_TAG_PROTO_GSWIP, 40 DSA_TAG_PROTO_KSZ9477, 41 DSA_TAG_PROTO_KSZ9893, 42 DSA_TAG_PROTO_LAN9303, 43 DSA_TAG_PROTO_MTK, 44 DSA_TAG_PROTO_QCA, 45 DSA_TAG_PROTO_TRAILER, 46 DSA_TAG_LAST, /* MUST BE LAST */ 47 }; 48 49 struct packet_type; 50 struct dsa_switch; 51 52 struct dsa_device_ops { 53 struct sk_buff *(*xmit)(struct sk_buff *skb, struct net_device *dev); 54 struct sk_buff *(*rcv)(struct sk_buff *skb, struct net_device *dev, 55 struct packet_type *pt); 56 int (*flow_dissect)(const struct sk_buff *skb, __be16 *proto, 57 int *offset); 58 unsigned int overhead; 59 }; 60 61 struct dsa_switch_tree { 62 struct list_head list; 63 64 /* Notifier chain for switch-wide events */ 65 struct raw_notifier_head nh; 66 67 /* Tree identifier */ 68 unsigned int index; 69 70 /* Number of switches attached to this tree */ 71 struct kref refcount; 72 73 /* Has this tree been applied to the hardware? */ 74 bool setup; 75 76 /* 77 * Configuration data for the platform device that owns 78 * this dsa switch tree instance. 79 */ 80 struct dsa_platform_data *pd; 81 82 /* 83 * The switch port to which the CPU is attached. 84 */ 85 struct dsa_port *cpu_dp; 86 87 /* 88 * Data for the individual switch chips. 89 */ 90 struct dsa_switch *ds[DSA_MAX_SWITCHES]; 91 }; 92 93 /* TC matchall action types, only mirroring for now */ 94 enum dsa_port_mall_action_type { 95 DSA_PORT_MALL_MIRROR, 96 }; 97 98 /* TC mirroring entry */ 99 struct dsa_mall_mirror_tc_entry { 100 u8 to_local_port; 101 bool ingress; 102 }; 103 104 /* TC matchall entry */ 105 struct dsa_mall_tc_entry { 106 struct list_head list; 107 unsigned long cookie; 108 enum dsa_port_mall_action_type type; 109 union { 110 struct dsa_mall_mirror_tc_entry mirror; 111 }; 112 }; 113 114 115 struct dsa_port { 116 /* A CPU port is physically connected to a master device. 117 * A user port exposed to userspace has a slave device. 118 */ 119 union { 120 struct net_device *master; 121 struct net_device *slave; 122 }; 123 124 /* CPU port tagging operations used by master or slave devices */ 125 const struct dsa_device_ops *tag_ops; 126 127 /* Copies for faster access in master receive hot path */ 128 struct dsa_switch_tree *dst; 129 struct sk_buff *(*rcv)(struct sk_buff *skb, struct net_device *dev, 130 struct packet_type *pt); 131 132 enum { 133 DSA_PORT_TYPE_UNUSED = 0, 134 DSA_PORT_TYPE_CPU, 135 DSA_PORT_TYPE_DSA, 136 DSA_PORT_TYPE_USER, 137 } type; 138 139 struct dsa_switch *ds; 140 unsigned int index; 141 const char *name; 142 const struct dsa_port *cpu_dp; 143 const char *mac; 144 struct device_node *dn; 145 unsigned int ageing_time; 146 u8 stp_state; 147 struct net_device *bridge_dev; 148 struct devlink_port devlink_port; 149 struct phylink *pl; 150 /* 151 * Original copy of the master netdev ethtool_ops 152 */ 153 const struct ethtool_ops *orig_ethtool_ops; 154 155 /* 156 * Original copy of the master netdev net_device_ops 157 */ 158 const struct net_device_ops *orig_ndo_ops; 159 }; 160 161 struct dsa_switch { 162 struct device *dev; 163 164 /* 165 * Parent switch tree, and switch index. 166 */ 167 struct dsa_switch_tree *dst; 168 unsigned int index; 169 170 /* Listener for switch fabric events */ 171 struct notifier_block nb; 172 173 /* 174 * Give the switch driver somewhere to hang its private data 175 * structure. 176 */ 177 void *priv; 178 179 /* 180 * Configuration data for this switch. 181 */ 182 struct dsa_chip_data *cd; 183 184 /* 185 * The switch operations. 186 */ 187 const struct dsa_switch_ops *ops; 188 189 /* 190 * An array of which element [a] indicates which port on this 191 * switch should be used to send packets to that are destined 192 * for switch a. Can be NULL if there is only one switch chip. 193 */ 194 s8 rtable[DSA_MAX_SWITCHES]; 195 196 /* 197 * Slave mii_bus and devices for the individual ports. 198 */ 199 u32 phys_mii_mask; 200 struct mii_bus *slave_mii_bus; 201 202 /* Ageing Time limits in msecs */ 203 unsigned int ageing_time_min; 204 unsigned int ageing_time_max; 205 206 /* devlink used to represent this switch device */ 207 struct devlink *devlink; 208 209 /* Number of switch port queues */ 210 unsigned int num_tx_queues; 211 212 unsigned long *bitmap; 213 unsigned long _bitmap; 214 215 /* Dynamically allocated ports, keep last */ 216 size_t num_ports; 217 struct dsa_port ports[]; 218 }; 219 220 static inline const struct dsa_port *dsa_to_port(struct dsa_switch *ds, int p) 221 { 222 return &ds->ports[p]; 223 } 224 225 static inline bool dsa_is_unused_port(struct dsa_switch *ds, int p) 226 { 227 return dsa_to_port(ds, p)->type == DSA_PORT_TYPE_UNUSED; 228 } 229 230 static inline bool dsa_is_cpu_port(struct dsa_switch *ds, int p) 231 { 232 return dsa_to_port(ds, p)->type == DSA_PORT_TYPE_CPU; 233 } 234 235 static inline bool dsa_is_dsa_port(struct dsa_switch *ds, int p) 236 { 237 return dsa_to_port(ds, p)->type == DSA_PORT_TYPE_DSA; 238 } 239 240 static inline bool dsa_is_user_port(struct dsa_switch *ds, int p) 241 { 242 return dsa_to_port(ds, p)->type == DSA_PORT_TYPE_USER; 243 } 244 245 static inline u32 dsa_user_ports(struct dsa_switch *ds) 246 { 247 u32 mask = 0; 248 int p; 249 250 for (p = 0; p < ds->num_ports; p++) 251 if (dsa_is_user_port(ds, p)) 252 mask |= BIT(p); 253 254 return mask; 255 } 256 257 /* Return the local port used to reach an arbitrary switch port */ 258 static inline unsigned int dsa_towards_port(struct dsa_switch *ds, int device, 259 int port) 260 { 261 if (device == ds->index) 262 return port; 263 else 264 return ds->rtable[device]; 265 } 266 267 /* Return the local port used to reach the dedicated CPU port */ 268 static inline unsigned int dsa_upstream_port(struct dsa_switch *ds, int port) 269 { 270 const struct dsa_port *dp = dsa_to_port(ds, port); 271 const struct dsa_port *cpu_dp = dp->cpu_dp; 272 273 if (!cpu_dp) 274 return port; 275 276 return dsa_towards_port(ds, cpu_dp->ds->index, cpu_dp->index); 277 } 278 279 typedef int dsa_fdb_dump_cb_t(const unsigned char *addr, u16 vid, 280 bool is_static, void *data); 281 struct dsa_switch_ops { 282 #if IS_ENABLED(CONFIG_NET_DSA_LEGACY) 283 /* 284 * Legacy probing. 285 */ 286 const char *(*probe)(struct device *dsa_dev, 287 struct device *host_dev, int sw_addr, 288 void **priv); 289 #endif 290 291 enum dsa_tag_protocol (*get_tag_protocol)(struct dsa_switch *ds, 292 int port); 293 294 int (*setup)(struct dsa_switch *ds); 295 u32 (*get_phy_flags)(struct dsa_switch *ds, int port); 296 297 /* 298 * Access to the switch's PHY registers. 299 */ 300 int (*phy_read)(struct dsa_switch *ds, int port, int regnum); 301 int (*phy_write)(struct dsa_switch *ds, int port, 302 int regnum, u16 val); 303 304 /* 305 * Link state adjustment (called from libphy) 306 */ 307 void (*adjust_link)(struct dsa_switch *ds, int port, 308 struct phy_device *phydev); 309 void (*fixed_link_update)(struct dsa_switch *ds, int port, 310 struct fixed_phy_status *st); 311 312 /* 313 * PHYLINK integration 314 */ 315 void (*phylink_validate)(struct dsa_switch *ds, int port, 316 unsigned long *supported, 317 struct phylink_link_state *state); 318 int (*phylink_mac_link_state)(struct dsa_switch *ds, int port, 319 struct phylink_link_state *state); 320 void (*phylink_mac_config)(struct dsa_switch *ds, int port, 321 unsigned int mode, 322 const struct phylink_link_state *state); 323 void (*phylink_mac_an_restart)(struct dsa_switch *ds, int port); 324 void (*phylink_mac_link_down)(struct dsa_switch *ds, int port, 325 unsigned int mode, 326 phy_interface_t interface); 327 void (*phylink_mac_link_up)(struct dsa_switch *ds, int port, 328 unsigned int mode, 329 phy_interface_t interface, 330 struct phy_device *phydev); 331 void (*phylink_fixed_state)(struct dsa_switch *ds, int port, 332 struct phylink_link_state *state); 333 /* 334 * ethtool hardware statistics. 335 */ 336 void (*get_strings)(struct dsa_switch *ds, int port, 337 u32 stringset, uint8_t *data); 338 void (*get_ethtool_stats)(struct dsa_switch *ds, 339 int port, uint64_t *data); 340 int (*get_sset_count)(struct dsa_switch *ds, int port, int sset); 341 void (*get_ethtool_phy_stats)(struct dsa_switch *ds, 342 int port, uint64_t *data); 343 344 /* 345 * ethtool Wake-on-LAN 346 */ 347 void (*get_wol)(struct dsa_switch *ds, int port, 348 struct ethtool_wolinfo *w); 349 int (*set_wol)(struct dsa_switch *ds, int port, 350 struct ethtool_wolinfo *w); 351 352 /* 353 * ethtool timestamp info 354 */ 355 int (*get_ts_info)(struct dsa_switch *ds, int port, 356 struct ethtool_ts_info *ts); 357 358 /* 359 * Suspend and resume 360 */ 361 int (*suspend)(struct dsa_switch *ds); 362 int (*resume)(struct dsa_switch *ds); 363 364 /* 365 * Port enable/disable 366 */ 367 int (*port_enable)(struct dsa_switch *ds, int port, 368 struct phy_device *phy); 369 void (*port_disable)(struct dsa_switch *ds, int port); 370 371 /* 372 * Port's MAC EEE settings 373 */ 374 int (*set_mac_eee)(struct dsa_switch *ds, int port, 375 struct ethtool_eee *e); 376 int (*get_mac_eee)(struct dsa_switch *ds, int port, 377 struct ethtool_eee *e); 378 379 /* EEPROM access */ 380 int (*get_eeprom_len)(struct dsa_switch *ds); 381 int (*get_eeprom)(struct dsa_switch *ds, 382 struct ethtool_eeprom *eeprom, u8 *data); 383 int (*set_eeprom)(struct dsa_switch *ds, 384 struct ethtool_eeprom *eeprom, u8 *data); 385 386 /* 387 * Register access. 388 */ 389 int (*get_regs_len)(struct dsa_switch *ds, int port); 390 void (*get_regs)(struct dsa_switch *ds, int port, 391 struct ethtool_regs *regs, void *p); 392 393 /* 394 * Bridge integration 395 */ 396 int (*set_ageing_time)(struct dsa_switch *ds, unsigned int msecs); 397 int (*port_bridge_join)(struct dsa_switch *ds, int port, 398 struct net_device *bridge); 399 void (*port_bridge_leave)(struct dsa_switch *ds, int port, 400 struct net_device *bridge); 401 void (*port_stp_state_set)(struct dsa_switch *ds, int port, 402 u8 state); 403 void (*port_fast_age)(struct dsa_switch *ds, int port); 404 int (*port_egress_floods)(struct dsa_switch *ds, int port, 405 bool unicast, bool multicast); 406 407 /* 408 * VLAN support 409 */ 410 int (*port_vlan_filtering)(struct dsa_switch *ds, int port, 411 bool vlan_filtering); 412 int (*port_vlan_prepare)(struct dsa_switch *ds, int port, 413 const struct switchdev_obj_port_vlan *vlan); 414 void (*port_vlan_add)(struct dsa_switch *ds, int port, 415 const struct switchdev_obj_port_vlan *vlan); 416 int (*port_vlan_del)(struct dsa_switch *ds, int port, 417 const struct switchdev_obj_port_vlan *vlan); 418 /* 419 * Forwarding database 420 */ 421 int (*port_fdb_add)(struct dsa_switch *ds, int port, 422 const unsigned char *addr, u16 vid); 423 int (*port_fdb_del)(struct dsa_switch *ds, int port, 424 const unsigned char *addr, u16 vid); 425 int (*port_fdb_dump)(struct dsa_switch *ds, int port, 426 dsa_fdb_dump_cb_t *cb, void *data); 427 428 /* 429 * Multicast database 430 */ 431 int (*port_mdb_prepare)(struct dsa_switch *ds, int port, 432 const struct switchdev_obj_port_mdb *mdb); 433 void (*port_mdb_add)(struct dsa_switch *ds, int port, 434 const struct switchdev_obj_port_mdb *mdb); 435 int (*port_mdb_del)(struct dsa_switch *ds, int port, 436 const struct switchdev_obj_port_mdb *mdb); 437 /* 438 * RXNFC 439 */ 440 int (*get_rxnfc)(struct dsa_switch *ds, int port, 441 struct ethtool_rxnfc *nfc, u32 *rule_locs); 442 int (*set_rxnfc)(struct dsa_switch *ds, int port, 443 struct ethtool_rxnfc *nfc); 444 445 /* 446 * TC integration 447 */ 448 int (*port_mirror_add)(struct dsa_switch *ds, int port, 449 struct dsa_mall_mirror_tc_entry *mirror, 450 bool ingress); 451 void (*port_mirror_del)(struct dsa_switch *ds, int port, 452 struct dsa_mall_mirror_tc_entry *mirror); 453 454 /* 455 * Cross-chip operations 456 */ 457 int (*crosschip_bridge_join)(struct dsa_switch *ds, int sw_index, 458 int port, struct net_device *br); 459 void (*crosschip_bridge_leave)(struct dsa_switch *ds, int sw_index, 460 int port, struct net_device *br); 461 462 /* 463 * PTP functionality 464 */ 465 int (*port_hwtstamp_get)(struct dsa_switch *ds, int port, 466 struct ifreq *ifr); 467 int (*port_hwtstamp_set)(struct dsa_switch *ds, int port, 468 struct ifreq *ifr); 469 bool (*port_txtstamp)(struct dsa_switch *ds, int port, 470 struct sk_buff *clone, unsigned int type); 471 bool (*port_rxtstamp)(struct dsa_switch *ds, int port, 472 struct sk_buff *skb, unsigned int type); 473 }; 474 475 struct dsa_switch_driver { 476 struct list_head list; 477 const struct dsa_switch_ops *ops; 478 }; 479 480 #if IS_ENABLED(CONFIG_NET_DSA_LEGACY) 481 /* Legacy driver registration */ 482 void register_switch_driver(struct dsa_switch_driver *type); 483 void unregister_switch_driver(struct dsa_switch_driver *type); 484 struct mii_bus *dsa_host_dev_to_mii_bus(struct device *dev); 485 486 #else 487 static inline void register_switch_driver(struct dsa_switch_driver *type) { } 488 static inline void unregister_switch_driver(struct dsa_switch_driver *type) { } 489 static inline struct mii_bus *dsa_host_dev_to_mii_bus(struct device *dev) 490 { 491 return NULL; 492 } 493 #endif 494 struct net_device *dsa_dev_to_net_device(struct device *dev); 495 496 /* Keep inline for faster access in hot path */ 497 static inline bool netdev_uses_dsa(struct net_device *dev) 498 { 499 #if IS_ENABLED(CONFIG_NET_DSA) 500 return dev->dsa_ptr && dev->dsa_ptr->rcv; 501 #endif 502 return false; 503 } 504 505 struct dsa_switch *dsa_switch_alloc(struct device *dev, size_t n); 506 void dsa_unregister_switch(struct dsa_switch *ds); 507 int dsa_register_switch(struct dsa_switch *ds); 508 #ifdef CONFIG_PM_SLEEP 509 int dsa_switch_suspend(struct dsa_switch *ds); 510 int dsa_switch_resume(struct dsa_switch *ds); 511 #else 512 static inline int dsa_switch_suspend(struct dsa_switch *ds) 513 { 514 return 0; 515 } 516 static inline int dsa_switch_resume(struct dsa_switch *ds) 517 { 518 return 0; 519 } 520 #endif /* CONFIG_PM_SLEEP */ 521 522 enum dsa_notifier_type { 523 DSA_PORT_REGISTER, 524 DSA_PORT_UNREGISTER, 525 }; 526 527 struct dsa_notifier_info { 528 struct net_device *dev; 529 }; 530 531 struct dsa_notifier_register_info { 532 struct dsa_notifier_info info; /* must be first */ 533 struct net_device *master; 534 unsigned int port_number; 535 unsigned int switch_number; 536 }; 537 538 static inline struct net_device * 539 dsa_notifier_info_to_dev(const struct dsa_notifier_info *info) 540 { 541 return info->dev; 542 } 543 544 #if IS_ENABLED(CONFIG_NET_DSA) 545 int register_dsa_notifier(struct notifier_block *nb); 546 int unregister_dsa_notifier(struct notifier_block *nb); 547 int call_dsa_notifiers(unsigned long val, struct net_device *dev, 548 struct dsa_notifier_info *info); 549 #else 550 static inline int register_dsa_notifier(struct notifier_block *nb) 551 { 552 return 0; 553 } 554 555 static inline int unregister_dsa_notifier(struct notifier_block *nb) 556 { 557 return 0; 558 } 559 560 static inline int call_dsa_notifiers(unsigned long val, struct net_device *dev, 561 struct dsa_notifier_info *info) 562 { 563 return NOTIFY_DONE; 564 } 565 #endif 566 567 /* Broadcom tag specific helpers to insert and extract queue/port number */ 568 #define BRCM_TAG_SET_PORT_QUEUE(p, q) ((p) << 8 | q) 569 #define BRCM_TAG_GET_PORT(v) ((v) >> 8) 570 #define BRCM_TAG_GET_QUEUE(v) ((v) & 0xff) 571 572 573 int dsa_port_get_phy_strings(struct dsa_port *dp, uint8_t *data); 574 int dsa_port_get_ethtool_phy_stats(struct dsa_port *dp, uint64_t *data); 575 int dsa_port_get_phy_sset_count(struct dsa_port *dp); 576 void dsa_port_phylink_mac_change(struct dsa_switch *ds, int port, bool up); 577 578 #endif 579