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

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

?? arlan-main.c

?? 優龍2410linux2.6.8內核源代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	conf->tx_delay_ms = tx_delay_ms;	conf->ReTransmitPacketMaxSize = 200;	conf->waitReTransmitPacketMaxSize = 200;	conf->txAckTimeoutMs = 900;	conf->fastReTransCount = 3;	ARLAN_DEBUG_EXIT("arlan_read_card_configuration");	return 0;}static int lastFoundAt = 0xbe000;/* * This is the real probe routine. Linux has a history of friendly device * probes on the ISA bus. A good device probes avoids doing writes, and * verifies that the correct device exists and functions. */#define ARLAN_SHMEM_SIZE	0x2000static int __init arlan_check_fingerprint(unsigned long memaddr){	static const char probeText[] = "TELESYSTEM SLW INC.    ARLAN \0";	volatile struct arlan_shmem *arlan = (struct arlan_shmem *) memaddr;	unsigned long paddr = virt_to_phys((void *) memaddr);	char tempBuf[49];	ARLAN_DEBUG_ENTRY("arlan_check_fingerprint");	if (!request_mem_region(paddr, ARLAN_SHMEM_SIZE, "arlan")) {		// printk(KERN_WARNING "arlan: memory region %lx excluded from probing \n",paddr);		return -ENODEV;	}	memcpy_fromio(tempBuf, arlan->textRegion, 29);	tempBuf[30] = 0;	/* check for card at this address */	if (0 != strncmp(tempBuf, probeText, 29)){ 		release_mem_region(paddr, ARLAN_SHMEM_SIZE);		return -ENODEV;	}//   printk(KERN_INFO "arlan found at 0x%x \n",memaddr);	ARLAN_DEBUG_EXIT("arlan_check_fingerprint");	return 0;}static int arlan_change_mtu(struct net_device *dev, int new_mtu){	struct arlan_private *priv = dev->priv;	struct arlan_conf_stru *conf = priv->Conf;	ARLAN_DEBUG_ENTRY("arlan_change_mtu");	if (new_mtu > 2032)		return -EINVAL;	dev->mtu = new_mtu;	if (new_mtu < 256)		new_mtu = 256;	/* cards book suggests 1600 */	conf->maxDatagramSize = new_mtu;	conf->maxFrameSize = new_mtu + 48;	arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_CONF);	printk(KERN_NOTICE "%s mtu changed to %d \n", dev->name, new_mtu);	ARLAN_DEBUG_EXIT("arlan_change_mtu");	return 0;}static int arlan_mac_addr(struct net_device *dev, void *p){	struct sockaddr *addr = p;	ARLAN_DEBUG_ENTRY("arlan_mac_addr");	return -EINVAL;	if (!netif_running(dev))		return -EBUSY;	memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);	ARLAN_DEBUG_EXIT("arlan_mac_addr");	return 0;}static int __init arlan_setup_device(struct net_device *dev, int num){	struct arlan_private *ap = dev->priv;	int err;	ARLAN_DEBUG_ENTRY("arlan_setup_device");	ap->conf = (struct arlan_shmem *)(ap+1);	dev->tx_queue_len = tx_queue_len;	dev->open = arlan_open;	dev->stop = arlan_close;	dev->hard_start_xmit = arlan_tx;	dev->get_stats = arlan_statistics;	dev->set_multicast_list = arlan_set_multicast;	dev->change_mtu = arlan_change_mtu;	dev->set_mac_address = arlan_mac_addr;	dev->tx_timeout = arlan_tx_timeout;	dev->watchdog_timeo = 3*HZ;		ap->irq_test_done = 0;	ap->Conf = &arlan_conf[num];	ap->Conf->pre_Command_Wait = 40;	ap->Conf->rx_tweak1 = 30;	ap->Conf->rx_tweak2 = 0;	err = register_netdev(dev);	if (err) {		release_mem_region(virt_to_phys((void *) dev->mem_start), 			   ARLAN_SHMEM_SIZE);		free_netdev(dev);		return err;	}	arlan_device[num] = dev;	ARLAN_DEBUG_EXIT("arlan_setup_device");	return 0;}static int __init arlan_probe_here(struct net_device *dev, 				   unsigned long memaddr){	struct arlan_private *ap = dev->priv;	ARLAN_DEBUG_ENTRY("arlan_probe_here");	if (arlan_check_fingerprint(memaddr))		return -ENODEV;	printk(KERN_NOTICE "%s: Arlan found at %x, \n ", dev->name, 	       (int) virt_to_phys((void*)memaddr));	ap->card = (void *) memaddr;	dev->mem_start = memaddr;	dev->mem_end = memaddr + ARLAN_SHMEM_SIZE-1;	if (dev->irq < 2)	{		READSHM(dev->irq, ap->card->irqLevel, u_char);	} else if (dev->irq == 2)		dev->irq = 9;	arlan_read_card_configuration(dev);	ARLAN_DEBUG_EXIT("arlan_probe_here");	return 0;}static int arlan_open(struct net_device *dev){	struct arlan_private *priv = dev->priv;	volatile struct arlan_shmem *arlan = priv->card;	int ret = 0;	ARLAN_DEBUG_ENTRY("arlan_open");	ret = request_irq(dev->irq, &arlan_interrupt, 0, dev->name, dev);	if (ret)	{		printk(KERN_ERR "%s: unable to get IRQ %d .\n",			dev->name, dev->irq);		return ret;	}	priv->bad = 0;	priv->lastReset = 0;	priv->reset = 0;	memcpy_fromio(dev->dev_addr, arlan->lanCardNodeId, 6);	memset(dev->broadcast, 0xff, 6);	dev->tx_queue_len = tx_queue_len;	priv->interrupt_processing_active = 0;	spin_lock_init(&priv->lock);	netif_start_queue (dev);	priv->registrationLostCount = 0;	priv->registrationLastSeen = jiffies;	priv->txLast = 0;	priv->tx_command_given = 0;	priv->rx_command_given = 0;		priv->reRegisterExp = 1;	priv->tx_last_sent = jiffies - 1;	priv->tx_last_cleared = jiffies;	priv->Conf->writeEEPROM = 0;	priv->Conf->registrationInterrupts = 1;	init_timer(&priv->timer);	priv->timer.expires = jiffies + HZ / 10;	priv->timer.data = (unsigned long) dev;	priv->timer.function = &arlan_registration_timer;	/* timer handler */	arlan_command(dev, ARLAN_COMMAND_POWERUP | ARLAN_COMMAND_LONG_WAIT_NOW);	mdelay(200);	add_timer(&priv->timer);	ARLAN_DEBUG_EXIT("arlan_open");	return 0;}static void arlan_tx_timeout (struct net_device *dev){	printk(KERN_ERR "%s: arlan transmit timed out, kernel decided\n", dev->name);	/* Try to restart the adaptor. */	arlan_command(dev, ARLAN_COMMAND_CLEAN_AND_RESET);	// dev->trans_start = jiffies;	// netif_start_queue (dev);}static int arlan_tx(struct sk_buff *skb, struct net_device *dev){	short length;	unsigned char *buf;	ARLAN_DEBUG_ENTRY("arlan_tx");		length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN;	buf = skb->data;	if (length + 0x12 > 0x800) {		printk(KERN_ERR "TX RING overflow \n");		netif_stop_queue (dev);	}	if (arlan_hw_tx(dev, buf, length) == -1)		goto bad_end;	dev->trans_start = jiffies;	dev_kfree_skb(skb);	arlan_process_interrupt(dev);	ARLAN_DEBUG_EXIT("arlan_tx");	return 0;bad_end:	arlan_process_interrupt(dev);	netif_stop_queue (dev);	ARLAN_DEBUG_EXIT("arlan_tx");	return 1;}static inline int DoNotReTransmitCrap(struct net_device *dev){	struct arlan_private *priv = dev->priv;	if (TXLAST(dev).length < priv->Conf->ReTransmitPacketMaxSize)		return 1;	return 0;}static inline int DoNotWaitReTransmitCrap(struct net_device *dev){	struct arlan_private *priv = dev->priv;	if (TXLAST(dev).length < priv->Conf->waitReTransmitPacketMaxSize)		return 1;	return 0;}static inline void arlan_queue_retransmit(struct net_device *dev){	struct arlan_private *priv = dev->priv;	ARLAN_DEBUG_ENTRY("arlan_queue_retransmit");	if (DoNotWaitReTransmitCrap(dev))	{		  arlan_drop_tx(dev);	} else		priv->ReTransmitRequested++;	ARLAN_DEBUG_EXIT("arlan_queue_retransmit");}static inline void RetryOrFail(struct net_device *dev){	struct arlan_private *priv = dev->priv;	ARLAN_DEBUG_ENTRY("RetryOrFail");	if (priv->retransmissions > priv->Conf->retries ||	    DoNotReTransmitCrap(dev))	{		arlan_drop_tx(dev);	}	else if (priv->bad <= priv->Conf->fastReTransCount)	{		arlan_retransmit_now(dev);	}	else arlan_queue_retransmit(dev);	ARLAN_DEBUG_EXIT("RetryOrFail");}static void arlan_tx_done_interrupt(struct net_device *dev, int status){	struct arlan_private *priv = dev->priv;	ARLAN_DEBUG_ENTRY("arlan_tx_done_interrupt");	priv->tx_last_cleared = jiffies;	priv->tx_command_given = 0;	switch (status)	{		case 1:		{			IFDEBUG(ARLAN_DEBUG_TX_CHAIN)				printk("arlan intr: transmit OK\n");			priv->stats.tx_packets++;			priv->bad = 0;			priv->reset = 0;			priv->retransmissions = 0;			if (priv->Conf->tx_delay_ms)			{				priv->tx_done_delayed = jiffies + (priv->Conf->tx_delay_ms * HZ) / 1000 + 1;			}			else			{				TXLAST(dev).offset = 0;				if (priv->txLast)					priv->txLast = 0;				else if (TXTAIL(dev).offset)					priv->txLast = 1;				if (TXLAST(dev).offset)				{					arlan_retransmit_now(dev);					dev->trans_start = jiffies;				}				if (!TXHEAD(dev).offset || !TXTAIL(dev).offset)				{					netif_wake_queue (dev);				}			}		}		break;				case 2:		{			IFDEBUG(ARLAN_DEBUG_TX_CHAIN)				printk("arlan intr: transmit timed out\n");			priv->bad += 1;			//arlan_queue_retransmit(dev);			RetryOrFail(dev);		}		break;		case 3:		{			IFDEBUG(ARLAN_DEBUG_TX_CHAIN)				printk("arlan intr: transmit max retries\n");			priv->bad += 1;			priv->reset = 0;			//arlan_queue_retransmit(dev);			RetryOrFail(dev);		}		break;				case 4:		{			IFDEBUG(ARLAN_DEBUG_TX_CHAIN)				printk("arlan intr: transmit aborted\n");			priv->bad += 1;			arlan_queue_retransmit(dev);			//RetryOrFail(dev);		}		break;		case 5:		{			IFDEBUG(ARLAN_DEBUG_TX_CHAIN)				printk("arlan intr: transmit not registered\n");			priv->bad += 1;			//debug=101;			arlan_queue_retransmit(dev);		}		break;		case 6:		{			IFDEBUG(ARLAN_DEBUG_TX_CHAIN) 				printk("arlan intr: transmit destination full\n");			priv->bad += 1;			priv->reset = 0;			//arlan_drop_tx(dev);			arlan_queue_retransmit(dev);		}		break;		case 7:		{			IFDEBUG(ARLAN_DEBUG_TX_CHAIN)				printk("arlan intr: transmit unknown ack\n");			priv->bad += 1;			priv->reset = 0;			arlan_queue_retransmit(dev);		}		break;				case 8:		{			IFDEBUG(ARLAN_DEBUG_TX_CHAIN)				printk("arlan intr: transmit dest mail box full\n");			priv->bad += 1;			priv->reset = 0;			//arlan_drop_tx(dev);			arlan_queue_retransmit(dev);		}		break;		case 9:		{			IFDEBUG(ARLAN_DEBUG_TX_CHAIN)				printk("arlan intr: transmit root dest not reg.\n");			priv->bad += 1;			priv->reset = 1;			//arlan_drop_tx(dev);			arlan_queue_retransmit(dev);		}		break;		default:		{			printk(KERN_ERR "arlan intr: transmit status unknown\n");			priv->bad += 1;			priv->reset = 1;			arlan_drop_tx(dev);		}	}	ARLAN_DEBUG_EXIT("arlan_tx_done_interrupt");}static void arlan_rx_interrupt(struct net_device *dev, u_char rxStatus, u_short rxOffset, u_short pkt_len){	char *skbtmp;	int i = 0;	struct arlan_private *priv = dev->priv;	volatile struct arlan_shmem *arlan = priv->card;	struct arlan_conf_stru *conf = priv->Conf;	ARLAN_DEBUG_ENTRY("arlan_rx_interrupt");	// by spec,   not                WRITESHMB(arlan->rxStatus,0x00);	// prohibited here              arlan_command(dev, ARLAN_COMMAND_RX);	if (pkt_len < 10 || pkt_len > 2048)	{		printk(KERN_WARNING "%s: got too short or long packet, len %d \n", dev->name, pkt_len);		return;	}	if (rxOffset + pkt_len > 0x2000)	{		printk("%s: got too long packet, len %d offset %x\n", dev->name, pkt_len, rxOffset);		return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一卡二卡| 日韩精品一区二区三区视频在线观看| 久久成人久久爱| 日韩精品五月天| 日韩一区精品视频| 日韩vs国产vs欧美| 精品在线观看视频| 国产精品自拍三区| 成人性色生活片免费看爆迷你毛片| 国产mv日韩mv欧美| 99久久久免费精品国产一区二区| 91麻豆swag| 欧美日韩一区二区三区不卡| 91精品国产综合久久久蜜臀图片| 欧美一区二区三区在线观看| 日韩欧美国产成人一区二区| 欧美精品一区二区三| 国产精品青草综合久久久久99| 国产精品久久久久永久免费观看| 亚洲精品大片www| 婷婷国产v国产偷v亚洲高清| 韩国精品一区二区| 91视视频在线观看入口直接观看www | 毛片av一区二区三区| 久久99精品久久久久| 成人一区二区三区视频在线观看 | 亚州成人在线电影| 蜜臀av国产精品久久久久| 国产精品888| 欧美在线观看一区二区| 精品国产电影一区二区| 亚洲精选视频在线| 韩国精品免费视频| 欧美色区777第一页| 久久亚洲一级片| 亚洲激情五月婷婷| 国产河南妇女毛片精品久久久| 91黄色免费网站| 久久综合色播五月| 性久久久久久久久| 成人av一区二区三区| 精品久久一区二区| 一区二区三区高清| 成人一级片在线观看| 日韩一区二区电影| 亚洲一区二区三区四区五区中文| 精品中文av资源站在线观看| 欧美日韩一区二区在线观看视频| 国产精品色在线| 久草精品在线观看| 欧亚洲嫩模精品一区三区| 国产精品系列在线| 狠狠色狠狠色综合系列| 欧美一区二区播放| 亚洲国产精品欧美一二99| 91最新地址在线播放| 国产女同性恋一区二区| 国产一区 二区| 日韩一区二区高清| 免费国产亚洲视频| 欧美一区二区三区啪啪| 首页国产丝袜综合| 欧美日韩视频在线一区二区| 亚洲在线视频网站| 色狠狠av一区二区三区| 亚洲欧美日韩在线不卡| 91麻豆产精品久久久久久| 136国产福利精品导航| 成人激情免费电影网址| 国产精品三级视频| 成人精品电影在线观看| 国产精品免费人成网站| 国产91精品入口| 国产欧美日韩中文久久| 国产精品一区二区三区乱码| 久久综合九色综合欧美亚洲| 美女视频黄 久久| 精品入口麻豆88视频| 老司机精品视频一区二区三区| 欧美一级高清大全免费观看| 日韩高清不卡在线| 精品国产91九色蝌蚪| 极品美女销魂一区二区三区免费| 欧美xxxxx裸体时装秀| 国产综合一区二区| 欧美国产综合一区二区| 亚洲色图制服诱惑| 粉嫩久久99精品久久久久久夜| 国产日本欧美一区二区| 中文字幕日韩一区二区| 久久99久久精品| 国产人久久人人人人爽| 91首页免费视频| 一区二区日韩电影| 99久久久精品免费观看国产蜜| 亚洲免费视频成人| 国产一区二区三区日韩| 亚洲国产va精品久久久不卡综合| 国产精品美日韩| 久久久久久亚洲综合影院红桃| 日韩欧美国产午夜精品| 91精品在线观看入口| 欧美老女人在线| 欧美巨大另类极品videosbest| 91官网在线观看| 在线观看亚洲一区| 欧美日韩精品一区二区在线播放| 99国产精品视频免费观看| 成人网男人的天堂| 99v久久综合狠狠综合久久| 国产成人午夜精品5599| 成人综合在线网站| 99久久99久久综合| 91网站最新网址| 91最新地址在线播放| 91啦中文在线观看| 欧美在线观看视频一区二区| 在线观看亚洲精品| 色视频一区二区| 在线一区二区三区四区| 欧美日韩国产美女| 欧美一区二区福利在线| 精品久久久久久久一区二区蜜臀| 日韩欧美国产wwwww| 精品少妇一区二区三区在线播放 | 狠狠久久亚洲欧美| 国产一区二区福利视频| 成人激情视频网站| 欧美性受xxxx| 日韩一卡二卡三卡| 久久精品一区二区三区四区| 国产精品网站在线观看| 亚洲免费在线电影| 男人的天堂亚洲一区| 成人性生交大片免费看中文网站| 粉嫩嫩av羞羞动漫久久久| 色网站国产精品| 日韩一区二区在线观看视频 | 一区二区在线免费观看| 一区二区三区蜜桃| 蜜桃精品视频在线| 成人激情av网| 日韩一区二区三区精品视频| 欧美韩国日本不卡| 婷婷丁香激情综合| 国产成人精品免费视频网站| 色悠久久久久综合欧美99| 91精品国产一区二区| 久久久国产一区二区三区四区小说 | 韩国女主播成人在线| 99久久精品免费观看| 欧美一区二区高清| 国产精品二区一区二区aⅴ污介绍| 一区二区欧美国产| 国产一区中文字幕| 欧美综合一区二区| 亚洲精品在线免费观看视频| 亚洲免费观看高清完整版在线观看熊| 亚洲精品国产一区二区精华液| 日本vs亚洲vs韩国一区三区二区| av不卡免费在线观看| 欧美sm美女调教| 一级女性全黄久久生活片免费| 久久99九九99精品| 在线观看一区不卡| 中文字幕在线不卡| 激情丁香综合五月| 在线播放国产精品二区一二区四区| 国产精品丝袜一区| 精品亚洲porn| 日韩一区二区免费在线电影| 一区二区三区成人| 99精品一区二区三区| 国产视频一区在线播放| 日韩精品91亚洲二区在线观看| 99精品国产视频| 国产精品三级在线观看| 国产成人午夜精品影院观看视频| 欧美精品视频www在线观看| 中文字幕制服丝袜成人av| 国产中文字幕一区| 欧美成人猛片aaaaaaa| 亚洲成年人网站在线观看| 色婷婷精品大在线视频| 国产精品妹子av| 成av人片一区二区| 国产精品伦理一区二区| 国产成人欧美日韩在线电影| 久久这里只有精品6| 六月丁香综合在线视频| 欧美一区二区三区婷婷月色 | 日韩欧美视频在线| 天堂成人国产精品一区| 在线观看国产精品网站| 1024成人网| 在线观看成人小视频| 亚洲成精国产精品女| 欧美日本国产视频| 日韩激情一二三区| 日韩欧美色综合网站|