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

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

?? ixethdbnpeadaptor.c

?? 友善mini2440嵌入式
?? 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一区二区三区免费野_久草精品视频
久久美女艺术照精彩视频福利播放 | 亚洲九九爱视频| 日韩精品一区二区在线观看| 欧美日韩亚洲综合在线| 91黄色在线观看| 精品视频在线看| 制服丝袜成人动漫| 精品国产一区二区三区久久影院| 欧美视频你懂的| 欧美福利电影网| 久久这里只有精品视频网| 欧美一区二区三区电影| 精品国内二区三区| 中文字幕欧美一区| 日韩高清在线不卡| 成人aa视频在线观看| 欧美色图12p| 国产亚洲人成网站| 亚洲最色的网站| 九九九精品视频| 粉嫩aⅴ一区二区三区四区五区| av网站免费线看精品| 欧美三级韩国三级日本一级| 制服丝袜中文字幕亚洲| 国产精品美女久久久久久久久久久| 亚洲一线二线三线视频| 狠狠色伊人亚洲综合成人| 成人av电影在线播放| 精品黑人一区二区三区久久| 一区二区三区在线观看动漫| 国产精品18久久久久久久网站| 91蜜桃视频在线| 国产色产综合产在线视频| 日韩av在线发布| av午夜一区麻豆| 欧美激情一区二区| 久久99久久99| 欧美精品日韩精品| 一区二区三区四区不卡在线| 国产.精品.日韩.另类.中文.在线.播放 | 精品播放一区二区| 亚洲第一搞黄网站| 欧美调教femdomvk| 婷婷国产v国产偷v亚洲高清| 懂色av中文一区二区三区| 久久噜噜亚洲综合| 成人午夜av电影| 国产精品对白交换视频| 成人av网站在线观看免费| 欧美激情一二三区| 91亚洲午夜精品久久久久久| 国产精品黄色在线观看| 日本道色综合久久| 午夜免费欧美电影| 精品国一区二区三区| 国产成人免费高清| 国产精品美女一区二区| 国产精品一线二线三线| 亚洲人xxxx| 欧美变态口味重另类| 国产一区视频网站| 一卡二卡三卡日韩欧美| 欧美日韩免费观看一区二区三区 | 国内精品写真在线观看| 一级日本不卡的影视| 国产精品久久久久9999吃药| 精品伦理精品一区| 欧美日韩国产a| aaa国产一区| 豆国产96在线|亚洲| 国产成人小视频| 国产一区二区在线视频| 日韩极品在线观看| 亚洲国产成人av网| 一区二区三区中文字幕在线观看| 国产精品久久99| 国产精品超碰97尤物18| 中文字幕在线观看不卡| 久久精品免视看| 久久久夜色精品亚洲| 久久久噜噜噜久久中文字幕色伊伊| 91精品欧美久久久久久动漫| 精品视频免费看| 欧美人动与zoxxxx乱| 欧美日韩国产另类不卡| 欧美日韩在线三区| 欧美一级免费观看| 久久久久88色偷偷免费| 国产精品视频线看| 亚洲综合在线免费观看| 天涯成人国产亚洲精品一区av| 日韩成人免费电影| 国产高清成人在线| 欧美亚洲免费在线一区| 日韩欧美国产小视频| 中文字幕精品综合| 亚洲一区二区在线免费观看视频 | 91在线视频观看| 在线视频欧美区| 欧美精品一区二区三区蜜桃| 91.xcao| 国产精品久久久久久亚洲毛片| 亚洲免费伊人电影| 黄色精品一二区| 7777精品伊人久久久大香线蕉经典版下载| 91精品国产综合久久久久久久| 国产午夜精品在线观看| 亚洲激情五月婷婷| 国产99精品国产| 91麻豆精品国产91久久久久久久久| 国产精品网站一区| 日韩av电影天堂| 欧美三级视频在线| 亚洲欧美色一区| 99久久综合99久久综合网站| 在线综合+亚洲+欧美中文字幕| 日韩一区欧美小说| 成人动漫av在线| 国产日韩综合av| 国产自产v一区二区三区c| 7777精品伊人久久久大香线蕉超级流畅 | 五月激情丁香一区二区三区| 成人三级伦理片| 国产欧美一区二区在线| 国产寡妇亲子伦一区二区| 久久久精品国产免费观看同学| 午夜av电影一区| 日韩亚洲欧美一区二区三区| 日韩黄色免费电影| 欧美成人在线直播| 美脚の诱脚舐め脚责91 | 国产乱一区二区| 国产精品免费观看视频| 一本一道久久a久久精品 | 成人av网在线| 亚洲激情图片小说视频| 欧美日韩国产一区二区三区地区| 爽好多水快深点欧美视频| 777久久久精品| 国产91精品一区二区麻豆网站| 国产精品看片你懂得| 欧美色大人视频| 懂色av一区二区三区免费看| 亚洲综合av网| 久久在线观看免费| 色婷婷亚洲精品| 久久爱另类一区二区小说| 亚洲视频一二三| 欧美videos大乳护士334| 色综合久久99| 国产在线一区观看| 亚洲午夜视频在线观看| 久久精品网站免费观看| 欧美日本一区二区三区四区| 国产成人午夜99999| 青青草国产成人99久久| 亚洲综合免费观看高清在线观看| 精品国产sm最大网站| 精品视频免费在线| 99精品在线免费| 成人av集中营| 国产白丝精品91爽爽久久| 午夜视频一区在线观看| 亚洲天堂精品在线观看| 国产精品色呦呦| 久久久777精品电影网影网| 91精品国产免费| 欧美日韩国产美女| 欧美日韩国产另类不卡| 777亚洲妇女| 日韩美女视频在线| 国产三级欧美三级日产三级99| 亚洲最大成人网4388xx| 亚洲国产成人av好男人在线观看| 亚洲精品日韩综合观看成人91| 亚洲欧美日本在线| 一个色综合av| 国产麻豆91精品| 97精品国产露脸对白| 欧美日韩国产天堂| 久久亚洲精精品中文字幕早川悠里| 国产偷v国产偷v亚洲高清| 综合电影一区二区三区| 亚洲国产欧美另类丝袜| 青青草97国产精品免费观看无弹窗版| 理论片日本一区| 成人aa视频在线观看| 欧美精品高清视频| 日本一区二区三区国色天香| 亚洲在线观看免费| 麻豆精品精品国产自在97香蕉| 国产激情视频一区二区在线观看 | 久久久欧美精品sm网站| 一区二区三区在线高清| 精品午夜一区二区三区在线观看| 99视频超级精品| 国产亚洲1区2区3区| 视频一区二区三区在线| av成人老司机| 久久久不卡网国产精品二区|