/********************************************************************************************************* ** 函数名称: API_CacheTextUpdate ** 功能描述: 清空(回写内存) D CACHE 无效(访问不命中) I CACHE ** 输 入 : pvAdrs 虚拟地址 ** stBytes 长度 ** 输 出 : BSP 函数返回值 ** 全局变量: ** 调用模块: API 函数 *********************************************************************************************************/ LW_API INT API_CacheTextUpdate (PVOID pvAdrs, size_t stBytes) { INTREG iregInterLevel; INT iError; #if LW_CFG_SMP_EN > 0 LW_CACHE_TU_ARG tuarg; #endif /* LW_CFG_SMP_EN */ __CACHE_OP_ENTER(iregInterLevel); /* 开始操作 cache */ iError = ((_G_cacheopLib.CACHEOP_pfuncTextUpdate == LW_NULL) ? ERROR_NONE : (_G_cacheopLib.CACHEOP_pfuncTextUpdate)(pvAdrs, stBytes)); __CACHE_OP_EXIT(iregInterLevel); /* 结束操作 cache */ #if LW_CFG_SMP_EN > 0 if (_G_cacheopLib.CACHEOP_ulOption & CACHE_TEXT_UPDATE_MP) { tuarg.TUA_pvAddr = pvAdrs; tuarg.TUA_stSize = stBytes; iregInterLevel = KN_INT_DISABLE(); _SmpCallFuncAllOther(__cacheTextUpdate, &tuarg, LW_NULL, LW_NULL, IPIM_OPT_NORMAL); /* 通知其他的 CPU */ KN_INT_ENABLE(iregInterLevel); } #endif /* LW_CFG_SMP_EN */ return (iError); }
/********************************************************************************************************* ** 函数名称: API_KernelSmpCallAllOther ** 功能描述: 其他所有激活的 CPU 调用指定函数 ** 输 入 : pfunc 同步执行函数 ** pvArg 同步参数 ** pfuncAsync 异步执行函数 ** pvAsync 异步执行参数 ** iOpt 选项 IPIM_OPT_NORMAL / IPIM_OPT_NOKERN ** 输 出 : NONE (无法确定返回值) ** 全局变量: ** 调用模块: API 函数 *********************************************************************************************************/ LW_API VOID API_KernelSmpCallAllOther (FUNCPTR pfunc, PVOID pvArg, VOIDFUNCPTR pfuncAsync, PVOID pvAsync, INT iOpt) { BOOL bLock; bLock = __SMP_CPU_LOCK(); /* 锁定当前 CPU 执行 */ _SmpCallFuncAllOther(pfunc, pvArg, pfuncAsync, pvAsync, iOpt); __SMP_CPU_UNLOCK(bLock); /* 解锁当前 CPU 执行 */ }