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

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

?? smc-ultra.c

?? GNU Mach 微內核源代碼, 基于美國卡內基美隆大學的 Mach 研究項目
?? C
?? 第 1 頁 / 共 2 頁
字號:
{	int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; /* ASIC addr */	unsigned char irq2reg[] = {0, 0, 0x04, 0x08, 0, 0x0C, 0, 0x40,							   0, 0x04, 0x44, 0x48, 0, 0, 0, 0x4C, };	if (request_irq(dev->irq, ei_interrupt, 0, ei_status.name, dev))		return -EAGAIN;	outb(0x00, ioaddr);	/* Disable shared memory for safety. */	outb(0x80, ioaddr + 5);	/* Set the IRQ line. */	outb(inb(ioaddr + 4) | 0x80, ioaddr + 4);	outb((inb(ioaddr + 13) & ~0x4C) | irq2reg[dev->irq], ioaddr + 13);	outb(inb(ioaddr + 4) & 0x7f, ioaddr + 4);	if (ei_status.block_input == &ultra_pio_input) {		outb(0x11, ioaddr + 6);		/* Enable interrupts and PIO. */		outb(0x01, ioaddr + 0x19);  	/* Enable ring read auto-wrap. */	} else		outb(0x01, ioaddr + 6);		/* Enable interrupts and memory. */	/* Set the early receive warning level in window 0 high enough not	   to receive ERW interrupts. */	outb_p(E8390_NODMA+E8390_PAGE0, dev->base_addr);	outb(0xff, dev->base_addr + EN0_ERWCNT);	ei_open(dev);	MOD_INC_USE_COUNT;	return 0;}static voidultra_reset_8390(struct device *dev){	int cmd_port = dev->base_addr - ULTRA_NIC_OFFSET; /* ASIC base addr */	outb(ULTRA_RESET, cmd_port);	if (ei_debug > 1) printk("resetting Ultra, t=%ld...", jiffies);	ei_status.txing = 0;	outb(0x00, cmd_port);	/* Disable shared memory for safety. */	outb(0x80, cmd_port + 5);	if (ei_status.block_input == &ultra_pio_input)		outb(0x11, cmd_port + 6);		/* Enable interrupts and PIO. */	else		outb(0x01, cmd_port + 6);		/* Enable interrupts and memory. */	if (ei_debug > 1) printk("reset done\n");	return;}/* Grab the 8390 specific header. Similar to the block_input routine, but   we don't need to be concerned with ring wrap as the header will be at   the start of a page, so we optimize accordingly. */static voidultra_get_8390_hdr(struct device *dev, struct e8390_pkt_hdr *hdr, int ring_page){	unsigned long hdr_start = dev->mem_start + ((ring_page - START_PG)<<8);	outb(ULTRA_MEMENB, dev->base_addr - ULTRA_NIC_OFFSET);	/* shmem on */#ifdef notdef	/* Officially this is what we are doing, but the readl() is faster */	memcpy_fromio(hdr, hdr_start, sizeof(struct e8390_pkt_hdr));#else	((unsigned int*)hdr)[0] = readl(hdr_start);#endif	outb(0x00, dev->base_addr - ULTRA_NIC_OFFSET); /* shmem off */}/* Block input and output are easy on shared memory ethercards, the only   complication is when the ring buffer wraps. */static voidultra_block_input(struct device *dev, int count, struct sk_buff *skb, int ring_offset){	unsigned long xfer_start = dev->mem_start + ring_offset - (START_PG<<8);	/* Enable shared memory. */	outb(ULTRA_MEMENB, dev->base_addr - ULTRA_NIC_OFFSET);	if (xfer_start + count > dev->rmem_end) {		/* We must wrap the input move. */		int semi_count = dev->rmem_end - xfer_start;		memcpy_fromio(skb->data, xfer_start, semi_count);		count -= semi_count;		memcpy_fromio(skb->data + semi_count, dev->rmem_start, count);	} else {		/* Packet is in one chunk -- we can copy + cksum. */		eth_io_copy_and_sum(skb, xfer_start, count, 0);	}	outb(0x00, dev->base_addr - ULTRA_NIC_OFFSET);	/* Disable memory. */}static voidultra_block_output(struct device *dev, int count, const unsigned char *buf,				int start_page){	unsigned long shmem = dev->mem_start + ((start_page - START_PG)<<8);	/* Enable shared memory. */	outb(ULTRA_MEMENB, dev->base_addr - ULTRA_NIC_OFFSET);	memcpy_toio(shmem, buf, count);	outb(0x00, dev->base_addr - ULTRA_NIC_OFFSET); /* Disable memory. */}/* The identical operations for programmed I/O cards.   The PIO model is trivial to use: the 16 bit start address is written   byte-sequentially to IOPA, with no intervening I/O operations, and the   data is read or written to the IOPD data port.   The only potential complication is that the address register is shared   and must be always be rewritten between each read/write direction change.   This is no problem for us, as the 8390 code ensures that we are single   threaded. */static void ultra_pio_get_hdr(struct device *dev, struct e8390_pkt_hdr *hdr,						int ring_page){	int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; /* ASIC addr */	outb(0x00, ioaddr + IOPA);	/* Set the address, LSB first. */	outb(ring_page, ioaddr + IOPA);	insw(ioaddr + IOPD, hdr, sizeof(struct e8390_pkt_hdr)>>1);}static void ultra_pio_input(struct device *dev, int count,						  struct sk_buff *skb, int ring_offset){	int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; /* ASIC addr */    char *buf = skb->data;	/* For now set the address again, although it should already be correct. */	outb(ring_offset, ioaddr + IOPA);	/* Set the address, LSB first. */	outb(ring_offset >> 8, ioaddr + IOPA);	/* We know skbuffs are padded to at least word alignment. */	insw(ioaddr + IOPD, buf, (count+1)>>1);}static void ultra_pio_output(struct device *dev, int count,							const unsigned char *buf, const int start_page){	int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; /* ASIC addr */	outb(0x00, ioaddr + IOPA);	/* Set the address, LSB first. */	outb(start_page, ioaddr + IOPA);	/* An extra odd byte is OK here as well. */	outsw(ioaddr + IOPD, buf, (count+1)>>1);}static intultra_close_card(struct device *dev){	int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET; /* CMDREG */	dev->start = 0;	dev->tbusy = 1;	if (ei_debug > 1)		printk("%s: Shutting down ethercard.\n", dev->name);	outb(0x00, ioaddr + 6);		/* Disable interrupts. */	free_irq(dev->irq, dev);	irq2dev_map[dev->irq] = 0;	NS8390_init(dev, 0);	/* We should someday disable shared memory and change to 8-bit mode	   "just in case"... */	MOD_DEC_USE_COUNT;	return 0;}#ifdef MODULE#define MAX_ULTRA_CARDS	4	/* Max number of Ultra cards per module */#define NAMELEN		8	/* # of chars for storing dev->name */static char namelist[NAMELEN * MAX_ULTRA_CARDS] = { 0, };static struct device dev_ultra[MAX_ULTRA_CARDS] = {	{		NULL,		/* assign a chunk of namelist[] below */		0, 0, 0, 0,		0, 0,		0, 0, 0, NULL, NULL	},};static int io[MAX_ULTRA_CARDS] = { 0, };static int irq[MAX_ULTRA_CARDS]  = { 0, };/* This is set up so that only a single autoprobe takes place per call.ISA device autoprobes on a running machine are not recommended. */intinit_module(void){	int this_dev, found = 0;	for (this_dev = 0; this_dev < MAX_ULTRA_CARDS; this_dev++) {		struct device *dev = &dev_ultra[this_dev];		dev->name = namelist+(NAMELEN*this_dev);		dev->irq = irq[this_dev];		dev->base_addr = io[this_dev];		dev->init = ultra_probe;		if (io[this_dev] == 0)  {			if (this_dev != 0) break; /* only autoprobe 1st one */			printk(KERN_NOTICE "smc-ultra.c: Presently autoprobing (not recommended) for a single card.\n");		}		if (register_netdev(dev) != 0) {			printk(KERN_WARNING "smc-ultra.c: No SMC Ultra card found (i/o = 0x%x).\n", io[this_dev]);			if (found != 0) return 0;	/* Got at least one. */			return -ENXIO;		}		found++;	}	return 0;}voidcleanup_module(void){	int this_dev;	for (this_dev = 0; this_dev < MAX_ULTRA_CARDS; this_dev++) {		struct device *dev = &dev_ultra[this_dev];		if (dev->priv != NULL) {			/* NB: ultra_close_card() does free_irq + irq2dev */			int ioaddr = dev->base_addr - ULTRA_NIC_OFFSET;			kfree(dev->priv);			dev->priv = NULL;			release_region(ioaddr, ULTRA_IO_EXTENT);			unregister_netdev(dev);		}	}}#endif /* MODULE *//* * Local variables: *  compile-command: "gcc -D__KERNEL__ -Wall -O6 -I/usr/src/linux/net/inet -c smc-ultra.c" *  version-control: t *  kept-new-versions: 5 *  c-indent-level: 4 *  c-basic-offset: 4 *  tab-width: 4 * End: */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美一区二区三区孕妇| 精品国内片67194| 久久精品视频一区二区三区| 亚洲国产日韩a在线播放性色| 国产成人午夜视频| 国产精品区一区二区三| 成人av影院在线| 一区二区不卡在线播放| 91久久精品日日躁夜夜躁欧美| 亚洲最快最全在线视频| 在线成人av网站| 国产一区二区三区久久悠悠色av| 久久久一区二区三区捆绑**| 99riav一区二区三区| 亚洲第一综合色| 国产亚洲欧美色| 欧美午夜一区二区| 韩国av一区二区三区四区| 亚洲欧洲美洲综合色网| 欧美精品在线观看播放| 激情综合亚洲精品| 91免费视频网| 麻豆成人在线观看| 亚洲色图欧洲色图婷婷| 日韩一级视频免费观看在线| 成人美女视频在线观看| 韩国v欧美v亚洲v日本v| 日韩中文字幕一区二区三区| 亚洲欧洲一区二区三区| 亚洲国产精品传媒在线观看| 欧美一级国产精品| 91黄色在线观看| 色999日韩国产欧美一区二区| 国产综合久久久久久久久久久久 | 95精品视频在线| 国产一区激情在线| 激情综合网激情| 国产美女视频一区| 成人一区二区三区视频在线观看| 精品影院一区二区久久久| 免费视频一区二区| 精品一区二区三区在线观看| 丝瓜av网站精品一区二区 | 精品日产卡一卡二卡麻豆| 色天使久久综合网天天| 国产精品国产三级国产a| 国产精品成人网| 亚洲国产美女搞黄色| 午夜电影久久久| 久久精品国内一区二区三区| 国产精品一区二区在线看| 粉嫩av亚洲一区二区图片| 色婷婷综合中文久久一本| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 色94色欧美sute亚洲线路一ni| 欧美色欧美亚洲另类二区| 久久久久久久国产精品影院| 亚洲欧洲日韩一区二区三区| 蜜桃av噜噜一区| 91色porny蝌蚪| 2020国产精品| 婷婷夜色潮精品综合在线| 成人福利视频在线| 欧美成人精品3d动漫h| 亚洲欧美色图小说| 捆绑调教美女网站视频一区| 在线观看国产日韩| 欧美国产精品一区二区| 久久国产精品99久久久久久老狼| 91美女片黄在线观看| 久久精品人人做人人综合| 亚洲bt欧美bt精品777| 色悠悠亚洲一区二区| 国产亚洲人成网站| 成人国产在线观看| 国产精品色在线| 成人精品国产福利| 蜜臀久久99精品久久久久宅男 | 一区二区三区国产| 国产福利视频一区二区三区| 久久先锋影音av| 国产在线视频精品一区| 精品福利av导航| 国产成人免费视| 亚洲欧洲美洲综合色网| 日本韩国欧美一区二区三区| 亚洲一区二区综合| 91精品国产一区二区| 精品一区二区三区视频| 久久嫩草精品久久久精品| 成人一区二区三区视频| 亚洲精品视频在线| 91精品黄色片免费大全| 精品一区二区三区不卡| 久久久国际精品| 欧美三级电影精品| 久久er99热精品一区二区| 久久久久久夜精品精品免费| 色先锋aa成人| 国精品**一区二区三区在线蜜桃| 国产精品网曝门| 91精品国产91久久久久久一区二区| 国产一区二区在线看| 亚洲美女屁股眼交3| 日韩欧美亚洲一区二区| 99精品视频一区二区三区| 麻豆国产精品视频| 一区二区三区精品| 久久精品欧美日韩| 欧美挠脚心视频网站| 在线视频国产一区| 国产99久久久久| 国产精品一品二品| 美女久久久精品| 免费观看30秒视频久久| 亚洲午夜一区二区三区| 一区二区中文字幕在线| 亚洲欧洲99久久| 亚洲免费观看高清完整版在线观看熊| 日韩午夜小视频| 亚洲精品在线电影| 日韩视频在线永久播放| 777a∨成人精品桃花网| 欧美二区三区的天堂| 欧美一区二区日韩一区二区| 在线播放日韩导航| 日韩三级高清在线| 精品国产乱码久久久久久浪潮| 日韩午夜精品电影| 国产日韩成人精品| 中文字幕在线一区免费| 一区二区三区四区蜜桃| 婷婷六月综合网| 狠狠色狠狠色综合系列| 国产精品一二三区在线| 99免费精品视频| 这里是久久伊人| 国产精品久久久久久久久免费丝袜| 综合电影一区二区三区| 午夜日韩在线观看| 国产999精品久久久久久绿帽| 色综合天天狠狠| 精品久久久久久亚洲综合网| 最新国产の精品合集bt伙计| 亚洲亚洲人成综合网络| 国内精品国产三级国产a久久 | 国产一区 二区 三区一级| 成人h动漫精品一区二| 69久久99精品久久久久婷婷| 亚洲国产成人私人影院tom| 日韩极品在线观看| caoporn国产精品| 久久久久久一二三区| 美女视频网站久久| 538prom精品视频线放| 亚洲猫色日本管| 99国产一区二区三精品乱码| 久久尤物电影视频在线观看| 日韩精品一级二级| 欧美剧在线免费观看网站 | 久久亚洲精华国产精华液| 日韩精品高清不卡| 欧美亚洲国产一卡| 亚洲一二三四区不卡| 91美女片黄在线观看91美女| 亚洲丝袜自拍清纯另类| www.欧美.com| 亚洲人成网站精品片在线观看| 92国产精品观看| 一区二区三区精品视频在线| 91福利视频久久久久| 午夜一区二区三区视频| 欧美久久一区二区| 激情欧美日韩一区二区| 亚洲国产高清aⅴ视频| 色综合久久中文字幕| 视频一区在线视频| 久久蜜桃一区二区| 91色.com| 国产成人aaaa| 日韩在线一区二区三区| 久久免费美女视频| 色婷婷国产精品| 韩国一区二区在线观看| 一区二区在线观看不卡| 欧美一级生活片| 日本韩国精品在线| 国内精品免费**视频| 无吗不卡中文字幕| 国产精品乱码久久久久久| 亚洲精品在线免费播放| 欧美三级视频在线观看| 99精品久久只有精品| 国产最新精品免费| 日韩不卡一区二区| 一区二区三区在线免费播放| 久久亚洲影视婷婷| 精品蜜桃在线看| 日韩精品一区二区在线观看| 欧美日韩在线三级|