Lines Matching refs:dp
117 struct dsa_port *dp; in dsa_lag_unmap() local
120 dsa_lag_foreach_port(dp, dst, lag) in dsa_lag_unmap()
135 struct dsa_port *dp; in dsa_bridge_num_find() local
143 list_for_each_entry(dp, &dst->ports, list) in dsa_bridge_num_find()
144 if (dp->bridge_dev == bridge_dev && in dsa_bridge_num_find()
145 dp->bridge_num != -1) in dsa_bridge_num_find()
146 return dp->bridge_num; in dsa_bridge_num_find()
180 struct dsa_port *dp; in dsa_switch_find() local
186 list_for_each_entry(dp, &dst->ports, list) { in dsa_switch_find()
187 if (dp->ds->index != sw_index) in dsa_switch_find()
190 return dp->ds; in dsa_switch_find()
276 struct dsa_port *dp; in dsa_tree_find_port_by_node() local
278 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_find_port_by_node()
279 if (dp->dn == dn) in dsa_tree_find_port_by_node()
280 return dp; in dsa_tree_find_port_by_node()
285 static struct dsa_link *dsa_link_touch(struct dsa_port *dp, in dsa_link_touch() argument
288 struct dsa_switch *ds = dp->ds; in dsa_link_touch()
295 if (dl->dp == dp && dl->link_dp == link_dp) in dsa_link_touch()
302 dl->dp = dp; in dsa_link_touch()
311 static bool dsa_port_setup_routing_table(struct dsa_port *dp) in dsa_port_setup_routing_table() argument
313 struct dsa_switch *ds = dp->ds; in dsa_port_setup_routing_table()
315 struct device_node *dn = dp->dn; in dsa_port_setup_routing_table()
328 dl = dsa_link_touch(dp, link_dp); in dsa_port_setup_routing_table()
341 struct dsa_port *dp; in dsa_tree_setup_routing_table() local
343 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_routing_table()
344 if (dsa_port_is_dsa(dp)) { in dsa_tree_setup_routing_table()
345 complete = dsa_port_setup_routing_table(dp); in dsa_tree_setup_routing_table()
356 struct dsa_port *dp; in dsa_tree_find_first_cpu() local
358 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_find_first_cpu()
359 if (dsa_port_is_cpu(dp)) in dsa_tree_find_first_cpu()
360 return dp; in dsa_tree_find_first_cpu()
370 struct dsa_port *cpu_dp, *dp; in dsa_tree_setup_default_cpu() local
378 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_default_cpu()
379 if (dp->cpu_dp) in dsa_tree_setup_default_cpu()
382 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_setup_default_cpu()
383 dp->cpu_dp = cpu_dp; in dsa_tree_setup_default_cpu()
396 struct dsa_port *cpu_dp, *dp; in dsa_tree_setup_cpu_ports() local
403 dsa_switch_for_each_port(dp, cpu_dp->ds) { in dsa_tree_setup_cpu_ports()
405 if (dp->cpu_dp) in dsa_tree_setup_cpu_ports()
408 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_setup_cpu_ports()
409 dp->cpu_dp = cpu_dp; in dsa_tree_setup_cpu_ports()
418 struct dsa_port *dp; in dsa_tree_teardown_cpu_ports() local
420 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_cpu_ports()
421 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_teardown_cpu_ports()
422 dp->cpu_dp = NULL; in dsa_tree_teardown_cpu_ports()
425 static int dsa_port_setup(struct dsa_port *dp) in dsa_port_setup() argument
427 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_setup()
429 struct dsa_switch *ds = dp->ds; in dsa_port_setup()
433 if (dp->setup) in dsa_port_setup()
436 mutex_init(&dp->addr_lists_lock); in dsa_port_setup()
437 INIT_LIST_HEAD(&dp->fdbs); in dsa_port_setup()
438 INIT_LIST_HEAD(&dp->mdbs); in dsa_port_setup()
441 err = ds->ops->port_setup(ds, dp->index); in dsa_port_setup()
446 switch (dp->type) { in dsa_port_setup()
448 dsa_port_disable(dp); in dsa_port_setup()
451 err = dsa_port_link_register_of(dp); in dsa_port_setup()
456 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
463 err = dsa_port_link_register_of(dp); in dsa_port_setup()
468 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
475 of_get_mac_address(dp->dn, dp->mac); in dsa_port_setup()
476 err = dsa_slave_create(dp); in dsa_port_setup()
480 devlink_port_type_eth_set(dlp, dp->slave); in dsa_port_setup()
485 dsa_port_disable(dp); in dsa_port_setup()
487 dsa_port_link_unregister_of(dp); in dsa_port_setup()
490 ds->ops->port_teardown(ds, dp->index); in dsa_port_setup()
494 dp->setup = true; in dsa_port_setup()
499 static int dsa_port_devlink_setup(struct dsa_port *dp) in dsa_port_devlink_setup() argument
501 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_devlink_setup()
502 struct dsa_switch_tree *dst = dp->ds->dst; in dsa_port_devlink_setup()
504 struct devlink *dl = dp->ds->devlink; in dsa_port_devlink_setup()
512 attrs.phys.port_number = dp->index; in dsa_port_devlink_setup()
517 switch (dp->type) { in dsa_port_devlink_setup()
533 err = devlink_port_register(dl, dlp, dp->index); in dsa_port_devlink_setup()
536 dp->devlink_port_setup = true; in dsa_port_devlink_setup()
541 static void dsa_port_teardown(struct dsa_port *dp) in dsa_port_teardown() argument
543 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_teardown()
544 struct dsa_switch *ds = dp->ds; in dsa_port_teardown()
547 if (!dp->setup) in dsa_port_teardown()
551 ds->ops->port_teardown(ds, dp->index); in dsa_port_teardown()
555 switch (dp->type) { in dsa_port_teardown()
559 dsa_port_disable(dp); in dsa_port_teardown()
560 dsa_port_link_unregister_of(dp); in dsa_port_teardown()
563 dsa_port_disable(dp); in dsa_port_teardown()
564 dsa_port_link_unregister_of(dp); in dsa_port_teardown()
567 if (dp->slave) { in dsa_port_teardown()
568 dsa_slave_destroy(dp->slave); in dsa_port_teardown()
569 dp->slave = NULL; in dsa_port_teardown()
574 list_for_each_entry_safe(a, tmp, &dp->fdbs, list) { in dsa_port_teardown()
579 list_for_each_entry_safe(a, tmp, &dp->mdbs, list) { in dsa_port_teardown()
584 dp->setup = false; in dsa_port_teardown()
587 static void dsa_port_devlink_teardown(struct dsa_port *dp) in dsa_port_devlink_teardown() argument
589 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_devlink_teardown()
591 if (dp->devlink_port_setup) in dsa_port_devlink_teardown()
593 dp->devlink_port_setup = false; in dsa_port_devlink_teardown()
603 static int dsa_port_reinit_as_unused(struct dsa_port *dp) in dsa_port_reinit_as_unused() argument
605 struct dsa_switch *ds = dp->ds; in dsa_port_reinit_as_unused()
608 dsa_port_devlink_teardown(dp); in dsa_port_reinit_as_unused()
609 dp->type = DSA_PORT_TYPE_UNUSED; in dsa_port_reinit_as_unused()
610 err = dsa_port_devlink_setup(dp); in dsa_port_reinit_as_unused()
618 err = ds->ops->port_setup(ds, dp->index); in dsa_port_reinit_as_unused()
827 struct dsa_port *dp; in dsa_switch_setup() local
853 dsa_switch_for_each_port(dp, ds) { in dsa_switch_setup()
854 err = dsa_port_devlink_setup(dp); in dsa_switch_setup()
900 dsa_switch_for_each_port(dp, ds) in dsa_switch_setup()
901 dsa_port_devlink_teardown(dp); in dsa_switch_setup()
909 struct dsa_port *dp; in dsa_switch_teardown() local
929 dsa_switch_for_each_port(dp, ds) in dsa_switch_teardown()
930 dsa_port_devlink_teardown(dp); in dsa_switch_teardown()
944 struct dsa_port *dp; in dsa_tree_teardown_ports() local
946 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
947 if (dsa_port_is_user(dp) || dsa_port_is_unused(dp)) in dsa_tree_teardown_ports()
948 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
952 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
953 if (dsa_port_is_dsa(dp) || dsa_port_is_cpu(dp)) in dsa_tree_teardown_ports()
954 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
959 struct dsa_port *dp; in dsa_tree_teardown_switches() local
961 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_switches()
962 dsa_switch_teardown(dp->ds); in dsa_tree_teardown_switches()
967 struct dsa_port *dp; in dsa_tree_setup_switches() local
970 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_switches()
971 err = dsa_switch_setup(dp->ds); in dsa_tree_setup_switches()
976 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_switches()
977 err = dsa_port_setup(dp); in dsa_tree_setup_switches()
979 err = dsa_port_reinit_as_unused(dp); in dsa_tree_setup_switches()
997 struct dsa_port *dp; in dsa_tree_setup_master() local
1000 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_master()
1001 if (dsa_port_is_cpu(dp)) { in dsa_tree_setup_master()
1002 err = dsa_master_setup(dp->master, dp); in dsa_tree_setup_master()
1013 struct dsa_port *dp; in dsa_tree_teardown_master() local
1015 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_master()
1016 if (dsa_port_is_cpu(dp)) in dsa_tree_teardown_master()
1017 dsa_master_teardown(dp->master); in dsa_tree_teardown_master()
1023 struct dsa_port *dp; in dsa_tree_setup_lags() local
1025 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_lags()
1026 if (dp->ds->num_lag_ids > len) in dsa_tree_setup_lags()
1027 len = dp->ds->num_lag_ids; in dsa_tree_setup_lags()
1131 struct dsa_port *dp; in dsa_tree_change_tag_proto() local
1145 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_change_tag_proto()
1146 if (!dsa_port_is_user(dp)) in dsa_tree_change_tag_proto()
1149 if (dp->slave->flags & IFF_UP) in dsa_tree_change_tag_proto()
1175 struct dsa_port *dp; in dsa_port_touch() local
1177 dsa_switch_for_each_port(dp, ds) in dsa_port_touch()
1178 if (dp->index == index) in dsa_port_touch()
1179 return dp; in dsa_port_touch()
1181 dp = kzalloc(sizeof(*dp), GFP_KERNEL); in dsa_port_touch()
1182 if (!dp) in dsa_port_touch()
1185 dp->ds = ds; in dsa_port_touch()
1186 dp->index = index; in dsa_port_touch()
1187 dp->bridge_num = -1; in dsa_port_touch()
1189 INIT_LIST_HEAD(&dp->list); in dsa_port_touch()
1190 list_add_tail(&dp->list, &dst->ports); in dsa_port_touch()
1192 return dp; in dsa_port_touch()
1195 static int dsa_port_parse_user(struct dsa_port *dp, const char *name) in dsa_port_parse_user() argument
1200 dp->type = DSA_PORT_TYPE_USER; in dsa_port_parse_user()
1201 dp->name = name; in dsa_port_parse_user()
1206 static int dsa_port_parse_dsa(struct dsa_port *dp) in dsa_port_parse_dsa() argument
1208 dp->type = DSA_PORT_TYPE_DSA; in dsa_port_parse_dsa()
1213 static enum dsa_tag_protocol dsa_get_tag_protocol(struct dsa_port *dp, in dsa_get_tag_protocol() argument
1217 struct dsa_switch *mds, *ds = dp->ds; in dsa_get_tag_protocol()
1236 return ds->ops->get_tag_protocol(ds, dp->index, tag_protocol); in dsa_get_tag_protocol()
1239 static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master, in dsa_port_parse_cpu() argument
1242 struct dsa_switch *ds = dp->ds; in dsa_port_parse_cpu()
1248 default_proto = dsa_get_tag_protocol(dp, master); in dsa_port_parse_cpu()
1296 dp->master = master; in dsa_port_parse_cpu()
1297 dp->type = DSA_PORT_TYPE_CPU; in dsa_port_parse_cpu()
1298 dsa_port_set_tag_protocol(dp, dst->tag_ops); in dsa_port_parse_cpu()
1299 dp->dst = dst; in dsa_port_parse_cpu()
1317 static int dsa_port_parse_of(struct dsa_port *dp, struct device_node *dn) in dsa_port_parse_of() argument
1323 dp->dn = dn; in dsa_port_parse_of()
1334 return dsa_port_parse_cpu(dp, master, user_protocol); in dsa_port_parse_of()
1338 return dsa_port_parse_dsa(dp); in dsa_port_parse_of()
1340 return dsa_port_parse_user(dp, name); in dsa_port_parse_of()
1347 struct dsa_port *dp; in dsa_switch_parse_ports_of() local
1376 dp = dsa_to_port(ds, reg); in dsa_switch_parse_ports_of()
1378 err = dsa_port_parse_of(dp, port); in dsa_switch_parse_ports_of()
1422 struct dsa_port *dp; in dsa_switch_touch_ports() local
1426 dp = dsa_port_touch(ds, port); in dsa_switch_touch_ports()
1427 if (!dp) in dsa_switch_touch_ports()
1449 static int dsa_port_parse(struct dsa_port *dp, const char *name, in dsa_port_parse() argument
1461 return dsa_port_parse_cpu(dp, master, NULL); in dsa_port_parse()
1465 return dsa_port_parse_dsa(dp); in dsa_port_parse()
1467 return dsa_port_parse_user(dp, name); in dsa_port_parse()
1474 struct dsa_port *dp; in dsa_switch_parse_ports() local
1483 dp = dsa_to_port(ds, i); in dsa_switch_parse_ports()
1488 err = dsa_port_parse(dp, name, dev); in dsa_switch_parse_ports()
1524 struct dsa_port *dp, *next; in dsa_switch_release_ports() local
1526 dsa_switch_for_each_port_safe(dp, next, ds) { in dsa_switch_release_ports()
1527 list_del(&dp->list); in dsa_switch_release_ports()
1528 kfree(dp); in dsa_switch_release_ports()
1613 struct dsa_port *dp; in dsa_switch_shutdown() local
1618 dsa_switch_for_each_user_port(dp, ds) { in dsa_switch_shutdown()
1619 master = dp->cpu_dp->master; in dsa_switch_shutdown()
1620 slave_dev = dp->slave; in dsa_switch_shutdown()