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

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

?? pci-skeleton.c

?? linux和2410結合開發 用他可以生成2410所需的zImage文件
?? C
?? 第 1 頁 / 共 4 頁
字號:
	if (tmp_work <= 0)		printk (KERN_WARNING PFX "tx/rx enable wait too long\n");}/* The data sheet doesn't describe the Rx ring at all, so I'm guessing at the   field alignments and semantics. */static void netdrv_rx_interrupt (struct net_device *dev,				  struct netdrv_private *tp, void *ioaddr){	unsigned char *rx_ring;	u16 cur_rx;	assert (dev != NULL);	assert (tp != NULL);	assert (ioaddr != NULL);	rx_ring = tp->rx_ring;	cur_rx = tp->cur_rx;	DPRINTK ("%s: In netdrv_rx(), current %4.4x BufAddr %4.4x,"		 " free to %4.4x, Cmd %2.2x.\n", dev->name, cur_rx,		 NETDRV_R16 (RxBufAddr),		 NETDRV_R16 (RxBufPtr), NETDRV_R8 (ChipCmd));	while ((NETDRV_R8 (ChipCmd) & RxBufEmpty) == 0) {		int ring_offset = cur_rx % RX_BUF_LEN;		u32 rx_status;		unsigned int rx_size;		unsigned int pkt_size;		struct sk_buff *skb;		/* read size+status of next frame from DMA ring buffer */		rx_status = le32_to_cpu (*(u32 *) (rx_ring + ring_offset));		rx_size = rx_status >> 16;		pkt_size = rx_size - 4;		DPRINTK ("%s:  netdrv_rx() status %4.4x, size %4.4x,"			 " cur %4.4x.\n", dev->name, rx_status,			 rx_size, cur_rx);#if NETDRV_DEBUG > 2		{			int i;			DPRINTK ("%s: Frame contents ", dev->name);			for (i = 0; i < 70; i++)				printk (" %2.2x",					rx_ring[ring_offset + i]);			printk (".\n");		}#endif		/* If Rx err or invalid rx_size/rx_status received		 * (which happens if we get lost in the ring),		 * Rx process gets reset, so we abort any further		 * Rx processing.		 */		if ((rx_size > (MAX_ETH_FRAME_SIZE+4)) ||		    (!(rx_status & RxStatusOK))) {			netdrv_rx_err (rx_status, dev, tp, ioaddr);			return;		}		/* Malloc up new buffer, compatible with net-2e. */		/* Omit the four octet CRC from the length. */		/* TODO: consider allocating skb's outside of		 * interrupt context, both to speed interrupt processing,		 * and also to reduce the chances of having to		 * drop packets here under memory pressure.		 */		skb = dev_alloc_skb (pkt_size + 2);		if (skb) {			skb->dev = dev;			skb_reserve (skb, 2);	/* 16 byte align the IP fields. */			eth_copy_and_sum (skb, &rx_ring[ring_offset + 4], pkt_size, 0);			skb_put (skb, pkt_size);			skb->protocol = eth_type_trans (skb, dev);			netif_rx (skb);			dev->last_rx = jiffies;			tp->stats.rx_bytes += pkt_size;			tp->stats.rx_packets++;		} else {			printk (KERN_WARNING				"%s: Memory squeeze, dropping packet.\n",				dev->name);			tp->stats.rx_dropped++;		}		cur_rx = (cur_rx + rx_size + 4 + 3) & ~3;		NETDRV_W16_F (RxBufPtr, cur_rx - 16);	}	DPRINTK ("%s: Done netdrv_rx(), current %4.4x BufAddr %4.4x,"		 " free to %4.4x, Cmd %2.2x.\n", dev->name, cur_rx,		 NETDRV_R16 (RxBufAddr),		 NETDRV_R16 (RxBufPtr), NETDRV_R8 (ChipCmd));	tp->cur_rx = cur_rx;}static void netdrv_weird_interrupt (struct net_device *dev,				     struct netdrv_private *tp,				     void *ioaddr,				     int status, int link_changed){	printk (KERN_DEBUG "%s: Abnormal interrupt, status %8.8x.\n",		dev->name, status);	assert (dev != NULL);	assert (tp != NULL);	assert (ioaddr != NULL);	/* Update the error count. */	tp->stats.rx_missed_errors += NETDRV_R32 (RxMissed);	NETDRV_W32 (RxMissed, 0);	if ((status & RxUnderrun) && link_changed &&	    (tp->drv_flags & HAS_LNK_CHNG)) {		/* Really link-change on new chips. */		int lpar = NETDRV_R16 (NWayLPAR);		int duplex = (lpar & 0x0100) || (lpar & 0x01C0) == 0x0040				|| tp->duplex_lock;		if (tp->full_duplex != duplex) {			tp->full_duplex = duplex;			NETDRV_W8 (Cfg9346, Cfg9346_Unlock);			NETDRV_W8 (Config1, tp->full_duplex ? 0x60 : 0x20);			NETDRV_W8 (Cfg9346, Cfg9346_Lock);		}		status &= ~RxUnderrun;	}	/* XXX along with netdrv_rx_err, are we double-counting errors? */	if (status &	    (RxUnderrun | RxOverflow | RxErr | RxFIFOOver))		tp->stats.rx_errors++;	if (status & (PCSTimeout))		tp->stats.rx_length_errors++;	if (status & (RxUnderrun | RxFIFOOver))		tp->stats.rx_fifo_errors++;	if (status & RxOverflow) {		tp->stats.rx_over_errors++;		tp->cur_rx = NETDRV_R16 (RxBufAddr) % RX_BUF_LEN;		NETDRV_W16_F (RxBufPtr, tp->cur_rx - 16);	}	if (status & PCIErr) {		u16 pci_cmd_status;		pci_read_config_word (tp->pci_dev, PCI_STATUS, &pci_cmd_status);		printk (KERN_ERR "%s: PCI Bus error %4.4x.\n",			dev->name, pci_cmd_status);	}}/* The interrupt handler does all of the Rx thread work and cleans up   after the Tx thread. */static void netdrv_interrupt (int irq, void *dev_instance,			       struct pt_regs *regs){	struct net_device *dev = (struct net_device *) dev_instance;	struct netdrv_private *tp = dev->priv;	int boguscnt = max_interrupt_work;	void *ioaddr = tp->mmio_addr;	int status = 0, link_changed = 0; /* avoid bogus "uninit" warning */	spin_lock (&tp->lock);	do {		status = NETDRV_R16 (IntrStatus);		/* h/w no longer present (hotplug?) or major error, bail */		if (status == 0xFFFF)			break;		/* Acknowledge all of the current interrupt sources ASAP */		NETDRV_W16_F (IntrStatus, status);		DPRINTK ("%s: interrupt  status=%#4.4x new intstat=%#4.4x.\n",				dev->name, status,				NETDRV_R16 (IntrStatus));		if ((status &		     (PCIErr | PCSTimeout | RxUnderrun | RxOverflow |		      RxFIFOOver | TxErr | TxOK | RxErr | RxOK)) == 0)			break;		/* Check uncommon events with one test. */		if (status & (PCIErr | PCSTimeout | RxUnderrun | RxOverflow |		  	      RxFIFOOver | TxErr | RxErr))			netdrv_weird_interrupt (dev, tp, ioaddr,						 status, link_changed);		if (status & (RxOK | RxUnderrun | RxOverflow | RxFIFOOver))	/* Rx interrupt */			netdrv_rx_interrupt (dev, tp, ioaddr);		if (status & (TxOK | TxErr))			netdrv_tx_interrupt (dev, tp, ioaddr);		boguscnt--;	} while (boguscnt > 0);	if (boguscnt <= 0) {		printk (KERN_WARNING			"%s: Too much work at interrupt, "			"IntrStatus=0x%4.4x.\n", dev->name,			status);		/* Clear all interrupt sources. */		NETDRV_W16 (IntrStatus, 0xffff);	}	spin_unlock (&tp->lock);	DPRINTK ("%s: exiting interrupt, intr_status=%#4.4x.\n",		 dev->name, NETDRV_R16 (IntrStatus));}static int netdrv_close (struct net_device *dev){	struct netdrv_private *tp = dev->priv;	void *ioaddr = tp->mmio_addr;	unsigned long flags;	DPRINTK ("ENTER\n");	netif_stop_queue (dev);	DPRINTK ("%s: Shutting down ethercard, status was 0x%4.4x.\n",			dev->name, NETDRV_R16 (IntrStatus));	del_timer_sync (&tp->timer);	spin_lock_irqsave (&tp->lock, flags);	/* Stop the chip's Tx and Rx DMA processes. */	NETDRV_W8 (ChipCmd, (NETDRV_R8 (ChipCmd) & ChipCmdClear));	/* Disable interrupts by clearing the interrupt mask. */	NETDRV_W16 (IntrMask, 0x0000);	/* Update the error counts. */	tp->stats.rx_missed_errors += NETDRV_R32 (RxMissed);	NETDRV_W32 (RxMissed, 0);	spin_unlock_irqrestore (&tp->lock, flags);	synchronize_irq ();	free_irq (dev->irq, dev);	netdrv_tx_clear (tp);	pci_free_consistent(tp->pci_dev, RX_BUF_TOT_LEN,			    tp->rx_ring, tp->rx_ring_dma);	pci_free_consistent(tp->pci_dev, TX_BUF_TOT_LEN,			    tp->tx_bufs, tp->tx_bufs_dma);	tp->rx_ring = NULL;	tp->tx_bufs = NULL;	/* Green! Put the chip in low-power mode. */	NETDRV_W8 (Cfg9346, Cfg9346_Unlock);	NETDRV_W8 (Config1, 0x03);	NETDRV_W8 (Cfg9346, Cfg9346_Lock);	DPRINTK ("EXIT\n");	return 0;}static int netdrv_ioctl (struct net_device *dev, struct ifreq *rq, int cmd){	struct netdrv_private *tp = dev->priv;	struct mii_ioctl_data *data = (struct mii_ioctl_data *) & rq->ifr_data;	unsigned long flags;	int rc = 0;	DPRINTK ("ENTER\n");	switch (cmd) {	case SIOCGMIIPHY:		/* Get address of MII PHY in use. */	case SIOCDEVPRIVATE:		/* for binary compat, remove in 2.5 */		data->phy_id = tp->phys[0] & 0x3f;		/* Fall Through */	case SIOCGMIIREG:		/* Read MII PHY register. */	case SIOCDEVPRIVATE+1:		/* for binary compat, remove in 2.5 */		spin_lock_irqsave (&tp->lock, flags);		data->val_out = mdio_read (dev, data->phy_id & 0x1f, data->reg_num & 0x1f);		spin_unlock_irqrestore (&tp->lock, flags);		break;	case SIOCSMIIREG:		/* Write MII PHY register. */	case SIOCDEVPRIVATE+2:		/* for binary compat, remove in 2.5 */		if (!capable (CAP_NET_ADMIN)) {			rc = -EPERM;			break;		}		spin_lock_irqsave (&tp->lock, flags);		mdio_write (dev, data->phy_id & 0x1f, data->reg_num & 0x1f, data->val_in);		spin_unlock_irqrestore (&tp->lock, flags);		break;	default:		rc = -EOPNOTSUPP;		break;	}	DPRINTK ("EXIT, returning %d\n", rc);	return rc;}static struct net_device_stats *netdrv_get_stats (struct net_device *dev){	struct netdrv_private *tp = dev->priv;	void *ioaddr = tp->mmio_addr;	DPRINTK ("ENTER\n");	assert (tp != NULL);	if (netif_running(dev)) {		unsigned long flags;		spin_lock_irqsave (&tp->lock, flags);		tp->stats.rx_missed_errors += NETDRV_R32 (RxMissed);		NETDRV_W32 (RxMissed, 0);		spin_unlock_irqrestore (&tp->lock, flags);	}	DPRINTK ("EXIT\n");	return &tp->stats;}/* Set or clear the multicast filter for this adaptor.   This routine is not state sensitive and need not be SMP locked. */static unsigned const ethernet_polynomial = 0x04c11db7U;static inline u32 ether_crc (int length, unsigned char *data){	int crc = -1;	DPRINTK ("ENTER\n");	while (--length >= 0) {		unsigned char current_octet = *data++;		int bit;		for (bit = 0; bit < 8; bit++, current_octet >>= 1)			crc = (crc << 1) ^			    ((crc < 0) ^ (current_octet & 1) ?			     ethernet_polynomial : 0);	}	DPRINTK ("EXIT\n");	return crc;}static void netdrv_set_rx_mode (struct net_device *dev){	struct netdrv_private *tp = dev->priv;	void *ioaddr = tp->mmio_addr;	u32 mc_filter[2];	/* Multicast hash filter */	int i, rx_mode;	u32 tmp;	DPRINTK ("ENTER\n");	DPRINTK ("%s:   netdrv_set_rx_mode(%4.4x) done -- Rx config %8.8x.\n",			dev->name, dev->flags, NETDRV_R32 (RxConfig));	/* Note: do not reorder, GCC is clever about common statements. */	if (dev->flags & IFF_PROMISC) {		/* Unconditionally log net taps. */		printk (KERN_NOTICE "%s: Promiscuous mode enabled.\n",			dev->name);		rx_mode =		    AcceptBroadcast | AcceptMulticast | AcceptMyPhys |		    AcceptAllPhys;		mc_filter[1] = mc_filter[0] = 0xffffffff;	} else if ((dev->mc_count > multicast_filter_limit)		   || (dev->flags & IFF_ALLMULTI)) {		/* Too many to filter perfectly -- accept all multicasts. */		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;		mc_filter[1] = mc_filter[0] = 0xffffffff;	} else {		struct dev_mc_list *mclist;		rx_mode = AcceptBroadcast | AcceptMulticast | AcceptMyPhys;		mc_filter[1] = mc_filter[0] = 0;		for (i = 0, mclist = dev->mc_list; mclist && i < dev->mc_count;		     i++, mclist = mclist->next)			set_bit (ether_crc (ETH_ALEN, mclist->dmi_addr) >> 26,				 mc_filter);	}	/* if called from irq handler, lock already acquired */	if (!in_irq ())		spin_lock_irq (&tp->lock);	/* We can safely update without stopping the chip. */	tmp = netdrv_rx_config | rx_mode |		(NETDRV_R32 (RxConfig) & rtl_chip_info[tp->chipset].RxConfigMask);	NETDRV_W32_F (RxConfig, tmp);	NETDRV_W32_F (MAR0 + 0, mc_filter[0]);	NETDRV_W32_F (MAR0 + 4, mc_filter[1]);	if (!in_irq ())		spin_unlock_irq (&tp->lock);	DPRINTK ("EXIT\n");}#ifdef CONFIG_PMstatic int netdrv_suspend (struct pci_dev *pdev, u32 state){	struct net_device *dev = pci_get_drvdata (pdev);	struct netdrv_private *tp = dev->priv;	void *ioaddr = tp->mmio_addr;	unsigned long flags;	if (!netif_running(dev))		return;	netif_device_detach (dev);	spin_lock_irqsave (&tp->lock, flags);	/* Disable interrupts, stop Tx and Rx. */	NETDRV_W16 (IntrMask, 0x0000);	NETDRV_W8 (ChipCmd, (NETDRV_R8 (ChipCmd) & ChipCmdClear));	/* Update the error counts. */	tp->stats.rx_missed_errors += NETDRV_R32 (RxMissed);	NETDRV_W32 (RxMissed, 0);	spin_unlock_irqrestore (&tp->lock, flags);	pci_power_off (pdev, -1);	return 0;}static int netdrv_resume (struct pci_dev *pdev){	struct net_device *dev = pci_get_drvdata (pdev);	if (!netif_running(dev))		return;	pci_power_on (pdev);	netif_device_attach (dev);	netdrv_hw_start (dev);	return 0;}#endif /* CONFIG_PM */static struct pci_driver netdrv_pci_driver = {	name:		MODNAME,	id_table:	netdrv_pci_tbl,	probe:		netdrv_init_one,	remove:		__devexit_p(netdrv_remove_one),#ifdef CONFIG_PM	suspend:	netdrv_suspend,	resume:		netdrv_resume,#endif /* CONFIG_PM */};static int __init netdrv_init_module (void){/* when a module, this is printed whether or not devices are found in probe */#ifdef MODULE	printk(version);#endif	return pci_module_init (&netdrv_pci_driver);}static void __exit netdrv_cleanup_module (void){	pci_unregister_driver (&netdrv_pci_driver);}module_init(netdrv_init_module);module_exit(netdrv_cleanup_module);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91成人在线免费观看| 中文子幕无线码一区tr | 风流少妇一区二区| 欧美日韩情趣电影| 国产精品理论在线观看| 日本欧美在线观看| 色婷婷一区二区三区四区| 久久久久久久国产精品影院| 亚洲va欧美va人人爽午夜| 成人av影视在线观看| 日韩欧美中文字幕精品| 亚洲成人av电影在线| 成人综合在线观看| 日韩女同互慰一区二区| 日韩黄色一级片| 欧美色国产精品| 亚洲一区二区在线视频| 99久久国产综合精品色伊| 国产日韩欧美综合一区| 久久精品国产999大香线蕉| 欧美精品丝袜久久久中文字幕| 欧美国产精品久久| 成人精品视频.| 国产欧美精品一区二区色综合朱莉| 久久99热99| 精品国产一区二区在线观看| 日韩电影在线一区| 欧美肥妇free| 日日骚欧美日韩| 欧美日韩午夜在线视频| 亚洲电影一级黄| 欧美日韩精品欧美日韩精品一| 亚洲一区二区三区四区五区中文 | 亚洲chinese男男1069| 在线观看日产精品| 亚洲精品第1页| 在线视频欧美精品| 亚洲一区在线观看免费| 欧美喷潮久久久xxxxx| 亚洲成人免费电影| 欧美高清dvd| 日韩成人伦理电影在线观看| 欧美精品一级二级三级| 久久99热国产| 国产精品入口麻豆九色| 9久草视频在线视频精品| 亚洲综合色丁香婷婷六月图片| 欧美性猛交一区二区三区精品| 亚洲一级二级在线| 91精品婷婷国产综合久久性色 | 欧美v日韩v国产v| 国产精品 日产精品 欧美精品| 国产亚洲成av人在线观看导航| 成人黄动漫网站免费app| 17c精品麻豆一区二区免费| 99精品国产91久久久久久| 亚洲一区在线观看视频| 日韩欧美国产麻豆| 成人app网站| 午夜婷婷国产麻豆精品| 精品国偷自产国产一区| 91在线云播放| 理论电影国产精品| 亚洲视频在线一区| 欧美一级xxx| caoporm超碰国产精品| 石原莉奈在线亚洲三区| 久久久高清一区二区三区| 色综合天天综合网天天狠天天| 午夜久久久久久久久| 中文字幕精品三区| 精品视频免费在线| 国产成人亚洲精品青草天美| 亚洲综合小说图片| 久久久久久久国产精品影院| 欧美在线观看禁18| 国产露脸91国语对白| 一区二区三区av电影| 26uuu色噜噜精品一区二区| 日本精品一级二级| 高清成人免费视频| 日日夜夜精品视频免费| 国产精品久久久久久户外露出| 56国语精品自产拍在线观看| av网站免费线看精品| 黄页网站大全一区二区| 亚洲一区二区视频| 中文字幕一区二区三区在线不卡| 日韩欧美亚洲国产另类| 欧美性淫爽ww久久久久无| 国产91精品久久久久久久网曝门| 亚洲香蕉伊在人在线观| 国产精品久久久久久久岛一牛影视| 日韩欧美一区中文| 欧美日本精品一区二区三区| 一本久久精品一区二区| 国产91富婆露脸刺激对白| 国内欧美视频一区二区| 日韩精品成人一区二区三区| 亚洲欧美偷拍卡通变态| 国产精品视频一区二区三区不卡| 欧美zozo另类异族| 91精品在线观看入口| 欧美精三区欧美精三区| 色8久久人人97超碰香蕉987| 不卡视频在线看| 波多野结衣精品在线| 国产高清无密码一区二区三区| 裸体健美xxxx欧美裸体表演| 日韩中文字幕一区二区三区| 亚洲综合色丁香婷婷六月图片| 亚洲综合清纯丝袜自拍| 一区二区三区四区乱视频| 亚洲人成网站精品片在线观看| 国产精品短视频| 国产精品免费视频观看| 中文字幕中文字幕在线一区 | 97精品电影院| av在线不卡观看免费观看| 国产成人aaa| av中文字幕一区| 色婷婷亚洲一区二区三区| 欧美日韩亚洲丝袜制服| 91麻豆精品国产91久久久资源速度 | 中文字幕日韩精品一区 | 成人激情免费网站| www.色综合.com| 91在线你懂得| 色伊人久久综合中文字幕| 色综合天天性综合| 欧美午夜不卡视频| 91精品国产高清一区二区三区| 日韩一区二区免费在线电影| 2020国产精品| 日韩一区有码在线| 午夜精品一区二区三区三上悠亚| 蜜臀va亚洲va欧美va天堂| 国产精品一卡二| 欧美性猛片aaaaaaa做受| 91麻豆精品国产| 国产视频一区二区三区在线观看| 亚洲色图第一区| 日韩精品视频网| 国产精品18久久久久久久久| 99在线精品视频| 日韩欧美精品在线| 中文字幕在线不卡视频| 亚洲成人黄色小说| 国产精品一区二区在线观看不卡| 不卡视频在线观看| 4438亚洲最大| 亚洲欧美在线aaa| 青青草国产精品亚洲专区无| 高清beeg欧美| 91精品福利在线一区二区三区 | 日韩欧美精品在线| 亚洲天天做日日做天天谢日日欢| 日本在线不卡视频| 99久久综合99久久综合网站| 3d动漫精品啪啪| 亚洲精品伦理在线| 国产乱码精品1区2区3区| 欧美午夜寂寞影院| 国产精品久久一卡二卡| 麻豆精品一区二区综合av| 97se亚洲国产综合自在线不卡| 欧美一区二区三区四区五区| 亚洲三级小视频| 国产成人亚洲精品狼色在线| 777a∨成人精品桃花网| 亚洲精品一二三| 成人动漫中文字幕| 26uuu国产一区二区三区| 亚洲成人中文在线| 色综合色综合色综合色综合色综合| 2021中文字幕一区亚洲| 五月婷婷激情综合网| 91黄色免费观看| 国产精品国产三级国产aⅴ原创| 国模无码大尺度一区二区三区| 欧美日韩国产美女| 亚洲精品国产高清久久伦理二区| 成人av免费在线| 欧美高清在线一区| 国产福利一区在线观看| 日韩免费视频一区| 免费高清不卡av| 欧美疯狂性受xxxxx喷水图片| 亚洲最新视频在线观看| 91丨九色丨黑人外教| 国产精品久久免费看| 国产一区二区三区综合| 久久婷婷成人综合色| 麻豆国产91在线播放| 欧美成人精精品一区二区频| 捆绑调教美女网站视频一区| 欧美日韩成人综合在线一区二区| 亚洲国产日韩一级| 欧美精品欧美精品系列| 日韩国产成人精品|