pub struct Registration<T: Driver>(/* private fields */);
Expand description
CPU frequency driver Registration.
§Examples
The following example demonstrates how to register a cpufreq driver.
use kernel::{
cpu, cpufreq,
c_str,
device::{Bound, Device},
macros::vtable,
sync::Arc,
};
struct FooDevice;
#[derive(Default)]
struct FooDriver;
#[vtable]
impl cpufreq::Driver for FooDriver {
const NAME: &'static CStr = c_str!("cpufreq-foo");
const FLAGS: u16 = cpufreq::flags::NEED_INITIAL_FREQ_CHECK | cpufreq::flags::IS_COOLING_DEV;
const BOOST_ENABLED: bool = true;
type PData = Arc<FooDevice>;
fn init(policy: &mut cpufreq::Policy) -> Result<Self::PData> {
// Initialize here
Ok(Arc::new(FooDevice, GFP_KERNEL)?)
}
fn exit(_policy: &mut cpufreq::Policy, _data: Option<Self::PData>) -> Result<()> {
Ok(())
}
fn suspend(policy: &mut cpufreq::Policy) -> Result<()> {
policy.generic_suspend()
}
fn verify(data: &mut cpufreq::PolicyData) -> Result<()> {
data.generic_verify()
}
fn target_index(policy: &mut cpufreq::Policy, index: cpufreq::TableIndex) -> Result<()> {
// Update CPU frequency
Ok(())
}
fn get(policy: &mut cpufreq::Policy) -> Result<u32> {
policy.generic_get()
}
}
fn foo_probe(dev: &Device<Bound>) {
cpufreq::Registration::<FooDriver>::new_foreign_owned(dev).unwrap();
}
Implementations§
Source§impl<T: Driver> Registration<T>
impl<T: Driver> Registration<T>
Sourcepub fn new_foreign_owned(dev: &Device<Bound>) -> Result<()>
pub fn new_foreign_owned(dev: &Device<Bound>) -> Result<()>
Same as Registration::new
, but does not return a Registration
instance.
Instead the Registration
is owned by Devres
and will be revoked / dropped, once the
device is detached.
Trait Implementations§
Source§impl<T: Driver> Drop for Registration<T>
impl<T: Driver> Drop for Registration<T>
impl<T: Driver> Send for Registration<T>
SAFETY: Registration with and unregistration from the cpufreq subsystem can happen from any thread.
impl<T: Driver> Sync for Registration<T>
SAFETY: Registration
doesn’t offer any methods or access to fields when shared between threads
or CPUs, so it is safe to share it.
Auto Trait Implementations§
impl<T> Freeze for Registration<T>
impl<T> !RefUnwindSafe for Registration<T>
impl<T> Unpin for Registration<T>where
T: Unpin,
impl<T> !UnwindSafe for Registration<T>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more