⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sec2_diag.c

📁 freescale ppc sec2加解密单元驱动
💻 C
📖 第 1 页 / 共 4 页
字号:
/************************************************************************
* 版权所有 (C)2005, 深圳市中兴通讯股份有限公司。
*
* 文件名称: sec2_diag.c
* 文件标识: 见配置管理计划书
* 内容摘要: sec2诊断测试
* 其它说明:
* 当前版本: V1.0
* 作    者: 陈晓
* 完成日期: 2007年03月27日
*
* 修改记录1:
*    修改日期:
*    版 本 号:
*    修 改 人:陈 晓
*    修改内容:创 建
* 修改记录2:…
************************************************************************
*
*/
#include "sec2_diag.h"

diag_sec2_internal* diag_sec2 = (diag_sec2_internal*)NULL;

int drv_Sec2RegisterDiag(void)
{
    return diag_prjIntfCardCtrlRegist((UINT32)20, diag_prjSec2Parse, drv_Sec2Diag);
}


/******************************************************
 Function:
  diag_prjSec2Parse()

 Description:
  Sec2诊断参数解析函数
 Inputs:
  pMsg OAM消息
  pLe1veParam 项目诊断参数
 Outputs:

 Returns:
   OK or ERROR
 Remarks:
  *******************************************************/
int diag_prjSec2Parse(MSG_COMM_OAM   *pMsg, diagPrjParam *pSec2Param)
{
   DIAG_TRACE(DIAG_NORMAL_FN_ID,"diag_prjSec2Parse --",0,0,0,0,0,0);
   if(NULL== pMsg || NULL == pSec2Param)
   {
      DIAG_TRACE(DIAG_ERR_FN_ID,"diag_prjSec2Parse --Null Pointer",0,0,0,0,0,0);
      return ERROR;
   }
   pSec2Param->IntfCard.diagSubType = DIAG_TYPE_GET((unsigned int)pMsg->CmdID);
   pSec2Param->IntfCard.slotNum = 20;
   return OK;   
}

/******************************************************
 Function:
  drv_lce1fDiag()

 Description:
  CE1诊断入口函数
 Inputs:
  pdiagPrjParam 诊断参数指针
  ret_buffer 回显字符串指针
 Outputs:
  *ret_buffer 

 Returns:
   OK or ERROR
 Remarks:
  *******************************************************/
int drv_Sec2Diag(diagPrjParam *pdiagPrjParam, char **ret_buffer)
{
    char  *tempbuf= (char  *)NULL;
    
    if((char *)NULL ==(tempbuf = (char *)DIAG_ALLOC(2*DIAG_BUFFER_SIZE)))
    {
        return ERROR;
    }
    memset(tempbuf,0,2*DIAG_BUFFER_SIZE);
    
    /*分配内存*/
    switch(pdiagPrjParam->IntfCard.diagSubType)
    {
        case DIAG_PRJ_CARD_BASICINFO:
            drv_Sec2ShowCardInfo(tempbuf);
            break;
        case DIAG_PRJ_CARD_CPLD:
            drv_Sec2ShowCPLD(tempbuf);
            break;       
        case DIAG_PRJ_CARD_FPGA:
            drv_Sec2ShowFPGA(tempbuf);
            break;
        case DIAG_PRJ_CARD_BUFFER:
            drv_Sec2ShowBuffer(tempbuf);
            break;
        case DIAG_SEC2_INTERNAL:
            drv_Sec2Diaginternal(tempbuf);
            break;         
        default :
            break;
    }
    
    (*ret_buffer) = tempbuf; 
    
    return OK;
}

void Sec2_coreId_Identity(char *buffer)
{
    char* coreID;
    
    sec2_coremask = *((volatile unsigned long *)(sec2_IOBaseAddress + IDENTIFICATION_OFFSET) + 1);

    switch(sec2_coremask)
    {
        case SEC_COREID_2_0_0:
        case SEC_COREID_2_0_1:
            coreID = "2.0.0";
            break;
        
        case SEC_COREID_2_1_0:
            coreID = "2.1.0";
            break;
        
        default:
            coreID = "unknown";
            break;
    }

    sprintf((buffer+strlen(buffer)),"Security Core Version Mask: %s (0x%lx)\n\n",coreID,sec2_coremask);

}

int drv_Sec2ShowCPLD(char *buffer)
{
    sprintf( buffer,"\n========\tSec2 Core Info begin\t ========\n");
    sprintf((buffer+strlen(buffer)),"No CPLD On sec2 core\n");
    sprintf((buffer+strlen(buffer)),"\n========\tSec2 Core Info end\t ========\n");
    return OK;
}

int drv_Sec2ShowFPGA(char *buffer)
{
    sprintf( buffer,"\n========\tSec2 Core Info begin\t ========\n");
    sprintf((buffer+strlen(buffer)),"No FPGA On sec2 core\n");
    sprintf((buffer+strlen(buffer)),"\n========\tSec2 Core Info end\t ========\n");
    return OK;
}

/******************************************************
 Function:
  drv_Sec2ShowCardInfo()

 Description:
  Sec2诊断,显示单板基本信息
 Inputs:
  slotNum 槽位号
  buffer 字符串回显
 Outputs:
  buffer

 Returns:
   OK or ERROR
 Remarks:
  *******************************************************/
int drv_Sec2ShowCardInfo(char *buffer)
{
    int sec2_channel;
    int cha;

    sprintf(buffer,"\n========\tSec2 Core Info begin\t ========\n");

	Sec2_coreId_Identity(buffer);
    
    /*打印PM7366的寄存器的数值*/
    sprintf((buffer+strlen(buffer)),"\nSec2 Regiter Value:\n");
    
    sprintf((buffer+strlen(buffer)),"sec2_IOBaseAddress(0x0)(low) :0x%lx\n",(sec2_IOBaseAddress));
    sprintf((buffer+strlen(buffer)),"sec2_ChaAssignmentStatusRegister(0x%lx)(low) :0x%lx\n",CHA_ASSIGNMENT_STATUS_OFFSET,*(sec2_ChaAssignmentStatusRegister));
    sprintf((buffer+strlen(buffer)),"sec2_ChaAssignmentStatusRegister(0x%lx)(high):0x%lx\n",CHA_ASSIGNMENT_STATUS_OFFSET,*(sec2_ChaAssignmentStatusRegister+1));
	sprintf((buffer+strlen(buffer)),"sec2_InterruptControlRegister(0x%lx)(low) :0x%lx\n",INTERRUPT_CONTROL_OFFSET,*(sec2_InterruptControlRegister));
	sprintf((buffer+strlen(buffer)),"sec2_InterruptControlRegister(0x%lx)(high):0x%lx\n",INTERRUPT_CONTROL_OFFSET,*(sec2_InterruptControlRegister+1));
	sprintf((buffer+strlen(buffer)),"sec2_InterruptStatusRegister(0x%lx)(low) :x%lx\n",INTERRUPT_STATUS_OFFSET,*(sec2_InterruptStatusRegister));
	sprintf((buffer+strlen(buffer)),"sec2_InterruptStatusRegister(0x%lx)(high):x%lx\n",INTERRUPT_STATUS_OFFSET,*(sec2_InterruptStatusRegister+1));
	sprintf((buffer+strlen(buffer)),"sec2_InterruptClearRegister(0x%lx)(low) :0x%lx\n",INTERRUPT_CLEAR_OFFSET,*(sec2_InterruptClearRegister));
	sprintf((buffer+strlen(buffer)),"sec2_InterruptClearRegister(0x%lx)(high):0x%lx\n",INTERRUPT_CLEAR_OFFSET,*(sec2_InterruptClearRegister+1));
	sprintf((buffer+strlen(buffer)),"sec2_IdRegister(0x%lx)(low) :0x%lx\n",IDENTIFICATION_OFFSET,*(sec2_IdRegister));
	sprintf((buffer+strlen(buffer)),"sec2_IdRegister(0x%lx)(high):0x%lx\n",IDENTIFICATION_OFFSET,*(sec2_IdRegister+1));
	sprintf((buffer+strlen(buffer)),"sec2_MasterControlRegister(0x%lx)(low) :0x%lx\n",SEC2_MASTER_CONTROL_REGISTER,*(sec2_MasterControlRegister));
	sprintf((buffer+strlen(buffer)),"sec2_MasterControlRegister(0x%lx)(high):0x%lx\n",SEC2_MASTER_CONTROL_REGISTER,*(sec2_MasterControlRegister+1));

    sprintf((buffer+strlen(buffer)),"\n");

	for (sec2_channel=0; sec2_channel<SEC2_NUM_CHANNELS; sec2_channel++)
    {
        sprintf((buffer+strlen(buffer)),"sec2_ChannelConfigRegister[%d](0x%lx)(low) :0x%lx\n",sec2_channel,CHANNEL_CONFIG_BASE,*(sec2_ChannelConfigRegister[sec2_channel]));
        sprintf((buffer+strlen(buffer)),"sec2_ChannelConfigRegister[%d](0x%lx)(high):0x%lx\n",sec2_channel,CHANNEL_CONFIG_BASE,*(sec2_ChannelConfigRegister[sec2_channel]+1));
	}
    for (sec2_channel=0; sec2_channel<SEC2_NUM_CHANNELS; sec2_channel++)
    {
        sprintf((buffer+strlen(buffer)),"sec2_ChannelPointerStatusRegister[%d](0x%lx)(low) :0x%lx\n",sec2_channel,CHANNEL_CONFIG_BASE,*(sec2_ChannelConfigRegister[sec2_channel]));
        sprintf((buffer+strlen(buffer)),"sec2_ChannelPointerStatusRegister[%d](0x%lx)(high):0x%lx\n",sec2_channel,CHANNEL_CONFIG_BASE,*(sec2_ChannelConfigRegister[sec2_channel]+1));
    }
    for (sec2_channel=0; sec2_channel<SEC2_NUM_CHANNELS; sec2_channel++)
    {
        sprintf((buffer+strlen(buffer)),"sec2_ChannelDataBufferDescriptorRegister[%d](0x%lx)(low) :0x%lx\n",sec2_channel,CHANNEL_DBR_BASE,*(sec2_ChannelDataBufferDescriptorRegister[sec2_channel]));
        sprintf((buffer+strlen(buffer)),"sec2_ChannelDataBufferDescriptorRegister[%d](0x%lx)(high):0x%lx\n",sec2_channel,CHANNEL_DBR_BASE,*(sec2_ChannelDataBufferDescriptorRegister[sec2_channel]+1));
    }
    
    for (cha=0; cha<NUM_CHAS; cha++)
    {
        sprintf((buffer+strlen(buffer)),"sec2_ChaResetControlRegister[%d](0x%lx)(low) :0x%lx\n",cha,CHA_RESET_CONTROL_BASE,
            *(sec2_ChaResetControlRegister[cha]));
        sprintf((buffer+strlen(buffer)),"sec2_ChaResetControlRegister[%d](0x%lx)(high):0x%lx\n",cha,CHA_RESET_CONTROL_BASE,
            *(sec2_ChaResetControlRegister[cha]+1));
    }

    for (cha=0; cha<NUM_CHAS; cha++)
    {
        sprintf((buffer+strlen(buffer)),"Sec2ChaInterruptStatusRegister[%d](0x%lx)(low) :0x%lx\n",cha,CHA_INTERRUPT_STATUS_BASE,
            *(Sec2ChaInterruptStatusRegister[cha]));
        sprintf((buffer+strlen(buffer)),"Sec2ChaInterruptStatusRegister[%d](0x%lx)(high):0x%lx\n",cha,CHA_INTERRUPT_STATUS_BASE,
            *(Sec2ChaInterruptStatusRegister[cha]+1));
    }

    for (cha=0; cha<NUM_CHAS; cha++)
    {
        sprintf((buffer+strlen(buffer)),"sec2_ChaInterruptControlRegister[%d](0x%lx)(low) :0x%lx\n",cha,CHA_INTERRUPT_CONTROL_BASE,
            *(sec2_ChaInterruptControlRegister[cha]));
        sprintf((buffer+strlen(buffer)),"sec2_ChaInterruptControlRegister[%d](0x%lx)(high):0x%lx\n",cha,CHA_INTERRUPT_CONTROL_BASE,
            *(sec2_ChaInterruptControlRegister[cha]+1));
    }

    sprintf((buffer+strlen(buffer)),"\n");
    sprintf((buffer+strlen(buffer)),"sec2_FreeChannels:0x%lx\n",sec2_FreeChannels);
    sprintf((buffer+strlen(buffer)),"sec2_FreeRngas:0x%lx\n",sec2_FreeRngas);
    sprintf((buffer+strlen(buffer)),"sec2_FreeAfhas:0x%lx\n",sec2_FreeAfhas);
    sprintf((buffer+strlen(buffer)),"sec2_FreeDesas:0x%lx\n",sec2_FreeDesas);
    sprintf((buffer+strlen(buffer)),"sec2_FreeMdhas:0x%lx\n",sec2_FreeMdhas);
    sprintf((buffer+strlen(buffer)),"sec2_FreePkhas:0x%lx\n",sec2_FreePkhas);
    sprintf((buffer+strlen(buffer)),"sec2_FreeAesas:0x%lx\n",sec2_FreeAesas);

    /*结束*/
    sprintf((buffer+strlen(buffer)),"\n========\tSec2 Core Info end\t ========\n");
    
    return OK;
}

/******************************************************
 Function:
  drv_Sec2ShowBuffer()

 Description:
  打印SEC2内核BUFFER 基本信息
 Inputs:
  slotNum 槽位号
  buffer 回显字符串指针
 Outputs:
  buffer 

 Returns:
   OK or ERROR
 Remarks:
  *******************************************************/
int drv_Sec2ShowBuffer(char *buffer)
{
    sprintf(buffer,"\n========\tSec2 Core buffer begin\t ========\n");

	drv_Sec2_Fwd_Queue_sprintf(buffer);

	drv_Sec2_Handle_Queue_sprintf(buffer);

    drv_Sec2_show_Global_stat(buffer);

	drv_Sec2_show_channel_stat(buffer);

	sprintf((buffer+strlen(buffer)),"========\tSec2 Core buffer end\t ========\n");

    return OK;
}

void drv_Sec2_show_channel_stat(char *buffer)
{
    int sec2_channel;

    sprintf((buffer+strlen(buffer)),"\n");

    for(sec2_channel = 0;sec2_channel < SEC2_NUM_CHANNELS; sec2_channel++)
	{
        sprintf((buffer+strlen(buffer)),"Channel[%d] DynamicCnt: 0x%lx\n",sec2_channel,pgsec2_channel_debug[sec2_channel].channel_DynamicCnt);
        sprintf((buffer+strlen(buffer)),"Channel[%d] ErrCnt    : 0x%lx\n",sec2_channel,pgsec2_channel_debug[sec2_channel].channel_ErrCnt);
        sprintf((buffer+strlen(buffer)),"Channel[%d] SuccCnt   : 0x%lx\n",sec2_channel,pgsec2_channel_debug[sec2_channel].channel_SuccCnt);
        sprintf((buffer+strlen(buffer)),"Channel[%d] WaitCnt   : 0x%lx\n",sec2_channel,pgsec2_channel_debug[sec2_channel].channel_WaitCnt);
        sprintf((buffer+strlen(buffer)),"\n");
    }
}

void drv_Sec2_show_Global_stat(char *buffer)
{
    sprintf((buffer+strlen(buffer)),"\nGlobal Pkt in : 0x%lx\n",pgsec2_global_debug->pkt_in);
	sprintf((buffer+strlen(buffer)),"Global Isr out: 0x%lx\n",pgsec2_global_debug->isr_out);
}

void drv_Sec2_diag_clear_stat(void)
{
    int sec2_channel;
    
    pgsec2_global_debug->pkt_in  = 0;
    pgsec2_global_debug->isr_out = 0;
    
    for(sec2_channel = 0;sec2_channel < SEC2_NUM_CHANNELS; sec2_channel++)
	{
        pgsec2_channel_debug[sec2_channel].channel_DynamicCnt = 0;
        pgsec2_channel_debug[sec2_channel].channel_ErrCnt     = 0;
        pgsec2_channel_debug[sec2_channel].channel_SuccCnt    = 0;
        pgsec2_channel_debug[sec2_channel].channel_WaitCnt    = 0;
    }
}

void drv_Sec2_Fwd_Queue_sprintf(char *buffer)
{
    UINT32 loopCnt;
	UINT32 useCnt   = 0;
	UINT32 unuseCnt = 0;
    SEC2_FWD_QUEUE* sec2_queue;
    sec2_queue = gpSec2_fwd_Queue;

    sprintf(buffer+strlen(buffer),"\n======\tSec2 Core fwd queue begin\t ======\n");
    sprintf(buffer+strlen(buffer),"\nindex    use    taskid    \n");

	for(loopCnt = 0; loopCnt < SEC2_FWD_QUEUE_DEPTH; loopCnt ++)
    {
        if(loopCnt < 10)
        {
            sprintf((buffer+strlen(buffer)),"%d ",loopCnt);
        }
        else
        {
            sprintf((buffer+strlen(buffer)),"%d",loopCnt);
        }
        
		if(sec2_queue->used == SEC2_PKT_USED_FLAG)
	    {
	        useCnt++;
            sprintf((buffer+strlen(buffer)),"\t yes");
		}
		else
		{
		    unuseCnt++;
            sprintf((buffer+strlen(buffer)),"\t no");
		}
		sprintf((buffer+strlen(buffer)),"\t0x%x\n",sec2_queue->requestingTaskId);
		
		sec2_queue = gpSec2_fwd_Queue[loopCnt].next;
    }
	
    sprintf((buffer+strlen(buffer)),"fwd queue   used = %d\n",useCnt);
    sprintf((buffer+strlen(buffer)),"fwd queue unused = %d\n",unuseCnt);
    sprintf(buffer+strlen(buffer),"\n======\tSec2 Core fwd queue end\t ======\n");
}

void drv_Sec2_Handle_Queue_sprintf(char *buffer)
{
    int loopCnt;
	UINT32 useCnt   = 0;
    QUEUE_ENTRY* sec2_queue;
    sec2_queue = sec2_Queue;
    
    sprintf(buffer+strlen(buffer),"\n======\tSec2 Core handle queue begin\t ======\n");
	sprintf((buffer+strlen(buffer)),"index    taskid    \n");

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -