drivers/base/power/generic_ops.c
Source file repositories/reference/linux-study-clean/drivers/base/power/generic_ops.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/base/power/generic_ops.c- Extension
.c- Size
- 5885 bytes
- Lines
- 240
- Domain
- Driver Families
- Bucket
- drivers/base
- Inferred role
- Driver Families: operation-table or driver-model contract
- Status
- pattern implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines an operation table; this is where Linux turns generic core objects into subsystem-specific behavior.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/pm.hlinux/pm_runtime.hlinux/export.h
Detected Declarations
function pm_generic_runtime_suspendfunction pm_generic_runtime_resumefunction pm_generic_preparefunction pm_generic_suspend_noirqfunction pm_generic_suspend_latefunction pm_generic_suspendfunction pm_generic_freeze_noirqfunction pm_generic_freezefunction pm_generic_poweroff_noirqfunction pm_generic_poweroff_latefunction pm_generic_powerofffunction pm_generic_thaw_noirqfunction pm_generic_thawfunction pm_generic_resume_noirqfunction pm_generic_resume_earlyfunction pm_generic_resumefunction pm_generic_restore_noirqfunction pm_generic_restore_earlyfunction pm_generic_restorefunction pm_generic_completeexport pm_generic_runtime_suspendexport pm_generic_runtime_resumeexport pm_generic_suspend_noirqexport pm_generic_suspend_lateexport pm_generic_suspendexport pm_generic_freeze_noirqexport pm_generic_freezeexport pm_generic_poweroff_noirqexport pm_generic_poweroff_lateexport pm_generic_poweroffexport pm_generic_thaw_noirqexport pm_generic_thawexport pm_generic_resume_noirqexport pm_generic_resume_earlyexport pm_generic_resumeexport pm_generic_restore_noirqexport pm_generic_restore_earlyexport pm_generic_restore
Annotated Snippet
struct device_driver *drv = dev->driver;
int ret = 0;
if (drv && drv->pm && drv->pm->prepare)
ret = drv->pm->prepare(dev);
return ret;
}
/**
* pm_generic_suspend_noirq - Generic suspend_noirq callback for subsystems.
* @dev: Device to suspend.
*/
int pm_generic_suspend_noirq(struct device *dev)
{
return CALL_PM_OP(dev, suspend_noirq);
}
EXPORT_SYMBOL_GPL(pm_generic_suspend_noirq);
/**
* pm_generic_suspend_late - Generic suspend_late callback for subsystems.
* @dev: Device to suspend.
*/
int pm_generic_suspend_late(struct device *dev)
{
return CALL_PM_OP(dev, suspend_late);
}
EXPORT_SYMBOL_GPL(pm_generic_suspend_late);
/**
* pm_generic_suspend - Generic suspend callback for subsystems.
* @dev: Device to suspend.
*/
int pm_generic_suspend(struct device *dev)
{
return CALL_PM_OP(dev, suspend);
}
EXPORT_SYMBOL_GPL(pm_generic_suspend);
/**
* pm_generic_freeze_noirq - Generic freeze_noirq callback for subsystems.
* @dev: Device to freeze.
*/
int pm_generic_freeze_noirq(struct device *dev)
{
return CALL_PM_OP(dev, freeze_noirq);
}
EXPORT_SYMBOL_GPL(pm_generic_freeze_noirq);
/**
* pm_generic_freeze - Generic freeze callback for subsystems.
* @dev: Device to freeze.
*/
int pm_generic_freeze(struct device *dev)
{
return CALL_PM_OP(dev, freeze);
}
EXPORT_SYMBOL_GPL(pm_generic_freeze);
/**
* pm_generic_poweroff_noirq - Generic poweroff_noirq callback for subsystems.
* @dev: Device to handle.
*/
int pm_generic_poweroff_noirq(struct device *dev)
{
return CALL_PM_OP(dev, poweroff_noirq);
}
EXPORT_SYMBOL_GPL(pm_generic_poweroff_noirq);
/**
* pm_generic_poweroff_late - Generic poweroff_late callback for subsystems.
* @dev: Device to handle.
*/
int pm_generic_poweroff_late(struct device *dev)
{
return CALL_PM_OP(dev, poweroff_late);
}
EXPORT_SYMBOL_GPL(pm_generic_poweroff_late);
/**
* pm_generic_poweroff - Generic poweroff callback for subsystems.
* @dev: Device to handle.
*/
int pm_generic_poweroff(struct device *dev)
{
return CALL_PM_OP(dev, poweroff);
}
EXPORT_SYMBOL_GPL(pm_generic_poweroff);
/**
Annotation
- Immediate include surface: `linux/pm.h`, `linux/pm_runtime.h`, `linux/export.h`.
- Detected declarations: `function pm_generic_runtime_suspend`, `function pm_generic_runtime_resume`, `function pm_generic_prepare`, `function pm_generic_suspend_noirq`, `function pm_generic_suspend_late`, `function pm_generic_suspend`, `function pm_generic_freeze_noirq`, `function pm_generic_freeze`, `function pm_generic_poweroff_noirq`, `function pm_generic_poweroff_late`.
- Atlas domain: Driver Families / drivers/base.
- Implementation status: pattern implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.