亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? ixqmgrdispatcher.c

?? 友善mini2440嵌入式
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
/** * @file    IxQMgrDispatcher.c * * @author Intel Corporation * @date    20-Dec-2001 *     * @brief   This file contains the implementation of the Dispatcher sub component * *  * @par * IXP400 SW Release version 2.0 *  * -- Copyright Notice -- *  * @par * Copyright 2001-2005, Intel Corporation. * All rights reserved. *  * @par * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * 3. Neither the name of the Intel Corporation nor the names of its contributors *    may be used to endorse or promote products derived from this software *    without specific prior written permission. *  * @par * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *  * @par * -- End of Copyright Notice --*//* * User defined include files. */#include "IxQMgr.h"#include "IxQMgrAqmIf_p.h"#include "IxQMgrQCfg_p.h"#include "IxQMgrDispatcher_p.h"#include "IxQMgrLog_p.h"#include "IxQMgrDefines_p.h"#include "IxFeatureCtrl.h"#include "IxOsal.h"/* * #defines and macros used in this file. *//* * This constant is used to indicate the number of priority levels supported */#define IX_QMGR_NUM_PRIORITY_LEVELS 3/*  * This constant is used to set the size of the array of status words */#define MAX_Q_STATUS_WORDS      4/* * This macro is used to check if a given priority is valid */#define IX_QMGR_DISPATCHER_PRIORITY_CHECK(priority) \(((priority) >= IX_QMGR_Q_PRIORITY_0) && ((priority) <= IX_QMGR_Q_PRIORITY_2))/* * This macto is used to check that a given interrupt source is valid */#define IX_QMGR_DISPATCHER_SOURCE_ID_CHECK(srcSel) \(((srcSel) >= IX_QMGR_Q_SOURCE_ID_E) && ((srcSel) <= IX_QMGR_Q_SOURCE_ID_NOT_F))/* * Number of times a dummy callback is called before logging a trace * message */#define LOG_THROTTLE_COUNT 1000000/* Priority tables limits */#define IX_QMGR_MIN_LOW_QUE_PRIORITY_TABLE_INDEX (0)#define IX_QMGR_MID_LOW_QUE_PRIORITY_TABLE_INDEX (16)#define IX_QMGR_MAX_LOW_QUE_PRIORITY_TABLE_INDEX (31)#define IX_QMGR_MIN_UPP_QUE_PRIORITY_TABLE_INDEX (32)#define IX_QMGR_MID_UPP_QUE_PRIORITY_TABLE_INDEX (48)#define IX_QMGR_MAX_UPP_QUE_PRIORITY_TABLE_INDEX (63) /* * This macro is used to check if a given callback type is valid */#define IX_QMGR_DISPATCHER_CALLBACK_TYPE_CHECK(type) \            (((type) >= IX_QMGR_TYPE_REALTIME_OTHER) && \            ((type) <= IX_QMGR_TYPE_REALTIME_SPORADIC))/*  * define max index in lower queue to use in loops  */#define IX_QMGR_MAX_LOW_QUE_TABLE_INDEX (31)/* * Typedefs whose scope is limited to this file. *//* * Information on a queue needed by the Dispatcher */typedef struct {    IxQMgrCallback callback;       /* Notification callback                  */    IxQMgrCallbackId callbackId;   /* Notification callback identifier       */    unsigned dummyCallbackCount;   /* Number of times runs of dummy callback */    IxQMgrPriority priority;       /* Dispatch priority                      */    unsigned int statusWordOffset; /* Offset to the status word to check     */    UINT32 statusMask;             /* Status mask                            */        UINT32 statusCheckValue;       /* Status check value                     */    UINT32 intRegCheckMask;	   /* Interrupt register check mask          */} IxQMgrQInfo;/* * Variable declarations global to this file. Externs are followed by * statics. *//*  * Flag to keep record of what dispatcher set in featureCtrl when ixQMgrInit() * is called. This is needed because it is possible that a client might * change whether the live lock prevention dispatcher is used between * calls to ixQMgrInit() and ixQMgrDispatcherLoopGet().  */PRIVATE IX_STATUS ixQMgrOrigB0Dispatcher = IX_FEATURE_CTRL_COMPONENT_ENABLED;/*  * keep record of Q types - not in IxQMgrQInfo for performance as * it is only used with ixQMgrDispatcherLoopRunB0LLP() */PRIVATE IxQMgrType ixQMgrQTypes[IX_QMGR_MAX_NUM_QUEUES];/* * This array contains a list of queue identifiers ordered by priority. The table * is split logically between queue identifiers 0-31 and 32-63. */static IxQMgrQId priorityTable[IX_QMGR_MAX_NUM_QUEUES];/* * This flag indicates to the dispatcher that the priority table needs to be rebuilt. */static BOOL rebuildTable = FALSE;/* Dispatcher statistics */static IxQMgrDispatcherStats dispatcherStats;/* Table of queue information */static IxQMgrQInfo dispatchQInfo[IX_QMGR_MAX_NUM_QUEUES];/* Masks use to identify the first queues in the priority tables *  when comparing with the interrupt register*/static unsigned int lowPriorityTableFirstHalfMask;static unsigned int uppPriorityTableFirstHalfMask;/* * Static function prototypes *//* * This function is the default callback for all queues */PRIVATE voiddummyCallback (IxQMgrQId qId,	      	       IxQMgrCallbackId cbId);PRIVATE voidixQMgrDispatcherReBuildPriorityTable (void);/* * Function definitions. */voidixQMgrDispatcherInit (void){    int i;    IxFeatureCtrlProductId productId = 0;    IxFeatureCtrlDeviceId deviceId = 0;    BOOL stickyIntSilicon = TRUE;     /* Set default priorities */    for (i=0; i< IX_QMGR_MAX_NUM_QUEUES; i++)    {	dispatchQInfo[i].callback = dummyCallback;	dispatchQInfo[i].callbackId = 0;	dispatchQInfo[i].dummyCallbackCount = 0;	dispatchQInfo[i].priority = IX_QMGR_Q_PRIORITY_2;	dispatchQInfo[i].statusWordOffset = 0;	dispatchQInfo[i].statusCheckValue = 0;	dispatchQInfo[i].statusMask = 0;          /* 	 * There are two interrupt registers, 32 bits each. One for the lower	 * queues(0-31) and one for the upper queues(32-63). Therefore need to	 * mod by 32 i.e the min upper queue identifier.	 */	dispatchQInfo[i].intRegCheckMask = (1<<(i%(IX_QMGR_MIN_QUEUPP_QID)));        /*          * Set the Q types - will only be used with livelock          */        ixQMgrQTypes[i] = IX_QMGR_TYPE_REALTIME_OTHER;	/* Reset queue statistics */	dispatcherStats.queueStats[i].callbackCnt = 0;	dispatcherStats.queueStats[i].priorityChangeCnt = 0;	dispatcherStats.queueStats[i].intNoCallbackCnt = 0;	dispatcherStats.queueStats[i].intLostCallbackCnt = 0;        dispatcherStats.queueStats[i].notificationEnabled = FALSE;        dispatcherStats.queueStats[i].srcSel = 0;    }    /* Priority table. Order the table from queue 0 to 63 */    ixQMgrDispatcherReBuildPriorityTable();    /* Reset statistics */    dispatcherStats.loopRunCnt = 0;    /* Get the device ID for the underlying silicon */    deviceId = ixFeatureCtrlDeviceRead();        /* Get the product ID for the underlying silicon */    productId = ixFeatureCtrlProductIdRead();    /*      * Check featureCtrl to see if Livelock prevention is required      */    ixQMgrOrigB0Dispatcher = ixFeatureCtrlSwConfigurationCheck(                                  IX_FEATURECTRL_ORIGB0_DISPATCHER);    /*     * Check if the silicon supports the sticky interrupt feature.     * IF (IXP42X AND A0) -> No sticky interrupt feature supported      */    if ((IX_FEATURE_CTRL_DEVICE_TYPE_IXP42X ==         (IX_FEATURE_CTRL_DEVICE_TYPE_MASK & deviceId)) &&        (IX_FEATURE_CTRL_SILICON_TYPE_A0 ==         (IX_FEATURE_CTRL_SILICON_STEPPING_MASK & productId)))     {       stickyIntSilicon = FALSE;    }    /*     * IF user wants livelock prev option AND silicon supports sticky interrupt      * feature -> enable the sticky interrupt bit     */    if ((IX_FEATURE_CTRL_SWCONFIG_DISABLED == ixQMgrOrigB0Dispatcher) &&         stickyIntSilicon)      {        ixQMgrStickyInterruptRegEnable();    }}IX_STATUSixQMgrDispatcherPrioritySet (IxQMgrQId qId,			     IxQMgrPriority priority){       int ixQMgrLockKey;    if (!ixQMgrQIsConfigured(qId))    {	return IX_QMGR_Q_NOT_CONFIGURED;    }        if (!IX_QMGR_DISPATCHER_PRIORITY_CHECK(priority))    {	return IX_QMGR_Q_INVALID_PRIORITY;    }    ixQMgrLockKey = ixOsalIrqLock();        /* Change priority */    dispatchQInfo[qId].priority = priority;    /* Set flag */    rebuildTable = TRUE;    ixOsalIrqUnlock(ixQMgrLockKey);#ifndef NDEBUG    /* Update statistics */    dispatcherStats.queueStats[qId].priorityChangeCnt++;#endif    return IX_SUCCESS;}IX_STATUSixQMgrNotificationCallbackSet (IxQMgrQId qId,			       IxQMgrCallback callback,			       IxQMgrCallbackId callbackId){    if (!ixQMgrQIsConfigured(qId))    {	return IX_QMGR_Q_NOT_CONFIGURED;    }    if (NULL == callback)    {	/* Reset to dummy callback */	dispatchQInfo[qId].callback = dummyCallback;	dispatchQInfo[qId].dummyCallbackCount = 0;	dispatchQInfo[qId].callbackId = 0;    }    else     {	dispatchQInfo[qId].callback = callback;	dispatchQInfo[qId].callbackId = callbackId;    }    return IX_SUCCESS;}IX_STATUSixQMgrNotificationEnable (IxQMgrQId qId, 			  IxQMgrSourceId srcSel){    IxQMgrQStatus qStatusOnEntry;/* The queue status on entry/exit */    IxQMgrQStatus qStatusOnExit; /* to this function               */    int ixQMgrLockKey;#ifndef NDEBUG    if (!ixQMgrQIsConfigured (qId))    {	return IX_QMGR_Q_NOT_CONFIGURED;    }    if ((qId < IX_QMGR_MIN_QUEUPP_QID) &&       !IX_QMGR_DISPATCHER_SOURCE_ID_CHECK(srcSel))    {	/* QId 0-31 source id invalid */	return IX_QMGR_INVALID_INT_SOURCE_ID;    }    if ((IX_QMGR_Q_SOURCE_ID_NE != srcSel) &&	(qId >= IX_QMGR_MIN_QUEUPP_QID))    {	/*	 * For queues 32-63 the interrupt source is fixed to the Nearly	 * Empty status flag and therefore should have a srcSel of NE.	 */	return IX_QMGR_INVALID_INT_SOURCE_ID;    }#endif#ifndef NDEBUG    dispatcherStats.queueStats[qId].notificationEnabled = TRUE;    dispatcherStats.queueStats[qId].srcSel = srcSel;#endif    /* Get the current queue status */    ixQMgrAqmIfQueStatRead (qId, &qStatusOnEntry);      /*      * Enabling interrupts results in Read-Modify-Write     * so need critical section     */    ixQMgrLockKey = ixOsalIrqLock();    /* Calculate the checkMask and checkValue for this q */    ixQMgrAqmIfQStatusCheckValsCalc (qId,				     srcSel,				     &dispatchQInfo[qId].statusWordOffset,				     &dispatchQInfo[qId].statusCheckValue,				     &dispatchQInfo[qId].statusMask);    /* Set the interupt source is this queue is in the range 0-31 */    if (qId < IX_QMGR_MIN_QUEUPP_QID)    {	ixQMgrAqmIfIntSrcSelWrite (qId, srcSel);    }    /* Enable the interrupt */    ixQMgrAqmIfQInterruptEnable (qId);    ixOsalIrqUnlock(ixQMgrLockKey);        /* Get the current queue status */    ixQMgrAqmIfQueStatRead (qId, &qStatusOnExit);      /* If the status has changed return a warning */    if (qStatusOnEntry != qStatusOnExit)    {	return IX_QMGR_WARNING;    }        return IX_SUCCESS;}IX_STATUSixQMgrNotificationDisable (IxQMgrQId qId){    int ixQMgrLockKey;#ifndef NDEBUG    /* Validate parameters */    if (!ixQMgrQIsConfigured (qId))    {	return IX_QMGR_Q_NOT_CONFIGURED;    }#endif      /*      * Enabling interrupts results in Read-Modify-Write     * so need critical section     */#ifndef NDEBUG    dispatcherStats.queueStats[qId].notificationEnabled = FALSE;#endif    ixQMgrLockKey = ixOsalIrqLock();    ixQMgrAqmIfQInterruptDisable (qId);        ixOsalIrqUnlock(ixQMgrLockKey);    return IX_SUCCESS;    }void ixQMgrStickyInterruptRegEnable(void){ /* Use Aqm If function to set Interrupt Register0 Bit-3 */  ixQMgrAqmIfIntSrcSelReg0Bit3Set ();   }#if !defined __XSCALE__ || defined __linux

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久亚洲高清| 夜夜揉揉日日人人青青一国产精品| 日韩电影免费一区| 91福利在线播放| 亚洲伦理在线免费看| 成人国产一区二区三区精品| 久久久久一区二区三区四区| 久热成人在线视频| 精品欧美黑人一区二区三区| 蜜桃视频一区二区三区在线观看 | 天堂久久一区二区三区| 91国偷自产一区二区开放时间| 亚洲素人一区二区| 色婷婷久久综合| 一区二区在线观看免费视频播放| 色综合中文字幕国产 | 亚洲老妇xxxxxx| 99这里都是精品| 日韩伦理电影网| 欧美性大战久久久久久久| 亚洲一区二区精品视频| 欧美日韩国产123区| 日本不卡在线视频| 久久先锋资源网| 成人av在线观| 亚洲精品伦理在线| 欧美色视频一区| 蜜臀av一区二区三区| 精品国产电影一区二区 | 日韩福利视频导航| 日韩三级视频中文字幕| 国产在线一区二区综合免费视频| 久久精品免视看| jlzzjlzz亚洲日本少妇| 亚洲一区视频在线| 日韩亚洲欧美高清| 国产丶欧美丶日本不卡视频| ...av二区三区久久精品| 在线观看日韩精品| 久久国产精品无码网站| 欧美激情在线一区二区| 色吧成人激情小说| 青青国产91久久久久久| 久久人人97超碰com| 91亚洲国产成人精品一区二三| 亚洲国产va精品久久久不卡综合| 日韩精品资源二区在线| 丰满少妇久久久久久久| 亚洲美女精品一区| 日韩一区二区不卡| 成人精品鲁一区一区二区| 一个色在线综合| 日韩精品一区二区三区四区| 成人av午夜电影| 午夜精品久久久久久不卡8050| 精品国产123| 日本韩国一区二区三区视频| 欧美aⅴ一区二区三区视频| 国产欧美日韩三区| 欧美三级在线播放| 国产激情视频一区二区在线观看| 一区二区三区日韩欧美| 精品日韩欧美在线| 91在线视频免费观看| 日日夜夜一区二区| 国产精品日韩成人| 91精品国产91久久久久久最新毛片| 日韩免费在线观看| 欧美顶级少妇做爰| 欧美成人伊人久久综合网| 精品理论电影在线| 日韩一级完整毛片| 国产农村妇女毛片精品久久麻豆| 欧美国产激情一区二区三区蜜月| 国产精品毛片久久久久久 | 亚洲图片欧美视频| 久久久噜噜噜久久中文字幕色伊伊| 精品在线观看视频| 亚洲精品日韩专区silk| 精品成人私密视频| 欧美日韩一区高清| av一区二区三区四区| 久久99深爱久久99精品| 亚洲一区二区综合| 国产精品青草综合久久久久99| 欧美高清视频一二三区 | 欧美日韩电影在线播放| 国产91精品一区二区麻豆亚洲| 亚洲综合色区另类av| 欧美激情一区二区三区全黄| 91精品免费观看| 日本精品裸体写真集在线观看| 国产黄人亚洲片| 蜜臀a∨国产成人精品| 亚洲综合清纯丝袜自拍| 国产精品久久久久久久久晋中| 欧美zozo另类异族| 91精品国产一区二区三区| 色欧美88888久久久久久影院| 国产剧情av麻豆香蕉精品| 欧美96一区二区免费视频| 亚洲一区二区综合| 亚洲乱码国产乱码精品精可以看 | 欧美刺激午夜性久久久久久久| 色综合久久综合网| av一区二区三区四区| 国产成人三级在线观看| 久久国产精品第一页| 天天影视网天天综合色在线播放| 亚洲精品亚洲人成人网| 国产精品伦一区二区三级视频| 精品少妇一区二区三区免费观看| 欧美日韩高清一区二区不卡| 亚洲柠檬福利资源导航| 国产精品毛片高清在线完整版 | 日韩网站在线看片你懂的| 欧美色视频在线| 欧美系列亚洲系列| 91黄色免费版| 在线视频欧美精品| 一本到高清视频免费精品| av电影在线观看不卡| 99久久国产综合精品女不卡| 不卡一区二区在线| 成人教育av在线| 成人高清免费观看| av中文一区二区三区| www.欧美日韩| 91一区在线观看| 91麻豆自制传媒国产之光| 99视频精品免费视频| 成人avav在线| 99麻豆久久久国产精品免费 | 盗摄精品av一区二区三区| 国产成人免费在线观看不卡| 国产成人免费在线观看不卡| 国产黑丝在线一区二区三区| 国产suv精品一区二区三区| 成人免费视频视频在线观看免费| 不卡视频免费播放| 色综合一区二区三区| 日本大香伊一区二区三区| 欧美性受xxxx| 91精品婷婷国产综合久久| 日韩视频一区二区三区在线播放 | 欧美精品一区二区三区高清aⅴ| 精品日韩99亚洲| 欧美激情在线观看视频免费| 国产精品激情偷乱一区二区∴| ...xxx性欧美| 亚洲成人激情自拍| 久久精品国内一区二区三区 | 日本aⅴ精品一区二区三区 | 午夜精品一区在线观看| 青青草成人在线观看| 国内欧美视频一区二区| 成人免费av资源| 精品污污网站免费看| 日韩视频一区在线观看| 国产欧美日韩精品一区| 亚洲免费在线视频一区 二区| 亚洲主播在线观看| 美女精品一区二区| 国产91在线|亚洲| 色美美综合视频| 日韩视频免费直播| 国产精品国产三级国产普通话三级| 亚洲人123区| 美腿丝袜亚洲一区| 成人免费的视频| 欧美精品日日鲁夜夜添| 欧美精品一区二区三区四区 | 一二三区精品福利视频| 男女男精品视频| 成人h精品动漫一区二区三区| 亚洲黄色片在线观看| 日产欧产美韩系列久久99| 国产精品91xxx| 欧美性视频一区二区三区| 精品第一国产综合精品aⅴ| 亚洲视频一区二区在线| 青青草伊人久久| 99热这里都是精品| 日韩一级片在线播放| 中文字幕第一区| 婷婷丁香激情综合| 成人精品亚洲人成在线| 555夜色666亚洲国产免| 国产精品区一区二区三区 | 尤物在线观看一区| 蓝色福利精品导航| 色综合久久中文综合久久牛| 精品久久久久久久一区二区蜜臀| 亚洲欧洲韩国日本视频| 久久疯狂做爰流白浆xx| 色婷婷综合五月| 久久一夜天堂av一区二区三区| 一区二区三区精品视频在线| 国产一区激情在线| 欧美撒尿777hd撒尿|