mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
net: mdio: add unlocked mdiobus and mdiodev bus accessors
Add the following unlocked accessors to complete the set: __mdiobus_modify() __mdiodev_read() __mdiodev_write() __mdiodev_modify() __mdiodev_modify_changed() which we will need for Marvell DSA PCS conversion. Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
24699cc1ff
commit
e6a45700e7
@@ -1210,6 +1210,26 @@ int mdiobus_c45_write_nested(struct mii_bus *bus, int addr, int devad,
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(mdiobus_c45_write_nested);
|
EXPORT_SYMBOL(mdiobus_c45_write_nested);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* __mdiobus_modify - Convenience function for modifying a given mdio device
|
||||||
|
* register
|
||||||
|
* @bus: the mii_bus struct
|
||||||
|
* @addr: the phy address
|
||||||
|
* @regnum: register number to write
|
||||||
|
* @mask: bit mask of bits to clear
|
||||||
|
* @set: bit mask of bits to set
|
||||||
|
*/
|
||||||
|
int __mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask,
|
||||||
|
u16 set)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
|
||||||
|
err = __mdiobus_modify_changed(bus, addr, regnum, mask, set);
|
||||||
|
|
||||||
|
return err < 0 ? err : 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(__mdiobus_modify);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* mdiobus_modify - Convenience function for modifying a given mdio device
|
* mdiobus_modify - Convenience function for modifying a given mdio device
|
||||||
* register
|
* register
|
||||||
@@ -1224,10 +1244,10 @@ int mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask, u16 set)
|
|||||||
int err;
|
int err;
|
||||||
|
|
||||||
mutex_lock(&bus->mdio_lock);
|
mutex_lock(&bus->mdio_lock);
|
||||||
err = __mdiobus_modify_changed(bus, addr, regnum, mask, set);
|
err = __mdiobus_modify(bus, addr, regnum, mask, set);
|
||||||
mutex_unlock(&bus->mdio_lock);
|
mutex_unlock(&bus->mdio_lock);
|
||||||
|
|
||||||
return err < 0 ? err : 0;
|
return err;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mdiobus_modify);
|
EXPORT_SYMBOL_GPL(mdiobus_modify);
|
||||||
|
|
||||||
|
|||||||
@@ -537,6 +537,8 @@ static inline void mii_c73_mod_linkmode(unsigned long *adv, u16 *lpa)
|
|||||||
|
|
||||||
int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum);
|
int __mdiobus_read(struct mii_bus *bus, int addr, u32 regnum);
|
||||||
int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);
|
int __mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);
|
||||||
|
int __mdiobus_modify(struct mii_bus *bus, int addr, u32 regnum, u16 mask,
|
||||||
|
u16 set);
|
||||||
int __mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum,
|
int __mdiobus_modify_changed(struct mii_bus *bus, int addr, u32 regnum,
|
||||||
u16 mask, u16 set);
|
u16 mask, u16 set);
|
||||||
|
|
||||||
@@ -564,6 +566,30 @@ int mdiobus_c45_modify(struct mii_bus *bus, int addr, int devad, u32 regnum,
|
|||||||
int mdiobus_c45_modify_changed(struct mii_bus *bus, int addr, int devad,
|
int mdiobus_c45_modify_changed(struct mii_bus *bus, int addr, int devad,
|
||||||
u32 regnum, u16 mask, u16 set);
|
u32 regnum, u16 mask, u16 set);
|
||||||
|
|
||||||
|
static inline int __mdiodev_read(struct mdio_device *mdiodev, u32 regnum)
|
||||||
|
{
|
||||||
|
return __mdiobus_read(mdiodev->bus, mdiodev->addr, regnum);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int __mdiodev_write(struct mdio_device *mdiodev, u32 regnum,
|
||||||
|
u16 val)
|
||||||
|
{
|
||||||
|
return __mdiobus_write(mdiodev->bus, mdiodev->addr, regnum, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int __mdiodev_modify(struct mdio_device *mdiodev, u32 regnum,
|
||||||
|
u16 mask, u16 set)
|
||||||
|
{
|
||||||
|
return __mdiobus_modify(mdiodev->bus, mdiodev->addr, regnum, mask, set);
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int __mdiodev_modify_changed(struct mdio_device *mdiodev,
|
||||||
|
u32 regnum, u16 mask, u16 set)
|
||||||
|
{
|
||||||
|
return __mdiobus_modify_changed(mdiodev->bus, mdiodev->addr, regnum,
|
||||||
|
mask, set);
|
||||||
|
}
|
||||||
|
|
||||||
static inline int mdiodev_read(struct mdio_device *mdiodev, u32 regnum)
|
static inline int mdiodev_read(struct mdio_device *mdiodev, u32 regnum)
|
||||||
{
|
{
|
||||||
return mdiobus_read(mdiodev->bus, mdiodev->addr, regnum);
|
return mdiobus_read(mdiodev->bus, mdiodev->addr, regnum);
|
||||||
|
|||||||
Reference in New Issue
Block a user