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

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

?? ixethdbnpeadaptor.c

?? u-boot1.3.0的原碼,從配了網(wǎng)絡驅動和FLASH的驅動,并該用ESC竟如
?? C
?? 第 1 頁 / 共 2 頁
字號:
/** * @file IxEthDBDBNPEAdaptor.c * * @brief Routines that read and write learning/search trees in NPE-specific format *  * @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 -- */#include "IxEthDB_p.h"#include "IxEthDBLog_p.h"/* forward prototype declarations */IX_ETH_DB_PUBLIC void ixEthDBELTShow(IxEthDBPortId portID);IX_ETH_DB_PUBLIC void ixEthDBShowNpeMsgHistory(void);/* data */UINT8* ixEthDBNPEUpdateArea[IX_ETH_DB_NUMBER_OF_PORTS];UINT32 dumpEltSize;/* private data */IX_ETH_DB_PRIVATE IxEthDBNoteWriteFn ixEthDBNPENodeWrite[IX_ETH_DB_MAX_RECORD_TYPE_INDEX + 1];#define IX_ETH_DB_MAX_DELTA_ZONES (6) /* at most 6 EP Delta zones, according to NPE FS */IX_ETH_DB_PRIVATE UINT32 ixEthDBEPDeltaOffset[IX_ETH_DB_MAX_RECORD_TYPE_INDEX + 1][IX_ETH_DB_MAX_DELTA_ZONES]; IX_ETH_DB_PRIVATE UINT32 ixEthDBEPDelta[IX_ETH_DB_MAX_RECORD_TYPE_INDEX + 1][IX_ETH_DB_MAX_DELTA_ZONES];/** * @brief allocates non-cached or contiguous NPE tree update areas for all the ports * * This function is called only once at initialization time from * @ref ixEthDBInit(). * * @warning do not call manually * * @see ixEthDBInit() * * @internal */IX_ETH_DB_PUBLICvoid ixEthDBNPEUpdateAreasInit(void){    UINT32 portIndex;    PortUpdateMethod *update;    for (portIndex = 0 ; portIndex < IX_ETH_DB_NUMBER_OF_PORTS ; portIndex++)    {        update = &ixEthDBPortInfo[portIndex].updateMethod;        if (ixEthDBPortDefinitions[portIndex].type == IX_ETH_NPE)        {            update->npeUpdateZone   = IX_OSAL_CACHE_DMA_MALLOC(FULL_ELT_BYTE_SIZE);            update->npeGwUpdateZone = IX_OSAL_CACHE_DMA_MALLOC(FULL_GW_BYTE_SIZE);            update->vlanUpdateZone  = IX_OSAL_CACHE_DMA_MALLOC(FULL_VLAN_BYTE_SIZE);            if (update->npeUpdateZone == NULL                || update->npeGwUpdateZone == NULL                || update->vlanUpdateZone == NULL)            {                ERROR_LOG("Fatal error: IX_ACC_DRV_DMA_MALLOC() returned NULL, no NPE update zones available\n");            }            else            {                memset(update->npeUpdateZone, 0, FULL_ELT_BYTE_SIZE);                memset(update->npeGwUpdateZone, 0, FULL_GW_BYTE_SIZE);                memset(update->vlanUpdateZone, 0, FULL_VLAN_BYTE_SIZE);            }        }        else        {            /* unused */            update->npeUpdateZone   = NULL;            update->npeGwUpdateZone = NULL;            update->vlanUpdateZone  = NULL;        }    }}/** * @brief deallocates the NPE update areas for all the ports * * This function is called at component de-initialization time * by @ref ixEthDBUnload(). * * @warning do not call manually * * @internal */IX_ETH_DB_PUBLICvoid ixEthDBNPEUpdateAreasUnload(void){    UINT32 portIndex;    for (portIndex = 0 ; portIndex < IX_ETH_DB_NUMBER_OF_PORTS ; portIndex++)    {        if (ixEthDBPortDefinitions[portIndex].type == IX_ETH_NPE)        {            IX_OSAL_CACHE_DMA_FREE(ixEthDBPortInfo[portIndex].updateMethod.npeUpdateZone);            IX_OSAL_CACHE_DMA_FREE(ixEthDBPortInfo[portIndex].updateMethod.npeGwUpdateZone);            IX_OSAL_CACHE_DMA_FREE(ixEthDBPortInfo[portIndex].updateMethod.vlanUpdateZone);        }    }}/** * @brief general-purpose NPE callback function * * @param npeID NPE ID * @param msg NPE message * * This function will unblock the caller by unlocking * the npeAckLock mutex defined for each NPE port * * @internal */IX_ETH_DB_PUBLICvoid ixEthDBNpeMsgAck(IxNpeMhNpeId npeID, IxNpeMhMessage msg){    IxEthDBPortId portID = IX_ETH_DB_NPE_TO_PORT_ID(npeID);    PortInfo *portInfo;    if (portID >= IX_ETH_DB_NUMBER_OF_PORTS)    {        /* invalid port */        return;    }    if (ixEthDBPortDefinitions[portID].type != IX_ETH_NPE)    {        /* not an NPE */        return;    }    portInfo = &ixEthDBPortInfo[portID];        ixOsalMutexUnlock(&portInfo->npeAckLock);}/** * @brief synchronizes the database with tree * * @param portID port ID of the NPE whose tree is to be scanned * @param eltBaseAddress memory base address of the NPE serialized tree * @param eltSize size in bytes of the NPE serialized tree * * Scans the NPE learning tree and resets the age of active database records. * * @internal */IX_ETH_DB_PUBLICvoid ixEthDBNPESyncScan(IxEthDBPortId portID, void *eltBaseAddress, UINT32 eltSize){    UINT32 eltEntryOffset;    UINT32 entryPortID;    /* invalidate cache */    IX_OSAL_CACHE_INVALIDATE(eltBaseAddress, eltSize);    for (eltEntryOffset = ELT_ROOT_OFFSET ; eltEntryOffset < eltSize ; eltEntryOffset += ELT_ENTRY_SIZE)    {        /* (eltBaseAddress + eltEntryOffset) points to a valid NPE tree node         *         * the format of the node is MAC[6 bytes]:PortID[1 byte]:Reserved[6 bits]:Active[1 bit]:Valid[1 bit]         * therefore we can just use the pointer for database searches as only the first 6 bytes are checked         */        void *eltNodeAddress       = (void *) ((UINT32) eltBaseAddress + eltEntryOffset);        /* debug */        IX_ETH_DB_NPE_VERBOSE_TRACE("DB: (NPEAdaptor) checking node at offset %d...\n", eltEntryOffset / ELT_ENTRY_SIZE);        if (IX_EDB_NPE_NODE_VALID(eltNodeAddress) != TRUE)        {            IX_ETH_DB_NPE_VERBOSE_TRACE("\t... node is empty\n");        }        else if (eltEntryOffset == ELT_ROOT_OFFSET)        {            IX_ETH_DB_NPE_VERBOSE_TRACE("\t... node is root\n");        }        if (IX_EDB_NPE_NODE_VALID(eltNodeAddress))        {            entryPortID = IX_ETH_DB_NPE_LOGICAL_ID_TO_PORT_ID(IX_EDB_NPE_NODE_PORT_ID(eltNodeAddress));            /* check only active entries belonging to this port */            if (ixEthDBPortInfo[portID].agingEnabled && IX_EDB_NPE_NODE_ACTIVE(eltNodeAddress) && (portID == entryPortID)                && ((ixEthDBPortDefinitions[portID].capabilities & IX_ETH_ENTRY_AGING) == 0))            {                /* search record */                HashNode *node = ixEthDBSearch((IxEthDBMacAddr *) eltNodeAddress, IX_ETH_DB_ALL_FILTERING_RECORDS);                /* safety check, maybe user deleted record right before sync? */                if (node != NULL)                {                    /* found record */                    MacDescriptor *descriptor = (MacDescriptor *) node->data;                    IX_ETH_DB_NPE_VERBOSE_TRACE("DB: (NPEAdaptor) synced entry [%s] already in the database, updating fields\n", mac2string(eltNodeAddress));                    /* reset age - set to -1 so that maintenance will restore it to 0 (or more) when incrementing */                    if (!descriptor->recordData.filteringData.staticEntry)                    {                        if (descriptor->type == IX_ETH_DB_FILTERING_RECORD)                        {                            descriptor->recordData.filteringData.age = AGE_RESET;                        }                        else if (descriptor->type == IX_ETH_DB_FILTERING_VLAN_RECORD)                        {                            descriptor->recordData.filteringVlanData.age = AGE_RESET;                        }                    }                    /* end transaction */                    ixEthDBReleaseHashNode(node);                }            }            else            {                IX_ETH_DB_NPE_VERBOSE_TRACE("\t... found portID %d, we check only port %d\n", entryPortID, portID);            }        }    }}/** * @brief writes a search tree in NPE format * * @param type type of records to be written into the NPE update zone * @param totalSize maximum size of the linearized tree * @param baseAddress memory base address where to write the NPE tree into * @param tree search tree to write in NPE format * @param blocks number of written 64-byte blocks * @param startIndex optimal binary search start index * * Serializes the given tree in NPE linear format * * @return none * * @internal */IX_ETH_DB_PUBLICvoid ixEthDBNPETreeWrite(IxEthDBRecordType type, UINT32 totalSize, void *baseAddress, MacTreeNode *tree, UINT32 *epDelta, UINT32 *blocks){    MacTreeNodeStack *stack;    UINT32 maxOffset = 0;    UINT32 emptyOffset;    stack = ixOsalCacheDmaMalloc(sizeof (MacTreeNodeStack));        if (stack == NULL)    {        ERROR_LOG("DB: (NPEAdaptor) failed to allocate the node stack for learning tree linearization, out of memory?\n");        return;    }    /* zero out empty root */    memset(baseAddress, 0, ELT_ENTRY_SIZE);    NODE_STACK_INIT(stack);    if (tree != NULL)    {        /* push tree root at offset 1 */        NODE_STACK_PUSH(stack, tree, 1);        maxOffset = 1;    }    while (NODE_STACK_NONEMPTY(stack))    {        MacTreeNode *node;        UINT32 offset;        NODE_STACK_POP(stack, node, offset);        /* update maximum offset */        if (offset > maxOffset)        {            maxOffset = offset;        }        IX_ETH_DB_NPE_VERBOSE_TRACE("DB: (NPEAdaptor) writing MAC [%s] at offset %d\n", mac2string(node->descriptor->macAddress), offset);        /* add node to NPE ELT at position indicated by offset */        if (offset < MAX_ELT_SIZE)        {            ixEthDBNPENodeWrite[type]((void *) (((UINT32) baseAddress) + offset * ELT_ENTRY_SIZE), node);        }        if (node->left != NULL)        {            NODE_STACK_PUSH(stack, node->left, LEFT_CHILD_OFFSET(offset));        }        else        {            /* ensure this entry is zeroed */            memset((void *) ((UINT32) baseAddress + LEFT_CHILD_OFFSET(offset) * ELT_ENTRY_SIZE), 0, ELT_ENTRY_SIZE);        }        if (node->right != NULL)        {            NODE_STACK_PUSH(stack, node->right, RIGHT_CHILD_OFFSET(offset));        }        else        {            /* ensure this entry is zeroed */            memset((void *) ((UINT32) baseAddress + RIGHT_CHILD_OFFSET(offset) * ELT_ENTRY_SIZE), 0, ELT_ENTRY_SIZE);        }    }        emptyOffset = maxOffset + 1;    /* zero out rest of the tree */    IX_ETH_DB_NPE_TRACE("DB: (NPEAdaptor) Emptying tree from offset %d, address 0x%08X, %d bytes\n",         emptyOffset, ((UINT32) baseAddress) + emptyOffset * ELT_ENTRY_SIZE, totalSize - (emptyOffset * ELT_ENTRY_SIZE));    if (emptyOffset < MAX_ELT_SIZE - 1)    {        memset((void *) (((UINT32) baseAddress) + (emptyOffset * ELT_ENTRY_SIZE)), 0, totalSize - (emptyOffset * ELT_ENTRY_SIZE));    }    /* flush cache */    IX_OSAL_CACHE_FLUSH(baseAddress, totalSize);    /* debug */    IX_ETH_DB_NPE_TRACE("DB: (NPEAdaptor) Ethernet learning/filtering tree XScale wrote at address 0x%08X (max %d bytes):\n\n",

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久亚洲二区三区| 国产在线观看一区二区| 韩国欧美一区二区| 色丁香久综合在线久综合在线观看| 欧美性生活久久| 国产精品麻豆视频| 国产米奇在线777精品观看| 精品视频在线看| 亚洲男女一区二区三区| 国产大片一区二区| 欧美一区二区三区视频在线| 亚洲最大的成人av| 91麻豆免费看| 日韩一区中文字幕| 成人妖精视频yjsp地址| 久久综合九色综合97婷婷| 五月天亚洲精品| 在线视频综合导航| 亚洲精选视频在线| 91性感美女视频| 国产精品福利一区二区三区| 国产河南妇女毛片精品久久久 | 日本精品视频一区二区| 久久久天堂av| 国产成人小视频| 国产性色一区二区| 高潮精品一区videoshd| 国产亚洲精品aa| 国产一区二区三区不卡在线观看 | 中文字幕在线一区免费| 高清beeg欧美| 国产精品午夜久久| av电影天堂一区二区在线观看| 欧美国产日产图区| 国产91在线看| 日韩毛片视频在线看| 色婷婷久久综合| 午夜久久电影网| 欧美精品免费视频| 久久国产精品第一页| 精品成人一区二区三区| 国产乱码精品1区2区3区| 久久精品在线观看| 97久久超碰国产精品| 亚洲黄色在线视频| 在线不卡中文字幕播放| 美腿丝袜亚洲三区| 日韩精品综合一本久道在线视频| 久久国产欧美日韩精品| 欧美国产激情二区三区| 在线一区二区三区四区| 日韩精品视频网站| 久久这里只有精品首页| 成人福利视频在线| 亚洲一区二区不卡免费| 欧美日韩国产区一| 久草热8精品视频在线观看| 久久九九久精品国产免费直播| 99视频国产精品| 五月激情综合婷婷| 国产偷v国产偷v亚洲高清| 色综合网色综合| 久久国产精品99久久久久久老狼| 国产精品对白交换视频| 在线亚洲精品福利网址导航| 久久99精品国产麻豆婷婷洗澡| 欧美国产日产图区| 91精品久久久久久久91蜜桃| 国产高清不卡一区二区| 亚洲永久免费视频| 精品国产免费人成电影在线观看四季| 99九九99九九九视频精品| 日韩一区精品视频| 亚洲欧洲成人av每日更新| 91精品婷婷国产综合久久性色| 国产成人av一区| 日本中文字幕不卡| 亚洲视频免费在线观看| 日韩欧美色电影| 在线观看日韩毛片| 成人晚上爱看视频| 奇米777欧美一区二区| 国产精品福利一区| 久久久久久免费| 日韩午夜在线观看视频| 欧美在线制服丝袜| 成人一区二区三区| 日本不卡123| 夜夜精品浪潮av一区二区三区| 久久久久久久久久久久久女国产乱 | 亚洲欧美日韩综合aⅴ视频| 欧美大片日本大片免费观看| 91久久精品一区二区三区| 国产999精品久久| 精东粉嫩av免费一区二区三区| 亚洲综合色成人| 亚洲日本在线观看| 国产视频一区不卡| 欧美成人一区二区| 欧美日韩国产精品自在自线| 97久久精品人人做人人爽| 国产宾馆实践打屁股91| 国产一区二区三区av电影 | 国产一区二区三区在线观看免费 | 欧美成人bangbros| 欧美日韩国产精选| 欧美另类一区二区三区| 欧美色视频在线| 欧美午夜精品一区二区蜜桃| 色婷婷综合久久久久中文 | 久久久久久久性| 久久蜜桃一区二区| 久久男人中文字幕资源站| 亚洲精品一区二区三区在线观看| 欧美一级电影网站| 欧美成人精品1314www| 日韩欧美国产高清| 精品国产乱码久久久久久蜜臀| 日韩精品一区二区在线观看| 日韩区在线观看| 久久久久高清精品| 国产欧美精品国产国产专区 | 国产不卡视频在线播放| 国产91综合一区在线观看| 国产精品资源在线看| 国产成人精品亚洲日本在线桃色| 成人网男人的天堂| 色狠狠桃花综合| 欧美精品日韩综合在线| 欧美大胆人体bbbb| 国产日韩精品一区| 亚洲人成7777| 日韩 欧美一区二区三区| 久久精品国产精品亚洲综合| 国产精品99久久久| bt欧美亚洲午夜电影天堂| 色av成人天堂桃色av| 欧美理论片在线| 久久久久国产一区二区三区四区| 国产精品三级av| 天天操天天色综合| 国产做a爰片久久毛片| 成人国产视频在线观看 | 一本色道久久加勒比精品 | 日韩影院精彩在线| 国产一区二区在线视频| thepron国产精品| 在线电影一区二区三区| 久久久久高清精品| 亚洲成人在线免费| 国产精品99久久久久久有的能看| 色老综合老女人久久久| 欧美成人免费网站| 一区二区三区波多野结衣在线观看| 日本最新不卡在线| 91视视频在线观看入口直接观看www| 欧美日韩一区二区三区不卡| 久久嫩草精品久久久久| 亚洲第一主播视频| 国产成人日日夜夜| 88在线观看91蜜桃国自产| 国产精品美女久久久久久久| 秋霞午夜av一区二区三区| 91在线高清观看| 久久亚洲一级片| 日本亚洲免费观看| 91免费看视频| 国产欧美日韩精品一区| 天堂蜜桃一区二区三区| 91丝袜高跟美女视频| 久久久欧美精品sm网站| 日韩vs国产vs欧美| 欧美吻胸吃奶大尺度电影| 日本一二三不卡| 狠狠色丁香婷综合久久| 欧美日韩另类国产亚洲欧美一级| 国产精品剧情在线亚洲| 国产乱子轮精品视频| 欧美二区乱c少妇| 午夜国产精品一区| 91丨porny丨蝌蚪视频| 国产精品久久久久久久久动漫| 国产乱码一区二区三区| 日韩一二三区视频| 日韩精品国产欧美| 欧美日韩另类一区| 亚洲激情男女视频| 一本色道a无线码一区v| 国产精品电影院| 91在线你懂得| 中文字幕色av一区二区三区| 国产米奇在线777精品观看| 欧美成人欧美edvon| 麻豆精品一区二区综合av| 欧洲视频一区二区| 亚洲蜜臀av乱码久久精品| 一本大道久久a久久精二百| 综合色中文字幕| 色综合天天综合| 亚洲高清不卡在线观看|