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

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

?? 3c509.c

?? linux 1.0 源代碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* 3c509.c: A 3c509 EtherLink3 ethernet driver for linux. *//*	Written 1993 by Donald Becker.	Copyright 1993 United States Government as represented by the	Director, National Security Agency.	 This software may be used and	distributed according to the terms of the GNU Public License,	incorporated herein by reference.		This driver is for the 3Com EtherLinkIII series.	The author may be reached as becker@super.org or	C/O Supercomputing Research Ctr., 17100 Science Dr., Bowie MD 20715*/static char *version = "3c509.c:pl15k 3/5/94 becker@super.org\n";#include <linux/config.h>#include <linux/kernel.h>#include <linux/sched.h>#include <linux/string.h>#include <linux/interrupt.h>#include <linux/ptrace.h>#include <linux/errno.h>#include <linux/in.h>#include <linux/malloc.h>#include <linux/ioport.h>#include <asm/bitops.h>#include <asm/io.h>#include "dev.h"#include "eth.h"#include "skbuff.h"#include "arp.h"#ifndef HAVE_ALLOC_SKB#define alloc_skb(size, priority) (struct sk_buff *) kmalloc(size,priority)#endif#ifdef EL3_DEBUGint el3_debug = EL3_DEBUG;#elseint el3_debug = 2;#endif/* To minimize the size of the driver source I only define operating   constants if they are used several times.  You'll need the manual   if you want to understand driver details. *//* Offsets from base I/O address. */#define EL3_DATA 0x00#define EL3_CMD 0x0e#define EL3_STATUS 0x0e#define ID_PORT 0x100#define	 EEPROM_READ 0x80#define EL3WINDOW(win_num) outw(0x0800+(win_num), ioaddr + EL3_CMD)/* Register window 1 offsets, the window used in normal operation. */#define TX_FIFO		0x00#define RX_FIFO		0x00#define RX_STATUS 	0x08#define TX_STATUS 	0x0B#define TX_FREE		0x0C		/* Remaining free bytes in Tx buffer. */#define WN4_MEDIA	0x0A		/* Window 4: Various transceiver/media bits. */#define  MEDIA_TP	0x00C0		/* Enable link beat and jabber for 10baseT. */struct el3_private {	struct enet_statistics stats;};static ushort id_read_eeprom(int index);static ushort read_eeprom(short ioaddr, int index);static int el3_open(struct device *dev);static int el3_start_xmit(struct sk_buff *skb, struct device *dev);static void el3_interrupt(int reg_ptr);static void update_stats(int addr, struct device *dev);static struct enet_statistics *el3_get_stats(struct device *dev);static int el3_rx(struct device *dev);static int el3_close(struct device *dev);#ifdef HAVE_MULTICASTstatic void set_multicast_list(struct device *dev, int num_addrs, void *addrs);#endifint el3_probe(struct device *dev){	short lrs_state = 0xff, i;	ushort ioaddr, irq, if_port;	short *phys_addr = (short *)dev->dev_addr;	static int current_tag = 0;	/* First check for a board on the EISA bus. */	if (EISA_bus) {		for (ioaddr = 0x1000; ioaddr < 0x9000; ioaddr += 0x1000) {			if (inw(ioaddr) != 0x6d50)				continue;			irq = inw(ioaddr + 8) >> 12;			if_port = inw(ioaddr + 6)>>14;			for (i = 0; i < 3; i++)				phys_addr[i] = htons(read_eeprom(ioaddr, i));			/* Restore the "Manufacturer ID" to the EEPROM read register. */			/* The manual says to restore "Product ID" (reg. 3). !???! */			read_eeprom(ioaddr, 7);			/* Was the EISA code an add-on hack?  Nahhhhh... */			goto found;		}	}#ifdef CONFIG_MCA	if (MCA_bus) {		mca_adaptor_select_mode(1);		for (i = 0; i < 8; i++)			if ((mca_adaptor_id(i) | 1) == 0x627c) {				ioaddr = mca_pos_base_addr(i);				irq = inw(ioaddr + 8) >> 12;				if_port = inw(ioaddr + 6)>>14;				for (i = 0; i < 3; i++)					phys_addr[i] = htons(read_eeprom(ioaddr, i));				mca_adaptor_select_mode(0);				goto found;			}		mca_adaptor_select_mode(0);	}#endif	  	/* Send the ID sequence to the ID_PORT. */	outb(0x00, ID_PORT);	outb(0x00, ID_PORT);	for(i = 0; i < 255; i++) {		outb(lrs_state, ID_PORT);		lrs_state <<= 1;		lrs_state = lrs_state & 0x100 ? lrs_state ^ 0xcf : lrs_state;	}	/* For the first probe, clear all board's tag registers. */	if (current_tag == 0)		outb(0xd0, ID_PORT);	else				/* Otherwise kill off already-found boards. */		outb(0xd8, ID_PORT);	if (id_read_eeprom(7) != 0x6d50) {		return -ENODEV;	}	/* Read in EEPROM data, which does contention-select.	   Only the lowest address board will stay "on-line".	   3Com got the byte order backwards. */	for (i = 0; i < 3; i++) {		phys_addr[i] = htons(id_read_eeprom(i));	}	{		unsigned short iobase = id_read_eeprom(8);		if_port = iobase >> 14;		ioaddr = 0x200 + ((iobase & 0x1f) << 4);	}	irq = id_read_eeprom(9) >> 12;	/* The current Space.c structure makes it difficult to have more	   than one adaptor initialized.  Send me email if you have a need for	   multiple adaptors, and we'll work out something.	 -becker@super.org */	if (dev->base_addr != 0		&&	dev->base_addr != (unsigned short)ioaddr) {		return -ENODEV;	}	/* Set the adaptor tag so that the next card can be found. */	outb(0xd0 + ++current_tag, ID_PORT);	/* Activate the adaptor at the EEPROM location. */	outb(0xff, ID_PORT);	EL3WINDOW(0);	if (inw(ioaddr) != 0x6d50)		return -ENODEV; found:	dev->base_addr = ioaddr;	dev->irq = irq;	dev->if_port = if_port;	snarf_region(dev->base_addr, 16);	{		char *if_names[] = {"10baseT", "AUI", "undefined", "BNC"};		printk("%s: 3c509 at %#3.3x tag %d, %s port, address ",			   dev->name, dev->base_addr, current_tag, if_names[dev->if_port]);	}	/* Read in the station address. */	for (i = 0; i < 6; i++)		printk(" %2.2x", dev->dev_addr[i]);	printk(", IRQ %d.\n", dev->irq);	/* Make up a EL3-specific-data structure. */	dev->priv = kmalloc(sizeof(struct el3_private), GFP_KERNEL);	memset(dev->priv, 0, sizeof(struct el3_private));	if (el3_debug > 0)		printk(version);	/* The EL3-specific entries in the device structure. */	dev->open = &el3_open;	dev->hard_start_xmit = &el3_start_xmit;	dev->stop = &el3_close;	dev->get_stats = &el3_get_stats;#ifdef HAVE_MULTICAST		dev->set_multicast_list = &set_multicast_list;#endif	/* Fill in the generic fields of the device structure. */	for (i = 0; i < DEV_NUMBUFFS; i++)		dev->buffs[i] = NULL;	dev->hard_header	= eth_header;	dev->add_arp		= eth_add_arp;	dev->queue_xmit		= dev_queue_xmit;	dev->rebuild_header = eth_rebuild_header;	dev->type_trans		= eth_type_trans;	dev->type			= ARPHRD_ETHER;	dev->hard_header_len = ETH_HLEN;	dev->mtu			= 1500; /* eth_mtu */	dev->addr_len		= ETH_ALEN;	for (i = 0; i < ETH_ALEN; i++) {		dev->broadcast[i]=0xff;	}	/* New-style flags. */	dev->flags			= IFF_BROADCAST;	dev->family			= AF_INET;	dev->pa_addr		= 0;	dev->pa_brdaddr		= 0;	dev->pa_mask		= 0;	dev->pa_alen		= sizeof(unsigned long);	return 0;}/* Read a word from the EEPROM using the regular EEPROM access register.   Assume that we are in register window zero. */static ushort read_eeprom(short ioaddr, int index){	int timer;	outw(EEPROM_READ + index, ioaddr + 10);	/* Pause for at least 162 us. for the read to take place. */	for (timer = 0; timer < 162*4 + 400; timer++)		SLOW_DOWN_IO;	return inw(ioaddr + 12);}/* Read a word from the EEPROM when in the ISA ID probe state. */static ushort id_read_eeprom(int index){	int timer, bit, word = 0;		/* Issue read command, and pause for at least 162 us. for it to complete.	   Assume extra-fast 16Mhz bus. */	outb(EEPROM_READ + index, ID_PORT);	/* This should really be done by looking at one of the timer channels. */	for (timer = 0; timer < 162*4 + 400; timer++)		SLOW_DOWN_IO;	for (bit = 15; bit >= 0; bit--)		word = (word << 1) + (inb(ID_PORT) & 0x01);			if (el3_debug > 3)		printk("  3c509 EEPROM word %d %#4.4x.\n", index, word);	return word;}static intel3_open(struct device *dev){	int ioaddr = dev->base_addr;	int i;	if (request_irq(dev->irq, &el3_interrupt)) {		return -EAGAIN;	}	EL3WINDOW(0);	if (el3_debug > 3)		printk("%s: Opening, IRQ %d	 status@%x %4.4x.\n", dev->name,			   dev->irq, ioaddr + EL3_STATUS, inw(ioaddr + EL3_STATUS));	/* Activate board: this is probably unnecessary. */	outw(0x0001, ioaddr + 4);	irq2dev_map[dev->irq] = dev;	/* Set the IRQ line. */	outw((dev->irq << 12) | 0x0f00, ioaddr + 8);	/* Set the station address in window 2 each time opened. */	EL3WINDOW(2);	for (i = 0; i < 6; i++)		outb(dev->dev_addr[i], ioaddr + i);	if (dev->if_port == 3)		/* Start the thinnet transceiver. We should really wait 50ms...*/		outw(0x1000, ioaddr + EL3_CMD);	else if (dev->if_port == 0) {		/* 10baseT interface, enabled link beat and jabber check. */		EL3WINDOW(4);		outw(inw(ioaddr + WN4_MEDIA) | MEDIA_TP, ioaddr + WN4_MEDIA);	}	/* Switch to register set 1 for normal use. */	EL3WINDOW(1);	outw(0x8005, ioaddr + EL3_CMD); /* Accept b-case and phys addr only. */	outw(0xA800, ioaddr + EL3_CMD); /* Turn on statistics. */	outw(0x2000, ioaddr + EL3_CMD); /* Enable the receiver. */	outw(0x4800, ioaddr + EL3_CMD); /* Enable transmitter. */	outw(0x78ff, ioaddr + EL3_CMD); /* Allow all status bits to be seen. */	dev->interrupt = 0;	dev->tbusy = 0;	dev->start = 1;	outw(0x7098, ioaddr + EL3_CMD); /* Set interrupt mask. */	if (el3_debug > 3)		printk("%s: Opened 3c509  IRQ %d  status %4.4x.\n",			   dev->name, dev->irq, inw(ioaddr + EL3_STATUS));	return 0;					/* Always succeed */}static intel3_start_xmit(struct sk_buff *skb, struct device *dev){	struct el3_private *lp = (struct el3_private *)dev->priv;	int ioaddr = dev->base_addr;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品一区二区久久久| 一区二区三区日韩| 紧缚奴在线一区二区三区| 日韩午夜在线观看视频| 免费在线观看日韩欧美| 精品对白一区国产伦| 国产成人av福利| 亚洲欧洲精品天堂一级| 91丨九色丨蝌蚪富婆spa| 一区二区日韩电影| 欧美一区二区三区在线观看| 老司机一区二区| 亚洲国产精品成人综合| 91丨porny丨中文| 亚洲成av人片在线| 精品国产91久久久久久久妲己 | 国产亚洲综合性久久久影院| 国产一区二区三区四| 亚洲色欲色欲www在线观看| 欧美性一区二区| 久久国产综合精品| 亚洲视频免费看| 在线播放欧美女士性生活| 国产伦精品一区二区三区视频青涩 | 精品美女一区二区| 国产91清纯白嫩初高中在线观看| 亚洲三级在线看| 欧美一区二区三区啪啪| 成人妖精视频yjsp地址| 亚洲成人一区在线| 久久精品人人做人人综合| 91福利区一区二区三区| 老司机免费视频一区二区三区| 国产精品色在线| 欧美日韩国产影片| 国产福利一区二区| 天天综合色天天综合色h| 国产欧美精品日韩区二区麻豆天美| 色综合中文字幕国产| 丁香天五香天堂综合| 亚洲激情男女视频| www国产精品av| 欧美日韩免费观看一区二区三区| 国产乱码精品一区二区三| 一区二区三区国产精品| 久久久精品免费观看| 激情久久久久久久久久久久久久久久| 国产精品毛片久久久久久| 欧美电影一区二区| 91在线你懂得| 国产精品亚洲专一区二区三区| 亚洲第一激情av| 国产精品理伦片| 亚洲精品在线观看网站| 欧美另类变人与禽xxxxx| 成人午夜私人影院| 国产做a爰片久久毛片 | 日本不卡一区二区三区| 中文字幕亚洲精品在线观看| 精品国产伦一区二区三区观看体验| 一本久道中文字幕精品亚洲嫩| 国产sm精品调教视频网站| 久久av中文字幕片| 日本在线不卡一区| 亚洲国产欧美一区二区三区丁香婷| 国产精品久久久久天堂| 久久午夜免费电影| 精品久久久三级丝袜| 欧美va亚洲va国产综合| 欧美理论片在线| 欧美日韩一区二区三区视频 | 午夜av一区二区| 亚洲色图一区二区三区| 国产精品久久三区| 中文字幕第一页久久| 国产三级三级三级精品8ⅰ区| 精品捆绑美女sm三区| 久久综合色一综合色88| 精品久久久久久最新网址| 日韩欧美的一区| 欧美成人video| 精品国一区二区三区| 欧美成人猛片aaaaaaa| 日韩欧美一区二区三区在线| 日韩视频免费直播| 精品精品国产高清a毛片牛牛| 精品久久五月天| 国产午夜精品久久| 国产精品网站在线观看| 国产精品网站在线播放| 国产精品免费av| 亚洲欧美激情一区二区| 亚洲国产欧美日韩另类综合| 性感美女极品91精品| 日本成人在线不卡视频| 狠狠色伊人亚洲综合成人| 国产一区欧美日韩| 成人a免费在线看| 日本高清免费不卡视频| 欧美日精品一区视频| 欧美一区二区视频观看视频| www一区二区| 亚洲色图在线视频| 日韩精品久久理论片| 国产综合久久久久久鬼色| 盗摄精品av一区二区三区| 91色视频在线| 欧美猛男gaygay网站| 精品国产人成亚洲区| 国产精品久久久久久久久晋中 | 九九精品一区二区| a级精品国产片在线观看| 日本高清视频一区二区| 日韩欧美亚洲国产另类 | 欧美亚洲高清一区二区三区不卡| 欧美精品aⅴ在线视频| 久久久久久久综合色一本| 成人免费在线播放视频| 午夜久久久影院| 国产成人av一区二区三区在线| 在线观看亚洲精品| 久久久久久久久蜜桃| 亚洲一区二区三区不卡国产欧美| 久久精品国产99久久6| 色综合久久九月婷婷色综合| 日韩久久久精品| 亚洲品质自拍视频| 精品一区二区三区日韩| 91官网在线免费观看| 日韩欧美国产高清| 一区二区三区四区亚洲| 久久电影网电视剧免费观看| 色婷婷综合视频在线观看| 欧美成人官网二区| 亚洲成av人片在www色猫咪| 国产成人精品一区二区三区四区 | 色婷婷国产精品| 久久久精品影视| 亚洲bdsm女犯bdsm网站| a亚洲天堂av| 久久精品网站免费观看| 免费看黄色91| 欧美优质美女网站| 国产精品不卡在线| 国产成人精品影视| 亚洲精品在线一区二区| 性感美女久久精品| 色综合亚洲欧洲| 国产精品情趣视频| 国产一区二区久久| 精品国产91亚洲一区二区三区婷婷| 亚洲成人自拍一区| 欧美日韩视频不卡| 亚洲午夜一区二区三区| 97成人超碰视| 国产精品嫩草久久久久| 激情小说亚洲一区| 欧美成人乱码一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 色女孩综合影院| 成人欧美一区二区三区视频网页| 成人一区在线观看| 国产精品久久久久久久久免费樱桃| 国产在线不卡视频| 欧美大白屁股肥臀xxxxxx| 日av在线不卡| 日韩一区二区三区电影在线观看| 调教+趴+乳夹+国产+精品| 欧美精品在线视频| 丝袜美腿亚洲综合| 欧美剧情电影在线观看完整版免费励志电影 | 美国一区二区三区在线播放| 欧美日韩免费观看一区三区| 五月天久久比比资源色| 欧美精品乱码久久久久久按摩| 亚洲在线一区二区三区| 欧美日韩精品福利| 人妖欧美一区二区| 日韩精品中文字幕一区| 国产在线一区观看| 欧美国产一区视频在线观看| 成人蜜臀av电影| 最新高清无码专区| 在线视频你懂得一区| 五月婷婷激情综合网| 日韩三级中文字幕| 国产精品18久久久| 亚洲视频中文字幕| 欧美日韩国产高清一区二区 | 精品88久久久久88久久久| 国产成人精品三级麻豆| 国产精品视频在线看| 一本久久a久久精品亚洲| 婷婷开心激情综合| 精品精品国产高清a毛片牛牛| 成人午夜免费av| 亚洲国产一区视频| 欧美xxxxxxxx| 99麻豆久久久国产精品免费优播| 一区二区三区在线看|