Lines Matching refs:ds

117 	struct dsa_switch *ds;  in dsa_tree_find_port_by_node()  local
122 ds = dst->ds[device]; in dsa_tree_find_port_by_node()
123 if (!ds) in dsa_tree_find_port_by_node()
126 for (port = 0; port < ds->num_ports; port++) { in dsa_tree_find_port_by_node()
127 dp = &ds->ports[port]; in dsa_tree_find_port_by_node()
139 struct dsa_switch *ds = dp->ds; in dsa_port_setup_routing_table() local
140 struct dsa_switch_tree *dst = ds->dst; in dsa_port_setup_routing_table()
153 ds->rtable[link_dp->ds->index] = dp->index; in dsa_port_setup_routing_table()
159 static bool dsa_switch_setup_routing_table(struct dsa_switch *ds) in dsa_switch_setup_routing_table() argument
166 ds->rtable[i] = DSA_RTABLE_NONE; in dsa_switch_setup_routing_table()
168 for (i = 0; i < ds->num_ports; i++) { in dsa_switch_setup_routing_table()
169 dp = &ds->ports[i]; in dsa_switch_setup_routing_table()
183 struct dsa_switch *ds; in dsa_tree_setup_routing_table() local
188 ds = dst->ds[device]; in dsa_tree_setup_routing_table()
189 if (!ds) in dsa_tree_setup_routing_table()
192 complete = dsa_switch_setup_routing_table(ds); in dsa_tree_setup_routing_table()
202 struct dsa_switch *ds; in dsa_tree_find_first_cpu() local
207 ds = dst->ds[device]; in dsa_tree_find_first_cpu()
208 if (!ds) in dsa_tree_find_first_cpu()
211 for (port = 0; port < ds->num_ports; port++) { in dsa_tree_find_first_cpu()
212 dp = &ds->ports[port]; in dsa_tree_find_first_cpu()
224 struct dsa_switch *ds; in dsa_tree_setup_default_cpu() local
237 ds = dst->ds[device]; in dsa_tree_setup_default_cpu()
238 if (!ds) in dsa_tree_setup_default_cpu()
241 for (port = 0; port < ds->num_ports; port++) { in dsa_tree_setup_default_cpu()
242 dp = &ds->ports[port]; in dsa_tree_setup_default_cpu()
260 struct dsa_switch *ds = dp->ds; in dsa_port_setup() local
266 err = devlink_port_register(ds->devlink, &dp->devlink_port, in dsa_port_setup()
284 dev_err(ds->dev, "failed to setup link for port %d.%d\n", in dsa_port_setup()
285 ds->index, dp->index); in dsa_port_setup()
299 dev_err(ds->dev, "failed to setup link for port %d.%d\n", in dsa_port_setup()
300 ds->index, dp->index); in dsa_port_setup()
310 dev_err(ds->dev, "failed to create slave for port %d.%d\n", in dsa_port_setup()
311 ds->index, dp->index); in dsa_port_setup()
341 static int dsa_switch_setup(struct dsa_switch *ds) in dsa_switch_setup() argument
350 ds->phys_mii_mask |= dsa_user_ports(ds); in dsa_switch_setup()
355 ds->devlink = devlink_alloc(&dsa_devlink_ops, 0); in dsa_switch_setup()
356 if (!ds->devlink) in dsa_switch_setup()
359 err = devlink_register(ds->devlink, ds->dev); in dsa_switch_setup()
363 err = ds->ops->setup(ds); in dsa_switch_setup()
367 err = dsa_switch_register_notifier(ds); in dsa_switch_setup()
371 if (!ds->slave_mii_bus && ds->ops->phy_read) { in dsa_switch_setup()
372 ds->slave_mii_bus = devm_mdiobus_alloc(ds->dev); in dsa_switch_setup()
373 if (!ds->slave_mii_bus) in dsa_switch_setup()
376 dsa_slave_mii_bus_init(ds); in dsa_switch_setup()
378 err = mdiobus_register(ds->slave_mii_bus); in dsa_switch_setup()
386 static void dsa_switch_teardown(struct dsa_switch *ds) in dsa_switch_teardown() argument
388 if (ds->slave_mii_bus && ds->ops->phy_read) in dsa_switch_teardown()
389 mdiobus_unregister(ds->slave_mii_bus); in dsa_switch_teardown()
391 dsa_switch_unregister_notifier(ds); in dsa_switch_teardown()
393 if (ds->devlink) { in dsa_switch_teardown()
394 devlink_unregister(ds->devlink); in dsa_switch_teardown()
395 devlink_free(ds->devlink); in dsa_switch_teardown()
396 ds->devlink = NULL; in dsa_switch_teardown()
403 struct dsa_switch *ds; in dsa_tree_setup_switches() local
409 ds = dst->ds[device]; in dsa_tree_setup_switches()
410 if (!ds) in dsa_tree_setup_switches()
413 err = dsa_switch_setup(ds); in dsa_tree_setup_switches()
417 for (port = 0; port < ds->num_ports; port++) { in dsa_tree_setup_switches()
418 dp = &ds->ports[port]; in dsa_tree_setup_switches()
431 struct dsa_switch *ds; in dsa_tree_teardown_switches() local
436 ds = dst->ds[device]; in dsa_tree_teardown_switches()
437 if (!ds) in dsa_tree_teardown_switches()
440 for (port = 0; port < ds->num_ports; port++) { in dsa_tree_teardown_switches()
441 dp = &ds->ports[port]; in dsa_tree_teardown_switches()
446 dsa_switch_teardown(ds); in dsa_tree_teardown_switches()
522 dst->ds[index] = NULL; in dsa_tree_remove_switch()
527 struct dsa_switch *ds) in dsa_tree_add_switch() argument
529 unsigned int index = ds->index; in dsa_tree_add_switch()
532 if (dst->ds[index]) in dsa_tree_add_switch()
536 dst->ds[index] = ds; in dsa_tree_add_switch()
565 struct dsa_switch *ds = dp->ds; in dsa_port_parse_cpu() local
566 struct dsa_switch_tree *dst = ds->dst; in dsa_port_parse_cpu()
570 tag_protocol = ds->ops->get_tag_protocol(ds, dp->index); in dsa_port_parse_cpu()
573 dev_warn(ds->dev, "No tagger for this switch\n"); in dsa_port_parse_cpu()
610 static int dsa_switch_parse_ports_of(struct dsa_switch *ds, in dsa_switch_parse_ports_of() argument
620 dev_err(ds->dev, "no ports child node found\n"); in dsa_switch_parse_ports_of()
629 if (reg >= ds->num_ports) in dsa_switch_parse_ports_of()
632 dp = &ds->ports[reg]; in dsa_switch_parse_ports_of()
642 static int dsa_switch_parse_member_of(struct dsa_switch *ds, in dsa_switch_parse_member_of() argument
653 ds->index = m[1]; in dsa_switch_parse_member_of()
654 if (ds->index >= DSA_MAX_SWITCHES) in dsa_switch_parse_member_of()
657 ds->dst = dsa_tree_touch(m[0]); in dsa_switch_parse_member_of()
658 if (!ds->dst) in dsa_switch_parse_member_of()
664 static int dsa_switch_parse_of(struct dsa_switch *ds, struct device_node *dn) in dsa_switch_parse_of() argument
668 err = dsa_switch_parse_member_of(ds, dn); in dsa_switch_parse_of()
672 return dsa_switch_parse_ports_of(ds, dn); in dsa_switch_parse_of()
696 static int dsa_switch_parse_ports(struct dsa_switch *ds, in dsa_switch_parse_ports() argument
709 dp = &ds->ports[i]; in dsa_switch_parse_ports()
727 static int dsa_switch_parse(struct dsa_switch *ds, struct dsa_chip_data *cd) in dsa_switch_parse() argument
729 ds->cd = cd; in dsa_switch_parse()
734 ds->index = 0; in dsa_switch_parse()
735 ds->dst = dsa_tree_touch(0); in dsa_switch_parse()
736 if (!ds->dst) in dsa_switch_parse()
739 return dsa_switch_parse_ports(ds, cd); in dsa_switch_parse()
742 static int dsa_switch_add(struct dsa_switch *ds) in dsa_switch_add() argument
744 struct dsa_switch_tree *dst = ds->dst; in dsa_switch_add()
746 return dsa_tree_add_switch(dst, ds); in dsa_switch_add()
749 static int dsa_switch_probe(struct dsa_switch *ds) in dsa_switch_probe() argument
751 struct dsa_chip_data *pdata = ds->dev->platform_data; in dsa_switch_probe()
752 struct device_node *np = ds->dev->of_node; in dsa_switch_probe()
756 err = dsa_switch_parse_of(ds, np); in dsa_switch_probe()
758 err = dsa_switch_parse(ds, pdata); in dsa_switch_probe()
765 return dsa_switch_add(ds); in dsa_switch_probe()
771 struct dsa_switch *ds; in dsa_switch_alloc() local
774 ds = devm_kzalloc(dev, size, GFP_KERNEL); in dsa_switch_alloc()
775 if (!ds) in dsa_switch_alloc()
781 if (n <= sizeof(ds->_bitmap) * 8) { in dsa_switch_alloc()
782 ds->bitmap = &ds->_bitmap; in dsa_switch_alloc()
784 ds->bitmap = devm_kcalloc(dev, in dsa_switch_alloc()
788 if (unlikely(!ds->bitmap)) in dsa_switch_alloc()
792 ds->dev = dev; in dsa_switch_alloc()
793 ds->num_ports = n; in dsa_switch_alloc()
795 for (i = 0; i < ds->num_ports; ++i) { in dsa_switch_alloc()
796 ds->ports[i].index = i; in dsa_switch_alloc()
797 ds->ports[i].ds = ds; in dsa_switch_alloc()
800 return ds; in dsa_switch_alloc()
804 int dsa_register_switch(struct dsa_switch *ds) in dsa_register_switch() argument
809 err = dsa_switch_probe(ds); in dsa_register_switch()
810 dsa_tree_put(ds->dst); in dsa_register_switch()
817 static void dsa_switch_remove(struct dsa_switch *ds) in dsa_switch_remove() argument
819 struct dsa_switch_tree *dst = ds->dst; in dsa_switch_remove()
820 unsigned int index = ds->index; in dsa_switch_remove()
825 void dsa_unregister_switch(struct dsa_switch *ds) in dsa_unregister_switch() argument
828 dsa_switch_remove(ds); in dsa_unregister_switch()