Files
SDK_SG200x_V2/osdrv/interdrv/v2/base/cvi_vb_proc.c
carbon 0545e9dc6d init version 2024-05-07
commit d1edce71135cc6d98c0a4b5729774542b676e769
Author: sophgo-forum-service <forum_service@sophgo.com>
Date:   Fri Mar 15 16:07:33 2024 +0800

    [fix] recommend using ssh method to clone repo.
    [fix] fix sensor driver repo branch name.
2024-05-07 19:36:36 +08:00

148 lines
4.6 KiB
C

#include "cvi_vb_proc.h"
#define VB_PROC_NAME "vb"
#define VB_PROC_PERMS (0644)
/*************************************************************************
* VB proc functions
*************************************************************************/
static int32_t _get_vb_modIds(struct vb_pool *pool, uint32_t blk_idx, uint64_t *modIds)
{
uint64_t phyAddr;
VB_BLK blk;
phyAddr = pool->memBase + (blk_idx * pool->blk_size);
blk = vb_physAddr2Handle(phyAddr);
if (blk == VB_INVALID_HANDLE)
return -EINVAL;
*modIds = ((struct vb_s*)blk)->mod_ids;
return 0;
}
static void _show_vb_status(struct seq_file *m)
{
uint32_t i, j, k;
uint32_t mod_sum[CVI_ID_BUTT];
int32_t ret;
uint64_t modIds;
struct vb_pool *pstVbPool = NULL;
seq_printf(m, "\nModule: [VB], Build Time[%s]\n", UTS_VERSION);
seq_puts(m, "-----VB PUB CONFIG-----------------------------------------------------------------------------------------------------------------\n");
seq_printf(m, "%10s(%3d), %10s(%3d)\n", "MaxPoolCnt", vb_max_pools, "MaxBlkCnt", vb_pool_max_blk);
ret = vb_get_pool_info(&pstVbPool);
if (ret != 0) {
seq_puts(m, "vb_pool has not inited yet\n");
return;
}
seq_puts(m, "\n-----COMMON POOL CONFIG------------------------------------------------------------------------------------------------------------\n");
for (i = 0; i < vb_max_pools ; ++i) {
if (pstVbPool[i].memBase != 0) {
seq_printf(m, "%10s(%3d)\t%10s(%12d)\t%10s(%3d)\n"
, "PoolId", i, "Size", pstVbPool[i].blk_size, "Count", pstVbPool[i].blk_cnt);
}
}
seq_puts(m, "\n-----------------------------------------------------------------------------------------------------------------------------------\n");
for (i = 0; i < vb_max_pools; ++i) {
if (pstVbPool[i].memBase != 0) {
mutex_lock(&pstVbPool[i].lock);
seq_printf(m, "%-10s: %s\n", "PoolName", pstVbPool[i].acPoolName);
seq_printf(m, "%-10s: %d\n", "PoolId", pstVbPool[i].poolID);
seq_printf(m, "%-10s: 0x%llx\n", "PhysAddr", pstVbPool[i].memBase);
seq_printf(m, "%-10s: 0x%lx\n", "VirtAddr", (uintptr_t)pstVbPool[i].vmemBase);
seq_printf(m, "%-10s: %d\n", "IsComm", pstVbPool[i].bIsCommPool);
seq_printf(m, "%-10s: %d\n", "Owner", pstVbPool[i].ownerID);
seq_printf(m, "%-10s: %d\n", "BlkSz", pstVbPool[i].blk_size);
seq_printf(m, "%-10s: %d\n", "BlkCnt", pstVbPool[i].blk_cnt);
seq_printf(m, "%-10s: %d\n", "Free", pstVbPool[i].u32FreeBlkCnt);
seq_printf(m, "%-10s: %d\n", "MinFree", pstVbPool[i].u32MinFreeBlkCnt);
seq_puts(m, "\n");
memset(mod_sum, 0, sizeof(mod_sum));
seq_puts(m, "BLK\tBASE\tVB\tSYS\tRGN\tCHNL\tVDEC\tVPSS\tVENC\tH264E\tJPEGE\tMPEG4E\tH265E\tJPEGD\tVO\tVI\tDIS\n");
seq_puts(m, "RC\tAIO\tAI\tAO\tAENC\tADEC\tAUD\tVPU\tISP\tIVE\tUSER\tPROC\tLOG\tH264D\tGDC\tPHOTO\tFB\n");
for (j = 0; j < pstVbPool[i].blk_cnt; ++j) {
seq_printf(m, "%s%d\t", "#", j);
if (_get_vb_modIds(&pstVbPool[i], j, &modIds) != 0) {
for (k = 0; k < CVI_ID_BUTT; ++k) {
seq_puts(m, "e\t");
if (k == CVI_ID_DIS || k == CVI_ID_FB)
seq_puts(m, "\n");
}
continue;
}
for (k = 0; k < CVI_ID_BUTT; ++k) {
if (modIds & BIT(k)) {
seq_puts(m, "1\t");
mod_sum[k]++;
} else
seq_puts(m, "0\t");
if (k == CVI_ID_DIS || k == CVI_ID_FB)
seq_puts(m, "\n");
}
}
seq_puts(m, "Sum\t");
for (k = 0; k < CVI_ID_BUTT; ++k) {
seq_printf(m, "%d\t", mod_sum[k]);
if (k == CVI_ID_DIS || k == CVI_ID_FB)
seq_puts(m, "\n");
}
mutex_unlock(&pstVbPool[i].lock);
seq_puts(m, "\n-----------------------------------------------------------------------------------------------------------------------------------\n");
}
}
}
static int _vb_proc_show(struct seq_file *m, void *v)
{
_show_vb_status(m);
return 0;
}
static int _vb_proc_open(struct inode *inode, struct file *file)
{
return single_open(file, _vb_proc_show, NULL);
}
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 10, 0))
static const struct proc_ops _vb_proc_fops = {
.proc_open = _vb_proc_open,
.proc_read = seq_read,
.proc_lseek = seq_lseek,
.proc_release = single_release,
};
#else
static const struct file_operations _vb_proc_fops = {
.owner = THIS_MODULE,
.open = _vb_proc_open,
.read = seq_read,
.llseek = seq_lseek,
.release = single_release,
};
#endif
int vb_proc_init(struct proc_dir_entry *_proc_dir)
{
int rc = 0;
/* create the /proc file */
if (proc_create_data(VB_PROC_NAME, VB_PROC_PERMS, _proc_dir, &_vb_proc_fops, NULL) == NULL) {
CVI_TRACE_BASE(CVI_BASE_DBG_ERR, "vb proc creation failed\n");
rc = -1;
}
return rc;
}
int vb_proc_remove(struct proc_dir_entry *_proc_dir)
{
remove_proc_entry(VB_PROC_NAME, _proc_dir);
return 0;
}