include/linux/powercap.h
Source file repositories/reference/linux-study-clean/include/linux/powercap.h
File Facts
- System
- Linux kernel
- Corpus path
include/linux/powercap.h- Extension
.h- Size
- 12251 bytes
- Lines
- 313
- Domain
- Core OS
- Bucket
- Core Kernel Interface
- Inferred role
- Core OS: implementation source
- Status
- source implementation candidate
Why This File Exists
Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Core operating-system implementation surface: boot, tasks, memory, VFS, syscall-facing interfaces, synchronization, credentials, and isolation.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/device.hlinux/idr.h
Detected Declarations
struct powercap_control_typestruct powercap_zonestruct powercap_zone_constraintstruct powercap_control_type_opsstruct powercap_control_typestruct powercap_zone_opsstruct powercap_zonestruct powercap_zone_constraint_opsstruct powercap_zone_constraintfunction powercap_set_zone_datafunction powercap_get_zone_data
Annotated Snippet
struct powercap_control_type_ops {
int (*set_enable) (struct powercap_control_type *, bool mode);
int (*get_enable) (struct powercap_control_type *, bool *mode);
int (*release) (struct powercap_control_type *);
};
/**
* struct powercap_control_type - Defines a powercap control_type
* @dev: device for this control_type
* @idr: idr to have unique id for its child
* @nr_zones: counter for number of zones of this type
* @ops: Pointer to callback struct
* @lock: mutex for control type
* @allocated: This is possible that client owns the memory
* used by this structure. In this case
* this flag is set to false by framework to
* prevent deallocation during release process.
* Otherwise this flag is set to true.
* @node: linked-list node
*
* Defines powercap control_type. This acts as a container for power
* zones, which use same method to control power. E.g. RAPL, RAPL-PCI etc.
* All fields are private and should not be used by client drivers.
*/
struct powercap_control_type {
struct device dev;
struct idr idr;
int nr_zones;
const struct powercap_control_type_ops *ops;
struct mutex lock;
bool allocated;
struct list_head node;
};
/**
* struct powercap_zone_ops - Define power zone callbacks
* @get_max_energy_range_uj: Get maximum range of energy counter in
* micro-joules.
* @get_energy_uj: Get current energy counter in micro-joules.
* @reset_energy_uj: Reset micro-joules energy counter.
* @get_max_power_range_uw: Get maximum range of power counter in
* micro-watts.
* @get_power_uw: Get current power counter in micro-watts.
* @set_enable: Enable/Disable power zone controls.
* Default is enabled.
* @get_enable: get Enable/Disable status.
* @release: Callback to inform that last reference to this
* control type is closed. So it is safe to free
* data structure associated with this
* control type. Mandatory, if client driver owns
* the power_zone memory.
*
* This structure defines zone callbacks to be implemented by client drivers.
* Client drives can define both energy and power related callbacks. But at
* the least one type (either power or energy) is mandatory. Client drivers
* should handle mutual exclusion, if required in callbacks.
*/
struct powercap_zone_ops {
int (*get_max_energy_range_uj) (struct powercap_zone *, u64 *);
int (*get_energy_uj) (struct powercap_zone *, u64 *);
int (*reset_energy_uj) (struct powercap_zone *);
int (*get_max_power_range_uw) (struct powercap_zone *, u64 *);
int (*get_power_uw) (struct powercap_zone *, u64 *);
int (*set_enable) (struct powercap_zone *, bool mode);
int (*get_enable) (struct powercap_zone *, bool *mode);
int (*release) (struct powercap_zone *);
};
#define POWERCAP_ZONE_MAX_ATTRS 6
#define POWERCAP_CONSTRAINTS_ATTRS 8
#define MAX_CONSTRAINTS_PER_ZONE 10
/**
* struct powercap_zone- Defines instance of a power cap zone
* @id: Unique id
* @name: Power zone name.
* @control_type_inst: Control type instance for this zone.
* @ops: Pointer to the zone operation structure.
* @dev: Instance of a device.
* @const_id_cnt: Number of constraint defined.
* @idr: Instance to an idr entry for children zones.
* @parent_idr: To remove reference from the parent idr.
* @private_data: Private data pointer if any for this zone.
* @zone_dev_attrs: Attributes associated with this device.
* @zone_attr_count: Attribute count.
* @dev_zone_attr_group: Attribute group for attributes.
* @dev_attr_groups: Attribute group store to register with device.
* @allocated: This is possible that client owns the memory
* used by this structure. In this case
* this flag is set to false by framework to
* prevent deallocation during release process.
Annotation
- Immediate include surface: `linux/device.h`, `linux/idr.h`.
- Detected declarations: `struct powercap_control_type`, `struct powercap_zone`, `struct powercap_zone_constraint`, `struct powercap_control_type_ops`, `struct powercap_control_type`, `struct powercap_zone_ops`, `struct powercap_zone`, `struct powercap_zone_constraint_ops`, `struct powercap_zone_constraint`, `function powercap_set_zone_data`.
- Atlas domain: Core OS / Core Kernel Interface.
- Implementation status: source 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.