Exemple #1
0
/*********************************************************************************************************
** 函数名称: 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);
}
Exemple #2
0
/*********************************************************************************************************
** 函数名称: 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 执行           */
}