亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
成人深夜在线观看| 欧美美女网站色| 欧美三级视频在线播放| 久久综合视频网| 亚洲国产aⅴ天堂久久| 国产成人午夜99999| 欧美日韩免费电影| 日韩一区日韩二区| 国产一区二区三区不卡在线观看| 欧美图区在线视频| 一区二区免费在线| av在线播放一区二区三区| 2021国产精品久久精品| 午夜电影久久久| 欧美日韩综合不卡| 一区二区三区欧美在线观看| 盗摄精品av一区二区三区| 精品久久久久久久久久久久包黑料| 亚洲电影中文字幕在线观看| 99re热这里只有精品视频| 欧美经典一区二区| 国产资源精品在线观看| 日韩欧美中文字幕精品| 日韩中文字幕av电影| 精品污污网站免费看| 一区二区久久久| 欧美日韩一区二区三区免费看 | 91色porny在线视频| 国产偷国产偷亚洲高清人白洁 | 九色综合狠狠综合久久| 欧美一区2区视频在线观看| 亚洲成av人片一区二区三区| 欧美日韩精品一区二区三区 | 久久亚洲捆绑美女| 国产精品12区| 国产精品久久久久久久裸模| 成人sese在线| 一级特黄大欧美久久久| 欧美在线免费观看亚洲| 亚洲成av人片| 日韩欧美国产午夜精品| 日本va欧美va欧美va精品| 日韩一卡二卡三卡国产欧美| 久久99精品久久久久婷婷| 久久精品亚洲国产奇米99| 成人午夜视频免费看| 国产美女视频一区| 国产欧美日韩在线视频| eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 一本色道久久综合亚洲aⅴ蜜桃| 久久久久青草大香线综合精品| 国产成人精品在线看| 日韩美女视频19| 欧美日韩五月天| 蜜桃视频在线观看一区二区| 精品播放一区二区| 色婷婷久久久久swag精品| 日韩高清在线一区| 久久久亚洲午夜电影| 97成人超碰视| 毛片av一区二区| 亚洲欧洲av色图| 欧美一区二区三区在线| 国产99久久久国产精品免费看| 亚洲黄色av一区| 亚洲精品一线二线三线无人区| 99久久er热在这里只有精品66| 婷婷开心久久网| 国产精品视频线看| 欧美一区二区三区在线观看视频| 国产91在线看| 日韩av在线发布| 国产精品对白交换视频 | 色老综合老女人久久久| 欧美a级理论片| 亚洲激情在线激情| 久久久不卡网国产精品一区| 欧美性欧美巨大黑白大战| 国产综合久久久久久久久久久久| 一区二区三区中文字幕| 久久久精品人体av艺术| 欧美久久一二区| 99久久99久久久精品齐齐| 强制捆绑调教一区二区| 亚洲女同ⅹxx女同tv| 久久久精品欧美丰满| 777精品伊人久久久久大香线蕉| 成人短视频下载| 麻豆精品视频在线观看视频| 亚洲午夜电影在线观看| 日韩理论片中文av| 国产欧美久久久精品影院| 91精品婷婷国产综合久久性色| 91丝袜国产在线播放| 国产福利一区二区三区在线视频| 天天综合色天天综合色h| 亚洲视频免费看| 欧美国产在线观看| 久久影视一区二区| 精品国产污网站| 欧美第一区第二区| 欧美一卡二卡在线| 欧美高清你懂得| 欧美高清性hdvideosex| 欧美日韩精品一区视频| 欧美三级一区二区| 欧美日韩视频专区在线播放| 欧美综合视频在线观看| 色哦色哦哦色天天综合| 色综合久久久久综合体桃花网| 成人激情校园春色| 成人av综合一区| 不卡视频免费播放| 91免费观看视频在线| 99re66热这里只有精品3直播| 成人短视频下载| 国产婷婷色一区二区三区在线| 欧美va日韩va| 久久久久久99久久久精品网站| 久久久蜜桃精品| 中文字幕精品在线不卡| 最新国产成人在线观看| 亚洲精品第1页| 午夜影院在线观看欧美| 青青草国产精品亚洲专区无| 老司机免费视频一区二区三区| 久久99久久久久久久久久久| 激情综合网激情| 福利电影一区二区| 一本大道综合伊人精品热热| 欧美三级日韩三级国产三级| 欧美一区二区三区免费观看视频| 日韩一区二区三免费高清| 久久蜜桃av一区二区天堂| 国产精品美女久久久久久久网站| 亚洲欧美电影一区二区| 偷窥少妇高潮呻吟av久久免费| 蜜桃av一区二区三区电影| 国产精品一区二区果冻传媒| 91一区二区在线观看| 欧美视频第二页| 久久久久88色偷偷免费| 亚洲人亚洲人成电影网站色| 亚洲成人免费观看| 韩国毛片一区二区三区| 91天堂素人约啪| 欧美videofree性高清杂交| 中文字幕精品一区二区精品绿巨人| 亚洲一区二区三区四区中文字幕| 美日韩一区二区| 91一区二区在线| 精品91自产拍在线观看一区| 亚洲欧洲av在线| 另类中文字幕网| 在线欧美日韩国产| 国产三级三级三级精品8ⅰ区| 亚洲精选在线视频| 久久99精品国产麻豆不卡| 色综合视频在线观看| 欧美精品一区二区三区在线播放 | 日本伊人午夜精品| 高清成人在线观看| 欧美日本不卡视频| 亚洲欧美日韩一区二区 | 欧美三级电影在线看| 久久综合成人精品亚洲另类欧美| 亚洲综合色丁香婷婷六月图片| 国产乱淫av一区二区三区| 欧美日韩国产一区| 国产精品免费视频一区| 六月丁香综合在线视频| 精品视频一区三区九区| 亚洲欧洲日韩一区二区三区| 国模一区二区三区白浆| 在线电影欧美成精品| 亚洲综合精品久久| jlzzjlzz亚洲日本少妇| 久久久午夜精品理论片中文字幕| 日日夜夜精品视频天天综合网| av不卡免费在线观看| 久久久久国产精品免费免费搜索| 免费观看一级特黄欧美大片| 欧美午夜电影在线播放| 亚洲美女屁股眼交3| 成人h版在线观看| 日本一区免费视频| 国产麻豆成人传媒免费观看| 日韩午夜av一区| 久久国内精品自在自线400部| 欧美色综合久久| 午夜精品在线视频一区| 色av成人天堂桃色av| 亚洲三级在线免费| 99精品热视频| 亚洲精品国产高清久久伦理二区 | 丰满白嫩尤物一区二区| 久久免费电影网| 成人综合在线观看| 国产免费成人在线视频| av中文一区二区三区|