⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ixosalosddkirq.c

📁 intel IXP400系列cpu(2.3版)的库文件
💻 C
字号:
/**
 * @file IxOsalOsServices.c (vxWorks)
 *
 * @brief Implementation for Irq, Mem, sleep. 
 * 
 * 
 * @par
 * <COPYRIGHT_TAG>
 */

#include <vxWorks.h>
#include <iv.h>
#include <intLib.h>
#include <sysLib.h>
#include <logLib.h>
#include <taskLib.h>
#include <string.h>

#include "IxOsal.h"

/* dummy ISR to register during unBind */
PRIVATE void ixOsalDummyIsr (void *parameter);
PRIVATE void
ixOsalDummyIsr (void *parameter)
{
}

/**************************************
 * Irq services 
 *************************************/

PUBLIC IX_STATUS
ixOsalIrqBind (UINT32 irqLevel, IxOsalVoidFnVoidPtr routine, void *parameter)
{

#if((CPU==SIMSPARCSOLARIS) || (CPU==SIMLINUX))
    /*
     * No Irq support in simulation env 
     */
    return IX_FAIL;
#else
    if (intConnect
        (INUM_TO_IVEC(irqLevel),
	(IxOsalVoidFnVoidPtr) routine, 
	(int) parameter) != OK)
    {
        return IX_FAIL;
    }
    intEnable (irqLevel);
    return IX_SUCCESS;

#endif

}

PUBLIC IX_STATUS
ixOsalIrqUnbind (UINT32 irqLevel)
{
    /*
     * disable interrupts for this vector 
     */
    if (intDisable (IVEC_TO_INUM (irqLevel)) != OK)
    {
        return IX_FAIL;
    }

    /*
     * register a dummy ISR 
     */
    if (intConnect (INUM_TO_IVEC(irqLevel), 
	           (IxOsalVoidFnVoidPtr) ixOsalDummyIsr, 0) != OK)
    {
        return IX_FAIL;
    }
    return IX_SUCCESS;
}

PUBLIC UINT32
ixOsalIrqLock ()
{
#if((CPU==SIMSPARCSOLARIS) || (CPU==SIMLINUX))

    ixOsalLog (IX_OSAL_LOG_LVL_ERROR,
        IX_OSAL_LOG_DEV_STDOUT,
        "ixOsalIrqLock: not supported in simulation  \n", 0, 0, 0, 0, 0, 0);

    return 0;

#else
    return intLock ();
#endif

}

/* Enable interrupts and task scheduling,
 * input parameter: irqEnable status returned
 * by ixOsalIrqLock().
 */
PUBLIC void
ixOsalIrqUnlock (UINT32 irqEnable)
{

#if((CPU==SIMSPARCSOLARIS) || (CPU==SIMLINUX))
    ixOsalLog (IX_OSAL_LOG_LVL_ERROR,
        IX_OSAL_LOG_DEV_STDOUT,
        "ixOsalIrqUnlock: not supported in simulation  \n", 0, 0, 0, 0, 0, 0);
#else
    intUnlock (irqEnable);
#endif

}

PUBLIC void
ixOsalIrqEnable (UINT32 irqLevel)
{
    intEnable (irqLevel);
}

PUBLIC void
ixOsalIrqDisable (UINT32 irqLevel)
{
    intDisable (irqLevel);
}

/** 
 * Return previous int level, return IX_FAIL if fail.
 * Interrupt are locked out at or below that level.
 */
PUBLIC UINT32
ixOsalIrqLevelSet (UINT32 irqLevel)
{

#if((CPU==SIMSPARCSOLARIS) || (CPU==SIMLINUX))
    /*
     * No irq support in simulation, log error and return any 
     * * number, in this case we return zero.
     */
    ixOsalLog (IX_OSAL_LOG_LVL_ERROR,
        IX_OSAL_LOG_DEV_STDOUT,
        "ixOsalIrqLevelSet: not supported in simulation  \n",
        0, 0, 0, 0, 0, 0);
    return 0;
#else
    return intLevelSet (irqLevel);
#endif
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -