/***************************************************************************** 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; }
/***************************************************************************** 函 数 名 : 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; }
/***************************************************************************** 函 数 名 : 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; }
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; }
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; }
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)); }
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; }
VOS_VOID IMM_MntnAcpuCheckPoolLeak( VOS_VOID ) { if ( VOS_NULL == g_ulImmMemRbFreeSem ) { return ; } atomic_set(&g_stCheckLeakFlag, 1); VOS_SmV(g_ulImmMemRbFreeSem); return; }/* IMM_MntnAcpuCheckPoolLeak */
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 */
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; }
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++; }
/***************************************************************************** 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); }
/***************************************************************************** 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; }
/***************************************************************************** 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 ; }
/***************************************************************************** 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; }