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

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

?? wdbnetrompktdrv.c

?? vxworks的完整的源代碼
?? C
字號:
/* wdbNetromPktDrv.c - NETROM packet driver for the WDB agent */ /* Copyright 1995-2001 Wind River Systems, Inc. */#include "copyright_wrs.h"/*modification history--------------------01i,18oct01,jhw  Fixed documentation build errors.01h,25jul96,ms   more debug support.01g,29feb96,ms   call config_dpram first in init code (SPR 5759).01f,24oct95,ms   changed to udpscrmode. Allowed start before kernel.01e,14oct95,jdi  doc: cleanup.01d,09oct95,ms   made it work with an external mode agent (SPR #4494).01c,26sep95,ms   docs.01b,27jun95,ms	 modified for tornado.	   + tpr added pollDelay variable in wdbNetromPollTask() and		 wdbNetromPktDevInit()01a,06Jun95,sub  written.*//*DESCRIPTIONThis is a lightweight NETROM driver that interfaces with the WDB agent'sUDP/IP interpreter.  It allows the WDB agent to communicate with the hostusing the NETROM ROM emulator.  It uses the emulator's read-only protocolfor bi-directional communication.It requires that NetROM's udpsrcmode option is on.*/#include "vxWorks.h"#include "wdb/wdbLib.h"#include "wdb/wdbCommIfLib.h"#include "wdb/wdbMbufLib.h"#include "drv/wdb/wdbNetromPktDrv.h"#include "netinet/in_systm.h"#include "netinet/in.h"#include "netinet/ip.h"#include "netinet/udp.h"#include "intLib.h"#include "sysLib.h"#include "taskLib.h"#include "private/funcBindP.h"#include "wdb/dptarget.c"/* some handy macros */#undef  DBG_PUT#define DBG_PUT	if (wdbIsNowTasking() && wdbNetromDebug && _func_printErr) \		     _func_printErr#define RESET_INPUT(pDev) {pDev->bytesRead=UDP_IP_HDR_SIZE-UDPSRC_HDR_SIZE; \		     pDev->inBufFull=FALSE;}#define IP_HDR_SIZE     20#define UDP_HDR_SIZE    8#define UDP_IP_HDR_SIZE IP_HDR_SIZE + UDP_HDR_SIZE#define UDPSRC_HDR_SIZE 6/* forward static declarations */static STATUS wdbNetromPoll	(void *pDev);static STATUS wdbNetromPktTx	(void *pDev, struct mbuf * pMbuf);static STATUS wdbNetromModeSet	(void *pDev, uint_t newMode);/* user configurable variables */int wdbNetromPollPri = 200;int wdbNetromDebug = 0;		/* print debug message to the console				 * for all NetROM I/O packets */int wdbNetromTest = 0;		/* print "WDB NetROM communication ready" to				 * NetROM's debug port during initialization.				 * To see this message, you must telnet to				 * the NetROM's debug port:				 *	telnet netromIp 1235				 * Note: VxWorks initialization will halt				 * until you have connected to the debug port!				 * If you don't see this message, then the				 * NetROM connection is no good.				 *//******************************************************************************** wdbNetromPollTask - fake an input ISR when a packet arrives*/ static void wdbNetromPollTask    (    void *	pDev,    int		pollDelay    )    {    int key;    for (;;)	{	taskDelay (pollDelay);	key = intLock ();	wdbNetromPoll (pDev);	intUnlock (key);	}    }/******************************************************************************** wdbNetromPktDevInit - initialize a NETROM packet device for the WDB agent** This routine initializes a NETROM packet device.  It is typically* called from usrWdb.c when the WDB agents NETROM communication path* is selected.* The <dpBase> parameter is the address of NetROM's dualport RAM.* The <width> parameter is the width of a word in ROM space, and can be* 1, 2, or 4 to select 8-bit, 16-bit, or 32-bit width* respectivly (use the macro WDB_NETROM_WIDTH in configAll.h* for this parameter).* The <index> parameter refers to which byte of the ROM contains pod zero.* The <numAccess> parameter should be set to the number of accesses to POD* zero that are required to read a byte. It is typically one, but some boards* actually read a word at a time.* This routine spawns a task which polls the NetROM for incomming* packets every <pollDelay> clock ticks.** RETURNS: N/A*/ void wdbNetromPktDevInit    (    WDB_NETROM_PKT_DEV *pPktDev,	/* packet device to initialize */    caddr_t 	dpBase,			/* address of dualport memory */    int		width,			/* number of bytes in a ROM word */    int		index,			/* pod zero's index in a ROM word */    int		numAccess,		/* to pod zero per byte read */    void	(*stackRcv)(),		/* callback when packet arrives */    int		pollDelay		/* poll task delay */    )    {    pPktDev->wdbDrvIf.mode      = WDB_COMM_MODE_POLL | WDB_COMM_MODE_INT;    pPktDev->wdbDrvIf.mtu       = NETROM_MTU;    pPktDev->wdbDrvIf.stackRcv  = stackRcv;    pPktDev->wdbDrvIf.devId     = (void *)pPktDev;    pPktDev->wdbDrvIf.pollRtn   = wdbNetromPoll;    pPktDev->wdbDrvIf.pktTxRtn  = wdbNetromPktTx;    pPktDev->wdbDrvIf.modeSetRtn = wdbNetromModeSet;    RESET_INPUT (pPktDev);    DBG_PUT ("calling config_dpram with dpBase = 0x%x, width = %d,\n"	 "index = %d, numAccess = %d\n", dpBase, width, index, numAccess);    config_dpram (dpBase, width, index, DPF_READONLY_TGT, numAccess);    DBG_PUT ("calling set_dp_blockio\n");    set_dp_blockio (0, 0);		/* non-blocking I/O */    DBG_PUT ("calling ra_resync\n");    ra_resync();    if (wdbNetromTest)	{	char * msg = "\nWDB NetROM communication ready\n";	DBG_PUT ("calling ra_putmsg\n");	ra_putmsg (msg, strlen(msg));	}    DBG_PUT ("spawning tNetromPoll\n");    if (taskIdCurrent && (pollDelay != -1))	taskSpawn ("tNetromPoll", wdbNetromPollPri, 0, 5000,		(int (*)()) wdbNetromPollTask,		(int)pPktDev, pollDelay,0,0,0,0,0,0,0,0);    }/******************************************************************************** wdbNetromPktFree - clear a receive packet*/ static void wdbNetromPktFree    (    WDB_NETROM_PKT_DEV *	pDev    )    {    RESET_INPUT (pDev);    }/******************************************************************************** wdbNetromPoll - poll device for data** NOMANUAL*/ STATUS wdbNetromPoll    (    void *	devId    )    {    WDB_NETROM_PKT_DEV * pDev = (WDB_NETROM_PKT_DEV *)devId;    struct mbuf * 	pMbuf;    int		  	numBytes;    struct udphdr *     pUdpHdr;    struct ip *         pIpHdr;    char *		pUdpsrcHdr;    if (pDev->inBufFull)	{	DBG_PUT ("netrom: multiple packets recieved - dropping last packet\n");	return (ERROR);	}    switch (ra_getmsg(pDev->inBuf + pDev->bytesRead,		NETROM_MTU - pDev->bytesRead, &numBytes))	{	case GM_NODATA:	    return (ERROR);	case GM_MSGCOMPLETE:	    pDev->bytesRead += numBytes;	    /* convert the NETROM udpsrcmode header into a UDP/IP header */	    pUdpsrcHdr = (char *)pDev->inBuf + UDP_IP_HDR_SIZE					- UDPSRC_HDR_SIZE;	    pIpHdr = (struct ip *)pDev->inBuf;	    pUdpHdr = (struct udphdr *)((int)pIpHdr + IP_HDR_SIZE);	    bcopy (pUdpsrcHdr, (char *)&pIpHdr->ip_src, 4);	    pUdpHdr->uh_sport = *(short *)(pUdpsrcHdr + 4);	    pIpHdr->ip_p = IPPROTO_UDP;	    pUdpHdr->uh_dport = htons(WDBPORT);	    DBG_PUT ("ra_getmsg: %d byte packet from IP 0x%x port 0x%x\n",			pDev->bytesRead, pIpHdr->ip_src, pUdpHdr->uh_sport);	    pMbuf = wdbMbufAlloc();	    if (pMbuf == NULL)		{		return (ERROR);		}	    wdbMbufClusterInit (pMbuf, pDev->inBuf, pDev->bytesRead,				(int (*)())wdbNetromPktFree, (int)pDev);	    pDev->inBufFull = TRUE;	    (*pDev->wdbDrvIf.stackRcv) (pMbuf);	    return (OK);	case GM_NOTDONE:	    DBG_PUT ("ra_getmsg: partial read\n");	    pDev->bytesRead += numBytes;	    return (OK);	case GM_MSGOVERFLOW:	    DBG_PUT ("ra_getmsg: input buffer overflow ignored\n");	    RESET_INPUT (pDev);	    return (ERROR);	default:	    DBG_PUT ("ra_getmsg: unknown return value\n");	    RESET_INPUT (pDev);	    return (ERROR);	}    return (OK);    }/******************************************************************************** wdbNetromModeSet - set device mode*/ static STATUS wdbNetromModeSet    (    void *	pDev,    uint_t	newMode    )    {    WDB_NETROM_PKT_DEV * pPktDev = (WDB_NETROM_PKT_DEV *)pDev;    RESET_INPUT(pPktDev);    return (OK);    }/******************************************************************************** wdbNetromPktTx - transmit a packet*/ static STATUS wdbNetromPktTx    (    void *pDev,    struct mbuf * pMbuf    )    {    struct udphdr *     pUdpHdr;    struct ip *         pIpHdr;    struct mbuf *       pFirstMbuf = pMbuf;    char		data [NETROM_MTU];    int			len = 0;    /* convert the UDP/IP header into a NETROM udpsrcmode header */    /* XXX - assume UDP/IP header is in first mbuf */    pIpHdr = mtod (pMbuf, struct ip *);    pUdpHdr = (struct udphdr *)((int)pIpHdr + IP_HDR_SIZE);    bcopy ((char *)&pIpHdr->ip_dst, &data[0], 4);    bcopy ((char *)&pUdpHdr->uh_dport, &data[4], 2);    len = 6;    pMbuf = pMbuf->m_next;    while (pMbuf != NULL)        {	if (len + pMbuf->m_len > NETROM_MTU)	    break;        bcopy (mtod (pMbuf, char *), &data[len], pMbuf->m_len);        len += pMbuf->m_len;        pMbuf = pMbuf->m_next;        }    wdbMbufChainFree (pFirstMbuf);    DBG_PUT ("packet to IP 0x%x port 0x%x\n", pIpHdr->ip_dst,		pUdpHdr->uh_dport);    ra_putmsg (data, len);    return (OK);    }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品一区二区三区福利| 精品一区二区三区香蕉蜜桃| 天天操天天综合网| 丁香天五香天堂综合| 欧美日韩一区二区三区视频| 国产欧美一区二区三区在线老狼| 亚洲一卡二卡三卡四卡五卡| 成人午夜精品一区二区三区| 欧美大度的电影原声| 一区二区三区高清| gogo大胆日本视频一区| 欧美mv日韩mv| 日韩福利电影在线| 欧美三级电影网| 亚洲丝袜美腿综合| 国产91丝袜在线播放九色| 日韩三级视频在线观看| 午夜精品在线看| 欧洲精品中文字幕| 夜夜揉揉日日人人青青一国产精品| 国产精品一线二线三线精华| 精品免费日韩av| 日本亚洲欧美天堂免费| 欧美日韩mp4| 日本中文在线一区| 欧美精品粉嫩高潮一区二区| 亚洲国产精品一区二区www| 色哟哟在线观看一区二区三区| 国产精品成人午夜| 91精品国产一区二区三区| 亚洲男人的天堂一区二区| k8久久久一区二区三区| 国产精品乱码一区二三区小蝌蚪| 国产精品亚洲一区二区三区妖精 | 性欧美大战久久久久久久久| 91精彩视频在线观看| 欧美少妇性性性| 亚洲激情在线激情| 在线观看免费亚洲| 亚洲国产精品视频| 日韩欧美的一区二区| 蜜臀99久久精品久久久久久软件| 精品免费日韩av| 国产成人亚洲综合a∨婷婷图片| 久久久av毛片精品| 成人av影院在线| 亚洲乱码国产乱码精品精可以看 | 韩国三级电影一区二区| 久久女同互慰一区二区三区| 成人午夜在线播放| 综合婷婷亚洲小说| 欧美日韩国产首页| 久久国产三级精品| 国产精品福利电影一区二区三区四区| av激情成人网| 亚洲一区二区美女| 精品国产一区二区三区久久影院| 懂色av一区二区夜夜嗨| 亚洲另类春色国产| 91精品福利在线一区二区三区| 狠狠色2019综合网| 亚洲婷婷综合色高清在线| 欧美日韩精品三区| 福利一区福利二区| 日韩精品一区第一页| 久久综合五月天婷婷伊人| www.色综合.com| 日本视频一区二区三区| 中文字幕一区二区三区在线不卡| 欧美人与性动xxxx| 国产91富婆露脸刺激对白| 亚洲一区二区三区四区在线免费观看| 日韩午夜在线观看视频| 福利一区福利二区| 男人操女人的视频在线观看欧美| 中文一区一区三区高中清不卡| 欧美女孩性生活视频| 国产成人av福利| 亚洲特黄一级片| 精品福利av导航| 欧美亚洲综合在线| 成人动漫av在线| 麻豆成人av在线| 亚洲天堂网中文字| 日本一区二区电影| 欧美一级片在线看| 欧洲中文字幕精品| 不卡的看片网站| 韩国女主播成人在线观看| 亚洲一二三四久久| 国产精品女上位| 久久综合久久综合九色| 9191国产精品| 91福利精品第一导航| 懂色av一区二区夜夜嗨| 国产精品系列在线观看| 蜜臀99久久精品久久久久久软件| 亚洲成av人影院| 一区二区三区小说| 自拍偷自拍亚洲精品播放| 中文无字幕一区二区三区| 日韩欧美在线影院| 欧美浪妇xxxx高跟鞋交| 欧美图区在线视频| 色婷婷久久99综合精品jk白丝| 国产精品18久久久| 国产精品综合在线视频| 国产一区视频在线看| 久久成人免费网| 久久精品99国产精品| 久久丁香综合五月国产三级网站| 日韩精品电影在线观看| 天天射综合影视| 日日夜夜一区二区| 日本aⅴ免费视频一区二区三区| 视频一区欧美精品| 日韩高清在线观看| 久久99最新地址| 国内成人精品2018免费看| 国产一区啦啦啦在线观看| 国产伦理精品不卡| 成人激情综合网站| 91免费看`日韩一区二区| 91在线视频在线| 色狠狠色噜噜噜综合网| 欧美日韩精品久久久| 欧美一级午夜免费电影| 欧美va在线播放| 日本一区二区三区免费乱视频 | 亚洲国产一区二区三区青草影视| 亚洲一区二区三区国产| 日韩va欧美va亚洲va久久| 日韩av高清在线观看| 国内成人免费视频| 99精品视频在线播放观看| 在线中文字幕一区二区| 日韩欧美一区中文| 国产视频一区二区在线| 国产精品白丝在线| 亚洲国产精品久久人人爱 | 白白色 亚洲乱淫| 在线观看视频一区| 日韩视频免费直播| 国产精品久久久久久久久搜平片| 一区二区三区不卡视频 | 亚洲国产三级在线| 裸体在线国模精品偷拍| 成人美女视频在线观看| 欧美性生活影院| 日韩精品综合一本久道在线视频| 国产日韩精品视频一区| 一个色综合av| 精品亚洲porn| 色综合久久综合网| 亚洲精品在线三区| 亚洲精品国产a久久久久久 | 久久久久久久久久久久久久久99 | 精品亚洲成a人| 91精品91久久久中77777| 久久免费偷拍视频| 亚洲va欧美va人人爽午夜| 国产凹凸在线观看一区二区| 欧美日韩一区视频| 久久精品一级爱片| 日韩中文字幕麻豆| bt欧美亚洲午夜电影天堂| 日韩午夜在线观看| 亚洲动漫第一页| 99久久精品情趣| 久久日一线二线三线suv| 亚洲成va人在线观看| 丁香桃色午夜亚洲一区二区三区| 91精品国产综合久久精品app| 国产精品电影一区二区| 国产综合色精品一区二区三区| 欧美老女人第四色| 亚洲激情六月丁香| av不卡免费电影| 久久精品视频一区| 久久丁香综合五月国产三级网站| 欧美日韩国产天堂| 亚洲高清免费一级二级三级| 日韩高清国产一区在线| 国产视频一区在线播放| 亚洲欧美日韩小说| 亚洲香肠在线观看| 成人av电影免费在线播放| 久久亚洲私人国产精品va媚药| 日本伊人午夜精品| 欧美精品日日鲁夜夜添| 亚洲福利电影网| 欧美三级中文字| 亚洲成av人片| 欧美美女网站色| 午夜精品视频在线观看| 欧美日韩成人在线| 日韩精品成人一区二区在线| 91精品久久久久久久99蜜桃| 男男视频亚洲欧美| 日韩欧美在线影院|