Add a new version of phy_do_ioctl that doesn't check whether net_device is running. It will typically be used if suitable drivers attach the PHY in probe already.
Unified · Split
| @@ -433,18 +433,28 @@ int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd) · 432 unmodified lines | ||
| 433 | 433 | EXPORT_SYMBOL(phy_mii_ioctl); |
| 434 | 434 | |
| 435 | 435 | /** |
| 436 | − * phy_do_ioctl_running - generic ndo_do_ioctl implementation | |
| 436 | + * phy_do_ioctl - generic ndo_do_ioctl implementation | |
| 437 | 437 | * @dev: the net_device struct |
| 438 | 438 | * @ifr: &struct ifreq for socket ioctl's |
| 439 | 439 | * @cmd: ioctl cmd to execute |
| 440 | 440 | */ |
| 441 | −int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd) | |
| 441 | +int phy_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) | |
| 442 | 442 | { |
| 443 | − if (!netif_running(dev) || !dev->phydev) | |
| 443 | + if (!dev->phydev) | |
| 444 | 444 | return -ENODEV; |
| 445 | 445 | |
| 446 | 446 | return phy_mii_ioctl(dev->phydev, ifr, cmd); |
| 447 | 447 | } |
| 448 | +EXPORT_SYMBOL(phy_do_ioctl); | |
| 449 | + | |
| 450 | +/* same as phy_do_ioctl, but ensures that net_device is running */ | |
| 451 | +int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd) | |
| 452 | +{ | |
| 453 | + if (!netif_running(dev)) | |
| 454 | + return -ENODEV; | |
| 455 | + | |
| 456 | + return phy_do_ioctl(dev, ifr, cmd); | |
| 457 | +} | |
| 448 | 458 | EXPORT_SYMBOL(phy_do_ioctl_running); |
| 449 | 459 | |
| 450 | 460 | void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies) |
| @@ -1242,6 +1242,7 @@ void phy_ethtool_ksettings_get(struct phy_device *phydev, · 1241 unmodified lines | ||
| 1242 | 1242 | int phy_ethtool_ksettings_set(struct phy_device *phydev, |
| 1243 | 1243 | const struct ethtool_link_ksettings *cmd); |
| 1244 | 1244 | int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd); |
| 1245 | +int phy_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); | |
| 1245 | 1246 | int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd); |
| 1246 | 1247 | void phy_request_interrupt(struct phy_device *phydev); |
| 1247 | 1248 | void phy_free_interrupt(struct phy_device *phydev); |