Lines Matching refs:br_port

71 	struct prestera_bridge_port *br_port;  member
76 struct prestera_bridge_port *br_port; member
91 static void prestera_bridge_port_put(struct prestera_bridge_port *br_port);
113 struct prestera_bridge_port *br_port; in __prestera_bridge_port_find() local
115 list_for_each_entry(br_port, &bridge->port_list, head) in __prestera_bridge_port_find()
116 if (br_port->dev == brport_dev) in __prestera_bridge_port_find()
117 return br_port; in __prestera_bridge_port_find()
140 prestera_br_port_flags_reset(struct prestera_bridge_port *br_port, in prestera_br_port_flags_reset() argument
149 static int prestera_br_port_flags_set(struct prestera_bridge_port *br_port, in prestera_br_port_flags_set() argument
154 err = prestera_port_uc_flood_set(port, br_port->flags & BR_FLOOD); in prestera_br_port_flags_set()
158 err = prestera_port_mc_flood_set(port, br_port->flags & BR_MCAST_FLOOD); in prestera_br_port_flags_set()
162 err = prestera_port_learning_set(port, br_port->flags & BR_LEARNING); in prestera_br_port_flags_set()
167 br_port->flags & BR_PORT_LOCKED); in prestera_br_port_flags_set()
174 prestera_br_port_flags_reset(br_port, port); in prestera_br_port_flags_set()
179 prestera_bridge_vlan_create(struct prestera_bridge_port *br_port, u16 vid) in prestera_bridge_vlan_create() argument
189 list_add(&br_vlan->head, &br_port->vlan_list); in prestera_bridge_vlan_create()
202 prestera_bridge_vlan_by_vid(struct prestera_bridge_port *br_port, u16 vid) in prestera_bridge_vlan_by_vid() argument
206 list_for_each_entry(br_vlan, &br_port->vlan_list, head) { in prestera_bridge_vlan_by_vid()
217 struct prestera_bridge_port *br_port; in prestera_bridge_vlan_port_count() local
221 list_for_each_entry(br_port, &bridge->port_list, head) { in prestera_bridge_vlan_port_count()
222 list_for_each_entry(br_vlan, &br_port->vlan_list, head) { in prestera_bridge_vlan_port_count()
340 struct prestera_bridge_port *br_port; in prestera_br_mdb_entry_put() local
343 list_for_each_entry(br_port, &br_mdb->bridge->port_list, head) in prestera_br_mdb_entry_put()
344 prestera_mdb_port_del(br_mdb->mdb, br_port->dev); in prestera_br_mdb_entry_put()
354 struct prestera_bridge_port *br_port) in prestera_br_mdb_port_del() argument
360 if (br_mdb_port->br_port == br_port) { in prestera_br_mdb_port_del()
368 prestera_mdb_flush_bridge_port(struct prestera_bridge_port *br_port) in prestera_mdb_flush_bridge_port() argument
372 struct prestera_bridge *br_dev = br_port->bridge; in prestera_mdb_flush_bridge_port()
380 br_mdb_port->br_port->dev); in prestera_mdb_flush_bridge_port()
381 prestera_br_mdb_port_del(br_mdb, br_mdb_port->br_port); in prestera_mdb_flush_bridge_port()
393 struct prestera_bridge_port *br_port; in prestera_port_vlan_bridge_leave() local
398 br_port = port_vlan->br_port; in prestera_port_vlan_bridge_leave()
399 port_count = prestera_bridge_vlan_port_count(br_port->bridge, vid); in prestera_port_vlan_bridge_leave()
400 br_vlan = prestera_bridge_vlan_by_vid(br_port, vid); in prestera_port_vlan_bridge_leave()
402 last_vlan = list_is_singular(&br_port->vlan_list); in prestera_port_vlan_bridge_leave()
412 prestera_mdb_flush_bridge_port(br_port); in prestera_port_vlan_bridge_leave()
416 prestera_bridge_port_put(br_port); in prestera_port_vlan_bridge_leave()
417 port_vlan->br_port = NULL; in prestera_port_vlan_bridge_leave()
425 if (port_vlan->br_port) in prestera_port_vlan_destroy()
514 struct prestera_bridge_port *br_port; in __prestera_bridge_port_by_dev() local
516 list_for_each_entry(br_port, &bridge->port_list, head) { in __prestera_bridge_port_by_dev()
517 if (br_port->dev == dev) in __prestera_bridge_port_by_dev()
518 return br_port; in __prestera_bridge_port_by_dev()
563 struct prestera_bridge_port *br_port; in prestera_bridge_port_create() local
565 br_port = kzalloc(sizeof(*br_port), GFP_KERNEL); in prestera_bridge_port_create()
566 if (!br_port) in prestera_bridge_port_create()
569 br_port->flags = BR_LEARNING | BR_FLOOD | BR_LEARNING_SYNC | in prestera_bridge_port_create()
571 br_port->stp_state = BR_STATE_DISABLED; in prestera_bridge_port_create()
572 refcount_set(&br_port->ref_count, 1); in prestera_bridge_port_create()
573 br_port->bridge = bridge; in prestera_bridge_port_create()
574 br_port->dev = dev; in prestera_bridge_port_create()
576 INIT_LIST_HEAD(&br_port->vlan_list); in prestera_bridge_port_create()
577 list_add(&br_port->head, &bridge->port_list); in prestera_bridge_port_create()
578 INIT_LIST_HEAD(&br_port->br_mdb_port_list); in prestera_bridge_port_create()
580 return br_port; in prestera_bridge_port_create()
584 prestera_bridge_port_destroy(struct prestera_bridge_port *br_port) in prestera_bridge_port_destroy() argument
586 list_del(&br_port->head); in prestera_bridge_port_destroy()
587 WARN_ON(!list_empty(&br_port->vlan_list)); in prestera_bridge_port_destroy()
588 WARN_ON(!list_empty(&br_port->br_mdb_port_list)); in prestera_bridge_port_destroy()
589 kfree(br_port); in prestera_bridge_port_destroy()
592 static void prestera_bridge_port_get(struct prestera_bridge_port *br_port) in prestera_bridge_port_get() argument
594 refcount_inc(&br_port->ref_count); in prestera_bridge_port_get()
597 static void prestera_bridge_port_put(struct prestera_bridge_port *br_port) in prestera_bridge_port_put() argument
599 struct prestera_bridge *bridge = br_port->bridge; in prestera_bridge_port_put()
601 if (refcount_dec_and_test(&br_port->ref_count)) { in prestera_bridge_port_put()
602 prestera_bridge_port_destroy(br_port); in prestera_bridge_port_put()
610 struct prestera_bridge_port *br_port; in prestera_bridge_port_add() local
612 br_port = __prestera_bridge_port_by_dev(bridge, dev); in prestera_bridge_port_add()
613 if (br_port) { in prestera_bridge_port_add()
614 prestera_bridge_port_get(br_port); in prestera_bridge_port_add()
615 return br_port; in prestera_bridge_port_add()
618 br_port = prestera_bridge_port_create(bridge, dev); in prestera_bridge_port_add()
619 if (!br_port) in prestera_bridge_port_add()
622 return br_port; in prestera_bridge_port_add()
626 prestera_bridge_1d_port_join(struct prestera_bridge_port *br_port) in prestera_bridge_1d_port_join() argument
628 struct prestera_port *port = netdev_priv(br_port->dev); in prestera_bridge_1d_port_join()
629 struct prestera_bridge *bridge = br_port->bridge; in prestera_bridge_1d_port_join()
636 err = prestera_br_port_flags_set(br_port, port); in prestera_bridge_1d_port_join()
653 struct prestera_bridge_port *br_port; in prestera_bridge_port_join() local
664 br_port = prestera_bridge_port_add(bridge, port->dev); in prestera_bridge_port_join()
665 if (IS_ERR(br_port)) { in prestera_bridge_port_join()
667 return PTR_ERR(br_port); in prestera_bridge_port_join()
670 err = switchdev_bridge_port_offload(br_port->dev, port->dev, NULL, in prestera_bridge_port_join()
678 err = prestera_bridge_1d_port_join(br_port); in prestera_bridge_port_join()
685 switchdev_bridge_port_unoffload(br_port->dev, NULL, NULL, NULL); in prestera_bridge_port_join()
687 prestera_bridge_port_put(br_port); in prestera_bridge_port_join()
691 static void prestera_bridge_1q_port_leave(struct prestera_bridge_port *br_port) in prestera_bridge_1q_port_leave() argument
693 struct prestera_port *port = netdev_priv(br_port->dev); in prestera_bridge_1q_port_leave()
699 static void prestera_bridge_1d_port_leave(struct prestera_bridge_port *br_port) in prestera_bridge_1d_port_leave() argument
701 struct prestera_port *port = netdev_priv(br_port->dev); in prestera_bridge_1d_port_leave()
704 prestera_hw_bridge_port_delete(port, br_port->bridge->bridge_id); in prestera_bridge_1d_port_leave()
741 struct prestera_bridge_port *br_port; in prestera_bridge_port_leave() local
748 br_port = __prestera_bridge_port_by_dev(bridge, port->dev); in prestera_bridge_port_leave()
749 if (!br_port) in prestera_bridge_port_leave()
752 bridge = br_port->bridge; in prestera_bridge_port_leave()
755 prestera_bridge_1q_port_leave(br_port); in prestera_bridge_port_leave()
757 prestera_bridge_1d_port_leave(br_port); in prestera_bridge_port_leave()
759 switchdev_bridge_port_unoffload(br_port->dev, NULL, NULL, NULL); in prestera_bridge_port_leave()
761 prestera_mdb_flush_bridge_port(br_port); in prestera_bridge_port_leave()
763 prestera_br_port_flags_reset(br_port, port); in prestera_bridge_port_leave()
765 prestera_bridge_port_put(br_port); in prestera_bridge_port_leave()
772 struct prestera_bridge_port *br_port; in prestera_port_attr_br_flags_set() local
774 br_port = prestera_bridge_port_by_dev(port->sw->swdev, dev); in prestera_port_attr_br_flags_set()
775 if (!br_port) in prestera_port_attr_br_flags_set()
778 br_port->flags &= ~flags.mask; in prestera_port_attr_br_flags_set()
779 br_port->flags |= flags.val & flags.mask; in prestera_port_attr_br_flags_set()
780 return prestera_br_port_flags_set(br_port, port); in prestera_port_attr_br_flags_set()
836 struct prestera_bridge_port *br_port; in prestera_port_attr_stp_state_set() local
841 br_port = prestera_bridge_port_by_dev(port->sw->swdev, dev); in prestera_port_attr_stp_state_set()
842 if (!br_port) in prestera_port_attr_stp_state_set()
845 if (!br_port->bridge->vlan_enabled) { in prestera_port_attr_stp_state_set()
846 vid = br_port->bridge->bridge_id; in prestera_port_attr_stp_state_set()
851 list_for_each_entry(br_vlan, &br_port->vlan_list, head) { in prestera_port_attr_stp_state_set()
859 br_port->stp_state = state; in prestera_port_attr_stp_state_set()
864 list_for_each_entry_continue_reverse(br_vlan, &br_port->vlan_list, head) in prestera_port_attr_stp_state_set()
865 prestera_port_bridge_vlan_stp_set(port, br_vlan, br_port->stp_state); in prestera_port_attr_stp_state_set()
869 prestera_port_vid_stp_set(port, vid, br_port->stp_state); in prestera_port_attr_stp_state_set()
875 prestera_br_port_lag_mdb_mc_enable_sync(struct prestera_bridge_port *br_port, in prestera_br_port_lag_mdb_mc_enable_sync() argument
883 pr_port = prestera_port_dev_lower_find(br_port->dev); in prestera_br_port_lag_mdb_mc_enable_sync()
888 err = prestera_lag_id(sw, br_port->dev, &lag_id); in prestera_br_port_lag_mdb_mc_enable_sync()
905 struct prestera_bridge_port *br_port; in prestera_br_mdb_mc_enable_sync() local
915 list_for_each_entry(br_port, &br_dev->port_list, head) { in prestera_br_mdb_mc_enable_sync()
917 enabled = br_port->mrouter; in prestera_br_mdb_mc_enable_sync()
919 enabled = br_port->flags & BR_MCAST_FLOOD; in prestera_br_mdb_mc_enable_sync()
921 if (netif_is_lag_master(br_port->dev)) { in prestera_br_mdb_mc_enable_sync()
922 err = prestera_br_port_lag_mdb_mc_enable_sync(br_port, in prestera_br_mdb_mc_enable_sync()
929 port = prestera_port_dev_lower_find(br_port->dev); in prestera_br_mdb_mc_enable_sync()
949 if (tmp_port->br_port->dev == orig_dev) in prestera_br_mdb_port_is_member()
978 struct prestera_bridge_port *br_port; in prestera_br_mdb_sync() local
995 br_port = br_mdb_port->br_port; in prestera_br_mdb_sync()
996 pr_port = prestera_port_dev_lower_find(br_port->dev); in prestera_br_mdb_sync()
1010 br_mdb_port->br_port->dev) && in prestera_br_mdb_sync()
1012 err = prestera_mdb_port_add(mdb, br_port->dev, in prestera_br_mdb_sync()
1016 prestera_mdb_port_del(mdb, br_port->dev); in prestera_br_mdb_sync()
1025 list_for_each_entry(br_port, &br_dev->port_list, head) { in prestera_br_mdb_sync()
1026 pr_port = prestera_port_dev_lower_find(br_port->dev); in prestera_br_mdb_sync()
1037 if (br_port->mrouter) { in prestera_br_mdb_sync()
1038 err = prestera_mdb_port_add(mdb, br_port->dev, in prestera_br_mdb_sync()
1043 } else if (!br_port->mrouter && in prestera_br_mdb_sync()
1045 (br_mdb, br_port->dev)) { in prestera_br_mdb_sync()
1046 prestera_mdb_port_del(mdb, br_port->dev); in prestera_br_mdb_sync()
1117 struct prestera_bridge_port *br_port; in prestera_bridge_mdb_mc_mrouter_exists() local
1119 list_for_each_entry(br_port, &br_dev->port_list, head) in prestera_bridge_mdb_mc_mrouter_exists()
1120 if (br_port->mrouter) in prestera_bridge_mdb_mc_mrouter_exists()
1131 struct prestera_bridge_port *br_port; in prestera_port_attr_mrouter_set() local
1134 br_port = prestera_bridge_port_find(port->sw, orig_dev); in prestera_port_attr_mrouter_set()
1135 if (!br_port) in prestera_port_attr_mrouter_set()
1138 br_dev = br_port->bridge; in prestera_port_attr_mrouter_set()
1139 br_port->mrouter = is_port_mrouter; in prestera_port_attr_mrouter_set()
1221 struct prestera_bridge_port *br_port; in prestera_port_fdb_set() local
1226 br_port = prestera_bridge_port_by_dev(sw->swdev, port->dev); in prestera_port_fdb_set()
1227 if (!br_port) in prestera_port_fdb_set()
1230 bridge = br_port->bridge; in prestera_port_fdb_set()
1358 struct prestera_bridge_port *br_port) in prestera_port_vlan_bridge_join() argument
1365 if (port_vlan->br_port) in prestera_port_vlan_bridge_join()
1368 err = prestera_br_port_flags_set(br_port, port); in prestera_port_vlan_bridge_join()
1372 err = prestera_port_vid_stp_set(port, vid, br_port->stp_state); in prestera_port_vlan_bridge_join()
1376 br_vlan = prestera_bridge_vlan_by_vid(br_port, vid); in prestera_port_vlan_bridge_join()
1378 br_vlan = prestera_bridge_vlan_create(br_port, vid); in prestera_port_vlan_bridge_join()
1387 prestera_bridge_port_get(br_port); in prestera_port_vlan_bridge_join()
1388 port_vlan->br_port = br_port; in prestera_port_vlan_bridge_join()
1395 prestera_br_port_flags_reset(br_port, port); in prestera_port_vlan_bridge_join()
1402 struct prestera_bridge_port *br_port, in prestera_bridge_port_vlan_add() argument
1417 if (port_vlan && port_vlan->br_port != br_port) in prestera_bridge_port_vlan_add()
1434 err = prestera_port_vlan_bridge_join(port_vlan, br_port); in prestera_bridge_port_vlan_add()
1452 struct prestera_bridge_port *br_port, u16 vid) in prestera_bridge_port_vlan_del() argument
1473 struct prestera_bridge_port *br_port; in prestera_port_vlans_add() local
1480 br_port = prestera_bridge_port_by_dev(sw->swdev, port->dev); in prestera_port_vlans_add()
1481 if (WARN_ON(!br_port)) in prestera_port_vlans_add()
1484 bridge = br_port->bridge; in prestera_port_vlans_add()
1488 return prestera_bridge_port_vlan_add(port, br_port, in prestera_port_vlans_add()
1524 struct prestera_bridge_port *br_port) in prestera_br_mdb_port_add() argument
1530 if (br_mdb_port->br_port == br_port) in prestera_br_mdb_port_add()
1537 br_mdb_port->br_port = br_port; in prestera_br_mdb_port_add()
1577 struct prestera_bridge_port *br_port; in prestera_mdb_port_addr_obj_add() local
1586 br_port = prestera_bridge_port_find(sw, mdb->obj.orig_dev); in prestera_mdb_port_addr_obj_add()
1587 if (!br_port) in prestera_mdb_port_addr_obj_add()
1590 br_dev = br_port->bridge; in prestera_mdb_port_addr_obj_add()
1611 err = prestera_br_mdb_port_add(br_mdb, br_port); in prestera_mdb_port_addr_obj_add()
1655 struct prestera_bridge_port *br_port; in prestera_port_vlans_del() local
1661 br_port = prestera_bridge_port_by_dev(sw->swdev, port->dev); in prestera_port_vlans_del()
1662 if (WARN_ON(!br_port)) in prestera_port_vlans_del()
1665 if (!br_port->bridge->vlan_enabled) in prestera_port_vlans_del()
1668 prestera_bridge_port_vlan_del(port, br_port, vlan->vid); in prestera_port_vlans_del()
1678 struct prestera_bridge_port *br_port; in prestera_mdb_port_addr_obj_del() local
1683 br_port = prestera_bridge_port_find(port->sw, mdb->obj.orig_dev); in prestera_mdb_port_addr_obj_del()
1684 if (!br_port) in prestera_mdb_port_addr_obj_del()
1691 br_dev = br_port->bridge; in prestera_mdb_port_addr_obj_del()
1693 if (br_port->bridge->vlan_enabled) in prestera_mdb_port_addr_obj_del()
1698 br_port->bridge->bridge_id); in prestera_mdb_port_addr_obj_del()
1707 prestera_br_mdb_port_del(br_mdb, br_port); in prestera_mdb_port_addr_obj_del()