drivers/interconnect/qcom/icc-rpmh.h
Source file repositories/reference/linux-study-clean/drivers/interconnect/qcom/icc-rpmh.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/interconnect/qcom/icc-rpmh.h- Extension
.h- Size
- 5300 bytes
- Lines
- 168
- Domain
- Driver Families
- Bucket
- drivers/interconnect
- Inferred role
- Driver Families: implementation source
- Status
- source 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 or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
dt-bindings/interconnect/qcom,icc.hlinux/regmap.h
Detected Declarations
struct qcom_icc_providerstruct bcm_dbstruct qcom_icc_qosboxstruct qcom_icc_nodestruct qcom_icc_bcmstruct qcom_icc_fabricstruct qcom_icc_desc
Annotated Snippet
struct qcom_icc_provider {
struct icc_provider provider;
struct device *dev;
struct qcom_icc_bcm * const *bcms;
size_t num_bcms;
struct bcm_voter *voter;
struct qcom_icc_node * const *nodes;
size_t num_nodes;
struct regmap *regmap;
struct clk_bulk_data *clks;
int num_clks;
};
/**
* struct bcm_db - Auxiliary data pertaining to each Bus Clock Manager (BCM)
* @unit: divisor used to convert bytes/sec bw value to an RPMh msg
* @width: multiplier used to convert bytes/sec bw value to an RPMh msg
* @vcd: virtual clock domain that this bcm belongs to
* @reserved: reserved field
*/
struct bcm_db {
__le32 unit;
__le16 width;
u8 vcd;
u8 reserved;
};
#define MAX_PORTS 4
/**
* struct qcom_icc_qosbox - Qualcomm specific QoS config
* @prio: priority value assigned to requests on the node
* @urg_fwd: whether to forward the urgency promotion issued by master
* (endpoint), or discard
* @prio_fwd_disable: whether to forward the priority driven by master, or
* override by @prio
* @num_ports: number of @ports
* @port_offsets: qos register offsets
*/
struct qcom_icc_qosbox {
const u32 prio;
const bool urg_fwd;
const bool prio_fwd_disable;
const u32 num_ports;
const u32 port_offsets[MAX_PORTS];
};
#define MAX_LINKS 128
#define MAX_BCMS 64
#define MAX_BCM_PER_NODE 3
#define MAX_VCD 10
/**
* struct qcom_icc_node - Qualcomm specific interconnect nodes
* @name: the node name used in debugfs
* @link_nodes: links associated with this node
* @node: icc_node associated with this node
* @num_links: the total number of @links
* @channels: num of channels at this node
* @buswidth: width of the interconnect between a node and the bus
* @sum_avg: current sum aggregate value of all avg bw requests
* @max_peak: current max aggregate value of all peak bw requests
* @bcms: list of bcms associated with this logical node
* @num_bcms: num of @bcms
* @qosbox: QoS config data associated with node
*/
struct qcom_icc_node {
const char *name;
struct icc_node *node;
u16 num_links;
u16 channels;
u16 buswidth;
u64 sum_avg[QCOM_ICC_NUM_BUCKETS];
u64 max_peak[QCOM_ICC_NUM_BUCKETS];
struct qcom_icc_bcm *bcms[MAX_BCM_PER_NODE];
size_t num_bcms;
const struct qcom_icc_qosbox *qosbox;
struct qcom_icc_node *link_nodes[];
};
/**
* struct qcom_icc_bcm - Qualcomm specific hardware accelerator nodes
* known as Bus Clock Manager (BCM)
* @name: the bcm node name used to fetch BCM data from command db
* @type: latency or bandwidth bcm
* @addr: address offsets used when voting to RPMH
* @vote_x: aggregated threshold values, represents sum_bw when @type is bw bcm
* @vote_y: aggregated threshold values, represents peak_bw when @type is bw bcm
* @vote_scale: scaling factor for vote_x and vote_y
* @enable_mask: optional mask to send as vote instead of vote_x/vote_y
Annotation
- Immediate include surface: `dt-bindings/interconnect/qcom,icc.h`, `linux/regmap.h`.
- Detected declarations: `struct qcom_icc_provider`, `struct bcm_db`, `struct qcom_icc_qosbox`, `struct qcom_icc_node`, `struct qcom_icc_bcm`, `struct qcom_icc_fabric`, `struct qcom_icc_desc`.
- Atlas domain: Driver Families / drivers/interconnect.
- 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.