Lines Matching +full:ps +full:- +full:speed
1 // SPDX-License-Identifier: GPL-2.0-or-later
37 struct dsa_loop_priv *ps = priv; in dsa_loop_devlink_vtu_get() local
41 for (i = 0; i < ARRAY_SIZE(ps->vlans); i++) { in dsa_loop_devlink_vtu_get()
42 vl = &ps->vlans[i]; in dsa_loop_devlink_vtu_get()
43 if (vl->members) in dsa_loop_devlink_vtu_get()
53 struct dsa_loop_priv *ps = ds->priv; in dsa_loop_setup_devlink_resources() local
56 devlink_resource_size_params_init(&size_params, ARRAY_SIZE(ps->vlans), in dsa_loop_setup_devlink_resources()
57 ARRAY_SIZE(ps->vlans), in dsa_loop_setup_devlink_resources()
60 err = dsa_devlink_resource_register(ds, "VTU", ARRAY_SIZE(ps->vlans), in dsa_loop_setup_devlink_resources()
69 dsa_loop_devlink_vtu_get, ps); in dsa_loop_setup_devlink_resources()
82 dev_dbg(ds->dev, "%s: port: %d\n", __func__, port); in dsa_loop_get_protocol()
89 struct dsa_loop_priv *ps = ds->priv; in dsa_loop_setup() local
92 for (i = 0; i < ds->num_ports; i++) in dsa_loop_setup()
93 memcpy(ps->ports[i].mib, dsa_loop_mibs, in dsa_loop_setup()
96 dev_dbg(ds->dev, "%s\n", __func__); in dsa_loop_setup()
117 struct dsa_loop_priv *ps = ds->priv; in dsa_loop_get_strings() local
125 ps->ports[port].mib[i].name, ETH_GSTRING_LEN); in dsa_loop_get_strings()
131 struct dsa_loop_priv *ps = ds->priv; in dsa_loop_get_ethtool_stats() local
135 data[i] = ps->ports[port].mib[i].val; in dsa_loop_get_ethtool_stats()
140 struct dsa_loop_priv *ps = ds->priv; in dsa_loop_phy_read() local
141 struct mii_bus *bus = ps->bus; in dsa_loop_phy_read()
144 ret = mdiobus_read_nested(bus, ps->port_base + port, regnum); in dsa_loop_phy_read()
146 ps->ports[port].mib[DSA_LOOP_PHY_READ_ERR].val++; in dsa_loop_phy_read()
148 ps->ports[port].mib[DSA_LOOP_PHY_READ_OK].val++; in dsa_loop_phy_read()
156 struct dsa_loop_priv *ps = ds->priv; in dsa_loop_phy_write() local
157 struct mii_bus *bus = ps->bus; in dsa_loop_phy_write()
160 ret = mdiobus_write_nested(bus, ps->port_base + port, regnum, value); in dsa_loop_phy_write()
162 ps->ports[port].mib[DSA_LOOP_PHY_WRITE_ERR].val++; in dsa_loop_phy_write()
164 ps->ports[port].mib[DSA_LOOP_PHY_WRITE_OK].val++; in dsa_loop_phy_write()
172 dev_dbg(ds->dev, "%s: port: %d, bridge: %s\n", in dsa_loop_port_bridge_join()
173 __func__, port, bridge->name); in dsa_loop_port_bridge_join()
181 dev_dbg(ds->dev, "%s: port: %d, bridge: %s\n", in dsa_loop_port_bridge_leave()
182 __func__, port, bridge->name); in dsa_loop_port_bridge_leave()
188 dev_dbg(ds->dev, "%s: port: %d, state: %d\n", in dsa_loop_port_stp_state_set()
196 dev_dbg(ds->dev, "%s: port: %d, vlan_filtering: %d\n", in dsa_loop_port_vlan_filtering()
206 struct dsa_loop_priv *ps = ds->priv; in dsa_loop_port_vlan_prepare() local
207 struct mii_bus *bus = ps->bus; in dsa_loop_port_vlan_prepare()
209 dev_dbg(ds->dev, "%s: port: %d, vlan: %d-%d", in dsa_loop_port_vlan_prepare()
210 __func__, port, vlan->vid_begin, vlan->vid_end); in dsa_loop_port_vlan_prepare()
213 mdiobus_read(bus, ps->port_base + port, MII_BMSR); in dsa_loop_port_vlan_prepare()
215 if (vlan->vid_end > ARRAY_SIZE(ps->vlans)) in dsa_loop_port_vlan_prepare()
216 return -ERANGE; in dsa_loop_port_vlan_prepare()
224 bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED; in dsa_loop_port_vlan_add()
225 bool pvid = vlan->flags & BRIDGE_VLAN_INFO_PVID; in dsa_loop_port_vlan_add()
226 struct dsa_loop_priv *ps = ds->priv; in dsa_loop_port_vlan_add() local
227 struct mii_bus *bus = ps->bus; in dsa_loop_port_vlan_add()
232 mdiobus_read(bus, ps->port_base + port, MII_BMSR); in dsa_loop_port_vlan_add()
234 for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) { in dsa_loop_port_vlan_add()
235 vl = &ps->vlans[vid]; in dsa_loop_port_vlan_add()
237 vl->members |= BIT(port); in dsa_loop_port_vlan_add()
239 vl->untagged |= BIT(port); in dsa_loop_port_vlan_add()
241 vl->untagged &= ~BIT(port); in dsa_loop_port_vlan_add()
243 dev_dbg(ds->dev, "%s: port: %d vlan: %d, %stagged, pvid: %d\n", in dsa_loop_port_vlan_add()
248 ps->ports[port].pvid = vid; in dsa_loop_port_vlan_add()
254 bool untagged = vlan->flags & BRIDGE_VLAN_INFO_UNTAGGED; in dsa_loop_port_vlan_del()
255 struct dsa_loop_priv *ps = ds->priv; in dsa_loop_port_vlan_del() local
256 struct mii_bus *bus = ps->bus; in dsa_loop_port_vlan_del()
258 u16 vid, pvid = ps->ports[port].pvid; in dsa_loop_port_vlan_del()
261 mdiobus_read(bus, ps->port_base + port, MII_BMSR); in dsa_loop_port_vlan_del()
263 for (vid = vlan->vid_begin; vid <= vlan->vid_end; ++vid) { in dsa_loop_port_vlan_del()
264 vl = &ps->vlans[vid]; in dsa_loop_port_vlan_del()
266 vl->members &= ~BIT(port); in dsa_loop_port_vlan_del()
268 vl->untagged &= ~BIT(port); in dsa_loop_port_vlan_del()
273 dev_dbg(ds->dev, "%s: port: %d vlan: %d, %stagged, pvid: %d\n", in dsa_loop_port_vlan_del()
276 ps->ports[port].pvid = pvid; in dsa_loop_port_vlan_del()
284 struct dsa_loop_priv *priv = ds->priv; in dsa_loop_port_change_mtu()
286 priv->ports[port].mtu = new_mtu; in dsa_loop_port_change_mtu()
319 struct dsa_loop_pdata *pdata = mdiodev->dev.platform_data; in dsa_loop_drv_probe()
320 struct dsa_loop_priv *ps; in dsa_loop_drv_probe() local
325 return -ENODEV; in dsa_loop_drv_probe()
327 ds = devm_kzalloc(&mdiodev->dev, sizeof(*ds), GFP_KERNEL); in dsa_loop_drv_probe()
329 return -ENOMEM; in dsa_loop_drv_probe()
331 ds->dev = &mdiodev->dev; in dsa_loop_drv_probe()
332 ds->num_ports = DSA_LOOP_NUM_PORTS; in dsa_loop_drv_probe()
334 ps = devm_kzalloc(&mdiodev->dev, sizeof(*ps), GFP_KERNEL); in dsa_loop_drv_probe()
335 if (!ps) in dsa_loop_drv_probe()
336 return -ENOMEM; in dsa_loop_drv_probe()
338 ps->netdev = dev_get_by_name(&init_net, pdata->netdev); in dsa_loop_drv_probe()
339 if (!ps->netdev) in dsa_loop_drv_probe()
340 return -EPROBE_DEFER; in dsa_loop_drv_probe()
342 pdata->cd.netdev[DSA_LOOP_CPU_PORT] = &ps->netdev->dev; in dsa_loop_drv_probe()
344 ds->dev = &mdiodev->dev; in dsa_loop_drv_probe()
345 ds->ops = &dsa_loop_driver; in dsa_loop_drv_probe()
346 ds->priv = ps; in dsa_loop_drv_probe()
347 ds->configure_vlan_while_not_filtering = true; in dsa_loop_drv_probe()
348 ps->bus = mdiodev->bus; in dsa_loop_drv_probe()
350 dev_set_drvdata(&mdiodev->dev, ds); in dsa_loop_drv_probe()
354 dev_info(&mdiodev->dev, "%s: 0x%0x\n", in dsa_loop_drv_probe()
355 pdata->name, pdata->enabled_ports); in dsa_loop_drv_probe()
362 struct dsa_switch *ds = dev_get_drvdata(&mdiodev->dev); in dsa_loop_drv_remove()
363 struct dsa_loop_priv *ps = ds->priv; in dsa_loop_drv_remove() local
366 dev_put(ps->netdev); in dsa_loop_drv_remove()
371 .name = "dsa-loop",
377 #define NUM_FIXED_PHYS (DSA_LOOP_NUM_PORTS - 2)
383 .speed = SPEED_100, in dsa_loop_init()