include/soc/tegra/bpmp.h

Source file repositories/reference/linux-study-clean/include/soc/tegra/bpmp.h

File Facts

System
Linux kernel
Corpus path
include/soc/tegra/bpmp.h
Extension
.h
Size
5274 bytes
Lines
238
Domain
Repository Root And Misc
Bucket
include
Inferred role
Repository Root And Misc: implementation source
Status
source implementation candidate

Why This File Exists

Top-level or miscellaneous repository surface. Use this as map coverage unless a later manual pass promotes the file into a deeper subsystem dossier.

Dependency Surface

Detected Declarations

Annotated Snippet

struct tegra_bpmp_soc {
	struct {
		struct {
			unsigned int offset;
			unsigned int count;
			unsigned int timeout;
		} cpu_tx, thread, cpu_rx;
	} channels;

	const struct tegra_bpmp_ops *ops;
	unsigned int num_resets;
};

struct tegra_bpmp_mb_data {
	u32 code;
	u32 flags;
	u8 data[MSG_DATA_MIN_SZ];
} __packed;

#define tegra_bpmp_mb_read(dst, mb, size) \
	iosys_map_memcpy_from(dst, mb, offsetof(struct tegra_bpmp_mb_data, data), size)

#define tegra_bpmp_mb_write(mb, src, size) \
	iosys_map_memcpy_to(mb, offsetof(struct tegra_bpmp_mb_data, data), src, size)

#define tegra_bpmp_mb_read_field(mb, field) \
	iosys_map_rd_field(mb, 0, struct tegra_bpmp_mb_data, field)

#define tegra_bpmp_mb_write_field(mb, field, value) \
	iosys_map_wr_field(mb, 0, struct tegra_bpmp_mb_data, field, value)

struct tegra_bpmp_channel {
	struct tegra_bpmp *bpmp;
	struct iosys_map ib;
	struct iosys_map ob;
	struct completion completion;
	struct tegra_ivc *ivc;
	unsigned int index;
};

typedef void (*tegra_bpmp_mrq_handler_t)(unsigned int mrq,
					 struct tegra_bpmp_channel *channel,
					 void *data);

struct tegra_bpmp_mrq {
	struct list_head list;
	unsigned int mrq;
	tegra_bpmp_mrq_handler_t handler;
	void *data;
};

struct tegra_bpmp {
	const struct tegra_bpmp_soc *soc;
	struct device *dev;
	void *priv;

	struct {
		struct mbox_client client;
		struct mbox_chan *channel;
	} mbox;

	spinlock_t atomic_tx_lock;
	struct tegra_bpmp_channel *tx_channel, *rx_channel, *threaded_channels;

	struct {
		unsigned long *allocated;
		unsigned long *busy;
		unsigned int count;
		struct semaphore lock;
	} threaded;

	struct list_head mrqs;
	spinlock_t lock;

	struct tegra_bpmp_clk **clocks;
	unsigned int num_clocks;

	struct reset_controller_dev rstc;

	struct genpd_onecell_data genpd;

#ifdef CONFIG_DEBUG_FS
	struct dentry *debugfs_mirror;
#endif

	bool suspended;
};

#define TEGRA_BPMP_MESSAGE_RESET BIT(0)

Annotation

Implementation Notes