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

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

?? wdbbdmpktdrv.c

?? vxworks的源代碼
?? C
字號:
/* wdbBdmPktDrv.c - Bdm packet driver for lightweight UDP/IP *//* Copyright 1998-2001 Wind River Systems, Inc. *//*This is an unsupported release of the Background Debug Mode (BDM) BackEnd. It is provided AS IS with no warranties of any kind.*/#include "copyright_wrs.h"/*modification history--------------------01b,15sep01,dat  Use of WRS_ASM macro01a,16jun98,vrd  written, inspired from wdbNetromPktDrv.c version 01h.*//*DESCRIPTIONOVERVIEWThis is a driver for WDB system which uses the BDM line and protocol tocommunicate with the HOST.USAGEThe driver is typically only called only from usrWdb.c. The only directlycallable routine in this module is wdbBdmPktDevInit().  Your configAll.hfile will have to be modified so that WDB_COMM_TYPE is defined asWDB_COMM_BDM.DATA BUFFERINGThe drivers only need to handle one input packet at a time becausethe WDB protocol only supports one outstanding host-request at a time.If multiple input packets arrive, the driver can simply drop them.The driver then loans the input buffer to the WDB agent, and the agentinvokes a driver callback when it is done with the buffer.For output, the agent will pass the driver a chain of mbufs, whichthe driver must send as a packet. When it is done with the mbufs,it calls wdbMbufChainFree() to free them.The header file wdbMbuflib.h provides the calls for allocating, freeing,and initializing mbufs for use with the lightweight UDP/IP interpreter.It ultimatly makes calls to the routines wdbMbufAlloc() and wdbMbufFree(),which are provided in source code in usrWdb.c.*//* includes */#include "vxWorks.h"#include "string.h"#include "errno.h"#include "intLib.h"#include "wdb/wdbLib.h"#include "wdb/wdbCommIfLib.h"#include "wdb/wdbMbufLib.h"#include "drv/wdb/wdbBdmPktDrv.h"/* defines */#define MIN min/* typedefs */typedef struct    {    UINT8	recvSem;    UINT8	padding;    UINT16	recvCount;    UINT8	recvBuffer [WDB_BDM_PKT_MTU];    UINT8	sendSem;    UINT8	padding2;    UINT16	sendCount;    UINT8	sendBuffer [WDB_BDM_PKT_MTU];    } BDM_COMM_BUFF;/* locals */LOCAL BDM_COMM_BUFF	bdmCommBuff;LOCAL BDM_COMM_BUFF *	pBdmCommBuff = &bdmCommBuff;LOCAL int		pollDelay = 2;	/* polling delay *//* forward declarations */LOCAL STATUS	wdbBdmPoll		(void *pDev);LOCAL STATUS	wdbBdmTx		(void *pDev, struct mbuf * pMbuf);LOCAL STATUS	wdbBdmModeSet		(void *pDev, uint_t newMode);LOCAL void	wdbBdmFree		(void *pDev);LOCAL void	wdbBdmPollTask		(void * pDev);LOCAL void	wdbBdmTargetStop	(void);LOCAL STATUS	wdbBdmInitHardware	(void);/******************************************************************************** wdbBdmTargetStop - stop the CPU** This routine contains CPU specific code to put the CPU in BDM mode.** RETURNS: N/A** NOMANUAL*/LOCAL void wdbBdmTargetStop (void)    {#if 	(CPU == CPU32)    WRS_ASM ("nop");    WRS_ASM (".word	0x4afa");#endif	/* (CPU == CPU32) */#if 	(CPU == PPC860)    WRS_ASM ("sc");			/* sc instruction */#if	FALSE    WRS_ASM ("tw	31,0,0");	/* trap instruction */#endif	/* FALSE */#endif	/* (CPU == PPC860) */    }/******************************************************************************** wdbBdmInitHardware - initialize the BDM communiction buffer** This routine computes the input and the output buffer address.** RETURNS: N/A** NOMANUAL*/LOCAL STATUS wdbBdmInitHardware (void)    {    /* reset memory */        bdmCommBuff.recvSem = 0;    bdmCommBuff.recvCount = 0;    bdmCommBuff.sendSem = 0;    bdmCommBuff.sendCount = 0;    /*     * Here you must put the IOBuff address in the first register (the first     * one for the Macraigor's ReadRegister routine and then put the CPU in     * background. The backend will restart the CPU.     */#if 	(CPU == CPU32)    WRS_ASM ("move.l	_pBdmCommBuff,D3");    WRS_ASM ("nop");    WRS_ASM (".word	0x4afa");#elif 	(CPU == PPC860)    WRS_ASM ("addi	3, 0, bdmCommBuff@ha");	/* move IOBuff@ha to R3 */    WRS_ASM ("rlwinm	3, 3, 16, 0, 15");	/* move IOBuff@ha to R3@ha */    WRS_ASM ("addi	3, 3, bdmCommBuff@l");	/* move IOBuff@l to R3 */    WRS_ASM ("sc");			/* sc instruction */#if 	FALSE    WRS_ASM ("tw	31, 0, 0");	/* trap instruction */#endif	/* FALSE */#endif 	/* CPU == CPU32 */    return(OK);    }/******************************************************************************** wdbBdmPktDevInit - initialize a bdm packet device.** RETRUNS: N/A** NOMANUAL*/STATUS wdbBdmPktDevInit    (    WDB_BDM_PKT_DEV	*pPktDev,	/* bdm device structure to init */    void		(*stackRcv)()	/* receive packet callback (udpRcv) */    )    {    /* initialize the wdbDrvIf field with driver info */    pPktDev->wdbDrvIf.mode	= WDB_COMM_MODE_POLL | WDB_COMM_MODE_INT;    pPktDev->wdbDrvIf.mtu	= WDB_BDM_PKT_MTU;    pPktDev->wdbDrvIf.stackRcv	= stackRcv;		/* udpRcv */    pPktDev->wdbDrvIf.devId	= (WDB_BDM_PKT_DEV *)pPktDev;    pPktDev->wdbDrvIf.pollRtn	= wdbBdmPoll;    pPktDev->wdbDrvIf.pktTxRtn	= wdbBdmTx;    pPktDev->wdbDrvIf.modeSetRtn = wdbBdmModeSet;    /*     * Put your hardware initialization code here. It should initialize     * the device structure's register addresses and initialize     * the hardware.     */    if (wdbBdmInitHardware() != OK)	return(ERROR);    /* put the device in a quiescent state */    wdbBdmModeSet (pPktDev, WDB_COMM_MODE_INT);    /* start the polling task if the OS is initialized */    if(taskIdCurrent)	{	taskSpawn ("tBdmPoll", 200, 0, 5000, (int (*)()) wdbBdmPollTask,		   (int) pPktDev, 0, 0, 0, 0, 0, 0, 0, 0, 0);	}    return(OK);    }/******************************************************************************** wdbBdmTx - transmit a packet.** The packet is realy a chain of mbufs. We may have to just queue up* this packet is we are already transmitting.** RETURNS: OK or ERROR** NOMANUAL*/LOCAL STATUS wdbBdmTx    (    void *		pDev,    struct mbuf *	pMbuf    )    {    UINT32		packetSize = 0;    /* copy transmit data to buffer */    wdbMbufDataGet (pMbuf, bdmCommBuff.sendBuffer,                    WDB_BDM_PKT_MTU, &packetSize);    /* send packet */    bdmCommBuff.sendCount = (UINT16) htons (packetSize);    bdmCommBuff.sendSem = 0xFF;    wdbBdmTargetStop ();    /* free mbuf chain */    wdbMbufChainFree (pMbuf);    return (OK);    }/******************************************************************************** wdbBdmFree - free the input buffer** This is the callback used to let us know the agent is done with the* input buffer we loaded it.** RETURNS: N/A** NOMANUAL*/LOCAL void wdbBdmFree    (    void *	pDev		/* unused */    )    {    bdmCommBuff.recvCount = 0;    bdmCommBuff.recvSem = 0;    }/******************************************************************************** wdbBdmModeSet - switch driver modes** RETURNS: OK for a supported mode, else ERROR** NOMANUAL*/LOCAL STATUS wdbBdmModeSet    (    void *	pDev,    uint_t	newMode    )    {    WDB_BDM_PKT_DEV * pPktDev = pDev;    if (newMode == WDB_COMM_MODE_INT)	pPktDev->mode = WDB_COMM_MODE_INT;    else if (newMode == WDB_COMM_MODE_POLL)	pPktDev->mode = WDB_COMM_MODE_POLL;    else	return (ERROR);    return (OK);    }/******************************************************************************** wdbBdmPoll - poll for a packet** This routine polls for a packet. If a packet has arrived it invokes* the agents callback.** RETURNS: OK if a packet has arrived, else ERROR.** NOMANUAL*/ LOCAL STATUS wdbBdmPoll    (    void *	pDev    )    {    WDB_BDM_PKT_DEV *	pPktDev = pDev;    struct mbuf *	pMbuf;    UINT16		packetSize = 0;    if (bdmCommBuff.recvSem)	{	/*	 * Fill the input buffer with the packet. Use an mbuf cluster to pass	 * the packet on to the agent.	 */		packetSize = ntohs (bdmCommBuff.recvCount);	pMbuf = wdbMbufAlloc();	if ((pMbuf == NULL) || (packetSize == 0))	    {	    bdmCommBuff.recvSem = 0;	    return (ERROR);	    }	wdbMbufClusterInit (pMbuf, bdmCommBuff.recvBuffer, (UINT32) packetSize,			    (int (*) ())wdbBdmFree, (int) pPktDev);	(*pPktDev->wdbDrvIf.stackRcv) (pMbuf);  /* invoke callback */	return (OK);	}    return (ERROR);    }/******************************************************************************** wdbBdmPollTask - poll for a packet** This routine polls for a packet. If a packet has arrived it invokes* the agents callback.** RETURNS: OK if a packet has arrived, else ERROR.** NOMANUAL*/ LOCAL void wdbBdmPollTask    (    void *	pDev    )    {    for (;;)	{	taskDelay (pollDelay);	wdbBdmPoll (pDev);	}    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一卡2卡三卡4卡5免费| 日本一二三不卡| 国产日本欧美一区二区| 亚洲精品国产a| 久久精品国产一区二区三| av不卡在线播放| 欧美大片日本大片免费观看| 亚洲精品视频观看| 国产精品一区2区| 欧美日韩国产综合视频在线观看 | 久久99在线观看| 在线观看三级视频欧美| 久久精品夜色噜噜亚洲aⅴ| 亚洲妇熟xx妇色黄| 一本到三区不卡视频| 久久久久久久久久电影| 免费欧美在线视频| 色老头久久综合| 国产精品免费久久久久| 国产一区二区三区国产| 欧美一激情一区二区三区| 一区二区三区加勒比av| 99精品视频在线播放观看| 久久久精品免费网站| 精品一区二区综合| 日韩一卡二卡三卡四卡| 亚洲午夜久久久久| 91豆麻精品91久久久久久| 国产精品视频线看| 成人丝袜高跟foot| 日本一区二区成人在线| 东方aⅴ免费观看久久av| 久久久亚洲综合| 国产自产高清不卡| 久久午夜羞羞影院免费观看| 精品一区二区av| 日韩免费视频线观看| 精品亚洲免费视频| 精品国产乱码久久久久久老虎 | 日韩欧美一级片| 蜜乳av一区二区| 日韩视频一区二区三区在线播放 | 韩国女主播成人在线观看| 日韩欧美第一区| 麻豆精品视频在线观看| 欧美精品一区二区三区一线天视频| 免费成人你懂的| 日韩欧美一级二级三级| 国产在线播放一区三区四| 国产日产欧美一区| 成人av在线电影| 亚洲一区二区三区中文字幕在线| 欧美性生活大片视频| 五月天欧美精品| 欧美成人精品1314www| 精品一区二区三区视频在线观看| 精品国产麻豆免费人成网站| 国产成人精品免费在线| 亚洲欧美日韩在线不卡| 欧美精品一级二级三级| 美女视频黄久久| 中文字幕欧美区| 欧美性大战久久| 韩国精品免费视频| 中文字幕一区二区不卡| 欧美日韩视频一区二区| 欧美a级理论片| 国产农村妇女毛片精品久久麻豆| 91在线观看地址| 日韩专区中文字幕一区二区| 久久网站热最新地址| 一本大道av伊人久久综合| 视频一区二区三区在线| 久久久久久久久99精品| 欧美亚洲高清一区二区三区不卡| 久久精品二区亚洲w码| 中文字幕一区二区三| 日韩一区二区精品| 成人精品一区二区三区四区| 亚洲男人电影天堂| 精品入口麻豆88视频| 不卡一区在线观看| 日韩高清不卡一区二区| 国产精品久久久爽爽爽麻豆色哟哟 | 91丨porny丨首页| 日韩中文字幕区一区有砖一区| 久久久久9999亚洲精品| 欧美在线免费视屏| 国产精品影视网| 婷婷中文字幕综合| 国产精品久久久久9999吃药| 91精品国产综合久久婷婷香蕉| 国产98色在线|日韩| 免费欧美在线视频| 亚洲精品视频一区| 国产视频一区二区在线观看| 777久久久精品| 99在线精品观看| 国产一区二区福利视频| 午夜欧美一区二区三区在线播放| 国产精品乱码一区二三区小蝌蚪| 欧美日韩精品福利| 91久久国产最好的精华液| 国产成人精品一区二区三区四区| 日韩高清欧美激情| 欧美亚洲动漫另类| 久久不见久久见免费视频1| 精品视频全国免费看| 久久综合九色欧美综合狠狠| 粉嫩蜜臀av国产精品网站| 亚洲一区二区精品视频| 91日韩一区二区三区| 久久男人中文字幕资源站| 欧美少妇bbb| 一本一道综合狠狠老| 国产成人午夜视频| 美女性感视频久久| 肉丝袜脚交视频一区二区| 夜夜夜精品看看| 亚洲欧美视频在线观看视频| 国产精品乱人伦一区二区| 国产日韩成人精品| 国产日韩一级二级三级| 久久综合色一综合色88| 日韩精品一区二区三区四区| 91精品国产综合久久精品 | 中文字幕乱码亚洲精品一区| 欧美成人a视频| 亚洲精品在线电影| www精品美女久久久tv| 日韩视频免费观看高清完整版 | av成人动漫在线观看| 不卡一卡二卡三乱码免费网站| 国产精品中文有码| 成人在线视频首页| 国产91富婆露脸刺激对白| 成人免费视频网站在线观看| 成人网在线免费视频| av在线一区二区三区| 91免费小视频| 欧美在线视频你懂得| 91精品在线免费| 日韩三级高清在线| 久久精品欧美日韩精品| 中文字幕精品一区二区精品绿巨人| 日本一区二区三级电影在线观看| 亚洲欧洲日韩综合一区二区| 洋洋av久久久久久久一区| 亚洲成人av福利| 精一区二区三区| av一本久道久久综合久久鬼色| 色香蕉成人二区免费| 欧美高清激情brazzers| 欧美成人a视频| 日韩久久一区二区| 日本不卡123| 国产剧情在线观看一区二区| 99精品久久只有精品| 欧美日韩精品福利| 国产丝袜在线精品| 亚洲一区二区欧美日韩| 国产资源精品在线观看| 91在线播放网址| 日韩精品一区国产麻豆| 欧美激情一区二区在线| 一区二区三区在线观看国产| 免费在线看成人av| 91一区二区在线| 日韩免费高清视频| 成人欧美一区二区三区白人| 日韩精品色哟哟| 国产成人av电影在线观看| 欧美日韩中文字幕一区| 精品国产一区二区三区忘忧草 | 99久久久久久| 日韩欧美的一区二区| 亚洲素人一区二区| 免费亚洲电影在线| 91麻豆国产福利在线观看| 精品国产乱码久久久久久1区2区 | 中文字幕欧美区| 免费日本视频一区| 一本久道中文字幕精品亚洲嫩| 精品国偷自产国产一区| 亚洲免费观看高清完整版在线观看熊 | 欧美乱熟臀69xxxxxx| 国产精品乱码一区二三区小蝌蚪| 日本午夜精品视频在线观看| 色综合中文字幕| 久久久夜色精品亚洲| 日韩电影一区二区三区| 色播五月激情综合网| 欧美激情一区二区三区不卡| 麻豆精品久久精品色综合| 欧美日韩一级二级三级| 亚洲品质自拍视频| 成人福利视频在线看| 亚洲精品一区二区三区影院| 日韩高清一区二区| 欧美美女激情18p|