mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2026-01-27 12:47:24 +01:00
rust: net::phy represent DeviceId as transparent wrapper over mdio_device_id
Refactor the DeviceId struct to be a #[repr(transparent)] wrapper around the C struct bindings::mdio_device_id. This refactoring is a preparation for enabling the PHY abstractions to use the RawDeviceId trait. Acked-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Trevor Gross <tmgross@umich.edu> Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com> Link: https://lore.kernel.org/r/20250711040947.1252162-3-fujita.tomonori@gmail.com Signed-off-by: Danilo Krummrich <dakr@kernel.org>
This commit is contained in:
parent
8d84b32075
commit
f65a3218fd
|
|
@ -507,7 +507,7 @@ pub const fn create_phy_driver<T: Driver>() -> DriverVTable {
|
|||
DriverVTable(Opaque::new(bindings::phy_driver {
|
||||
name: T::NAME.as_char_ptr().cast_mut(),
|
||||
flags: T::FLAGS,
|
||||
phy_id: T::PHY_DEVICE_ID.id,
|
||||
phy_id: T::PHY_DEVICE_ID.id(),
|
||||
phy_id_mask: T::PHY_DEVICE_ID.mask_as_int(),
|
||||
soft_reset: if T::HAS_SOFT_RESET {
|
||||
Some(Adapter::<T>::soft_reset_callback)
|
||||
|
|
@ -691,42 +691,41 @@ impl Drop for Registration {
|
|||
///
|
||||
/// Represents the kernel's `struct mdio_device_id`. This is used to find an appropriate
|
||||
/// PHY driver.
|
||||
pub struct DeviceId {
|
||||
id: u32,
|
||||
mask: DeviceMask,
|
||||
}
|
||||
#[repr(transparent)]
|
||||
#[derive(Clone, Copy)]
|
||||
pub struct DeviceId(bindings::mdio_device_id);
|
||||
|
||||
impl DeviceId {
|
||||
/// Creates a new instance with the exact match mask.
|
||||
pub const fn new_with_exact_mask(id: u32) -> Self {
|
||||
DeviceId {
|
||||
id,
|
||||
mask: DeviceMask::Exact,
|
||||
}
|
||||
Self(bindings::mdio_device_id {
|
||||
phy_id: id,
|
||||
phy_id_mask: DeviceMask::Exact.as_int(),
|
||||
})
|
||||
}
|
||||
|
||||
/// Creates a new instance with the model match mask.
|
||||
pub const fn new_with_model_mask(id: u32) -> Self {
|
||||
DeviceId {
|
||||
id,
|
||||
mask: DeviceMask::Model,
|
||||
}
|
||||
Self(bindings::mdio_device_id {
|
||||
phy_id: id,
|
||||
phy_id_mask: DeviceMask::Model.as_int(),
|
||||
})
|
||||
}
|
||||
|
||||
/// Creates a new instance with the vendor match mask.
|
||||
pub const fn new_with_vendor_mask(id: u32) -> Self {
|
||||
DeviceId {
|
||||
id,
|
||||
mask: DeviceMask::Vendor,
|
||||
}
|
||||
Self(bindings::mdio_device_id {
|
||||
phy_id: id,
|
||||
phy_id_mask: DeviceMask::Vendor.as_int(),
|
||||
})
|
||||
}
|
||||
|
||||
/// Creates a new instance with a custom match mask.
|
||||
pub const fn new_with_custom_mask(id: u32, mask: u32) -> Self {
|
||||
DeviceId {
|
||||
id,
|
||||
mask: DeviceMask::Custom(mask),
|
||||
}
|
||||
Self(bindings::mdio_device_id {
|
||||
phy_id: id,
|
||||
phy_id_mask: DeviceMask::Custom(mask).as_int(),
|
||||
})
|
||||
}
|
||||
|
||||
/// Creates a new instance from [`Driver`].
|
||||
|
|
@ -734,18 +733,20 @@ impl DeviceId {
|
|||
T::PHY_DEVICE_ID
|
||||
}
|
||||
|
||||
/// Get a `mask` as u32.
|
||||
/// Get the MDIO device's PHY ID.
|
||||
pub const fn id(&self) -> u32 {
|
||||
self.0.phy_id
|
||||
}
|
||||
|
||||
/// Get the MDIO device's match mask.
|
||||
pub const fn mask_as_int(&self) -> u32 {
|
||||
self.mask.as_int()
|
||||
self.0.phy_id_mask
|
||||
}
|
||||
|
||||
// macro use only
|
||||
#[doc(hidden)]
|
||||
pub const fn mdio_device_id(&self) -> bindings::mdio_device_id {
|
||||
bindings::mdio_device_id {
|
||||
phy_id: self.id,
|
||||
phy_id_mask: self.mask.as_int(),
|
||||
}
|
||||
self.0
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user