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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ixnpemhsolicitedcbmgr.c

?? 友善mini2440嵌入式
?? C
字號:
/** * @file IxNpeMhSolicitedCbMgr.c * * @author Intel Corporation * @date 18 Jan 2002 * * @brief This file contains the implementation of the private API for the * Solicited Callback Manager module. * *  * @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 --*/#ifndef IXNPEMHCONFIG_P_H#	define IXNPEMHSOLICITEDCBMGR_C#else#	error "Error, IxNpeMhConfig_p.h should not be included before this definition."#endif/* * Put the system defined include files required. *//* * Put the user defined include files required. */#include "IxOsal.h"#include "IxNpeMhMacros_p.h"#include "IxNpeMhSolicitedCbMgr_p.h"#include "IxNpeMhConfig_p.h"/* * #defines and macros used in this file. *//* * Typedefs whose scope is limited to this file. *//** * @struct IxNpeMhSolicitedCallbackListEntry * * @brief This structure is used to store the information associated with * an entry in the callback list.  This consists of the ID of the send * message (which indicates the ID of the corresponding response message) * and the callback function pointer itself. * */typedef struct IxNpeMhSolicitedCallbackListEntry{    /** message ID */    IxNpeMhMessageId messageId;    /** callback function pointer */    IxNpeMhCallback callback;    /** pointer to next entry in the list */    struct IxNpeMhSolicitedCallbackListEntry *next;} IxNpeMhSolicitedCallbackListEntry;/** * @struct IxNpeMhSolicitedCallbackList * * @brief This structure is used to maintain the list of response * callbacks.  The number of entries in this list will be variable, and * they will be stored in a linked list fashion for ease of addition and * removal.  The entries themselves are statically allocated, and are * organised into a "free" list and a "callback" list.  Adding an entry * means taking an entry from the "free" list and adding it to the * "callback" list.  Removing an entry means removing it from the * "callback" list and returning it to the "free" list. */typedef struct{    /** pointer to the head of the free list */    IxNpeMhSolicitedCallbackListEntry *freeHead;    /** pointer to the head of the callback list */    IxNpeMhSolicitedCallbackListEntry *callbackHead;    /** pointer to the tail of the callback list */    IxNpeMhSolicitedCallbackListEntry *callbackTail;    /** array of entries - the first entry is used as a dummy entry to */    /* avoid the scenario of having an empty list, hence '+ 1' */    IxNpeMhSolicitedCallbackListEntry entries[IX_NPEMH_MAX_CALLBACKS + 1];} IxNpeMhSolicitedCallbackList;/** * @struct IxNpeMhSolicitedCbMgrStats * * @brief This structure is used to maintain statistics for the Solicited * Callback Manager module. */typedef struct{    UINT32 saves;     /**< callback list saves */    UINT32 retrieves; /**< callback list retrieves */} IxNpeMhSolicitedCbMgrStats;/* * Variable declarations global to this file only.  Externs are followed by * static variables. */PRIVATE IxNpeMhSolicitedCallbackListixNpeMhSolicitedCbMgrCallbackLists[IX_NPEMH_NUM_NPES];PRIVATE IxNpeMhSolicitedCbMgrStatsixNpeMhSolicitedCbMgrStats[IX_NPEMH_NUM_NPES];/* * Extern function prototypes. *//* * Static function prototypes. *//* * Function definition: ixNpeMhSolicitedCbMgrInitialize */void ixNpeMhSolicitedCbMgrInitialize (void){    IxNpeMhNpeId npeId;    UINT32 localIndex;    IxNpeMhSolicitedCallbackList *list = NULL;    IX_NPEMH_TRACE0 (IX_NPEMH_FN_ENTRY_EXIT, "Entering "                     "ixNpeMhSolicitedCbMgrInitialize\n");    /* for each NPE ... */    for (npeId = 0; npeId < IX_NPEMH_NUM_NPES; npeId++)    {        /* initialise a pointer to the list for convenience */        list = &ixNpeMhSolicitedCbMgrCallbackLists[npeId];        /* for each entry in the list, after the dummy entry ... */        for (localIndex = 1; localIndex <= IX_NPEMH_MAX_CALLBACKS; localIndex++)        {            /* initialise the entry */            list->entries[localIndex].messageId = 0x00;            list->entries[localIndex].callback = NULL;            /* if this entry is before the last entry */            if (localIndex < IX_NPEMH_MAX_CALLBACKS)            {                /* chain this entry to the following entry */                list->entries[localIndex].next = &(list->entries[localIndex + 1]);            }            else /* this entry is the last entry */            {                /* the last entry isn't chained to anything */                list->entries[localIndex].next = NULL;            }        }        /* set the free list pointer to point to the first real entry */        /* (all real entries begin chained together on the free list) */        list->freeHead = &(list->entries[1]);        /* set the callback list pointers to point to the dummy entry */        /* (the callback list is initially empty) */        list->callbackHead = &(list->entries[0]);        list->callbackTail = &(list->entries[0]);    }    IX_NPEMH_TRACE0 (IX_NPEMH_FN_ENTRY_EXIT, "Exiting "                     "ixNpeMhSolicitedCbMgrInitialize\n");}/* * Function definition: ixNpeMhSolicitedCbMgrCallbackSave */IX_STATUS ixNpeMhSolicitedCbMgrCallbackSave (    IxNpeMhNpeId npeId,    IxNpeMhMessageId solicitedMessageId,    IxNpeMhCallback solicitedCallback){    IxNpeMhSolicitedCallbackList *list = NULL;    IxNpeMhSolicitedCallbackListEntry *callbackEntry = NULL;    IX_NPEMH_TRACE0 (IX_NPEMH_FN_ENTRY_EXIT, "Entering "                     "ixNpeMhSolicitedCbMgrCallbackSave\n");    /* initialise a pointer to the list for convenience */    list = &ixNpeMhSolicitedCbMgrCallbackLists[npeId];    /* check to see if there are any entries in the free list */    if (list->freeHead == NULL)    {        IX_NPEMH_ERROR_REPORT ("Solicited callback list is full\n");        return IX_FAIL;    }    /* there is an entry in the free list we can use */    /* update statistical info */    ixNpeMhSolicitedCbMgrStats[npeId].saves++;    /* remove a callback entry from the start of the free list */    callbackEntry = list->freeHead;    list->freeHead = callbackEntry->next;    /* fill in the callback entry with the new data */    callbackEntry->messageId = solicitedMessageId;    callbackEntry->callback = solicitedCallback;    /* the new callback entry will be added to the tail of the callback */    /* list, so it isn't chained to anything */    callbackEntry->next = NULL;    /* chain new callback entry to the last entry of the callback list */    list->callbackTail->next = callbackEntry;    list->callbackTail = callbackEntry;    IX_NPEMH_TRACE0 (IX_NPEMH_FN_ENTRY_EXIT, "Exiting "                     "ixNpeMhSolicitedCbMgrCallbackSave\n");    return IX_SUCCESS;}/* * Function definition: ixNpeMhSolicitedCbMgrCallbackRetrieve */void ixNpeMhSolicitedCbMgrCallbackRetrieve (    IxNpeMhNpeId npeId,    IxNpeMhMessageId solicitedMessageId,    IxNpeMhCallback *solicitedCallback){    IxNpeMhSolicitedCallbackList *list = NULL;    IxNpeMhSolicitedCallbackListEntry *callbackEntry = NULL;    IxNpeMhSolicitedCallbackListEntry *previousEntry = NULL;    /* initialise a pointer to the list for convenience */    list = &ixNpeMhSolicitedCbMgrCallbackLists[npeId];    /* initialise the callback entry to the first entry of the callback */    /* list - we must skip over the dummy entry, which is the previous */    callbackEntry = list->callbackHead->next;    previousEntry = list->callbackHead;    /* traverse the callback list looking for an entry with a matching */    /* message ID.  note we also save the previous entry's pointer to */    /* allow us to unchain the matching entry from the callback list */    while ((callbackEntry != NULL) &&           (callbackEntry->messageId != solicitedMessageId))    {        previousEntry = callbackEntry;        callbackEntry = callbackEntry->next;    }    /* if we didn't find a matching callback entry */    if (callbackEntry == NULL)    {        /* return a NULL callback in the outgoing parameter */        *solicitedCallback = NULL;    }    else /* we found a matching callback entry */    {        /* update statistical info */        ixNpeMhSolicitedCbMgrStats[npeId].retrieves++;        /* return the callback in the outgoing parameter */        *solicitedCallback = callbackEntry->callback;        /* unchain callback entry by chaining previous entry to next */        previousEntry->next = callbackEntry->next;        /* if the callback entry is at the tail of the list */        if (list->callbackTail == callbackEntry)        {            /* update the tail of the callback list */            list->callbackTail = previousEntry;        }        /* re-initialise the callback entry */        callbackEntry->messageId = 0x00;        callbackEntry->callback = NULL;        /* add the callback entry to the start of the free list */        callbackEntry->next = list->freeHead;        list->freeHead = callbackEntry;    }}/* * Function definition: ixNpeMhSolicitedCbMgrShow */void ixNpeMhSolicitedCbMgrShow (    IxNpeMhNpeId npeId){    /* show the solicited callback list save counter */    IX_NPEMH_SHOW ("Solicited callback list saves",                   ixNpeMhSolicitedCbMgrStats[npeId].saves);    /* show the solicited callback list retrieve counter */    IX_NPEMH_SHOW ("Solicited callback list retrieves",                   ixNpeMhSolicitedCbMgrStats[npeId].retrieves);}/* * Function definition: ixNpeMhSolicitedCbMgrShowReset */void ixNpeMhSolicitedCbMgrShowReset (    IxNpeMhNpeId npeId){    /* reset the solicited callback list save counter */    ixNpeMhSolicitedCbMgrStats[npeId].saves = 0;    /* reset the solicited callback list retrieve counter */    ixNpeMhSolicitedCbMgrStats[npeId].retrieves = 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
fc2成人免费人成在线观看播放| 不卡av在线网| 国产精品亚洲一区二区三区妖精| 色8久久精品久久久久久蜜| 日韩欧美国产午夜精品| 一区二区三区在线观看欧美| 精品一区在线看| 欧美日韩高清一区二区不卡| 国产欧美日韩一区二区三区在线观看| 亚洲综合免费观看高清完整版在线 | 久久精品国产精品亚洲红杏| 99久久精品免费观看| 日韩欧美一区二区免费| 亚洲国产aⅴ天堂久久| 一本大道久久a久久综合| 国产欧美va欧美不卡在线 | 亚洲在线观看免费视频| 成人午夜视频在线| 久久日韩精品一区二区五区| 日本v片在线高清不卡在线观看| 99在线精品视频| 日本一区二区成人| 国产成人午夜精品5599| 久久亚洲私人国产精品va媚药| 日本午夜一本久久久综合| 欧美日韩你懂的| 午夜欧美电影在线观看| 在线视频综合导航| 亚洲一区二区三区四区的| 色哟哟日韩精品| 亚洲卡通欧美制服中文| 91丨国产丨九色丨pron| 一区在线观看免费| 99国产欧美久久久精品| 亚洲精品视频在线| 欧美视频在线播放| 日韩精品乱码免费| 精品国产一区二区在线观看| 奇米精品一区二区三区四区 | 中文幕一区二区三区久久蜜桃| 国产精品系列在线播放| 久久精品人人做人人综合| 精品亚洲欧美一区| 欧美激情一区二区三区| 欧美视频一区二| 日韩成人av影视| 亚洲精品一线二线三线无人区| 国产一区二区三区综合| 中文字幕一区二区三区视频| 91丨porny丨最新| 视频一区二区三区在线| 日韩精品一区二区三区在线 | 26uuu国产一区二区三区| 国产精品一二三| 亚洲欧美福利一区二区| 欧美人动与zoxxxx乱| 麻豆精品视频在线观看免费| 久久久久国色av免费看影院| jizz一区二区| 亚洲成av人片一区二区三区| 久久在线观看免费| 日本久久一区二区三区| 蜜桃精品在线观看| 国产精品国产三级国产| 欧美日韩电影一区| 高清国产午夜精品久久久久久| 亚洲精品国产a久久久久久| 6080国产精品一区二区| 国产成人午夜高潮毛片| 亚洲成人激情综合网| 国产欧美精品在线观看| 欧美日韩高清在线播放| 成人亚洲精品久久久久软件| 中文字幕在线观看不卡视频| 亚洲精品成人悠悠色影视| 在线视频国内自拍亚洲视频| 久久99热这里只有精品| 一区二区三区中文字幕精品精品| 日韩一区二区电影| 日韩午夜av一区| 9l国产精品久久久久麻豆| 久久成人免费网站| 一区二区三区中文免费| 久久精品欧美一区二区三区麻豆| 欧美亚洲国产bt| 成人h版在线观看| 日本不卡一区二区| 亚洲乱码国产乱码精品精的特点| 精品福利av导航| 在线综合视频播放| 97久久精品人人澡人人爽| 美女在线观看视频一区二区| 亚洲精选视频在线| 国产精品免费网站在线观看| 91精品国产高清一区二区三区蜜臀| 99久久精品免费看| 精品亚洲国内自在自线福利| 亚洲综合一区二区三区| 中文字幕佐山爱一区二区免费| 欧美不卡在线视频| 91精品国产日韩91久久久久久| 欧美亚洲综合网| 色噜噜偷拍精品综合在线| 成人三级在线视频| 成人污污视频在线观看| 国产麻豆精品theporn| 美国精品在线观看| 麻豆国产91在线播放| 午夜视频久久久久久| 亚洲成精国产精品女| 亚洲国产综合视频在线观看| 亚洲国产欧美在线| 亚洲第一搞黄网站| 日韩精品乱码免费| 美女尤物国产一区| 国产一区视频导航| 国产99久久久久久免费看农村| 国产成人aaa| 99久久婷婷国产综合精品电影 | 水野朝阳av一区二区三区| 亚洲一区在线播放| 一区二区三区精品久久久| 亚洲一线二线三线视频| 亚洲国产美女搞黄色| 青草av.久久免费一区| 免费观看一级特黄欧美大片| 久久精品99国产国产精| 国产美女视频一区| 波波电影院一区二区三区| 99久久精品国产导航| 在线观看国产91| 日韩精品一区二区三区在线| 久久亚洲一区二区三区四区| 国产精品国产三级国产aⅴ入口| 最新中文字幕一区二区三区 | 亚洲啪啪综合av一区二区三区| 亚洲欧洲av另类| 亚洲国产视频一区二区| 麻豆91精品视频| 国产白丝网站精品污在线入口| 97国产一区二区| 91精品黄色片免费大全| 国产日韩精品一区二区浪潮av| 一区在线观看免费| 国产91丝袜在线播放0| 91电影在线观看| 精品欧美久久久| 亚洲乱码中文字幕| 卡一卡二国产精品| 99麻豆久久久国产精品免费优播| 欧美性猛片aaaaaaa做受| 精品日本一线二线三线不卡| 国产精品国产成人国产三级| 视频一区二区中文字幕| 成人h动漫精品一区二区| 欧美丰满嫩嫩电影| 综合网在线视频| 久久se精品一区精品二区| 色94色欧美sute亚洲13| 精品国产不卡一区二区三区| 尤物在线观看一区| 国产夫妻精品视频| 欧美一区二区精美| 亚洲综合久久久久| 成人短视频下载| 精品久久人人做人人爱| 亚洲综合在线第一页| 懂色av一区二区三区蜜臀 | 久久精品人人做人人爽人人| 亚洲一区视频在线观看视频| 国产成人午夜99999| 欧美一区二区三区性视频| 中文字幕中文字幕中文字幕亚洲无线| 日韩av中文在线观看| 欧美在线一二三| 综合精品久久久| 成人教育av在线| 欧美精品一区二区久久久| 偷拍一区二区三区四区| 色婷婷激情一区二区三区| 中文字幕精品综合| 国产夫妻精品视频| 亚洲精品一区二区三区在线观看| 亚洲第一二三四区| 欧美日韩激情在线| 亚洲自拍偷拍综合| 91久久精品国产91性色tv| 国产精品欧美久久久久无广告 | 美女精品自拍一二三四| 在线观看亚洲专区| 亚洲免费在线观看| 99国产精品久久久久久久久久| 国产免费观看久久| 风间由美中文字幕在线看视频国产欧美| 日韩久久久久久| 看电视剧不卡顿的网站| 精品免费国产二区三区| 男女性色大片免费观看一区二区| 91精品国产一区二区三区香蕉| 日韩制服丝袜av|