mirror of
https://github.com/torvalds/linux.git
synced 2024-11-21 19:41:42 +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
|
||||
///
|
||||
/// `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 {
|
||||
None
|
||||
},
|
||||
probe: if T::HAS_PROBE {
|
||||
Some(Adapter::<T>::probe_callback)
|
||||
} else {
|
||||
None
|
||||
},
|
||||
get_features: if T::HAS_GET_FEATURES {
|
||||
Some(Adapter::<T>::get_features_callback)
|
||||
} else {
|
||||
@ -583,6 +603,11 @@ pub trait Driver {
|
||||
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.
|
||||
fn get_features(_dev: &mut Device) -> Result {
|
||||
kernel::build_error(VTABLE_DEFAULT_ERROR)
|
||||
|
Loading…
Reference in New Issue
Block a user