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

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

?? mv_eth.c

?? AT9260的BOOTLOADER,還有幾個版本的,需要的我再放
?? C
?? 第 1 頁 / 共 5 頁
字號:
		/* DEBUG OUTPUT prints adresses of globals */		print_globals (dev);#endif		eth_register (dev);	}	DP (printf ("%s: exit\n", __FUNCTION__));}/********************************************************************** * mv64360_eth_open * * This function is called when openning the network device. The function * should initialize all the hardware, initialize cyclic Rx/Tx * descriptors chain and buffers and allocate an IRQ to the network * device. * * Input : a pointer to the network device structure * / / ronen - changed the output to match  net/eth.c needs * Output : nonzero of success , zero if fails. * under construction **********************************************************************/int mv64360_eth_open (struct eth_device *dev){	return (mv64360_eth_real_open (dev));}/* Helper function for mv64360_eth_open */static int mv64360_eth_real_open (struct eth_device *dev){	unsigned int queue;	ETH_PORT_INFO *ethernet_private;	struct mv64360_eth_priv *port_private;	unsigned int port_num;	u32 port_status, phy_reg_data;	ethernet_private = (ETH_PORT_INFO *) dev->priv;	/* ronen - when we update the MAC env params we only update dev->enetaddr	   see ./net/eth.c eth_set_enetaddr() */	memcpy (ethernet_private->port_mac_addr, dev->enetaddr, 6);	port_private =		(struct mv64360_eth_priv *) ethernet_private->port_private;	port_num = port_private->port_num;	/* Stop RX Queues */	MV_REG_WRITE (MV64360_ETH_RECEIVE_QUEUE_COMMAND_REG (port_num),		      0x0000ff00);	/* Clear the ethernet port interrupts */	MV_REG_WRITE (MV64360_ETH_INTERRUPT_CAUSE_REG (port_num), 0);	MV_REG_WRITE (MV64360_ETH_INTERRUPT_CAUSE_EXTEND_REG (port_num), 0);	/* Unmask RX buffer and TX end interrupt */	MV_REG_WRITE (MV64360_ETH_INTERRUPT_MASK_REG (port_num),		      INT_CAUSE_UNMASK_ALL);	/* Unmask phy and link status changes interrupts */	MV_REG_WRITE (MV64360_ETH_INTERRUPT_EXTEND_MASK_REG (port_num),		      INT_CAUSE_UNMASK_ALL_EXT);	/* Set phy address of the port */	ethernet_private->port_phy_addr = 0x8 + port_num;	/* Activate the DMA channels etc */	eth_port_init (ethernet_private);	/* "Allocate" setup TX rings */	for (queue = 0; queue < MV64360_TX_QUEUE_NUM; queue++) {		unsigned int size;		port_private->tx_ring_size[queue] = MV64360_TX_QUEUE_SIZE;		size = (port_private->tx_ring_size[queue] * TX_DESC_ALIGNED_SIZE);	/*size = no of DESCs times DESC-size */		ethernet_private->tx_desc_area_size[queue] = size;		/* first clear desc area completely */		memset ((void *) ethernet_private->p_tx_desc_area_base[queue],			0, ethernet_private->tx_desc_area_size[queue]);		/* initialize tx desc ring with low level driver */		if (ether_init_tx_desc_ring		    (ethernet_private, ETH_Q0,		     port_private->tx_ring_size[queue],		     MV64360_TX_BUFFER_SIZE /* Each Buffer is 1600 Byte */ ,		     (unsigned int) ethernet_private->		     p_tx_desc_area_base[queue],		     (unsigned int) ethernet_private->		     p_tx_buffer_base[queue]) == false)			printf ("### Error initializing TX Ring\n");	}	/* "Allocate" setup RX rings */	for (queue = 0; queue < MV64360_RX_QUEUE_NUM; queue++) {		unsigned int size;		/* Meantime RX Ring are fixed - but must be configurable by user */		port_private->rx_ring_size[queue] = MV64360_RX_QUEUE_SIZE;		size = (port_private->rx_ring_size[queue] *			RX_DESC_ALIGNED_SIZE);		ethernet_private->rx_desc_area_size[queue] = size;		/* first clear desc area completely */		memset ((void *) ethernet_private->p_rx_desc_area_base[queue],			0, ethernet_private->rx_desc_area_size[queue]);		if ((ether_init_rx_desc_ring		     (ethernet_private, ETH_Q0,		      port_private->rx_ring_size[queue],		      MV64360_RX_BUFFER_SIZE /* Each Buffer is 1600 Byte */ ,		      (unsigned int) ethernet_private->		      p_rx_desc_area_base[queue],		      (unsigned int) ethernet_private->		      p_rx_buffer_base[queue])) == false)			printf ("### Error initializing RX Ring\n");	}	eth_port_start (ethernet_private);	/* Set maximum receive buffer to 9700 bytes */	MV_REG_WRITE (MV64360_ETH_PORT_SERIAL_CONTROL_REG (port_num),		      (0x5 << 17) |		      (MV_REG_READ		       (MV64360_ETH_PORT_SERIAL_CONTROL_REG (port_num))		       & 0xfff1ffff));	/*	 * Set ethernet MTU for leaky bucket mechanism to 0 - this will	 * disable the leaky bucket mechanism .	 */	MV_REG_WRITE (MV64360_ETH_MAXIMUM_TRANSMIT_UNIT (port_num), 0);	port_status = MV_REG_READ (MV64360_ETH_PORT_STATUS_REG (port_num));	/* Check Link status on phy */	eth_port_read_smi_reg (port_num, 1, &phy_reg_data);	if (!(phy_reg_data & 0x20)) {		/* Reset PHY */		if ((ethernet_phy_reset (port_num)) != true) {			printf ("$$ Warnning: No link on port %d \n",				port_num);			return 0;		} else {			eth_port_read_smi_reg (port_num, 1, &phy_reg_data);			if (!(phy_reg_data & 0x20)) {				printf ("### Error: Phy is not active\n");				return 0;			}		}	} else {		mv64360_eth_print_phy_status (dev);	}	port_private->eth_running = MAGIC_ETH_RUNNING;	return 1;}static int mv64360_eth_free_tx_rings (struct eth_device *dev){	unsigned int queue;	ETH_PORT_INFO *ethernet_private;	struct mv64360_eth_priv *port_private;	unsigned int port_num;	volatile ETH_TX_DESC *p_tx_curr_desc;	ethernet_private = (ETH_PORT_INFO *) dev->priv;	port_private =		(struct mv64360_eth_priv *) ethernet_private->port_private;	port_num = port_private->port_num;	/* Stop Tx Queues */	MV_REG_WRITE (MV64360_ETH_TRANSMIT_QUEUE_COMMAND_REG (port_num),		      0x0000ff00);	/* Free TX rings */	DP (printf ("Clearing previously allocated TX queues... "));	for (queue = 0; queue < MV64360_TX_QUEUE_NUM; queue++) {		/* Free on TX rings */		for (p_tx_curr_desc =		     ethernet_private->p_tx_desc_area_base[queue];		     ((unsigned int) p_tx_curr_desc <= (unsigned int)		      ethernet_private->p_tx_desc_area_base[queue] +		      ethernet_private->tx_desc_area_size[queue]);		     p_tx_curr_desc =		     (ETH_TX_DESC *) ((unsigned int) p_tx_curr_desc +				      TX_DESC_ALIGNED_SIZE)) {			/* this is inside for loop */			if (p_tx_curr_desc->return_info != 0) {				p_tx_curr_desc->return_info = 0;				DP (printf ("freed\n"));			}		}		DP (printf ("Done\n"));	}	return 0;}static int mv64360_eth_free_rx_rings (struct eth_device *dev){	unsigned int queue;	ETH_PORT_INFO *ethernet_private;	struct mv64360_eth_priv *port_private;	unsigned int port_num;	volatile ETH_RX_DESC *p_rx_curr_desc;	ethernet_private = (ETH_PORT_INFO *) dev->priv;	port_private =		(struct mv64360_eth_priv *) ethernet_private->port_private;	port_num = port_private->port_num;	/* Stop RX Queues */	MV_REG_WRITE (MV64360_ETH_RECEIVE_QUEUE_COMMAND_REG (port_num),		      0x0000ff00);	/* Free RX rings */	DP (printf ("Clearing previously allocated RX queues... "));	for (queue = 0; queue < MV64360_RX_QUEUE_NUM; queue++) {		/* Free preallocated skb's on RX rings */		for (p_rx_curr_desc =		     ethernet_private->p_rx_desc_area_base[queue];		     (((unsigned int) p_rx_curr_desc <		       ((unsigned int) ethernet_private->			p_rx_desc_area_base[queue] +			ethernet_private->rx_desc_area_size[queue])));		     p_rx_curr_desc =		     (ETH_RX_DESC *) ((unsigned int) p_rx_curr_desc +				      RX_DESC_ALIGNED_SIZE)) {			if (p_rx_curr_desc->return_info != 0) {				p_rx_curr_desc->return_info = 0;				DP (printf ("freed\n"));			}		}		DP (printf ("Done\n"));	}	return 0;}/********************************************************************** * mv64360_eth_stop * * This function is used when closing the network device. * It updates the hardware, * release all memory that holds buffers and descriptors and release the IRQ. * Input : a pointer to the device structure * Output : zero if success , nonzero if fails *********************************************************************/int mv64360_eth_stop (struct eth_device *dev){	ETH_PORT_INFO *ethernet_private;	struct mv64360_eth_priv *port_private;	unsigned int port_num;	ethernet_private = (ETH_PORT_INFO *) dev->priv;	port_private =		(struct mv64360_eth_priv *) ethernet_private->port_private;	port_num = port_private->port_num;	/* Disable all gigE address decoder */	MV_REG_WRITE (MV64360_ETH_BASE_ADDR_ENABLE_REG, 0x3f);	DP (printf ("%s Ethernet stop called ... \n", __FUNCTION__));	mv64360_eth_real_stop (dev);	return 0;};/* Helper function for mv64360_eth_stop */static int mv64360_eth_real_stop (struct eth_device *dev){	ETH_PORT_INFO *ethernet_private;	struct mv64360_eth_priv *port_private;	unsigned int port_num;	ethernet_private = (ETH_PORT_INFO *) dev->priv;	port_private =		(struct mv64360_eth_priv *) ethernet_private->port_private;	port_num = port_private->port_num;	mv64360_eth_free_tx_rings (dev);	mv64360_eth_free_rx_rings (dev);	eth_port_reset (ethernet_private->port_num);	/* Disable ethernet port interrupts */	MV_REG_WRITE (MV64360_ETH_INTERRUPT_CAUSE_REG (port_num), 0);	MV_REG_WRITE (MV64360_ETH_INTERRUPT_CAUSE_EXTEND_REG (port_num), 0);	/* Mask RX buffer and TX end interrupt */	MV_REG_WRITE (MV64360_ETH_INTERRUPT_MASK_REG (port_num), 0);	/* Mask phy and link status changes interrupts */	MV_REG_WRITE (MV64360_ETH_INTERRUPT_EXTEND_MASK_REG (port_num), 0);	MV_RESET_REG_BITS (MV64360_CPU_INTERRUPT0_MASK_HIGH,			   BIT0 << port_num);	/* Print Network statistics */#ifndef  UPDATE_STATS_BY_SOFTWARE	/*	 * Print statistics (only if ethernet is running),	 * then zero all the stats fields in memory	 */	if (port_private->eth_running == MAGIC_ETH_RUNNING) {		port_private->eth_running = 0;		mv64360_eth_print_stat (dev);	}	memset (port_private->stats, 0, sizeof (struct net_device_stats));#endif	DP (printf ("\nEthernet stopped ... \n"));	return 0;}/********************************************************************** * mv64360_eth_start_xmit * * This function is queues a packet in the Tx descriptor for * required port. * * Input : skb - a pointer to socket buffer *         dev - a pointer to the required port * * Output : zero upon success **********************************************************************/int mv64360_eth_xmit (struct eth_device *dev, volatile void *dataPtr,		      int dataSize){	ETH_PORT_INFO *ethernet_private;	struct mv64360_eth_priv *port_private;	unsigned int port_num;	PKT_INFO pkt_info;	ETH_FUNC_RET_STATUS status;	struct net_device_stats *stats;	ETH_FUNC_RET_STATUS release_result;	ethernet_private = (ETH_PORT_INFO *) dev->priv;	port_private =		(struct mv64360_eth_priv *) ethernet_private->port_private;	port_num = port_private->port_num;	stats = port_private->stats;	/* Update packet info data structure */	pkt_info.cmd_sts = ETH_TX_FIRST_DESC | ETH_TX_LAST_DESC;	/* DMA owned, first last */	pkt_info.byte_cnt = dataSize;	pkt_info.buf_ptr = (unsigned int) dataPtr;	status = eth_port_send (ethernet_private, ETH_Q0, &pkt_info);	if ((status == ETH_ERROR) || (status == ETH_QUEUE_FULL)) {		printf ("Error on transmitting packet ..");		if (status == ETH_QUEUE_FULL)			printf ("ETH Queue is full. \n");		if (status == ETH_QUEUE_LAST_RESOURCE)			printf ("ETH Queue: using last available resource. \n");		goto error;	}	/* Update statistics and start of transmittion time */	stats->tx_bytes += dataSize;	stats->tx_packets++;	/* Check if packet(s) is(are) transmitted correctly (release everything) */	do {		release_result =			eth_tx_return_desc (ethernet_private, ETH_Q0,					    &pkt_info);		switch (release_result) {		case ETH_OK:			DP (printf ("descriptor released\n"));			if (pkt_info.cmd_sts & BIT0) {				printf ("Error in TX\n");				stats->tx_errors++;			}			break;		case ETH_RETRY:			DP (printf ("transmission still in process\n"));			break;		case ETH_ERROR:			printf ("routine can not access Tx desc ring\n");			break;		case ETH_END_OF_JOB:			DP (printf ("the routine has nothing to release\n"));

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人动漫av| 日韩电影免费在线观看网站| 洋洋成人永久网站入口| 麻豆精品在线看| 91老师片黄在线观看| 欧美videos大乳护士334| 亚洲综合一区二区三区| 黄色小说综合网站| 欧美精品一二三| 亚洲黄一区二区三区| 国产一二精品视频| 在线电影欧美成精品| 亚洲免费在线视频一区 二区| 久久福利视频一区二区| 欧美日韩精品久久久| 中文字幕一区在线观看视频| 麻豆国产一区二区| 777xxx欧美| 亚洲综合一区在线| 日本黄色一区二区| 日韩毛片精品高清免费| 丰满岳乱妇一区二区三区| 日韩欧美一级二级三级久久久| 亚洲成人动漫在线观看| 欧美亚洲免费在线一区| 亚洲黄色性网站| 国产成人av电影在线| 精品国产伦一区二区三区观看体验| 亚洲一区二区美女| 一本久久精品一区二区| 中文字幕一区二区三区蜜月| 成人福利视频网站| 国产日产亚洲精品系列| 国产成人av影院| 国产精品网友自拍| 国产a级毛片一区| 国产色产综合产在线视频| 国产一区二区视频在线播放| 精品乱码亚洲一区二区不卡| 蜜芽一区二区三区| 精品日韩欧美在线| 国产一区二区精品久久99| 日韩欧美国产综合一区 | 蜜桃精品视频在线观看| 欧美一级片免费看| 久久99精品网久久| 精品久久久久久无| 国产91在线观看丝袜| 日本一区二区成人| 色婷婷久久久亚洲一区二区三区| 亚洲男同1069视频| 欧美色综合天天久久综合精品| 午夜精品久久久久影视| 欧美一区二区三区四区久久| 国产乱理伦片在线观看夜一区| 国产午夜精品一区二区| 91欧美一区二区| 日本三级韩国三级欧美三级| 精品日韩成人av| 国产成人av电影| 国产精品毛片无遮挡高清| 色婷婷香蕉在线一区二区| 青青草原综合久久大伊人精品 | 91福利资源站| 日本中文一区二区三区| 2023国产精华国产精品| www.亚洲色图.com| 亚洲不卡av一区二区三区| 精品国产一区a| youjizz久久| 日韩黄色小视频| 久久精品亚洲一区二区三区浴池| 一本大道av一区二区在线播放| 亚洲大尺度视频在线观看| 精品国产三级电影在线观看| 99v久久综合狠狠综合久久| 午夜视频久久久久久| 久久精品人人做人人综合| 在线看一区二区| 国模套图日韩精品一区二区 | 成人av午夜电影| 五月婷婷综合网| 国产精品美女久久久久久| 欧美一区二区三区四区五区| 99re在线精品| 国产午夜三级一区二区三| 欧美日韩电影在线播放| 国产精品色一区二区三区| 欧美三区在线观看| 精品一区二区三区不卡| 亚洲精品免费视频| 久久嫩草精品久久久久| 国产成人精品一区二区三区网站观看| 久久精品国产999大香线蕉| 日韩精品久久久久久| 捆绑变态av一区二区三区| 欧美xxxx老人做受| 91精品国产91久久综合桃花| 国产在线不卡一卡二卡三卡四卡| 视频在线观看国产精品| 亚洲超碰97人人做人人爱| 午夜成人在线视频| 亚洲一二三区在线观看| 亚洲免费高清视频在线| 亚洲欧美国产77777| 亚洲一区免费观看| 亚洲成人一区在线| 日韩电影在线观看网站| 美女视频黄免费的久久| 日本人妖一区二区| 国产在线精品不卡| 国产91精品入口| 在线观看日韩高清av| 色综合天天综合网国产成人综合天| 4hu四虎永久在线影院成人| 欧美电影影音先锋| 亚洲欧美自拍偷拍色图| 一区二区三区国产精华| 国产日韩欧美不卡| 中文字幕一区二区三区乱码在线 | 中文av一区二区| 欧美一级黄色大片| 国产欧美一区二区三区网站| 亚洲欧美日韩中文字幕一区二区三区 | 国产一区二区在线观看视频| 一本大道久久a久久精品综合| 狠狠色丁香九九婷婷综合五月| 精品一区二区三区影院在线午夜| 国产精品 欧美精品| 欧美在线|欧美| 欧美激情一区二区在线| 亚洲国产一区二区在线播放| 99re成人精品视频| 精品91自产拍在线观看一区| 日本一区二区成人在线| 精品一区二区三区免费播放| 99视频在线精品| 26uuu色噜噜精品一区| 亚洲va天堂va国产va久| 成人小视频免费观看| 欧美老肥妇做.爰bbww| 国产欧美日本一区视频| 污片在线观看一区二区| 色综合色狠狠综合色| 亚洲免费观看视频| 国内外成人在线| 欧美专区亚洲专区| 自拍偷拍亚洲综合| 99综合影院在线| 国产精品青草综合久久久久99| 精品一区二区在线看| 精品美女在线观看| 天天综合日日夜夜精品| 日韩一区二区电影| 国产一区二区三区av电影| 国产午夜精品久久久久久免费视| 蓝色福利精品导航| 91麻豆福利精品推荐| 国产精品国产成人国产三级| 粉嫩av一区二区三区在线播放| 精品国产91乱码一区二区三区| 欧美成人激情免费网| 国产精品无遮挡| 亚洲国产另类av| 国内偷窥港台综合视频在线播放| 欧美日韩一区不卡| 亚洲v日本v欧美v久久精品| 在线精品视频一区二区三四| 中文字幕佐山爱一区二区免费| 成熟亚洲日本毛茸茸凸凹| 国产午夜一区二区三区| 丰满少妇久久久久久久| 久久亚洲一级片| 午夜欧美大尺度福利影院在线看| 久久久一区二区三区| 99国产精品视频免费观看| 日本亚洲欧美天堂免费| 久久久久国产精品厨房| 国产日韩精品一区二区三区| 国产传媒一区在线| 污片在线观看一区二区| 亚洲韩国一区二区三区| 精品国产欧美一区二区| 欧美性感一类影片在线播放| 高清久久久久久| 日韩一区二区免费电影| 日日骚欧美日韩| 久久久久久久久97黄色工厂| 亚洲大片精品永久免费| 欧美一区在线视频| 国产河南妇女毛片精品久久久 | 激情小说亚洲一区| 精品国产乱码久久久久久老虎| 国产精品99久久不卡二区| 国产精品私人影院| 欧美性三三影院| 韩国精品免费视频| 中文字幕综合网| 日韩视频一区在线观看| 国产成人在线影院|