Lines Matching +full:vp +full:- +full:p

1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (C) 2016-2017 Oracle. All rights reserved.
37 * and dev->tx_timeout() should be called to fix the problem
63 strscpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); in vnet_get_drvinfo()
64 strscpy(info->version, DRV_MODULE_VERSION, sizeof(info->version)); in vnet_get_drvinfo()
69 struct vnet *vp = netdev_priv(dev); in vnet_get_msglevel() local
71 return vp->msg_enable; in vnet_get_msglevel()
76 struct vnet *vp = netdev_priv(dev); in vnet_set_msglevel() local
78 vp->msg_enable = value; in vnet_set_msglevel()
102 struct vnet *vp = (struct vnet *)netdev_priv(dev); in vnet_get_sset_count() local
107 + (NUM_VNET_PORT_STATS * vp->nports); in vnet_get_sset_count()
109 return -EOPNOTSUPP; in vnet_get_sset_count()
115 struct vnet *vp = (struct vnet *)netdev_priv(dev); in vnet_get_strings() local
124 list_for_each_entry_rcu(port, &vp->port_list, list) { in vnet_get_strings()
125 ethtool_sprintf(&buf, "p%u.%s-%pM", port->q_index, in vnet_get_strings()
126 port->switch_port ? "s" : "q", in vnet_get_strings()
127 port->raddr); in vnet_get_strings()
128 ethtool_sprintf(&buf, "p%u.rx_packets", port->q_index); in vnet_get_strings()
129 ethtool_sprintf(&buf, "p%u.tx_packets", port->q_index); in vnet_get_strings()
130 ethtool_sprintf(&buf, "p%u.rx_bytes", port->q_index); in vnet_get_strings()
131 ethtool_sprintf(&buf, "p%u.tx_bytes", port->q_index); in vnet_get_strings()
132 ethtool_sprintf(&buf, "p%u.event_up", port->q_index); in vnet_get_strings()
133 ethtool_sprintf(&buf, "p%u.event_reset", port->q_index); in vnet_get_strings()
146 struct vnet *vp = (struct vnet *)netdev_priv(dev); in vnet_get_ethtool_stats() local
150 data[i++] = dev->stats.rx_packets; in vnet_get_ethtool_stats()
151 data[i++] = dev->stats.tx_packets; in vnet_get_ethtool_stats()
152 data[i++] = dev->stats.rx_bytes; in vnet_get_ethtool_stats()
153 data[i++] = dev->stats.tx_bytes; in vnet_get_ethtool_stats()
154 data[i++] = dev->stats.rx_errors; in vnet_get_ethtool_stats()
155 data[i++] = dev->stats.tx_errors; in vnet_get_ethtool_stats()
156 data[i++] = dev->stats.rx_dropped; in vnet_get_ethtool_stats()
157 data[i++] = dev->stats.tx_dropped; in vnet_get_ethtool_stats()
158 data[i++] = dev->stats.multicast; in vnet_get_ethtool_stats()
159 data[i++] = dev->stats.rx_length_errors; in vnet_get_ethtool_stats()
160 data[i++] = dev->stats.rx_frame_errors; in vnet_get_ethtool_stats()
161 data[i++] = dev->stats.rx_missed_errors; in vnet_get_ethtool_stats()
162 data[i++] = dev->stats.tx_carrier_errors; in vnet_get_ethtool_stats()
163 data[i++] = vp->nports; in vnet_get_ethtool_stats()
166 list_for_each_entry_rcu(port, &vp->port_list, list) { in vnet_get_ethtool_stats()
167 data[i++] = port->q_index; in vnet_get_ethtool_stats()
168 data[i++] = port->stats.rx_packets; in vnet_get_ethtool_stats()
169 data[i++] = port->stats.tx_packets; in vnet_get_ethtool_stats()
170 data[i++] = port->stats.rx_bytes; in vnet_get_ethtool_stats()
171 data[i++] = port->stats.tx_bytes; in vnet_get_ethtool_stats()
172 data[i++] = port->stats.event_up; in vnet_get_ethtool_stats()
173 data[i++] = port->stats.event_reset; in vnet_get_ethtool_stats()
191 static struct vnet_port *__tx_port_find(struct vnet *vp, struct sk_buff *skb) in __tx_port_find() argument
193 unsigned int hash = vnet_hashfn(skb->data); in __tx_port_find()
194 struct hlist_head *hp = &vp->port_hash[hash]; in __tx_port_find()
200 if (ether_addr_equal(port->raddr, skb->data)) in __tx_port_find()
203 list_for_each_entry_rcu(port, &vp->port_list, list) { in __tx_port_find()
204 if (!port->switch_port) in __tx_port_find()
217 struct vnet *vp = netdev_priv(dev); in vnet_tx_port_find() local
219 return __tx_port_find(vp, skb); in vnet_tx_port_find()
225 struct vnet *vp = netdev_priv(dev); in vnet_select_queue() local
226 struct vnet_port *port = __tx_port_find(vp, skb); in vnet_select_queue()
231 return port->q_index; in vnet_select_queue()
242 struct vnet *vp = netdev_priv(dev); in vnet_set_rx_mode() local
244 return sunvnet_set_rx_mode_common(dev, vp); in vnet_set_rx_mode()
250 struct vnet *vp = netdev_priv(dev); in vnet_poll_controller() local
252 return sunvnet_poll_controller_common(dev, vp); in vnet_poll_controller()
275 struct vnet *vp; in vnet_new() local
278 dev = alloc_etherdev_mqs(sizeof(*vp), VNET_MAX_TXQS, 1); in vnet_new()
280 return ERR_PTR(-ENOMEM); in vnet_new()
281 dev->needed_headroom = VNET_PACKET_SKIP + 8; in vnet_new()
282 dev->needed_tailroom = 8; in vnet_new()
285 addr[i] = (*local_mac >> (5 - i) * 8) & 0xff; in vnet_new()
288 vp = netdev_priv(dev); in vnet_new()
290 spin_lock_init(&vp->lock); in vnet_new()
291 vp->dev = dev; in vnet_new()
293 INIT_LIST_HEAD(&vp->port_list); in vnet_new()
295 INIT_HLIST_HEAD(&vp->port_hash[i]); in vnet_new()
296 INIT_LIST_HEAD(&vp->list); in vnet_new()
297 vp->local_mac = *local_mac; in vnet_new()
299 dev->netdev_ops = &vnet_ops; in vnet_new()
300 dev->ethtool_ops = &vnet_ethtool_ops; in vnet_new()
301 dev->watchdog_timeo = VNET_TX_TIMEOUT; in vnet_new()
303 dev->hw_features = NETIF_F_TSO | NETIF_F_GSO | NETIF_F_ALL_TSO | in vnet_new()
305 dev->features = dev->hw_features; in vnet_new()
307 /* MTU range: 68 - 65535 */ in vnet_new()
308 dev->min_mtu = ETH_MIN_MTU; in vnet_new()
309 dev->max_mtu = VNET_MAX_MTU; in vnet_new()
311 SET_NETDEV_DEV(dev, &vdev->dev); in vnet_new()
319 netdev_info(dev, "Sun LDOM vnet %pM\n", dev->dev_addr); in vnet_new()
321 list_add(&vp->list, &vnet_list); in vnet_new()
323 return vp; in vnet_new()
334 struct vnet *iter, *vp; in vnet_find_or_create() local
337 vp = NULL; in vnet_find_or_create()
339 if (iter->local_mac == *local_mac) { in vnet_find_or_create()
340 vp = iter; in vnet_find_or_create()
344 if (!vp) in vnet_find_or_create()
345 vp = vnet_new(local_mac, vdev); in vnet_find_or_create()
348 return vp; in vnet_find_or_create()
353 struct vnet *vp; in vnet_cleanup() local
358 vp = list_first_entry(&vnet_list, struct vnet, list); in vnet_cleanup()
359 list_del(&vp->list); in vnet_cleanup()
360 dev = vp->dev; in vnet_cleanup()
362 BUG_ON(!list_empty(&vp->port_list)); in vnet_cleanup()
369 static const char *local_mac_prop = "local-mac-address";
392 return ERR_PTR(-ENODEV); in vnet_find_parent()
409 const char *remote_macaddr_prop = "remote-mac-address";
416 struct vnet *vp; in vnet_port_probe() local
423 return -ENODEV; in vnet_port_probe()
425 vp = vnet_find_parent(hp, vdev->mp, vdev); in vnet_port_probe()
426 if (IS_ERR(vp)) { in vnet_port_probe()
428 err = PTR_ERR(vp); in vnet_port_probe()
432 rmac = mdesc_get_property(hp, vdev->mp, remote_macaddr_prop, &len); in vnet_port_probe()
433 err = -ENODEV; in vnet_port_probe()
440 err = -ENOMEM; in vnet_port_probe()
445 port->raddr[i] = (*rmac >> (5 - i) * 8) & 0xff; in vnet_port_probe()
447 port->vp = vp; in vnet_port_probe()
449 err = vio_driver_init(&port->vio, vdev, VDEV_NETWORK, in vnet_port_probe()
451 &vnet_vio_ops, vp->dev->name); in vnet_port_probe()
455 err = vio_ldc_alloc(&port->vio, &vnet_ldc_cfg, port); in vnet_port_probe()
459 netif_napi_add(port->vp->dev, &port->napi, sunvnet_poll_common); in vnet_port_probe()
461 INIT_HLIST_NODE(&port->hash); in vnet_port_probe()
462 INIT_LIST_HEAD(&port->list); in vnet_port_probe()
465 if (mdesc_get_property(hp, vdev->mp, "switch-port", NULL)) in vnet_port_probe()
467 port->switch_port = switch_port; in vnet_port_probe()
468 port->tso = true; in vnet_port_probe()
469 port->tsolen = 0; in vnet_port_probe()
471 spin_lock_irqsave(&vp->lock, flags); in vnet_port_probe()
473 list_add_rcu(&port->list, &vp->port_list); in vnet_port_probe()
475 list_add_tail_rcu(&port->list, &vp->port_list); in vnet_port_probe()
476 hlist_add_head_rcu(&port->hash, in vnet_port_probe()
477 &vp->port_hash[vnet_hashfn(port->raddr)]); in vnet_port_probe()
479 spin_unlock_irqrestore(&vp->lock, flags); in vnet_port_probe()
481 dev_set_drvdata(&vdev->dev, port); in vnet_port_probe()
483 pr_info("%s: PORT ( remote-mac %pM%s )\n", in vnet_port_probe()
484 vp->dev->name, port->raddr, switch_port ? " switch-port" : ""); in vnet_port_probe()
486 timer_setup(&port->clean_timer, sunvnet_clean_timer_expire_common, 0); in vnet_port_probe()
488 napi_enable(&port->napi); in vnet_port_probe()
489 vio_port_up(&port->vio); in vnet_port_probe()
505 struct vnet_port *port = dev_get_drvdata(&vdev->dev); in vnet_port_remove()
508 del_timer_sync(&port->vio.timer); in vnet_port_remove()
510 napi_disable(&port->napi); in vnet_port_remove()
512 list_del_rcu(&port->list); in vnet_port_remove()
513 hlist_del_rcu(&port->hash); in vnet_port_remove()
516 timer_shutdown_sync(&port->clean_timer); in vnet_port_remove()
518 netif_napi_del(&port->napi); in vnet_port_remove()
520 vio_ldc_free(&port->vio); in vnet_port_remove()
522 dev_set_drvdata(&vdev->dev, NULL); in vnet_port_remove()
530 .type = "vnet-port",