• Home
  • Raw
  • Download

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 strlcpy(info->driver, DRV_MODULE_NAME, sizeof(info->driver)); in vnet_get_drvinfo()
64 strlcpy(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
117 char *p = (char *)buf; in vnet_get_strings() local
122 p += sizeof(ethtool_stats_keys); in vnet_get_strings()
125 list_for_each_entry_rcu(port, &vp->port_list, list) { in vnet_get_strings()
126 snprintf(p, ETH_GSTRING_LEN, "p%u.%s-%pM", in vnet_get_strings()
127 port->q_index, port->switch_port ? "s" : "q", in vnet_get_strings()
128 port->raddr); in vnet_get_strings()
129 p += ETH_GSTRING_LEN; in vnet_get_strings()
130 snprintf(p, ETH_GSTRING_LEN, "p%u.rx_packets", in vnet_get_strings()
131 port->q_index); in vnet_get_strings()
132 p += ETH_GSTRING_LEN; in vnet_get_strings()
133 snprintf(p, ETH_GSTRING_LEN, "p%u.tx_packets", in vnet_get_strings()
134 port->q_index); in vnet_get_strings()
135 p += ETH_GSTRING_LEN; in vnet_get_strings()
136 snprintf(p, ETH_GSTRING_LEN, "p%u.rx_bytes", in vnet_get_strings()
137 port->q_index); in vnet_get_strings()
138 p += ETH_GSTRING_LEN; in vnet_get_strings()
139 snprintf(p, ETH_GSTRING_LEN, "p%u.tx_bytes", in vnet_get_strings()
140 port->q_index); in vnet_get_strings()
141 p += ETH_GSTRING_LEN; in vnet_get_strings()
142 snprintf(p, ETH_GSTRING_LEN, "p%u.event_up", in vnet_get_strings()
143 port->q_index); in vnet_get_strings()
144 p += ETH_GSTRING_LEN; in vnet_get_strings()
145 snprintf(p, ETH_GSTRING_LEN, "p%u.event_reset", in vnet_get_strings()
146 port->q_index); in vnet_get_strings()
147 p += ETH_GSTRING_LEN; in vnet_get_strings()
160 struct vnet *vp = (struct vnet *)netdev_priv(dev); in vnet_get_ethtool_stats() local
164 data[i++] = dev->stats.rx_packets; in vnet_get_ethtool_stats()
165 data[i++] = dev->stats.tx_packets; in vnet_get_ethtool_stats()
166 data[i++] = dev->stats.rx_bytes; in vnet_get_ethtool_stats()
167 data[i++] = dev->stats.tx_bytes; in vnet_get_ethtool_stats()
168 data[i++] = dev->stats.rx_errors; in vnet_get_ethtool_stats()
169 data[i++] = dev->stats.tx_errors; in vnet_get_ethtool_stats()
170 data[i++] = dev->stats.rx_dropped; in vnet_get_ethtool_stats()
171 data[i++] = dev->stats.tx_dropped; in vnet_get_ethtool_stats()
172 data[i++] = dev->stats.multicast; in vnet_get_ethtool_stats()
173 data[i++] = dev->stats.rx_length_errors; in vnet_get_ethtool_stats()
174 data[i++] = dev->stats.rx_frame_errors; in vnet_get_ethtool_stats()
175 data[i++] = dev->stats.rx_missed_errors; in vnet_get_ethtool_stats()
176 data[i++] = dev->stats.tx_carrier_errors; in vnet_get_ethtool_stats()
177 data[i++] = vp->nports; in vnet_get_ethtool_stats()
180 list_for_each_entry_rcu(port, &vp->port_list, list) { in vnet_get_ethtool_stats()
181 data[i++] = port->q_index; in vnet_get_ethtool_stats()
182 data[i++] = port->stats.rx_packets; in vnet_get_ethtool_stats()
183 data[i++] = port->stats.tx_packets; in vnet_get_ethtool_stats()
184 data[i++] = port->stats.rx_bytes; in vnet_get_ethtool_stats()
185 data[i++] = port->stats.tx_bytes; in vnet_get_ethtool_stats()
186 data[i++] = port->stats.event_up; in vnet_get_ethtool_stats()
187 data[i++] = port->stats.event_reset; in vnet_get_ethtool_stats()
205 static struct vnet_port *__tx_port_find(struct vnet *vp, struct sk_buff *skb) in __tx_port_find() argument
207 unsigned int hash = vnet_hashfn(skb->data); in __tx_port_find()
208 struct hlist_head *hp = &vp->port_hash[hash]; in __tx_port_find()
214 if (ether_addr_equal(port->raddr, skb->data)) in __tx_port_find()
217 list_for_each_entry_rcu(port, &vp->port_list, list) { in __tx_port_find()
218 if (!port->switch_port) in __tx_port_find()
231 struct vnet *vp = netdev_priv(dev); in vnet_tx_port_find() local
233 return __tx_port_find(vp, skb); in vnet_tx_port_find()
239 struct vnet *vp = netdev_priv(dev); in vnet_select_queue() local
240 struct vnet_port *port = __tx_port_find(vp, skb); in vnet_select_queue()
245 return port->q_index; in vnet_select_queue()
256 struct vnet *vp = netdev_priv(dev); in vnet_set_rx_mode() local
258 return sunvnet_set_rx_mode_common(dev, vp); in vnet_set_rx_mode()
264 struct vnet *vp = netdev_priv(dev); in vnet_poll_controller() local
266 return sunvnet_poll_controller_common(dev, vp); in vnet_poll_controller()
288 struct vnet *vp; in vnet_new() local
291 dev = alloc_etherdev_mqs(sizeof(*vp), VNET_MAX_TXQS, 1); in vnet_new()
293 return ERR_PTR(-ENOMEM); in vnet_new()
294 dev->needed_headroom = VNET_PACKET_SKIP + 8; in vnet_new()
295 dev->needed_tailroom = 8; in vnet_new()
298 dev->dev_addr[i] = (*local_mac >> (5 - i) * 8) & 0xff; in vnet_new()
300 vp = netdev_priv(dev); in vnet_new()
302 spin_lock_init(&vp->lock); in vnet_new()
303 vp->dev = dev; in vnet_new()
305 INIT_LIST_HEAD(&vp->port_list); in vnet_new()
307 INIT_HLIST_HEAD(&vp->port_hash[i]); in vnet_new()
308 INIT_LIST_HEAD(&vp->list); in vnet_new()
309 vp->local_mac = *local_mac; in vnet_new()
311 dev->netdev_ops = &vnet_ops; in vnet_new()
312 dev->ethtool_ops = &vnet_ethtool_ops; in vnet_new()
313 dev->watchdog_timeo = VNET_TX_TIMEOUT; in vnet_new()
315 dev->hw_features = NETIF_F_TSO | NETIF_F_GSO | NETIF_F_ALL_TSO | in vnet_new()
317 dev->features = dev->hw_features; in vnet_new()
319 /* MTU range: 68 - 65535 */ in vnet_new()
320 dev->min_mtu = ETH_MIN_MTU; in vnet_new()
321 dev->max_mtu = VNET_MAX_MTU; in vnet_new()
323 SET_NETDEV_DEV(dev, &vdev->dev); in vnet_new()
331 netdev_info(dev, "Sun LDOM vnet %pM\n", dev->dev_addr); in vnet_new()
333 list_add(&vp->list, &vnet_list); in vnet_new()
335 return vp; in vnet_new()
346 struct vnet *iter, *vp; in vnet_find_or_create() local
349 vp = NULL; in vnet_find_or_create()
351 if (iter->local_mac == *local_mac) { in vnet_find_or_create()
352 vp = iter; in vnet_find_or_create()
356 if (!vp) in vnet_find_or_create()
357 vp = vnet_new(local_mac, vdev); in vnet_find_or_create()
360 return vp; in vnet_find_or_create()
365 struct vnet *vp; in vnet_cleanup() local
370 vp = list_first_entry(&vnet_list, struct vnet, list); in vnet_cleanup()
371 list_del(&vp->list); in vnet_cleanup()
372 dev = vp->dev; in vnet_cleanup()
374 BUG_ON(!list_empty(&vp->port_list)); in vnet_cleanup()
381 static const char *local_mac_prop = "local-mac-address";
404 return ERR_PTR(-ENODEV); in vnet_find_parent()
421 const char *remote_macaddr_prop = "remote-mac-address";
428 struct vnet *vp; in vnet_port_probe() local
435 return -ENODEV; in vnet_port_probe()
437 vp = vnet_find_parent(hp, vdev->mp, vdev); in vnet_port_probe()
438 if (IS_ERR(vp)) { in vnet_port_probe()
440 err = PTR_ERR(vp); in vnet_port_probe()
444 rmac = mdesc_get_property(hp, vdev->mp, remote_macaddr_prop, &len); in vnet_port_probe()
445 err = -ENODEV; in vnet_port_probe()
452 err = -ENOMEM; in vnet_port_probe()
457 port->raddr[i] = (*rmac >> (5 - i) * 8) & 0xff; in vnet_port_probe()
459 port->vp = vp; in vnet_port_probe()
461 err = vio_driver_init(&port->vio, vdev, VDEV_NETWORK, in vnet_port_probe()
463 &vnet_vio_ops, vp->dev->name); in vnet_port_probe()
467 err = vio_ldc_alloc(&port->vio, &vnet_ldc_cfg, port); in vnet_port_probe()
471 netif_napi_add(port->vp->dev, &port->napi, sunvnet_poll_common, in vnet_port_probe()
474 INIT_HLIST_NODE(&port->hash); in vnet_port_probe()
475 INIT_LIST_HEAD(&port->list); in vnet_port_probe()
478 if (mdesc_get_property(hp, vdev->mp, "switch-port", NULL)) in vnet_port_probe()
480 port->switch_port = switch_port; in vnet_port_probe()
481 port->tso = true; in vnet_port_probe()
482 port->tsolen = 0; in vnet_port_probe()
484 spin_lock_irqsave(&vp->lock, flags); in vnet_port_probe()
486 list_add_rcu(&port->list, &vp->port_list); in vnet_port_probe()
488 list_add_tail_rcu(&port->list, &vp->port_list); in vnet_port_probe()
489 hlist_add_head_rcu(&port->hash, in vnet_port_probe()
490 &vp->port_hash[vnet_hashfn(port->raddr)]); in vnet_port_probe()
492 spin_unlock_irqrestore(&vp->lock, flags); in vnet_port_probe()
494 dev_set_drvdata(&vdev->dev, port); in vnet_port_probe()
496 pr_info("%s: PORT ( remote-mac %pM%s )\n", in vnet_port_probe()
497 vp->dev->name, port->raddr, switch_port ? " switch-port" : ""); in vnet_port_probe()
499 timer_setup(&port->clean_timer, sunvnet_clean_timer_expire_common, 0); in vnet_port_probe()
501 napi_enable(&port->napi); in vnet_port_probe()
502 vio_port_up(&port->vio); in vnet_port_probe()
518 struct vnet_port *port = dev_get_drvdata(&vdev->dev); in vnet_port_remove()
521 del_timer_sync(&port->vio.timer); in vnet_port_remove()
523 napi_disable(&port->napi); in vnet_port_remove()
525 list_del_rcu(&port->list); in vnet_port_remove()
526 hlist_del_rcu(&port->hash); in vnet_port_remove()
529 del_timer_sync(&port->clean_timer); in vnet_port_remove()
531 netif_napi_del(&port->napi); in vnet_port_remove()
533 vio_ldc_free(&port->vio); in vnet_port_remove()
535 dev_set_drvdata(&vdev->dev, NULL); in vnet_port_remove()
544 .type = "vnet-port",