mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
rust: net::phy support probe callback
Support phy_driver probe callback, used to set up device-specific structures. Reviewed-by: Alice Ryhl <aliceryhl@google.com> Reviewed-by: Andrew Lunn <andrew@lunn.ch> Reviewed-by: Benno Lossin <benno.lossin@proton.me> Reviewed-by: Trevor Gross <tmgross@umich.edu> Signed-off-by: FUJITA Tomonori <fujita.tomonori@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4d080a029d
commit
ffd2747de6
@ -338,6 +338,21 @@ impl<T: Driver> Adapter<T> {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// # Safety
|
||||||
|
///
|
||||||
|
/// `phydev` must be passed by the corresponding callback in `phy_driver`.
|
||||||
|
unsafe extern "C" fn probe_callback(phydev: *mut bindings::phy_device) -> core::ffi::c_int {
|
||||||
|
from_result(|| {
|
||||||
|
// SAFETY: This callback is called only in contexts
|
||||||
|
// where we can exclusively access `phy_device` because
|
||||||
|
// it's not published yet, so the accessors on `Device` are okay
|
||||||
|
// to call.
|
||||||
|
let dev = unsafe { Device::from_raw(phydev) };
|
||||||
|
T::probe(dev)?;
|
||||||
|
Ok(0)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
/// # Safety
|
/// # Safety
|
||||||
///
|
///
|
||||||
/// `phydev` must be passed by the corresponding callback in `phy_driver`.
|
/// `phydev` must be passed by the corresponding callback in `phy_driver`.
|
||||||
@ -511,6 +526,11 @@ pub const fn create_phy_driver<T: Driver>() -> DriverVTable {
|
|||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
},
|
},
|
||||||
|
probe: if T::HAS_PROBE {
|
||||||
|
Some(Adapter::<T>::probe_callback)
|
||||||
|
} else {
|
||||||
|
None
|
||||||
|
},
|
||||||
get_features: if T::HAS_GET_FEATURES {
|
get_features: if T::HAS_GET_FEATURES {
|
||||||
Some(Adapter::<T>::get_features_callback)
|
Some(Adapter::<T>::get_features_callback)
|
||||||
} else {
|
} else {
|
||||||
@ -583,6 +603,11 @@ pub trait Driver {
|
|||||||
kernel::build_error(VTABLE_DEFAULT_ERROR)
|
kernel::build_error(VTABLE_DEFAULT_ERROR)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Sets up device-specific structures during discovery.
|
||||||
|
fn probe(_dev: &mut Device) -> Result {
|
||||||
|
kernel::build_error(VTABLE_DEFAULT_ERROR)
|
||||||
|
}
|
||||||
|
|
||||||
/// Probes the hardware to determine what abilities it has.
|
/// Probes the hardware to determine what abilities it has.
|
||||||
fn get_features(_dev: &mut Device) -> Result {
|
fn get_features(_dev: &mut Device) -> Result {
|
||||||
kernel::build_error(VTABLE_DEFAULT_ERROR)
|
kernel::build_error(VTABLE_DEFAULT_ERROR)
|
||||||
|
Loading…
Reference in New Issue
Block a user