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

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

?? docprobe.c

?? mtd 模塊 good for you
?? 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.33 2003/01/24 14:02:47 dwmw2 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,        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	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一区二区三区免费野_久草精品视频
日韩精品一区二区三区在线| 99精品欧美一区二区三区综合在线| 色婷婷亚洲精品| 一区二区免费看| 欧美日韩国产影片| 蜜臀av性久久久久蜜臀aⅴ四虎| 日韩一区二区高清| 国产精品一区二区在线看| 久久日韩粉嫩一区二区三区| 成人深夜福利app| 亚洲六月丁香色婷婷综合久久 | 精品成人在线观看| 国产一区二区三区不卡在线观看 | 欧美精品视频www在线观看 | 亚洲婷婷综合色高清在线| 91在线观看地址| 日韩激情一二三区| 26uuu久久综合| av福利精品导航| 日韩国产欧美在线视频| 国产午夜精品福利| 在线观看不卡视频| 加勒比av一区二区| 亚洲欧美日韩一区二区| 欧美裸体一区二区三区| 国产麻豆日韩欧美久久| 一区二区不卡在线播放| 欧美大度的电影原声| 北岛玲一区二区三区四区| 亚洲一区二区三区三| 2024国产精品| 色综合天天综合在线视频| 免费欧美在线视频| 亚洲精品国产视频| 精品国产三级电影在线观看| 91黄色激情网站| 国精品**一区二区三区在线蜜桃| 亚洲免费在线电影| 欧美videofree性高清杂交| fc2成人免费人成在线观看播放| 日韩成人午夜精品| 亚洲色图19p| 国产日韩欧美麻豆| 欧美一区二区视频网站| 色婷婷av久久久久久久| 国产精品18久久久久久久久久久久| 亚洲一区二区三区免费视频| 久久精品日韩一区二区三区| 欧美人与z0zoxxxx视频| 99riav一区二区三区| 狠狠色伊人亚洲综合成人| 亚洲小说欧美激情另类| 国产精品高潮呻吟久久| 久久久久久亚洲综合| 欧美一区二区三区在线观看视频 | 欧美系列在线观看| 不卡视频一二三四| 国产精品中文字幕日韩精品| 秋霞午夜av一区二区三区| 亚洲一卡二卡三卡四卡五卡| 椎名由奈av一区二区三区| 国产情人综合久久777777| 日韩视频一区二区在线观看| 欧美日韩和欧美的一区二区| 色哟哟国产精品免费观看| 成人av中文字幕| 成熟亚洲日本毛茸茸凸凹| 国产一区二区成人久久免费影院| 久久精品国产在热久久| 裸体健美xxxx欧美裸体表演| 亚洲小说春色综合另类电影| 亚洲一区影音先锋| 亚洲自拍另类综合| 亚洲精品久久嫩草网站秘色| 亚洲天堂中文字幕| 亚洲精品视频在线观看网站| 136国产福利精品导航| 中文字幕一区二区三区精华液| 国产精品美女久久福利网站| 国产精品久久久久精k8 | 久久久久久久久久久久久久久99 | 亚洲国产精品成人综合色在线婷婷| 欧美电视剧免费观看| 欧美tickling挠脚心丨vk| 日韩一区二区三区视频| 日韩一区二区三区四区 | 中文字幕av资源一区| 欧美国产精品久久| 国产精品麻豆视频| 亚洲人妖av一区二区| 亚洲男同性恋视频| 亚洲第一福利一区| 极品少妇xxxx偷拍精品少妇| 国产高清不卡一区二区| 北条麻妃一区二区三区| 欧美曰成人黄网| 欧美sm美女调教| 中文字幕av一区二区三区高| 一区二区欧美国产| 麻豆成人av在线| 国产白丝精品91爽爽久久| 99亚偷拍自图区亚洲| 欧美久久久久久久久| 精品99999| **性色生活片久久毛片| 亚洲成人在线免费| 国产在线精品免费| 91捆绑美女网站| 欧美精品日韩综合在线| 久久久综合视频| 中文字幕一区二区三区四区 | 久久老女人爱爱| 亚洲日本va在线观看| 久久精品国产免费看久久精品| 成人在线综合网站| 91精品国产综合久久小美女| 国产午夜精品一区二区三区视频 | 日本伊人色综合网| 风流少妇一区二区| 欧美日韩精品电影| 国产欧美日韩卡一| 日本va欧美va精品| 不卡视频在线看| 欧美成人女星排行榜| 亚洲精品午夜久久久| 激情综合色丁香一区二区| 色国产精品一区在线观看| 欧美大片免费久久精品三p| 又紧又大又爽精品一区二区| 韩国三级在线一区| 欧美亚洲国产一区二区三区va | 国产美女视频一区| 欧美在线不卡视频| 国产精品美女一区二区| 精一区二区三区| 欧美日韩免费电影| 中文字幕在线播放不卡一区| 激情综合网激情| 91精品国产综合久久精品性色| 国产精品久久久99| 激情另类小说区图片区视频区| 欧美性一级生活| 中文字幕一区二区三区蜜月| 国产乱淫av一区二区三区 | 国产精品88av| 日韩美女视频一区二区在线观看| 亚洲bt欧美bt精品777| 色88888久久久久久影院野外| 欧美高清在线一区二区| 麻豆精品视频在线观看视频| 777午夜精品免费视频| 亚洲国产一区二区在线播放| 99精品视频在线免费观看| 国产日韩精品一区二区三区| 蜜桃视频免费观看一区| 欧美精品色综合| 奇米色777欧美一区二区| 欧美日韩国产系列| 亚洲18色成人| 8x福利精品第一导航| 亚洲va欧美va国产va天堂影院| 一本一道波多野结衣一区二区| 国产精品久久久久久久久免费桃花| 国产寡妇亲子伦一区二区| 久久亚区不卡日本| 国产美女视频一区| 国产精品亲子伦对白| av成人免费在线| 亚洲三级在线免费| 精品视频123区在线观看| 亚洲国产毛片aaaaa无费看| 在线欧美一区二区| 亚洲不卡在线观看| 欧美一级理论片| 久久精品国产免费| 久久久高清一区二区三区| 国产成人亚洲综合a∨猫咪| 国产精品理论片在线观看| 不卡影院免费观看| 一区二区三区成人| 欧美日韩国产一区二区三区地区| 天天色天天操综合| 精品三级av在线| 国产91丝袜在线18| 一区二区在线看| 欧美精品久久一区二区三区| 奇米色一区二区| 国产亚洲欧美中文| 99re成人精品视频| 亚洲一区二区三区四区不卡| 日韩一区二区在线看片| 国产成人小视频| 亚洲综合一区在线| 日韩精品影音先锋| 成人精品视频一区二区三区| 亚洲欧美日韩国产一区二区三区| 欧美三级资源在线| 国产美女一区二区| 亚洲午夜一区二区| 亚洲精品一区二区三区在线观看|