drivers/interconnect/imx/imx.h

Source file repositories/reference/linux-study-clean/drivers/interconnect/imx/imx.h

File Facts

System
Linux kernel
Corpus path
drivers/interconnect/imx/imx.h
Extension
.h
Size
2772 bytes
Lines
114
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.

Dependency Surface

Detected Declarations

Annotated Snippet

struct imx_icc_provider {
	void __iomem *noc_base;
	struct icc_provider provider;
};

/*
 * struct imx_icc_node_adj - Describe a dynamic adjustable node
 */
struct imx_icc_node_adj_desc {
	unsigned int bw_mul, bw_div;
	const char *phandle_name;
	bool main_noc;
};

/*
 * struct imx_icc_node - Describe an interconnect node
 * @name: name of the node
 * @id: an unique id to identify the node
 * @links: an array of slaves' node id
 * @num_links: number of id defined in links
 */
struct imx_icc_node_desc {
	const char *name;
	u16 id;
	u16 links[IMX_ICC_MAX_LINKS];
	u16 num_links;
	const struct imx_icc_node_adj_desc *adj;
};

/*
 * struct imx_icc_noc_setting - Describe an interconnect node setting
 * @reg: register offset inside the NoC
 * @prio_level: priority level
 * @mode: functional mode
 * @ext_control: external input control
 */
struct imx_icc_noc_setting {
	u32 reg;
	u32 prio_level;
	u32 mode;
	u32 ext_control;
};

#define DEFINE_BUS_INTERCONNECT(_name, _id, _adj, ...)			\
	{								\
		.id = _id,						\
		.name = _name,						\
		.adj = _adj,						\
		.num_links = COUNT_ARGS(__VA_ARGS__),			\
		.links = { __VA_ARGS__ },				\
	}

#define DEFINE_BUS_MASTER(_name, _id, _dest_id)				\
	DEFINE_BUS_INTERCONNECT(_name, _id, NULL, _dest_id)

#define DEFINE_BUS_SLAVE(_name, _id, _adj)				\
	DEFINE_BUS_INTERCONNECT(_name, _id, _adj)

int imx_icc_register(struct platform_device *pdev,
		     struct imx_icc_node_desc *nodes,
		     int nodes_count,
		     struct imx_icc_noc_setting *noc_settings);
void imx_icc_unregister(struct platform_device *pdev);

#endif /* __DRIVERS_INTERCONNECT_IMX_H */

Annotation

Implementation Notes