mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
rust: net::phy unified genphy_read_status function for C22 and C45 registers
Add unified genphy_read_status function for C22 and C45 registers. Instead of having genphy_c22 and genphy_c45 methods, this unifies genphy_read_status functions for C22 and C45. Reviewed-by: Trevor Gross <tmgross@umich.edu> Reviewed-by: Benno Lossin <benno.lossin@proton.me> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b2e47002b2
commit
5114e05a3c
@ -252,16 +252,8 @@ impl Device {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Checks the link status and updates current link state.
|
/// Checks the link status and updates current link state.
|
||||||
pub fn genphy_read_status(&mut self) -> Result<u16> {
|
pub fn genphy_read_status<R: reg::Register>(&mut self) -> Result<u16> {
|
||||||
let phydev = self.0.get();
|
R::read_status(self)
|
||||||
// SAFETY: `phydev` is pointing to a valid object by the type invariant of `Self`.
|
|
||||||
// So it's just an FFI call.
|
|
||||||
let ret = unsafe { bindings::genphy_read_status(phydev) };
|
|
||||||
if ret < 0 {
|
|
||||||
Err(Error::from_errno(ret))
|
|
||||||
} else {
|
|
||||||
Ok(ret as u16)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Updates the link status.
|
/// Updates the link status.
|
||||||
|
@ -31,6 +31,13 @@ mod private {
|
|||||||
/// dev.read(C22::BMCR);
|
/// dev.read(C22::BMCR);
|
||||||
/// // read C45 PMA/PMD control 1 register
|
/// // read C45 PMA/PMD control 1 register
|
||||||
/// dev.read(C45::new(Mmd::PMAPMD, 0));
|
/// dev.read(C45::new(Mmd::PMAPMD, 0));
|
||||||
|
///
|
||||||
|
/// // Checks the link status as reported by registers in the C22 namespace
|
||||||
|
/// // and updates current link state.
|
||||||
|
/// dev.genphy_read_status::<phy::C22>();
|
||||||
|
/// // Checks the link status as reported by registers in the C45 namespace
|
||||||
|
/// // and updates current link state.
|
||||||
|
/// dev.genphy_read_status::<phy::C45>();
|
||||||
/// }
|
/// }
|
||||||
/// ```
|
/// ```
|
||||||
pub trait Register: private::Sealed {
|
pub trait Register: private::Sealed {
|
||||||
@ -39,6 +46,9 @@ pub trait Register: private::Sealed {
|
|||||||
|
|
||||||
/// Writes a PHY register.
|
/// Writes a PHY register.
|
||||||
fn write(&self, dev: &mut Device, val: u16) -> Result;
|
fn write(&self, dev: &mut Device, val: u16) -> Result;
|
||||||
|
|
||||||
|
/// Checks the link status and updates current link state.
|
||||||
|
fn read_status(dev: &mut Device) -> Result<u16>;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A single MDIO clause 22 register address (5 bits).
|
/// A single MDIO clause 22 register address (5 bits).
|
||||||
@ -113,6 +123,15 @@ impl Register for C22 {
|
|||||||
bindings::mdiobus_write((*phydev).mdio.bus, (*phydev).mdio.addr, self.0.into(), val)
|
bindings::mdiobus_write((*phydev).mdio.bus, (*phydev).mdio.addr, self.0.into(), val)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn read_status(dev: &mut Device) -> Result<u16> {
|
||||||
|
let phydev = dev.0.get();
|
||||||
|
// SAFETY: `phydev` is pointing to a valid object by the type invariant of `Self`.
|
||||||
|
// So it's just an FFI call.
|
||||||
|
let ret = unsafe { bindings::genphy_read_status(phydev) };
|
||||||
|
to_result(ret)?;
|
||||||
|
Ok(ret as u16)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A single MDIO clause 45 register device and address.
|
/// A single MDIO clause 45 register device and address.
|
||||||
@ -193,4 +212,13 @@ impl Register for C45 {
|
|||||||
bindings::phy_write_mmd(phydev, self.devad.0.into(), self.regnum.into(), val)
|
bindings::phy_write_mmd(phydev, self.devad.0.into(), self.regnum.into(), val)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn read_status(dev: &mut Device) -> Result<u16> {
|
||||||
|
let phydev = dev.0.get();
|
||||||
|
// SAFETY: `phydev` is pointing to a valid object by the type invariant of `Self`.
|
||||||
|
// So it's just an FFI call.
|
||||||
|
let ret = unsafe { bindings::genphy_c45_read_status(phydev) };
|
||||||
|
to_result(ret)?;
|
||||||
|
Ok(ret as u16)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user