/*****************************************************************************
 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;
}
/*****************************************************************************
 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;
}
Пример #3
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;
}
Пример #4
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;
}
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;
}
Пример #6
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);
}
VOS_VOID TAF_AGENT_ProcMsg(MsgBlock* pstMsg)
{
    VOS_UINT8                          *pucMsg;

    if (VOS_OK == TAF_AGENT_IsValidMsg(pstMsg))
    {
        if (VOS_FALSE == TAF_AGENT_GET_ACPU_CNF_SEM_LOCK_FLG())
        {
            return;
        }

        /* 判断消息是否被释放 */
        if (VOS_NULL_PTR == TAF_AGENT_GetTafAcpuCnfMsg())
        {
            /* 备份回复消息 */
            pucMsg = TAF_AGENT_SaveMsg((VOS_UINT8*)pstMsg,pstMsg->ulLength);

            TAF_AGENT_SetTafAcpuCnfMsg(pucMsg);

            TAF_AGENT_SET_ACPU_CNF_SEM_LOCK_FLG(VOS_FALSE);

            /* 释放信号量,使得调用API任务继续运行 */
            VOS_SmV(TAF_AGENT_GetTafAcpuCnfSem());
        }
    }

    return;
}
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;
        }

    }
VOS_UINT32 SCM_SoftDecodeDataRcv(VOS_UINT8 *pucBuffer, VOS_UINT32 ulLen)
{
    VOS_INT32                           sRet;

    diag_PTR(EN_DIAG_PTR_SCM_SOFTDECODE);

    if (ulLen > (VOS_UINT32)OM_RingBufferFreeBytes(g_stSCMDataRcvTaskCtrlInfo.rngOmRbufId))
    {
        g_stScmSoftDecodeInfo.stRbInfo.ulBufferNotEnough++;
        diag_PTR(EN_DIAG_PTR_SCM_ERR1);

        return VOS_ERR;
    }

    sRet = OM_RingBufferPut(g_stSCMDataRcvTaskCtrlInfo.rngOmRbufId,
                            (VOS_CHAR *)pucBuffer,
                            (VOS_INT)ulLen);

    if (ulLen == (VOS_UINT32)sRet)
    {
        if (VOS_OK == VOS_SmV(g_stSCMDataRcvTaskCtrlInfo.SmID))
        {
            g_stScmSoftDecodeInfo.stPutInfo.ulDataLen += sRet;
            g_stScmSoftDecodeInfo.stPutInfo.ulNum++;

            return VOS_OK;
        }
    }

    g_stScmSoftDecodeInfo.stRbInfo.ulRingBufferPutErr++;
    diag_PTR(EN_DIAG_PTR_SCM_ERR2);

    return VOS_ERR;
}
Пример #10
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;
}
/*****************************************************************************
 Function   : TF_InsertNotify
 Description: register this to lowersoftware.
                This should be called when user insert a TF card.
 Input      : void
 Return     : void
 Other      :
 *****************************************************************************/
VOS_VOID TF_InsertNotify(VOS_VOID)
{
    if ( VOS_OK != VOS_SmV(g_stTFControl.ulSem) )
    {
        /*lint -e534*/
        LogPrint("TF_InsertNotify send sem error.\r\n");
        /*lint +e534*/
    }
}
VOS_VOID TAF_AGENT_ClearAllSem(VOS_VOID)
{
    /* 如果有锁的存在 */
    if (VOS_TRUE == TAF_AGENT_GET_ACPU_CNF_SEM_LOCK_FLG())
    {
        VOS_SmV(TAF_AGENT_GetTafAcpuCnfSem());
    }

    return;
}
Пример #13
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 NV_ACoreInitIpcIsr(VOS_VOID)
{
    mdrv_ipc_int_disable((IPC_INT_LEV_E)IPC_ACPU_INT_SRC_CCPU_NVIM);

    /*收到C核初始化完毕中断,释放信号量*/
    /*lint -e534*/
    VOS_SmV(g_ulNVInitSem);
    /*lint +e534*/

    mdrv_ipc_int_enable((IPC_INT_LEV_E)IPC_ACPU_INT_SRC_CCPU_NVIM);
}
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));
}
Пример #16
0
VOS_VOID CBTPPM_OamUsbCbtWriteDataCB(VOS_UINT8* pucVirData, VOS_UINT8* pucPhyData, VOS_INT lLen)
{
    if (lLen < 0)
    {
        LogPrint("\r\n CBTPPM_OamUsbCbtWriteDataCB: lLen < 0. \n");
    }

    /* 伪同步接口,释放信号量 */
    VOS_SmV(g_ulCbtUsbPseudoSyncSemId);

    return;
}
/*****************************************************************************
 Function   : TF_SDUpdateNotify
 Description: SD卡升级时,NAS通过调用此接口通知OM进行NV备份等操作
 Input      : void
 Return     : void
 Other      :
 *****************************************************************************/
VOS_UINT32 TF_SDUpdateNotify(VOS_VOID)
{
    if ( VOS_OK != VOS_SmV(g_stTFControl.ulSem) )
    {
        /*lint -e534*/
        LogPrint("TF_InsertNotify send sem error.\r\n");
        /*lint +e534*/

        return VOS_ERR;
    }

    return VOS_OK;
}
Пример #18
0
VOS_VOID IMM_MntnAcpuCheckPoolLeak( VOS_VOID )
{
    if ( VOS_NULL == g_ulImmMemRbFreeSem )
    {
        return ;
    }

    atomic_set(&g_stCheckLeakFlag, 1);

    VOS_SmV(g_ulImmMemRbFreeSem);

    return;
}/* IMM_MntnAcpuCheckPoolLeak */
Пример #19
0
VOS_VOID TTF_MemRbRelDataIsr(VOS_VOID)
{
    if ( VOS_NULL == g_ulTtfMemRbFreeSem )
    {
        return ;
    }

    /* give semphore 调用OM提供的封装函数,释放信号量ulMemFreeSem */
    VOS_SmV(g_ulTtfMemRbFreeSem);
    g_stTtfMemRbMntnEntity.ulTtfMemRbReceiveIntCnt++;

    return ;
}    /* TTF_MemRbRelDataIsr */
Пример #20
0
VOS_VOID CSD_DL_ProcIsr(VOS_VOID)
{
    VOS_UINT32                         *pDLDataSem;

    pDLDataSem  = CSD_GetDownLinkDataSem();

#if 0
    /*DICC关闭中断*/
    DICC_DisableIsr(ACPU_PID_CSD, DICC_SERVICE_TYPE_CSD_DATA, DICC_CPU_ID_ACPU);
#endif
    /*释放下行取数据信号量*/
    VOS_SmV(*pDLDataSem);
}
VOS_UINT32 ADS_UL_RcvCcpuResetStartInd(
    MsgBlock                           *pstMsg
)
{
    VOS_UINT8                           ucInsIndex;
    VOS_UINT8                           ucRabIndex;
    VOS_UINT8                           ucTiIndex;
    ADS_CTX_STRU                       *pstAdsCtx = VOS_NULL_PTR;

    pstAdsCtx = ADS_GetAllCtx();

    /* 清空所有上行缓存队列 */
    for (ucInsIndex = 0; ucInsIndex < ADS_INSTANCE_MAX_NUM; ucInsIndex++)
    {
        for (ucRabIndex = 0; ucRabIndex < ADS_RAB_ID_MAX + 1; ucRabIndex++)
        {
            ADS_UL_DestroyQueue(ucInsIndex, ucRabIndex);
        }
    }

#if (FEATURE_OFF == FEATURE_SKB_EXP)
    /* 清空源内存队列 */
    ADS_UL_ClearIpfUlSrcMem();
#endif

    /* 停止所有启动的定时器 */
    for (ucTiIndex = 0; ucTiIndex < ADS_MAX_TIMER_NUM; ucTiIndex++)
    {
        ADS_StopTimer(ACPU_PID_ADS_UL, ucTiIndex, ADS_TIMER_STOP_CAUSE_USER);
    }

    /* 初始化每个实例的上下文 */
    ADS_ResetSpecCtx();

    /* 重置IPF相关的上下文 */
    ADS_ResetIpfCtx();

    /* 重置当前实例索引值 */
    pstAdsCtx->ucAdsCurInstanceIndex = ADS_INSTANCE_INDEX_0;

    /* 重置ADS Filter过滤上下文 */
    ADS_FILTER_Reset();

    ADS_ResetDebugInfo();

    /* 释放信号量,使得调用API任务继续运行 */
    VOS_SmV(ADS_GetULResetSem());

    return VOS_OK;
}
Пример #22
0
VOS_VOID diag_TcpPortUnLock(DIAG_TCPIP_PORT_ENUM enTcpPort)
{
    DIAG_TCPIP_CTRL_INFO_STRU *pstDiagTcpInfo;
    VOS_UINT32 ret;

    pstDiagTcpInfo = diag_GetTcpInfo();

    ret = VOS_SmV(pstDiagTcpInfo->astTcpIpPort[enTcpPort].hSem);
    if(ret != ERR_MSP_SUCCESS)
    {
    }

	g_diagTcpPortUnLock++;
}
Пример #23
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);
	
}
Пример #24
0
/*****************************************************************************
 Function   :VOS_UINT32   VOS_EventWrite( VOS_UINT32 ulTaskID, VOS_UINT32 ulEvents )
 Description:Send Event to the TaskID.
 Calls      :VOS_TRACE_SEND_EVENT(), VOS_CheckTaskIDValid(),VOS_SplIMP(),VOS_Splx()
 Called By  :Application
 Input      :ulTaskID, ulEvents     
 Output     :NULL
 Return     :
            VOS_OK   when sucess
            ERRNO   when fail
 Other      :
 *****************************************************************************/
VOS_UINT32 VOS_EventWrite( VOS_UINT32 ulTaskID, VOS_UINT32 ulEvents )
{
    /* the functin should be full later */
    VOS_UINT32               ulLockLevel;
    VOS_UINT32               ulTempQueue;
    VOS_UINT32               ulTempSem;

    if ( VOS_OK != VOS_CheckEvent(ulTaskID) )
    {
        LogPrint("# VOS_EventWrite EVENT not exist.\r\n");
        return VOS_ERR;
    }
    
    /*intLockLevel = VOS_SplIMP();*/
    VOS_SpinLockIntLock(&g_stVosTaskSpinLock, ulLockLevel);
    
    vos_TaskCtrlBlk[ulTaskID].ulEvents |= ulEvents;

    /*VOS_Splx( intLockLevel );*/
    VOS_SpinUnlockIntUnlock(&g_stVosTaskSpinLock, ulLockLevel);

    ulTempQueue = VOS_GetQueueIDFromFid(vos_TaskCtrlBlk[ulTaskID].ulFid);
#if (VOS_YES == VOS_CHECK_PARA)
    if ( 0xffffffff == ulTempQueue )
    {
        return VOS_ERR;
    }
#endif

    ulTempSem = VOS_GetSemIDFromQueue(ulTempQueue);
#if (VOS_YES == VOS_CHECK_PARA)
    if ( 0xffffffff == ulTempSem )
    {
        return VOS_ERR;
    }
#endif

    if ( VOS_OK != VOS_SmV( ulTempSem ) )
    {
        LogPrint("# VOS_EventWrite error.\r\n");

        return VOS_ERR;
    }
    else
    {
        return VOS_OK;
    }
}
VOS_UINT32 VOS_EventWrite( VOS_UINT32 ulTaskID, VOS_UINT32 ulEvents )
{
    /* the functin should be full later */
    int                      intLockLevel;
    VOS_UINT32               ulTempQueue;
    VOS_SEM                  ulTempSem;

    if ( VOS_OK != VOS_CheckEvent(ulTaskID) )
    {
        /*lint -e534*/
        LogPrint("# VOS_EventWrite EVENT not exist.\r\n");
        /*lint +e534*/
        return VOS_ERR;
    }

    intLockLevel = VOS_SplIMP();

    vos_TaskCtrlBlk[ulTaskID].ulEvents |= ulEvents;

    VOS_Splx( intLockLevel );

    ulTempQueue = VOS_GetQueueIDFromFid(vos_TaskCtrlBlk[ulTaskID].ulFid);
    if ( 0xffffffff == ulTempQueue )
    {
        return VOS_ERR;
    }

    ulTempSem = VOS_GetSemIDFromQueue(ulTempQueue);
    if ( 0xffffffff == ulTempSem )
    {
        return VOS_ERR;
    }

    if ( VOS_OK != VOS_SmV( ulTempSem ) )
    {
        /*lint -e534*/
        LogPrint("# VOS_EventWrite error.\r\n");
        /*lint +e534*/

        return VOS_ERR;
    }
    else
    {
        return VOS_OK;
    }
}
/*****************************************************************************
 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;
}
Пример #27
0
/*****************************************************************************
 Function   : HPA_3G0MsIsr
 Description: ISR of R99 0ms
 Input      : void
 Return     : void
 Other      :
 *****************************************************************************/
VOS_VOID HPA_3G0MsIsr(VOS_VOID)
{
    if (PWRCTRL_COMM_OFF == DRV_PWRCTRL_PWRSTATUSGET((PWC_COMM_MODE_E)VOS_RATMODE_WCDMA, PWC_COMM_MODULE_BBP_DRX, (PWC_COMM_MODEM_E)MODEM_ID_0))
    {
        VOS_ProtectionReboot(DRX_REPORT_BBP_POWERDOWN_ERROR, PS_FILE_ID_HPA_ISR_C, __LINE__,
                VOS_NULL_PTR, 0);

        return;
    }

    /* Clear interrupt */
    HPA_Write32Reg(WBBP_ARM_INT01_CLR_ADDR, 1);

    DRV_VICINT_DISABLE(g_ulWBBP0MsIntNO);

    g_stHpaIntCount.ul0msIntNum++;
    g_stHpaIntCount.ul0msIntSlice = OM_GetSlice();

#ifdef HPA_ITT
    Stub_RttRegGet();

    if ( VOS_NULL_PTR != g_pfnHpaDspIsrStub )
    {
        g_pfnHpaDspIsrStub();
    }
#endif

    /* Read SFN & CFN */
    HPA_ReadCfnSfn();

    /* Trigger HPA_TransferTaskEntry task to transfer msg
       between ARM and DSP.*/
    atomic_inc(&g_stDspMailBoxTransferCount);
    VOS_SmV(g_ulHpaTransferSem);

    g_ul3GISRNum++;

    DRV_VICINT_ENABLE(g_ulWBBP0MsIntNO);

    return ;
}
Пример #28
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);

}
BST_ERR_ENUM_UINT8  BST_OS_PalSendSem(
    BST_OS_PAL_SEM_T    stSemHandle,
    BST_VOID           *pvArg )
{
    if( BST_PAL_IsSemInValid( stSemHandle ) )
    {
        return BST_ERR_ILLEGAL_PARAM;
    }

#if (VOS_RTOSCK == VOS_OS_VER)
    if( VOS_OK == VOS_SmV(stSemHandle) )
#else
    if( OK == semGive(stSemHandle) )
#endif
    {
        return BST_NO_ERROR_MSG;
    }
    else
    {
        return BST_ERR_ILLEGAL_PARAM;
    }
}
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;
}