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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ne2kif.c

?? 介紹:uC/OS-II & lwIP ports for TI C6000 DSP。非常好用!
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*
*********************************************************************************************************
*                                              lwIP TCP/IP Stack
*                                    	 port for uC/OS-II RTOS on TIC6711 DSK
*
* File : tcp_ip.c
* By   : ZengMing @ DEP,Tsinghua University,Beijing,China
* Reference: YangYe's source code for SkyEye project
*********************************************************************************************************
*/
#include "lwip/opt.h"
#include "lwip/def.h"
#include "lwip/mem.h"
#include "lwip/pbuf.h"
#include "lwip/sys.h"
#include <lwip/stats.h>

#include "netif/etharp.h"

#include "netif/ne2kif.h"

/* define this to use QDMA, which is much faster! */
#define QDMA_Enabled

/* Define those to better describe your network interface. */
#define IFNAME0 'e'
#define IFNAME1 't'

struct ne2k_if {
  struct eth_addr *ethaddr; //MAC Address 
};

struct netif *ne2k_if_netif;   


/*----------------------------------------------------------------------------------------
  ****************************************************************************************
  ----------------------------------------------------------------------------------------*/

/*
 * ethernetif_init():
 *
 * Should be called at the beginning of the program to set up the
 * network interface. It calls the function low_level_init() to do the
 * actual setup of the hardware.
 *
 */
err_t ne2k_init(struct netif *netif)
{
  struct ne2k_if *ne2k_if;

  ne2k_if = mem_malloc(sizeof(struct ne2k_if));//MAC Address
  
  if (ne2k_if == NULL)
  {
  		LWIP_DEBUGF(NETIF_DEBUG,("ne2k_init: out of memory!\n"));
  		return ERR_MEM;
  }
  
  netif->state = ne2k_if;
  netif->name[0] = IFNAME0;
  netif->name[1] = IFNAME1;
  netif->output = ne2k_output;
  netif->linkoutput = low_level_output;
  
  ne2k_if->ethaddr = (struct eth_addr *)&(netif->hwaddr[0]);
  
  low_level_init(netif);
  
  etharp_init();
  
  sys_timeout(ARP_TMR_INTERVAL, arp_timer, NULL);
  
  return ERR_OK;
}

/**
 *  arp_timer.
 */
static void arp_timer(void *arg)
{
  etharp_tmr();
  sys_timeout(ARP_TMR_INTERVAL, (sys_timeout_handler)arp_timer, NULL);
}

/**
 * Initialize the ne2k ethernet chip, resetting the interface and getting the ethernet
 * address.
 */
static void low_level_init(struct netif * netif)
{
	u16_t i;
	struct ne2k_if *ne2k_if;
	
	ne2k_if = netif->state;
	// the meaning of "netif->state" can be defined in drivers, here for MAC address!
	
	netif->hwaddr_len=6;
	netif->mtu = 1500;	
  	netif->flags = NETIF_FLAG_BROADCAST;
  		
	// ---------- start -------------
	*(u32_t *)EMIF_CE2 = 0x11D4C714; // Set CE2 to 16bits mode,
									 // AX88796 required no less than 160ns period
	
	i = EN_RESET; i++; //this instruction let NE2K chip soft reset
	DSK6713_waitusec(20000);//wait 20ms //added for DSK6713 2005.10.21 

    EN_CMD = (u8_t) (EN_PAGE0 + EN_NODMA + EN_STOP); 
    
    EN0_DCFG = (u8_t) 0x01;

    /* Clear the remote	byte count registers. */
    EN0_RCNTHI = (u8_t) 0x00; 								/* MSB remote byte count reg */
    EN0_RCNTLO = (u8_t) 0x00; 								/* LSB remote byte count reg */

	/* RX configuration reg    Monitor mode (no packet receive) */
	EN0_RXCR = (u8_t) ENRXCR_MON;
	/* TX configuration reg   set internal loopback mode  */
	EN0_TXCR = (u8_t) ENTXCR_LOOP;

    EN0_TPSR = (u8_t) 0x40;					//發(fā)送緩沖首地址 大小為6頁,剛好是1個最大包
    										//為0x40-0x46 
    
    EN0_STARTPG = (u8_t) 0x46 ;					    /* 接收緩沖 47。Starting page of ring buffer. First page of Rx ring buffer 46h*/
    EN0_BOUNDARY = (u8_t) 0x46 ;						/* Boundary page of ring buffer 0x46*/
    EN0_STOPPG = (u8_t) 0x80 ;    					/* Ending page of ring buffer ,0x80*/

    EN0_ISR = (u8_t) 0xff; 								/* clear the all flag bits in EN0_ISR */
    EN0_IMR = (u8_t) 0x00; 								/* Disable all Interrupt */

    EN_CMD = (u8_t) (EN_PAGE1 + EN_NODMA + EN_STOP);
    EN1_CURR = (u8_t) 0x47; 							/* keep curr=boundary+1 means no new packet */
           
    EN1_PAR0 = (u8_t)0x12;// MAC_addr.addr[0];	//自定義的mac地址
    EN1_PAR1 = (u8_t)0x34;// MAC_addr.addr[1];
    EN1_PAR2 = (u8_t)0x56;// MAC_addr.addr[2];
    EN1_PAR3 = (u8_t)0x78;// MAC_addr.addr[3];
    EN1_PAR4 = (u8_t)0x9a;// MAC_addr.addr[4];
    EN1_PAR5 = (u8_t)0xe0;// MAC_addr.addr[5];
    
  	/* make up an address. */
  	ne2k_if->ethaddr->addr[0] = (u8_t) 0x12;//MAC_addr.addr[0];
  	ne2k_if->ethaddr->addr[1] = (u8_t) 0x34;//MAC_addr.addr[1];
  	ne2k_if->ethaddr->addr[2] = (u8_t) 0x56;//MAC_addr.addr[2];
  	ne2k_if->ethaddr->addr[3] = (u8_t) 0x78;//MAC_addr.addr[3];
  	ne2k_if->ethaddr->addr[4] = (u8_t) 0x9a;//MAC_addr.addr[4];
  	ne2k_if->ethaddr->addr[5] = (u8_t) 0xe0;//MAC_addr.addr[5];
    
    /* Initialize the multicast list to reject-all.  
       If we enable multicast the higher levels can do the filtering. 
       <multicast filter mask array (8 bytes)> */
    EN1_MAR0 = (u8_t) 0x00;  
    EN1_MAR1 = (u8_t) 0x00;
    EN1_MAR2 = (u8_t) 0x00;
    EN1_MAR3 = (u8_t) 0x00;
    EN1_MAR4 = (u8_t) 0x00;
    EN1_MAR5 = (u8_t) 0x00;
    EN1_MAR6 = (u8_t) 0x00;
    EN1_MAR7 = (u8_t) 0x00;
    
    EN_CMD = (u8_t) (EN_PAGE0 + EN_NODMA + EN_STOP);
 
    EN0_IMR = (u8_t) (ENISR_OVER + ENISR_RX + ENISR_RX_ERR);

    EN0_TXCR = (u8_t) 0x00; //E0			//TCR 				
	EN0_RXCR = (u8_t) 0x44;	//CC			//RCR
	    
    EN_CMD = (u8_t) (EN_PAGE0 + EN_NODMA + EN_START);
    
    EN0_ISR = (u8_t) 0xff; // clear the all flag bits in EN0_ISR
  
 	ne2k_if_netif = netif;
}


/*----------------------------------------------------------------------------------------
  ****************************************************************************************
  ----------------------------------------------------------------------------------------*/

/*
 * ethernetif_output():
 *
 * This function is called by the TCP/IP stack when an IP packet
 * should be sent. It calls the function called low_level_output() to
 * do the actual transmission of the packet.
 *
 */
static err_t 
ne2k_output(struct netif *netif, struct pbuf *p,
		  struct ip_addr *ipaddr)
{
	/* resolve hardware address, then send (or queue) packet */
	return etharp_output(netif, ipaddr, p);
}

/*
 * low_level_output():
 *
 * Should do the actual transmission of the packet. The packet is
 * contained in the pbuf that is passed to the function. This pbuf
 * might be chained.
 *
 */
static err_t low_level_output(struct netif * netif, struct pbuf *p)
{
	struct pbuf *q;
	u16_t packetLength,remote_Addr,Count;
	u8_t *buf;
	
	packetLength = p->tot_len - ETH_PAD_SIZE; //05 01 millin
    
	if ((packetLength) < 64) packetLength = 64; //add pad by the AX88796 automatically

	// turn off RX int	
	EN0_IMR = (u8_t) (ENISR_OVER);

	/* We should already be in page 0, but to be safe... */
	EN_CMD = (u8_t) (EN_PAGE0 + EN_START + EN_NODMA);
	
	// clear the RDC bit	
	EN0_ISR = (u8_t) ENISR_RDC;
	
	remote_Addr = (u16_t)(TX_START_PG<<8); 
	
	/*
	 * Write packet to ring buffers.
	 */
   for(q = p; q != NULL; q = q->next) {
    /* Send the data from the pbuf to the interface, one pbuf at a
       time. The size of the data in each pbuf is kept in the ->len
       variable. */
    	Count = q->len;
		buf = q->payload;
		
		if (q == p){
           	buf += ETH_PAD_SIZE;
		    Count -= ETH_PAD_SIZE;//Pad in Eth_hdr struct 
           	  }
		
		// Write data to AX88796
		remote_Addr = write_AX88796(buf, remote_Addr, Count);	
	} //for

	/* Just send it, and does not check */
	while (EN_CMD & EN_TRANS);

	EN0_TPSR   = (u8_t)  TX_START_PG;
	EN0_TCNTLO = (u8_t) (packetLength & 0xff);
	EN0_TCNTHI = (u8_t) (packetLength >> 8);
	EN_CMD = (u8_t) (EN_PAGE0 + EN_NODMA + EN_TRANS + EN_START);
	
	EN0_IMR = (u8_t) (ENISR_OVER + ENISR_RX + ENISR_RX_ERR);
	
	#if LINK_STATS
		lwip_stats.link.xmit++;
	#endif /* LINK_STATS */
		
	return ERR_OK;
}

/**
 *  write_AX88796.
 */
u16_t write_AX88796(u8_t * buf, u16_t remote_Addr, u16_t Count)
{
	#ifndef QDMA_Enabled
	u16_t loop;
	#endif

	/* AX88796. */
	EN0_RCNTLO = (u8_t) ( Count &  0xff);
	EN0_RCNTHI = (u8_t) ( Count >> 8);
	EN0_RSARLO = (u8_t) ( remote_Addr &  0xff);
	EN0_RSARHI = (u8_t) ( remote_Addr >> 8);
	EN_CMD     = (u8_t) (EN_RWRITE + EN_START + EN_PAGE0);

	// Add for next loop...
	remote_Addr += Count;

	Count = (Count + 1) >> 1; // Turn to 16bits count. <Must add 1 first!>		

	#ifdef QDMA_Enabled
		*(u32_t *)QDMA_SRC   = (u32_t) buf;
		*(u32_t *)QDMA_DST   = (u32_t) &EN_DATA;
		*(u32_t *)QDMA_CNT   = (u32_t) Count;
		*(u32_t *)QDMA_IDX   = 0x00000000;
		*(u32_t *)QDMA_S_OPT = 0x29000001;
	#else
		for (loop=0;loop < Count ;loop++){
			EN_DATA = *(u16_t *)buf;
			buf += 2;
    	}
	#endif //QDMA_Enabled

	while ((EN0_ISR & ENISR_RDC) == 0);

	EN0_ISR = (u8_t) ENISR_RDC;
	
	return remote_Addr;
}


/*----------------------------------------------------------------------------------------
  ****************************************************************************************
  ----------------------------------------------------------------------------------------*/

/*
 * ethernetif_input():
 *
 * This function should be called when a packet is ready to be read
 * from the interface. It uses the function low_level_input() that
 * should handle the actual reception of bytes from the network
 * interface.
 *
 */
static void 
ne2k_input(struct netif *netif)
{
  struct ne2k_if *ne2k_if;
  struct eth_hdr *ethhdr;
  struct pbuf *p;

  ne2k_if = netif->state;
  
  /* move received packet into a new pbuf */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区精品在线| 成人免费黄色大片| 久久久www成人免费毛片麻豆| 老司机午夜精品| 日韩一区二区精品葵司在线| 日本欧洲一区二区| 88在线观看91蜜桃国自产| 日本免费新一区视频| 精品日韩一区二区三区| 国产传媒久久文化传媒| 亚洲私人黄色宅男| 欧美最新大片在线看| 天堂久久一区二区三区| 亚洲精品一区在线观看| av在线播放成人| 亚洲制服欧美中文字幕中文字幕| 国产精品传媒视频| 色综合天天综合网国产成人综合天 | 337p亚洲精品色噜噜| 日本视频在线一区| 国产日韩av一区| 色综合久久久久久久久| 美女视频网站久久| 国产精品欧美极品| 欧美日韩精品一区视频| 国产精品综合一区二区三区| 亚洲色图另类专区| 欧美一二三四在线| 99riav一区二区三区| 日韩黄色片在线观看| 国产欧美日韩激情| 欧美日韩成人激情| 不卡区在线中文字幕| 天天色 色综合| 国产精品狼人久久影院观看方式| 欧美无砖专区一中文字| 精品午夜久久福利影院| 亚洲麻豆国产自偷在线| 日韩精品一区二区在线观看| 97久久超碰国产精品| 另类综合日韩欧美亚洲| 亚洲日本在线看| 久久色.com| 欧美日韩一级片网站| 丁香婷婷深情五月亚洲| 美腿丝袜在线亚洲一区| 亚洲一区二区四区蜜桃| 欧美国产97人人爽人人喊| 日韩欧美国产综合在线一区二区三区| 99免费精品视频| 国产在线精品一区二区| 日韩国产精品大片| 亚洲激情图片一区| 国产精品久久久久久久久免费相片 | 欧美日韩激情一区二区三区| 风间由美一区二区av101| 奇米888四色在线精品| 一区二区三区日韩| 18成人在线观看| 欧美国产成人在线| 精品福利在线导航| 欧美一区二区在线免费播放| 色综合久久88色综合天天 | 视频在线观看一区| 亚洲免费看黄网站| 国产精品美女久久久久久久久久久| 欧美xxx久久| 日韩免费高清av| 欧美一区二区在线不卡| 欧美午夜片在线观看| 日本韩国欧美一区| 日本精品视频一区二区| 91麻豆国产福利在线观看| 成人a区在线观看| 国产不卡视频在线观看| 国产乱人伦偷精品视频免下载| 精品一区二区精品| 麻豆视频一区二区| 精品系列免费在线观看| 韩国成人精品a∨在线观看| 久久精品国产99国产| 蜜臀久久99精品久久久画质超高清| 天堂久久久久va久久久久| 天堂资源在线中文精品| 亚洲成人精品一区二区| 亚洲成av人片在线| 日本特黄久久久高潮| 美腿丝袜在线亚洲一区| 国模一区二区三区白浆| 国产成人午夜99999| 成人午夜免费av| 99r国产精品| 欧美日韩午夜在线| 日韩视频一区在线观看| 精品国产凹凸成av人导航| 国产片一区二区| 亚洲另类春色校园小说| 亚洲资源中文字幕| 日本欧美肥老太交大片| 国产美女视频一区| 99视频热这里只有精品免费| 欧美性一二三区| 日韩精品一区二区三区视频在线观看| 日韩免费视频一区二区| 国产人伦精品一区二区| 亚洲精品乱码久久久久久| 一本大道av一区二区在线播放| 欧美亚一区二区| 精品国产一区二区三区不卡| 国产精品女主播在线观看| 一区二区三区免费网站| 免费欧美高清视频| 成人深夜视频在线观看| 欧美亚洲精品一区| 欧美一区二区三区不卡| 国产又黄又大久久| 国产高清不卡一区二区| 91一区一区三区| 日韩美女一区二区三区四区| 日本一区二区三区四区| 亚洲一区二区三区中文字幕| 久久成人免费电影| 91老师片黄在线观看| 日韩欧美一区中文| 亚洲欧洲99久久| 精品一区二区在线视频| 色婷婷久久久久swag精品| 精品国产乱码久久久久久夜甘婷婷 | 国产精品美女久久福利网站| 亚洲成人激情av| 成人动漫精品一区二区| 欧美一级精品大片| 亚洲精品一二三| 国产一区二区三区免费播放| 91福利精品第一导航| 欧美精品一区视频| 亚洲18色成人| 91在线观看免费视频| 精品国产免费视频| 日韩精品每日更新| 色婷婷久久综合| 日韩视频在线观看一区二区| 国产精品美女久久久久aⅴ国产馆| 丝袜诱惑制服诱惑色一区在线观看| 成人晚上爱看视频| 精品裸体舞一区二区三区| 亚洲一区二区三区美女| 成人网页在线观看| 久久精品在线观看| 美女视频网站黄色亚洲| 欧美日韩成人一区二区| 一区二区三区中文字幕在线观看| 国产成+人+日韩+欧美+亚洲| 日韩免费性生活视频播放| 亚洲第一激情av| 欧美性淫爽ww久久久久无| 国产精品国产三级国产aⅴ原创 | 亚洲va国产天堂va久久en| www.成人在线| 国产精品每日更新在线播放网址| 国产精品影视天天线| 亚洲精品成人少妇| 国产乱码精品一区二区三区五月婷| 6080yy午夜一二三区久久| 亚洲伊人伊色伊影伊综合网| 色婷婷香蕉在线一区二区| 亚洲视频你懂的| 色综合一区二区| 一区二区三区欧美亚洲| 日本韩国精品一区二区在线观看| 国产精品久久99| 91色九色蝌蚪| 亚洲一区二区三区三| 欧美日韩一二三区| 日韩在线卡一卡二| 欧美一区二区在线观看| 毛片一区二区三区| 久久婷婷国产综合国色天香| 福利91精品一区二区三区| 欧美国产激情二区三区| 99re成人精品视频| 亚洲男人的天堂av| 欧美日韩日本视频| 日本欧美一区二区在线观看| 日韩欧美中文字幕公布| 国产一区二区三区免费观看| 欧美激情一区二区在线| 99久久777色| 亚洲va国产天堂va久久en| 日韩欧美不卡一区| 成人丝袜视频网| 一区二区三区欧美| 日韩欧美国产一二三区| 国产激情视频一区二区在线观看| 国产精品第13页| 欧美美女一区二区在线观看| 精彩视频一区二区| 国产精品国产三级国产三级人妇| 在线观看免费成人| 精品一区二区三区欧美|