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()
387 struct dsa_port *cpu_dp, *dp; in dsa_tree_setup_default_cpu() local
395 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_default_cpu()
396 if (dp->cpu_dp) in dsa_tree_setup_default_cpu()
399 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_setup_default_cpu()
400 dp->cpu_dp = cpu_dp; in dsa_tree_setup_default_cpu()
431 struct dsa_port *preferred_cpu_dp, *cpu_dp, *dp; in dsa_tree_setup_cpu_ports() local
442 dsa_switch_for_each_port(dp, cpu_dp->ds) { in dsa_tree_setup_cpu_ports()
444 if (dp->cpu_dp) in dsa_tree_setup_cpu_ports()
447 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_setup_cpu_ports()
448 dp->cpu_dp = cpu_dp; in dsa_tree_setup_cpu_ports()
457 struct dsa_port *dp; in dsa_tree_teardown_cpu_ports() local
459 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_cpu_ports()
460 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_teardown_cpu_ports()
461 dp->cpu_dp = NULL; in dsa_tree_teardown_cpu_ports()
464 static int dsa_port_setup(struct dsa_port *dp) in dsa_port_setup() argument
467 struct dsa_switch *ds = dp->ds; in dsa_port_setup()
471 if (dp->setup) in dsa_port_setup()
474 err = dsa_port_devlink_setup(dp); in dsa_port_setup()
478 switch (dp->type) { in dsa_port_setup()
480 dsa_port_disable(dp); in dsa_port_setup()
483 if (dp->dn) { in dsa_port_setup()
484 err = dsa_shared_port_link_register_of(dp); in dsa_port_setup()
491 dp->index); in dsa_port_setup()
494 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
501 if (dp->dn) { in dsa_port_setup()
502 err = dsa_shared_port_link_register_of(dp); in dsa_port_setup()
509 dp->index); in dsa_port_setup()
512 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
519 of_get_mac_address(dp->dn, dp->mac); in dsa_port_setup()
520 err = dsa_slave_create(dp); in dsa_port_setup()
525 dsa_port_disable(dp); in dsa_port_setup()
527 dsa_shared_port_link_unregister_of(dp); in dsa_port_setup()
529 dsa_port_devlink_teardown(dp); in dsa_port_setup()
533 dp->setup = true; in dsa_port_setup()
538 static void dsa_port_teardown(struct dsa_port *dp) in dsa_port_teardown() argument
540 if (!dp->setup) in dsa_port_teardown()
543 switch (dp->type) { in dsa_port_teardown()
547 dsa_port_disable(dp); in dsa_port_teardown()
548 if (dp->dn) in dsa_port_teardown()
549 dsa_shared_port_link_unregister_of(dp); in dsa_port_teardown()
552 dsa_port_disable(dp); in dsa_port_teardown()
553 if (dp->dn) in dsa_port_teardown()
554 dsa_shared_port_link_unregister_of(dp); in dsa_port_teardown()
557 if (dp->slave) { in dsa_port_teardown()
558 dsa_slave_destroy(dp->slave); in dsa_port_teardown()
559 dp->slave = NULL; in dsa_port_teardown()
564 dsa_port_devlink_teardown(dp); in dsa_port_teardown()
566 dp->setup = false; in dsa_port_teardown()
569 static int dsa_port_setup_as_unused(struct dsa_port *dp) in dsa_port_setup_as_unused() argument
571 dp->type = DSA_PORT_TYPE_UNUSED; in dsa_port_setup_as_unused()
572 return dsa_port_setup(dp); in dsa_port_setup_as_unused()
726 struct dsa_port *dp; in dsa_tree_teardown_ports() local
728 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
729 if (dsa_port_is_user(dp) || dsa_port_is_unused(dp)) in dsa_tree_teardown_ports()
730 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
734 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
735 if (dsa_port_is_dsa(dp) || dsa_port_is_cpu(dp)) in dsa_tree_teardown_ports()
736 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
741 struct dsa_port *dp; in dsa_tree_teardown_switches() local
743 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_switches()
744 dsa_switch_teardown(dp->ds); in dsa_tree_teardown_switches()
750 struct dsa_port *dp; in dsa_tree_setup_ports() local
753 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_ports()
754 if (dsa_port_is_dsa(dp) || dsa_port_is_cpu(dp)) { in dsa_tree_setup_ports()
755 err = dsa_port_setup(dp); in dsa_tree_setup_ports()
761 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_ports()
762 if (dsa_port_is_user(dp) || dsa_port_is_unused(dp)) { in dsa_tree_setup_ports()
763 err = dsa_port_setup(dp); in dsa_tree_setup_ports()
765 err = dsa_port_setup_as_unused(dp); in dsa_tree_setup_ports()
782 struct dsa_port *dp; in dsa_tree_setup_switches() local
785 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_switches()
786 err = dsa_switch_setup(dp->ds); in dsa_tree_setup_switches()
847 struct dsa_port *dp; in dsa_tree_setup_lags() local
849 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_lags()
850 if (dp->ds->num_lag_ids > len) in dsa_tree_setup_lags()
851 len = dp->ds->num_lag_ids; in dsa_tree_setup_lags()
990 struct dsa_port *dp; in dsa_tree_change_tag_proto() local
1001 dsa_tree_for_each_user_port(dp, dst) { in dsa_tree_change_tag_proto()
1002 if (dsa_port_to_master(dp)->flags & IFF_UP) in dsa_tree_change_tag_proto()
1005 if (dp->slave->flags & IFF_UP) in dsa_tree_change_tag_proto()
1092 struct dsa_port *dp; in dsa_port_touch() local
1094 dsa_switch_for_each_port(dp, ds) in dsa_port_touch()
1095 if (dp->index == index) in dsa_port_touch()
1096 return dp; in dsa_port_touch()
1098 dp = kzalloc(sizeof(*dp), GFP_KERNEL); in dsa_port_touch()
1099 if (!dp) in dsa_port_touch()
1102 dp->ds = ds; in dsa_port_touch()
1103 dp->index = index; in dsa_port_touch()
1105 mutex_init(&dp->addr_lists_lock); in dsa_port_touch()
1106 mutex_init(&dp->vlans_lock); in dsa_port_touch()
1107 INIT_LIST_HEAD(&dp->fdbs); in dsa_port_touch()
1108 INIT_LIST_HEAD(&dp->mdbs); in dsa_port_touch()
1109 INIT_LIST_HEAD(&dp->vlans); /* also initializes &dp->user_vlans */ in dsa_port_touch()
1110 INIT_LIST_HEAD(&dp->list); in dsa_port_touch()
1111 list_add_tail(&dp->list, &dst->ports); in dsa_port_touch()
1113 return dp; in dsa_port_touch()
1116 static int dsa_port_parse_user(struct dsa_port *dp, const char *name) in dsa_port_parse_user() argument
1118 dp->type = DSA_PORT_TYPE_USER; in dsa_port_parse_user()
1119 dp->name = name; in dsa_port_parse_user()
1124 static int dsa_port_parse_dsa(struct dsa_port *dp) in dsa_port_parse_dsa() argument
1126 dp->type = DSA_PORT_TYPE_DSA; in dsa_port_parse_dsa()
1131 static enum dsa_tag_protocol dsa_get_tag_protocol(struct dsa_port *dp, in dsa_get_tag_protocol() argument
1135 struct dsa_switch *mds, *ds = dp->ds; in dsa_get_tag_protocol()
1154 return ds->ops->get_tag_protocol(ds, dp->index, tag_protocol); in dsa_get_tag_protocol()
1157 static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master, in dsa_port_parse_cpu() argument
1161 struct dsa_switch *ds = dp->ds; in dsa_port_parse_cpu()
1166 default_proto = dsa_get_tag_protocol(dp, master); in dsa_port_parse_cpu()
1221 dp->master = master; in dsa_port_parse_cpu()
1222 dp->type = DSA_PORT_TYPE_CPU; in dsa_port_parse_cpu()
1223 dsa_port_set_tag_protocol(dp, dst->tag_ops); in dsa_port_parse_cpu()
1224 dp->dst = dst; in dsa_port_parse_cpu()
1242 static int dsa_port_parse_of(struct dsa_port *dp, struct device_node *dn) in dsa_port_parse_of() argument
1248 dp->dn = dn; in dsa_port_parse_of()
1260 return dsa_port_parse_cpu(dp, master, user_protocol); in dsa_port_parse_of()
1264 return dsa_port_parse_dsa(dp); in dsa_port_parse_of()
1266 return dsa_port_parse_user(dp, name); in dsa_port_parse_of()
1273 struct dsa_port *dp; in dsa_switch_parse_ports_of() local
1302 dp = dsa_to_port(ds, reg); in dsa_switch_parse_ports_of()
1304 err = dsa_port_parse_of(dp, port); in dsa_switch_parse_ports_of()
1348 struct dsa_port *dp; in dsa_switch_touch_ports() local
1352 dp = dsa_port_touch(ds, port); in dsa_switch_touch_ports()
1353 if (!dp) in dsa_switch_touch_ports()
1411 static int dsa_port_parse(struct dsa_port *dp, const char *name, in dsa_port_parse() argument
1423 return dsa_port_parse_cpu(dp, master, NULL); in dsa_port_parse()
1427 return dsa_port_parse_dsa(dp); in dsa_port_parse()
1429 return dsa_port_parse_user(dp, name); in dsa_port_parse()
1436 struct dsa_port *dp; in dsa_switch_parse_ports() local
1445 dp = dsa_to_port(ds, i); in dsa_switch_parse_ports()
1450 err = dsa_port_parse(dp, name, dev); in dsa_switch_parse_ports()
1486 struct dsa_port *dp, *next; in dsa_switch_release_ports() local
1488 dsa_switch_for_each_port_safe(dp, next, ds) { in dsa_switch_release_ports()
1489 WARN_ON(!list_empty(&dp->fdbs)); in dsa_switch_release_ports()
1490 WARN_ON(!list_empty(&dp->mdbs)); in dsa_switch_release_ports()
1491 WARN_ON(!list_empty(&dp->vlans)); in dsa_switch_release_ports()
1492 list_del(&dp->list); in dsa_switch_release_ports()
1493 kfree(dp); in dsa_switch_release_ports()
1577 struct dsa_port *dp; in dsa_switch_shutdown() local
1586 dsa_switch_for_each_user_port(dp, ds) { in dsa_switch_shutdown()
1587 master = dsa_port_to_master(dp); in dsa_switch_shutdown()
1588 slave_dev = dp->slave; in dsa_switch_shutdown()
1596 dsa_switch_for_each_cpu_port(dp, ds) in dsa_switch_shutdown()
1597 dp->master->dsa_ptr = NULL; in dsa_switch_shutdown()
1606 static bool dsa_port_is_initialized(const struct dsa_port *dp) in dsa_port_is_initialized() argument
1608 return dp->type == DSA_PORT_TYPE_USER && dp->slave; in dsa_port_is_initialized()
1613 struct dsa_port *dp; in dsa_switch_suspend() local
1617 dsa_switch_for_each_port(dp, ds) { in dsa_switch_suspend()
1618 if (!dsa_port_is_initialized(dp)) in dsa_switch_suspend()
1621 ret = dsa_slave_suspend(dp->slave); in dsa_switch_suspend()
1635 struct dsa_port *dp; in dsa_switch_resume() local
1645 dsa_switch_for_each_port(dp, ds) { in dsa_switch_resume()
1646 if (!dsa_port_is_initialized(dp)) in dsa_switch_resume()
1649 ret = dsa_slave_resume(dp->slave); in dsa_switch_resume()
1675 return a->dp == b->dp; in dsa_db_equal()
1690 struct dsa_port *dp = dsa_to_port(ds, port); in dsa_fdb_present_in_other_db() local
1693 lockdep_assert_held(&dp->addr_lists_lock); in dsa_fdb_present_in_other_db()
1695 list_for_each_entry(a, &dp->fdbs, list) { in dsa_fdb_present_in_other_db()
1711 struct dsa_port *dp = dsa_to_port(ds, port); in dsa_mdb_present_in_other_db() local
1714 lockdep_assert_held(&dp->addr_lists_lock); in dsa_mdb_present_in_other_db()
1716 list_for_each_entry(a, &dp->mdbs, list) { in dsa_mdb_present_in_other_db()