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 --- |