• Home
  • Raw
  • Download

Lines Matching refs:dp

33 static int dsa_port_notify(const struct dsa_port *dp, unsigned long e, void *v)  in dsa_port_notify()  argument
35 struct raw_notifier_head *nh = &dp->ds->dst->nh; in dsa_port_notify()
43 int dsa_port_set_state(struct dsa_port *dp, u8 state, in dsa_port_set_state() argument
46 struct dsa_switch *ds = dp->ds; in dsa_port_set_state()
47 int port = dp->index; in dsa_port_set_state()
61 if ((dp->stp_state == BR_STATE_LEARNING || in dsa_port_set_state()
62 dp->stp_state == BR_STATE_FORWARDING) && in dsa_port_set_state()
69 dp->stp_state = state; in dsa_port_set_state()
74 static void dsa_port_set_state_now(struct dsa_port *dp, u8 state) in dsa_port_set_state_now() argument
78 err = dsa_port_set_state(dp, state, NULL); in dsa_port_set_state_now()
83 int dsa_port_enable_rt(struct dsa_port *dp, struct phy_device *phy) in dsa_port_enable_rt() argument
85 struct dsa_switch *ds = dp->ds; in dsa_port_enable_rt()
86 int port = dp->index; in dsa_port_enable_rt()
95 if (!dp->bridge_dev) in dsa_port_enable_rt()
96 dsa_port_set_state_now(dp, BR_STATE_FORWARDING); in dsa_port_enable_rt()
98 if (dp->pl) in dsa_port_enable_rt()
99 phylink_start(dp->pl); in dsa_port_enable_rt()
104 int dsa_port_enable(struct dsa_port *dp, struct phy_device *phy) in dsa_port_enable() argument
109 err = dsa_port_enable_rt(dp, phy); in dsa_port_enable()
115 void dsa_port_disable_rt(struct dsa_port *dp) in dsa_port_disable_rt() argument
117 struct dsa_switch *ds = dp->ds; in dsa_port_disable_rt()
118 int port = dp->index; in dsa_port_disable_rt()
120 if (dp->pl) in dsa_port_disable_rt()
121 phylink_stop(dp->pl); in dsa_port_disable_rt()
123 if (!dp->bridge_dev) in dsa_port_disable_rt()
124 dsa_port_set_state_now(dp, BR_STATE_DISABLED); in dsa_port_disable_rt()
130 void dsa_port_disable(struct dsa_port *dp) in dsa_port_disable() argument
133 dsa_port_disable_rt(dp); in dsa_port_disable()
137 int dsa_port_bridge_join(struct dsa_port *dp, struct net_device *br) in dsa_port_bridge_join() argument
140 .tree_index = dp->ds->dst->index, in dsa_port_bridge_join()
141 .sw_index = dp->ds->index, in dsa_port_bridge_join()
142 .port = dp->index, in dsa_port_bridge_join()
148 err = dsa_port_bridge_flags(dp, BR_FLOOD | BR_MCAST_FLOOD, NULL); in dsa_port_bridge_join()
155 dp->bridge_dev = br; in dsa_port_bridge_join()
161 dsa_port_bridge_flags(dp, 0, NULL); in dsa_port_bridge_join()
162 dp->bridge_dev = NULL; in dsa_port_bridge_join()
168 void dsa_port_bridge_leave(struct dsa_port *dp, struct net_device *br) in dsa_port_bridge_leave() argument
171 .tree_index = dp->ds->dst->index, in dsa_port_bridge_leave()
172 .sw_index = dp->ds->index, in dsa_port_bridge_leave()
173 .port = dp->index, in dsa_port_bridge_leave()
181 dp->bridge_dev = NULL; in dsa_port_bridge_leave()
188 dsa_port_bridge_flags(dp, 0, NULL); in dsa_port_bridge_leave()
193 dsa_port_set_state_now(dp, BR_STATE_FORWARDING); in dsa_port_bridge_leave()
197 static bool dsa_port_can_apply_vlan_filtering(struct dsa_port *dp, in dsa_port_can_apply_vlan_filtering() argument
200 struct dsa_switch *ds = dp->ds; in dsa_port_can_apply_vlan_filtering()
208 if (vlan_filtering && dsa_is_user_port(ds, dp->index)) { in dsa_port_can_apply_vlan_filtering()
209 struct net_device *upper_dev, *slave = dp->slave; in dsa_port_can_apply_vlan_filtering()
210 struct net_device *br = dp->bridge_dev; in dsa_port_can_apply_vlan_filtering()
252 if (other_bridge == dp->bridge_dev) in dsa_port_can_apply_vlan_filtering()
262 int dsa_port_vlan_filtering(struct dsa_port *dp, bool vlan_filtering, in dsa_port_vlan_filtering() argument
265 struct dsa_switch *ds = dp->ds; in dsa_port_vlan_filtering()
279 apply = dsa_port_can_apply_vlan_filtering(dp, vlan_filtering); in dsa_port_vlan_filtering()
285 if (dsa_port_is_vlan_filtering(dp) == vlan_filtering) in dsa_port_vlan_filtering()
288 err = ds->ops->port_vlan_filtering(ds, dp->index, vlan_filtering, in dsa_port_vlan_filtering()
297 dp->vlan_filtering = vlan_filtering; in dsa_port_vlan_filtering()
306 bool dsa_port_skip_vlan_configuration(struct dsa_port *dp) in dsa_port_skip_vlan_configuration() argument
308 struct dsa_switch *ds = dp->ds; in dsa_port_skip_vlan_configuration()
310 if (!dp->bridge_dev) in dsa_port_skip_vlan_configuration()
314 !br_vlan_enabled(dp->bridge_dev)); in dsa_port_skip_vlan_configuration()
317 int dsa_port_ageing_time(struct dsa_port *dp, clock_t ageing_clock, in dsa_port_ageing_time() argument
328 return dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info); in dsa_port_ageing_time()
330 dp->ageing_time = ageing_time; in dsa_port_ageing_time()
332 return dsa_port_notify(dp, DSA_NOTIFIER_AGEING_TIME, &info); in dsa_port_ageing_time()
335 int dsa_port_pre_bridge_flags(const struct dsa_port *dp, unsigned long flags, in dsa_port_pre_bridge_flags() argument
338 struct dsa_switch *ds = dp->ds; in dsa_port_pre_bridge_flags()
347 int dsa_port_bridge_flags(const struct dsa_port *dp, unsigned long flags, in dsa_port_bridge_flags() argument
350 struct dsa_switch *ds = dp->ds; in dsa_port_bridge_flags()
351 int port = dp->index; in dsa_port_bridge_flags()
364 int dsa_port_mrouter(struct dsa_port *dp, bool mrouter, in dsa_port_mrouter() argument
367 struct dsa_switch *ds = dp->ds; in dsa_port_mrouter()
368 int port = dp->index; in dsa_port_mrouter()
376 int dsa_port_mtu_change(struct dsa_port *dp, int new_mtu, in dsa_port_mtu_change() argument
380 .sw_index = dp->ds->index, in dsa_port_mtu_change()
382 .port = dp->index, in dsa_port_mtu_change()
386 return dsa_port_notify(dp, DSA_NOTIFIER_MTU, &info); in dsa_port_mtu_change()
389 int dsa_port_fdb_add(struct dsa_port *dp, const unsigned char *addr, in dsa_port_fdb_add() argument
393 .sw_index = dp->ds->index, in dsa_port_fdb_add()
394 .port = dp->index, in dsa_port_fdb_add()
399 return dsa_port_notify(dp, DSA_NOTIFIER_FDB_ADD, &info); in dsa_port_fdb_add()
402 int dsa_port_fdb_del(struct dsa_port *dp, const unsigned char *addr, in dsa_port_fdb_del() argument
406 .sw_index = dp->ds->index, in dsa_port_fdb_del()
407 .port = dp->index, in dsa_port_fdb_del()
413 return dsa_port_notify(dp, DSA_NOTIFIER_FDB_DEL, &info); in dsa_port_fdb_del()
416 int dsa_port_fdb_dump(struct dsa_port *dp, dsa_fdb_dump_cb_t *cb, void *data) in dsa_port_fdb_dump() argument
418 struct dsa_switch *ds = dp->ds; in dsa_port_fdb_dump()
419 int port = dp->index; in dsa_port_fdb_dump()
427 int dsa_port_mdb_add(const struct dsa_port *dp, in dsa_port_mdb_add() argument
432 .sw_index = dp->ds->index, in dsa_port_mdb_add()
433 .port = dp->index, in dsa_port_mdb_add()
438 return dsa_port_notify(dp, DSA_NOTIFIER_MDB_ADD, &info); in dsa_port_mdb_add()
441 int dsa_port_mdb_del(const struct dsa_port *dp, in dsa_port_mdb_del() argument
445 .sw_index = dp->ds->index, in dsa_port_mdb_del()
446 .port = dp->index, in dsa_port_mdb_del()
450 return dsa_port_notify(dp, DSA_NOTIFIER_MDB_DEL, &info); in dsa_port_mdb_del()
453 int dsa_port_vlan_add(struct dsa_port *dp, in dsa_port_vlan_add() argument
458 .sw_index = dp->ds->index, in dsa_port_vlan_add()
459 .port = dp->index, in dsa_port_vlan_add()
464 return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_ADD, &info); in dsa_port_vlan_add()
467 int dsa_port_vlan_del(struct dsa_port *dp, in dsa_port_vlan_del() argument
471 .sw_index = dp->ds->index, in dsa_port_vlan_del()
472 .port = dp->index, in dsa_port_vlan_del()
476 return dsa_port_notify(dp, DSA_NOTIFIER_VLAN_DEL, &info); in dsa_port_vlan_del()
479 static struct phy_device *dsa_port_get_phy_device(struct dsa_port *dp) in dsa_port_get_phy_device() argument
484 phy_dn = of_parse_phandle(dp->dn, "phy-handle", 0); in dsa_port_get_phy_device()
502 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config); in dsa_port_phylink_validate() local
503 struct dsa_switch *ds = dp->ds; in dsa_port_phylink_validate()
508 ds->ops->phylink_validate(ds, dp->index, supported, state); in dsa_port_phylink_validate()
514 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config); in dsa_port_phylink_mac_pcs_get_state() local
515 struct dsa_switch *ds = dp->ds; in dsa_port_phylink_mac_pcs_get_state()
524 err = ds->ops->phylink_mac_link_state(ds, dp->index, state); in dsa_port_phylink_mac_pcs_get_state()
527 dp->index, err); in dsa_port_phylink_mac_pcs_get_state()
536 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config); in dsa_port_phylink_mac_config() local
537 struct dsa_switch *ds = dp->ds; in dsa_port_phylink_mac_config()
542 ds->ops->phylink_mac_config(ds, dp->index, mode, state); in dsa_port_phylink_mac_config()
547 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config); in dsa_port_phylink_mac_an_restart() local
548 struct dsa_switch *ds = dp->ds; in dsa_port_phylink_mac_an_restart()
553 ds->ops->phylink_mac_an_restart(ds, dp->index); in dsa_port_phylink_mac_an_restart()
560 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config); in dsa_port_phylink_mac_link_down() local
562 struct dsa_switch *ds = dp->ds; in dsa_port_phylink_mac_link_down()
564 if (dsa_is_user_port(ds, dp->index)) in dsa_port_phylink_mac_link_down()
565 phydev = dp->slave->phydev; in dsa_port_phylink_mac_link_down()
569 ds->ops->adjust_link(ds, dp->index, phydev); in dsa_port_phylink_mac_link_down()
573 ds->ops->phylink_mac_link_down(ds, dp->index, mode, interface); in dsa_port_phylink_mac_link_down()
583 struct dsa_port *dp = container_of(config, struct dsa_port, pl_config); in dsa_port_phylink_mac_link_up() local
584 struct dsa_switch *ds = dp->ds; in dsa_port_phylink_mac_link_up()
588 ds->ops->adjust_link(ds, dp->index, phydev); in dsa_port_phylink_mac_link_up()
592 ds->ops->phylink_mac_link_up(ds, dp->index, mode, interface, phydev, in dsa_port_phylink_mac_link_up()
605 static int dsa_port_setup_phy_of(struct dsa_port *dp, bool enable) in dsa_port_setup_phy_of() argument
607 struct dsa_switch *ds = dp->ds; in dsa_port_setup_phy_of()
609 int port = dp->index; in dsa_port_setup_phy_of()
612 phydev = dsa_port_get_phy_device(dp); in dsa_port_setup_phy_of()
643 static int dsa_port_fixed_link_register_of(struct dsa_port *dp) in dsa_port_fixed_link_register_of() argument
645 struct device_node *dn = dp->dn; in dsa_port_fixed_link_register_of()
646 struct dsa_switch *ds = dp->ds; in dsa_port_fixed_link_register_of()
648 int port = dp->index; in dsa_port_fixed_link_register_of()
677 static int dsa_port_phylink_register(struct dsa_port *dp) in dsa_port_phylink_register() argument
679 struct dsa_switch *ds = dp->ds; in dsa_port_phylink_register()
680 struct device_node *port_dn = dp->dn; in dsa_port_phylink_register()
688 dp->pl_config.dev = ds->dev; in dsa_port_phylink_register()
689 dp->pl_config.type = PHYLINK_DEV; in dsa_port_phylink_register()
690 dp->pl_config.pcs_poll = ds->pcs_poll; in dsa_port_phylink_register()
692 dp->pl = phylink_create(&dp->pl_config, of_fwnode_handle(port_dn), in dsa_port_phylink_register()
694 if (IS_ERR(dp->pl)) { in dsa_port_phylink_register()
695 pr_err("error creating PHYLINK: %ld\n", PTR_ERR(dp->pl)); in dsa_port_phylink_register()
696 return PTR_ERR(dp->pl); in dsa_port_phylink_register()
699 err = phylink_of_phy_connect(dp->pl, port_dn, 0); in dsa_port_phylink_register()
708 phylink_destroy(dp->pl); in dsa_port_phylink_register()
712 int dsa_port_link_register_of(struct dsa_port *dp) in dsa_port_link_register_of() argument
714 struct dsa_switch *ds = dp->ds; in dsa_port_link_register_of()
716 int port = dp->index; in dsa_port_link_register_of()
719 phy_np = of_parse_phandle(dp->dn, "phy-handle", 0); in dsa_port_link_register_of()
720 if (of_phy_is_fixed_link(dp->dn) || phy_np) { in dsa_port_link_register_of()
725 return dsa_port_phylink_register(dp); in dsa_port_link_register_of()
734 if (of_phy_is_fixed_link(dp->dn)) in dsa_port_link_register_of()
735 return dsa_port_fixed_link_register_of(dp); in dsa_port_link_register_of()
737 return dsa_port_setup_phy_of(dp, true); in dsa_port_link_register_of()
740 void dsa_port_link_unregister_of(struct dsa_port *dp) in dsa_port_link_unregister_of() argument
742 struct dsa_switch *ds = dp->ds; in dsa_port_link_unregister_of()
744 if (!ds->ops->adjust_link && dp->pl) { in dsa_port_link_unregister_of()
746 phylink_disconnect_phy(dp->pl); in dsa_port_link_unregister_of()
748 phylink_destroy(dp->pl); in dsa_port_link_unregister_of()
749 dp->pl = NULL; in dsa_port_link_unregister_of()
753 if (of_phy_is_fixed_link(dp->dn)) in dsa_port_link_unregister_of()
754 of_phy_deregister_fixed_link(dp->dn); in dsa_port_link_unregister_of()
756 dsa_port_setup_phy_of(dp, false); in dsa_port_link_unregister_of()
759 int dsa_port_get_phy_strings(struct dsa_port *dp, uint8_t *data) in dsa_port_get_phy_strings() argument
764 if (of_phy_is_fixed_link(dp->dn)) in dsa_port_get_phy_strings()
767 phydev = dsa_port_get_phy_device(dp); in dsa_port_get_phy_strings()
778 int dsa_port_get_ethtool_phy_stats(struct dsa_port *dp, uint64_t *data) in dsa_port_get_ethtool_phy_stats() argument
783 if (of_phy_is_fixed_link(dp->dn)) in dsa_port_get_ethtool_phy_stats()
786 phydev = dsa_port_get_phy_device(dp); in dsa_port_get_ethtool_phy_stats()
797 int dsa_port_get_phy_sset_count(struct dsa_port *dp) in dsa_port_get_phy_sset_count() argument
802 if (of_phy_is_fixed_link(dp->dn)) in dsa_port_get_phy_sset_count()
805 phydev = dsa_port_get_phy_device(dp); in dsa_port_get_phy_sset_count()