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

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

?? docprobe.c

?? 自己根據(jù)lkd和情境分析
?? C
字號:
/* Linux driver for Disk-On-Chip devices			*//* Probe routines common to all DoC devices			*//* (c) 1999 Machine Vision Holdings, Inc.			*//* Author: David Woodhouse <dwmw2@infradead.org>		*//* $Id: docprobe.c,v 1.1.1.1 2004/02/04 12:56:23 laputa Exp $	*//* DOC_PASSIVE_PROBE:   In order to ensure that the BIOS checksum is correct at boot time, and    hence that the onboard BIOS extension gets executed, the DiskOnChip    goes into reset mode when it is read sequentially: all registers    return 0xff until the chip is woken up again by writing to the    DOCControl register.    Unfortunately, this means that the probe for the DiskOnChip is unsafe,    because one of the first things it does is write to where it thinks    the DOCControl register should be - which may well be shared memory    for another device. I've had machines which lock up when this is    attempted. Hence the possibility to do a passive probe, which will fail    to detect a chip in reset mode, but is at least guaranteed not to lock   the machine.   If you have this problem, uncomment the following line:#define DOC_PASSIVE_PROBE*//* DOC_SINGLE_DRIVER:   Millennium driver has been merged into DOC2000 driver.   The newly-merged driver doesn't appear to work for writing. It's the   same with the DiskOnChip 2000 and the Millennium. If you have a    Millennium and you want write support to work, remove the definition   of DOC_SINGLE_DRIVER below to use the old doc2001-specific driver.   Otherwise, it's left on in the hope that it'll annoy someone with   a Millennium enough that they go through and work out what the    difference is :)*/#define DOC_SINGLE_DRIVER#include <linux/config.h>#include <linux/kernel.h>#include <linux/module.h>#include <asm/errno.h>#include <asm/io.h>#include <asm/uaccess.h>#include <linux/miscdevice.h>#include <linux/pci.h>#include <linux/delay.h>#include <linux/slab.h>#include <linux/sched.h>#include <linux/init.h>#include <linux/types.h>#include <linux/mtd/mtd.h>#include <linux/mtd/nand.h>#include <linux/mtd/doc2000.h>/* Where to look for the devices? */#ifndef CONFIG_MTD_DOCPROBE_ADDRESS#define CONFIG_MTD_DOCPROBE_ADDRESS 0#endifstatic unsigned long doc_config_location = CONFIG_MTD_DOCPROBE_ADDRESS;MODULE_PARM(doc_config_location, "l");MODULE_PARM_DESC(doc_config_location, "Physical memory address at which to probe for DiskOnChip");static unsigned long __initdata doc_locations[] = {#if defined (__alpha__) || defined(__i386__) || defined(__x86_64__)#ifdef CONFIG_MTD_DOCPROBE_HIGH	0xfffc8000, 0xfffca000, 0xfffcc000, 0xfffce000, 	0xfffd0000, 0xfffd2000, 0xfffd4000, 0xfffd6000,	0xfffd8000, 0xfffda000, 0xfffdc000, 0xfffde000, 	0xfffe0000, 0xfffe2000, 0xfffe4000, 0xfffe6000, 	0xfffe8000, 0xfffea000, 0xfffec000, 0xfffee000,#else /*  CONFIG_MTD_DOCPROBE_HIGH */	0xc8000, 0xca000, 0xcc000, 0xce000, 	0xd0000, 0xd2000, 0xd4000, 0xd6000,	0xd8000, 0xda000, 0xdc000, 0xde000, 	0xe0000, 0xe2000, 0xe4000, 0xe6000, 	0xe8000, 0xea000, 0xec000, 0xee000,#endif /*  CONFIG_MTD_DOCPROBE_HIGH */#elif defined(__PPC__)	0xe4000000,#elif defined(CONFIG_MOMENCO_OCELOT)	0x2f000000,#else#warning Unknown architecture for DiskOnChip. No default probe locations defined#endif	0 };/* doccheck: Probe a given memory window to see if there's a DiskOnChip present */static inline int __init doccheck(unsigned long potential, unsigned long physadr){	unsigned long window=potential;	unsigned char tmp, ChipID;#ifndef DOC_PASSIVE_PROBE	unsigned char tmp2;#endif	/* Routine copied from the Linux DOC driver */#ifdef CONFIG_MTD_DOCPROBE_55AA	/* Check for 0x55 0xAA signature at beginning of window,	   this is no longer true once we remove the IPL (for Millennium */	if (ReadDOC(window, Sig1) != 0x55 || ReadDOC(window, Sig2) != 0xaa)		return 0;#endif /* CONFIG_MTD_DOCPROBE_55AA */#ifndef DOC_PASSIVE_PROBE		/* It's not possible to cleanly detect the DiskOnChip - the	 * bootup procedure will put the device into reset mode, and	 * it's not possible to talk to it without actually writing	 * to the DOCControl register. So we store the current contents	 * of the DOCControl register's location, in case we later decide	 * that it's not a DiskOnChip, and want to put it back how we	 * found it. 	 */	tmp2 = ReadDOC(window, DOCControl);		/* Reset the DiskOnChip ASIC */	WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_RESET, 		 window, DOCControl);	WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_RESET, 		 window, DOCControl);		/* Enable the DiskOnChip ASIC */	WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_NORMAL, 		 window, DOCControl);	WriteDOC(DOC_MODE_CLR_ERR | DOC_MODE_MDWREN | DOC_MODE_NORMAL, 		 window, DOCControl);#endif /* !DOC_PASSIVE_PROBE */		ChipID = ReadDOC(window, ChipID);  	switch (ChipID) {	case DOC_ChipID_Doc2k:		/* Check the TOGGLE bit in the ECC register */		tmp = ReadDOC(window, 2k_ECCStatus) & DOC_TOGGLE_BIT;		if ((ReadDOC(window, 2k_ECCStatus) & DOC_TOGGLE_BIT) != tmp)				return ChipID;		break;			case DOC_ChipID_DocMil:		/* Check the TOGGLE bit in the ECC register */		tmp = ReadDOC(window, ECCConf) & DOC_TOGGLE_BIT;		if ((ReadDOC(window, ECCConf) & DOC_TOGGLE_BIT) != tmp)				return ChipID;		break;			default:#ifndef CONFIG_MTD_DOCPROBE_55AA		printk(KERN_WARNING "Possible DiskOnChip with unknown ChipID %2.2X found at 0x%lx\n",		       ChipID, physadr);#endif#ifndef DOC_PASSIVE_PROBE		/* Put back the contents of the DOCControl register, in case it's not		 * actually a DiskOnChip.		 */		WriteDOC(tmp2, window, DOCControl);#endif		return 0;	}	printk(KERN_WARNING "DiskOnChip failed TOGGLE test, dropping.\n");#ifndef DOC_PASSIVE_PROBE	/* Put back the contents of the DOCControl register: it's not a DiskOnChip */	WriteDOC(tmp2, window, DOCControl);#endif	return 0;}   static int docfound;static void __init DoC_Probe(unsigned long physadr){	unsigned long docptr;	struct DiskOnChip *this;	struct mtd_info *mtd;	int ChipID;	char namebuf[15];	char *name = namebuf;	char *im_funcname = NULL;	char *im_modname = NULL;	void (*initroutine)(struct mtd_info *) = NULL;	docptr = (unsigned long)ioremap(physadr, DOC_IOREMAP_LEN);		if (!docptr)		return;		if ((ChipID = doccheck(docptr, physadr))) {		docfound = 1;		mtd = kmalloc(sizeof(struct DiskOnChip) + sizeof(struct mtd_info), GFP_KERNEL);		if (!mtd) {			printk(KERN_WARNING "Cannot allocate memory for data structures. Dropping.\n");			iounmap((void *)docptr);			return;		}				this = (struct DiskOnChip *)(&mtd[1]);				memset((char *)mtd,0, sizeof(struct mtd_info));		memset((char *)this, 0, sizeof(struct DiskOnChip));		mtd->priv = this;		this->virtadr = docptr;		this->physadr = physadr;		this->ChipID = ChipID;		sprintf(namebuf, "with ChipID %2.2X", ChipID);		switch(ChipID) {		case DOC_ChipID_Doc2k:			name="2000";			im_funcname = "DoC2k_init";			im_modname = "doc2000";			break;					case DOC_ChipID_DocMil:			name="Millennium";#ifdef DOC_SINGLE_DRIVER			im_funcname = "DoC2k_init";			im_modname = "doc2000";#else			im_funcname = "DoCMil_init";			im_modname = "doc2001";#endif /* DOC_SINGLE_DRIVER */			break;		}		if (im_funcname)			initroutine = inter_module_get_request(im_funcname, im_modname);		if (initroutine) {			(*initroutine)(mtd);			inter_module_put(im_funcname);			return;		}		printk(KERN_NOTICE "Cannot find driver for DiskOnChip %s at 0x%lX\n", name, physadr);	}	iounmap((void *)docptr);}/**************************************************************************** * * Module stuff * ****************************************************************************/int __init init_doc(void){	int i;		if (doc_config_location) {		printk(KERN_INFO "Using configured DiskOnChip probe address 0x%lx\n", doc_config_location);		DoC_Probe(doc_config_location);	} else {		for (i=0; doc_locations[i]; i++) {			DoC_Probe(doc_locations[i]);		}	}	/* No banner message any more. Print a message if no DiskOnChip	   found, so the user knows we at least tried. */	if (!docfound)		printk(KERN_INFO "No recognised DiskOnChip devices found\n");	/* So it looks like we've been used and we get unloaded */	MOD_INC_USE_COUNT;	MOD_DEC_USE_COUNT;	return 0;	}module_init(init_doc);MODULE_LICENSE("GPL");MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");MODULE_DESCRIPTION("Probe code for DiskOnChip 2000 and Millennium devices");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品污污网站免费看| 国产精品综合二区| 久久精品国内一区二区三区| 久久国产日韩欧美精品| 丰满亚洲少妇av| 在线日韩av片| 精品国产sm最大网站免费看| 中文av一区特黄| 亚洲电影激情视频网站| 极品少妇一区二区| 色哟哟亚洲精品| 精品福利一区二区三区| 亚洲另类在线制服丝袜| 久久狠狠亚洲综合| 91浏览器在线视频| 精品少妇一区二区| 亚洲精品你懂的| 国产精品自在欧美一区| 欧美写真视频网站| 日本一区二区三区久久久久久久久不| 一区二区三区鲁丝不卡| 韩国三级在线一区| 日本高清不卡一区| 91精品国产色综合久久久蜜香臀| 国产精品成人午夜| 欧美伊人久久久久久久久影院| 欧美日韩精品是欧美日韩精品| 色88888久久久久久影院野外| 在线观看区一区二| 欧美一区二区三区四区视频| 久久人人97超碰com| 亚洲综合小说图片| 国产裸体歌舞团一区二区| 91丝袜呻吟高潮美腿白嫩在线观看| 欧美美女bb生活片| 中文字幕巨乱亚洲| 亚洲成人av一区二区三区| 国产在线精品国自产拍免费| 色综合天天视频在线观看| 日韩欧美国产一区在线观看| 亚洲色图色小说| 午夜久久福利影院| 久久精品久久综合| 日本电影欧美片| 久久精品视频免费| 性做久久久久久免费观看 | 激情图区综合网| 成人av在线看| 精品毛片乱码1区2区3区| 日本一区二区免费在线观看视频| 亚洲欧美一区二区不卡| 精品国产91乱码一区二区三区 | 欧美成人性福生活免费看| 亚洲日本在线天堂| 国产福利一区二区三区视频 | 亚洲成a人片综合在线| 精一区二区三区| 91国产福利在线| 中文字幕一区日韩精品欧美| 激情综合色播五月| 欧美日韩一区二区三区在线看| 国产精品视频一二| 国内精品嫩模私拍在线| 欧美日韩成人综合在线一区二区 | 午夜精品久久久久久久99樱桃| 91原创在线视频| 久久久国产精品麻豆| 日日夜夜一区二区| 色婷婷av一区二区三区软件| 久久久久久久久99精品| 美女高潮久久久| 欧美色图一区二区三区| 一色屋精品亚洲香蕉网站| 国产成人夜色高潮福利影视| 日韩一区二区三区电影在线观看| 亚洲电影一区二区| 91蜜桃免费观看视频| 亚洲国产成人在线| 国产aⅴ精品一区二区三区色成熟| 精品久久一区二区| 麻豆成人av在线| 日韩欧美成人激情| 麻豆91精品视频| 日韩精品一区二区三区在线播放| 午夜精品福利一区二区三区蜜桃| 色婷婷久久综合| 亚洲精品va在线观看| 91一区二区三区在线观看| 国产精品免费av| 成人av中文字幕| 最新热久久免费视频| 欧美激情综合五月色丁香| 国产盗摄女厕一区二区三区| 久久九九全国免费| 成熟亚洲日本毛茸茸凸凹| 中文字幕欧美激情一区| 国产成人精品亚洲日本在线桃色| 久久久久久久久久看片| 麻豆精品视频在线观看免费| 日本道精品一区二区三区| 一个色妞综合视频在线观看| 一本大道久久a久久综合婷婷 | www.久久精品| 18涩涩午夜精品.www| 91国偷自产一区二区开放时间 | 精品国产一区二区在线观看| 六月婷婷色综合| 欧美精品一区二区三区在线播放| 国产在线看一区| 亚洲日本在线天堂| 欧美美女激情18p| 国产剧情av麻豆香蕉精品| 中文久久乱码一区二区| 色哟哟国产精品| 丝袜亚洲另类欧美| 精品国产乱码久久久久久图片| 国产成人一区在线| 日韩伦理免费电影| 欧美三级资源在线| 裸体健美xxxx欧美裸体表演| 久久综合色8888| av午夜一区麻豆| 午夜精品久久久久久| 日韩亚洲国产中文字幕欧美| 日韩成人免费看| 91精品麻豆日日躁夜夜躁| 久久精品国产秦先生| |精品福利一区二区三区| 欧美日韩国产免费| 国产一区二区久久| 国产女人18毛片水真多成人如厕 | 成熟亚洲日本毛茸茸凸凹| 亚洲男女毛片无遮挡| 欧美日韩精品欧美日韩精品| 久久精品人人做人人爽人人| 91污在线观看| 亚洲va韩国va欧美va| www国产成人| 91国产精品成人| 国产在线一区二区综合免费视频| 亚洲国产精品二十页| 93久久精品日日躁夜夜躁欧美| 亚洲一区二区综合| 欧美久久久一区| 精品影视av免费| 一区二区三区四区亚洲| 精品黑人一区二区三区久久| 91美女在线观看| 狠狠色丁香久久婷婷综合_中| 专区另类欧美日韩| 欧美精品一区二区三区蜜臀| 在线观看视频一区二区欧美日韩| 久久精品国产精品亚洲精品| 亚洲欧洲制服丝袜| 国产欧美综合色| 欧美福利电影网| 色婷婷综合久久久久中文| 国产精品一区二区三区99| 同产精品九九九| 亚洲欧美日韩在线播放| 久久免费午夜影院| 91在线视频免费91| 国产一区二区三区免费观看| 一区二区在线免费观看| 欧美国产综合色视频| 91精品欧美福利在线观看| 色婷婷久久一区二区三区麻豆| 国产盗摄女厕一区二区三区| 日韩精品免费专区| 亚洲精品成a人| 国产精品美女一区二区三区| 日韩欧美一级片| 欧美日韩一区二区电影| 91视频免费看| 成人av集中营| 国产成人自拍网| 国产在线国偷精品免费看| 免费一级片91| 亚洲一区二区三区爽爽爽爽爽 | 国内精品国产成人| 亚洲一区二区高清| 亚洲精品videosex极品| 中文字幕日韩av资源站| 国产三级精品三级| 日韩女优制服丝袜电影| 欧美妇女性影城| 欧美日韩久久一区| 欧美日韩国产一级片| 色偷偷一区二区三区| 91久久线看在观草草青青| 91污片在线观看| 91丨porny丨在线| 色综合色综合色综合| 国产一区二区三区黄视频| 日本成人中文字幕| 五月天国产精品| 午夜欧美电影在线观看| 午夜精品福利在线| 一二三四区精品视频| 亚洲影视在线观看|