slave.c (1163319993f0abf8092d5f18fdff98096f7a3a73) slave.c (d538eca85c2aa6ecb5036e6ff47efc93d9f294da)
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>

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

14#include <linux/of_mdio.h>
15#include <linux/mdio.h>
16#include <net/rtnetlink.h>
17#include <net/pkt_cls.h>
18#include <net/selftests.h>
19#include <net/tc_act/tc_mirred.h>
20#include <linux/if_bridge.h>
21#include <linux/if_hsr.h>
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>

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

14#include <linux/of_mdio.h>
15#include <linux/mdio.h>
16#include <net/rtnetlink.h>
17#include <net/pkt_cls.h>
18#include <net/selftests.h>
19#include <net/tc_act/tc_mirred.h>
20#include <linux/if_bridge.h>
21#include <linux/if_hsr.h>
22#include <net/dcbnl.h>
22#include <linux/netpoll.h>
23
24#include "dsa_priv.h"
25
26static void dsa_slave_standalone_event_work(struct work_struct *work)
27{
28 struct dsa_standalone_event_work *standalone_work =
29 container_of(work, struct dsa_standalone_event_work, work);

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

1847 false);
1848out_cpu_failed:
1849 if (new_master_mtu != old_master_mtu)
1850 dev_set_mtu(master, old_master_mtu);
1851out_master_failed:
1852 return err;
1853}
1854
23#include <linux/netpoll.h>
24
25#include "dsa_priv.h"
26
27static void dsa_slave_standalone_event_work(struct work_struct *work)
28{
29 struct dsa_standalone_event_work *standalone_work =
30 container_of(work, struct dsa_standalone_event_work, work);

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

1848 false);
1849out_cpu_failed:
1850 if (new_master_mtu != old_master_mtu)
1851 dev_set_mtu(master, old_master_mtu);
1852out_master_failed:
1853 return err;
1854}
1855
1856static int __maybe_unused
1857dsa_slave_dcbnl_set_default_prio(struct net_device *dev, struct dcb_app *app)
1858{
1859 struct dsa_port *dp = dsa_slave_to_port(dev);
1860 struct dsa_switch *ds = dp->ds;
1861 unsigned long mask, new_prio;
1862 int err, port = dp->index;
1863
1864 if (!ds->ops->port_set_default_prio)
1865 return -EOPNOTSUPP;
1866
1867 err = dcb_ieee_setapp(dev, app);
1868 if (err)
1869 return err;
1870
1871 mask = dcb_ieee_getapp_mask(dev, app);
1872 new_prio = __fls(mask);
1873
1874 err = ds->ops->port_set_default_prio(ds, port, new_prio);
1875 if (err) {
1876 dcb_ieee_delapp(dev, app);
1877 return err;
1878 }
1879
1880 return 0;
1881}
1882
1883static int __maybe_unused dsa_slave_dcbnl_ieee_setapp(struct net_device *dev,
1884 struct dcb_app *app)
1885{
1886 switch (app->selector) {
1887 case IEEE_8021QAZ_APP_SEL_ETHERTYPE:
1888 switch (app->protocol) {
1889 case 0:
1890 return dsa_slave_dcbnl_set_default_prio(dev, app);
1891 default:
1892 return -EOPNOTSUPP;
1893 }
1894 break;
1895 default:
1896 return -EOPNOTSUPP;
1897 }
1898}
1899
1900static int __maybe_unused
1901dsa_slave_dcbnl_del_default_prio(struct net_device *dev, struct dcb_app *app)
1902{
1903 struct dsa_port *dp = dsa_slave_to_port(dev);
1904 struct dsa_switch *ds = dp->ds;
1905 unsigned long mask, new_prio;
1906 int err, port = dp->index;
1907
1908 if (!ds->ops->port_set_default_prio)
1909 return -EOPNOTSUPP;
1910
1911 err = dcb_ieee_delapp(dev, app);
1912 if (err)
1913 return err;
1914
1915 mask = dcb_ieee_getapp_mask(dev, app);
1916 new_prio = mask ? __fls(mask) : 0;
1917
1918 err = ds->ops->port_set_default_prio(ds, port, new_prio);
1919 if (err) {
1920 dcb_ieee_setapp(dev, app);
1921 return err;
1922 }
1923
1924 return 0;
1925}
1926
1927static int __maybe_unused dsa_slave_dcbnl_ieee_delapp(struct net_device *dev,
1928 struct dcb_app *app)
1929{
1930 switch (app->selector) {
1931 case IEEE_8021QAZ_APP_SEL_ETHERTYPE:
1932 switch (app->protocol) {
1933 case 0:
1934 return dsa_slave_dcbnl_del_default_prio(dev, app);
1935 default:
1936 return -EOPNOTSUPP;
1937 }
1938 break;
1939 default:
1940 return -EOPNOTSUPP;
1941 }
1942}
1943
1944/* Pre-populate the DCB application priority table with the priorities
1945 * configured during switch setup, which we read from hardware here.
1946 */
1947static int dsa_slave_dcbnl_init(struct net_device *dev)
1948{
1949 struct dsa_port *dp = dsa_slave_to_port(dev);
1950 struct dsa_switch *ds = dp->ds;
1951 int port = dp->index;
1952 int err;
1953
1954 if (ds->ops->port_get_default_prio) {
1955 int prio = ds->ops->port_get_default_prio(ds, port);
1956 struct dcb_app app = {
1957 .selector = IEEE_8021QAZ_APP_SEL_ETHERTYPE,
1958 .protocol = 0,
1959 .priority = prio,
1960 };
1961
1962 if (prio < 0)
1963 return prio;
1964
1965 err = dcb_ieee_setapp(dev, &app);
1966 if (err)
1967 return err;
1968 }
1969
1970 return 0;
1971}
1972
1855static const struct ethtool_ops dsa_slave_ethtool_ops = {
1856 .get_drvinfo = dsa_slave_get_drvinfo,
1857 .get_regs_len = dsa_slave_get_regs_len,
1858 .get_regs = dsa_slave_get_regs,
1859 .nway_reset = dsa_slave_nway_reset,
1860 .get_link = ethtool_op_get_link,
1861 .get_eeprom_len = dsa_slave_get_eeprom_len,
1862 .get_eeprom = dsa_slave_get_eeprom,

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

1876 .get_pauseparam = dsa_slave_get_pauseparam,
1877 .set_pauseparam = dsa_slave_set_pauseparam,
1878 .get_rxnfc = dsa_slave_get_rxnfc,
1879 .set_rxnfc = dsa_slave_set_rxnfc,
1880 .get_ts_info = dsa_slave_get_ts_info,
1881 .self_test = dsa_slave_net_selftest,
1882};
1883
1973static const struct ethtool_ops dsa_slave_ethtool_ops = {
1974 .get_drvinfo = dsa_slave_get_drvinfo,
1975 .get_regs_len = dsa_slave_get_regs_len,
1976 .get_regs = dsa_slave_get_regs,
1977 .nway_reset = dsa_slave_nway_reset,
1978 .get_link = ethtool_op_get_link,
1979 .get_eeprom_len = dsa_slave_get_eeprom_len,
1980 .get_eeprom = dsa_slave_get_eeprom,

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

1994 .get_pauseparam = dsa_slave_get_pauseparam,
1995 .set_pauseparam = dsa_slave_set_pauseparam,
1996 .get_rxnfc = dsa_slave_get_rxnfc,
1997 .set_rxnfc = dsa_slave_set_rxnfc,
1998 .get_ts_info = dsa_slave_get_ts_info,
1999 .self_test = dsa_slave_net_selftest,
2000};
2001
2002static const struct dcbnl_rtnl_ops __maybe_unused dsa_slave_dcbnl_ops = {
2003 .ieee_setapp = dsa_slave_dcbnl_ieee_setapp,
2004 .ieee_delapp = dsa_slave_dcbnl_ieee_delapp,
2005};
2006
1884static struct devlink_port *dsa_slave_get_devlink_port(struct net_device *dev)
1885{
1886 struct dsa_port *dp = dsa_slave_to_port(dev);
1887
1888 return &dp->devlink_port;
1889}
1890
1891static void dsa_slave_get_stats64(struct net_device *dev,

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

2100
2101 slave_dev = alloc_netdev_mqs(sizeof(struct dsa_slave_priv), name,
2102 NET_NAME_UNKNOWN, ether_setup,
2103 ds->num_tx_queues, 1);
2104 if (slave_dev == NULL)
2105 return -ENOMEM;
2106
2107 slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
2007static struct devlink_port *dsa_slave_get_devlink_port(struct net_device *dev)
2008{
2009 struct dsa_port *dp = dsa_slave_to_port(dev);
2010
2011 return &dp->devlink_port;
2012}
2013
2014static void dsa_slave_get_stats64(struct net_device *dev,

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

2223
2224 slave_dev = alloc_netdev_mqs(sizeof(struct dsa_slave_priv), name,
2225 NET_NAME_UNKNOWN, ether_setup,
2226 ds->num_tx_queues, 1);
2227 if (slave_dev == NULL)
2228 return -ENOMEM;
2229
2230 slave_dev->ethtool_ops = &dsa_slave_ethtool_ops;
2231#if IS_ENABLED(CONFIG_DCB)
2232 slave_dev->dcbnl_ops = &dsa_slave_dcbnl_ops;
2233#endif
2108 if (!is_zero_ether_addr(port->mac))
2109 eth_hw_addr_set(slave_dev, port->mac);
2110 else
2111 eth_hw_addr_inherit(slave_dev, master);
2112 slave_dev->priv_flags |= IFF_NO_QUEUE;
2113 if (dsa_switch_supports_uc_filtering(ds))
2114 slave_dev->priv_flags |= IFF_UNICAST_FLT;
2115 slave_dev->netdev_ops = &dsa_slave_netdev_ops;

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

2157 ret = register_netdevice(slave_dev);
2158 if (ret) {
2159 netdev_err(master, "error %d registering interface %s\n",
2160 ret, slave_dev->name);
2161 rtnl_unlock();
2162 goto out_phy;
2163 }
2164
2234 if (!is_zero_ether_addr(port->mac))
2235 eth_hw_addr_set(slave_dev, port->mac);
2236 else
2237 eth_hw_addr_inherit(slave_dev, master);
2238 slave_dev->priv_flags |= IFF_NO_QUEUE;
2239 if (dsa_switch_supports_uc_filtering(ds))
2240 slave_dev->priv_flags |= IFF_UNICAST_FLT;
2241 slave_dev->netdev_ops = &dsa_slave_netdev_ops;

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

2283 ret = register_netdevice(slave_dev);
2284 if (ret) {
2285 netdev_err(master, "error %d registering interface %s\n",
2286 ret, slave_dev->name);
2287 rtnl_unlock();
2288 goto out_phy;
2289 }
2290
2291 if (IS_ENABLED(CONFIG_DCB)) {
2292 ret = dsa_slave_dcbnl_init(slave_dev);
2293 if (ret) {
2294 netdev_err(slave_dev,
2295 "failed to initialize DCB: %pe\n",
2296 ERR_PTR(ret));
2297 rtnl_unlock();
2298 goto out_unregister;
2299 }
2300 }
2301
2165 ret = netdev_upper_dev_link(master, slave_dev, NULL);
2166
2167 rtnl_unlock();
2168
2169 if (ret)
2170 goto out_unregister;
2171
2172 return 0;

--- 620 unchanged lines hidden ---
2302 ret = netdev_upper_dev_link(master, slave_dev, NULL);
2303
2304 rtnl_unlock();
2305
2306 if (ret)
2307 goto out_unregister;
2308
2309 return 0;

--- 620 unchanged lines hidden ---