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

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

?? net_core.c

?? 關于s3c2440之bootloader的源代碼
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * vivi/net/net_core.c  * * Based on u-boot * * $Id: net_core.c,v 1.0 2004/08/12 11:14:01 kingmonkey Exp $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * Description: some functions for  net routines . * */ #include "config.h" #include "machine.h"#include "printk.h"#include "bootp.h"#include "tftp.h"#include "rarp.h"#include "nfs.h"#include "time.h"#include "net.h"#include <string.h>#include <types.h>//#define ET_DEBUG 0#define ARP_TIMEOUT		50		/* Seconds before trying ARP again */#ifndef	CONFIG_NET_RETRY_COUNT#define ARP_TIMEOUT_COUNT	100		/* # of timeouts before giving up  */#else#define ARP_TIMEOUT_COUNT  (CONFIG_NET_RETRY_COUNT)#endifnet_config *global_bd = (net_config *)(VIVI_PRIV_RAM_BASE + NET_CONFIG_OFFSET + 8);		/* gloable config info from flash*/ulong downfilesize;ulong downfileaddr;/** BOOTP EXTENTIONS **/IPaddr_t	NetOurSubnetMask=0;		/* Our subnet mask (0=unknown)	*/IPaddr_t	NetOurGatewayIP=0;		/* Our gateways IP address	*/IPaddr_t	NetOurDNSIP=0;			/* Our DNS IP address		*/#if (CONFIG_BOOTP_MASK & CONFIG_BOOTP_DNS2)IPaddr_t	NetOurDNS2IP=0;			/* Our 2nd DNS IP address	*/#endifchar		NetOurNISDomain[32]={0,};	/* Our NIS domain		*/char		NetOurHostName[32]={0,};	/* Our hostname			*/char		NetOurRootPath[64]={0,};	/* Our bootpath			*/ushort		NetBootFileSize=0;		/* Our bootfile size in blocks	*//** END OF BOOTP EXTENTIONS **/ulong		NetBootFileXferSize;	/* The actual transferred size of the bootfile (in bytes) */uchar		NetOurEther[6];		/* Our ethernet address			*/uchar		NetServerEther[6] =	/* Boot server enet address		*/			{ 0, 0, 0, 0, 0, 0 };IPaddr_t	NetOurIP=0;		/* Our IP addr (0 = unknown)		*/IPaddr_t	NetServerIP=0;		/* Our IP addr (0 = unknown)		*/volatile uchar *NetRxPkt;		/* Current receive packet		*/int		NetRxPktLen=0;		/* Current rx packet length		*/unsigned	NetIPID=0;		/* IP packet ID				*/uchar		NetBcastAddr[6] ={ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };	/* Ethernet bcast address		*/uchar		NetEtherNullAddr[6] = { 0, 0, 0, 0, 0, 0 };#ifdef CONFIG_CMD_CDPuchar		NetCDPAddr[6] =	{ 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc };	/* Ethernet bcast address		*/#endifint		NetState=0;		/* Network loop state			*//* XXX in both little & big endian machines 0xFFFF == ntohs(-1) */ushort		NetOurVLAN = 0xFFFF;		/* default is without VLAN	*/ushort		NetOurNativeVLAN = 0xFFFF;	/* ditto			*/char		BootFile[128]={0,};		/* Boot File name			*/#ifdef CONFIG_CMD_PINGIPaddr_t	NetPingIP=0;		/* the ip address to ping 		*/static void PingStart(void);#endif#ifdef  CONFIG_CMD_CDPstatic void CDPStart(void);#endifvolatile uchar	PktBuf[(PKTBUFSRX+1) * PKTSIZE_ALIGN + PKTALIGN];volatile uchar *NetRxPackets[PKTBUFSRX]; /* Receive packets			*/static rxhand_f *packetHandler;		/* Current RX packet handler		*/static thand_f *timeHandler;		/* Current timeout handler		*/static ulong	timeStart;		/* Time base value			*/static ulong	timeDelta;		/* Current timeout value		*/volatile uchar *NetTxPacket = 0;	/* THE transmit packet			*/static int net_check_prereq (proto_t protocol);/**********************************************************************/IPaddr_t	NetArpWaitPacketIP;IPaddr_t	NetArpWaitReplyIP;uchar	       *NetArpWaitPacketMAC;	/* MAC address of waiting packet's destination	*/uchar          *NetArpWaitTxPacket;	/* THE transmit packet			*/int		NetArpWaitTxPacketSize;uchar 		NetArpWaitPacketBuf[PKTSIZE_ALIGN + PKTALIGN];ulong		NetArpWaitTimerStart;int		NetArpWaitTry;extern int eth_init(net_config *bis);			/* Initialize the device	*/extern int eth_send(volatile void *packet, int length);	   /* Send a packet	*/extern int eth_rx(void);			/* Check for received packets	*/extern void eth_halt(void);			/* stop SCC			*/extern char *eth_get_name(void);		/* get name of current device	*/void ArpRequest (void){	int i;	volatile uchar *pkt;	ARP_t *arp;//	printk("ARP broadcast %d\n", NetArpWaitTry);	pkt = NetTxPacket;	pkt += NetSetEther (pkt, NetBcastAddr, PROT_ARP);	arp = (ARP_t *) pkt;	arp->ar_hrd = htons (ARP_ETHER);	arp->ar_pro = htons (PROT_IP);	arp->ar_hln = 6;	arp->ar_pln = 4;	arp->ar_op = htons (ARPOP_REQUEST);	memcpy (&arp->ar_data[0], NetOurEther, 6);		/* source ET addr       */	NetWriteIP ((uchar *) & arp->ar_data[6], NetOurIP);	/* source IP addr       */	for (i = 10; i < 16; ++i) {		arp->ar_data[i] = 0;				/* dest ET addr = 0     */	}	if ((NetArpWaitPacketIP & NetOurSubnetMask) !=	    (NetOurIP & NetOurSubnetMask)) {		if (NetOurGatewayIP == 0) {			printk("## Warning: gatewayip needed but not set\n");		}		NetArpWaitReplyIP = NetOurGatewayIP;	} else {		NetArpWaitReplyIP = NetArpWaitPacketIP;	}	NetWriteIP ((uchar *) & arp->ar_data[16], NetArpWaitReplyIP);	(void) eth_send (NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);}void ArpTimeoutCheck(void){	ulong t;	if (!NetArpWaitPacketIP)		return;		t = get_timer(0);	/* check for arp timeout */	if ((t - NetArpWaitTimerStart) > ARP_TIMEOUT * CFG_HZ) {		NetArpWaitTry++;		if (NetArpWaitTry >= ARP_TIMEOUT_COUNT) {			printk("\nARP Retry count exceeded; starting again\n");			NetArpWaitTry = 0;			NetStartAgain();		} else {			NetArpWaitTimerStart = t;			ArpRequest();		}	}}/**********************************************************************//* *	Main network processing loop. */intNetLoop(proto_t protocol){		net_config *bd = global_bd;	downfilesize = 0;	/* XXX problem with bss workaround */	NetArpWaitPacketMAC = NULL;	NetArpWaitTxPacket = NULL;	NetArpWaitPacketIP = 0;	NetArpWaitReplyIP = 0;	NetArpWaitTxPacket = NULL;	NetTxPacket = NULL;	if (!NetTxPacket) {		int	i;		/*		 *	Setup packet buffers, aligned correctly.		 */		NetTxPacket = &PktBuf[0] + (PKTALIGN - 1);		NetTxPacket -= (ulong)NetTxPacket % PKTALIGN;		for (i = 0; i < PKTBUFSRX; i++) {			NetRxPackets[i] = NetTxPacket + (i+1)*PKTSIZE_ALIGN;		}	}	if (!NetArpWaitTxPacket) {		NetArpWaitTxPacket = &NetArpWaitPacketBuf[0] + (PKTALIGN - 1);		NetArpWaitTxPacket -= (ulong)NetArpWaitTxPacket % PKTALIGN;		NetArpWaitTxPacketSize = 0;	}	eth_halt();	if (eth_init(bd) < 0)		return(-1);restart:	memcpy (NetOurEther, bd->bi_enetaddr, 6);	NetState = NETLOOP_CONTINUE;	/*	 *	Start the ball rolling with the given start function.  From	 *	here on, this code is a state machine driven by received	 *	packets and timer events.	 */	switch (protocol) {	case NFS:	case PING:	case TFTP:/*				NetCopyIP(&NetOurIP, &bd->bi_ip_addr);		NetCopyIP(&NetOurGatewayIP, &bd->gatewayip);		NetCopyIP(&NetOurSubnetMask, &bd->netmask);		NetCopyVLAN(&NetOurVLAN, &bd->vlan);		NetCopyVLAN(&NetOurNativeVLAN, &bd->nvlan);		NetOurIP=htonl(bd->bi_ip_addr);		NetOurGatewayIP=htonl(bd->gatewayip);		NetOurSubnetMask=htonl(bd->netmask);		NetOurVLAN=htonl(bd->vlan);		NetOurNativeVLAN=htonl(bd->nvlan);*/		NetOurIP=bd->bi_ip_addr;		NetOurGatewayIP=bd->gatewayip;		NetOurSubnetMask=bd->netmask;		NetOurVLAN=bd->vlan;		NetOurNativeVLAN=bd->nvlan;				switch (protocol) {		case NFS:		case TFTP://			NetCopyIP(&NetServerIP, &bd->serverip);//			NetServerIP=htonl(bd->serverip);			NetServerIP=bd->serverip;			break;		case PING:			/* nothing */			break;		default:			break;		}		break;	case BOOTP:	case RARP:		/*		 * initialize our IP addr to 0 in order to accept ANY		 * IP addr assigned to us by the BOOTP / RARP server		 */		NetOurIP = 0;		NetCopyIP(&NetServerIP, &bd->serverip);		NetCopyVLAN(&NetOurVLAN, &bd->vlan);		NetCopyVLAN(&NetOurNativeVLAN, &bd->nvlan); 	case CDP:		NetCopyVLAN(&NetOurVLAN, &bd->vlan);		NetCopyVLAN(&NetOurNativeVLAN, &bd->nvlan);		break;	default:		break;	}	switch (net_check_prereq (protocol)) {	case 1:		/* network not configured */		return (-1);	case 0:		switch (protocol) {		case TFTP:		#ifdef CONFIG_CMD_TFTP			/* always use ARP to get server ethernet address */			TftpStart();		#endif			break;		case DHCP:			/* Start with a clean slate... */			NetOurIP = 0;			NetCopyIP(&NetServerIP, &bd->serverip);		#ifdef CONFIG_CMD_DHCP			DhcpRequest();		/* Basically same as BOOTP */		#endif			break;		case BOOTP:		#ifdef CONFIG_CMD_BOOTP			BootpTry = 0;			BootpRequest ();		#endif			break;		case RARP:		#ifdef CONFIG_CMD_RARP			RarpTry = 0;			RarpRequest ();		#endif			break;		case PING:		#ifdef  CONFIG_CMD_PING			PingStart();		#endif			break;		case NFS:		#ifdef CONFIG_CMD_NFS			NfsStart();		#endif			break;		case CDP:		#ifdef CONFIG_CMD_CDP			CDPStart();		#endif			break;		default:			break;		}		NetBootFileXferSize = 0;		break;	}	/*	 *	Main packet reception loop.  Loop receiving packets until	 *	someone sets `NetQuit'.	 */	for (;;) {	//	PingStart();//	printk("here for netloop\n");		/*		 *	Check the ethernet for a new packet.  The ethernet		 *	receive routine will process it.		 */		eth_rx();		/*		 *	Abort if ctrl-c was pressed.		 *//*		if (ctrlc()) {			eth_halt();			printk("\nAbort\n");			return (-1);		}*/		ArpTimeoutCheck();		/*		 *	Check for a timeout, and run the timeout handler		 *	if we have one.		 */		if (timeHandler && ((get_timer(0) - timeStart) > timeDelta)) {			thand_f *x;			x = timeHandler;			timeHandler = (thand_f *)0;			(*x)();		}		switch (NetState) {		case NETLOOP_RESTART:			printk("goto restart\n");			goto restart;		case NETLOOP_SUCCESS:			if (NetBootFileXferSize > 0) {				printk("Bytes transferred = %ld (%lx hex)\n",NetBootFileXferSize,NetBootFileXferSize);				downfilesize = NetBootFileXferSize;			}			eth_halt();			return NetBootFileXferSize;		case NETLOOP_FAIL:			return (-1);		}	}}/**********************************************************************/static voidstartAgainTimeout(void){	NetState = NETLOOP_RESTART;}static voidstartAgainHandler(uchar * pkt, unsigned dest, unsigned src, unsigned len){	/* Totally ignore the packet */	return ;}void NetStartAgain (void){	//	eth_halt ();//	NetState = NETLOOP_FAIL;		NetSetTimeout (10 * CFG_HZ, startAgainTimeout);	NetSetHandler (startAgainHandler);		return;	}/**********************************************************************//* *	Miscelaneous bits. */voidNetSetHandler(rxhand_f * f){	packetHandler = f;}voidNetSetTimeout(int iv, thand_f * f){	if (iv == 0) {		timeHandler = (thand_f *)0;	} else {		timeHandler = f;		timeStart = get_timer(0);		timeDelta = iv;	}}voidNetSendPacket(volatile uchar * pkt, int len){	(void) eth_send(pkt, len);}intNetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len){	uchar *pkt;	/* convert to new style broadcast */	if (dest == 0)		dest = 0xFFFFFFFF;	/* if broadcast, make the ether address a broadcast and don't do ARP */	if (dest == 0xFFFFFFFF)		ether = NetBcastAddr;	/* if MAC address was not discovered yet, save the packet and do an ARP request */	if (memcmp(ether, NetEtherNullAddr, 6) == 0) {//		printk("sending ARP for "); print_IPaddr(dest); printk("\n");		NetArpWaitPacketIP = dest;		NetArpWaitPacketMAC = ether;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人小视频在线| 日韩欧美一区在线| 久久先锋资源网| 国产精品不卡在线| 日本不卡免费在线视频| av在线不卡网| 欧美精品一区二区高清在线观看| 亚洲一线二线三线视频| 床上的激情91.| 精品国产乱码久久久久久老虎| 亚洲美女淫视频| 波多野结衣中文字幕一区 | 欧洲色大大久久| 久久久久久**毛片大全| 三级不卡在线观看| 色天使色偷偷av一区二区| 国产精品美女久久久久久久久久久 | 在线观看不卡视频| 欧美亚洲精品一区| 欧美国产一区在线| 韩国一区二区三区| 日韩欧美在线一区二区三区| 亚洲成人精品一区| 欧美日韩精品一区视频| 亚洲一区二区中文在线| 一本色道**综合亚洲精品蜜桃冫| 国产精品国产三级国产aⅴ入口 | 欧美福利电影网| 一区二区三区四区av| 色哟哟国产精品免费观看| 国产精品乱码一区二三区小蝌蚪| 日本国产一区二区| 国产欧美日韩视频在线观看| 日韩av网站免费在线| 欧美色电影在线| 亚洲电影在线免费观看| 色婷婷综合在线| 亚洲成人综合视频| 欧美日韩高清不卡| 久久国产精品无码网站| 337p日本欧洲亚洲大胆精品| 国产一区二区剧情av在线| 26uuu亚洲| 成人av免费在线观看| 中文字幕在线不卡国产视频| 99久久免费精品| 亚洲国产美女搞黄色| 97精品电影院| 国产精品日韩成人| a4yy欧美一区二区三区| 亚洲一区中文在线| 欧美一区二区视频在线观看| 国产原创一区二区| 亚洲欧洲三级电影| 欧美日韩一区视频| 国产真实乱子伦精品视频| 国产欧美精品一区二区色综合朱莉| 成人免费福利片| 亚洲国产一区二区在线播放| 日韩欧美国产系列| caoporn国产一区二区| 亚洲一区二区在线视频| 欧美一级在线观看| 99国产精品久| 麻豆精品国产91久久久久久| 中文字幕不卡一区| 欧美日韩电影一区| 成人激情开心网| 亚洲h精品动漫在线观看| 久久免费美女视频| 欧美性感一类影片在线播放| 偷窥国产亚洲免费视频| 国产天堂亚洲国产碰碰| 91在线视频播放| 日韩**一区毛片| 最新不卡av在线| 日韩视频永久免费| 91伊人久久大香线蕉| 美女视频黄久久| 亚洲综合色网站| 亚洲国产经典视频| 欧美一区二区三区婷婷月色 | 99r精品视频| 国内精品久久久久影院色| 亚洲欧美另类久久久精品2019 | 日本道精品一区二区三区| 日韩av高清在线观看| 亚洲精品成人悠悠色影视| 久久久久久久国产精品影院| 欧美二区三区的天堂| 91麻豆福利精品推荐| 成人激情文学综合网| 国产在线不卡一卡二卡三卡四卡| 午夜精品福利一区二区蜜股av| 中文字幕精品一区二区精品绿巨人| 在线综合视频播放| 在线欧美一区二区| av电影一区二区| 丁香啪啪综合成人亚洲小说| 久久精品国产99国产| 免费在线观看视频一区| 亚洲成av人**亚洲成av**| 亚洲欧美偷拍三级| 亚洲摸摸操操av| 亚洲久草在线视频| 亚洲女与黑人做爰| 亚洲乱码日产精品bd| ...xxx性欧美| 中文字幕 久热精品 视频在线| 精品剧情在线观看| 日韩免费高清视频| 91精品免费在线观看| 欧美色区777第一页| 欧美在线高清视频| 欧美三级资源在线| 欧美日韩成人激情| 欧美精品一二三四| 日韩欧美中文字幕制服| 91精品国产色综合久久ai换脸| 欧美日韩在线电影| 欧美一区二区三区啪啪| 精品国产电影一区二区| 亚洲精品在线一区二区| 久久精品亚洲国产奇米99| 久久久久久久久久久久久久久99| 欧美激情一区二区三区不卡| 国产精品理论在线观看| 亚洲人成精品久久久久久| 亚洲高清视频在线| 日产欧产美韩系列久久99| 国产一区二区三区美女| 国产a视频精品免费观看| 成人av资源在线| 日本韩国欧美国产| 欧美一级理论性理论a| www久久精品| 综合亚洲深深色噜噜狠狠网站| 一区二区三区蜜桃网| 日韩精品亚洲专区| 国产一区二区三区综合| 91一区二区在线观看| 欧美美女直播网站| 久久夜色精品国产噜噜av| 亚洲少妇30p| 日本特黄久久久高潮| 成人在线视频首页| 欧美色精品在线视频| 久久久久久一级片| 亚洲高清视频中文字幕| 国产九色精品成人porny | 欧美国产综合色视频| 亚洲国产日韩综合久久精品| 久久成人免费日本黄色| 91理论电影在线观看| 精品国产乱码久久久久久老虎| 樱桃视频在线观看一区| 久久成人免费网| 欧美吻胸吃奶大尺度电影| 久久久久久久久久久久久久久99| 亚洲一二三区不卡| 国产精品一区二区在线播放| 欧美三级视频在线观看| 国产精品入口麻豆九色| 欧美a级理论片| 色88888久久久久久影院野外| 日韩三级视频在线看| 一区二区在线免费观看| 国产一区 二区| 在线综合视频播放| 一区二区三区四区在线播放 | 天天综合天天综合色| 99国产精品久久久久久久久久| 久久在线观看免费| 日韩经典一区二区| 欧美日韩一卡二卡| 亚洲人亚洲人成电影网站色| 国产高清不卡二三区| 精品久久久久香蕉网| 亚洲成年人影院| 欧美综合色免费| 亚洲视频狠狠干| 粉嫩高潮美女一区二区三区| 欧美一级欧美三级在线观看| 亚洲成人免费影院| 欧美午夜精品电影| 亚洲精品视频自拍| 成人国产一区二区三区精品| 国产午夜精品一区二区三区嫩草| 捆绑变态av一区二区三区| 欧美二区三区的天堂| 午夜电影网一区| 欧美日韩一二三区| 亚洲图片欧美综合| 欧美三级日韩三级| 亚洲成人先锋电影| 4438x亚洲最大成人网| 日韩国产欧美三级| 欧美一区二区成人| 久色婷婷小香蕉久久| 久久免费电影网|