mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-26 02:39:48 +00:00
![Andrew Lunn](/assets/img/avatar_default.png)
The fixed phys delete function simply removed the fixed phy from the internal linked list and freed the memory. It however did not unregister the associated phy device. This meant it was still possible to find the phy device on the mdio bus. Make fixed_phy_del() an internal function and add a fixed_phy_unregister() to unregisters the phy device and then uses fixed_phy_del() to free resources. Modify DSA to use this new API function, so we don't leak phys. Signed-off-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: David S. Miller <davem@davemloft.net>
60 lines
1.6 KiB
C
60 lines
1.6 KiB
C
#ifndef __PHY_FIXED_H
|
|
#define __PHY_FIXED_H
|
|
|
|
struct fixed_phy_status {
|
|
int link;
|
|
int speed;
|
|
int duplex;
|
|
int pause;
|
|
int asym_pause;
|
|
};
|
|
|
|
struct device_node;
|
|
|
|
#if IS_ENABLED(CONFIG_FIXED_PHY)
|
|
extern int fixed_phy_add(unsigned int irq, int phy_id,
|
|
struct fixed_phy_status *status,
|
|
int link_gpio);
|
|
extern struct phy_device *fixed_phy_register(unsigned int irq,
|
|
struct fixed_phy_status *status,
|
|
int link_gpio,
|
|
struct device_node *np);
|
|
extern void fixed_phy_unregister(struct phy_device *phydev);
|
|
extern int fixed_phy_set_link_update(struct phy_device *phydev,
|
|
int (*link_update)(struct net_device *,
|
|
struct fixed_phy_status *));
|
|
extern int fixed_phy_update_state(struct phy_device *phydev,
|
|
const struct fixed_phy_status *status,
|
|
const struct fixed_phy_status *changed);
|
|
#else
|
|
static inline int fixed_phy_add(unsigned int irq, int phy_id,
|
|
struct fixed_phy_status *status,
|
|
int link_gpio)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
static inline struct phy_device *fixed_phy_register(unsigned int irq,
|
|
struct fixed_phy_status *status,
|
|
int gpio_link,
|
|
struct device_node *np)
|
|
{
|
|
return ERR_PTR(-ENODEV);
|
|
}
|
|
static inline void fixed_phy_unregister(struct phy_device *phydev)
|
|
{
|
|
}
|
|
static inline int fixed_phy_set_link_update(struct phy_device *phydev,
|
|
int (*link_update)(struct net_device *,
|
|
struct fixed_phy_status *))
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
static inline int fixed_phy_update_state(struct phy_device *phydev,
|
|
const struct fixed_phy_status *status,
|
|
const struct fixed_phy_status *changed)
|
|
{
|
|
return -ENODEV;
|
|
}
|
|
#endif /* CONFIG_FIXED_PHY */
|
|
|
|
#endif /* __PHY_FIXED_H */
|