162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * DMA-BUF: dmabuf usage of all processes statistics.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#ifndef __DMA_BUF_PROCESS_INFO_H
962306a36Sopenharmony_ci#define __DMA_BUF_PROCESS_INFO_H
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#ifdef CONFIG_DMABUF_PROCESS_INFO
1262306a36Sopenharmony_ci/**
1362306a36Sopenharmony_ci * init_dma_buf_task_info - init exp_pid and exp_task_comm of dma_buf
1462306a36Sopenharmony_ci * @buf:	[in]	pointer to struct dma_buf. If @buf IS_ERR_OR_NULL,
1562306a36Sopenharmony_ci *		return with doing nothing.
1662306a36Sopenharmony_ci */
1762306a36Sopenharmony_civoid init_dma_buf_task_info(struct dma_buf *buf);
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci/**
2062306a36Sopenharmony_ci * dma_buf_exp_pid - return exp_pid of @buf
2162306a36Sopenharmony_ci * @buf:	[in]	pointer to struct dma_buf
2262306a36Sopenharmony_ci *
2362306a36Sopenharmony_ci * Return 0 if @buf IS_ERR_OR_NULL, else return buf->exp_pid
2462306a36Sopenharmony_ci */
2562306a36Sopenharmony_cipid_t dma_buf_exp_pid(const struct dma_buf *buf);
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci/**
2862306a36Sopenharmony_ci * dma_buf_exp_task_comm - return exp_task_comm of @buf
2962306a36Sopenharmony_ci * @buf:	[in]	pointer to struct dma_buf
3062306a36Sopenharmony_ci *
3162306a36Sopenharmony_ci * Return NULL if @buf IS_ERR_OR_NULL, else return buf->exp_task_comm
3262306a36Sopenharmony_ci */
3362306a36Sopenharmony_ciconst char *dma_buf_exp_task_comm(const struct dma_buf *buf);
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci/**
3662306a36Sopenharmony_ci * dma_buf_process_info_init_procfs - module init: create node in procfs
3762306a36Sopenharmony_ci */
3862306a36Sopenharmony_civoid dma_buf_process_info_init_procfs(void);
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci/**
4162306a36Sopenharmony_ci * dma_buf_process_info_uninit_procfs - module exit: remove node in procfs
4262306a36Sopenharmony_ci */
4362306a36Sopenharmony_civoid dma_buf_process_info_uninit_procfs(void);
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ci/**
4662306a36Sopenharmony_ci * dma_buf_process_info_init_debugfs - create debug node under @parent
4762306a36Sopenharmony_ci * in debugfs.
4862306a36Sopenharmony_ci * @parent:	[in]	pointer to struct dentry. If @parent IS_ERR_OR_NULL,
4962306a36Sopenharmony_ci *		return -EINVAL
5062306a36Sopenharmony_ci *
5162306a36Sopenharmony_ci * Return 0 if success, otherwise return errno.
5262306a36Sopenharmony_ci *
5362306a36Sopenharmony_ci * Note that there is no related uninit function, since the debug node will
5462306a36Sopenharmony_ci * be removed in dma_buf_uninit_debugfs() when dma_buf_deinit() called.
5562306a36Sopenharmony_ci */
5662306a36Sopenharmony_ciint dma_buf_process_info_init_debugfs(struct dentry *parent);
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci#else /* CONFIG_DMABUF_PROCESS_INFO */
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_cistatic inline void init_dma_buf_task_info(struct dma_buf *buf) {}
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_cistatic inline pid_t dma_buf_exp_pid(const struct dma_buf *buf)
6362306a36Sopenharmony_ci{
6462306a36Sopenharmony_ci	return 0;
6562306a36Sopenharmony_ci}
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_cistatic inline const char *dma_buf_exp_task_comm(const struct dma_buf *buf)
6862306a36Sopenharmony_ci{
6962306a36Sopenharmony_ci	return NULL;
7062306a36Sopenharmony_ci}
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_cistatic inline void dma_buf_process_info_init_procfs(void) {}
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_cistatic inline void dma_buf_process_info_uninit_procfs(void) {}
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_cistatic inline int
7762306a36Sopenharmony_cidma_buf_process_info_init_debugfs(struct dentry *parent)
7862306a36Sopenharmony_ci{
7962306a36Sopenharmony_ci	return 0;
8062306a36Sopenharmony_ci}
8162306a36Sopenharmony_ci#endif /* CONFIG_DMABUF_PROCESS_INFO */
8262306a36Sopenharmony_ci#endif /* __DMA_BUF_PROCESS_INFO_H */
8362306a36Sopenharmony_ci
84