Lines Matching full:dp

107 	struct dsa_port *dp;  in dsa_tree_lag_find()  local
109 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_lag_find()
110 if (dsa_port_lag_dev_get(dp) == lag_dev) in dsa_tree_lag_find()
111 return dp->lag; in dsa_tree_lag_find()
119 struct dsa_port *dp; in dsa_tree_bridge_find() local
121 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_bridge_find()
122 if (dsa_port_bridge_dev_get(dp) == br) in dsa_tree_bridge_find()
123 return dp->bridge; in dsa_tree_bridge_find()
182 struct dsa_port *dp; in dsa_switch_find() local
188 list_for_each_entry(dp, &dst->ports, list) { in dsa_switch_find()
189 if (dp->ds->index != sw_index) in dsa_switch_find()
192 return dp->ds; in dsa_switch_find()
278 struct dsa_port *dp; in dsa_tree_find_port_by_node() local
280 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_find_port_by_node()
281 if (dp->dn == dn) in dsa_tree_find_port_by_node()
282 return dp; in dsa_tree_find_port_by_node()
287 static struct dsa_link *dsa_link_touch(struct dsa_port *dp, in dsa_link_touch() argument
290 struct dsa_switch *ds = dp->ds; in dsa_link_touch()
297 if (dl->dp == dp && dl->link_dp == link_dp) in dsa_link_touch()
304 dl->dp = dp; in dsa_link_touch()
313 static bool dsa_port_setup_routing_table(struct dsa_port *dp) in dsa_port_setup_routing_table() argument
315 struct dsa_switch *ds = dp->ds; in dsa_port_setup_routing_table()
317 struct device_node *dn = dp->dn; in dsa_port_setup_routing_table()
330 dl = dsa_link_touch(dp, link_dp); in dsa_port_setup_routing_table()
343 struct dsa_port *dp; in dsa_tree_setup_routing_table() local
345 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_routing_table()
346 if (dsa_port_is_dsa(dp)) { in dsa_tree_setup_routing_table()
347 complete = dsa_port_setup_routing_table(dp); in dsa_tree_setup_routing_table()
358 struct dsa_port *dp; in dsa_tree_find_first_cpu() local
360 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_find_first_cpu()
361 if (dsa_port_is_cpu(dp)) in dsa_tree_find_first_cpu()
362 return dp; in dsa_tree_find_first_cpu()
386 struct dsa_port *cpu_dp, *dp; in dsa_tree_setup_default_cpu() local
394 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_default_cpu()
395 if (dp->cpu_dp) in dsa_tree_setup_default_cpu()
398 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_setup_default_cpu()
399 dp->cpu_dp = cpu_dp; in dsa_tree_setup_default_cpu()
430 struct dsa_port *preferred_cpu_dp, *cpu_dp, *dp; in dsa_tree_setup_cpu_ports() local
441 dsa_switch_for_each_port(dp, cpu_dp->ds) { in dsa_tree_setup_cpu_ports()
443 if (dp->cpu_dp) in dsa_tree_setup_cpu_ports()
446 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_setup_cpu_ports()
447 dp->cpu_dp = cpu_dp; in dsa_tree_setup_cpu_ports()
456 struct dsa_port *dp; in dsa_tree_teardown_cpu_ports() local
458 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_cpu_ports()
459 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_teardown_cpu_ports()
460 dp->cpu_dp = NULL; in dsa_tree_teardown_cpu_ports()
463 static int dsa_port_setup(struct dsa_port *dp) in dsa_port_setup() argument
466 struct dsa_switch *ds = dp->ds; in dsa_port_setup()
470 if (dp->setup) in dsa_port_setup()
473 err = dsa_port_devlink_setup(dp); in dsa_port_setup()
477 switch (dp->type) { in dsa_port_setup()
479 dsa_port_disable(dp); in dsa_port_setup()
482 if (dp->dn) { in dsa_port_setup()
483 err = dsa_shared_port_link_register_of(dp); in dsa_port_setup()
490 dp->index); in dsa_port_setup()
493 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
500 if (dp->dn) { in dsa_port_setup()
501 err = dsa_shared_port_link_register_of(dp); in dsa_port_setup()
508 dp->index); in dsa_port_setup()
511 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
518 of_get_mac_address(dp->dn, dp->mac); in dsa_port_setup()
519 err = dsa_user_create(dp); in dsa_port_setup()
524 dsa_port_disable(dp); in dsa_port_setup()
526 dsa_shared_port_link_unregister_of(dp); in dsa_port_setup()
528 dsa_port_devlink_teardown(dp); in dsa_port_setup()
532 dp->setup = true; in dsa_port_setup()
537 static void dsa_port_teardown(struct dsa_port *dp) in dsa_port_teardown() argument
539 if (!dp->setup) in dsa_port_teardown()
542 switch (dp->type) { 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 dsa_port_disable(dp); in dsa_port_teardown()
552 if (dp->dn) in dsa_port_teardown()
553 dsa_shared_port_link_unregister_of(dp); in dsa_port_teardown()
556 if (dp->user) { in dsa_port_teardown()
557 dsa_user_destroy(dp->user); in dsa_port_teardown()
558 dp->user = NULL; in dsa_port_teardown()
563 dsa_port_devlink_teardown(dp); in dsa_port_teardown()
565 dp->setup = false; in dsa_port_teardown()
568 static int dsa_port_setup_as_unused(struct dsa_port *dp) in dsa_port_setup_as_unused() argument
570 dp->type = DSA_PORT_TYPE_UNUSED; in dsa_port_setup_as_unused()
571 return dsa_port_setup(dp); in dsa_port_setup_as_unused()
721 struct dsa_port *dp; in dsa_tree_teardown_ports() local
723 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
724 if (dsa_port_is_user(dp) || dsa_port_is_unused(dp)) in dsa_tree_teardown_ports()
725 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
729 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
730 if (dsa_port_is_dsa(dp) || dsa_port_is_cpu(dp)) in dsa_tree_teardown_ports()
731 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
736 struct dsa_port *dp; in dsa_tree_teardown_switches() local
738 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_switches()
739 dsa_switch_teardown(dp->ds); in dsa_tree_teardown_switches()
745 struct dsa_port *dp; in dsa_tree_setup_ports() local
748 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_ports()
749 if (dsa_port_is_dsa(dp) || dsa_port_is_cpu(dp)) { in dsa_tree_setup_ports()
750 err = dsa_port_setup(dp); in dsa_tree_setup_ports()
756 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_ports()
757 if (dsa_port_is_user(dp) || dsa_port_is_unused(dp)) { in dsa_tree_setup_ports()
758 err = dsa_port_setup(dp); in dsa_tree_setup_ports()
760 err = dsa_port_setup_as_unused(dp); in dsa_tree_setup_ports()
777 struct dsa_port *dp; in dsa_tree_setup_switches() local
780 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_switches()
781 err = dsa_switch_setup(dp->ds); in dsa_tree_setup_switches()
842 struct dsa_port *dp; in dsa_tree_setup_lags() local
844 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_lags()
845 if (dp->ds->num_lag_ids > len) in dsa_tree_setup_lags()
846 len = dp->ds->num_lag_ids; in dsa_tree_setup_lags()
992 struct dsa_port *dp; in dsa_tree_change_tag_proto() local
1003 dsa_tree_for_each_user_port(dp, dst) { in dsa_tree_change_tag_proto()
1004 if (dsa_port_to_conduit(dp)->flags & IFF_UP) in dsa_tree_change_tag_proto()
1007 if (dp->user->flags & IFF_UP) in dsa_tree_change_tag_proto()
1094 struct dsa_port *dp; in dsa_port_touch() local
1096 dsa_switch_for_each_port(dp, ds) in dsa_port_touch()
1097 if (dp->index == index) in dsa_port_touch()
1098 return dp; in dsa_port_touch()
1100 dp = kzalloc(sizeof(*dp), GFP_KERNEL); in dsa_port_touch()
1101 if (!dp) in dsa_port_touch()
1104 dp->ds = ds; in dsa_port_touch()
1105 dp->index = index; in dsa_port_touch()
1107 mutex_init(&dp->addr_lists_lock); in dsa_port_touch()
1108 mutex_init(&dp->vlans_lock); in dsa_port_touch()
1109 INIT_LIST_HEAD(&dp->fdbs); in dsa_port_touch()
1110 INIT_LIST_HEAD(&dp->mdbs); in dsa_port_touch()
1111 INIT_LIST_HEAD(&dp->vlans); /* also initializes &dp->user_vlans */ in dsa_port_touch()
1112 INIT_LIST_HEAD(&dp->list); in dsa_port_touch()
1113 list_add_tail(&dp->list, &dst->ports); in dsa_port_touch()
1115 return dp; in dsa_port_touch()
1118 static int dsa_port_parse_user(struct dsa_port *dp, const char *name) in dsa_port_parse_user() argument
1120 dp->type = DSA_PORT_TYPE_USER; in dsa_port_parse_user()
1121 dp->name = name; in dsa_port_parse_user()
1126 static int dsa_port_parse_dsa(struct dsa_port *dp) in dsa_port_parse_dsa() argument
1128 dp->type = DSA_PORT_TYPE_DSA; in dsa_port_parse_dsa()
1133 static enum dsa_tag_protocol dsa_get_tag_protocol(struct dsa_port *dp, in dsa_get_tag_protocol() argument
1137 struct dsa_switch *mds, *ds = dp->ds; in dsa_get_tag_protocol()
1156 return ds->ops->get_tag_protocol(ds, dp->index, tag_protocol); in dsa_get_tag_protocol()
1159 static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *conduit, in dsa_port_parse_cpu() argument
1163 struct dsa_switch *ds = dp->ds; in dsa_port_parse_cpu()
1168 default_proto = dsa_get_tag_protocol(dp, conduit); in dsa_port_parse_cpu()
1223 dp->conduit = conduit; in dsa_port_parse_cpu()
1224 dp->type = DSA_PORT_TYPE_CPU; in dsa_port_parse_cpu()
1225 dsa_port_set_tag_protocol(dp, dst->tag_ops); in dsa_port_parse_cpu()
1226 dp->dst = dst; in dsa_port_parse_cpu()
1244 static int dsa_port_parse_of(struct dsa_port *dp, struct device_node *dn) in dsa_port_parse_of() argument
1250 dp->dn = dn; in dsa_port_parse_of()
1262 return dsa_port_parse_cpu(dp, conduit, user_protocol); in dsa_port_parse_of()
1266 return dsa_port_parse_dsa(dp); in dsa_port_parse_of()
1268 return dsa_port_parse_user(dp, name); in dsa_port_parse_of()
1275 struct dsa_port *dp; in dsa_switch_parse_ports_of() local
1304 dp = dsa_to_port(ds, reg); in dsa_switch_parse_ports_of()
1306 err = dsa_port_parse_of(dp, port); in dsa_switch_parse_ports_of()
1350 struct dsa_port *dp; in dsa_switch_touch_ports() local
1354 dp = dsa_port_touch(ds, port); in dsa_switch_touch_ports()
1355 if (!dp) in dsa_switch_touch_ports()
1413 static int dsa_port_parse(struct dsa_port *dp, const char *name, in dsa_port_parse() argument
1425 return dsa_port_parse_cpu(dp, conduit, NULL); in dsa_port_parse()
1429 return dsa_port_parse_dsa(dp); in dsa_port_parse()
1431 return dsa_port_parse_user(dp, name); in dsa_port_parse()
1438 struct dsa_port *dp; in dsa_switch_parse_ports() local
1447 dp = dsa_to_port(ds, i); in dsa_switch_parse_ports()
1452 err = dsa_port_parse(dp, name, dev); in dsa_switch_parse_ports()
1489 struct dsa_port *dp, *next; in dsa_switch_release_ports() local
1492 dsa_switch_for_each_port_safe(dp, next, ds) { in dsa_switch_release_ports()
1498 list_for_each_entry_safe(a, tmp, &dp->fdbs, list) { in dsa_switch_release_ports()
1501 a->addr, a->vid, dp->index); in dsa_switch_release_ports()
1506 list_for_each_entry_safe(a, tmp, &dp->mdbs, list) { in dsa_switch_release_ports()
1509 a->addr, a->vid, dp->index); in dsa_switch_release_ports()
1518 list_for_each_entry_safe(v, n, &dp->vlans, list) { in dsa_switch_release_ports()
1521 v->vid, dp->index); in dsa_switch_release_ports()
1526 list_del(&dp->list); in dsa_switch_release_ports()
1527 kfree(dp); in dsa_switch_release_ports()
1612 struct dsa_port *dp; in dsa_switch_shutdown() local
1621 dsa_switch_for_each_cpu_port(dp, ds) in dsa_switch_shutdown()
1622 list_add(&dp->conduit->close_list, &close_list); in dsa_switch_shutdown()
1626 dsa_switch_for_each_user_port(dp, ds) { in dsa_switch_shutdown()
1627 conduit = dsa_port_to_conduit(dp); in dsa_switch_shutdown()
1628 user_dev = dp->user; in dsa_switch_shutdown()
1637 dsa_switch_for_each_cpu_port(dp, ds) in dsa_switch_shutdown()
1638 dp->conduit->dsa_ptr = NULL; in dsa_switch_shutdown()
1647 static bool dsa_port_is_initialized(const struct dsa_port *dp) in dsa_port_is_initialized() argument
1649 return dp->type == DSA_PORT_TYPE_USER && dp->user; in dsa_port_is_initialized()
1654 struct dsa_port *dp; in dsa_switch_suspend() local
1658 dsa_switch_for_each_port(dp, ds) { in dsa_switch_suspend()
1659 if (!dsa_port_is_initialized(dp)) in dsa_switch_suspend()
1662 ret = dsa_user_suspend(dp->user); in dsa_switch_suspend()
1676 struct dsa_port *dp; in dsa_switch_resume() local
1686 dsa_switch_for_each_port(dp, ds) { in dsa_switch_resume()
1687 if (!dsa_port_is_initialized(dp)) in dsa_switch_resume()
1690 ret = dsa_user_resume(dp->user); in dsa_switch_resume()
1716 return a->dp == b->dp; in dsa_db_equal()
1731 struct dsa_port *dp = dsa_to_port(ds, port); in dsa_fdb_present_in_other_db() local
1734 lockdep_assert_held(&dp->addr_lists_lock); in dsa_fdb_present_in_other_db()
1736 list_for_each_entry(a, &dp->fdbs, list) { in dsa_fdb_present_in_other_db()
1752 struct dsa_port *dp = dsa_to_port(ds, port); in dsa_mdb_present_in_other_db() local
1755 lockdep_assert_held(&dp->addr_lists_lock); in dsa_mdb_present_in_other_db()
1757 list_for_each_entry(a, &dp->mdbs, list) { in dsa_mdb_present_in_other_db()