Lines Matching full:ocelot

2 /* Microsemi Ocelot Switch driver
8 #include "ocelot.h"
15 struct ocelot *ocelot = priv->port.ocelot; in ocelot_setup_tc_cls_flower() local
23 return ocelot_cls_flower_replace(ocelot, port, f, ingress); in ocelot_setup_tc_cls_flower()
25 return ocelot_cls_flower_destroy(ocelot, port, f, ingress); in ocelot_setup_tc_cls_flower()
27 return ocelot_cls_flower_stats(ocelot, port, f, ingress); in ocelot_setup_tc_cls_flower()
38 struct ocelot *ocelot = priv->port.ocelot; in ocelot_setup_tc_cls_matchall() local
79 err = ocelot_port_policer_add(ocelot, port, &pol); in ocelot_setup_tc_cls_matchall()
92 err = ocelot_port_policer_del(ocelot, port); in ocelot_setup_tc_cls_matchall()
203 struct ocelot *ocelot = priv->port.ocelot; in ocelot_port_adjust_link() local
206 ocelot_adjust_link(ocelot, port, dev->phydev); in ocelot_port_adjust_link()
214 struct ocelot *ocelot = ocelot_port->ocelot; in ocelot_vlan_vid_add() local
218 ret = ocelot_vlan_add(ocelot, port, vid, pvid, untagged); in ocelot_vlan_vid_add()
223 ocelot_mact_learn(ocelot, PGID_CPU, dev->dev_addr, vid, in ocelot_vlan_vid_add()
232 struct ocelot *ocelot = priv->port.ocelot; in ocelot_vlan_vid_del() local
243 ret = ocelot_vlan_del(ocelot, port, vid); in ocelot_vlan_vid_del()
248 ocelot_mact_forget(ocelot, dev->dev_addr, vid); in ocelot_vlan_vid_del()
257 struct ocelot *ocelot = ocelot_port->ocelot; in ocelot_port_open() local
282 ocelot_port_enable(ocelot, port, priv->phy); in ocelot_port_open()
290 struct ocelot *ocelot = priv->port.ocelot; in ocelot_port_stop() local
297 ocelot_port_disable(ocelot, port); in ocelot_port_stop()
327 struct ocelot *ocelot = ocelot_port->ocelot; in ocelot_port_xmit() local
334 val = ocelot_read(ocelot, QS_INJ_STATUS); in ocelot_port_xmit()
339 ocelot_write_rix(ocelot, QS_INJ_CTRL_GAP_SIZE(1) | in ocelot_port_xmit()
347 if (ocelot->ptp && (shinfo->tx_flags & SKBTX_HW_TSTAMP)) { in ocelot_port_xmit()
359 ocelot_port_add_txtstamp_skb(ocelot, port, clone); in ocelot_port_xmit()
365 if (ocelot->ptp && shinfo->tx_flags & SKBTX_HW_TSTAMP) { in ocelot_port_xmit()
374 ocelot_write_rix(ocelot, (__force u32)cpu_to_be32(ifh[i]), in ocelot_port_xmit()
380 ocelot_write_rix(ocelot, ((u32 *)skb->data)[i], QS_INJ_WR, grp); in ocelot_port_xmit()
384 ocelot_write_rix(ocelot, 0, QS_INJ_WR, grp); in ocelot_port_xmit()
389 ocelot_write_rix(ocelot, QS_INJ_CTRL_GAP_SIZE(1) | in ocelot_port_xmit()
395 ocelot_write_rix(ocelot, 0, QS_INJ_WR, grp); in ocelot_port_xmit()
410 struct ocelot *ocelot = ocelot_port->ocelot; in ocelot_mc_unsync() local
412 return ocelot_mact_forget(ocelot, addr, ocelot_port->pvid); in ocelot_mc_unsync()
419 struct ocelot *ocelot = ocelot_port->ocelot; in ocelot_mc_sync() local
421 return ocelot_mact_learn(ocelot, PGID_CPU, addr, ocelot_port->pvid, in ocelot_mc_sync()
428 struct ocelot *ocelot = priv->port.ocelot; in ocelot_set_rx_mode() local
436 val = GENMASK(ocelot->num_phys_ports - 1, 0); in ocelot_set_rx_mode()
437 for_each_nonreserved_multicast_dest_pgid(ocelot, i) in ocelot_set_rx_mode()
438 ocelot_write_rix(ocelot, val, ANA_PGID_PGID, i); in ocelot_set_rx_mode()
461 struct ocelot *ocelot = ocelot_port->ocelot; in ocelot_port_set_mac_address() local
465 ocelot_mact_learn(ocelot, PGID_CPU, addr->sa_data, ocelot_port->pvid, in ocelot_port_set_mac_address()
468 ocelot_mact_forget(ocelot, dev->dev_addr, ocelot_port->pvid); in ocelot_port_set_mac_address()
478 struct ocelot *ocelot = priv->port.ocelot; in ocelot_get_stats64() local
482 ocelot_write(ocelot, SYS_STAT_CFG_STAT_VIEW(port), in ocelot_get_stats64()
486 stats->rx_bytes = ocelot_read(ocelot, SYS_COUNT_RX_OCTETS); in ocelot_get_stats64()
487 stats->rx_packets = ocelot_read(ocelot, SYS_COUNT_RX_SHORTS) + in ocelot_get_stats64()
488 ocelot_read(ocelot, SYS_COUNT_RX_FRAGMENTS) + in ocelot_get_stats64()
489 ocelot_read(ocelot, SYS_COUNT_RX_JABBERS) + in ocelot_get_stats64()
490 ocelot_read(ocelot, SYS_COUNT_RX_LONGS) + in ocelot_get_stats64()
491 ocelot_read(ocelot, SYS_COUNT_RX_64) + in ocelot_get_stats64()
492 ocelot_read(ocelot, SYS_COUNT_RX_65_127) + in ocelot_get_stats64()
493 ocelot_read(ocelot, SYS_COUNT_RX_128_255) + in ocelot_get_stats64()
494 ocelot_read(ocelot, SYS_COUNT_RX_256_1023) + in ocelot_get_stats64()
495 ocelot_read(ocelot, SYS_COUNT_RX_1024_1526) + in ocelot_get_stats64()
496 ocelot_read(ocelot, SYS_COUNT_RX_1527_MAX); in ocelot_get_stats64()
497 stats->multicast = ocelot_read(ocelot, SYS_COUNT_RX_MULTICAST); in ocelot_get_stats64()
501 stats->tx_bytes = ocelot_read(ocelot, SYS_COUNT_TX_OCTETS); in ocelot_get_stats64()
502 stats->tx_packets = ocelot_read(ocelot, SYS_COUNT_TX_64) + in ocelot_get_stats64()
503 ocelot_read(ocelot, SYS_COUNT_TX_65_127) + in ocelot_get_stats64()
504 ocelot_read(ocelot, SYS_COUNT_TX_128_511) + in ocelot_get_stats64()
505 ocelot_read(ocelot, SYS_COUNT_TX_512_1023) + in ocelot_get_stats64()
506 ocelot_read(ocelot, SYS_COUNT_TX_1024_1526) + in ocelot_get_stats64()
507 ocelot_read(ocelot, SYS_COUNT_TX_1527_MAX); in ocelot_get_stats64()
508 stats->tx_dropped = ocelot_read(ocelot, SYS_COUNT_TX_DROPS) + in ocelot_get_stats64()
509 ocelot_read(ocelot, SYS_COUNT_TX_AGING); in ocelot_get_stats64()
510 stats->collisions = ocelot_read(ocelot, SYS_COUNT_TX_COLLISION); in ocelot_get_stats64()
520 struct ocelot *ocelot = priv->port.ocelot; in ocelot_port_fdb_add() local
523 return ocelot_fdb_add(ocelot, port, addr, vid); in ocelot_port_fdb_add()
531 struct ocelot *ocelot = priv->port.ocelot; in ocelot_port_fdb_del() local
534 return ocelot_fdb_del(ocelot, port, addr, vid); in ocelot_port_fdb_del()
543 struct ocelot *ocelot = priv->port.ocelot; in ocelot_port_fdb_dump() local
553 ret = ocelot_fdb_dump(ocelot, port, ocelot_port_fdb_do_dump, &dump); in ocelot_port_fdb_dump()
572 static void ocelot_vlan_mode(struct ocelot *ocelot, int port, in ocelot_vlan_mode() argument
578 val = ocelot_read(ocelot, ANA_VLANMASK); in ocelot_vlan_mode()
583 ocelot_write(ocelot, val, ANA_VLANMASK); in ocelot_vlan_mode()
591 struct ocelot *ocelot = priv->port.ocelot; in ocelot_set_features() local
602 ocelot_vlan_mode(ocelot, port, features); in ocelot_set_features()
611 struct ocelot *ocelot = priv->port.ocelot; in ocelot_get_port_parent_id() local
613 ppid->id_len = sizeof(ocelot->base_mac); in ocelot_get_port_parent_id()
614 memcpy(&ppid->id, &ocelot->base_mac, ppid->id_len); in ocelot_get_port_parent_id()
622 struct ocelot *ocelot = priv->port.ocelot; in ocelot_ioctl() local
628 if (!phy_has_hwtstamp(dev->phydev) && ocelot->ptp) { in ocelot_ioctl()
631 return ocelot_hwstamp_set(ocelot, port, ifr); in ocelot_ioctl()
633 return ocelot_hwstamp_get(ocelot, port, ifr); in ocelot_ioctl()
659 struct net_device *ocelot_port_to_netdev(struct ocelot *ocelot, int port) in ocelot_port_to_netdev() argument
661 struct ocelot_port *ocelot_port = ocelot->ports[port]; in ocelot_port_to_netdev()
694 struct ocelot *ocelot = priv->port.ocelot; in ocelot_port_get_strings() local
697 ocelot_get_strings(ocelot, port, sset, data); in ocelot_port_get_strings()
705 struct ocelot *ocelot = priv->port.ocelot; in ocelot_port_get_ethtool_stats() local
708 ocelot_get_ethtool_stats(ocelot, port, data); in ocelot_port_get_ethtool_stats()
714 struct ocelot *ocelot = priv->port.ocelot; in ocelot_port_get_sset_count() local
717 return ocelot_get_sset_count(ocelot, port, sset); in ocelot_port_get_sset_count()
724 struct ocelot *ocelot = priv->port.ocelot; in ocelot_port_get_ts_info() local
727 if (!ocelot->ptp) in ocelot_port_get_ts_info()
730 return ocelot_get_ts_info(ocelot, port, info); in ocelot_port_get_ts_info()
742 static void ocelot_port_attr_stp_state_set(struct ocelot *ocelot, int port, in ocelot_port_attr_stp_state_set() argument
749 ocelot_bridge_stp_state_set(ocelot, port, state); in ocelot_port_attr_stp_state_set()
752 static void ocelot_port_attr_ageing_set(struct ocelot *ocelot, int port, in ocelot_port_attr_ageing_set() argument
758 ocelot_set_ageing_time(ocelot, ageing_time); in ocelot_port_attr_ageing_set()
761 static void ocelot_port_attr_mc_set(struct ocelot *ocelot, int port, bool mc) in ocelot_port_attr_mc_set() argument
771 ocelot_rmw_gix(ocelot, val, cpu_fwd_mcast, in ocelot_port_attr_mc_set()
780 struct ocelot *ocelot = priv->port.ocelot; in ocelot_port_attr_set() local
786 ocelot_port_attr_stp_state_set(ocelot, port, trans, in ocelot_port_attr_set()
790 ocelot_port_attr_ageing_set(ocelot, port, attr->u.ageing_time); in ocelot_port_attr_set()
793 ocelot_port_vlan_filtering(ocelot, port, in ocelot_port_attr_set()
797 ocelot_port_attr_mc_set(ocelot, port, !attr->u.mc_disabled); in ocelot_port_attr_set()
847 struct ocelot *ocelot = ocelot_port->ocelot; in ocelot_port_obj_add_mdb() local
853 return ocelot_port_mdb_add(ocelot, port, mdb); in ocelot_port_obj_add_mdb()
861 struct ocelot *ocelot = ocelot_port->ocelot; in ocelot_port_obj_del_mdb() local
864 return ocelot_port_mdb_del(ocelot, port, mdb); in ocelot_port_obj_del_mdb()
917 struct ocelot *ocelot = ocelot_port->ocelot; in ocelot_netdevice_port_event() local
925 err = ocelot_port_bridge_join(ocelot, port, in ocelot_netdevice_port_event()
928 err = ocelot_port_bridge_leave(ocelot, port, in ocelot_netdevice_port_event()
934 err = ocelot_port_lag_join(ocelot, port, in ocelot_netdevice_port_event()
937 ocelot_port_lag_leave(ocelot, port, in ocelot_netdevice_port_event()
1047 int ocelot_probe_port(struct ocelot *ocelot, int port, struct regmap *target, in ocelot_probe_port() argument
1058 SET_NETDEV_DEV(dev, ocelot->dev); in ocelot_probe_port()
1064 ocelot_port->ocelot = ocelot; in ocelot_probe_port()
1066 ocelot->ports[port] = ocelot_port; in ocelot_probe_port()
1075 memcpy(dev->dev_addr, ocelot->base_mac, ETH_ALEN); in ocelot_probe_port()
1077 ocelot_mact_learn(ocelot, PGID_CPU, dev->dev_addr, ocelot_port->pvid, in ocelot_probe_port()
1080 ocelot_init_port(ocelot, port); in ocelot_probe_port()
1084 dev_err(ocelot->dev, "register_netdev failed\n"); in ocelot_probe_port()