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

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

?? fec.c

?? linux驅動源碼
?? C
?? 第 1 頁 / 共 5 頁
字號:
				/* Only support group multicast for now.				*/				if (!(dmi->dmi_addr[0] & 1))					continue;				/* The address in dmi_addr is LSB first,				 * and taddr is MSB first.  We have to				 * copy bytes MSB first from dmi_addr.				 */				mcptr = (u_char *)dmi->dmi_addr + 5;				tdptr = (u_char *)&ep->sen_taddrh;				for (j=0; j<6; j++)					*tdptr++ = *mcptr--;				/* Ask CPM to run CRC and set bit in				 * filter mask.				 */				cpmp->cp_cpcr = mk_cr_cmd(CPM_CR_CH_SCC1, CPM_CR_SET_GADDR) | CPM_CR_FLG;				/* this delay is necessary here -- Cort */				udelay(10);				while (cpmp->cp_cpcr & CPM_CR_FLG);			}		}#endif	}}/* Initialize the FEC Ethernet on 860T. */int __init fec_enet_init(void){	struct net_device *dev;	struct fec_enet_private *fep;	int i, j;	unsigned char	*eap, *iap;	unsigned long	mem_addr;	pte_t		*pte;	volatile	cbd_t	*bdp;	cbd_t		*cbd_base;	volatile	immap_t	*immap;	volatile	fec_t	*fecp;	bd_t		*bd;	extern		uint	_get_IMMR(void);#ifdef CONFIG_SCC_ENET	unsigned char	tmpaddr[6];#endif	immap = (immap_t *)IMAP_ADDR;	/* pointer to internal registers */	bd = (bd_t *)__res;	/* Allocate some private information.	*/	fep = (struct fec_enet_private *)kmalloc(sizeof(*fep), GFP_KERNEL);	if (fep == NULL)		return -ENOMEM;	__clear_user(fep,sizeof(*fep));	/* Create an Ethernet device instance.	*/	dev = init_etherdev(0, 0);	fecp = &(immap->im_cpm.cp_fec);	/* Whack a reset.  We should wait for this.	*/	fecp->fec_ecntrl = FEC_ECNTRL_PINMUX | FEC_ECNTRL_RESET;	for (i = 0;	     (fecp->fec_ecntrl & FEC_ECNTRL_RESET) && (i < FEC_RESET_DELAY);	     ++i) {		udelay(1);	}	if (i == FEC_RESET_DELAY) {		printk ("FEC Reset timeout!\n");	}	/* Set the Ethernet address.  If using multiple Enets on the 8xx,	 * this needs some work to get unique addresses.	 */	eap = (unsigned char *)my_enet_addr;	iap = bd->bi_enet1addr;#ifdef CONFIG_SCC_ENET	/*	 * If a board has Ethernet configured both on a SCC and the	 * FEC, it needs (at least) 2 MAC addresses (we know that Sun	 * disagrees, but anyway). For the FEC port, we create	 * another address by setting one of the address bits above	 * something that would have (up to now) been allocated.	 */	for (i=0; i<6; i++)		tmpaddr[i] = *iap++;	tmpaddr[3] |= 0x80;	iap = tmpaddr;#endif	for (i=0; i<6; i++) {		dev->dev_addr[i] = *eap++ = *iap++;	}	/* Allocate memory for buffer descriptors.	*/	if (((RX_RING_SIZE + TX_RING_SIZE) * sizeof(cbd_t)) > PAGE_SIZE) {		printk("FEC init error.  Need more space.\n");		printk("FEC initialization failed.\n");		return 1;	}	mem_addr = __get_free_page(GFP_KERNEL);	cbd_base = (cbd_t *)mem_addr;	/* Make it uncached.	*/	pte = va_to_pte(mem_addr);	pte_val(*pte) |= _PAGE_NO_CACHE;	flush_tlb_page(init_mm.mmap, mem_addr);	/* Set receive and transmit descriptor base.	*/	fep->rx_bd_base = cbd_base;	fep->tx_bd_base = cbd_base + RX_RING_SIZE;	fep->skb_cur = fep->skb_dirty = 0;	/* Initialize the receive buffer descriptors.	*/	bdp = fep->rx_bd_base;	for (i=0; i<FEC_ENET_RX_PAGES; i++) {		/* Allocate a page.		*/		mem_addr = __get_free_page(GFP_KERNEL);		/* Make it uncached.		*/		pte = va_to_pte(mem_addr);		pte_val(*pte) |= _PAGE_NO_CACHE;		flush_tlb_page(init_mm.mmap, mem_addr);		/* Initialize the BD for every fragment in the page.		*/		for (j=0; j<FEC_ENET_RX_FRPPG; j++) {			bdp->cbd_sc = BD_ENET_RX_EMPTY;			bdp->cbd_bufaddr = __pa(mem_addr);			mem_addr += FEC_ENET_RX_FRSIZE;			bdp++;		}	}	/* Set the last buffer to wrap.	*/	bdp--;	bdp->cbd_sc |= BD_SC_WRAP;#ifdef CONFIG_FEC_PACKETHOOK	fep->ph_lock = 0;	fep->ph_rxhandler = fep->ph_txhandler = NULL;	fep->ph_proto = 0;	fep->ph_regaddr = NULL;	fep->ph_priv = NULL;#endif	/* Install our interrupt handler.	*/	if (request_8xxirq(FEC_INTERRUPT, fec_enet_interrupt, 0, "fec", dev) != 0)		panic("Could not allocate FEC IRQ!");	dev->base_addr = (unsigned long)fecp;	dev->priv = fep;#ifdef CONFIG_RPXCLASSIC/* If MDIO is disabled the PHY should not be allowed to * generate interrupts telling us to read the PHY. */# ifdef CONFIG_USE_MDIO	/* Make Port C, bit 15 an input that causes interrupts.	*/	immap->im_ioport.iop_pcpar &= ~0x0001;	immap->im_ioport.iop_pcdir &= ~0x0001;	immap->im_ioport.iop_pcso  &= ~0x0001;	immap->im_ioport.iop_pcint |=  0x0001;	cpm_install_handler(CPMVEC_PIO_PC15, mii_link_interrupt, dev);# endif /* CONFIG_USE_MDIO */	/* Make LEDS reflect Link status.	*/	*((uint *) RPX_CSR_ADDR) &= ~BCSR2_FETHLEDMODE;#endif /* CONFIG_RPXCLASSIC */#ifdef CONFIG_USE_MDIO# ifndef PHY_INTERRUPT#  error Want to use MII, but PHY_INTERRUPT not defined!# endif	((immap_t *)IMAP_ADDR)->im_siu_conf.sc_siel |=		(0x80000000 >> PHY_INTERRUPT);	if (request_8xxirq(PHY_INTERRUPT, mii_link_interrupt, 0, "mii", dev) != 0)		panic("Could not allocate MII IRQ!");#endif /* CONFIG_USE_MDIO */	dev->base_addr = (unsigned long)fecp;	dev->priv = fep;	/* The FEC Ethernet specific entries in the device structure. */	dev->open = fec_enet_open;	dev->hard_start_xmit = fec_enet_start_xmit;	dev->tx_timeout = fec_timeout;	dev->watchdog_timeo = TX_TIMEOUT;	dev->stop = fec_enet_close;	dev->get_stats = fec_enet_get_stats;	dev->set_multicast_list = set_multicast_list;#ifdef	CONFIG_USE_MDIO	dev->do_ioctl = fec_enet_ioctl;	for (i=0; i<NMII-1; i++)		mii_cmds[i].mii_next = &mii_cmds[i+1];	mii_free = mii_cmds;#endif	/* CONFIG_USE_MDIO */#ifndef CONFIG_ICU862	/* Configure all of port D for MII.	*/	immap->im_ioport.iop_pdpar = 0x1fff;#else	/* Configure port A for MII.	*/	/* Has Utopia been configured? */	if (immap->im_ioport.iop_pdpar & (0x8000 >> 1)) {		/*		 * YES - Use MUXED mode for UTOPIA bus.		 * This frees Port A for use by MII (see 862UM table 41-6).		 */		immap->im_ioport.utmode &= ~0x80;	} else {		/*		 * NO - set SPLIT mode for UTOPIA bus.		 *		 * This doesn't really effect UTOPIA (which isn't		 * enabled anyway) but just tells the 862		 * to use port A for MII (see 862UM table 41-6).		 */		immap->im_ioport.utmode |= 0x80;	}#ifdef	CONFIG_USE_MDIO	/* Now configure MII_MDC pin */	immap->im_ioport.iop_pdpar |= (0x8000 >> 8);#endif	/* CONFIG_USE_MDIO */#endif  /* CONFIG_ICU862 */	/* Bits moved from Rev. D onward.	*/	if ((_get_IMMR() & 0xffff) < 0x0501)		immap->im_ioport.iop_pddir = 0x1c58;	/* Pre rev. D */	else		immap->im_ioport.iop_pddir = 0x1fff;	/* Rev. D and later */#ifdef	CONFIG_USE_MDIO	/* Set MII speed to 2.5 MHz	*/	fecp->fec_mii_speed = fep->phy_speed =		(		  ( ((bd->bi_intfreq * 1000000) + 500000) / 2500000 / 2 )		  & 0x3F		) << 1;#else	fecp->fec_mii_speed = 0;	/* turn off MDIO */#endif	/* CONFIG_USE_MDIO */	printk ("%s: FEC ENET Version 0.2, FEC irq %d"#ifdef PHY_INTERRUPT		", MII irq %d"#endif		", addr ",		dev->name, FEC_INTERRUPT#ifdef PHY_INTERRUPT		, PHY_INTERRUPT#endif	);	for (i=0; i<6; i++)		printk("%02x%c", dev->dev_addr[i], (i==5) ? '\n' : ':');#ifdef	CONFIG_USE_MDIO	/* start in full duplex mode, and negotiate speed */	fec_restart (dev, 1);#else			/* always use half duplex mode only */	fec_restart (dev, 0);#endif#ifdef	CONFIG_USE_MDIO	/* Queue up command to detect the PHY and initialize the	 * remainder of the interface.	 */	fep->phy_id_done = 0;	fep->phy_addr = 0;	mii_queue(dev, mk_mii_read(MII_REG_PHYIR1), mii_discover_phy, 0);#endif	/* CONFIG_USE_MDIO */	return 0;}/* This function is called to start or restart the FEC during a link * change.  This only happens when switching between half and full * duplex. */static voidfec_restart(struct net_device *dev, int duplex){	struct fec_enet_private *fep;	int i;	volatile	cbd_t	*bdp;	volatile	immap_t	*immap;	volatile	fec_t	*fecp;	immap = (immap_t *)IMAP_ADDR;	/* pointer to internal registers */	fecp = &(immap->im_cpm.cp_fec);	fep = dev->priv;	/* Whack a reset.  We should wait for this.	*/	fecp->fec_ecntrl = FEC_ECNTRL_PINMUX | FEC_ECNTRL_RESET;	for (i = 0;	     (fecp->fec_ecntrl & FEC_ECNTRL_RESET) && (i < FEC_RESET_DELAY);	     ++i) {		udelay(1);	}	if (i == FEC_RESET_DELAY) {		printk ("FEC Reset timeout!\n");	}	/* Set station address.	*/	fecp->fec_addr_low  = (my_enet_addr[0] << 16) | my_enet_addr[1];	fecp->fec_addr_high =  my_enet_addr[2];	/* Reset all multicast.	*/	fecp->fec_hash_table_high = 0;	fecp->fec_hash_table_low  = 0;	/* Set maximum receive buffer size.	*/	fecp->fec_r_buff_size = PKT_MAXBLR_SIZE;	fecp->fec_r_hash = PKT_MAXBUF_SIZE;	/* Set receive and transmit descriptor base.	*/	fecp->fec_r_des_start = __pa((uint)(fep->rx_bd_base));	fecp->fec_x_des_start = __pa((uint)(fep->tx_bd_base));	fep->dirty_tx = fep->cur_tx = fep->tx_bd_base;	fep->cur_rx = fep->rx_bd_base;	/* Reset SKB transmit buffers.	*/	fep->skb_cur = fep->skb_dirty = 0;	for (i=0; i<=TX_RING_MOD_MASK; i++) {		if (fep->tx_skbuff[i] != NULL) {			dev_kfree_skb(fep->tx_skbuff[i]);			fep->tx_skbuff[i] = NULL;		}	}	/* Initialize the receive buffer descriptors.	*/	bdp = fep->rx_bd_base;	for (i=0; i<RX_RING_SIZE; i++) {		/* Initialize the BD for every fragment in the page.		*/		bdp->cbd_sc = BD_ENET_RX_EMPTY;		bdp++;	}	/* Set the last buffer to wrap.	*/	bdp--;	bdp->cbd_sc |= BD_SC_WRAP;	/* ...and the same for transmmit.	*/	bdp = fep->tx_bd_base;	for (i=0; i<TX_RING_SIZE; i++) {		/* Initialize the BD for every fragment in the page.		*/		bdp->cbd_sc = 0;		bdp->cbd_bufaddr = 0;		bdp++;	}	/* Set the last buffer to wrap.	*/	bdp--;	bdp->cbd_sc |= BD_SC_WRAP;	/* Enable MII mode.	*/	if (duplex) {		fecp->fec_r_cntrl = FEC_RCNTRL_MII_MODE;	/* MII enable */		fecp->fec_x_cntrl = FEC_TCNTRL_FDEN;		/* FD enable */	}	else {		fecp->fec_r_cntrl = FEC_RCNTRL_MII_MODE | FEC_RCNTRL_DRT;		fecp->fec_x_cntrl = 0;	}	fep->full_duplex = duplex;	/* Enable big endian and don't care about SDMA FC.	*/	fecp->fec_fun_code = 0x78000000;#ifdef	CONFIG_USE_MDIO	/* Set MII speed.	*/	fecp->fec_mii_speed = fep->phy_speed;#endif	/* CONFIG_USE_MDIO */	/* Clear any outstanding interrupt.	*/	fecp->fec_ievent = 0xffc0;	fecp->fec_ivec = (FEC_INTERRUPT/2) << 29;	/* Enable interrupts we wish to service.	*/	fecp->fec_imask = ( FEC_ENET_TXF | FEC_ENET_TXB |			    FEC_ENET_RXF | FEC_ENET_RXB | FEC_ENET_MII );	/* And last, enable the transmit and receive processing.	*/	fecp->fec_ecntrl = FEC_ECNTRL_PINMUX | FEC_ECNTRL_ETHER_EN;	fecp->fec_r_des_active = 0x01000000;	/* The tx ring is no longer full. */	if (fep->tx_full) {		fep->tx_full = 0;		netif_wake_queue(dev);	}}static voidfec_stop(struct net_device *dev){	volatile	immap_t	*immap;	volatile	fec_t	*fecp;	struct fec_enet_private *fep;	int i;	immap = (immap_t *)IMAP_ADDR;	/* pointer to internal registers */	fecp = &(immap->im_cpm.cp_fec);	if ((fecp->fec_ecntrl & FEC_ECNTRL_ETHER_EN) == 0)		return;	/* already down */	fep = dev->priv;	fecp->fec_x_cntrl = 0x01;	/* Graceful transmit stop */	for (i = 0;	     ((fecp->fec_ievent & 0x10000000) == 0) && (i < FEC_RESET_DELAY);	     ++i) {		udelay(1);	}	if (i == FEC_RESET_DELAY) {		printk ("FEC timeout on graceful transmit stop\n");	}	/* Clear outstanding MII command interrupts.	*/	fecp->fec_ievent = FEC_ENET_MII;	/* Enable MII command finished interrupt	*/	fecp->fec_ivec = (FEC_INTERRUPT/2) << 29;	fecp->fec_imask = FEC_ENET_MII;#ifdef	CONFIG_USE_MDIO	/* Set MII speed.	*/	fecp->fec_mii_speed = fep->phy_speed;#endif	/* CONFIG_USE_MDIO */	/* Disable FEC	*/	fecp->fec_ecntrl &= ~(FEC_ECNTRL_ETHER_EN);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品一区二区三区四区| 91精品国产入口| 国产揄拍国内精品对白| 日韩精品久久理论片| 午夜视黄欧洲亚洲| 午夜精品福利一区二区三区av | 欧美日韩一区二区三区不卡| 色噜噜狠狠色综合欧洲selulu| 北条麻妃一区二区三区| 成人高清在线视频| 99久久国产综合精品色伊| 色综合久久久久综合体桃花网| 99国产精品久| 欧洲视频一区二区| 91精品国产品国语在线不卡| 欧美一二三四区在线| 欧美精品一区二区在线观看| 久久久国际精品| 成人欧美一区二区三区在线播放| 亚洲精品国产高清久久伦理二区| 亚洲国产精品自拍| 美腿丝袜在线亚洲一区 | 欧美另类高清zo欧美| 91精品视频网| 国产亚洲精品精华液| 亚洲欧洲国产日本综合| 亚洲乱码国产乱码精品精可以看| 香蕉成人伊视频在线观看| 奇米影视一区二区三区| 国产精品18久久久| 色综合中文字幕国产 | 成人aaaa免费全部观看| 在线视频一区二区免费| 日韩小视频在线观看专区| 国产三级一区二区| 一区二区三区在线高清| 麻豆国产91在线播放| 岛国av在线一区| 精品视频一区二区三区免费| 精品日韩一区二区三区 | youjizz久久| 欧美三级视频在线| 久久久91精品国产一区二区三区| 亚洲精品高清视频在线观看| 麻豆国产欧美一区二区三区| 91免费精品国自产拍在线不卡| 欧美一卡2卡3卡4卡| 一区在线播放视频| 蜜桃av一区二区在线观看| 97久久精品人人做人人爽50路| 日韩一级精品视频在线观看| 亚洲日本韩国一区| 麻豆91小视频| 欧洲中文字幕精品| 中文字幕欧美区| 日韩中文字幕不卡| 97精品电影院| 久久中文字幕电影| 亚洲bt欧美bt精品| 99re视频这里只有精品| 久久综合久久综合久久综合| 亚洲va韩国va欧美va精品| www.亚洲在线| 久久久五月婷婷| 蜜臀91精品一区二区三区 | 久久天天做天天爱综合色| 亚洲一区二区在线播放相泽| 国产91精品久久久久久久网曝门 | 亚洲色图色小说| 国产福利91精品一区二区三区| 欧美巨大另类极品videosbest | 成人黄色电影在线 | 久久色在线观看| 亚洲成人av资源| 色综合久久88色综合天天6| 久久免费看少妇高潮| 日韩专区欧美专区| 欧美日韩一级二级| 亚洲免费在线观看| 波多野结衣一区二区三区| 国产视频在线观看一区二区三区| 日韩av高清在线观看| 欧美性感一类影片在线播放| 亚洲视频在线一区二区| 国产999精品久久久久久 | 国产最新精品免费| 日韩欧美123| 美女视频一区二区| 51精品国自产在线| 日韩精品成人一区二区在线| 欧美日韩精品一区二区天天拍小说| 亚洲色欲色欲www| 成人涩涩免费视频| 中国色在线观看另类| 懂色av中文字幕一区二区三区| 国产三级欧美三级| 国产高清在线精品| 国产日韩欧美综合在线| 国产成人av一区| 中文无字幕一区二区三区| 国产成人aaa| 国产精品美女久久久久久| 不卡一区二区中文字幕| 欧美国产日韩在线观看| 成人免费毛片a| 国产精品国产三级国产aⅴ中文| av成人免费在线观看| 亚洲精选视频在线| 欧美午夜一区二区三区| 天天色综合天天| 日韩一级片网站| 国产综合一区二区| 国产欧美视频一区二区三区| www.成人网.com| 亚洲一区二区在线免费观看视频| 欧美日韩精品欧美日韩精品一| 日韩精品电影一区亚洲| 精品国产免费人成电影在线观看四季| 久久草av在线| 国产精品嫩草影院av蜜臀| www.av亚洲| 亚洲成人久久影院| 欧美tk—视频vk| 波多野结衣在线aⅴ中文字幕不卡| 亚洲男同性恋视频| 欧美一区中文字幕| 国产一区二区三区在线观看免费| 国产情人综合久久777777| 色综合色综合色综合色综合色综合 | 国产一区二区在线观看免费| 国产精品日韩成人| 欧美曰成人黄网| 美女尤物国产一区| 中文子幕无线码一区tr| 欧美吻胸吃奶大尺度电影| 精品亚洲国内自在自线福利| 国产精品久久久久久亚洲伦 | 91精品国产一区二区三区| 国产精品一区二区久久不卡| 亚洲人快播电影网| 欧美一区二区网站| 成人午夜电影网站| 午夜久久福利影院| 国产亚洲欧美一级| 欧美午夜电影一区| 国产一区二三区| 亚洲国产成人91porn| 久久久久久久久久久久久久久99| 91成人在线精品| 国产美女娇喘av呻吟久久| 一区二区三区在线影院| 欧美videofree性高清杂交| 91啪九色porn原创视频在线观看| 美女视频网站黄色亚洲| 亚洲欧洲三级电影| 日韩午夜精品视频| 91丨porny丨国产| 久久99国产精品麻豆| 亚洲男帅同性gay1069| 精品少妇一区二区三区视频免付费| 91女厕偷拍女厕偷拍高清| 久久99热这里只有精品| 亚洲综合视频网| 亚洲国产精品二十页| 日韩一卡二卡三卡| 欧美艳星brazzers| 国产91精品免费| 精品一区二区三区影院在线午夜| 亚洲乱码国产乱码精品精98午夜 | 久久麻豆一区二区| 欧美精品在线一区二区| 色婷婷综合在线| 国产精品亚洲综合一区在线观看| 午夜电影网亚洲视频| 亚洲欧洲日韩一区二区三区| 欧美变态口味重另类| 欧美日韩国产片| 色综合咪咪久久| 成人高清免费观看| 激情欧美一区二区| 秋霞午夜鲁丝一区二区老狼| 亚洲国产一二三| 亚洲激情第一区| 亚洲欧美日韩中文播放 | 国产乱子伦一区二区三区国色天香 | 美女视频网站黄色亚洲| 午夜精品久久久久久久99水蜜桃| 一区二区在线免费| 亚洲欧美一区二区三区久本道91| 日本一区二区三区高清不卡| 久久久久亚洲蜜桃| 亚洲精品一区在线观看| 欧美va亚洲va香蕉在线| 日韩视频免费观看高清完整版| 欧美日韩免费在线视频| 欧美伊人精品成人久久综合97| 91免费视频网址| 日本韩国欧美在线| 色爱区综合激月婷婷| 91免费观看国产|