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 | EXPORT_SYMBOL(phy_mii_ioctl); | 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 | * @dev: the net_device struct | 437 | * @dev: the net_device struct |
| 438 | * @ifr: &struct ifreq for socket ioctl's | 438 | * @ifr: &struct ifreq for socket ioctl's |
| 439 | * @cmd: ioctl cmd to execute | 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 | return -ENODEV; | 444 | return -ENODEV; |
| 445 | 445 | ||
| 446 | return phy_mii_ioctl(dev->phydev, ifr, cmd); | 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 | EXPORT_SYMBOL(phy_do_ioctl_running); | 458 | EXPORT_SYMBOL(phy_do_ioctl_running); |
| 449 | 459 | ||
| 450 | void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies) | 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 | int phy_ethtool_ksettings_set(struct phy_device *phydev, | 1242 | int phy_ethtool_ksettings_set(struct phy_device *phydev, |
| 1243 | const struct ethtool_link_ksettings *cmd); | 1243 | const struct ethtool_link_ksettings *cmd); |
| 1244 | int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd); | 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 | int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd); | 1246 | int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd); |
| 1246 | void phy_request_interrupt(struct phy_device *phydev); | 1247 | void phy_request_interrupt(struct phy_device *phydev); |
| 1247 | void phy_free_interrupt(struct phy_device *phydev); | 1248 | void phy_free_interrupt(struct phy_device *phydev); |