当前位置: 代码迷 >> 综合 >> SylixOS中的中断(inter)操作接口
  详细解决方案

SylixOS中的中断(inter)操作接口

热度:50   发布时间:2024-01-10 06:05:44.0

中断接口列表

API 功能
API_InterLock 关闭中断
API_InterUnlock 打开中断
API_InterContext 是否在中断中
API_InterGetNesting 获得中断嵌套层数
API_InterGetNestingById 获得指定 CPU 中断嵌套层数,和最大中断嵌套层数
API_InterEnter 进入中断
API_InterExit 退出中断
API_InterVectorBaseGet 获得中断向量表基址
API_InterVectorConnect 设置指定向量的服务程序
API_InterVectorConnectEx 设置指定向量的服务程序
API_InterVectorDisconnect 删除指定向量的服务程序
API_InterVectorDisconnectEx 删除指定向量的服务程序
API_InterVectorServiceCnt 获得指定中断向量的服务个数
API_InterVectorEnable 使能指定向量中断
API_InterVectorDisable 禁能指定向量中断
API_InterVectorDisableEx 禁能指定向量中断
API_InterVectorIsEnable 获得指定中断状态
API_InterVectorSetPriority 设置中断优先级
API_InterVectorGetPriority 获取中断优先级
API_InterSetTarget 设置中断目标 CPU
API_InterGetTarget 获取中断目标 CPU
API_InterVectorSetFlag 设置中断向量属性
API_InterVectorGetFlag 获取中断向量属性
API_InterVectorMeasureHook 中断测量 HOOK
API_InterVectorIsr 中断服务程序,BSP中断调用
API_InterVectorIpi 设置核间中断向量号
API_InterVectorIpiEx 设置核间中断向量号
API_InterDeferGet 获得对应 CPU 的中断延迟队列
API_InterDeferContext 是否在中断或 defer 上下文
API_InterDeferJobAdd 向中断延迟处理队列加入任务
API_InterDeferJobDelete 从中断延迟处理队列删除任务
API_InterStackBaseGet 获得当前中断堆栈首地址
API_InterStackCheck 中断堆栈检查

中断接口定义

/********************************************************************************************************* ** 函数名称: API_InterLock ** 功能描述: 系统关闭中断 ** 输 入 : piregInterLevel 保存中断控制字 ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterLock (INTREG  *piregInterLevel)
/********************************************************************************************************* ** 函数名称: API_InterUnlock ** 功能描述: 系统打开中断 ** 输 入 : iregInterLevel 需要恢复的中断控制字 ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterUnlock (INTREG  iregInterLevel)
/********************************************************************************************************* ** 函数名称: API_InterContext ** 功能描述: 检查系统是否在中断状态下 ** 输 入 : ** 输 出 : *********************************************************************************************************/
BOOL  API_InterContext (VOID)
/********************************************************************************************************* ** 函数名称: API_InterGetNesting ** 功能描述: 获得系统中断嵌套层数 ** 输 入 : NONE ** 输 出 : 当前系统嵌套层数 *********************************************************************************************************/
ULONG  API_InterGetNesting (VOID)
/********************************************************************************************************* ** 函数名称: API_InterGetNestingById ** 功能描述: 获得指定 CPU 的中断嵌套层数 ** 输 入 : ulCPUId CPU ID ** pulMaxNesting 最大嵌套层数 ** 输 出 : 当前系统嵌套层数 *********************************************************************************************************/
ULONG  API_InterGetNestingById (ULONG  ulCPUId, ULONG *pulMaxNesting)
/********************************************************************************************************* ** 函数名称: API_InterEnter ** 功能描述: 内核中断入口函数 (在关中断的情况下被调用) ** 输 入 : ** 输 出 : 中断层数 *********************************************************************************************************/
ULONG    API_InterEnter (ARCH_REG_T  reg0,ARCH_REG_T  reg1,ARCH_REG_T  reg2,ARCH_REG_T  reg3)
/********************************************************************************************************* ** 函数名称: API_InterExit ** 功能描述: 内核中断出口函数 (在关中断的情况下被调用) ** 输 入 : NONE ** 输 出 : NONE *********************************************************************************************************/
VOID    API_InterExit (VOID)
/********************************************************************************************************* ** 函数名称: API_InterVectorBaseGet ** 功能描述: 获得系统中断向量表基地址 ** 输 入 : NONE ** 输 出 : 基地址指针 ********************************************************************************************************/
PVOID  API_InterVectorBaseGet (VOID)
/********************************************************************************************************* ** 函数名称: API_InterVectorConnect ** 功能描述: 设置系统指定向量中断服务 ** 输 入 : ulVector 中断向量号 ** pfuncIsr 服务函数 ** pvArg 服务函数参数 ** pcName 中断服务名称 ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterVectorConnect (ULONG            ulVector,PINT_SVR_ROUTINE pfuncIsr,PVOID            pvArg,CPCHAR           pcName)
/********************************************************************************************************* ** 函数名称: API_InterVectorConnectEx ** 功能描述: 设置系统指定向量中断服务 ** 输 入 : ulVector 中断向量号 ** pfuncIsr 服务函数 ** pfuncClear 附加中断清除函数(可为 NULL) ** pvArg 服务函数参数 ** pcName 中断服务名称 ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterVectorConnectEx (ULONG              ulVector,PINT_SVR_ROUTINE   pfuncIsr,VOIDFUNCPTR        pfuncClear,PVOID              pvArg,CPCHAR             pcName)
/********************************************************************************************************* ** 函数名称: API_InterVectorDisconnect ** 功能描述: 解除系统指定向量中断服务 ** 输 入 : ulVector 中断向量号 ** pfuncIsr 服务函数 ** pvArg 服务函数参数 ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterVectorDisconnect (ULONG             ulVector,PINT_SVR_ROUTINE  pfuncIsr,PVOID             pvArg)
/********************************************************************************************************* ** 函数名称: API_InterVectorDisconnectEx ** 功能描述: 解除系统指定向量中断服务 ** 输 入 : ulVector 中断向量号 ** pfuncIsr 服务函数 ** pvArg 服务函数参数 ** ulOption 删除选项 ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterVectorDisconnectEx (ULONG             ulVector,PINT_SVR_ROUTINE  pfuncIsr,PVOID             pvArg,ULONG             ulOption)
/********************************************************************************************************* ** 函数名称: API_InterVectorServiceCnt ** 功能描述: 获得指定中断向量服务函数个数 ** 输 入 : ulVector 中断向量号 ** piCnt 服务函数个数 ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterVectorServiceCnt (ULONG  ulVector, INT  *piCnt)
/********************************************************************************************************* ** 函数名称: API_InterVectorEnable ** 功能描述: 使能指定向量的中断 ** 输 入 : ulVector 中断向量号 ** 输 出 : ERROR *********************************************************************************************************/
ULONG  API_InterVectorEnable (ULONG  ulVector)
/********************************************************************************************************* ** 函数名称: API_InterVectorDisable ** 功能描述: 禁能指定向量的中断 ** 输 入 : ulVector 中断向量号 ** 输 出 : ERROR ** 注 意 : 如果 ulVector 为可嵌套中断, 则在中断上下文中禁能本中断, 退出中断时会自动打开. 所以禁能操作需要在任务状态下操作. *********************************************************************************************************/
ULONG  API_InterVectorDisable (ULONG  ulVector)
/********************************************************************************************************* ** 函数名称: API_InterVectorDisableEx ** 功能描述: 禁能指定向量的中断 ** 输 入 : ulVector 中断向量号 ** iMaxServCnt 当服务函数数量 > 此值时, 不禁能 ** 输 出 : ERROR ** 注 意 : 如果 ulVector 为可嵌套中断, 则在中断上下文中禁能本中断, 退出中断时会自动打开.所以禁能操作需要在任务状态下操作. *********************************************************************************************************/
ULONG  API_InterVectorDisableEx (ULONG  ulVector, INT  iMaxServCnt)
/********************************************************************************************************* ** 函数名称: API_InterVectorIsEnable ** 功能描述: 获得系统对指定向量中断响应状态 ** 输 入 : ulVector 中断向量号 ** pbIsEnable 是否使能了相关中断 ** 输 出 : ERROR *********************************************************************************************************/
ULONG  API_InterVectorIsEnable (ULONG  ulVector, BOOL  *pbIsEnable)
/********************************************************************************************************* ** 函数名称: API_InterVectorSetPriority ** 功能描述: 设置指定中断向量优先级 ** 输 入 : ulVector 中断向量号 ** uiPrio 中断优先级 LW_INTER_PRIO_HIGHEST ~ LW_INTER_PRIO_LOWEST ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterVectorSetPriority (ULONG  ulVector, UINT  uiPrio)
/********************************************************************************************************* ** 函数名称: API_InterVectorGetPriority ** 功能描述: 获取指定中断向量优先级 ** 输 入 : ulVector 中断向量号 ** puiPrio 中断优先级 LW_INTER_PRIO_HIGHEST ~ LW_INTER_PRIO_LOWEST ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterVectorGetPriority (ULONG  ulVector, UINT  *puiPrio)
/********************************************************************************************************* ** 函数名称: API_InterSetTarget ** 功能描述: 设置指定中断向量目标 CPU ** 输 入 : ulVector 中断向量号 ** stSize CPU 掩码集内存大小 ** pcpuset CPU 掩码 ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterSetTarget (ULONG  ulVector, size_t  stSize, const PLW_CLASS_CPUSET  pcpuset)
/********************************************************************************************************* ** 函数名称: API_InterGetTarget ** 功能描述: 获取指定中断向量目标 CPU ** 输 入 : ulVector 中断向量号 ** stSize CPU 掩码集内存大小 ** pcpuset CPU 掩码 ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterGetTarget (ULONG  ulVector, size_t  stSize, PLW_CLASS_CPUSET  pcpuset)
/********************************************************************************************************* ** 函数名称: API_InterVectorSetFlag ** 功能描述: 设置指定中断向量的特性. ** 输 入 : ulVector 中断向量号 ** ulFlag 特性 ** 输 出 : ERROR CODE ** 注 意 : LW_IRQ_FLAG_QUEUE 必须在安装任何一个驱动前设置, 且设置后不再能取消.最好放在 bspIntInit() 函数中完成设置.API 函数 *********************************************************************************************************/
ULONG  API_InterVectorSetFlag (ULONG  ulVector, ULONG  ulFlag)
/********************************************************************************************************* ** 函数名称: API_InterVectorGetFlag ** 功能描述: 获得指定中断向量的特性. ** 输 入 : ulVector 中断向量号 ** *pulFlag 特性 ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterVectorGetFlag (ULONG  ulVector, ULONG  *pulFlag)
/********************************************************************************************************* ** 函数名称: API_InterVectorIsr ** 功能描述: 向量中断总服务 ** 输 入 : ulVector 中断向量号 (arch 层函数需要保证此参数正确) ** 输 出 : 中断返回值 ** 注 意 : 这里并不处理中断嵌套, 他需要 arch 层移植函数支持. *********************************************************************************************************/
irqreturn_t  API_InterVectorIsr (ULONG  ulVector)
/********************************************************************************************************* ** 函数名称: API_InterVectorIpiEx ** 功能描述: 设置核间中断向量 BSP 在系统启动前调用此函数, 每个 CPU 都要设置, SylixOS 允许不同的 CPU 核间中断向量不同. ** 输 入 : ** ulCPUId CPU ID ** ulIPIVector 核间中断向量号 ** pfuncClear 核间中断清除函数 ** pvArg 核间中断参数 ** 输 出 : *********************************************************************************************************/
VOID  API_InterVectorIpiEx (ULONG  ulCPUId, ULONG  ulIPIVector, FUNCPTR  pfuncClear, PVOID  pvArg)
/********************************************************************************************************* ** 函数名称: API_InterVectorIpi ** 功能描述: 设置核间中断向量 BSP 在系统启动前调用此函数, 每个 CPU 都要设置, SylixOS 允许不同的 CPU 核间中断向量不同. ** 输 入 : ** ulCPUId CPU ID ** ulIPIVector 核间中断向量号 ** 输 出 : *********************************************************************************************************/
VOID  API_InterVectorIpi (ULONG  ulCPUId, ULONG  ulIPIVector)
/********************************************************************************************************* ** 函数名称: API_InterDeferGet ** 功能描述: 获得对应 CPU 的中断延迟队列 ** 输 入 : ulCPUId CPU 号 ** 输 出 : 中断延迟队列 *********************************************************************************************************/
PLW_JOB_QUEUE  API_InterDeferGet (ULONG  ulCPUId)
/********************************************************************************************************* ** 函数名称: API_InterDeferContext ** 功能描述: 是否在中断延迟队列任务上下文 ** 输 入 : NONE ** 输 出 : 0: 不在中断上下文也不在中断延迟队列任务上下文 ** 1: 在中断上下文 ** 2: 中断延迟队列任务上下文 *********************************************************************************************************/
INT  API_InterDeferContext (VOID)
/********************************************************************************************************* ** 函数名称: API_InterDeferJobAdd ** 功能描述: 向中断延迟处理队列加入一个任务 ** 输 入 : pjobq 队列 ** pfunc 处理函数 ** pvArg 处理参数 ** 输 出 : ERROR CODE *********************************************************************************************************/
ULONG  API_InterDeferJobAdd (PLW_JOB_QUEUE  pjobq, VOIDFUNCPTR  pfunc, PVOID  pvArg)
/********************************************************************************************************* ** 函数名称: API_InterDeferJobDelete ** 功能描述: 从中断延迟处理队列删除任务 ** 输 入 : pjobq 队列 ** bMatchArg 是否进行参数匹配判断 ** pfunc 处理函数 ** pvArg 处理参数 ** 输 出 : NONE *********************************************************************************************************/
ULONG  API_InterDeferJobDelete (PLW_JOB_QUEUE  pjobq, BOOL  bMatchArg, VOIDFUNCPTR  pfunc, PVOID  pvArg)
/********************************************************************************************************* ** 函数名称: API_InterStackBaseGet ** 功能描述: 获得中断堆栈栈顶 (当前调用者所在的 CPU, 关中断模式下被调用) ** 输 入 : NONE ** 输 出 : 中断栈顶 *********************************************************************************************************/
PVOID  API_InterStackBaseGet (VOID)
/********************************************************************************************************* ** 函数名称: API_InterStackCheck ** 功能描述: 获得中断堆栈使用量 ** 输 入 : ulCPUId CPU 号 ** pstFreeByteSize 空闲堆栈大小 (可为 LW_NULL) ** pstUsedByteSize 使用堆栈大小 (可为 LW_NULL) ** 输 出 : *********************************************************************************************************/
VOID  API_InterStackCheck (ULONG   ulCPUId,size_t *pstFreeByteSize,size_t *pstUsedByteSize)
  相关解决方案