Lines Matching refs:dp
27 struct dsa_port *dp;
33 list_for_each_entry(dp, &dst->ports, list) {
34 if (dp->ds->index != sw_index)
37 return dp->ds;
128 static bool dsa_port_is_user(struct dsa_port *dp)
130 return dp->type == DSA_PORT_TYPE_USER;
136 struct dsa_port *dp;
138 list_for_each_entry(dp, &dst->ports, list)
139 if (dp->dn == dn)
140 return dp;
145 static struct dsa_link *dsa_link_touch(struct dsa_port *dp,
148 struct dsa_switch *ds = dp->ds;
155 if (dl->dp == dp && dl->link_dp == link_dp)
162 dl->dp = dp;
171 static bool dsa_port_setup_routing_table(struct dsa_port *dp)
173 struct dsa_switch *ds = dp->ds;
175 struct device_node *dn = dp->dn;
188 dl = dsa_link_touch(dp, link_dp);
201 struct dsa_port *dp;
203 list_for_each_entry(dp, &dst->ports, list) {
204 if (dsa_port_is_dsa(dp)) {
205 complete = dsa_port_setup_routing_table(dp);
216 struct dsa_port *dp;
218 list_for_each_entry(dp, &dst->ports, list)
219 if (dsa_port_is_cpu(dp))
220 return dp;
227 struct dsa_port *cpu_dp, *dp;
236 list_for_each_entry(dp, &dst->ports, list)
237 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp))
238 dp->cpu_dp = cpu_dp;
245 struct dsa_port *dp;
247 list_for_each_entry(dp, &dst->ports, list)
248 if (dsa_port_is_user(dp) || dsa_port_is_dsa(dp))
249 dp->cpu_dp = NULL;
252 static int dsa_port_setup(struct dsa_port *dp)
254 struct devlink_port *dlp = &dp->devlink_port;
259 if (dp->setup)
262 switch (dp->type) {
264 dsa_port_disable(dp);
267 err = dsa_port_link_register_of(dp);
272 err = dsa_port_enable(dp, NULL);
279 err = dsa_port_link_register_of(dp);
284 err = dsa_port_enable(dp, NULL);
291 dp->mac = of_get_mac_address(dp->dn);
292 err = dsa_slave_create(dp);
296 devlink_port_type_eth_set(dlp, dp->slave);
301 dsa_port_disable(dp);
303 dsa_port_link_unregister_of(dp);
307 dp->setup = true;
312 static int dsa_port_devlink_setup(struct dsa_port *dp)
314 struct devlink_port *dlp = &dp->devlink_port;
315 struct dsa_switch_tree *dst = dp->ds->dst;
317 struct devlink *dl = dp->ds->devlink;
325 attrs.phys.port_number = dp->index;
330 switch (dp->type) {
346 err = devlink_port_register(dl, dlp, dp->index);
349 dp->devlink_port_setup = true;
354 static void dsa_port_teardown(struct dsa_port *dp)
356 struct devlink_port *dlp = &dp->devlink_port;
358 if (!dp->setup)
363 switch (dp->type) {
367 dsa_port_disable(dp);
368 dsa_tag_driver_put(dp->tag_ops);
369 dsa_port_link_unregister_of(dp);
372 dsa_port_disable(dp);
373 dsa_port_link_unregister_of(dp);
376 if (dp->slave) {
377 dsa_slave_destroy(dp->slave);
378 dp->slave = NULL;
383 dp->setup = false;
386 static void dsa_port_devlink_teardown(struct dsa_port *dp)
388 struct devlink_port *dlp = &dp->devlink_port;
390 if (dp->devlink_port_setup)
392 dp->devlink_port_setup = false;
414 struct dsa_port *dp;
443 list_for_each_entry(dp, &ds->dst->ports, list) {
444 if (dp->ds == ds) {
445 err = dsa_port_devlink_setup(dp);
488 list_for_each_entry(dp, &ds->dst->ports, list)
489 if (dp->ds == ds)
490 dsa_port_devlink_teardown(dp);
501 struct dsa_port *dp;
518 list_for_each_entry(dp, &ds->dst->ports, list)
519 if (dp->ds == ds)
520 dsa_port_devlink_teardown(dp);
531 struct dsa_port *dp;
534 list_for_each_entry(dp, &dst->ports, list) {
535 err = dsa_switch_setup(dp->ds);
540 list_for_each_entry(dp, &dst->ports, list) {
541 err = dsa_port_setup(dp);
543 dsa_port_devlink_teardown(dp);
544 dp->type = DSA_PORT_TYPE_UNUSED;
545 err = dsa_port_devlink_setup(dp);
555 list_for_each_entry(dp, &dst->ports, list)
556 dsa_port_teardown(dp);
558 list_for_each_entry(dp, &dst->ports, list)
559 dsa_switch_teardown(dp->ds);
566 struct dsa_port *dp;
568 list_for_each_entry(dp, &dst->ports, list)
569 dsa_port_teardown(dp);
571 list_for_each_entry(dp, &dst->ports, list)
572 dsa_switch_teardown(dp->ds);
577 struct dsa_port *dp;
580 list_for_each_entry(dp, &dst->ports, list) {
581 if (dsa_port_is_cpu(dp)) {
582 err = dsa_master_setup(dp->master, dp);
593 struct dsa_port *dp;
595 list_for_each_entry(dp, &dst->ports, list)
596 if (dsa_port_is_cpu(dp))
597 dsa_master_teardown(dp->master);
667 struct dsa_port *dp;
669 list_for_each_entry(dp, &dst->ports, list)
670 if (dp->ds == ds && dp->index == index)
671 return dp;
673 dp = kzalloc(sizeof(*dp), GFP_KERNEL);
674 if (!dp)
677 dp->ds = ds;
678 dp->index = index;
680 INIT_LIST_HEAD(&dp->list);
681 list_add_tail(&dp->list, &dst->ports);
683 return dp;
686 static int dsa_port_parse_user(struct dsa_port *dp, const char *name)
691 dp->type = DSA_PORT_TYPE_USER;
692 dp->name = name;
697 static int dsa_port_parse_dsa(struct dsa_port *dp)
699 dp->type = DSA_PORT_TYPE_DSA;
704 static enum dsa_tag_protocol dsa_get_tag_protocol(struct dsa_port *dp,
708 struct dsa_switch *mds, *ds = dp->ds;
727 return ds->ops->get_tag_protocol(ds, dp->index, tag_protocol);
730 static int dsa_port_parse_cpu(struct dsa_port *dp, struct net_device *master)
732 struct dsa_switch *ds = dp->ds;
737 tag_protocol = dsa_get_tag_protocol(dp, master);
743 dp->master = NULL;
747 dp->master = master;
748 dp->type = DSA_PORT_TYPE_CPU;
749 dp->filter = tag_ops->filter;
750 dp->rcv = tag_ops->rcv;
751 dp->tag_ops = tag_ops;
752 dp->dst = dst;
757 static int dsa_port_parse_of(struct dsa_port *dp, struct device_node *dn)
763 dp->dn = dn;
773 return dsa_port_parse_cpu(dp, master);
777 return dsa_port_parse_dsa(dp);
779 return dsa_port_parse_user(dp, name);
786 struct dsa_port *dp;
810 dp = dsa_to_port(ds, reg);
812 err = dsa_port_parse_of(dp, port);
844 struct dsa_port *dp;
848 dp = dsa_port_touch(ds, port);
849 if (!dp)
871 static int dsa_port_parse(struct dsa_port *dp, const char *name,
883 return dsa_port_parse_cpu(dp, master);
887 return dsa_port_parse_dsa(dp);
889 return dsa_port_parse_user(dp, name);
896 struct dsa_port *dp;
905 dp = dsa_to_port(ds, i);
910 err = dsa_port_parse(dp, name, dev);
947 struct dsa_port *dp, *next;
949 list_for_each_entry_safe(dp, next, &dst->ports, list) {
950 if (dp->ds != ds)
952 list_del(&dp->list);
953 kfree(dp);