/***************************************************************************** 函 数 名 : DMS_ReadPortCfgFile 功能描述 : PortCfg虚拟文件读实现 输入参数 : file --- 文件句柄 buf --- 用户空间 ppos --- 文件偏移,参数未使用 输出参数 : 无 返 回 值 : 成功或失败 修改历史 : 1.日 期 : 2013年10月25日 修改内容 : 新生成函数 *****************************************************************************/ ssize_t DMS_ReadPortCfgFile( struct file *file, char __user *buf, size_t len, loff_t *ppos ) { VOS_CHAR acModeTemp[DMS_PORTCFG_FILE_LEN]; VOS_INT32 lRlst; VOS_UINT32 ulLength; if (*ppos > 0) { return 0; } VOS_MemSet(acModeTemp, 0x00, DMS_PORTCFG_FILE_LEN); VOS_sprintf((VOS_CHAR *)acModeTemp, "%d", g_stDmsMainInfo.ulPortCfgValue); ulLength = VOS_StrLen(acModeTemp); len = PS_MIN(len, ulLength); /*拷贝内核空间数据到用户空间上面*/ lRlst = copy_to_user(buf,(VOS_VOID *)acModeTemp, len); if (lRlst < 0) { return -EPERM; } *ppos += (loff_t)len; return (ssize_t)len; }
ssize_t DMS_ReadGetSliceFile( struct file *file, char __user *buf, size_t len, loff_t *ppos ) { VOS_CHAR acModeTemp[DMS_GET_SLICE_FILE_LEN]; VOS_UINT32 ulLength; VOS_UINT32 ulHigh32bitValue; VOS_UINT32 ulLow32bitValue; if (*ppos > 0) { return 0; } /* 初始化 */ ulLength = 0; ulHigh32bitValue = 0; ulLow32bitValue = 0; VOS_MemSet(acModeTemp, 0x00, DMS_GET_SLICE_FILE_LEN); /* 获取时间 Seattle 和 Portland不一样 */ DRV_GET_BBP_TIMER_VALUE(&ulHigh32bitValue, &ulLow32bitValue); if (ulHigh32bitValue != 0) { VOS_sprintf((VOS_CHAR *)acModeTemp, "%x%08x", ulHigh32bitValue, ulLow32bitValue); } else { VOS_sprintf((VOS_CHAR *)acModeTemp, "%x", ulLow32bitValue); } ulLength = VOS_StrLen(acModeTemp); len = PS_MIN(len, ulLength); /*拷贝内核空间数据到用户空间上面*/ if (0 == copy_to_user(buf,(VOS_VOID *)acModeTemp, (VOS_ULONG)len)) { *ppos += (loff_t)len; return (ssize_t)len; } else { return -EPERM; } }
VOS_UINT32 PPPC_SHA256_Process ( PPPC_SHA256_STATE_STRU *pstMd, VOS_UINT8 *pucIn, VOS_UINT32 ulInLen ) { VOS_UINT32 ulNum; if (pstMd->ulCurLen >= sizeof(pstMd->aucBuf)) { return VOS_ERR; } while (ulInLen > 0) { if (pstMd->ulCurLen == 0 && ulInLen >= PPPC_SHA256_BLOCK_SIZE) { if (VOS_OK != PPPC_SHA256_Compress(pstMd, (VOS_UINT8 *) pucIn)) { return VOS_ERR; } pstMd->ullLength += PPPC_SHA256_BLOCK_SIZE * 8; pucIn += PPPC_SHA256_BLOCK_SIZE; ulInLen -= PPPC_SHA256_BLOCK_SIZE; } else { ulNum = PS_MIN(ulInLen, (PPPC_SHA256_BLOCK_SIZE - pstMd->ulCurLen)); PS_MEM_CPY(pstMd->aucBuf + pstMd->ulCurLen, pucIn, ulNum); pstMd->ulCurLen += ulNum; pucIn += ulNum; ulInLen -= ulNum; if (pstMd->ulCurLen == PPPC_SHA256_BLOCK_SIZE) { if (VOS_OK != PPPC_SHA256_Compress(pstMd, pstMd->aucBuf)) { return VOS_ERR; } pstMd->ullLength += 8 * PPPC_SHA256_BLOCK_SIZE; pstMd->ulCurLen = 0; } } } return VOS_OK; }
ssize_t RNIC_ReadDialEventReportFile( struct file *file, char __user *buf, size_t len, loff_t *ppos ) { RNIC_DIAL_MODE_STRU *pstDialMode; VOS_CHAR acDialEventTemp[RNIC_EVENTFLAG_FILE_LEN]; VOS_UINT32 ulDialEventLen; if (*ppos > 0) { RNIC_ERROR_LOG(ACPU_PID_RNIC, "RNIC_ReadDialEventReportFile:ppos err!"); return 0; } PS_MEM_SET(acDialEventTemp, 0x00, RNIC_EVENTFLAG_FILE_LEN); /* 获取按需拨号的模式以及时长的地址 */ pstDialMode = RNIC_GetDialModeAddr(); VOS_sprintf(acDialEventTemp, "%d", pstDialMode->enEventReportFlag); ulDialEventLen = VOS_StrLen(acDialEventTemp); len = PS_MIN(len, ulDialEventLen); /*拷贝内核空间数据到用户空间上面*/ if (0 == copy_to_user(buf, (VOS_VOID *)acDialEventTemp, len)) { *ppos += (loff_t)len; return (ssize_t)len; } else { RNIC_ERROR_LOG(ACPU_PID_RNIC, "RNIC_ReadDialEventReportFile:copy_to_user err!"); return -EPERM; } }
ssize_t RNIC_ReadIdleTimerOutFile( struct file *file, char __user *buf, size_t len, loff_t *ppos ) { RNIC_DIAL_MODE_STRU *pstDialMode; VOS_CHAR acIdleTimeTemp[RNIC_IDLETIMEROUT_FILE_LEN]; VOS_UINT32 ulIdleTimeLen; if (*ppos > 0) { RNIC_ERROR_LOG(ACPU_PID_RNIC, "RNIC_ReadIdleTimerOutFile:ppos ERR!"); return 0; } PS_MEM_SET(acIdleTimeTemp, 0x00, RNIC_IDLETIMEROUT_FILE_LEN); /* 获取按需拨号的模式以及时长的地址 */ pstDialMode = RNIC_GetDialModeAddr(); VOS_sprintf(acIdleTimeTemp, "%d", pstDialMode->ulIdleTime); ulIdleTimeLen = VOS_StrLen(acIdleTimeTemp); len = PS_MIN(len, ulIdleTimeLen); /*拷贝内核空间数据到用户空间上面*/ if (0 == copy_to_user(buf,(VOS_VOID *)acIdleTimeTemp, len)) { *ppos += (loff_t)len; return (ssize_t)len; } else { RNIC_ERROR_LOG(ACPU_PID_RNIC, "RNIC_ReadIdleTimerOutFile:copy_to_user ERR!"); return -EPERM; } }
VOS_VOID ADS_UL_ProcLinkData(VOS_VOID) { VOS_UINT32 ulAllUlQueueDataNum; VOS_UINT32 ulIpfUlBdNum; VOS_UINT32 ulSndBdNum; /* 判断当前是否允许发送,如果不允许发送,直接退出 */ if ((VOS_FALSE == ADS_UL_GET_MODEM_SND_PERMIT_FLAG(ADS_INSTANCE_INDEX_0)) && (VOS_FALSE == ADS_UL_GET_MODEM_SND_PERMIT_FLAG((ADS_INSTANCE_INDEX_0 + 1) % ADS_INSTANCE_MAX_NUM))) { ADS_NORMAL_LOG(ACPU_PID_ADS_UL, "ADS_UL_ProcLinkData: not permit send!"); return; } /* 处理队列时中的数据 */ for (;;) { /* 获取上行可以发送的BD数。 */ #if(FEATURE_OFF == FEATURE_SKB_EXP) ulIpfUlBdNum = BSP_IPF_GetUlDescNum(); #else ulIpfUlBdNum = BSP_IPF_GetUlBDNum(); #endif if (0 == ulIpfUlBdNum) { ADS_DBG_UL_CFG_IPF_HAVE_NO_BDCD(1); /* 设置发送结束标志 */ ADS_UL_SET_SENDING_FLAG(VOS_FALSE); /* 启动定时器退出 */ ADS_StartTimer(ACPU_PID_ADS_UL, TI_ADS_UL_SEND, ADS_UL_GET_PROTECT_TIMER_LEN()); break; } /* 设置正在发送标志 */ ADS_UL_SET_SENDING_FLAG(VOS_TRUE); /* 获取当前所有队列中的数据包个数 */ ulAllUlQueueDataNum = ADS_UL_GetAllQueueDataNum(); /* 计算当前可发送的BD数目 */ ulSndBdNum = PS_MIN(ulIpfUlBdNum, ulAllUlQueueDataNum); #if(FEATURE_OFF == FEATURE_SKB_EXP) ADS_UL_FreeIpfUlConfigSuccSrcMem(); #endif /* 配置BD,写入IPF */ ADS_UL_ConfigBD(ulSndBdNum); /* 获取当前所有队列中的数据包个数 */ ulAllUlQueueDataNum = ADS_UL_GetAllQueueDataNum(); /* 当前队列中没有数据,退出,等待下次队列由空变为非空处理 */ if (0 == ulAllUlQueueDataNum) { /* 设置发送结束标志 */ ADS_UL_SET_SENDING_FLAG(VOS_FALSE); break; } /* 当前队列中有数据,但是需要继续攒包 */ else if (ulAllUlQueueDataNum <= ADS_UL_SEND_DATA_NUM_THREDHOLD) { ADS_StartTimer(ACPU_PID_ADS_UL, TI_ADS_UL_SEND, ADS_UL_GET_PROTECT_TIMER_LEN()); /* 设置发送结束标志 */ ADS_UL_SET_SENDING_FLAG(VOS_FALSE); break; } else { continue; } } return; }
/***************************************************************************** 函 数 名 : FC_UL_GetRate 功能描述 : 控制HSUPA上行发送速率 输入参数 : 无 输出参数 : 无 返 回 值 : 流控限制 调用函数 : 被调函数 : 修改历史 : 1.日 期 : 2011年12月5日 作 者 : 修改内容 : 新生成函数 *****************************************************************************/ VOS_UINT32 FC_UL_GetRate( VOS_VOID ) { /* 返回上行发送速率限制 = MIN(CPU速率,温保速率) */ return PS_MIN(g_ulFcUlRateCpu*1024, g_ulFcUlRateTmp*1024); }