Lines Matching refs:port_priv

29 static u16 dpaa2_switch_port_get_fdb_id(struct ethsw_port_priv *port_priv)  in dpaa2_switch_port_get_fdb_id()  argument
31 return port_priv->fdb->fdb_id; in dpaa2_switch_port_get_fdb_id()
55 static u16 dpaa2_switch_port_set_fdb(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_set_fdb() argument
67 fdb = dpaa2_switch_fdb_get_unused(port_priv->ethsw_data); in dpaa2_switch_port_set_fdb()
75 port_priv->fdb->bridge_dev = NULL; in dpaa2_switch_port_set_fdb()
79 port_priv->fdb = fdb; in dpaa2_switch_port_set_fdb()
80 port_priv->fdb->in_use = true; in dpaa2_switch_port_set_fdb()
81 port_priv->fdb->bridge_dev = NULL; in dpaa2_switch_port_set_fdb()
98 if (other_dev == port_priv->netdev) in dpaa2_switch_port_set_fdb()
112 port_priv->fdb->in_use = false; in dpaa2_switch_port_set_fdb()
113 port_priv->fdb->bridge_dev = NULL; in dpaa2_switch_port_set_fdb()
116 port_priv->fdb = other_port_priv->fdb; in dpaa2_switch_port_set_fdb()
120 port_priv->fdb->bridge_dev = bridge_dev; in dpaa2_switch_port_set_fdb()
192 static int dpaa2_switch_add_vlan(struct ethsw_port_priv *port_priv, u16 vid) in dpaa2_switch_add_vlan() argument
194 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_add_vlan()
198 vcfg.fdb_id = dpaa2_switch_port_get_fdb_id(port_priv); in dpaa2_switch_add_vlan()
210 static bool dpaa2_switch_port_is_up(struct ethsw_port_priv *port_priv) in dpaa2_switch_port_is_up() argument
212 struct net_device *netdev = port_priv->netdev; in dpaa2_switch_port_is_up()
216 err = dpsw_if_get_link_state(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_is_up()
217 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_is_up()
218 port_priv->idx, &state); in dpaa2_switch_port_is_up()
229 static int dpaa2_switch_port_set_pvid(struct ethsw_port_priv *port_priv, u16 pvid) in dpaa2_switch_port_set_pvid() argument
231 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_set_pvid()
232 struct net_device *netdev = port_priv->netdev; in dpaa2_switch_port_set_pvid()
238 port_priv->idx, &tci_cfg); in dpaa2_switch_port_set_pvid()
247 up = dpaa2_switch_port_is_up(port_priv); in dpaa2_switch_port_set_pvid()
251 port_priv->idx); in dpaa2_switch_port_set_pvid()
259 port_priv->idx, &tci_cfg); in dpaa2_switch_port_set_pvid()
266 port_priv->vlans[port_priv->pvid] &= ~ETHSW_VLAN_PVID; in dpaa2_switch_port_set_pvid()
267 port_priv->vlans[pvid] |= ETHSW_VLAN_PVID; in dpaa2_switch_port_set_pvid()
268 port_priv->pvid = pvid; in dpaa2_switch_port_set_pvid()
274 port_priv->idx); in dpaa2_switch_port_set_pvid()
284 static int dpaa2_switch_port_add_vlan(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_add_vlan() argument
287 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_add_vlan()
288 struct net_device *netdev = port_priv->netdev; in dpaa2_switch_port_add_vlan()
292 if (port_priv->vlans[vid]) { in dpaa2_switch_port_add_vlan()
301 vcfg.if_id[0] = port_priv->idx; in dpaa2_switch_port_add_vlan()
302 vcfg.fdb_id = dpaa2_switch_port_get_fdb_id(port_priv); in dpaa2_switch_port_add_vlan()
310 port_priv->vlans[vid] = ETHSW_VLAN_MEMBER; in dpaa2_switch_port_add_vlan()
321 port_priv->vlans[vid] |= ETHSW_VLAN_UNTAGGED; in dpaa2_switch_port_add_vlan()
325 err = dpaa2_switch_port_set_pvid(port_priv, vid); in dpaa2_switch_port_add_vlan()
351 static int dpaa2_switch_port_set_stp_state(struct ethsw_port_priv *port_priv, u8 state) in dpaa2_switch_port_set_stp_state() argument
357 if (!netif_running(port_priv->netdev) || state == port_priv->stp_state) in dpaa2_switch_port_set_stp_state()
362 if (port_priv->vlans[vid] & ETHSW_VLAN_MEMBER) { in dpaa2_switch_port_set_stp_state()
364 err = dpsw_if_set_stp(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_set_stp_state()
365 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_set_stp_state()
366 port_priv->idx, &stp_cfg); in dpaa2_switch_port_set_stp_state()
368 netdev_err(port_priv->netdev, in dpaa2_switch_port_set_stp_state()
375 port_priv->stp_state = state; in dpaa2_switch_port_set_stp_state()
404 static int dpaa2_switch_port_fdb_add_uc(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_fdb_add_uc() argument
411 entry.if_egress = port_priv->idx; in dpaa2_switch_port_fdb_add_uc()
415 fdb_id = dpaa2_switch_port_get_fdb_id(port_priv); in dpaa2_switch_port_fdb_add_uc()
416 err = dpsw_fdb_add_unicast(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_fdb_add_uc()
417 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_fdb_add_uc()
420 netdev_err(port_priv->netdev, in dpaa2_switch_port_fdb_add_uc()
425 static int dpaa2_switch_port_fdb_del_uc(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_fdb_del_uc() argument
432 entry.if_egress = port_priv->idx; in dpaa2_switch_port_fdb_del_uc()
436 fdb_id = dpaa2_switch_port_get_fdb_id(port_priv); in dpaa2_switch_port_fdb_del_uc()
437 err = dpsw_fdb_remove_unicast(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_fdb_del_uc()
438 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_fdb_del_uc()
442 netdev_err(port_priv->netdev, in dpaa2_switch_port_fdb_del_uc()
447 static int dpaa2_switch_port_fdb_add_mc(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_fdb_add_mc() argument
457 entry.if_id[0] = port_priv->idx; in dpaa2_switch_port_fdb_add_mc()
459 fdb_id = dpaa2_switch_port_get_fdb_id(port_priv); in dpaa2_switch_port_fdb_add_mc()
460 err = dpsw_fdb_add_multicast(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_fdb_add_mc()
461 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_fdb_add_mc()
465 netdev_err(port_priv->netdev, "dpsw_fdb_add_multicast err %d\n", in dpaa2_switch_port_fdb_add_mc()
470 static int dpaa2_switch_port_fdb_del_mc(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_fdb_del_mc() argument
480 entry.if_id[0] = port_priv->idx; in dpaa2_switch_port_fdb_del_mc()
482 fdb_id = dpaa2_switch_port_get_fdb_id(port_priv); in dpaa2_switch_port_fdb_del_mc()
483 err = dpsw_fdb_remove_multicast(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_fdb_del_mc()
484 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_fdb_del_mc()
488 netdev_err(port_priv->netdev, in dpaa2_switch_port_fdb_del_mc()
496 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_get_stats() local
500 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_get_stats()
501 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_get_stats()
502 port_priv->idx, in dpaa2_switch_port_get_stats()
507 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_get_stats()
508 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_get_stats()
509 port_priv->idx, in dpaa2_switch_port_get_stats()
514 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_get_stats()
515 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_get_stats()
516 port_priv->idx, in dpaa2_switch_port_get_stats()
521 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_get_stats()
522 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_get_stats()
523 port_priv->idx, in dpaa2_switch_port_get_stats()
528 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_get_stats()
529 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_get_stats()
530 port_priv->idx, in dpaa2_switch_port_get_stats()
536 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_get_stats()
537 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_get_stats()
538 port_priv->idx, in dpaa2_switch_port_get_stats()
545 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_get_stats()
546 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_get_stats()
547 port_priv->idx, in dpaa2_switch_port_get_stats()
580 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_change_mtu() local
583 err = dpsw_if_set_max_frame_length(port_priv->ethsw_data->mc_io, in dpaa2_switch_port_change_mtu()
585 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_change_mtu()
586 port_priv->idx, in dpaa2_switch_port_change_mtu()
600 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_link_state_update() local
607 if (dpaa2_switch_port_is_type_phy(port_priv)) in dpaa2_switch_port_link_state_update()
616 err = dpsw_if_get_link_state(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_link_state_update()
617 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_link_state_update()
618 port_priv->idx, &state); in dpaa2_switch_port_link_state_update()
626 if (state.up != port_priv->link_state) { in dpaa2_switch_port_link_state_update()
634 port_priv->link_state = state.up; in dpaa2_switch_port_link_state_update()
683 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_open() local
684 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_open()
687 if (!dpaa2_switch_port_is_type_phy(port_priv)) { in dpaa2_switch_port_open()
696 err = dpsw_if_enable(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_open()
697 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_open()
698 port_priv->idx); in dpaa2_switch_port_open()
706 if (dpaa2_switch_port_is_type_phy(port_priv)) { in dpaa2_switch_port_open()
707 dpaa2_mac_start(port_priv->mac); in dpaa2_switch_port_open()
708 phylink_start(port_priv->mac->phylink); in dpaa2_switch_port_open()
716 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_stop() local
717 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_stop()
720 if (dpaa2_switch_port_is_type_phy(port_priv)) { in dpaa2_switch_port_stop()
721 phylink_stop(port_priv->mac->phylink); in dpaa2_switch_port_stop()
722 dpaa2_mac_stop(port_priv->mac); in dpaa2_switch_port_stop()
728 err = dpsw_if_disable(port_priv->ethsw_data->mc_io, 0, in dpaa2_switch_port_stop()
729 port_priv->ethsw_data->dpsw_handle, in dpaa2_switch_port_stop()
730 port_priv->idx); in dpaa2_switch_port_stop()
744 struct ethsw_port_priv *port_priv = netdev_priv(dev); in dpaa2_switch_port_parent_id() local
747 ppid->id[0] = port_priv->ethsw_data->dev_id; in dpaa2_switch_port_parent_id()
755 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_get_phys_name() local
758 err = snprintf(name, len, "p%d", port_priv->idx); in dpaa2_switch_port_get_phys_name()
813 struct ethsw_port_priv *port_priv) in dpaa2_switch_port_fdb_valid_entry() argument
815 int idx = port_priv->idx; in dpaa2_switch_port_fdb_valid_entry()
819 valid = entry->if_info == port_priv->idx; in dpaa2_switch_port_fdb_valid_entry()
826 static int dpaa2_switch_fdb_iterate(struct ethsw_port_priv *port_priv, in dpaa2_switch_fdb_iterate() argument
829 struct net_device *net_dev = port_priv->netdev; in dpaa2_switch_fdb_iterate()
830 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_fdb_iterate()
854 fdb_id = dpaa2_switch_port_get_fdb_id(port_priv); in dpaa2_switch_fdb_iterate()
868 err = cb(port_priv, &fdb_entry, data); in dpaa2_switch_fdb_iterate()
885 static int dpaa2_switch_fdb_entry_dump(struct ethsw_port_priv *port_priv, in dpaa2_switch_fdb_entry_dump() argument
889 if (!dpaa2_switch_port_fdb_valid_entry(fdb_entry, port_priv)) in dpaa2_switch_fdb_entry_dump()
899 struct ethsw_port_priv *port_priv = netdev_priv(net_dev); in dpaa2_switch_port_fdb_dump() local
908 err = dpaa2_switch_fdb_iterate(port_priv, dpaa2_switch_fdb_entry_dump, &dump); in dpaa2_switch_port_fdb_dump()
914 static int dpaa2_switch_fdb_entry_fast_age(struct ethsw_port_priv *port_priv, in dpaa2_switch_fdb_entry_fast_age() argument
918 if (!dpaa2_switch_port_fdb_valid_entry(fdb_entry, port_priv)) in dpaa2_switch_fdb_entry_fast_age()
925 dpaa2_switch_port_fdb_del_uc(port_priv, fdb_entry->mac_addr); in dpaa2_switch_fdb_entry_fast_age()
927 dpaa2_switch_port_fdb_del_mc(port_priv, fdb_entry->mac_addr); in dpaa2_switch_fdb_entry_fast_age()
932 static void dpaa2_switch_port_fast_age(struct ethsw_port_priv *port_priv) in dpaa2_switch_port_fast_age() argument
934 dpaa2_switch_fdb_iterate(port_priv, in dpaa2_switch_port_fast_age()
966 static int dpaa2_switch_port_set_mac_addr(struct ethsw_port_priv *port_priv) in dpaa2_switch_port_set_mac_addr() argument
968 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_set_mac_addr()
969 struct net_device *net_dev = port_priv->netdev; in dpaa2_switch_port_set_mac_addr()
979 port_priv->idx, mac_addr); in dpaa2_switch_port_set_mac_addr()
1076 struct ethsw_port_priv *port_priv = netdev_priv(net_dev); in dpaa2_switch_port_tx() local
1077 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_tx()
1119 port_priv->tx_qdid, in dpaa2_switch_port_tx()
1182 dpaa2_switch_port_acl_tbl_bind(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_acl_tbl_bind() argument
1185 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_acl_tbl_bind()
1186 struct net_device *netdev = port_priv->netdev; in dpaa2_switch_port_acl_tbl_bind()
1190 if (port_priv->filter_block) in dpaa2_switch_port_acl_tbl_bind()
1193 acl_if_cfg.if_id[0] = port_priv->idx; in dpaa2_switch_port_acl_tbl_bind()
1202 block->ports |= BIT(port_priv->idx); in dpaa2_switch_port_acl_tbl_bind()
1203 port_priv->filter_block = block; in dpaa2_switch_port_acl_tbl_bind()
1209 dpaa2_switch_port_acl_tbl_unbind(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_acl_tbl_unbind() argument
1212 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_acl_tbl_unbind()
1213 struct net_device *netdev = port_priv->netdev; in dpaa2_switch_port_acl_tbl_unbind()
1217 if (port_priv->filter_block != block) in dpaa2_switch_port_acl_tbl_unbind()
1220 acl_if_cfg.if_id[0] = port_priv->idx; in dpaa2_switch_port_acl_tbl_unbind()
1229 block->ports &= ~BIT(port_priv->idx); in dpaa2_switch_port_acl_tbl_unbind()
1230 port_priv->filter_block = NULL; in dpaa2_switch_port_acl_tbl_unbind()
1234 static int dpaa2_switch_port_block_bind(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_block_bind() argument
1237 struct dpaa2_switch_filter_block *old_block = port_priv->filter_block; in dpaa2_switch_port_block_bind()
1243 err = dpaa2_switch_block_offload_mirror(block, port_priv); in dpaa2_switch_port_block_bind()
1250 if (port_priv->filter_block == block) in dpaa2_switch_port_block_bind()
1253 err = dpaa2_switch_port_acl_tbl_unbind(port_priv, old_block); in dpaa2_switch_port_block_bind()
1263 return dpaa2_switch_port_acl_tbl_bind(port_priv, block); in dpaa2_switch_port_block_bind()
1267 dpaa2_switch_port_block_unbind(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_block_unbind() argument
1270 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_block_unbind()
1277 err = dpaa2_switch_block_unoffload_mirror(block, port_priv); in dpaa2_switch_port_block_unbind()
1284 if (block->ports == BIT(port_priv->idx)) in dpaa2_switch_port_block_unbind()
1287 err = dpaa2_switch_port_acl_tbl_unbind(port_priv, block); in dpaa2_switch_port_block_unbind()
1296 return dpaa2_switch_port_acl_tbl_bind(port_priv, new_block); in dpaa2_switch_port_block_unbind()
1302 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_setup_tc_block_bind() local
1303 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_setup_tc_block_bind()
1318 filter_block = port_priv->filter_block; in dpaa2_switch_setup_tc_block_bind()
1331 err = dpaa2_switch_port_block_bind(port_priv, filter_block); in dpaa2_switch_setup_tc_block_bind()
1352 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_setup_tc_block_unbind() local
1353 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_setup_tc_block_unbind()
1365 err = dpaa2_switch_port_block_unbind(port_priv, filter_block); in dpaa2_switch_setup_tc_block_unbind()
1430 static int dpaa2_switch_port_connect_mac(struct ethsw_port_priv *port_priv) in dpaa2_switch_port_connect_mac() argument
1436 dpsw_port_dev = to_fsl_mc_device(port_priv->netdev->dev.parent); in dpaa2_switch_port_connect_mac()
1437 dpmac_dev = fsl_mc_get_endpoint(dpsw_port_dev, port_priv->idx); in dpaa2_switch_port_connect_mac()
1450 mac->mc_io = port_priv->ethsw_data->mc_io; in dpaa2_switch_port_connect_mac()
1451 mac->net_dev = port_priv->netdev; in dpaa2_switch_port_connect_mac()
1456 port_priv->mac = mac; in dpaa2_switch_port_connect_mac()
1458 if (dpaa2_switch_port_is_type_phy(port_priv)) { in dpaa2_switch_port_connect_mac()
1461 netdev_err(port_priv->netdev, in dpaa2_switch_port_connect_mac()
1472 port_priv->mac = NULL; in dpaa2_switch_port_connect_mac()
1478 static void dpaa2_switch_port_disconnect_mac(struct ethsw_port_priv *port_priv) in dpaa2_switch_port_disconnect_mac() argument
1480 if (dpaa2_switch_port_is_type_phy(port_priv)) in dpaa2_switch_port_disconnect_mac()
1481 dpaa2_mac_disconnect(port_priv->mac); in dpaa2_switch_port_disconnect_mac()
1483 if (!dpaa2_switch_port_has_mac(port_priv)) in dpaa2_switch_port_disconnect_mac()
1486 dpaa2_mac_close(port_priv->mac); in dpaa2_switch_port_disconnect_mac()
1487 kfree(port_priv->mac); in dpaa2_switch_port_disconnect_mac()
1488 port_priv->mac = NULL; in dpaa2_switch_port_disconnect_mac()
1495 struct ethsw_port_priv *port_priv; in dpaa2_switch_irq0_handler_thread() local
1507 port_priv = ethsw->ports[if_id]; in dpaa2_switch_irq0_handler_thread()
1510 dpaa2_switch_port_link_state_update(port_priv->netdev); in dpaa2_switch_irq0_handler_thread()
1511 dpaa2_switch_port_set_mac_addr(port_priv); in dpaa2_switch_irq0_handler_thread()
1516 if (dpaa2_switch_port_has_mac(port_priv)) in dpaa2_switch_irq0_handler_thread()
1517 dpaa2_switch_port_disconnect_mac(port_priv); in dpaa2_switch_irq0_handler_thread()
1519 dpaa2_switch_port_connect_mac(port_priv); in dpaa2_switch_irq0_handler_thread()
1606 static int dpaa2_switch_port_set_learning(struct ethsw_port_priv *port_priv, bool enable) in dpaa2_switch_port_set_learning() argument
1608 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_set_learning()
1618 port_priv->idx, learn_mode); in dpaa2_switch_port_set_learning()
1620 netdev_err(port_priv->netdev, "dpsw_if_set_learning_mode err %d\n", err); in dpaa2_switch_port_set_learning()
1623 dpaa2_switch_port_fast_age(port_priv); in dpaa2_switch_port_set_learning()
1631 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_attr_stp_state_set() local
1634 err = dpaa2_switch_port_set_stp_state(port_priv, state); in dpaa2_switch_port_attr_stp_state_set()
1642 err = dpaa2_switch_port_set_learning(port_priv, false); in dpaa2_switch_port_attr_stp_state_set()
1646 err = dpaa2_switch_port_set_learning(port_priv, in dpaa2_switch_port_attr_stp_state_set()
1647 port_priv->learn_ena); in dpaa2_switch_port_attr_stp_state_set()
1654 static int dpaa2_switch_port_flood(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_flood() argument
1657 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_flood()
1660 port_priv->bcast_flood = !!(flags.val & BR_BCAST_FLOOD); in dpaa2_switch_port_flood()
1663 port_priv->ucast_flood = !!(flags.val & BR_FLOOD); in dpaa2_switch_port_flood()
1665 return dpaa2_switch_fdb_set_egress_flood(ethsw, port_priv->fdb->fdb_id); in dpaa2_switch_port_flood()
1694 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_bridge_flags() local
1700 err = dpaa2_switch_port_set_learning(port_priv, learn_ena); in dpaa2_switch_port_bridge_flags()
1703 port_priv->learn_ena = learn_ena; in dpaa2_switch_port_bridge_flags()
1707 err = dpaa2_switch_port_flood(port_priv, flags); in dpaa2_switch_port_bridge_flags()
1750 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_vlans_add() local
1751 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_vlans_add()
1758 if (port_priv->vlans[vlan->vid] & ETHSW_VLAN_MEMBER) in dpaa2_switch_port_vlans_add()
1781 if (!port_priv->ethsw_data->vlans[vlan->vid]) { in dpaa2_switch_port_vlans_add()
1783 err = dpaa2_switch_add_vlan(port_priv, vlan->vid); in dpaa2_switch_port_vlans_add()
1787 port_priv->ethsw_data->vlans[vlan->vid] |= ETHSW_VLAN_GLOBAL; in dpaa2_switch_port_vlans_add()
1790 return dpaa2_switch_port_add_vlan(port_priv, vlan->vid, vlan->flags); in dpaa2_switch_port_vlans_add()
1813 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_mdb_add() local
1820 err = dpaa2_switch_port_fdb_add_mc(port_priv, mdb->addr); in dpaa2_switch_port_mdb_add()
1827 dpaa2_switch_port_fdb_del_mc(port_priv, mdb->addr); in dpaa2_switch_port_mdb_add()
1855 static int dpaa2_switch_port_del_vlan(struct ethsw_port_priv *port_priv, u16 vid) in dpaa2_switch_port_del_vlan() argument
1857 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_del_vlan()
1858 struct net_device *netdev = port_priv->netdev; in dpaa2_switch_port_del_vlan()
1862 if (!port_priv->vlans[vid]) in dpaa2_switch_port_del_vlan()
1865 if (port_priv->vlans[vid] & ETHSW_VLAN_PVID) { in dpaa2_switch_port_del_vlan()
1870 err = dpaa2_switch_port_set_pvid(port_priv, 4095); in dpaa2_switch_port_del_vlan()
1876 vcfg.if_id[0] = port_priv->idx; in dpaa2_switch_port_del_vlan()
1877 if (port_priv->vlans[vid] & ETHSW_VLAN_UNTAGGED) { in dpaa2_switch_port_del_vlan()
1886 port_priv->vlans[vid] &= ~ETHSW_VLAN_UNTAGGED; in dpaa2_switch_port_del_vlan()
1889 if (port_priv->vlans[vid] & ETHSW_VLAN_MEMBER) { in dpaa2_switch_port_del_vlan()
1897 port_priv->vlans[vid] &= ~ETHSW_VLAN_MEMBER; in dpaa2_switch_port_del_vlan()
1921 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_vlans_del() local
1926 return dpaa2_switch_port_del_vlan(port_priv, vlan->vid); in dpaa2_switch_port_vlans_del()
1932 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_mdb_del() local
1938 err = dpaa2_switch_port_fdb_del_mc(port_priv, mdb->addr); in dpaa2_switch_port_mdb_del()
1988 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_bridge_join() local
1989 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_bridge_join()
2001 if (other_port_priv->ethsw_data != port_priv->ethsw_data) { in dpaa2_switch_port_bridge_join()
2009 err = dpaa2_switch_port_del_vlan(port_priv, 1); in dpaa2_switch_port_bridge_join()
2013 dpaa2_switch_port_set_fdb(port_priv, upper_dev); in dpaa2_switch_port_bridge_join()
2017 err = dpaa2_switch_port_set_learning(port_priv, learn_ena); in dpaa2_switch_port_bridge_join()
2018 port_priv->learn_ena = learn_ena; in dpaa2_switch_port_bridge_join()
2021 err = dpaa2_switch_fdb_set_egress_flood(ethsw, port_priv->fdb->fdb_id); in dpaa2_switch_port_bridge_join()
2036 dpaa2_switch_port_set_fdb(port_priv, NULL); in dpaa2_switch_port_bridge_join()
2069 struct ethsw_port_priv *port_priv = netdev_priv(netdev); in dpaa2_switch_port_bridge_leave() local
2070 struct dpaa2_switch_fdb *old_fdb = port_priv->fdb; in dpaa2_switch_port_bridge_leave()
2071 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_bridge_leave()
2075 dpaa2_switch_port_fast_age(port_priv); in dpaa2_switch_port_bridge_leave()
2085 dpaa2_switch_port_set_fdb(port_priv, NULL); in dpaa2_switch_port_bridge_leave()
2096 port_priv->bcast_flood = true; in dpaa2_switch_port_bridge_leave()
2097 port_priv->ucast_flood = true; in dpaa2_switch_port_bridge_leave()
2103 err = dpaa2_switch_fdb_set_egress_flood(ethsw, port_priv->fdb->fdb_id); in dpaa2_switch_port_bridge_leave()
2113 err = dpaa2_switch_port_set_learning(port_priv, false); in dpaa2_switch_port_bridge_leave()
2116 port_priv->learn_ena = false; in dpaa2_switch_port_bridge_leave()
2121 return dpaa2_switch_port_add_vlan(port_priv, DEFAULT_VLAN_ID, in dpaa2_switch_port_bridge_leave()
2264 struct ethsw_port_priv *port_priv = netdev_priv(dev); in dpaa2_switch_port_event() local
2267 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_event()
2390 struct ethsw_port_priv *port_priv; in dpaa2_switch_rx() local
2404 port_priv = ethsw->ports[if_id]; in dpaa2_switch_rx()
2405 netdev = port_priv->netdev; in dpaa2_switch_rx()
2429 if (vid == port_priv->pvid) { in dpaa2_switch_rx()
2441 skb->offload_fwd_mark = !!(port_priv->fdb->bridge_dev); in dpaa2_switch_rx()
2936 struct ethsw_port_priv *port_priv = ethsw->ports[port_idx]; in dpaa2_switch_remove_port() local
2939 dpaa2_switch_port_disconnect_mac(port_priv); in dpaa2_switch_remove_port()
2941 free_netdev(port_priv->netdev); in dpaa2_switch_remove_port()
3082 static int dpaa2_switch_port_trap_mac_addr(struct ethsw_port_priv *port_priv, in dpaa2_switch_port_trap_mac_addr() argument
3095 return dpaa2_switch_acl_entry_add(port_priv->filter_block, &acl_entry); in dpaa2_switch_port_trap_mac_addr()
3098 static int dpaa2_switch_port_init(struct ethsw_port_priv *port_priv, u16 port) in dpaa2_switch_port_init() argument
3106 struct net_device *netdev = port_priv->netdev; in dpaa2_switch_port_init()
3107 struct ethsw_core *ethsw = port_priv->ethsw_data; in dpaa2_switch_port_init()
3118 port_priv->idx, &dpsw_if_attr); in dpaa2_switch_port_init()
3123 port_priv->tx_qdid = dpsw_if_attr.qdid; in dpaa2_switch_port_init()
3139 port_priv->fdb = fdb; in dpaa2_switch_port_init()
3150 err = dpaa2_switch_fdb_set_egress_flood(ethsw, port_priv->fdb->fdb_id); in dpaa2_switch_port_init()
3171 err = dpaa2_switch_port_acl_tbl_bind(port_priv, filter_block); in dpaa2_switch_port_init()
3175 err = dpaa2_switch_port_trap_mac_addr(port_priv, stpa); in dpaa2_switch_port_init()
3208 struct ethsw_port_priv *port_priv; in dpaa2_switch_remove() local
3221 port_priv = ethsw->ports[i]; in dpaa2_switch_remove()
3222 unregister_netdev(port_priv->netdev); in dpaa2_switch_remove()
3244 struct ethsw_port_priv *port_priv; in dpaa2_switch_probe_port() local
3255 port_priv = netdev_priv(port_netdev); in dpaa2_switch_probe_port()
3256 port_priv->netdev = port_netdev; in dpaa2_switch_probe_port()
3257 port_priv->ethsw_data = ethsw; in dpaa2_switch_probe_port()
3259 port_priv->idx = port_idx; in dpaa2_switch_probe_port()
3260 port_priv->stp_state = BR_STATE_FORWARDING; in dpaa2_switch_probe_port()
3268 port_priv->bcast_flood = true; in dpaa2_switch_probe_port()
3269 port_priv->ucast_flood = true; in dpaa2_switch_probe_port()
3278 ethsw->ports[port_idx] = port_priv; in dpaa2_switch_probe_port()
3287 err = dpaa2_switch_port_init(port_priv, port_idx); in dpaa2_switch_probe_port()
3291 err = dpaa2_switch_port_set_mac_addr(port_priv); in dpaa2_switch_probe_port()
3295 err = dpaa2_switch_port_set_learning(port_priv, false); in dpaa2_switch_probe_port()
3298 port_priv->learn_ena = false; in dpaa2_switch_probe_port()
3300 err = dpaa2_switch_port_connect_mac(port_priv); in dpaa2_switch_probe_port()