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.
|
||||
pub fn genphy_read_status(&mut self) -> Result<u16> {
|
||||
let phydev = self.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) };
|
||||
if ret < 0 {
|
||||
Err(Error::from_errno(ret))
|
||||
} else {
|
||||
Ok(ret as u16)
|
||||
}
|
||||
pub fn genphy_read_status<R: reg::Register>(&mut self) -> Result<u16> {
|
||||
R::read_status(self)
|
||||
}
|
||||
|
||||
/// Updates the link status.
|
||||
|
@ -31,6 +31,13 @@ mod private {
|
||||
/// dev.read(C22::BMCR);
|
||||
/// // read C45 PMA/PMD control 1 register
|
||||
/// 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 {
|
||||
@ -39,6 +46,9 @@ pub trait Register: private::Sealed {
|
||||
|
||||
/// Writes a PHY register.
|
||||
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).
|
||||
@ -113,6 +123,15 @@ impl Register for C22 {
|
||||
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.
|
||||
@ -193,4 +212,13 @@ impl Register for C45 {
|
||||
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