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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? docprobe.c

?? linux mtd設(shè)備操作工具軟件
?? C
字號:
/* Linux driver for Disk-On-Chip devices			*//* Probe routines common to all DoC devices			*//* (C) 1999 Machine Vision Holdings, Inc.			*//* (C) 1999-2003 David Woodhouse <dwmw2@infradead.org>		*//* $Id: docprobe.c,v 1.45 2005/03/17 19:44:27 gleixner 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 old Millennium-only driver has been retained just in case there   are problems with the new code. If the combined driver doesn't work   for you, you can try the old one by undefining DOC_SINGLE_DRIVER    below and also enabling it in your configuration. If this fixes the   problems, please send a report to the MTD mailing list at    <linux-mtd@lists.infradead.org>.*/#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 <linux/delay.h>#include <linux/slab.h>#include <linux/init.h>#include <linux/types.h>#include <linux/mtd/mtd.h>#include <linux/mtd/nand.h>#include <linux/mtd/doc2000.h>#include <linux/mtd/compatmac.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_param(doc_config_location, ulong, 0);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,        0xff000000,#elif defined(CONFIG_MOMENCO_OCELOT_G) || defined (CONFIG_MOMENCO_OCELOT_C)        0xff000000,##else#warning Unknown architecture for DiskOnChip. No default probe locations defined#endif	0xffffffff };/* doccheck: Probe a given memory window to see if there's a DiskOnChip present */static inline int __init doccheck(void __iomem *potential, unsigned long physadr){	void __iomem *window=potential;	unsigned char tmp, tmpb, tmpc, 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 */		/* We need to read the ChipID register four times. For some	   newer DiskOnChip 2000 units, the first three reads will	   return the DiskOnChip Millennium ident. Don't ask. */	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;		tmpb = ReadDOC(window, 2k_ECCStatus) & DOC_TOGGLE_BIT;		tmpc = ReadDOC(window, 2k_ECCStatus) & DOC_TOGGLE_BIT;		if (tmp != tmpb && tmp == tmpc)				return ChipID;		break;			case DOC_ChipID_DocMil:		/* Check for the new 2000 with Millennium ASIC */		ReadDOC(window, ChipID);		ReadDOC(window, ChipID);		if (ReadDOC(window, ChipID) != DOC_ChipID_DocMil)			ChipID = DOC_ChipID_Doc2kTSOP;		/* Check the TOGGLE bit in the ECC register */		tmp  = ReadDOC(window, ECCConf) & DOC_TOGGLE_BIT;		tmpb = ReadDOC(window, ECCConf) & DOC_TOGGLE_BIT;		tmpc = ReadDOC(window, ECCConf) & DOC_TOGGLE_BIT;		if (tmp != tmpb && tmp == tmpc)				return ChipID;		break;			case DOC_ChipID_DocMilPlus16:	case DOC_ChipID_DocMilPlus32:	case 0:		/* Possible Millennium+, need to do more checks */#ifndef DOC_PASSIVE_PROBE		/* Possibly release from power down mode */		for (tmp = 0; (tmp < 4); tmp++)			ReadDOC(window, Mplus_Power);		/* Reset the DiskOnChip ASIC */		tmp = DOC_MODE_RESET | DOC_MODE_MDWREN | DOC_MODE_RST_LAT |			DOC_MODE_BDECT;		WriteDOC(tmp, window, Mplus_DOCControl);		WriteDOC(~tmp, window, Mplus_CtrlConfirm);			mdelay(1);		/* Enable the DiskOnChip ASIC */		tmp = DOC_MODE_NORMAL | DOC_MODE_MDWREN | DOC_MODE_RST_LAT |			DOC_MODE_BDECT;		WriteDOC(tmp, window, Mplus_DOCControl);		WriteDOC(~tmp, window, Mplus_CtrlConfirm);		mdelay(1);#endif /* !DOC_PASSIVE_PROBE */			ChipID = ReadDOC(window, ChipID);		switch (ChipID) {		case DOC_ChipID_DocMilPlus16:		case DOC_ChipID_DocMilPlus32:			/* Check the TOGGLE bit in the toggle register */			tmp  = ReadDOC(window, Mplus_Toggle) & DOC_TOGGLE_BIT;			tmpb = ReadDOC(window, Mplus_Toggle) & DOC_TOGGLE_BIT;			tmpc = ReadDOC(window, Mplus_Toggle) & DOC_TOGGLE_BIT;			if (tmp != tmpb && tmp == tmpc)					return ChipID;		default:			break;		}		/* FALL TRHU */	default:#ifdef CONFIG_MTD_DOCPROBE_55AA		printk(KERN_DEBUG "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){	void __iomem *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 = ioremap(physadr, DOC_IOREMAP_LEN);		if (!docptr)		return;		if ((ChipID = doccheck(docptr, physadr))) {		if (ChipID == DOC_ChipID_Doc2kTSOP) {			/* Remove this at your own peril. The hardware driver works but nothing prevents you from erasing bad blocks */			printk(KERN_NOTICE "Refusing to drive DiskOnChip 2000 TSOP until Bad Block Table is correctly supported by INFTL\n");			iounmap(docptr);			return;		}		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(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_Doc2kTSOP:			name="2000 TSOP";			im_funcname = "DoC2k_init";			im_modname = "doc2000";			break;					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;		case DOC_ChipID_DocMilPlus16:		case DOC_ChipID_DocMilPlus32:			name="MillenniumPlus";			im_funcname = "DoCMilPlus_init";			im_modname = "doc2001plus";			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);		kfree(mtd);	}	iounmap(docptr);}/**************************************************************************** * * Module stuff * ****************************************************************************/static 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] != 0xffffffff); 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");	return -EAGAIN;}module_init(init_doc);MODULE_LICENSE("GPL");MODULE_AUTHOR("David Woodhouse <dwmw2@infradead.org>");MODULE_DESCRIPTION("Probe code for DiskOnChip 2000 and Millennium devices");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91福利资源站| 欧美成人一区二区三区在线观看| 天堂久久一区二区三区| 精品久久久久久最新网址| 色一情一乱一乱一91av| 国产综合色视频| 日韩不卡手机在线v区| 国产精品久久久久久户外露出 | 欧美日韩综合一区| 国产成人99久久亚洲综合精品| 亚洲午夜久久久久久久久电影网| 亚洲国产成人一区二区三区| 日韩亚洲电影在线| 欧美精品在线观看一区二区| 色噜噜狠狠色综合中国| voyeur盗摄精品| 国产精品亚洲午夜一区二区三区| 日韩精品每日更新| 亚洲国产精品尤物yw在线观看| 亚洲国产高清不卡| 国产日韩欧美不卡| 国产日产欧美一区| 久久久精品免费免费| 精品国产一区二区三区忘忧草| 日韩一区二区三区电影在线观看| 91精品1区2区| ww亚洲ww在线观看国产| 欧美一区二区三区四区五区| 欧美日韩一区精品| 在线观看国产日韩| 欧美日韩你懂得| 欧美日韩激情一区二区三区| 欧美亚洲图片小说| 欧美日韩情趣电影| 51久久夜色精品国产麻豆| 欧美午夜免费电影| 欧美精品18+| 欧美精品少妇一区二区三区| 欧美视频精品在线观看| 欧美日本韩国一区二区三区视频| 欧美日韩免费一区二区三区视频| 欧美日韩在线免费视频| 欧美精品黑人性xxxx| 日韩视频一区在线观看| 欧美成人a在线| 久久午夜色播影院免费高清| 国产欧美一区二区精品性色| 国产欧美精品一区二区色综合 | 国产片一区二区三区| 国产片一区二区| 亚洲色图另类专区| 亚洲综合色区另类av| 日韩经典一区二区| 激情成人综合网| 成人福利电影精品一区二区在线观看| 成人免费看片app下载| 97精品视频在线观看自产线路二 | 久久久久国产免费免费| 欧美国产97人人爽人人喊| 综合激情成人伊人| 午夜视黄欧洲亚洲| 久久99最新地址| 成人激情免费网站| 欧美视频一区二区在线观看| 日韩欧美一区二区免费| 国产午夜久久久久| 男女男精品视频| 国产成人在线观看| 欧美亚洲动漫精品| 久久精品夜色噜噜亚洲a∨| 国产精品久久久久aaaa樱花| 亚洲电影一区二区| 精品一区二区三区免费观看| 不卡高清视频专区| 欧美日韩一区精品| 欧美国产欧美综合| 亚洲成人免费视| 成人精品免费网站| 欧美一区在线视频| 国产精品成人免费精品自在线观看| 亚洲成人午夜电影| 国产成人精品一区二区三区四区 | 欧美军同video69gay| 国产无遮挡一区二区三区毛片日本 | 欧美日韩一区在线| 久久美女艺术照精彩视频福利播放| 亚洲精品精品亚洲| 激情五月激情综合网| 在线观看不卡一区| 中文字幕不卡三区| 美女mm1313爽爽久久久蜜臀| 99久久综合狠狠综合久久| 678五月天丁香亚洲综合网| 中文字幕一区不卡| 国产综合久久久久影院| 在线视频你懂得一区| 久久精品视频在线看| 日韩在线一区二区| 91精品福利在线| 国产女同性恋一区二区| 人妖欧美一区二区| 欧美视频一区在线观看| 中文字幕一区在线| 国产麻豆日韩欧美久久| 在线播放中文一区| 一区二区免费在线播放| 丁香婷婷深情五月亚洲| 精品国产免费一区二区三区四区| 亚洲国产精品天堂| 色综合久久天天| 亚洲国产成人在线| 国产成人午夜视频| 久久嫩草精品久久久精品一| 日韩av电影天堂| 欧美激情在线看| 国产乱理伦片在线观看夜一区| 7777精品伊人久久久大香线蕉| 亚洲综合成人在线| 亚洲va欧美va天堂v国产综合| 亚洲成人av电影在线| 亚洲va韩国va欧美va精品| 国产91露脸合集magnet| 精品国产3级a| 久久电影国产免费久久电影 | 色av一区二区| 中文字幕一区二区5566日韩| 粉嫩嫩av羞羞动漫久久久| 精品日韩一区二区| 极品瑜伽女神91| 精品国产乱码久久久久久影片| 秋霞午夜av一区二区三区| 美腿丝袜亚洲色图| 欧美视频一区二| 亚洲成人综合网站| 7777精品伊人久久久大香线蕉的 | 成人精品电影在线观看| 亚洲黄色免费网站| 91精品国产色综合久久ai换脸 | 91成人在线观看喷潮| 日韩精品电影在线观看| 国产欧美日韩另类一区| 日本韩国一区二区三区| 日本欧美一区二区| 国产精品色眯眯| 51精品视频一区二区三区| 国产剧情一区二区| 一区二区三区日韩在线观看| 欧美一区二区啪啪| 99精品欧美一区二区三区综合在线| 亚洲综合成人网| 久久久www免费人成精品| 一本大道久久a久久精品综合| 蜜臀av亚洲一区中文字幕| 中文字幕不卡三区| 日韩一区二区高清| 99精品视频一区| 国产在线乱码一区二区三区| 亚洲日本护士毛茸茸| 精品处破学生在线二十三| 色综合久久久久网| 国产一区999| 亚洲成人动漫av| 亚洲视频香蕉人妖| 久久免费美女视频| 欧美一区二区女人| 在线免费一区三区| 国产ts人妖一区二区| 美女视频黄免费的久久| 亚洲国产一区二区三区青草影视| 欧美激情中文不卡| 精品久久五月天| 欧美精品黑人性xxxx| 在线视频一区二区三区| 国产69精品久久99不卡| 美女www一区二区| 亚洲第一福利一区| 日韩一区有码在线| 国产嫩草影院久久久久| 精品国产免费视频| 欧美一级高清片| 欧美精品色综合| 欧美性感一类影片在线播放| 9i看片成人免费高清| 国产麻豆欧美日韩一区| 久久国产尿小便嘘嘘| 亚洲bt欧美bt精品| 一区二区三区四区在线播放| 国产精品国产三级国产a| 国产性色一区二区| 精品动漫一区二区三区在线观看| 91精品国产综合久久久久久漫画 | 精品国产伦一区二区三区观看体验| 欧美精品 日韩| 欧美日韩国产综合草草| 在线免费观看日本欧美| 色先锋久久av资源部| 99精品欧美一区二区蜜桃免费| 国产一区二区中文字幕| 国产精品中文字幕一区二区三区| 韩国成人精品a∨在线观看|