slave.c (002c6ca75289a4ac4f6738213dd2d258704886e4) slave.c (0171a1d22bb99174671484f409f66f5b96c073b4)
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * net/dsa/slave.c - Slave device handling
4 * Copyright (c) 2008-2009 Marvell Semiconductor
5 */
6
7#include <linux/list.h>
8#include <linux/etherdevice.h>

--- 962 unchanged lines hidden (view full) ---

971 unsigned int start;
972 int i;
973
974 for_each_possible_cpu(i) {
975 u64 tx_packets, tx_bytes, rx_packets, rx_bytes;
976
977 s = per_cpu_ptr(dev->tstats, i);
978 do {
1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * net/dsa/slave.c - Slave device handling
4 * Copyright (c) 2008-2009 Marvell Semiconductor
5 */
6
7#include <linux/list.h>
8#include <linux/etherdevice.h>

--- 962 unchanged lines hidden (view full) ---

971 unsigned int start;
972 int i;
973
974 for_each_possible_cpu(i) {
975 u64 tx_packets, tx_bytes, rx_packets, rx_bytes;
976
977 s = per_cpu_ptr(dev->tstats, i);
978 do {
979 start = u64_stats_fetch_begin_irq(&s->syncp);
979 start = u64_stats_fetch_begin(&s->syncp);
980 tx_packets = u64_stats_read(&s->tx_packets);
981 tx_bytes = u64_stats_read(&s->tx_bytes);
982 rx_packets = u64_stats_read(&s->rx_packets);
983 rx_bytes = u64_stats_read(&s->rx_bytes);
980 tx_packets = u64_stats_read(&s->tx_packets);
981 tx_bytes = u64_stats_read(&s->tx_bytes);
982 rx_packets = u64_stats_read(&s->rx_packets);
983 rx_bytes = u64_stats_read(&s->rx_bytes);
984 } while (u64_stats_fetch_retry_irq(&s->syncp, start));
984 } while (u64_stats_fetch_retry(&s->syncp, start));
985 data[0] += tx_packets;
986 data[1] += tx_bytes;
987 data[2] += rx_packets;
988 data[3] += rx_bytes;
989 }
990 if (ds->ops->get_ethtool_stats)
991 ds->ops->get_ethtool_stats(ds, dp->index, data + 4);
992}

--- 1167 unchanged lines hidden (view full) ---

2160 .self_test = dsa_slave_net_selftest,
2161};
2162
2163static const struct dcbnl_rtnl_ops __maybe_unused dsa_slave_dcbnl_ops = {
2164 .ieee_setapp = dsa_slave_dcbnl_ieee_setapp,
2165 .ieee_delapp = dsa_slave_dcbnl_ieee_delapp,
2166};
2167
985 data[0] += tx_packets;
986 data[1] += tx_bytes;
987 data[2] += rx_packets;
988 data[3] += rx_bytes;
989 }
990 if (ds->ops->get_ethtool_stats)
991 ds->ops->get_ethtool_stats(ds, dp->index, data + 4);
992}

--- 1167 unchanged lines hidden (view full) ---

2160 .self_test = dsa_slave_net_selftest,
2161};
2162
2163static const struct dcbnl_rtnl_ops __maybe_unused dsa_slave_dcbnl_ops = {
2164 .ieee_setapp = dsa_slave_dcbnl_ieee_setapp,
2165 .ieee_delapp = dsa_slave_dcbnl_ieee_delapp,
2166};
2167
2168static struct devlink_port *dsa_slave_get_devlink_port(struct net_device *dev)
2169{
2170 struct dsa_port *dp = dsa_slave_to_port(dev);
2171
2172 return &dp->devlink_port;
2173}
2174
2175static void dsa_slave_get_stats64(struct net_device *dev,
2176 struct rtnl_link_stats64 *s)
2177{
2178 struct dsa_port *dp = dsa_slave_to_port(dev);
2179 struct dsa_switch *ds = dp->ds;
2180
2181 if (ds->ops->get_stats64)
2182 ds->ops->get_stats64(ds, dp->index, s);

--- 31 unchanged lines hidden (view full) ---

2214 .ndo_netpoll_setup = dsa_slave_netpoll_setup,
2215 .ndo_netpoll_cleanup = dsa_slave_netpoll_cleanup,
2216 .ndo_poll_controller = dsa_slave_poll_controller,
2217#endif
2218 .ndo_setup_tc = dsa_slave_setup_tc,
2219 .ndo_get_stats64 = dsa_slave_get_stats64,
2220 .ndo_vlan_rx_add_vid = dsa_slave_vlan_rx_add_vid,
2221 .ndo_vlan_rx_kill_vid = dsa_slave_vlan_rx_kill_vid,
2168static void dsa_slave_get_stats64(struct net_device *dev,
2169 struct rtnl_link_stats64 *s)
2170{
2171 struct dsa_port *dp = dsa_slave_to_port(dev);
2172 struct dsa_switch *ds = dp->ds;
2173
2174 if (ds->ops->get_stats64)
2175 ds->ops->get_stats64(ds, dp->index, s);

--- 31 unchanged lines hidden (view full) ---

2207 .ndo_netpoll_setup = dsa_slave_netpoll_setup,
2208 .ndo_netpoll_cleanup = dsa_slave_netpoll_cleanup,
2209 .ndo_poll_controller = dsa_slave_poll_controller,
2210#endif
2211 .ndo_setup_tc = dsa_slave_setup_tc,
2212 .ndo_get_stats64 = dsa_slave_get_stats64,
2213 .ndo_vlan_rx_add_vid = dsa_slave_vlan_rx_add_vid,
2214 .ndo_vlan_rx_kill_vid = dsa_slave_vlan_rx_kill_vid,
2222 .ndo_get_devlink_port = dsa_slave_get_devlink_port,
2223 .ndo_change_mtu = dsa_slave_change_mtu,
2224 .ndo_fill_forward_path = dsa_slave_fill_forward_path,
2225};
2226
2227static struct device_type dsa_type = {
2228 .name = "dsa",
2229};
2230

--- 138 unchanged lines hidden (view full) ---

2369
2370 return 0;
2371}
2372
2373int dsa_slave_create(struct dsa_port *port)
2374{
2375 struct net_device *master = dsa_port_to_master(port);
2376 struct dsa_switch *ds = port->ds;
2215 .ndo_change_mtu = dsa_slave_change_mtu,
2216 .ndo_fill_forward_path = dsa_slave_fill_forward_path,
2217};
2218
2219static struct device_type dsa_type = {
2220 .name = "dsa",
2221};
2222

--- 138 unchanged lines hidden (view full) ---

2361
2362 return 0;
2363}
2364
2365int dsa_slave_create(struct dsa_port *port)
2366{
2367 struct net_device *master = dsa_port_to_master(port);
2368 struct dsa_switch *ds = port->ds;
2377 const char *name = port->name;
2378 struct net_device *slave_dev;
2379 struct dsa_slave_priv *p;
2369 struct net_device *slave_dev;
2370 struct dsa_slave_priv *p;
2371 const char *name;
2372 int assign_type;
2380 int ret;
2381
2382 if (!ds->num_tx_queues)
2383 ds->num_tx_queues = 1;
2384
2373 int ret;
2374
2375 if (!ds->num_tx_queues)
2376 ds->num_tx_queues = 1;
2377
2378 if (port->name) {
2379 name = port->name;
2380 assign_type = NET_NAME_UNKNOWN;
2381 } else {
2382 name = "eth%d";
2383 assign_type = NET_NAME_UNKNOWN;
2384 }
2385
2385 slave_dev = alloc_netdev_mqs(sizeof(struct dsa_slave_priv), name,
2386 slave_dev = alloc_netdev_mqs(sizeof(struct dsa_slave_priv), name,
2386 NET_NAME_UNKNOWN, ether_setup,
2387 assign_type, ether_setup,
2387 ds->num_tx_queues, 1);
2388 if (slave_dev == NULL)
2389 return -ENOMEM;
2390
2391 slave_dev->rtnl_link_ops = &dsa_link_ops;
2392 slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
2393#if IS_ENABLED(CONFIG_DCB)
2394 slave_dev->dcbnl_ops = &dsa_slave_dcbnl_ops;

--- 6 unchanged lines hidden (view full) ---

2401 if (dsa_switch_supports_uc_filtering(ds))
2402 slave_dev->priv_flags |= IFF_UNICAST_FLT;
2403 slave_dev->netdev_ops = &dsa_slave_netdev_ops;
2404 if (ds->ops->port_max_mtu)
2405 slave_dev->max_mtu = ds->ops->port_max_mtu(ds, port->index);
2406 SET_NETDEV_DEVTYPE(slave_dev, &dsa_type);
2407
2408 SET_NETDEV_DEV(slave_dev, port->ds->dev);
2388 ds->num_tx_queues, 1);
2389 if (slave_dev == NULL)
2390 return -ENOMEM;
2391
2392 slave_dev->rtnl_link_ops = &dsa_link_ops;
2393 slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
2394#if IS_ENABLED(CONFIG_DCB)
2395 slave_dev->dcbnl_ops = &dsa_slave_dcbnl_ops;

--- 6 unchanged lines hidden (view full) ---

2402 if (dsa_switch_supports_uc_filtering(ds))
2403 slave_dev->priv_flags |= IFF_UNICAST_FLT;
2404 slave_dev->netdev_ops = &dsa_slave_netdev_ops;
2405 if (ds->ops->port_max_mtu)
2406 slave_dev->max_mtu = ds->ops->port_max_mtu(ds, port->index);
2407 SET_NETDEV_DEVTYPE(slave_dev, &dsa_type);
2408
2409 SET_NETDEV_DEV(slave_dev, port->ds->dev);
2410 SET_NETDEV_DEVLINK_PORT(slave_dev, &port->devlink_port);
2409 slave_dev->dev.of_node = port->dn;
2410 slave_dev->vlan_features = master->vlan_features;
2411
2412 p = netdev_priv(slave_dev);
2413 slave_dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
2414 if (!slave_dev->tstats) {
2415 free_netdev(slave_dev);
2416 return -ENOMEM;

--- 1074 unchanged lines hidden ---
2411 slave_dev->dev.of_node = port->dn;
2412 slave_dev->vlan_features = master->vlan_features;
2413
2414 p = netdev_priv(slave_dev);
2415 slave_dev->tstats = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats);
2416 if (!slave_dev->tstats) {
2417 free_netdev(slave_dev);
2418 return -ENOMEM;

--- 1074 unchanged lines hidden ---