yb_arm/osp/src/ospDiag.c

164 lines
3.4 KiB
C
Raw Normal View History

2023-07-12 14:14:31 +08:00
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <signal.h>
#include "osp.h"
uint64_t *g_DiagCntBase = 0;
#define OSP_DIAGCNT_LEN (10*1024)
static OSP_TASKCB *TaskCBBase;
/**************************************************************************
**************************************************************************/
int32_t osp_diag_cnt_init(void)
{
g_DiagCntBase = (uint64_t *)osp_get_init_mem(OSP_MAX_TASK * sizeof(uint64_t) * CNT_NUM_PER_TASK);
memset(g_DiagCntBase, 0, OSP_MAX_TASK * sizeof(uint64_t) * CNT_NUM_PER_TASK);
TaskCBBase = osp_get_taskcb_base();
return OSP_OK;
}
OSP_STATUS osp_diag_cnt_add(uint32_t TaskId, uint32_t CntId)
{
TASK_CNT_ADD(TaskId, CntId);
return OSP_OK;
}
OSP_STATUS osp_diag_cnt_set(uint32_t TaskId, uint32_t CntId, uint64_t Val)
{
TASK_CNT_SET(TaskId, CntId,Val);
return OSP_OK;
}
uint64_t osp_diag_cnt_get(uint32_t TaskId, uint32_t CntId)
{
return TASK_CNT_GET(TaskId, CntId);
}
OSP_STATUS osp_show_tsk_diag_cnt(uint32_t TaskId)
{
char *pstr = NULL;
uint32_t len = OSP_DIAGCNT_LEN;
uint32_t tmplen = 0;
// OSP_STATUS ret;
if (!TaskCBBase[TaskId].Active)
{
osp_debug_out(CMD_DEBUG_LEVEL, "Task:%d is not active\n", TaskId);
return OSP_ERROR;
}
pstr = malloc(len);
osp_assert(NULL != pstr);
tmplen = (uint32_t)sprintf(pstr, "%-16s%-16s%-16s\r\n", "OspTaskId", "OspCntIdx", "OspCntValue");
tmplen += osp_diag_cnt_str(TaskId, pstr + tmplen, len - tmplen);
pstr[tmplen] = '\0';
osp_debug_out(CMD_DEBUG_LEVEL, "%s", pstr);
free(pstr);
return OSP_OK;
}
OSP_STATUS osp_show_all_diag_cnt(void)
{
char *pstr = NULL;
uint32_t len = OSP_DIAGCNT_LEN;
uint32_t tmplen = 0;
// U32 outlen = 0;
// OSP_STATUS ret;
uint32_t TaskId;
pstr = malloc(len);
osp_assert(NULL != pstr);
tmplen = (uint32_t)sprintf(pstr, "%-16s%-16s%-16s\r\n", "OspTaskId", "OspCntIdx", "OspCntValue");
for (TaskId = 0; TaskId < OSP_MAX_TASK; TaskId++)
{
if (!TaskCBBase[TaskId].Active)
{
continue;
}
tmplen += osp_diag_cnt_str(TaskId, pstr + tmplen, len - tmplen);
}
pstr[tmplen] = '\0';
osp_debug_out(CMD_DEBUG_LEVEL, "%s", pstr);
free(pstr);
return OSP_OK;
}
uint32_t osp_diag_cnt_str(uint32_t TaskId, char *pstr, uint32_t inlen)
{
uint32_t CntId = 0;
uint32_t len = 0;
uint64_t CntVal;
if ((!TaskCBBase[TaskId].Active) || (NULL == pstr) || (0 == inlen))
{
osp_assert(0);
}
for (CntId = 0; CntId < CNT_NUM_PER_TASK; CntId++)
{
CntVal = TASK_CNT_GET(TaskId,CntId);
if (0 == CntVal)
{
continue;
}
if (inlen-len < 64)
{
osp_assert(0);
}
len += sprintf(pstr + len,"%-16d%-16d%-16lu\r\n", TaskId, CntId, CntVal);
}
return len;
}
/**************************************************************************
**************************************************************************/
int32_t osp_diag_init(void)
{
int32_t ret ;
ret = osp_diag_cnt_init();
if (OSP_OK != ret)
{
return ret;
}
return OSP_OK;
}
/**************************************************************************
**************************************************************************/
int32_t osp_show_que_status(void)
{
return OSP_OK;
}