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.
148 lines
4.6 KiB
C
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;
|
|
}
|