Lines Matching full:dp
130 struct dsa_port *dp; in dsa_tree_lag_find() local
132 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_lag_find()
133 if (dsa_port_lag_dev_get(dp) == lag_dev) in dsa_tree_lag_find()
134 return dp->lag; in dsa_tree_lag_find()
142 struct dsa_port *dp; in dsa_tree_bridge_find() local
144 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_bridge_find()
145 if (dsa_port_bridge_dev_get(dp) == br) in dsa_tree_bridge_find()
146 return dp->bridge; in dsa_tree_bridge_find()
205 struct dsa_port *dp; in dsa_switch_find() local
211 list_for_each_entry(dp, &dst->ports, list) { in dsa_switch_find()
212 if (dp->ds->index != sw_index) in dsa_switch_find()
215 return dp->ds; in dsa_switch_find()
301 struct dsa_port *dp; in dsa_tree_find_port_by_node() local
303 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_find_port_by_node()
304 if (dp->dn == dn) in dsa_tree_find_port_by_node()
305 return dp; in dsa_tree_find_port_by_node()
310 static struct dsa_link *dsa_link_touch(struct dsa_port *dp, in dsa_link_touch() argument
313 struct dsa_switch *ds = dp->ds; in dsa_link_touch()
320 if (dl->dp == dp && dl->link_dp == link_dp) in dsa_link_touch()
327 dl->dp = dp; in dsa_link_touch()
336 static bool dsa_port_setup_routing_table(struct dsa_port *dp) in dsa_port_setup_routing_table() argument
338 struct dsa_switch *ds = dp->ds; in dsa_port_setup_routing_table()
340 struct device_node *dn = dp->dn; in dsa_port_setup_routing_table()
353 dl = dsa_link_touch(dp, link_dp); in dsa_port_setup_routing_table()
366 struct dsa_port *dp; in dsa_tree_setup_routing_table() local
368 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_routing_table()
369 if (dsa_port_is_dsa(dp)) { in dsa_tree_setup_routing_table()
370 complete = dsa_port_setup_routing_table(dp); in dsa_tree_setup_routing_table()
381 struct dsa_port *dp; in dsa_tree_find_first_cpu() local
383 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_find_first_cpu()
384 if (dsa_port_is_cpu(dp)) in dsa_tree_find_first_cpu()
385 return dp; in dsa_tree_find_first_cpu()
409 struct dsa_port *cpu_dp, *dp; in dsa_tree_setup_default_cpu() local
417 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_default_cpu()
418 if (dp->cpu_dp) in dsa_tree_setup_default_cpu()
421 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_setup_default_cpu()
422 dp->cpu_dp = cpu_dp; in dsa_tree_setup_default_cpu()
435 struct dsa_port *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_devlink_setup(struct dsa_port *dp) in dsa_port_devlink_setup() argument
466 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_devlink_setup()
467 struct dsa_switch_tree *dst = dp->ds->dst; in dsa_port_devlink_setup()
469 struct devlink *dl = dp->ds->devlink; in dsa_port_devlink_setup()
470 struct dsa_switch *ds = dp->ds; in dsa_port_devlink_setup()
479 err = ds->ops->port_setup(ds, dp->index); in dsa_port_devlink_setup()
487 attrs.phys.port_number = dp->index; in dsa_port_devlink_setup()
491 switch (dp->type) { in dsa_port_devlink_setup()
507 err = devlink_port_register(dl, dlp, dp->index); in dsa_port_devlink_setup()
510 ds->ops->port_teardown(ds, dp->index); in dsa_port_devlink_setup()
517 static void dsa_port_devlink_teardown(struct dsa_port *dp) in dsa_port_devlink_teardown() argument
519 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_devlink_teardown()
520 struct dsa_switch *ds = dp->ds; in dsa_port_devlink_teardown()
525 ds->ops->port_teardown(ds, dp->index); in dsa_port_devlink_teardown()
530 static int dsa_port_setup(struct dsa_port *dp) in dsa_port_setup() argument
532 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_setup()
534 struct dsa_switch *ds = dp->ds; in dsa_port_setup()
538 if (dp->setup) in dsa_port_setup()
541 err = dsa_port_devlink_setup(dp); in dsa_port_setup()
545 switch (dp->type) { in dsa_port_setup()
547 dsa_port_disable(dp); in dsa_port_setup()
550 if (dp->dn) { in dsa_port_setup()
551 err = dsa_shared_port_link_register_of(dp); in dsa_port_setup()
558 dp->index); in dsa_port_setup()
561 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
568 if (dp->dn) { in dsa_port_setup()
569 err = dsa_shared_port_link_register_of(dp); in dsa_port_setup()
576 dp->index); in dsa_port_setup()
579 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
586 of_get_mac_address(dp->dn, dp->mac); in dsa_port_setup()
587 err = dsa_slave_create(dp); in dsa_port_setup()
591 devlink_port_type_eth_set(dlp, dp->slave); in dsa_port_setup()
596 dsa_port_disable(dp); in dsa_port_setup()
598 dsa_shared_port_link_unregister_of(dp); in dsa_port_setup()
600 dsa_port_devlink_teardown(dp); in dsa_port_setup()
604 dp->setup = true; in dsa_port_setup()
609 static void dsa_port_teardown(struct dsa_port *dp) in dsa_port_teardown() argument
611 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_teardown()
613 if (!dp->setup) in dsa_port_teardown()
618 switch (dp->type) { in dsa_port_teardown()
622 dsa_port_disable(dp); in dsa_port_teardown()
623 if (dp->dn) in dsa_port_teardown()
624 dsa_shared_port_link_unregister_of(dp); in dsa_port_teardown()
627 dsa_port_disable(dp); in dsa_port_teardown()
628 if (dp->dn) in dsa_port_teardown()
629 dsa_shared_port_link_unregister_of(dp); in dsa_port_teardown()
632 if (dp->slave) { in dsa_port_teardown()
633 dsa_slave_destroy(dp->slave); in dsa_port_teardown()
634 dp->slave = NULL; in dsa_port_teardown()
639 dsa_port_devlink_teardown(dp); in dsa_port_teardown()
641 dp->setup = false; in dsa_port_teardown()
644 static int dsa_port_setup_as_unused(struct dsa_port *dp) in dsa_port_setup_as_unused() argument
646 dp->type = DSA_PORT_TYPE_UNUSED; in dsa_port_setup_as_unused()
647 return dsa_port_setup(dp); in dsa_port_setup_as_unused()
985 struct dsa_port *dp; in dsa_tree_teardown_ports() local
987 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
988 if (dsa_port_is_user(dp) || dsa_port_is_unused(dp)) in dsa_tree_teardown_ports()
989 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
993 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
994 if (dsa_port_is_dsa(dp) || dsa_port_is_cpu(dp)) in dsa_tree_teardown_ports()
995 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
1000 struct dsa_port *dp; in dsa_tree_teardown_switches() local
1002 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_switches()
1003 dsa_switch_teardown(dp->ds); in dsa_tree_teardown_switches()
1009 struct dsa_port *dp; in dsa_tree_setup_ports() local
1012 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_ports()
1013 if (dsa_port_is_dsa(dp) || dsa_port_is_cpu(dp)) { in dsa_tree_setup_ports()
1014 err = dsa_port_setup(dp); in dsa_tree_setup_ports()
1020 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_ports()
1021 if (dsa_port_is_user(dp) || dsa_port_is_unused(dp)) { in dsa_tree_setup_ports()
1022 err = dsa_port_setup(dp); in dsa_tree_setup_ports()
1024 err = dsa_port_setup_as_unused(dp); in dsa_tree_setup_ports()
1041 struct dsa_port *dp; in dsa_tree_setup_switches() local
1044 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_switches()
1045 err = dsa_switch_setup(dp->ds); in dsa_tree_setup_switches()
1106 struct dsa_port *dp; in dsa_tree_setup_lags() local
1108 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_lags()
1109 if (dp->ds->num_lag_ids > len) in dsa_tree_setup_lags()
1110 len = dp->ds->num_lag_ids; in dsa_tree_setup_lags()
1249 struct dsa_port *dp; in dsa_tree_change_tag_proto() local
1260 dsa_tree_for_each_user_port(dp, dst) { in dsa_tree_change_tag_proto()
1261 if (dsa_port_to_master(dp)->flags & IFF_UP) in dsa_tree_change_tag_proto()
1264 if (dp->slave->flags & IFF_UP) in dsa_tree_change_tag_proto()
1351 struct dsa_port *dp; in dsa_port_touch() local
1353 dsa_switch_for_each_port(dp, ds) in dsa_port_touch()
1354 if (dp->index == index) in dsa_port_touch()
1355 return dp; in dsa_port_touch()
1357 dp = kzalloc(sizeof(*dp), GFP_KERNEL); in dsa_port_touch()
1358 if (!dp) in dsa_port_touch()
1361 dp->ds = ds; in dsa_port_touch()
1362 dp->index = index; in dsa_port_touch()
1364 mutex_init(&dp->addr_lists_lock); in dsa_port_touch()
1365 mutex_init(&dp->vlans_lock); in dsa_port_touch()
1366 INIT_LIST_HEAD(&dp->fdbs); in dsa_port_touch()
1367 INIT_LIST_HEAD(&dp->mdbs); in dsa_port_touch()
1368 INIT_LIST_HEAD(&dp->vlans); in dsa_port_touch()
1369 INIT_LIST_HEAD(&dp->list); in dsa_port_touch()
1370 list_add_tail(&dp->list, &dst->ports); in dsa_port_touch()
1372 return dp; in dsa_port_touch()
1375 static int dsa_port_parse_user(struct dsa_port *dp, const char *name) in dsa_port_parse_user() argument
1380 dp->type = DSA_PORT_TYPE_USER; in dsa_port_parse_user()
1381 dp->name = name; in dsa_port_parse_user()
1386 static int dsa_port_parse_dsa(struct dsa_port *dp) in dsa_port_parse_dsa() argument
1388 dp->type = DSA_PORT_TYPE_DSA; in dsa_port_parse_dsa()
1393 static enum dsa_tag_protocol dsa_get_tag_protocol(struct dsa_port *dp, in dsa_get_tag_protocol() argument
1397 struct dsa_switch *mds, *ds = dp->ds; in dsa_get_tag_protocol()
1416 return ds->ops->get_tag_protocol(ds, dp->index, tag_protocol); in dsa_get_tag_protocol()
1419 static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master, in dsa_port_parse_cpu() argument
1423 struct dsa_switch *ds = dp->ds; in dsa_port_parse_cpu()
1428 default_proto = dsa_get_tag_protocol(dp, master); in dsa_port_parse_cpu()
1483 dp->master = master; in dsa_port_parse_cpu()
1484 dp->type = DSA_PORT_TYPE_CPU; in dsa_port_parse_cpu()
1485 dsa_port_set_tag_protocol(dp, dst->tag_ops); in dsa_port_parse_cpu()
1486 dp->dst = dst; in dsa_port_parse_cpu()
1504 static int dsa_port_parse_of(struct dsa_port *dp, struct device_node *dn) in dsa_port_parse_of() argument
1510 dp->dn = dn; in dsa_port_parse_of()
1522 return dsa_port_parse_cpu(dp, master, user_protocol); in dsa_port_parse_of()
1526 return dsa_port_parse_dsa(dp); in dsa_port_parse_of()
1528 return dsa_port_parse_user(dp, name); in dsa_port_parse_of()
1535 struct dsa_port *dp; in dsa_switch_parse_ports_of() local
1564 dp = dsa_to_port(ds, reg); in dsa_switch_parse_ports_of()
1566 err = dsa_port_parse_of(dp, port); in dsa_switch_parse_ports_of()
1610 struct dsa_port *dp; in dsa_switch_touch_ports() local
1614 dp = dsa_port_touch(ds, port); in dsa_switch_touch_ports()
1615 if (!dp) in dsa_switch_touch_ports()
1637 static int dsa_port_parse(struct dsa_port *dp, const char *name, in dsa_port_parse() argument
1649 return dsa_port_parse_cpu(dp, master, NULL); in dsa_port_parse()
1653 return dsa_port_parse_dsa(dp); in dsa_port_parse()
1655 return dsa_port_parse_user(dp, name); in dsa_port_parse()
1662 struct dsa_port *dp; in dsa_switch_parse_ports() local
1671 dp = dsa_to_port(ds, i); in dsa_switch_parse_ports()
1676 err = dsa_port_parse(dp, name, dev); in dsa_switch_parse_ports()
1712 struct dsa_port *dp, *next; in dsa_switch_release_ports() local
1714 dsa_switch_for_each_port_safe(dp, next, ds) { in dsa_switch_release_ports()
1715 WARN_ON(!list_empty(&dp->fdbs)); in dsa_switch_release_ports()
1716 WARN_ON(!list_empty(&dp->mdbs)); in dsa_switch_release_ports()
1717 WARN_ON(!list_empty(&dp->vlans)); in dsa_switch_release_ports()
1718 list_del(&dp->list); in dsa_switch_release_ports()
1719 kfree(dp); in dsa_switch_release_ports()
1803 struct dsa_port *dp; in dsa_switch_shutdown() local
1812 dsa_switch_for_each_user_port(dp, ds) { in dsa_switch_shutdown()
1813 master = dsa_port_to_master(dp); in dsa_switch_shutdown()
1814 slave_dev = dp->slave; in dsa_switch_shutdown()
1822 dsa_switch_for_each_cpu_port(dp, ds) in dsa_switch_shutdown()
1823 dp->master->dsa_ptr = NULL; in dsa_switch_shutdown()