Ejemplo n.º 1
1
/*****************************************************************************
 函 数 名  : FC_ACORE_CResetCallback
 功能描述  : FcACore需要注册到底软C核复位接口中的回调函数
 输入参数  : DRV_RESET_CALLCBFUN_MOMENT enParam 指示时复位处理前还是复位成功后
             int userdata                       用户自定义数据
 输出参数  : 无
 返 回 值  : VOS_OK/VOS_ERR
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2013年4月22日
    作    者   : caikai
    修改内容   : 新生成函数

*****************************************************************************/
VOS_INT FC_ACORE_CResetCallback(DRV_RESET_CALLCBFUN_MOMENT enParam, VOS_INT userdata)
{
    VOS_UINT32                   ulResult;


    if ( DRV_RESET_CALLCBFUN_RESET_BEFORE == enParam )      /* 复位处理时调用 */
    {
        FC_ACORE_CResetSendNotify(ID_FC_ACORE_CRESET_START_IND);

        ulResult = VOS_SmP(g_ulFcACoreCResetDoneSem, FC_ACORE_CRESET_TIMEOUT_LEN);
        if (VOS_OK != ulResult)
        {
            FC_LOG1(PS_PRINT_ERROR,
                          "FC_ACORE_CRESET_Callback, wait g_ulFcACoreResetDoneSem timeout! ulResult = %d\r\n", (VOS_INT32)ulResult);

            return VOS_ERR;
        }
    }
    else if ( DRV_RESET_CALLCBFUN_RESET_AFTER == enParam )   /* 复位成功后调用 */
    {
        FC_ACORE_CResetSendNotify(ID_FC_ACORE_CRESET_END_IND);
    }
    else
    {
        FC_LOG(PS_PRINT_ERROR,"FC_ACORE_CResetCallback, enParam invalid !\n");
        return VOS_ERR;
    }

    return VOS_OK;
}
VOS_VOID PPM_PortPseudoSyncGetSmp(OM_PROT_HANDLE_ENUM_UINT32 enHandle)
{
#if 0
    if (OM_USB_IND_PORT_HANDLE == enHandle)
    {
        if (VOS_OK != VOS_SmP(g_stUsbIndPseudoSync.ulPseudoSyncSemId, 0))
        {
            g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBIndPseudoSyncFailNum++;
            g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBIndPseudoSyncFailSlice = OM_GetSlice();
        }
    }
    else if (OM_USB_CFG_PORT_HANDLE == enHandle)
    {
        if (VOS_OK != VOS_SmP(g_stUsbCfgPseudoSync.ulPseudoSyncSemId, 0))
        {
            g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBCnfPseudoSyncFailNum++;
            g_stAcpuDebugInfo.astPortInfo[enHandle].ulUSBCnfPseudoSyncFailSlice = OM_GetSlice();
        }
    }
    else
    {
        ;
    }
#endif
    return;
}
Ejemplo n.º 3
0
VOS_VOID diag_PortAddToDataBuf(DIAG_PORT_PHY_BEAR_ENUM enPort, VOS_UINT8 * data, VOS_UINT32 dataSize)
{
    DIAG_PORT_DATA_BUF_STRU * pNewNode = NULL;

    /*申请一个节点大小*/
    pNewNode = (DIAG_PORT_DATA_BUF_STRU *)VOS_MemAlloc(MSP_PID_DIAG_APP_AGENT, DYNAMIC_MEM_PT, sizeof(DIAG_PORT_DATA_BUF_STRU));
    if (NULL == pNewNode)
    {
        diag_printf("%s: alloc mem for new node fail\n", __FUNCTION__);
        return;
    }

    /*申请数据空间*/
    pNewNode->dataBuf = (VOS_UINT8 *)VOS_MemAlloc(MSP_PID_DIAG_APP_AGENT, DYNAMIC_MEM_PT, dataSize);
    if (NULL == pNewNode->dataBuf)
    {
        diag_printf("%s: alloc mem for data buf fail\n", __FUNCTION__);
        return;
    }
    pNewNode->port     = enPort;
    pNewNode->dataLen  = dataSize;
    VOS_MemCpy(pNewNode->dataBuf, data, dataSize);

    (VOS_VOID)VOS_SmP(g_diagPortSem,0);
    /* 插入节点到链表尾部 */
    blist_add_tail(&pNewNode->dataList, &g_diagPortDataBuf.dataList);
    (VOS_VOID)VOS_SmV(g_diagPortSem);
}
int RingBuffer_Put(RingBuffer *rb, void *element)
{
	int end, retval;

#ifdef RING_BUFFER_THREAD_SAFE
	VOS_SmP(rb->sem, 50);
#endif
	end = (rb->start + rb->count) % rb->size;
	memcpy(rb->buffer + end * rb->element_size, element, rb->element_size);
	if (RingBuffer_IsFull(rb))
	{
		rb->start = (rb->start + 1) % rb->size; /* full, overwrite */
		retval = RING_BUFFER_OVERWRITE;
	}
	else
	{
		++rb->count;
		retval = RING_BUFFER_NORMAL;
	}
#ifdef RING_BUFFER_THREAD_SAFE
	VOS_SmV(rb->sem);
#endif

	return retval;
}
VOS_VOID IMM_RbRxFreeMemTask(VOS_VOID)
{

    /* 解决UT死循环问题 */
#ifdef __UT_CENTER__
    VOS_UINT32                          ulLoop;
#endif

    IMM_RbRxFreeMemTaskInit();

#ifndef __UT_CENTER__
    for ( ; ; )
#else
    for (ulLoop = 0; ulLoop < 1; ulLoop++)
#endif
    {
        /* semphore take g_stImcLinuxManageEntity.ulRatRxRelSkBuffSem */
        if(VOS_OK != VOS_SmP(g_ulImmMemRbFreeSem, 0))
        {
            IMM_LOG(UEPS_PID_IMM_RB_FREE, IMM_PRINT_ERROR, "IMM_RB, IMM_RbRxFreeMemTask : ERROR : VOS_SmP Failed!\n");
            continue;
        }

        /* 释放 */
        IMM_RbMemFreeFromQue();

#if ( FEATURE_ON == FEATURE_IMM_MEM_DEBUG )
    IMM_MntnRptPoolLeakInfo();
#endif
    }

}/* IMM_RbRxFreeMemTask */
/*****************************************************************************
 Prototype      : PPM_SockATComSend
 Description    : 提供给上层AT发送数据的接口.
 Input          : pucVirAddr:   数据虚地址
                  pucPhyAddr:   数据实地址
                  ulLength:     数据长度
 Output         : void
 Return Value   : VOS_ERR  - 发送失败
                  VOS_OK   - 发送成功

 History        : ---
    Date        : 2014-05-29
    Author      : h59254
    Modification: Created function
 *****************************************************************************/
VOS_INT32 PPM_SockATComSend(VOS_UINT8* pucVirAddr, VOS_UINT8 *pucPhyAddr, VOS_UINT16 uslength)
{
    SOCKET socket;
    VOS_INT nSndNum;

    if (VOS_FALSE == g_ulSockATInitState)
    {
        return VOS_ERR;
    }

    (VOS_VOID)VOS_SmP(g_astSockInfo[SOCKET_AT].SmClose, 0);

    socket = g_astSockInfo[SOCKET_AT].socket;

    if (SOCK_NULL == socket)
    {
        VOS_SmV(g_astSockInfo[SOCKET_AT].SmClose);

        return VOS_ERR;
    }

    /* 调用send将数据通过socket发送出去,走TCP */
    nSndNum = send(socket, pucVirAddr, uslength, 0);

    VOS_SmV(g_astSockInfo[SOCKET_AT].SmClose);

    if (nSndNum != uslength)
    {
        return VOS_ERR;
    }

    return VOS_OK;
}
L4A_RX_INFO_STRU* l4a_GetExeCmdNode(VOS_UINT32 ulMsgId,VOS_UINT32 ulFlag)
{
    LIST_S* pHeadNode = NULL;
    L4A_RX_INFO_STRU* pTempNode = NULL;
    LIST_S* me = NULL;

    /* 获取链表头 */
    pHeadNode= l4a_GetNodeHead();

    /*添加信号量保护*/
    /* coverity[check_return] */
    VOS_SmP(g_ulL4aNodeSem,0);

    /* 在链表中查找每个子命令结点*/
    blist_for_each(me, pHeadNode)
    {
        pTempNode = blist_entry(me, L4A_RX_INFO_STRU, HiL4aList);
        
        L4A_INFO_LOG("%s, msgid req 0x%x, cnf 0x%x.\n",__FUNCTION__, pTempNode->ulReqMsgId, pTempNode->ulCnfMsgId);

        /* 找到需要的节点*/
        if (((L4A_REQ_FLAG == ulFlag)&&(ulMsgId == pTempNode->ulReqMsgId))|| \
            ((L4A_CNF_FLAG == ulFlag)&&(ulMsgId == pTempNode->ulCnfMsgId)))
        {
            VOS_SmV(g_ulL4aNodeSem);
            return pTempNode;
        }

    }
/*****************************************************************************
 Prototype      : PPM_SockOMIndComSend
 Description    : 提供给上层OM 主动上报数据发送的接口.
 Input          : pucVirAddr:   数据虚地址
                  pucPhyAddr:   数据实地址
                  ulLength:     数据长度
 Output         : void
 Return Value   : VOS_ERR  - 发送失败
                  VOS_OK   - 发送成功

 History        : ---
    Date        : 2014-05-29
    Author      : h59254
    Modification: Created function
 *****************************************************************************/
VOS_INT32 PPM_SockOMIndComSend(VOS_UINT8 *pucVirAddr, VOS_UINT8 *pucPhyAddr, VOS_UINT16 uslength)
{
    SOCKET                              socket;
    VOS_INT                             nSndNum;
    struct sockaddr_in                  stToAddr;

    (VOS_VOID)VOS_SmP(g_astSockInfo[SOCKET_OM_IND].SmClose, 0);

    socket = g_astSockInfo[SOCKET_OM_IND].socket;

    if (SOCK_NULL == socket)
    {
        VOS_SmV(g_astSockInfo[SOCKET_OM_IND].SmClose);

        return VOS_ERR;
    }

    VOS_MemSet(&stToAddr, 0, sizeof(stToAddr));
    stToAddr.sin_family = AF_INET;
    stToAddr.sin_addr.s_addr = inet_addr(SOCK_WIFI_DEFAULT_ADDR);
    /* 目的端口 */
    stToAddr.sin_port = htons(SOCK_OM_IND_DST_PORT_NUM);

    /* 调用send将数据通过socket发送出去,走UDP */
    nSndNum = sendto(socket, pucVirAddr, uslength, 0, &stToAddr, sizeof(stToAddr));

    VOS_SmV(g_astSockInfo[SOCKET_OM_IND].SmClose);

    if (nSndNum != uslength)
    {
        return VOS_ERR;
    }

    return VOS_OK;
}
Ejemplo n.º 9
0
VOS_VOID CSD_DL_ProcDataTask(VOS_VOID)
{
    VOS_UINT32                         *pulDownLinkSem;

    pulDownLinkSem = CSD_GetDownLinkDataSem();

    for ( ; ; )
    {

        /* 获取下行取数据信号量 */
        if (VOS_OK != VOS_SmP( *pulDownLinkSem, 0 ))
        {
            CSD_NORMAL_LOG(ACPU_PID_CSD,
                "CSD_DL_ProcDataTask:: VOS_SmP pulDownLinkSem then continue !");


#ifdef __PC_UT__
            break;
#else
            continue;
#endif
        }

        /*获取当前是否挂断电话*/
        if (AT_CSD_CALL_STATE_ON != CSD_GetCallState())
        {
            /*释放数据*/
            CSD_DL_ClearData();
#if 0
            /*使能中断*/
            DICC_EnableIsr(ACPU_PID_CSD,
                           DICC_SERVICE_TYPE_CSD_DATA,
                           DICC_CPU_ID_ACPU);
#endif

            CSD_ERROR_LOG(ACPU_PID_CSD,
                          "CSD_DL_ProcDataTask:: AT_CSD_CALL_STATE_OFF Receive ISR");


#ifdef __PC_UT__
            break;
#else
            continue;
#endif

        }

        CSD_DL_SendData();
#if 0
        /* 使能中断 */
        DICC_EnableIsr(ACPU_PID_CSD,
                       DICC_SERVICE_TYPE_CSD_DATA,
                       DICC_CPU_ID_ACPU);
#endif
#ifdef __PC_UT__
            break;
#endif
    }
}
Ejemplo n.º 10
0
VOS_UINT32 OM_StopLogSaveReq(APP_OM_MSG_EX_STRU *pstAppToOmMsg,
                                            VOS_UINT16 usReturnPrimId)
{
    VOS_UINT32 ulResult = VOS_ERR;

    /* 获取校准结果 */
    ulResult = *(VOS_UINT32*)(pstAppToOmMsg->aucPara);

    if ( LOG_FILE_DISABLE == g_ulLogFileSaveFlg )
    {
        OM_SendResult(pstAppToOmMsg->ucFuncType, ulResult, usReturnPrimId);

        return VOS_OK;
    }

    /* 对临界资源g_stLogFileInfo进行保护 */
    if (VOS_OK != VOS_SmP(g_stLogFileSaveInfo.ulSem, LOG_SEM_TIMEOUT_VALUE))
    {
        g_ulLittleImgLogErr = LOG_OPERATION_POST_SEM_FAIL;

        OM_SendResult(pstAppToOmMsg->ucFuncType, ulResult, usReturnPrimId);

        return VOS_ERR;
    }

    /* 更新使能标记 */
    g_ulLogFileSaveFlg = LOG_FILE_DISABLE;

    if (VOS_OK == ulResult)
    {
        /*清除LOG文件*/
        OM_LittleImgClearAllLogFile();
    }
    else
    {
        OM_LittleImgCloseLogFile();
    }

    VOS_SmV(g_stLogFileSaveInfo.ulSem);

    /* 将结果保存到NV项中 */
    ulResult = NV_WritePart(en_NV_Item_LOG_FILE_SAVE, 0, (VOS_UINT32*)(pstAppToOmMsg->aucPara), sizeof(VOS_UINT32));

    OM_SendResult(pstAppToOmMsg->ucFuncType, ulResult, usReturnPrimId);

    /* 释放信号量资源 */
    if (VOS_OK != VOS_SmDelete(g_stLogFileSaveInfo.ulSem))
    {
        g_ulLittleImgLogErr = LOG_OPERATION_DELETE_SEM_FAIL;

        return VOS_ERR;
    }

    return VOS_OK;
}
VOS_VOID TTF_MNTN_ErrlogBufGet(VOS_UINT32 ulPid, MODEM_ID_ENUM_UINT16  enModemId, VOS_CHAR *pBuffer, VOS_UINT32 ulBytes)
{
    VOS_UINT32              ulRslt;
    OM_RING_ID              pRingId;


    if (VOS_NULL_PTR == pBuffer)
    {
        TTF_LOG(ulPid, 0, PS_PRINT_ERROR,
            "TTF_MNTN_ErrlogBufGet: pBuffer NULL PTR");

        return;
    }

    if (enModemId >= MODEM_ID_BUTT)
    {
        TTF_LOG1(ulPid, 0, PS_PRINT_ERROR,
            "TTF_MNTN_ErrlogBufGet: Invalid ModemId ", enModemId);

        return;
    }

    pRingId   = TTF_ERR_LOG_ENT_RINGID_GET(enModemId);

    if (VOS_NULL_PTR == pRingId)
    {
        TTF_LOG(ulPid, 0, PS_PRINT_ERROR,
            "TTF_MNTN_ErrlogBufGet: pRingId NULL PTR");

        return;
    }

    ulRslt = VOS_SmP(TTF_ERR_LOG_ENT_SEM_GET(enModemId), TTF_ERR_SEM_TIMEOUT_LEN);

    if(VOS_OK != ulRslt)
    {
        TTF_LOG2(ulPid, 0, PS_PRINT_WARNING,
            "TTF_MNTN_ErrlogBufGet: VOS_SmP <1>, ulRslt<2> fail!", enModemId, (VOS_INT32)ulRslt);

        return;
    }

    ulRslt = (VOS_UINT32)OM_RingBufferGet(pRingId, pBuffer, (VOS_INT)ulBytes);

    if (ulRslt != ulBytes)
    {
        OM_RingBufferFlush(pRingId);

        TTF_LOG2(ulPid, 0, PS_PRINT_ERROR,
            "TTF_MNTN_ErrlogBufGet: ERROR OM_RingBufferGet fail!", (VOS_INT32)ulRslt, (VOS_INT32)ulBytes);
    }

    VOS_SmV(TTF_ERR_LOG_ENT_SEM_GET(enModemId));
}
VOS_INT ADS_UL_CCpuResetCallback(
    DRV_RESET_CALLCBFUN_MOMENT          enParam,
    VOS_INT                             iUserData
)
{
    ADS_CCPU_RESET_IND_STRU                 *pstMsg = VOS_NULL_PTR;

    /* 参数为0表示复位前调用 */
    if (DRV_RESET_CALLCBFUN_RESET_BEFORE == enParam)
    {
        /* 构造消息 */
        pstMsg = (ADS_CCPU_RESET_IND_STRU*)PS_ALLOC_MSG_WITH_HEADER_LEN(ACPU_PID_ADS_UL,
                                                                        sizeof(ADS_CCPU_RESET_IND_STRU));
        if (VOS_NULL_PTR == pstMsg)
        {
            ADS_ERROR_LOG(ACPU_PID_ADS_UL, "ADS_CCPU_RESET_IND_STRU: Malloc Msg Failed!\r\n");
            return VOS_ERROR;
        }

        /* 填写消息头 */
        pstMsg->ulReceiverPid               = ACPU_PID_ADS_UL;
        pstMsg->enMsgId                     = ID_ADS_CCPU_RESET_START_IND;

        /* 发消息 */
        if (VOS_OK != PS_SEND_MSG(ACPU_PID_ADS_UL, pstMsg))
        {
            ADS_ERROR_LOG(ACPU_PID_ADS_UL, "ADS_UL_CCpuResetCallback: Send Msg Failed!\r\n");
            return VOS_ERROR;
        }

        /* 等待回复信号量初始为锁状态,等待消息处理完后信号量解锁。 */
        if (VOS_OK != VOS_SmP(ADS_GetULResetSem(), ADS_RESET_TIMEOUT_LEN))
        {
            ADS_ERROR_LOG(ACPU_PID_ADS_UL, "ADS_UL_CCpuResetCallback: Lock Binary SEM Failed!\r\n");
            ADS_UL_DBG_LOCK_BINARY_SEM_FAIL_NUM(1);

            return VOS_ERROR;
        }

        return VOS_OK;
    }
    /* 复位后 */
    else if (DRV_RESET_CALLCBFUN_RESET_AFTER == enParam)
    {
        ADS_UL_DBG_SAVE_CCPU_RESET_SUCCESS_NUM(1);

        return VOS_OK;
    }
    else
    {
        return VOS_ERROR;
    }

}
Ejemplo n.º 13
0
/*****************************************************************************
 函 数 名  : Log_SelfTask
 功能描述  : 打印自处理任务
 输入参数  : VOS_UINT32 ulPara1
                         VOS_UINT32 ulPara2
                         VOS_UINT32 ulPara3
                         VOS_UINT32 ulPara4
 输出参数  : 无
 返 回 值  : VOS_VOID
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2007年4月24日
        作    者   : 李霄 46160
        修改内容   : 新生成函数

*****************************************************************************/
VOS_VOID Log_SelfTask(VOS_UINT32 ulPara1, VOS_UINT32 ulPara2,
                  VOS_UINT32 ulPara3, VOS_UINT32 ulPara4)
{
    VOS_INT32                           sRet;
    VOS_UINT32                          ulLen;
/*lint -e813*/
    VOS_CHAR                            acTmpStr[LOG_MAX_COLUMN_VAL_EX + 1];
/*lint +e813*/

    ulPara1 = ulPara1;
    ulPara2 = ulPara2;
    ulPara3 = ulPara3;
    ulPara4 = ulPara4;

    Log_Init();

    for(;;)
    {
        if(VOS_OK != VOS_SmP(g_stLogEnt.semOmPrint, 0))
        {
            continue;
        }

        if (LOG_NULL_PTR == g_stLogEnt.rngOmRbufId)
        {
            continue;
        }

        if (LOG_TRUE == OM_RingBufferIsEmpty(g_stLogEnt.rngOmRbufId))
        {
            continue;
        }

        sRet = OM_RingBufferGet(g_stLogEnt.rngOmRbufId, (VOS_CHAR*)(&ulLen), sizeof(VOS_UINT32));
        if (sizeof(VOS_UINT32) != (VOS_UINT32)sRet)
        {
            continue;
        }

        if(LOG_MAX_COLUMN_VAL_EX < ulLen)
        {
            OM_RingBufferFlush(g_stLogEnt.rngOmRbufId);

            continue;
        }

        sRet = OM_RingBufferGet(g_stLogEnt.rngOmRbufId, acTmpStr, (VOS_INT32)ulLen);
        if (ulLen == (VOS_UINT32)sRet)
        {
            Log_Output(g_stLogEnt.ulLogOutput, acTmpStr, ulLen);
        }
    }
}
/*****************************************************************************
 函 数 名  : ftm_mailbox_taskproc
 功能描述  : 读邮箱数据自处理任务
 输入参数  : 无
 输出参数  : 无
 返 回 值  : 无
*****************************************************************************/
VOS_VOID ftm_mailbox_taskproc(VOS_UINT32 ulPara0,
                              VOS_UINT32 ulPara1,
                              VOS_UINT32 ulPara2,
                              VOS_UINT32 ulPara3)
{
    /*lint -save -e716*/
    while(1)
        /*lint -restore*/
    {
        if(VOS_ERR == VOS_SmP(g_mailbox_readsem, 0))
        {
            HAL_SDMLOG("[%s] VOS_Smp(g_mailbox_readsem, 0) error\n",  __FUNCTION__);
        }

        /*vote for lock*/
        drx_msp_fid_vote_lock(DRX_FTM_MAILBOX_VOTE);
        /* LTE CT 原语 */
        if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_LTE_CT) > 0)
        {
            //VOS_SmV(g_mailbox_readsem);
            continue;
        }

        /* LTE BT 原语 */
        if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_LTE_BT) > 0)
        {
            //VOS_SmV(g_mailbox_readsem);
            continue;
        }

        /* TDS CT 原语 */
        if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_TDS_CT) > 0)
        {
            //VOS_SmV(g_mailbox_readsem);
            continue;
        }

        /* TDS BT 原语 */
        if(ftm_mailbox_msgproc(EN_MAILBOX_SERVICE_TDS_BT) > 0)
        {
            //VOS_SmV(g_mailbox_readsem);
            continue;
        }
        /*vote for lock*/
        drx_msp_fid_vote_unlock(DRX_FTM_MAILBOX_VOTE);

        //VOS_SmV(g_mailbox_readsem);
    }

}
Ejemplo n.º 15
0
VOS_VOID diag_TcpPortLock(DIAG_TCPIP_PORT_ENUM enTcpPort)
{
    DIAG_TCPIP_CTRL_INFO_STRU *pstDiagTcpInfo;
    VOS_UINT32 ret;

    pstDiagTcpInfo = diag_GetTcpInfo();

    ret = VOS_SmP(pstDiagTcpInfo->astTcpIpPort[enTcpPort].hSem,0);
    if(ret != ERR_MSP_SUCCESS)
    {
    }
	g_diagTcpPortLock ++;

}
Ejemplo n.º 16
0
/*****************************************************************************
 Function Name   : drx_msp_fid_vote
 Description     : msp fids reject vote to sleep 
 Input           :drx_msp_fid_vote_e e_drx_vote           
 Output          : None
 Return          : None
 
 History         :

*****************************************************************************/
VOS_VOID drx_msp_fid_vote_lock(drx_msp_fid_vote_e e_drx_vote)
{
	VOS_INT32 vote_status_temp = 0;
	VOS_INT32 vote_status_bit_shift = 0;

	/* create sem */
	if(0 ==g_drx_vote_sem)
	{
		if ( VOS_OK != VOS_SmBCreate( "DRX", 1, VOS_SEMA4_FIFO, &g_drx_vote_sem))
	    {
	    	vos_printf("%s: create sem failed!\n",__FUNCTION__);
	        return;
	    }
	}
	
	if(e_drx_vote >=DRX_MSP_VOTE_BUTT)
	{
		vos_printf("%s: e_drx_vote si too larger!\n",__FUNCTION__);
		return ;
	}

	/* modify current status */
	if(VOS_OK != VOS_SmP(g_drx_vote_sem, 0))
    {
    	vos_printf("%s: post sem failed!\n",__FUNCTION__);
        return ;
    }

	/* save current status */
	vote_status_temp = gbl_drx_msp_vote_status;
	
	vote_status_bit_shift = 0x1<<((VOS_INT32)e_drx_vote);
	set_drx_status_bit(vote_status_bit_shift);

	if((DRX_MSP_VOTE_SLEEP_OK == vote_status_temp) && 
		(DRX_MSP_VOTE_SLEEP_OK != gbl_drx_msp_vote_status))
	{
#if(VOS_OS_VER == VOS_VXWORKS)
        DRV_PWRCTRL_SLEEPVOTE_LOCK(PWRCTRL_SLEEP_OAM);
#endif
#if(VOS_OS_VER == VOS_LINUX)
        wake_lock(&msp_wakelock);
#endif
        gbl_drx_cur_vote_status.drx_msp_cur_vote_status |= vote_status_bit_shift;
	}

	VOS_SmV(g_drx_vote_sem);
	
}
Ejemplo n.º 17
0
/*****************************************************************************
 函 数 名  : Log_BufInput
 功能描述  : 将打印信息写入缓存
 输入参数  : VOS_CHAR *pcLogStr
                         VOS_UINT32 ulLen
 输出参数  : 无
 返 回 值  : VOS_VOID
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2007年4月24日
        作    者   : 李霄 46160
        修改内容   : 新生成函数

*****************************************************************************/
VOS_INT32 Log_BufInput(VOS_CHAR *pcLogStr, VOS_UINT32 ulLen)
{
    VOS_INT32     sRet;

#if (VOS_OS_VER == VOS_LINUX)
    if( in_interrupt() )
    {
        return VOS_ERR;
    }
#endif

    if (0 < ulLen)
    {
        if(VOS_OK != VOS_SmP(g_logBuffSem, 0))
        {
            return VOS_ERR;
        }

        if ((ulLen + sizeof(VOS_UINT32)) > (VOS_UINT32)OM_RingBufferFreeBytes(g_stLogEnt.rngOmRbufId))
        {
            VOS_SmV(g_logBuffSem);
            return VOS_ERR;
        }

        sRet = OM_RingBufferPut(g_stLogEnt.rngOmRbufId, (VOS_CHAR*)(&ulLen), sizeof(VOS_UINT32));
        if ((VOS_INT32)sizeof(VOS_UINT32) == sRet)
        {
            sRet = OM_RingBufferPut(g_stLogEnt.rngOmRbufId, pcLogStr, (VOS_INT32)ulLen);
            VOS_SmV(g_logBuffSem);

            if (ulLen == (VOS_UINT32)sRet)
            {
                VOS_SmV(g_stLogEnt.semOmPrint);
                return VOS_OK ;
            }
            else
            {
                vos_printf("\nLog, Error, rngBufPut Data not OK");
            }
        }
        else
        {
            VOS_SmV(g_logBuffSem);
            vos_printf("\nLog, Error, rngBufPut DataLen not OK");
        }
    }
    return VOS_ERR;
}
Ejemplo n.º 18
0
/*****************************************************************************
 函 数 名  : Log_BufInput
 功能描述  : 将打印信息写入缓存
 输入参数  : char *pcLogStr
                         unsigned long ulLen
 输出参数  : 无
 返 回 值  : void
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2007年4月24日
        作    者   : 李霄 46160
        修改内容   : 新生成函数

*****************************************************************************/
int Log_BufInput(char *pcLogStr, unsigned long ulLen)
{
    int     sRet;

#if (VOS_OS_VER == VOS_LINUX)
    if( in_interrupt() )
    {
        return VOS_ERR;
    }
#endif

    if (0 < ulLen)
    {
        if(VOS_OK != VOS_SmP(g_logBuffSem, 0))
        {
            return VOS_ERR;
        }

        if ((ulLen + sizeof(unsigned long)) > (unsigned long)OM_RingBufferFreeBytes(g_stLogEnt.rngOmRbufId))
        {
            VOS_SmV(g_logBuffSem);
            return VOS_ERR;
        }

        sRet = OM_RingBufferPut(g_stLogEnt.rngOmRbufId, (char*)(&ulLen), sizeof(unsigned long));
        if ((int)sizeof(unsigned long) == sRet)
        {
            sRet = OM_RingBufferPut(g_stLogEnt.rngOmRbufId, pcLogStr, (long)ulLen);
            VOS_SmV(g_logBuffSem);

            if (ulLen == (unsigned long)sRet)
            {
                VOS_SmV(g_stLogEnt.semOmPrint);
                return VOS_OK ;
            }
            else
            {
                vos_printf("\nLog, Error, rngBufPut Data not OK");
            }
        }
        else
        {
            VOS_SmV(g_logBuffSem);
            vos_printf("\nLog, Error, rngBufPut DataLen not OK");
        }
    }
    return VOS_ERR;
}
Ejemplo n.º 19
0
/*****************************************************************************
 函 数 名  : Log_SelfTask
 功能描述  : 打印自处理任务
 输入参数  : unsigned long ulPara1
                         unsigned long ulPara2
                         unsigned long ulPara3
                         unsigned long ulPara4
 输出参数  : 无
 返 回 值  : void
 调用函数  :
 被调函数  :

 修改历史      :
  1.日    期   : 2007年4月24日
        作    者   : 李霄 46160
        修改内容   : 新生成函数

*****************************************************************************/
void Log_SelfTask(unsigned long ulPara1, unsigned long ulPara2,
                  unsigned long ulPara3, unsigned long ulPara4)
{
    int             sRet;
    unsigned long   ulLen;
/*lint -e813*/
    char            acTmpStr[LOG_MAX_COLUMN_VAL_EX + 1];
/*lint +e813*/
    Log_Init();

    for(;;)
    {
        if(VOS_OK != VOS_SmP(g_stLogEnt.semOmPrint, 0))
        {
            continue;
        }

        if (LOG_NULL_PTR == g_stLogEnt.rngOmRbufId)
        {
            continue;
        }

        if (LOG_TRUE == OM_RingBufferIsEmpty(g_stLogEnt.rngOmRbufId))
        {
            continue;
        }

        sRet = OM_RingBufferGet(g_stLogEnt.rngOmRbufId, (char*)(&ulLen), sizeof(unsigned long));
        if (sizeof(unsigned long) != (unsigned long)sRet)
        {
            continue;
        }

        if(LOG_MAX_COLUMN_VAL_EX < ulLen)
        {
            OM_RingBufferFlush(g_stLogEnt.rngOmRbufId);

            continue;
        }

        sRet = OM_RingBufferGet(g_stLogEnt.rngOmRbufId, acTmpStr, (long)ulLen);
        if (ulLen == (unsigned long)sRet)
        {
            Log_Output(g_stLogEnt.ulLogOutput, acTmpStr, ulLen);
        }
    }
}
Ejemplo n.º 20
0
DIAG_PORT_DATA_BUF_STRU * diag_PortGetNodeFromDataBuf(VOS_VOID)
{
    DIAG_PORT_DATA_BUF_STRU * pNode = NULL;

    (VOS_VOID)VOS_SmP(g_diagPortSem,0);
    if(ERR_MSP_SUCCESS == diag_PortDataBufIsEmpty())
    {
        (VOS_VOID)VOS_SmV(g_diagPortSem);
        return NULL;
    }

    pNode = blist_entry(g_diagPortDataBuf.dataList.next, DIAG_PORT_DATA_BUF_STRU, dataList);
    blist_del(&pNode->dataList);
    (VOS_VOID)VOS_SmV(g_diagPortSem);

    return pNode;
}
Ejemplo n.º 21
0
VOS_VOID TTF_MemRbRxFreeMemTask(VOS_VOID)
{
    /* 解决UT死循环问题 */
#ifdef __UT_CENTER__
    VOS_UINT32                          ulLoop;
#endif
    VOS_UINT32                          ulLoopCnt = 0;
    VOS_UINT32                          ulSmRst   = VOS_OK;

    TTF_RbRxFreeMemTaskInit();

#ifndef __UT_CENTER__
    for ( ; ; )
#else
    for (ulLoop = 0; ulLoop < 1; ulLoop++)
#endif
    {
        ulSmRst = VOS_SmP(g_ulTtfMemRbFreeSem, 0);

        /* take信号量失败是异常失败 */
        if(VOS_OK != ulSmRst)
        {
            ulLoopCnt++;
            if (ulLoopCnt >= TTF_MEM_RB_TASK_FAIL_CNT_MAX)
            {
                DRV_SYSTEM_ERROR((VOS_INT)(TTF_MEM_RB_TASK_FAIL_SEM_ERR), (VOS_INT)ulSmRst,
                                    (VOS_INT)g_ulTtfMemRbFreeSem, (VOS_VOID *)&g_ulFreeTtfMemBlkNoticNum, 2 * sizeof(VOS_UINT32));

            }

            TTF_LOG1(UEPS_PID_TTF_MEM_RB_FREE, PS_PRINT_ERROR, "TTF_MemRb, TTF_MEM_RB_RxFreeMemTask : ERROR : VOS_SmP Failed, Error Code = %d !\n", (VOS_INT)ulSmRst);

            VOS_TaskDelay(2);

            continue;
        }

        /* 释放 */
        TTF_MemFreeFromQue();
    }

}/* TTF_MemRbRxFreeMemTask */
/*****************************************************************************
 Prototype      : Sock_ShutdownAll
 Description    : 关闭所有的SOCKET连接
 Input          : VOS_VOID

 Output         : VOS_VOID
 Return Value   : VOS_VOID

 History        : ---
    Date        : 2008-05-3
    Author      : g47350
    Modification: Created function
 *****************************************************************************/
VOS_VOID PPM_SockShutdownAll(VOS_VOID)
{
    VOS_UINT32 ulIndex;

    for (ulIndex = 0; ulIndex < SOCKET_BUTT; ulIndex++)
    {
        if (SOCK_NULL != g_astSockInfo[ulIndex].socket)
        {
            (VOS_VOID)VOS_SmP(g_astSockInfo[ulIndex].SmClose, 0);

            closesocket(g_astSockInfo[ulIndex].socket);

            g_astSockInfo[ulIndex].socket = SOCK_NULL;

            VOS_SmV(g_astSockInfo[ulIndex].SmClose);
        }
    }

    return;
}
Ejemplo n.º 23
0
/*****************************************************************************
 Function Name   : drx_msp_fid_unvote
 Description     : msp fids vote to sleep 
 Input           :drx_msp_fid_vote_e e_drx_vote           
 Output          : None
 Return          : None
 
 History         :

*****************************************************************************/
VOS_VOID drx_msp_fid_vote_unlock(drx_msp_fid_vote_e e_drx_vote)
{
	VOS_INT32 vote_status_temp = 0;
	VOS_INT32 vote_status_bit_shift = 0;
	
	if(e_drx_vote >=DRX_MSP_VOTE_BUTT)
	{
		vos_printf("%s: e_drx_vote si too larger!\n",__FUNCTION__);
		return ;
	}

	/* modify current status */
	if(VOS_OK != VOS_SmP(g_drx_vote_sem, 0))
    {
    	vos_printf("%s: post sem failed!\n",__FUNCTION__);
        return ;
    }

	/* save current status */
	vote_status_temp = gbl_drx_msp_vote_status;

	vote_status_bit_shift = 0x1<<((VOS_INT32)e_drx_vote);
	clear_drx_status_bit(vote_status_bit_shift);/*lint !e502 */

	if((DRX_MSP_VOTE_SLEEP_OK != vote_status_temp) && 
		(DRX_MSP_VOTE_SLEEP_OK == gbl_drx_msp_vote_status))
	{
#if(VOS_OS_VER == VOS_VXWORKS)
        DRV_PWRCTRL_SLEEPVOTE_UNLOCK(PWRCTRL_SLEEP_OAM);
#endif

#if(VOS_OS_VER == VOS_LINUX)
        wake_unlock(&msp_wakelock);
#endif
        gbl_drx_cur_vote_status.drx_msp_cur_vote_status &= (~vote_status_bit_shift);/*lint !e502 */
	}

	VOS_SmV(g_drx_vote_sem);

}
int RingBuffer_Backspace(RingBuffer *rb, unsigned int skip_cnt)
{
	int retval;

#ifdef RING_BUFFER_THREAD_SAFE
	VOS_SmP(rb->sem, 50);
#endif
	if (RingBuffer_GetCount(rb) < skip_cnt)
	{
		retval = RING_BUFFER_NO_SKIP;
	}
	else
	{
		rb->start = (rb->start + rb->count - skip_cnt) % rb->size;
		rb->count = skip_cnt;
		retval =  RING_BUFFER_NORMAL;
	}
#ifdef RING_BUFFER_THREAD_SAFE
	VOS_SmV(rb->sem);
#endif

	return retval;
}
BST_ERR_ENUM_UINT8 BST_OS_PalRecvSem(
    BST_OS_PAL_SEM_T    stSemHandle,
    BST_UINT32          ulTimeOut )
{

    if( BST_PAL_IsSemInValid( stSemHandle ) )
    {
        return BST_ERR_ILLEGAL_PARAM;
    }

#if (VOS_RTOSCK == VOS_OS_VER)
    if( VOS_OK == VOS_SmP(stSemHandle, (BST_INT32)ulTimeOut))
#else
    if( OK == semTake(stSemHandle, (BST_INT32)ulTimeOut))
#endif
    {
        return BST_NO_ERROR_MSG;
    }
    else
    {
        return BST_ERR_SYNC_TIMEOUT;
    }
}
int RingBuffer_Get(RingBuffer *rb, void *element)
{
	int retval;

#ifdef RING_BUFFER_THREAD_SAFE
	VOS_SmP(rb->sem, 50);
#endif
	if (!RingBuffer_IsEmpty(rb))
	{
		memcpy(element, rb->buffer + rb->start * rb->element_size, rb->element_size);
		rb->start = (rb->start + 1) % rb->size;
		--rb->count;
		retval = 320;
	}
	else
	{
		retval = 0;
	}
#ifdef RING_BUFFER_THREAD_SAFE
	VOS_SmV(rb->sem);
#endif

	return retval;
}
/*****************************************************************************
 Prototype      : Sock_ServerProc
 Description    : 服务器线程,用来处理服务器端和客户端的所有请求。
 Input          : lpParameter - Unused.
 Output         : void
 Return Value   : void

 History        : ---
    Date        : 2008-05-3
    Author      : g47350
    Modification: Created function
*****************************************************************************/
VOS_VOID PPM_SockServerProc(COMM_SOCKET_CTRL_INFO_STRU *pstSockInfo)
{
    VOS_INT8                                acRcvBuf[OM_APP_SPLIT_MSG_LEN];
    VOS_INT                                 lRevSize = 0;
    VOS_ULONG                               ulLockLevel;

    for(;;)
    {
        lRevSize = recv(pstSockInfo->socket, acRcvBuf, OM_APP_SPLIT_MSG_LEN, 0);

        VOS_SpinLockIntLock(&g_stSockTaskSpinLock, ulLockLevel);

            /*客户端已经关闭,需要将其清空*/
        #if (VOS_LINUX == VOS_OS_VER)
            if (0 >= lRevSize)
        #else
            if ((SOCKET_ERROR == lRevSize) || (0 == lRevSize))
        #endif
            {
                (VOS_VOID)VOS_SmP(pstSockInfo->SmClose, 0);
                closesocket(pstSockInfo->socket);
                pstSockInfo->socket = SOCK_NULL;
                VOS_SmV(pstSockInfo->SmClose);

                VOS_SpinUnlockIntUnlock(&g_stSockTaskSpinLock, ulLockLevel);

                continue;
            }

        /*将接收到的数据提交给上层处理*/
        CPM_ComRcv(pstSockInfo->enPhyPort, acRcvBuf, lRevSize);

        VOS_SpinUnlockIntUnlock(&g_stSockTaskSpinLock, ulLockLevel);
    }

}
VOS_VOID diag_LockCoderSrcBuf(VOS_VOID)
{
    (VOS_VOID)VOS_SmP(g_DiagLogSem,0);

    g_LockBufTimes++;
}
/*****************************************************************************
 Function   : TF_TaskEntry
 Description: entry of the task
 Input      : void
 Return     : void
 Other      :
 *****************************************************************************/
VOS_VOID TF_TaskEntry(VOS_UINT32 ulPara0, VOS_UINT32 ulPara1,
                      VOS_UINT32 ulPara2, VOS_UINT32 ulPara3)
{
    if ( VOS_OK != VOS_SmCCreate( "TF", 0, VOS_SEMA4_FIFO, &(g_stTFControl.ulSem)))
    {
        Print("TF: creat sem error.\r\n");

        return;
    }

    if(VOS_OK != DRV_SDMMC_ADD_HOOK( 0, (VOS_VOID *)TF_InsertNotify))
    {
        Print("TF: register hook to lowersoftware error.\r\n");

        return;
    }

    TF_ConfigLed();

    TF_NVAutoResume();

    DRV_ONLINE_UPDATE_RESULT();

    /* main loop */
    for ( ; ;  )
    {
        if ( VOS_OK != VOS_SmP(g_stTFControl.ulSem, 0) )
        {
            continue;
        }

        /* light LED updating */
        PS_TURN_ON_UPDATE_VERSION_LED();

        /*lint -e746 修改人:徐铖 51137 ;检视人:蒋开波 00105005;
            原因:该告警是因为OSA的VOS_ULFUNCPTR原型定义时没有在形参中加入void */
        /* AUTH */
        if ( VOS_NULL_PTR != g_stTFControl.pulFunctionAddress )
        {
            if ( VOS_OK != g_stTFControl.pulFunctionAddress() )
            {
                /* light LED fail to update */
                PS_TURN_ON_UPDATE_VERSION_FAIL_LED();

                Print("TF AUTH fail.\r\n");

                continue;
            }
        }

        /*lint +e746 修改人:徐铖 51137; 检视人:蒋开波 00105005;*/
        if(VOS_TRUE == DRV_TF_NVBACKUP_FLAG())
        {
            /* NV Backup*/
            if ( VOS_OK != NV_Backup() )
            {
                /* light LED fail to update */
                PS_TURN_ON_UPDATE_VERSION_FAIL_LED();

                Print("TF backup fail.\r\n");

                continue;
            }
        }

        /*set the flag of update */
        DRV_SET_UPDATA_FLAG(0);

        /* reboot */
        VOS_FlowReboot();
    }
}
/*****************************************************************************
 Function   : VOS_Sm_AsyP
 Description: to lock the resource asynchronous
 Input      : ulSmID -- ID of semaphore
 Return     : VOS_OK on success and errno on failure
 *****************************************************************************/
VOS_UINT32 VOS_Sm_AsyP( VOS_SEM Sm_ID )
{
    return(VOS_SmP( Sm_ID, 1 ));
}