Lines Matching refs:dp
108 struct dsa_port *dp; in dsa_tree_lag_find() local
110 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_lag_find()
111 if (dsa_port_lag_dev_get(dp) == lag_dev) in dsa_tree_lag_find()
112 return dp->lag; in dsa_tree_lag_find()
120 struct dsa_port *dp; in dsa_tree_bridge_find() local
122 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_bridge_find()
123 if (dsa_port_bridge_dev_get(dp) == br) in dsa_tree_bridge_find()
124 return dp->bridge; in dsa_tree_bridge_find()
183 struct dsa_port *dp; in dsa_switch_find() local
189 list_for_each_entry(dp, &dst->ports, list) { in dsa_switch_find()
190 if (dp->ds->index != sw_index) in dsa_switch_find()
193 return dp->ds; in dsa_switch_find()
279 struct dsa_port *dp; in dsa_tree_find_port_by_node() local
281 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_find_port_by_node()
282 if (dp->dn == dn) in dsa_tree_find_port_by_node()
283 return dp; in dsa_tree_find_port_by_node()
288 static struct dsa_link *dsa_link_touch(struct dsa_port *dp, in dsa_link_touch() argument
291 struct dsa_switch *ds = dp->ds; in dsa_link_touch()
298 if (dl->dp == dp && dl->link_dp == link_dp) in dsa_link_touch()
305 dl->dp = dp; in dsa_link_touch()
314 static bool dsa_port_setup_routing_table(struct dsa_port *dp) in dsa_port_setup_routing_table() argument
316 struct dsa_switch *ds = dp->ds; in dsa_port_setup_routing_table()
318 struct device_node *dn = dp->dn; in dsa_port_setup_routing_table()
331 dl = dsa_link_touch(dp, link_dp); in dsa_port_setup_routing_table()
344 struct dsa_port *dp; in dsa_tree_setup_routing_table() local
346 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_routing_table()
347 if (dsa_port_is_dsa(dp)) { in dsa_tree_setup_routing_table()
348 complete = dsa_port_setup_routing_table(dp); in dsa_tree_setup_routing_table()
359 struct dsa_port *dp; in dsa_tree_find_first_cpu() local
361 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_find_first_cpu()
362 if (dsa_port_is_cpu(dp)) in dsa_tree_find_first_cpu()
363 return dp; in dsa_tree_find_first_cpu()
381 struct dsa_port *cpu_dp, *dp; in dsa_tree_setup_default_cpu() local
389 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_default_cpu()
390 if (dp->cpu_dp) in dsa_tree_setup_default_cpu()
393 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_setup_default_cpu()
394 dp->cpu_dp = cpu_dp; in dsa_tree_setup_default_cpu()
425 struct dsa_port *preferred_cpu_dp, *cpu_dp, *dp; in dsa_tree_setup_cpu_ports() local
436 dsa_switch_for_each_port(dp, cpu_dp->ds) { in dsa_tree_setup_cpu_ports()
438 if (dp->cpu_dp) in dsa_tree_setup_cpu_ports()
441 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_setup_cpu_ports()
442 dp->cpu_dp = cpu_dp; in dsa_tree_setup_cpu_ports()
451 struct dsa_port *dp; in dsa_tree_teardown_cpu_ports() local
453 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_cpu_ports()
454 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_teardown_cpu_ports()
455 dp->cpu_dp = NULL; in dsa_tree_teardown_cpu_ports()
458 static int dsa_port_setup(struct dsa_port *dp) in dsa_port_setup() argument
461 struct dsa_switch *ds = dp->ds; in dsa_port_setup()
465 if (dp->setup) in dsa_port_setup()
468 err = dsa_port_devlink_setup(dp); in dsa_port_setup()
472 switch (dp->type) { in dsa_port_setup()
474 dsa_port_disable(dp); in dsa_port_setup()
477 if (dp->dn) { in dsa_port_setup()
478 err = dsa_shared_port_link_register_of(dp); in dsa_port_setup()
485 dp->index); in dsa_port_setup()
488 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
495 if (dp->dn) { in dsa_port_setup()
496 err = dsa_shared_port_link_register_of(dp); in dsa_port_setup()
503 dp->index); in dsa_port_setup()
506 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
513 of_get_mac_address(dp->dn, dp->mac); in dsa_port_setup()
514 err = dsa_user_create(dp); in dsa_port_setup()
519 dsa_port_disable(dp); in dsa_port_setup()
521 dsa_shared_port_link_unregister_of(dp); in dsa_port_setup()
523 dsa_port_devlink_teardown(dp); in dsa_port_setup()
527 dp->setup = true; in dsa_port_setup()
532 static void dsa_port_teardown(struct dsa_port *dp) in dsa_port_teardown() argument
534 if (!dp->setup) in dsa_port_teardown()
537 switch (dp->type) { in dsa_port_teardown()
541 dsa_port_disable(dp); in dsa_port_teardown()
542 if (dp->dn) in dsa_port_teardown()
543 dsa_shared_port_link_unregister_of(dp); in dsa_port_teardown()
546 dsa_port_disable(dp); in dsa_port_teardown()
547 if (dp->dn) in dsa_port_teardown()
548 dsa_shared_port_link_unregister_of(dp); in dsa_port_teardown()
551 if (dp->user) { in dsa_port_teardown()
552 dsa_user_destroy(dp->user); in dsa_port_teardown()
553 dp->user = NULL; in dsa_port_teardown()
558 dsa_port_devlink_teardown(dp); in dsa_port_teardown()
560 dp->setup = false; in dsa_port_teardown()
563 static int dsa_port_setup_as_unused(struct dsa_port *dp) in dsa_port_setup_as_unused() argument
565 dp->type = DSA_PORT_TYPE_UNUSED; in dsa_port_setup_as_unused()
566 return dsa_port_setup(dp); in dsa_port_setup_as_unused()
716 struct dsa_port *dp; in dsa_tree_teardown_ports() local
718 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
719 if (dsa_port_is_user(dp) || dsa_port_is_unused(dp)) in dsa_tree_teardown_ports()
720 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
724 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
725 if (dsa_port_is_dsa(dp) || dsa_port_is_cpu(dp)) in dsa_tree_teardown_ports()
726 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
731 struct dsa_port *dp; in dsa_tree_teardown_switches() local
733 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_switches()
734 dsa_switch_teardown(dp->ds); in dsa_tree_teardown_switches()
740 struct dsa_port *dp; in dsa_tree_setup_ports() local
743 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_ports()
744 if (dsa_port_is_dsa(dp) || dsa_port_is_cpu(dp)) { in dsa_tree_setup_ports()
745 err = dsa_port_setup(dp); in dsa_tree_setup_ports()
751 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_ports()
752 if (dsa_port_is_user(dp) || dsa_port_is_unused(dp)) { in dsa_tree_setup_ports()
753 err = dsa_port_setup(dp); in dsa_tree_setup_ports()
755 err = dsa_port_setup_as_unused(dp); in dsa_tree_setup_ports()
772 struct dsa_port *dp; in dsa_tree_setup_switches() local
775 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_switches()
776 err = dsa_switch_setup(dp->ds); in dsa_tree_setup_switches()
837 struct dsa_port *dp; in dsa_tree_setup_lags() local
839 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_lags()
840 if (dp->ds->num_lag_ids > len) in dsa_tree_setup_lags()
841 len = dp->ds->num_lag_ids; in dsa_tree_setup_lags()
987 struct dsa_port *dp; in dsa_tree_change_tag_proto() local
998 dsa_tree_for_each_user_port(dp, dst) { in dsa_tree_change_tag_proto()
999 if (dsa_port_to_conduit(dp)->flags & IFF_UP) in dsa_tree_change_tag_proto()
1002 if (dp->user->flags & IFF_UP) in dsa_tree_change_tag_proto()
1089 struct dsa_port *dp; in dsa_port_touch() local
1091 dsa_switch_for_each_port(dp, ds) in dsa_port_touch()
1092 if (dp->index == index) in dsa_port_touch()
1093 return dp; in dsa_port_touch()
1095 dp = kzalloc(sizeof(*dp), GFP_KERNEL); in dsa_port_touch()
1096 if (!dp) in dsa_port_touch()
1099 dp->ds = ds; in dsa_port_touch()
1100 dp->index = index; in dsa_port_touch()
1102 mutex_init(&dp->addr_lists_lock); in dsa_port_touch()
1103 mutex_init(&dp->vlans_lock); in dsa_port_touch()
1104 INIT_LIST_HEAD(&dp->fdbs); in dsa_port_touch()
1105 INIT_LIST_HEAD(&dp->mdbs); in dsa_port_touch()
1106 INIT_LIST_HEAD(&dp->vlans); /* also initializes &dp->user_vlans */ in dsa_port_touch()
1107 INIT_LIST_HEAD(&dp->list); in dsa_port_touch()
1108 list_add_tail(&dp->list, &dst->ports); in dsa_port_touch()
1110 return dp; in dsa_port_touch()
1113 static int dsa_port_parse_user(struct dsa_port *dp, const char *name) in dsa_port_parse_user() argument
1115 dp->type = DSA_PORT_TYPE_USER; in dsa_port_parse_user()
1116 dp->name = name; in dsa_port_parse_user()
1121 static int dsa_port_parse_dsa(struct dsa_port *dp) in dsa_port_parse_dsa() argument
1123 dp->type = DSA_PORT_TYPE_DSA; in dsa_port_parse_dsa()
1128 static enum dsa_tag_protocol dsa_get_tag_protocol(struct dsa_port *dp, in dsa_get_tag_protocol() argument
1132 struct dsa_switch *mds, *ds = dp->ds; in dsa_get_tag_protocol()
1151 return ds->ops->get_tag_protocol(ds, dp->index, tag_protocol); in dsa_get_tag_protocol()
1154 static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *conduit, in dsa_port_parse_cpu() argument
1158 struct dsa_switch *ds = dp->ds; in dsa_port_parse_cpu()
1163 default_proto = dsa_get_tag_protocol(dp, conduit); in dsa_port_parse_cpu()
1218 dp->conduit = conduit; in dsa_port_parse_cpu()
1219 dp->type = DSA_PORT_TYPE_CPU; in dsa_port_parse_cpu()
1220 dsa_port_set_tag_protocol(dp, dst->tag_ops); in dsa_port_parse_cpu()
1221 dp->dst = dst; in dsa_port_parse_cpu()
1239 static int dsa_port_parse_of(struct dsa_port *dp, struct device_node *dn) in dsa_port_parse_of() argument
1245 dp->dn = dn; in dsa_port_parse_of()
1260 netdev_hold(conduit, &dp->conduit_tracker, GFP_KERNEL); in dsa_port_parse_of()
1265 err = dsa_port_parse_cpu(dp, conduit, user_protocol); in dsa_port_parse_of()
1267 netdev_put(conduit, &dp->conduit_tracker); in dsa_port_parse_of()
1272 return dsa_port_parse_dsa(dp); in dsa_port_parse_of()
1274 return dsa_port_parse_user(dp, name); in dsa_port_parse_of()
1281 struct dsa_port *dp; in dsa_switch_parse_ports_of() local
1310 dp = dsa_to_port(ds, reg); in dsa_switch_parse_ports_of()
1312 err = dsa_port_parse_of(dp, port); in dsa_switch_parse_ports_of()
1356 struct dsa_port *dp; in dsa_switch_touch_ports() local
1360 dp = dsa_port_touch(ds, port); in dsa_switch_touch_ports()
1361 if (!dp) in dsa_switch_touch_ports()
1401 static int dsa_port_parse(struct dsa_port *dp, const char *name, in dsa_port_parse() argument
1417 netdev_hold(conduit, &dp->conduit_tracker, GFP_KERNEL); in dsa_port_parse()
1421 err = dsa_port_parse_cpu(dp, conduit, NULL); in dsa_port_parse()
1423 netdev_put(conduit, &dp->conduit_tracker); in dsa_port_parse()
1428 return dsa_port_parse_dsa(dp); in dsa_port_parse()
1430 return dsa_port_parse_user(dp, name); in dsa_port_parse()
1437 struct dsa_port *dp; in dsa_switch_parse_ports() local
1446 dp = dsa_to_port(ds, i); in dsa_switch_parse_ports()
1451 err = dsa_port_parse(dp, name, dev); in dsa_switch_parse_ports()
1488 struct dsa_port *dp, *next; in dsa_switch_release_ports() local
1491 dsa_switch_for_each_port_safe(dp, next, ds) { in dsa_switch_release_ports()
1492 if (dsa_port_is_cpu(dp) && dp->conduit) in dsa_switch_release_ports()
1493 netdev_put(dp->conduit, &dp->conduit_tracker); in dsa_switch_release_ports()
1500 list_for_each_entry_safe(a, tmp, &dp->fdbs, list) { in dsa_switch_release_ports()
1503 a->addr, a->vid, dp->index); in dsa_switch_release_ports()
1508 list_for_each_entry_safe(a, tmp, &dp->mdbs, list) { in dsa_switch_release_ports()
1511 a->addr, a->vid, dp->index); in dsa_switch_release_ports()
1520 list_for_each_entry_safe(v, n, &dp->vlans, list) { in dsa_switch_release_ports()
1523 v->vid, dp->index); in dsa_switch_release_ports()
1528 list_del(&dp->list); in dsa_switch_release_ports()
1529 kfree(dp); in dsa_switch_release_ports()
1614 struct dsa_port *dp; in dsa_switch_shutdown() local
1623 dsa_switch_for_each_cpu_port(dp, ds) in dsa_switch_shutdown()
1624 list_add(&dp->conduit->close_list, &close_list); in dsa_switch_shutdown()
1628 dsa_switch_for_each_user_port(dp, ds) { in dsa_switch_shutdown()
1629 conduit = dsa_port_to_conduit(dp); in dsa_switch_shutdown()
1630 user_dev = dp->user; in dsa_switch_shutdown()
1639 dsa_switch_for_each_cpu_port(dp, ds) { in dsa_switch_shutdown()
1640 dp->conduit->dsa_ptr = NULL; in dsa_switch_shutdown()
1641 netdev_put(dp->conduit, &dp->conduit_tracker); in dsa_switch_shutdown()
1651 static bool dsa_port_is_initialized(const struct dsa_port *dp) in dsa_port_is_initialized() argument
1653 return dp->type == DSA_PORT_TYPE_USER && dp->user; in dsa_port_is_initialized()
1658 struct dsa_port *dp; in dsa_switch_suspend() local
1662 dsa_switch_for_each_port(dp, ds) { in dsa_switch_suspend()
1663 if (!dsa_port_is_initialized(dp)) in dsa_switch_suspend()
1666 ret = dsa_user_suspend(dp->user); in dsa_switch_suspend()
1680 struct dsa_port *dp; in dsa_switch_resume() local
1690 dsa_switch_for_each_port(dp, ds) { in dsa_switch_resume()
1691 if (!dsa_port_is_initialized(dp)) in dsa_switch_resume()
1694 ret = dsa_user_resume(dp->user); in dsa_switch_resume()
1720 return a->dp == b->dp; in dsa_db_equal()
1735 struct dsa_port *dp = dsa_to_port(ds, port); in dsa_fdb_present_in_other_db() local
1738 lockdep_assert_held(&dp->addr_lists_lock); in dsa_fdb_present_in_other_db()
1740 list_for_each_entry(a, &dp->fdbs, list) { in dsa_fdb_present_in_other_db()
1756 struct dsa_port *dp = dsa_to_port(ds, port); in dsa_mdb_present_in_other_db() local
1759 lockdep_assert_held(&dp->addr_lists_lock); in dsa_mdb_present_in_other_db()
1761 list_for_each_entry(a, &dp->mdbs, list) { in dsa_mdb_present_in_other_db()
1801 struct dsa_port *dp = dsa_to_port(ds, port), *other_dp; in dsa_port_simple_hsr_join() local
1809 if (other_dp != dp) { in dsa_port_simple_hsr_join()
1810 dp->user->features |= NETIF_F_HW_HSR_DUP; in dsa_port_simple_hsr_join()
1823 struct dsa_port *dp = dsa_to_port(ds, port), *other_dp; in dsa_port_simple_hsr_leave() local
1826 if (other_dp != dp) { in dsa_port_simple_hsr_leave()
1827 dp->user->features &= ~NETIF_F_HW_HSR_DUP; in dsa_port_simple_hsr_leave()