Lines Matching +full:cfg +full:- +full:space
1 // SPDX-License-Identifier: GPL-2.0
26 * match. --pb
31 ifr->ifr_name[IFNAMSIZ-1] = 0; in dev_ifname()
32 return netdev_get_name(net, ifr->ifr_name, ifr->ifr_ifindex); in dev_ifname()
52 return -EFAULT; in dev_ifconf()
61 return -EFAULT; in dev_ifconf()
75 len - total, size); in dev_ifconf()
78 return -EFAULT; in dev_ifconf()
84 return put_user(total, &uifc->ifc_len); in dev_ifconf()
89 struct ifmap *ifmap = &ifr->ifr_map; in dev_getifmap()
94 cifmap->mem_start = dev->mem_start; in dev_getifmap()
95 cifmap->mem_end = dev->mem_end; in dev_getifmap()
96 cifmap->base_addr = dev->base_addr; in dev_getifmap()
97 cifmap->irq = dev->irq; in dev_getifmap()
98 cifmap->dma = dev->dma; in dev_getifmap()
99 cifmap->port = dev->if_port; in dev_getifmap()
104 ifmap->mem_start = dev->mem_start; in dev_getifmap()
105 ifmap->mem_end = dev->mem_end; in dev_getifmap()
106 ifmap->base_addr = dev->base_addr; in dev_getifmap()
107 ifmap->irq = dev->irq; in dev_getifmap()
108 ifmap->dma = dev->dma; in dev_getifmap()
109 ifmap->port = dev->if_port; in dev_getifmap()
116 struct compat_ifmap *cifmap = (struct compat_ifmap *)&ifr->ifr_map; in netif_setifmap()
118 if (!dev->netdev_ops->ndo_set_config) in netif_setifmap()
119 return -EOPNOTSUPP; in netif_setifmap()
123 .mem_start = cifmap->mem_start, in netif_setifmap()
124 .mem_end = cifmap->mem_end, in netif_setifmap()
125 .base_addr = cifmap->base_addr, in netif_setifmap()
126 .irq = cifmap->irq, in netif_setifmap()
127 .dma = cifmap->dma, in netif_setifmap()
128 .port = cifmap->port, in netif_setifmap()
131 return dev->netdev_ops->ndo_set_config(dev, &ifmap); in netif_setifmap()
134 return dev->netdev_ops->ndo_set_config(dev, &ifr->ifr_map); in netif_setifmap()
143 struct net_device *dev = dev_get_by_name_rcu(net, ifr->ifr_name); in dev_ifsioc_locked()
146 return -ENODEV; in dev_ifsioc_locked()
150 ifr->ifr_flags = (short)netif_get_flags(dev); in dev_ifsioc_locked()
155 ifr->ifr_metric = 0; in dev_ifsioc_locked()
159 ifr->ifr_mtu = dev->mtu; in dev_ifsioc_locked()
163 err = -EINVAL; in dev_ifsioc_locked()
170 ifr->ifr_ifindex = dev->ifindex; in dev_ifsioc_locked()
174 ifr->ifr_qlen = dev->tx_queue_len; in dev_ifsioc_locked()
182 err = -ENOTTY; in dev_ifsioc_locked()
189 int net_hwtstamp_validate(const struct kernel_hwtstamp_config *cfg) in net_hwtstamp_validate() argument
196 if (cfg->flags & ~HWTSTAMP_FLAG_MASK) in net_hwtstamp_validate()
197 return -EINVAL; in net_hwtstamp_validate()
199 tx_type = cfg->tx_type; in net_hwtstamp_validate()
200 rx_filter = cfg->rx_filter; in net_hwtstamp_validate()
239 return -ERANGE; in net_hwtstamp_validate()
245 * dev_get_hwtstamp_phylib() - Get hardware timestamping settings of NIC
248 * @cfg: Timestamping configuration structure
253 * there only exists a phydev->mii_ts->hwtstamp() method. So this will return
254 * -EOPNOTSUPP for phylib for now, which is still more accurate than letting
258 struct kernel_hwtstamp_config *cfg) in dev_get_hwtstamp_phylib() argument
262 hwprov = rtnl_dereference(dev->hwprov); in dev_get_hwtstamp_phylib()
264 cfg->qualifier = hwprov->desc.qualifier; in dev_get_hwtstamp_phylib()
265 if (hwprov->source == HWTSTAMP_SOURCE_PHYLIB && in dev_get_hwtstamp_phylib()
266 hwprov->phydev) in dev_get_hwtstamp_phylib()
267 return phy_hwtstamp_get(hwprov->phydev, cfg); in dev_get_hwtstamp_phylib()
269 if (hwprov->source == HWTSTAMP_SOURCE_NETDEV) in dev_get_hwtstamp_phylib()
270 return dev->netdev_ops->ndo_hwtstamp_get(dev, cfg); in dev_get_hwtstamp_phylib()
272 return -EOPNOTSUPP; in dev_get_hwtstamp_phylib()
275 if (phy_is_default_hwtstamp(dev->phydev)) in dev_get_hwtstamp_phylib()
276 return phy_hwtstamp_get(dev->phydev, cfg); in dev_get_hwtstamp_phylib()
278 return dev->netdev_ops->ndo_hwtstamp_get(dev, cfg); in dev_get_hwtstamp_phylib()
283 const struct net_device_ops *ops = dev->netdev_ops; in dev_get_hwtstamp()
285 struct hwtstamp_config cfg; in dev_get_hwtstamp() local
288 if (!ops->ndo_hwtstamp_get) in dev_get_hwtstamp()
292 return -ENODEV; in dev_get_hwtstamp()
305 hwtstamp_config_from_kernel(&cfg, &kernel_cfg); in dev_get_hwtstamp()
307 if (copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg))) in dev_get_hwtstamp()
308 return -EFAULT; in dev_get_hwtstamp()
315 * dev_set_hwtstamp_phylib() - Change hardware timestamping of NIC
318 * @cfg: Timestamping configuration structure
325 * frames and not forward them), it must set dev->see_all_hwtstamp_requests.
328 struct kernel_hwtstamp_config *cfg, in dev_set_hwtstamp_phylib() argument
331 const struct net_device_ops *ops = dev->netdev_ops; in dev_set_hwtstamp_phylib()
339 hwprov = rtnl_dereference(dev->hwprov); in dev_set_hwtstamp_phylib()
341 if (hwprov->source == HWTSTAMP_SOURCE_PHYLIB && in dev_set_hwtstamp_phylib()
342 hwprov->phydev) { in dev_set_hwtstamp_phylib()
344 phydev = hwprov->phydev; in dev_set_hwtstamp_phylib()
345 } else if (hwprov->source == HWTSTAMP_SOURCE_NETDEV) { in dev_set_hwtstamp_phylib()
348 return -EOPNOTSUPP; in dev_set_hwtstamp_phylib()
351 cfg->qualifier = hwprov->desc.qualifier; in dev_set_hwtstamp_phylib()
353 phy_ts = phy_is_default_hwtstamp(dev->phydev); in dev_set_hwtstamp_phylib()
355 phydev = dev->phydev; in dev_set_hwtstamp_phylib()
358 cfg->source = phy_ts ? HWTSTAMP_SOURCE_PHYLIB : HWTSTAMP_SOURCE_NETDEV; in dev_set_hwtstamp_phylib()
360 if (phy_ts && dev->see_all_hwtstamp_requests) { in dev_set_hwtstamp_phylib()
361 err = ops->ndo_hwtstamp_get(dev, &old_cfg); in dev_set_hwtstamp_phylib()
366 if (!phy_ts || dev->see_all_hwtstamp_requests) { in dev_set_hwtstamp_phylib()
367 err = ops->ndo_hwtstamp_set(dev, cfg, extack); in dev_set_hwtstamp_phylib()
369 if (extack->_msg) in dev_set_hwtstamp_phylib()
370 netdev_err(dev, "%s\n", extack->_msg); in dev_set_hwtstamp_phylib()
375 if (phy_ts && dev->see_all_hwtstamp_requests) in dev_set_hwtstamp_phylib()
376 changed = kernel_hwtstamp_config_changed(&old_cfg, cfg); in dev_set_hwtstamp_phylib()
379 err = phy_hwtstamp_set(phydev, cfg, extack); in dev_set_hwtstamp_phylib()
382 ops->ndo_hwtstamp_set(dev, &old_cfg, NULL); in dev_set_hwtstamp_phylib()
392 const struct net_device_ops *ops = dev->netdev_ops; in dev_set_hwtstamp()
395 struct hwtstamp_config cfg; in dev_set_hwtstamp() local
398 if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg))) in dev_set_hwtstamp()
399 return -EFAULT; in dev_set_hwtstamp()
401 hwtstamp_config_to_kernel(&kernel_cfg, &cfg); in dev_set_hwtstamp()
415 if (!ops->ndo_hwtstamp_set) in dev_set_hwtstamp()
419 return -ENODEV; in dev_set_hwtstamp()
428 * updated version of it back to user space in dev_set_hwtstamp()
431 hwtstamp_config_from_kernel(&cfg, &kernel_cfg); in dev_set_hwtstamp()
433 if (copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg))) in dev_set_hwtstamp()
434 return -EFAULT; in dev_set_hwtstamp()
446 strscpy_pad(ifrr.ifr_name, dev->name, IFNAMSIZ); in generic_hwtstamp_ioctl_lower()
447 ifrr.ifr_ifru = kernel_cfg->ifr->ifr_ifru; in generic_hwtstamp_ioctl_lower()
453 kernel_cfg->ifr->ifr_ifru = ifrr.ifr_ifru; in generic_hwtstamp_ioctl_lower()
454 kernel_cfg->copied_to_user = true; in generic_hwtstamp_ioctl_lower()
462 const struct net_device_ops *ops = dev->netdev_ops; in generic_hwtstamp_get_lower()
465 return -ENODEV; in generic_hwtstamp_get_lower()
467 if (ops->ndo_hwtstamp_get) { in generic_hwtstamp_get_lower()
486 const struct net_device_ops *ops = dev->netdev_ops; in generic_hwtstamp_set_lower()
489 return -ENODEV; in generic_hwtstamp_set_lower()
491 if (ops->ndo_hwtstamp_set) { in generic_hwtstamp_set_lower()
509 const struct net_device_ops *ops = dev->netdev_ops; in dev_siocbond()
511 if (ops->ndo_siocbond) { in dev_siocbond()
512 int ret = -ENODEV; in dev_siocbond()
516 ret = ops->ndo_siocbond(dev, ifr, cmd); in dev_siocbond()
522 return -EOPNOTSUPP; in dev_siocbond()
528 const struct net_device_ops *ops = dev->netdev_ops; in dev_siocdevprivate()
530 if (ops->ndo_siocdevprivate) { in dev_siocdevprivate()
531 int ret = -ENODEV; in dev_siocdevprivate()
535 ret = ops->ndo_siocdevprivate(dev, ifr, data, cmd); in dev_siocdevprivate()
541 return -EOPNOTSUPP; in dev_siocdevprivate()
546 const struct net_device_ops *ops = dev->netdev_ops; in dev_siocwandev()
548 if (ops->ndo_siocwandev) { in dev_siocwandev()
549 int ret = -ENODEV; in dev_siocwandev()
553 ret = ops->ndo_siocwandev(dev, ifs); in dev_siocwandev()
559 return -EOPNOTSUPP; in dev_siocwandev()
569 struct net_device *dev = __dev_get_by_name(net, ifr->ifr_name); in dev_ifsioc()
573 return -ENODEV; in dev_ifsioc()
575 ops = dev->netdev_ops; in dev_ifsioc()
579 return dev_change_flags(dev, ifr->ifr_flags, NULL); in dev_ifsioc()
583 return -EOPNOTSUPP; in dev_ifsioc()
586 return dev_set_mtu(dev, ifr->ifr_mtu); in dev_ifsioc()
589 if (dev->addr_len > sizeof(ifr->ifr_hwaddr)) in dev_ifsioc()
590 return -EINVAL; in dev_ifsioc()
592 (struct sockaddr_storage *)&ifr->ifr_hwaddr, in dev_ifsioc()
596 if (ifr->ifr_hwaddr.sa_family != dev->type) in dev_ifsioc()
597 return -EINVAL; in dev_ifsioc()
598 memcpy(dev->broadcast, ifr->ifr_hwaddr.sa_data, in dev_ifsioc()
599 min(sizeof(ifr->ifr_hwaddr.sa_data_min), in dev_ifsioc()
600 (size_t)dev->addr_len)); in dev_ifsioc()
613 if (!ops->ndo_set_rx_mode || in dev_ifsioc()
614 ifr->ifr_hwaddr.sa_family != AF_UNSPEC) in dev_ifsioc()
615 return -EINVAL; in dev_ifsioc()
617 return -ENODEV; in dev_ifsioc()
619 err = dev_mc_add_global(dev, ifr->ifr_hwaddr.sa_data); in dev_ifsioc()
624 if (!ops->ndo_set_rx_mode || in dev_ifsioc()
625 ifr->ifr_hwaddr.sa_family != AF_UNSPEC) in dev_ifsioc()
626 return -EINVAL; in dev_ifsioc()
628 return -ENODEV; in dev_ifsioc()
630 err = dev_mc_del_global(dev, ifr->ifr_hwaddr.sa_data); in dev_ifsioc()
635 if (ifr->ifr_qlen < 0) in dev_ifsioc()
636 return -EINVAL; in dev_ifsioc()
637 return dev_change_tx_queue_len(dev, ifr->ifr_qlen); in dev_ifsioc()
640 ifr->ifr_newname[IFNAMSIZ-1] = '\0'; in dev_ifsioc()
641 return dev_change_name(dev, ifr->ifr_newname); in dev_ifsioc()
644 return dev_siocwandev(dev, &ifr->ifr_settings); in dev_ifsioc()
670 err = -EINVAL; in dev_ifsioc()
676 * dev_load - load a network module
696 no_module = request_module("netdev-%s", name); in dev_load()
703 * This function handles all "interface"-type I/O control requests. The actual
708 * dev_ioctl - network device ioctl
711 * @ifr: pointer to a struct ifreq in user space
716 * user space syscall interfaces but can sometimes be useful for
732 ifr->ifr_name[IFNAMSIZ-1] = 0; in dev_ioctl()
734 colon = strchr(ifr->ifr_name, ':'); in dev_ioctl()
744 dev_load(net, ifr->ifr_name); in dev_ioctl()
745 ret = netif_get_mac_address(&ifr->ifr_hwaddr, net, in dev_ioctl()
746 ifr->ifr_name); in dev_ioctl()
752 * - can be done by all. in dev_ioctl()
753 * - atomic and do not require locking. in dev_ioctl()
754 * - return a value in dev_ioctl()
763 dev_load(net, ifr->ifr_name); in dev_ioctl()
772 dev_load(net, ifr->ifr_name); in dev_ioctl()
780 * - require superuser power. in dev_ioctl()
781 * - require strict serialization. in dev_ioctl()
782 * - return a value in dev_ioctl()
787 dev_load(net, ifr->ifr_name); in dev_ioctl()
788 if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) in dev_ioctl()
789 return -EPERM; in dev_ioctl()
801 * - require superuser power. in dev_ioctl()
802 * - require strict serialization. in dev_ioctl()
803 * - do not return a value in dev_ioctl()
808 return -EPERM; in dev_ioctl()
812 * - require local superuser power. in dev_ioctl()
813 * - require strict serialization. in dev_ioctl()
814 * - do not return a value in dev_ioctl()
830 if (!ns_capable(net->user_ns, CAP_NET_ADMIN)) in dev_ioctl()
831 return -EPERM; in dev_ioctl()
835 dev_load(net, ifr->ifr_name); in dev_ioctl()
846 /* Get the per device memory space. We can add this but in dev_ioctl()
849 /* Set the per device memory buffer space. in dev_ioctl()
852 return -ENOTTY; in dev_ioctl()
862 dev_load(net, ifr->ifr_name); in dev_ioctl()
869 return -ENOTTY; in dev_ioctl()