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

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

?? ixosbuflib.c

?? INTEL IXP425的VXWORKS BSP
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* ixBufLib.c - network buffer library *//* Copyright 1984 - 2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------    - adapt from netBufLib.c     - cache line alignement    - tune for optimal performances *//*DESCRIPTIONThis library contains routines that you can use to organize and maintaina memory pool that consists of pools of `mBlk' structures, pools of `clBlk'structures, and pools of clusters.  The `mBlk' and `clBlk' structuresare used to manage the clusters.  The clusters are containers for the datadescribed by the `mBlk' and `clBlk' structures.These structures and the various routines of this library constitute abuffering API that has been designed to meet the needs both of network protocols and network device drivers. The `mBlk' structure is the primary vehicle for passing data betweena network driver and a protocol.  However, the `mBlk' structure mustfirst be properly joined with a `clBlk' structure that was previouslyjoined with a cluster.  Thus, the actual vehicle for passing data isnot merely an `mBlk' structure but an `mBlk'-`clBlk'-clusterconstruct. To use this feature, include the following component:INCLUDE_NETWRS_NETBUFLIBINCLUDE FILES: netBufLib.h*//* includes */#include "vxWorks.h"#include "stdlib.h"#include "intLib.h"#include "string.h"#include "semaphore.h"#include "memLib.h"#include "errnoLib.h"#include "netBufLib.h"#include "private/semLibP.h"#include "netinet/if_ether.h"#include "memPartLib.h"#include "logLib.h"#include "IxOsBufLib.h"/* defines */#undef NETBUF_DEBUG/* mBlk size */#define MBLK_SIZE               ROUND_UP((M_BLK_SZ + sizeof(long)), \                                         _CACHE_ALIGN_SIZE)/* cLBlk size */#define CLBLK_SIZE              ROUND_UP(CL_BLK_SZ, _CACHE_ALIGN_SIZE)/* global */IMPORT VOIDFUNCPTR	_pNetBufCollect; /* protocol specific routine *//* extern */IMPORT int ffsMsb ();/* forward declarations */LOCAL STATUS ixAlignedPoolInit (NET_POOL_ID pNetPool, M_CL_CONFIG *pMclBlkConfig,                                CL_DESC *pClDescTbl, int clDescTblNumEnt, BOOL fromKheap);LOCAL M_BLK_ID 		ixMBlkCarve (NET_POOL_ID pNetPool, int num,                                    char * pool);LOCAL CL_BLK_ID 	ixClBlkCarve (int num, char * pool);LOCAL CL_BUF_ID 	ixClPoolCarve (CL_POOL_ID pClPool, int num, int clSize,                                      char * pool);LOCAL STATUS 		ixMemPoolInit (int num, int unitSize, int headerSize,                                      char * memArea);LOCAL void		ixMBlkFree (NET_POOL_ID pNetPool, M_BLK_ID pMblk);LOCAL void 		ixClBlkFree (CL_BLK_ID pClBlk);LOCAL void 		ixClusterFree (NET_POOL_ID pNetPool, char * pClBuf);LOCAL M_BLK_ID 		ixMBlkClFree (NET_POOL_ID pNetPool, M_BLK_ID pMblk);LOCAL M_BLK_ID 		ixMBlkGet (NET_POOL_ID pNetPool, int canWait,                                  UCHAR type);LOCAL CL_BLK_ID		ixClBlkGet (NET_POOL_ID pNetPool, int canWait);LOCAL char *	 	ixClusterGet (NET_POOL_ID pNetPool, CL_POOL_ID pClPool);LOCAL STATUS 		ixMClGet (NET_POOL_ID pNetPool, M_BLK_ID pMblk,                                 int bufSize, int canWait, BOOL bestFit);LOCAL CL_POOL_ID 	ixClPoolIdGet (NET_POOL_ID pNetPool, int bufSize,                                      BOOL bestFit);LOCAL POOL_FUNC ixFuncTbl =		/* pool function table */    {	ixAlignedPoolInit,	ixMBlkFree,	ixClBlkFree,	ixClusterFree,	ixMBlkClFree,	ixMBlkGet,	ixClBlkGet,	ixClusterGet,	ixMClGet,	ixClPoolIdGet,    };/* * this is a global pointer to a function table provided as a back door * for users who want to use a different allocation scheme for defaults * By initializing this _pNetPoolFuncTbl at runtime before initialization of * the network stack, one can change the default function table.  The system * pools use the default function table. */   POOL_FUNC * 	_pIxOsBufLibPoolFuncTbl = &ixFuncTbl;/******************************************************************* * Get the amount of memory required to create  * an aligned buff pool  */UINT32ixAlignedPoolDataSize(int count, int size){    return _CACHE_ALIGN_SIZE + 	count * ROUND_UP(size, _CACHE_ALIGN_SIZE);}/* Get the amount of memory required to create  * an aligned buff pool */UINT32 ixAlignedPoolMbufSize(int count){    return _CACHE_ALIGN_SIZE +	(count * MBLK_SIZE) + 	_CACHE_ALIGN_SIZE +	(count * CLBLK_SIZE);}/************************************************************************  * ixAlignedPoolInit - initialize the net pool** This function initializes a net pool** RETURNS: OK or ERROR.** NOMANUAL*/LOCAL STATUS ixAlignedPoolInit    (    NET_POOL_ID		pNetPool,	/* pointer to a net pool */    M_CL_CONFIG *	pMclBlkConfig,	/* pointer to mBlk,clBlk config */    CL_DESC *		pClDescTbl,	/* pointer to cluster desc table */    int			clDescTblNumEnt, /* number of cluster desc entries */    BOOL                fromKheap       /* 1:KHEAP_ALLOC  0:malloc/calloc (ignored) */    )    {    CL_DESC * 		pClDesc;	/* pointer to the cluster descriptor */    int clBufSize;                      /* size of the buff after alignment */    int requiredMemory;    char * 		memArea;    if (clDescTblNumEnt != 1)    {	return ERROR;    }    bzero ((char *) pNetPool->clTbl, sizeof (pNetPool->clTbl));    if ((pNetPool->pPoolStat = (M_STAT *) calloc (1, sizeof (M_STAT))) == 	NULL)	return (ERROR);    pNetPool->pmBlkHead = NULL;    if (pMclBlkConfig != NULL)	/* if mbuf config is specified */        {	    requiredMemory = 		_CACHE_ALIGN_SIZE +		(pMclBlkConfig->mBlkNum *  MBLK_SIZE) +		_CACHE_ALIGN_SIZE +		(pMclBlkConfig->clBlkNum * CLBLK_SIZE);	    if (pMclBlkConfig->memSize < requiredMemory)	    {            errno = S_netBufLib_MEMSIZE_INVALID;            goto poolInitError;            }        /* initialize the memory pool */        if (ixMemPoolInit (pMclBlkConfig->mBlkNum, M_BLK_SZ, sizeof(void *),                          pMclBlkConfig->memArea                          ) != OK)            {            goto poolInitError;            }        /* carve up the mBlk pool */        pNetPool->pmBlkHead = ixMBlkCarve (        				 pNetPool,                                         pMclBlkConfig->mBlkNum,                                         pMclBlkConfig->memArea                                         );        /* increment free mBlks  and number of mBlks */        pNetPool->mBlkCnt		      = pMclBlkConfig->mBlkNum;        pNetPool->mBlkFree		      = pMclBlkConfig->mBlkNum;        pNetPool->pPoolStat->mTypes [MT_FREE] = pMclBlkConfig->mBlkNum;        pNetPool->pPoolStat->mNum 	      = pMclBlkConfig->mBlkNum;        memArea = (char * )((int)pMclBlkConfig->memArea +			    _CACHE_ALIGN_SIZE +			    (pMclBlkConfig->mBlkNum * MBLK_SIZE));        if (pMclBlkConfig->clBlkNum > 0)            {            /* initialize the memory pool */            if (ixMemPoolInit (pMclBlkConfig->clBlkNum,CLBLK_SIZE,0,memArea)                != OK)                goto poolInitError;            pNetPool->pClBlkHead = ixClBlkCarve (                                               pMclBlkConfig->clBlkNum,                                               memArea                                               );            if (pNetPool->pClBlkHead == NULL)                goto poolInitError;            }        }    pClDesc = pClDescTbl;    /* arrange buf size to deal with 32 bytes alignment */    clBufSize = ROUND_UP(pClDesc->clSize, _CACHE_ALIGN_SIZE);    if (pClDesc->clSize < 64)        {#ifdef NETBUF_DEBUG        logMsg ("poolInit -- Invalid cluster size\n", 0, 0, 0, 0, 0, 0);#endif /* NETBUF_DEBUG */        errno = S_netBufLib_CLSIZE_INVALID;        goto poolInitError;        }    if ((pNetPool->clTbl[0] = (CL_POOL *) calloc (1, sizeof(CL_POOL))) == 	NULL)	{#ifdef NETBUF_DEBUG	logMsg ("poolInit -- cluster pool allocation\n", 0, 0, 0, 0, 0, 0);#endif /* NETBUF_DEBUG */	errno = S_netBufLib_NO_SYSTEM_MEMORY;	goto poolInitError;	}    pNetPool->clTbl[0]->clSize = pClDesc->clSize;    pNetPool->clTbl[0]->pNetPool = pNetPool;    requiredMemory = _CACHE_ALIGN_SIZE + pClDesc->clNum * clBufSize;    if (pClDesc->memSize < requiredMemory)        {        errno = S_netBufLib_MEMSIZE_INVALID;        goto poolInitError;        }    if (ixMemPoolInit (pClDesc->clNum, clBufSize, 0, pClDesc->memArea) != OK)        {        goto poolInitError;        }    pNetPool->clTbl[0]->pClHead = ixClPoolCarve (pNetPool->clTbl[0], 						 pClDesc->clNum,						 clBufSize, 						 (char *)pClDesc->memArea);    if (pNetPool->clTbl[0]->pClHead == NULL)        {        goto poolInitError;        }    pNetPool->clTbl[0]->clNum     = pClDesc->clNum;    pNetPool->clTbl[0]->clNumFree = pClDesc->clNum;    return (OK);    poolInitError:    netPoolDelete (pNetPool);    return (ERROR);    }/********************************************************************************* ixMBlkCarve - carve up the mBlk pool.** This function carves the the mBlks from a pre allocated pool.** RETURNS: M_BLK_ID or NULL.** NOMANUAL*/LOCAL M_BLK_ID ixMBlkCarve    (    NET_POOL_ID		pNetPool,	/* pointer to net pool */    int 		num,		/* number of units to allocate */    char *		pool		/* pre allocated memory area */    )    {    M_BLK_ID		pMblk = NULL;    int 		ix;    M_BLK_ID *		ppMblk;    ppMblk = &pMblk;    /* align the mblks on a 32 byte boundary */    pool = (char *)(ROUND_UP((unsigned int)pool + sizeof (void *),		    _CACHE_ALIGN_SIZE)) - sizeof (void *);    for (ix = 0; ix < num; ++ix)	{	*ppMblk 		 = (M_BLK_ID) (pool + sizeof (void *));        *((NET_POOL_ID *)(pool)) = pNetPool;	(*ppMblk)->mBlkHdr.mType = MT_FREE;        ppMblk 			 = &((*ppMblk)->mBlkHdr.mNext);	pool 			 += MBLK_SIZE;	}    *ppMblk = NULL;    return (pMblk);    }/********************************************************************************* ixClBlkCarve - carve up the clBlk pool.** This function carves the the clBlks from a pre allocated pool.** RETURNS: CL_BLK_ID or NULL.** NOMANUAL*/LOCAL CL_BLK_ID ixClBlkCarve    (    int 		num,		/* number of units to allocate */    char *		pool		/* pre allocated memory area */    )    {    CL_BLK_ID		pClBlk = NULL;    int 		ix;    CL_BLK_ID *		ppClBlk;    ppClBlk = &pClBlk;    for (ix = 0; ix < num; ++ix)	{	*ppClBlk = (CL_BLK_ID) (pool);        ppClBlk  = &((*ppClBlk)->clNode.pClBlkNext);	pool 	 += CLBLK_SIZE;	}    *ppClBlk = NULL;    return (pClBlk);    }/********************************************************************************* ixClPoolCarve - carve up the cluster pool** This function carves the clusters from a pre allocated pool.* Each cluster maintains an 4 byte header info.  This header info contains* a place to hold the pointer to the cluster pool.* This header info is prepended to the cluster buffer* and is hidden from the user.  The header info is used at the time of* freeing the cluster.  This function returns the pointer the cluster buffer* chain.** RETURNS: CL_BUF_ID or NULL.** NOMANUAL*/LOCAL CL_BUF_ID ixClPoolCarve    (    CL_POOL_ID		pClPool,	/* pointer to the cluster pool */    int 		num,		/* number of units to allocate */    int			clSize,		/* cluster size */    char *		pool		/* pre allocated memory area */    )    {    CL_BUF_ID		pClBuf = NULL; 	/* pointer to cluster buffer */    FAST int 		ix;		/* counter */    CL_BUF_ID *		ppClBuf;	/* ptr to ptr to cluster buffer */    ppClBuf = &pClBuf;    /* align the clusters on a 32 byte boundary */    pool = (char *)(ROUND_UP((unsigned int)pool,		    _CACHE_ALIGN_SIZE));    for (ix = 0; ix < num; ix++)    {	*ppClBuf		 = (CL_BUF_ID) (pool);        ppClBuf 		 = &((*ppClBuf)->pClNext);	pool 			 += clSize;    }    *ppClBuf = NULL;    return (pClBuf);    }/********************************************************************************* ixMemPoolInit - initialize the memory** This function initialized the memory passed to it.** RETURNS: OK or ERROR.** NOMANUAL*/LOCAL STATUS ixMemPoolInit    (    int 		num,		/* number of units to allocate */    int			unitSize,	/* size of each unit */    int			headerSize,	/* hidden header size */    char *		memArea		/* pre allocated memory area */    )    {    if (((int) unitSize & ~(sizeof (void *) - 1)) != unitSize )        {        errno = S_netBufLib_MEMSIZE_UNALIGNED;        return (ERROR);				/* unaligned size */        }    unitSize += headerSize;		/* adjust for NET_POOL_ID */    if (memArea == NULL)        {        errno = S_netBufLib_MEMAREA_INVALID;        return (ERROR);        }    if (((int) memArea & ~(sizeof (void *) - 1)) != (int)memArea )        {        errno = S_netBufLib_MEM_UNALIGNED;        return (ERROR);				/* unaligned memory */        }    bzero ((char *)memArea, (num * unitSize));

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕免费不卡| 欧美日韩国产小视频| 亚洲综合自拍偷拍| 国产精品初高中害羞小美女文| 欧美精品一区二区三区蜜臀| 欧美亚洲国产一卡| 欧美在线免费播放| 欧美一卡二卡三卡| www.欧美亚洲| 97se亚洲国产综合自在线观| av中文字幕在线不卡| 99re这里只有精品首页| 色综合一个色综合亚洲| 91成人网在线| 欧美日韩亚洲不卡| 欧美va天堂va视频va在线| 337p粉嫩大胆噜噜噜噜噜91av| 精品国产成人系列| 中文子幕无线码一区tr| 亚洲免费在线观看视频| 亚洲国产精品久久一线不卡| 人妖欧美一区二区| 国产大陆a不卡| 91福利视频久久久久| 日韩成人一区二区| 国产一区美女在线| 一本色道久久综合亚洲91 | 精品日韩成人av| 久久精品亚洲乱码伦伦中文| 国产精品亲子乱子伦xxxx裸| 亚洲激情一二三区| 久久99精品国产麻豆婷婷| 99麻豆久久久国产精品免费| 色综合一个色综合| av激情综合网| 成人三级在线视频| 欧美高清激情brazzers| 国产色产综合色产在线视频| 亚洲亚洲人成综合网络| 精品在线亚洲视频| 欧美无人高清视频在线观看| 久久嫩草精品久久久精品| 一区二区视频在线看| 国模无码大尺度一区二区三区| 99国产精品一区| 精品欧美一区二区在线观看| 亚洲精品一二三区| 国产精品乡下勾搭老头1| 欧美日韩精品高清| 亚洲欧洲成人自拍| 国产在线精品一区二区三区不卡| 日本韩国欧美一区| 国产精品久久久久国产精品日日| 欧美日韩在线免费视频| 中文字幕免费观看一区| 久久精品99国产精品日本| 在线精品观看国产| 亚洲欧洲日产国码二区| 国产在线精品一区二区不卡了| 欧美日韩国产综合久久| ...xxx性欧美| 成人午夜av电影| 久久久久一区二区三区四区| 免费在线成人网| 91精品国产福利| 一本在线高清不卡dvd| 懂色av一区二区三区免费看| 亚洲精品一区二区三区精华液| 亚洲va欧美va人人爽| 91黄色激情网站| 一区二区成人在线视频| 黄色小说综合网站| 97成人超碰视| 亚洲综合一二区| 在线精品视频一区二区| 夜夜爽夜夜爽精品视频| 91色porny在线视频| 亚洲青青青在线视频| 91丨porny丨蝌蚪视频| 亚洲精品水蜜桃| 欧美午夜在线一二页| 亚洲成av人片在线| 91精品国产91热久久久做人人| 婷婷丁香激情综合| 日韩欧美中文字幕公布| 91精品久久久久久久91蜜桃 | 亚洲精品视频自拍| 色综合夜色一区| 亚洲国产精品久久久男人的天堂| 91久久精品一区二区| 亚洲影院久久精品| 91麻豆精品国产91久久久更新时间| 丝袜国产日韩另类美女| 日韩精品一区二区在线观看| 国产乱码精品一区二区三| 中文字幕精品在线不卡| 色综合色综合色综合色综合色综合| 99久久综合精品| 欧美日韩在线三级| 精品一区二区三区久久久| 中文字幕精品三区| 在线观看av一区二区| 麻豆精品蜜桃视频网站| 久久久精品tv| 欧美色精品在线视频| 精油按摩中文字幕久久| 成人免费一区二区三区在线观看| 欧美亚洲一区三区| 国产综合色精品一区二区三区| 中文字幕一区二区三区四区不卡| 色综合久久久久综合体桃花网| 日韩一级片在线观看| 成人精品免费网站| 蜜臀久久久99精品久久久久久| 亚洲国产成人私人影院tom| 91传媒视频在线播放| 国产精品一级在线| 天天av天天翘天天综合网色鬼国产 | 色综合中文综合网| 九九热在线视频观看这里只有精品 | 亚洲一区二区三区四区中文字幕| 老司机午夜精品99久久| 亚洲色图第一区| www成人在线观看| 欧美三级电影在线看| 丰满少妇在线播放bd日韩电影| 石原莉奈在线亚洲二区| 亚洲精品视频观看| 国产欧美日韩不卡免费| 日韩片之四级片| 欧美网站一区二区| 99久久综合国产精品| 粉嫩aⅴ一区二区三区四区五区| 日韩av中文在线观看| 亚洲一区在线观看免费观看电影高清| 精品福利在线导航| 91精品福利在线一区二区三区| av不卡在线观看| 成人精品gif动图一区| 经典三级一区二区| 久久电影国产免费久久电影| 午夜精品一区二区三区电影天堂 | 欧美精品欧美精品系列| 91在线国产观看| 成人午夜激情在线| 国产成a人亚洲精品| 国产高清精品在线| 国产成人啪免费观看软件| 久久国产精品无码网站| 精品一区二区三区香蕉蜜桃| 青青草一区二区三区| 天堂va蜜桃一区二区三区 | jlzzjlzz国产精品久久| 福利一区福利二区| 麻豆91在线观看| 国内不卡的二区三区中文字幕| 日本系列欧美系列| 久久精品99国产精品| 国内精品久久久久影院薰衣草| 久久99精品国产.久久久久| 麻豆成人综合网| 国产自产视频一区二区三区| 国产乱国产乱300精品| 成人一区二区三区| 成人短视频下载| 色一区在线观看| 欧美精品久久99久久在免费线| 91麻豆精品国产91久久久使用方法| 欧美电影免费观看高清完整版在线 | 亚洲福中文字幕伊人影院| 偷偷要91色婷婷| 精品国产人成亚洲区| 久久新电视剧免费观看| 中文字幕高清一区| 色狠狠综合天天综合综合| 欧美性感一区二区三区| 日韩三级视频在线看| 国产精品免费视频网站| 一区二区成人在线| 精品无人码麻豆乱码1区2区| 99久久精品免费看国产| 欧美夫妻性生活| 欧美韩日一区二区三区四区| 亚洲精品久久久蜜桃| 美洲天堂一区二卡三卡四卡视频| 精品亚洲成a人| 91免费看`日韩一区二区| 欧美精品日韩一本| 一区二区三区精品视频| 国产精品国产三级国产aⅴ原创 | 久久久久国产精品人| 亚洲精品免费电影| 久久99精品网久久| 99在线精品观看| 日韩免费视频一区二区| 日韩美女精品在线| 狠狠v欧美v日韩v亚洲ⅴ| 欧美最猛性xxxxx直播| 久久蜜臀中文字幕| 一区二区不卡在线播放|