Lines Matching defs:port_priv

28 static u16 dpaa2_switch_port_get_fdb_id(struct ethsw_port_priv *port_priv)
30 return port_priv->fdb->fdb_id;
54 static u16 dpaa2_switch_port_set_fdb(struct ethsw_port_priv *port_priv,
66 fdb = dpaa2_switch_fdb_get_unused(port_priv->ethsw_data);
74 port_priv->fdb->bridge_dev = NULL;
78 port_priv->fdb = fdb;
79 port_priv->fdb->in_use = true;
80 port_priv->fdb->bridge_dev = NULL;
97 if (other_dev == port_priv->netdev)
111 port_priv->fdb->in_use = false;
112 port_priv->fdb->bridge_dev = NULL;
115 port_priv->fdb = other_port_priv->fdb;
119 port_priv->fdb->bridge_dev = bridge_dev;
191 static int dpaa2_switch_add_vlan(struct ethsw_port_priv *port_priv, u16 vid)
193 struct ethsw_core *ethsw = port_priv->ethsw_data;
197 vcfg.fdb_id = dpaa2_switch_port_get_fdb_id(port_priv);
209 static bool dpaa2_switch_port_is_up(struct ethsw_port_priv *port_priv)
211 struct net_device *netdev = port_priv->netdev;
215 err = dpsw_if_get_link_state(port_priv->ethsw_data->mc_io, 0,
216 port_priv->ethsw_data->dpsw_handle,
217 port_priv->idx, &state);
228 static int dpaa2_switch_port_set_pvid(struct ethsw_port_priv *port_priv, u16 pvid)
230 struct ethsw_core *ethsw = port_priv->ethsw_data;
231 struct net_device *netdev = port_priv->netdev;
237 port_priv->idx, &tci_cfg);
246 up = dpaa2_switch_port_is_up(port_priv);
250 port_priv->idx);
258 port_priv->idx, &tci_cfg);
265 port_priv->vlans[port_priv->pvid] &= ~ETHSW_VLAN_PVID;
266 port_priv->vlans[pvid] |= ETHSW_VLAN_PVID;
267 port_priv->pvid = pvid;
273 port_priv->idx);
283 static int dpaa2_switch_port_add_vlan(struct ethsw_port_priv *port_priv,
286 struct ethsw_core *ethsw = port_priv->ethsw_data;
287 struct net_device *netdev = port_priv->netdev;
291 if (port_priv->vlans[vid]) {
300 vcfg.if_id[0] = port_priv->idx;
301 vcfg.fdb_id = dpaa2_switch_port_get_fdb_id(port_priv);
309 port_priv->vlans[vid] = ETHSW_VLAN_MEMBER;
320 port_priv->vlans[vid] |= ETHSW_VLAN_UNTAGGED;
324 err = dpaa2_switch_port_set_pvid(port_priv, vid);
350 static int dpaa2_switch_port_set_stp_state(struct ethsw_port_priv *port_priv, u8 state)
356 if (!netif_running(port_priv->netdev) || state == port_priv->stp_state)
361 if (port_priv->vlans[vid] & ETHSW_VLAN_MEMBER) {
363 err = dpsw_if_set_stp(port_priv->ethsw_data->mc_io, 0,
364 port_priv->ethsw_data->dpsw_handle,
365 port_priv->idx, &stp_cfg);
367 netdev_err(port_priv->netdev,
374 port_priv->stp_state = state;
403 static int dpaa2_switch_port_fdb_add_uc(struct ethsw_port_priv *port_priv,
410 entry.if_egress = port_priv->idx;
414 fdb_id = dpaa2_switch_port_get_fdb_id(port_priv);
415 err = dpsw_fdb_add_unicast(port_priv->ethsw_data->mc_io, 0,
416 port_priv->ethsw_data->dpsw_handle,
419 netdev_err(port_priv->netdev,
424 static int dpaa2_switch_port_fdb_del_uc(struct ethsw_port_priv *port_priv,
431 entry.if_egress = port_priv->idx;
435 fdb_id = dpaa2_switch_port_get_fdb_id(port_priv);
436 err = dpsw_fdb_remove_unicast(port_priv->ethsw_data->mc_io, 0,
437 port_priv->ethsw_data->dpsw_handle,
441 netdev_err(port_priv->netdev,
446 static int dpaa2_switch_port_fdb_add_mc(struct ethsw_port_priv *port_priv,
456 entry.if_id[0] = port_priv->idx;
458 fdb_id = dpaa2_switch_port_get_fdb_id(port_priv);
459 err = dpsw_fdb_add_multicast(port_priv->ethsw_data->mc_io, 0,
460 port_priv->ethsw_data->dpsw_handle,
464 netdev_err(port_priv->netdev, "dpsw_fdb_add_multicast err %d\n",
469 static int dpaa2_switch_port_fdb_del_mc(struct ethsw_port_priv *port_priv,
479 entry.if_id[0] = port_priv->idx;
481 fdb_id = dpaa2_switch_port_get_fdb_id(port_priv);
482 err = dpsw_fdb_remove_multicast(port_priv->ethsw_data->mc_io, 0,
483 port_priv->ethsw_data->dpsw_handle,
487 netdev_err(port_priv->netdev,
495 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
499 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0,
500 port_priv->ethsw_data->dpsw_handle,
501 port_priv->idx,
506 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0,
507 port_priv->ethsw_data->dpsw_handle,
508 port_priv->idx,
513 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0,
514 port_priv->ethsw_data->dpsw_handle,
515 port_priv->idx,
520 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0,
521 port_priv->ethsw_data->dpsw_handle,
522 port_priv->idx,
527 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0,
528 port_priv->ethsw_data->dpsw_handle,
529 port_priv->idx,
535 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0,
536 port_priv->ethsw_data->dpsw_handle,
537 port_priv->idx,
544 err = dpsw_if_get_counter(port_priv->ethsw_data->mc_io, 0,
545 port_priv->ethsw_data->dpsw_handle,
546 port_priv->idx,
579 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
582 err = dpsw_if_set_max_frame_length(port_priv->ethsw_data->mc_io,
584 port_priv->ethsw_data->dpsw_handle,
585 port_priv->idx,
599 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
607 * (the writer to port_priv->mac), so we cannot race with it.
609 if (dpaa2_mac_is_type_phy(port_priv->mac))
618 err = dpsw_if_get_link_state(port_priv->ethsw_data->mc_io, 0,
619 port_priv->ethsw_data->dpsw_handle,
620 port_priv->idx, &state);
628 if (state.up != port_priv->link_state) {
636 port_priv->link_state = state.up;
685 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
686 struct ethsw_core *ethsw = port_priv->ethsw_data;
689 mutex_lock(&port_priv->mac_lock);
691 if (!dpaa2_switch_port_is_type_phy(port_priv)) {
700 err = dpsw_if_enable(port_priv->ethsw_data->mc_io, 0,
701 port_priv->ethsw_data->dpsw_handle,
702 port_priv->idx);
704 mutex_unlock(&port_priv->mac_lock);
711 if (dpaa2_switch_port_is_type_phy(port_priv))
712 dpaa2_mac_start(port_priv->mac);
714 mutex_unlock(&port_priv->mac_lock);
721 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
722 struct ethsw_core *ethsw = port_priv->ethsw_data;
725 mutex_lock(&port_priv->mac_lock);
727 if (dpaa2_switch_port_is_type_phy(port_priv)) {
728 dpaa2_mac_stop(port_priv->mac);
734 mutex_unlock(&port_priv->mac_lock);
736 err = dpsw_if_disable(port_priv->ethsw_data->mc_io, 0,
737 port_priv->ethsw_data->dpsw_handle,
738 port_priv->idx);
752 struct ethsw_port_priv *port_priv = netdev_priv(dev);
755 ppid->id[0] = port_priv->ethsw_data->dev_id;
763 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
766 err = snprintf(name, len, "p%d", port_priv->idx);
821 struct ethsw_port_priv *port_priv)
823 int idx = port_priv->idx;
827 valid = entry->if_info == port_priv->idx;
834 static int dpaa2_switch_fdb_iterate(struct ethsw_port_priv *port_priv,
837 struct net_device *net_dev = port_priv->netdev;
838 struct ethsw_core *ethsw = port_priv->ethsw_data;
862 fdb_id = dpaa2_switch_port_get_fdb_id(port_priv);
876 err = cb(port_priv, &fdb_entry, data);
893 static int dpaa2_switch_fdb_entry_dump(struct ethsw_port_priv *port_priv,
897 if (!dpaa2_switch_port_fdb_valid_entry(fdb_entry, port_priv))
907 struct ethsw_port_priv *port_priv = netdev_priv(net_dev);
916 err = dpaa2_switch_fdb_iterate(port_priv, dpaa2_switch_fdb_entry_dump, &dump);
922 static int dpaa2_switch_fdb_entry_fast_age(struct ethsw_port_priv *port_priv,
926 if (!dpaa2_switch_port_fdb_valid_entry(fdb_entry, port_priv))
933 dpaa2_switch_port_fdb_del_uc(port_priv, fdb_entry->mac_addr);
935 dpaa2_switch_port_fdb_del_mc(port_priv, fdb_entry->mac_addr);
940 static void dpaa2_switch_port_fast_age(struct ethsw_port_priv *port_priv)
942 dpaa2_switch_fdb_iterate(port_priv,
974 static int dpaa2_switch_port_set_mac_addr(struct ethsw_port_priv *port_priv)
976 struct ethsw_core *ethsw = port_priv->ethsw_data;
977 struct net_device *net_dev = port_priv->netdev;
987 port_priv->idx, mac_addr);
1084 struct ethsw_port_priv *port_priv = netdev_priv(net_dev);
1085 struct ethsw_core *ethsw = port_priv->ethsw_data;
1127 port_priv->tx_qdid,
1190 dpaa2_switch_port_acl_tbl_bind(struct ethsw_port_priv *port_priv,
1193 struct ethsw_core *ethsw = port_priv->ethsw_data;
1194 struct net_device *netdev = port_priv->netdev;
1198 if (port_priv->filter_block)
1201 acl_if_cfg.if_id[0] = port_priv->idx;
1210 block->ports |= BIT(port_priv->idx);
1211 port_priv->filter_block = block;
1217 dpaa2_switch_port_acl_tbl_unbind(struct ethsw_port_priv *port_priv,
1220 struct ethsw_core *ethsw = port_priv->ethsw_data;
1221 struct net_device *netdev = port_priv->netdev;
1225 if (port_priv->filter_block != block)
1228 acl_if_cfg.if_id[0] = port_priv->idx;
1237 block->ports &= ~BIT(port_priv->idx);
1238 port_priv->filter_block = NULL;
1242 static int dpaa2_switch_port_block_bind(struct ethsw_port_priv *port_priv,
1245 struct dpaa2_switch_filter_block *old_block = port_priv->filter_block;
1251 err = dpaa2_switch_block_offload_mirror(block, port_priv);
1258 if (port_priv->filter_block == block)
1261 err = dpaa2_switch_port_acl_tbl_unbind(port_priv, old_block);
1271 return dpaa2_switch_port_acl_tbl_bind(port_priv, block);
1275 dpaa2_switch_port_block_unbind(struct ethsw_port_priv *port_priv,
1278 struct ethsw_core *ethsw = port_priv->ethsw_data;
1285 err = dpaa2_switch_block_unoffload_mirror(block, port_priv);
1292 if (block->ports == BIT(port_priv->idx))
1295 err = dpaa2_switch_port_acl_tbl_unbind(port_priv, block);
1304 return dpaa2_switch_port_acl_tbl_bind(port_priv, new_block);
1310 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
1311 struct ethsw_core *ethsw = port_priv->ethsw_data;
1326 filter_block = port_priv->filter_block;
1339 err = dpaa2_switch_port_block_bind(port_priv, filter_block);
1360 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
1361 struct ethsw_core *ethsw = port_priv->ethsw_data;
1373 err = dpaa2_switch_port_block_unbind(port_priv, filter_block);
1438 static int dpaa2_switch_port_connect_mac(struct ethsw_port_priv *port_priv)
1444 dpsw_port_dev = to_fsl_mc_device(port_priv->netdev->dev.parent);
1445 dpmac_dev = fsl_mc_get_endpoint(dpsw_port_dev, port_priv->idx);
1458 mac->mc_io = port_priv->ethsw_data->mc_io;
1459 mac->net_dev = port_priv->netdev;
1468 netdev_err(port_priv->netdev,
1475 mutex_lock(&port_priv->mac_lock);
1476 port_priv->mac = mac;
1477 mutex_unlock(&port_priv->mac_lock);
1488 static void dpaa2_switch_port_disconnect_mac(struct ethsw_port_priv *port_priv)
1492 mutex_lock(&port_priv->mac_lock);
1493 mac = port_priv->mac;
1494 port_priv->mac = NULL;
1495 mutex_unlock(&port_priv->mac_lock);
1511 struct ethsw_port_priv *port_priv;
1524 port_priv = ethsw->ports[if_id];
1527 dpaa2_switch_port_link_state_update(port_priv->netdev);
1530 dpaa2_switch_port_set_mac_addr(port_priv);
1535 had_mac = !!port_priv->mac;
1537 dpaa2_switch_port_disconnect_mac(port_priv);
1539 dpaa2_switch_port_connect_mac(port_priv);
1625 static int dpaa2_switch_port_set_learning(struct ethsw_port_priv *port_priv, bool enable)
1627 struct ethsw_core *ethsw = port_priv->ethsw_data;
1637 port_priv->idx, learn_mode);
1639 netdev_err(port_priv->netdev, "dpsw_if_set_learning_mode err %d\n", err);
1642 dpaa2_switch_port_fast_age(port_priv);
1650 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
1653 err = dpaa2_switch_port_set_stp_state(port_priv, state);
1661 err = dpaa2_switch_port_set_learning(port_priv, false);
1665 err = dpaa2_switch_port_set_learning(port_priv,
1666 port_priv->learn_ena);
1673 static int dpaa2_switch_port_flood(struct ethsw_port_priv *port_priv,
1676 struct ethsw_core *ethsw = port_priv->ethsw_data;
1679 port_priv->bcast_flood = !!(flags.val & BR_BCAST_FLOOD);
1682 port_priv->ucast_flood = !!(flags.val & BR_FLOOD);
1684 return dpaa2_switch_fdb_set_egress_flood(ethsw, port_priv->fdb->fdb_id);
1713 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
1719 err = dpaa2_switch_port_set_learning(port_priv, learn_ena);
1722 port_priv->learn_ena = learn_ena;
1726 err = dpaa2_switch_port_flood(port_priv, flags);
1769 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
1770 struct ethsw_core *ethsw = port_priv->ethsw_data;
1777 if (port_priv->vlans[vlan->vid] & ETHSW_VLAN_MEMBER) {
1802 if (!port_priv->ethsw_data->vlans[vlan->vid]) {
1804 err = dpaa2_switch_add_vlan(port_priv, vlan->vid);
1808 port_priv->ethsw_data->vlans[vlan->vid] |= ETHSW_VLAN_GLOBAL;
1811 return dpaa2_switch_port_add_vlan(port_priv, vlan->vid, vlan->flags);
1834 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
1841 err = dpaa2_switch_port_fdb_add_mc(port_priv, mdb->addr);
1848 dpaa2_switch_port_fdb_del_mc(port_priv, mdb->addr);
1876 static int dpaa2_switch_port_del_vlan(struct ethsw_port_priv *port_priv, u16 vid)
1878 struct ethsw_core *ethsw = port_priv->ethsw_data;
1879 struct net_device *netdev = port_priv->netdev;
1883 if (!port_priv->vlans[vid])
1886 if (port_priv->vlans[vid] & ETHSW_VLAN_PVID) {
1891 err = dpaa2_switch_port_set_pvid(port_priv, 4095);
1897 vcfg.if_id[0] = port_priv->idx;
1898 if (port_priv->vlans[vid] & ETHSW_VLAN_UNTAGGED) {
1907 port_priv->vlans[vid] &= ~ETHSW_VLAN_UNTAGGED;
1910 if (port_priv->vlans[vid] & ETHSW_VLAN_MEMBER) {
1918 port_priv->vlans[vid] &= ~ETHSW_VLAN_MEMBER;
1942 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
1947 return dpaa2_switch_port_del_vlan(port_priv, vlan->vid);
1953 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
1959 err = dpaa2_switch_port_fdb_del_mc(port_priv, mdb->addr);
2006 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
2007 struct dpaa2_switch_fdb *old_fdb = port_priv->fdb;
2008 struct ethsw_core *ethsw = port_priv->ethsw_data;
2013 err = dpaa2_switch_port_del_vlan(port_priv, 1);
2017 dpaa2_switch_port_set_fdb(port_priv, upper_dev);
2021 err = dpaa2_switch_port_set_learning(port_priv, learn_ena);
2022 port_priv->learn_ena = learn_ena;
2025 err = dpaa2_switch_fdb_set_egress_flood(ethsw, port_priv->fdb->fdb_id);
2043 dpaa2_switch_port_set_fdb(port_priv, NULL);
2074 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
2075 struct dpaa2_switch_fdb *old_fdb = port_priv->fdb;
2076 struct ethsw_core *ethsw = port_priv->ethsw_data;
2080 dpaa2_switch_port_fast_age(port_priv);
2090 dpaa2_switch_port_set_fdb(port_priv, NULL);
2101 port_priv->bcast_flood = true;
2102 port_priv->ucast_flood = true;
2108 err = dpaa2_switch_fdb_set_egress_flood(ethsw, port_priv->fdb->fdb_id);
2118 err = dpaa2_switch_port_set_learning(port_priv, false);
2121 port_priv->learn_ena = false;
2126 return dpaa2_switch_port_add_vlan(port_priv, DEFAULT_VLAN_ID,
2150 struct ethsw_port_priv *port_priv = netdev_priv(netdev);
2173 if (other_port_priv->ethsw_data != port_priv->ethsw_data) {
2312 struct ethsw_port_priv *port_priv = netdev_priv(dev);
2315 struct ethsw_core *ethsw = port_priv->ethsw_data;
2438 struct ethsw_port_priv *port_priv;
2452 port_priv = ethsw->ports[if_id];
2453 netdev = port_priv->netdev;
2477 if (vid == port_priv->pvid) {
2489 skb->offload_fwd_mark = !!(port_priv->fdb->bridge_dev);
2984 struct ethsw_port_priv *port_priv = ethsw->ports[port_idx];
2986 dpaa2_switch_port_disconnect_mac(port_priv);
2987 free_netdev(port_priv->netdev);
3128 static int dpaa2_switch_port_trap_mac_addr(struct ethsw_port_priv *port_priv,
3141 return dpaa2_switch_acl_entry_add(port_priv->filter_block, &acl_entry);
3144 static int dpaa2_switch_port_init(struct ethsw_port_priv *port_priv, u16 port)
3152 struct net_device *netdev = port_priv->netdev;
3153 struct ethsw_core *ethsw = port_priv->ethsw_data;
3164 port_priv->idx, &dpsw_if_attr);
3169 port_priv->tx_qdid = dpsw_if_attr.qdid;
3185 port_priv->fdb = fdb;
3196 err = dpaa2_switch_fdb_set_egress_flood(ethsw, port_priv->fdb->fdb_id);
3217 err = dpaa2_switch_port_acl_tbl_bind(port_priv, filter_block);
3221 err = dpaa2_switch_port_trap_mac_addr(port_priv, stpa);
3254 struct ethsw_port_priv *port_priv;
3267 port_priv = ethsw->ports[i];
3268 unregister_netdev(port_priv->netdev);
3288 struct ethsw_port_priv *port_priv;
3299 port_priv = netdev_priv(port_netdev);
3300 port_priv->netdev = port_netdev;
3301 port_priv->ethsw_data = ethsw;
3303 mutex_init(&port_priv->mac_lock);
3305 port_priv->idx = port_idx;
3306 port_priv->stp_state = BR_STATE_FORWARDING;
3314 port_priv->bcast_flood = true;
3315 port_priv->ucast_flood = true;
3324 ethsw->ports[port_idx] = port_priv;
3334 err = dpaa2_switch_port_init(port_priv, port_idx);
3338 err = dpaa2_switch_port_set_mac_addr(port_priv);
3342 err = dpaa2_switch_port_set_learning(port_priv, false);
3345 port_priv->learn_ena = false;
3347 err = dpaa2_switch_port_connect_mac(port_priv);