Lines Matching full: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
138 * dp->bridge_dev pointer but a not yet valid dp->bridge_num. in dsa_bridge_num_find()
139 * However there might be other ports having the same dp->bridge_dev in dsa_bridge_num_find()
140 * and a valid dp->bridge_num, so just ignore this port. in dsa_bridge_num_find()
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
402 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_cpu_ports()
404 if (dp->ds != cpu_dp->ds) in dsa_tree_setup_cpu_ports()
408 if (dp->cpu_dp) in dsa_tree_setup_cpu_ports()
411 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_setup_cpu_ports()
412 dp->cpu_dp = cpu_dp; in dsa_tree_setup_cpu_ports()
421 struct dsa_port *dp; in dsa_tree_teardown_cpu_ports() local
423 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_cpu_ports()
424 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp)) in dsa_tree_teardown_cpu_ports()
425 dp->cpu_dp = NULL; in dsa_tree_teardown_cpu_ports()
428 static int dsa_port_setup(struct dsa_port *dp) in dsa_port_setup() argument
430 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_setup()
432 struct dsa_switch *ds = dp->ds; in dsa_port_setup()
436 if (dp->setup) in dsa_port_setup()
439 INIT_LIST_HEAD(&dp->fdbs); in dsa_port_setup()
440 INIT_LIST_HEAD(&dp->mdbs); in dsa_port_setup()
443 err = ds->ops->port_setup(ds, dp->index); in dsa_port_setup()
448 switch (dp->type) { in dsa_port_setup()
450 dsa_port_disable(dp); in dsa_port_setup()
453 err = dsa_port_link_register_of(dp); in dsa_port_setup()
458 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
465 err = dsa_port_link_register_of(dp); in dsa_port_setup()
470 err = dsa_port_enable(dp, NULL); in dsa_port_setup()
477 of_get_mac_address(dp->dn, dp->mac); in dsa_port_setup()
478 err = dsa_slave_create(dp); in dsa_port_setup()
482 devlink_port_type_eth_set(dlp, dp->slave); in dsa_port_setup()
487 dsa_port_disable(dp); in dsa_port_setup()
489 dsa_port_link_unregister_of(dp); in dsa_port_setup()
492 ds->ops->port_teardown(ds, dp->index); in dsa_port_setup()
496 dp->setup = true; in dsa_port_setup()
501 static int dsa_port_devlink_setup(struct dsa_port *dp) in dsa_port_devlink_setup() argument
503 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_devlink_setup()
504 struct dsa_switch_tree *dst = dp->ds->dst; in dsa_port_devlink_setup()
506 struct devlink *dl = dp->ds->devlink; in dsa_port_devlink_setup()
514 attrs.phys.port_number = dp->index; in dsa_port_devlink_setup()
519 switch (dp->type) { in dsa_port_devlink_setup()
535 err = devlink_port_register(dl, dlp, dp->index); in dsa_port_devlink_setup()
538 dp->devlink_port_setup = true; in dsa_port_devlink_setup()
543 static void dsa_port_teardown(struct dsa_port *dp) in dsa_port_teardown() argument
545 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_teardown()
546 struct dsa_switch *ds = dp->ds; in dsa_port_teardown()
549 if (!dp->setup) in dsa_port_teardown()
553 ds->ops->port_teardown(ds, dp->index); in dsa_port_teardown()
557 switch (dp->type) { in dsa_port_teardown()
561 dsa_port_disable(dp); in dsa_port_teardown()
562 dsa_port_link_unregister_of(dp); in dsa_port_teardown()
565 dsa_port_disable(dp); in dsa_port_teardown()
566 dsa_port_link_unregister_of(dp); in dsa_port_teardown()
569 if (dp->slave) { in dsa_port_teardown()
570 dsa_slave_destroy(dp->slave); in dsa_port_teardown()
571 dp->slave = NULL; in dsa_port_teardown()
576 list_for_each_entry_safe(a, tmp, &dp->fdbs, list) { in dsa_port_teardown()
581 list_for_each_entry_safe(a, tmp, &dp->mdbs, list) { in dsa_port_teardown()
586 dp->setup = false; in dsa_port_teardown()
589 static void dsa_port_devlink_teardown(struct dsa_port *dp) in dsa_port_devlink_teardown() argument
591 struct devlink_port *dlp = &dp->devlink_port; in dsa_port_devlink_teardown()
593 if (dp->devlink_port_setup) in dsa_port_devlink_teardown()
595 dp->devlink_port_setup = false; in dsa_port_devlink_teardown()
605 static int dsa_port_reinit_as_unused(struct dsa_port *dp) in dsa_port_reinit_as_unused() argument
607 struct dsa_switch *ds = dp->ds; in dsa_port_reinit_as_unused()
610 dsa_port_devlink_teardown(dp); in dsa_port_reinit_as_unused()
611 dp->type = DSA_PORT_TYPE_UNUSED; in dsa_port_reinit_as_unused()
612 err = dsa_port_devlink_setup(dp); in dsa_port_reinit_as_unused()
620 err = ds->ops->port_setup(ds, dp->index); in dsa_port_reinit_as_unused()
830 struct dsa_port *dp; in dsa_switch_setup() local
860 list_for_each_entry(dp, &ds->dst->ports, list) { in dsa_switch_setup()
861 if (dp->ds == ds) { in dsa_switch_setup()
862 err = dsa_port_devlink_setup(dp); in dsa_switch_setup()
911 list_for_each_entry(dp, &ds->dst->ports, list) in dsa_switch_setup()
912 if (dp->ds == ds) in dsa_switch_setup()
913 dsa_port_devlink_teardown(dp); in dsa_switch_setup()
924 struct dsa_port *dp; in dsa_switch_teardown() local
941 list_for_each_entry(dp, &ds->dst->ports, list) in dsa_switch_teardown()
942 if (dp->ds == ds) in dsa_switch_teardown()
943 dsa_port_devlink_teardown(dp); in dsa_switch_teardown()
958 struct dsa_port *dp; in dsa_tree_teardown_ports() local
960 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
961 if (dsa_port_is_user(dp) || dsa_port_is_unused(dp)) in dsa_tree_teardown_ports()
962 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
966 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_ports()
967 if (dsa_port_is_dsa(dp) || dsa_port_is_cpu(dp)) in dsa_tree_teardown_ports()
968 dsa_port_teardown(dp); in dsa_tree_teardown_ports()
973 struct dsa_port *dp; in dsa_tree_teardown_switches() local
975 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_switches()
976 dsa_switch_teardown(dp->ds); in dsa_tree_teardown_switches()
981 struct dsa_port *dp; in dsa_tree_setup_switches() local
984 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_switches()
985 err = dsa_switch_setup(dp->ds); in dsa_tree_setup_switches()
990 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_switches()
991 err = dsa_port_setup(dp); in dsa_tree_setup_switches()
993 err = dsa_port_reinit_as_unused(dp); in dsa_tree_setup_switches()
1011 struct dsa_port *dp; in dsa_tree_setup_master() local
1014 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_master()
1015 if (dsa_port_is_cpu(dp)) { in dsa_tree_setup_master()
1016 err = dsa_master_setup(dp->master, dp); in dsa_tree_setup_master()
1027 struct dsa_port *dp; in dsa_tree_teardown_master() local
1029 list_for_each_entry(dp, &dst->ports, list) in dsa_tree_teardown_master()
1030 if (dsa_port_is_cpu(dp)) in dsa_tree_teardown_master()
1031 dsa_master_teardown(dp->master); in dsa_tree_teardown_master()
1037 struct dsa_port *dp; in dsa_tree_setup_lags() local
1039 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_setup_lags()
1040 if (dp->ds->num_lag_ids > len) in dsa_tree_setup_lags()
1041 len = dp->ds->num_lag_ids; in dsa_tree_setup_lags()
1145 struct dsa_port *dp; in dsa_tree_change_tag_proto() local
1159 list_for_each_entry(dp, &dst->ports, list) { in dsa_tree_change_tag_proto()
1160 if (!dsa_is_user_port(dp->ds, dp->index)) in dsa_tree_change_tag_proto()
1163 if (dp->slave->flags & IFF_UP) in dsa_tree_change_tag_proto()
1189 struct dsa_port *dp; in dsa_port_touch() local
1191 list_for_each_entry(dp, &dst->ports, list) in dsa_port_touch()
1192 if (dp->ds == ds && dp->index == index) in dsa_port_touch()
1193 return dp; in dsa_port_touch()
1195 dp = kzalloc(sizeof(*dp), GFP_KERNEL); in dsa_port_touch()
1196 if (!dp) in dsa_port_touch()
1199 dp->ds = ds; in dsa_port_touch()
1200 dp->index = index; in dsa_port_touch()
1201 dp->bridge_num = -1; in dsa_port_touch()
1203 INIT_LIST_HEAD(&dp->list); in dsa_port_touch()
1204 list_add_tail(&dp->list, &dst->ports); in dsa_port_touch()
1206 return dp; in dsa_port_touch()
1209 static int dsa_port_parse_user(struct dsa_port *dp, const char *name) in dsa_port_parse_user() argument
1214 dp->type = DSA_PORT_TYPE_USER; in dsa_port_parse_user()
1215 dp->name = name; in dsa_port_parse_user()
1220 static int dsa_port_parse_dsa(struct dsa_port *dp) in dsa_port_parse_dsa() argument
1222 dp->type = DSA_PORT_TYPE_DSA; in dsa_port_parse_dsa()
1227 static enum dsa_tag_protocol dsa_get_tag_protocol(struct dsa_port *dp, in dsa_get_tag_protocol() argument
1231 struct dsa_switch *mds, *ds = dp->ds; in dsa_get_tag_protocol()
1250 return ds->ops->get_tag_protocol(ds, dp->index, tag_protocol); in dsa_get_tag_protocol()
1253 static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master, in dsa_port_parse_cpu() argument
1256 struct dsa_switch *ds = dp->ds; in dsa_port_parse_cpu()
1262 default_proto = dsa_get_tag_protocol(dp, master); in dsa_port_parse_cpu()
1310 dp->master = master; in dsa_port_parse_cpu()
1311 dp->type = DSA_PORT_TYPE_CPU; in dsa_port_parse_cpu()
1312 dsa_port_set_tag_protocol(dp, dst->tag_ops); in dsa_port_parse_cpu()
1313 dp->dst = dst; in dsa_port_parse_cpu()
1331 static int dsa_port_parse_of(struct dsa_port *dp, struct device_node *dn) in dsa_port_parse_of() argument
1337 dp->dn = dn; in dsa_port_parse_of()
1348 return dsa_port_parse_cpu(dp, master, user_protocol); in dsa_port_parse_of()
1352 return dsa_port_parse_dsa(dp); in dsa_port_parse_of()
1354 return dsa_port_parse_user(dp, name); in dsa_port_parse_of()
1361 struct dsa_port *dp; in dsa_switch_parse_ports_of() local
1390 dp = dsa_to_port(ds, reg); in dsa_switch_parse_ports_of()
1392 err = dsa_port_parse_of(dp, port); in dsa_switch_parse_ports_of()
1436 struct dsa_port *dp; in dsa_switch_touch_ports() local
1440 dp = dsa_port_touch(ds, port); in dsa_switch_touch_ports()
1441 if (!dp) in dsa_switch_touch_ports()
1463 static int dsa_port_parse(struct dsa_port *dp, const char *name, in dsa_port_parse() argument
1475 return dsa_port_parse_cpu(dp, master, NULL); in dsa_port_parse()
1479 return dsa_port_parse_dsa(dp); in dsa_port_parse()
1481 return dsa_port_parse_user(dp, name); in dsa_port_parse()
1488 struct dsa_port *dp; in dsa_switch_parse_ports() local
1497 dp = dsa_to_port(ds, i); in dsa_switch_parse_ports()
1502 err = dsa_port_parse(dp, name, dev); in dsa_switch_parse_ports()
1539 struct dsa_port *dp, *next; in dsa_switch_release_ports() local
1541 list_for_each_entry_safe(dp, next, &dst->ports, list) { in dsa_switch_release_ports()
1542 if (dp->ds != ds) in dsa_switch_release_ports()
1544 list_del(&dp->list); in dsa_switch_release_ports()
1545 kfree(dp); in dsa_switch_release_ports()
1630 struct dsa_port *dp; in dsa_switch_shutdown() local
1635 list_for_each_entry(dp, &ds->dst->ports, list) { in dsa_switch_shutdown()
1636 if (dp->ds != ds) in dsa_switch_shutdown()
1639 if (!dsa_port_is_user(dp)) in dsa_switch_shutdown()
1642 master = dp->cpu_dp->master; in dsa_switch_shutdown()
1643 slave_dev = dp->slave; in dsa_switch_shutdown()