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

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

?? mtd.patch

?? patches for linux-2.6.
?? PATCH
?? 第 1 頁 / 共 5 頁
字號:
 			rinfo = (struct cfi_intelext_regioninfo *)&extp->extra[extra_size];@@ -274,6 +308,9 @@ 				      * sizeof(struct cfi_intelext_blockinfo); 		} +		if (extp->MinorVersion >= '4')+			extra_size += sizeof(struct cfi_intelext_programming_regioninfo);+ 		if (extp_size < sizeof(*extp) + extra_size) { 			need_more: 			extp_size = sizeof(*extp) + extra_size;@@ -324,7 +361,9 @@ 	mtd->resume  = cfi_intelext_resume; 	mtd->flags   = MTD_CAP_NORFLASH; 	mtd->name    = map->name;-	++	mtd->reboot_notifier.notifier_call = cfi_intelext_reboot;+ 	if (cfi->cfi_mode == CFI_MODE_CFI) { 		/*  		 * It's a real CFI chip, not one for which the probe@@ -416,15 +455,19 @@ 	}  	for (i=0; i<mtd->numeraseregions;i++){-		printk(KERN_DEBUG "%d: offset=0x%x,size=0x%x,blocks=%d\n",+		printk(KERN_DEBUG "erase region %d: offset=0x%x,size=0x%x,blocks=%d\n", 		       i,mtd->eraseregions[i].offset, 		       mtd->eraseregions[i].erasesize, 		       mtd->eraseregions[i].numblocks); 	} -#if 0-	mtd->read_user_prot_reg = cfi_intelext_read_user_prot_reg;+#ifdef CONFIG_MTD_OTP 	mtd->read_fact_prot_reg = cfi_intelext_read_fact_prot_reg;+	mtd->read_user_prot_reg = cfi_intelext_read_user_prot_reg;+	mtd->write_user_prot_reg = cfi_intelext_write_user_prot_reg;+	mtd->lock_user_prot_reg = cfi_intelext_lock_user_prot_reg;+	mtd->get_fact_prot_info = cfi_intelext_get_fact_prot_info;+	mtd->get_user_prot_info = cfi_intelext_get_user_prot_info; #endif  	/* This function has the potential to distort the reality@@ -433,6 +476,7 @@ 		goto setup_err;  	__module_get(THIS_MODULE);+	register_reboot_notifier(&mtd->reboot_notifier); 	return mtd;   setup_err:@@ -463,7 +507,7 @@ 	 * arrangement at this point. This can be rearranged in the future 	 * if someone feels motivated enough.  --nico 	 */-	if (extp && extp->MajorVersion == '1' && extp->MinorVersion == '3'+	if (extp && extp->MajorVersion == '1' && extp->MinorVersion >= '3' 	    && extp->FeatureSupport & (1 << 9)) { 		struct cfi_private *newcfi; 		struct flchip *chip;@@ -471,15 +515,20 @@ 		int offs, numregions, numparts, partshift, numvirtchips, i, j;  		/* Protection Register info */-		offs = (extp->NumProtectionFields - 1) * (4 + 6);+		offs = (extp->NumProtectionFields - 1) *+		       sizeof(struct cfi_intelext_otpinfo);  		/* Burst Read info */-		offs += 6;+		offs += (extp->MinorVersion < '4') ? 6 : 5;  		/* Number of partition regions */ 		numregions = extp->extra[offs]; 		offs += 1; +		/* skip the sizeof(partregion) field in CFI 1.4 */+		if (extp->MinorVersion >= '4')+			offs += 2;+ 		/* Number of hardware partitions */ 		numparts = 0; 		for (i = 0; i < numregions; i++) {@@ -491,6 +540,20 @@ 				  sizeof(struct cfi_intelext_blockinfo); 		} +		/* Programming Region info */+		if (extp->MinorVersion >= '4') {+			struct cfi_intelext_programming_regioninfo *prinfo;+			prinfo = (struct cfi_intelext_programming_regioninfo *)&extp->extra[offs];+			MTD_PROGREGION_SIZE(mtd) = cfi->interleave << prinfo->ProgRegShift;+			MTD_PROGREGION_CTRLMODE_VALID(mtd) = cfi->interleave * prinfo->ControlValid;+			MTD_PROGREGION_CTRLMODE_INVALID(mtd) = cfi->interleave * prinfo->ControlInvalid;+			mtd->flags |= MTD_PROGRAM_REGIONS;+			printk(KERN_DEBUG "%s: program region size/ctrl_valid/ctrl_inval = %d/%d/%d\n",+			       map->name, MTD_PROGREGION_SIZE(mtd),+			       MTD_PROGREGION_CTRLMODE_VALID(mtd),+			       MTD_PROGREGION_CTRLMODE_INVALID(mtd));+		}+ 		/* 		 * All functions below currently rely on all chips having 		 * the same geometry so we'll just assume that all hardware@@ -563,7 +626,7 @@  resettime: 	timeo = jiffies + HZ;  retry:-	if (chip->priv && (mode == FL_WRITING || mode == FL_ERASING)) {+	if (chip->priv && (mode == FL_WRITING || mode == FL_ERASING || mode == FL_OTP_WRITE)) { 		/* 		 * OK. We have possibility for contension on the write/erase 		 * operations which are global to the real chip and not per@@ -635,8 +698,8 @@ 				break;  			if (time_after(jiffies, timeo)) {-				printk(KERN_ERR "Waiting for chip to be ready timed out. Status %lx\n", -				       status.x[0]);+				printk(KERN_ERR "%s: Waiting for chip to be ready timed out. Status %lx\n", +				       map->name, status.x[0]); 				return -EIO; 			} 			spin_unlock(chip->mutex);@@ -683,8 +746,8 @@ 				map_write(map, CMD(0x70), adr); 				chip->state = FL_ERASING; 				chip->oldstate = FL_READY;-				printk(KERN_ERR "Chip not ready after erase "-				       "suspended: status = 0x%lx\n", status.x[0]);+				printk(KERN_ERR "%s: Chip not ready after erase "+				       "suspended: status = 0x%lx\n", map->name, status.x[0]); 				return -EIO; 			} @@ -791,7 +854,7 @@ 		DISABLE_VPP(map); 		break; 	default:-		printk(KERN_ERR "put_chip() called with oldstate %d!!\n", chip->oldstate);+		printk(KERN_ERR "%s: put_chip() called with oldstate %d!!\n", map->name, chip->oldstate); 	} 	wake_up(&chip->wq); }@@ -807,10 +870,6 @@  * assembly to make sure inline functions were actually inlined and that gcc  * didn't emit calls to its own support functions). Also configuring MTD CFI  * support to a single buswidth and a single interleave is also recommended.- * Note that not only IRQs are disabled but the preemption count is also- * increased to prevent other locking primitives (namely spin_unlock) from- * decrementing the preempt count to zero and scheduling the CPU away while- * not in array mode.  */  static void xip_disable(struct map_info *map, struct flchip *chip,@@ -818,7 +877,6 @@ { 	/* TODO: chips with no XIP use should ignore and return */ 	(void) map_read(map, adr); /* ensure mmu mapping is up to date */-	preempt_disable(); 	local_irq_disable(); } @@ -831,9 +889,8 @@ 		chip->state = FL_READY; 	} 	(void) map_read(map, adr);-	asm volatile (".rep 8; nop; .endr"); /* fill instruction prefetch */+	xip_iprefetch(); 	local_irq_enable();-	preempt_enable(); }  /*@@ -909,7 +966,7 @@ 			(void) map_read(map, adr); 			asm volatile (".rep 8; nop; .endr"); 			local_irq_enable();-			preempt_enable();+			spin_unlock(chip->mutex); 			asm volatile (".rep 8; nop; .endr"); 			cond_resched(); @@ -919,15 +976,15 @@ 			 * a suspended erase state.  If so let's wait 			 * until it's done. 			 */-			preempt_disable();+			spin_lock(chip->mutex); 			while (chip->state != newstate) { 				DECLARE_WAITQUEUE(wait, current); 				set_current_state(TASK_UNINTERRUPTIBLE); 				add_wait_queue(&chip->wq, &wait);-				preempt_enable();+				spin_unlock(chip->mutex); 				schedule(); 				remove_wait_queue(&chip->wq, &wait);-				preempt_disable();+				spin_lock(chip->mutex); 			} 			/* Disallow XIP again */ 			local_irq_disable();@@ -956,12 +1013,14 @@  * The INVALIDATE_CACHED_RANGE() macro is normally used in parallel while  * the flash is actively programming or erasing since we have to poll for  * the operation to complete anyway.  We can't do that in a generic way with- * a XIP setup so do it before the actual flash operation in this case.+ * a XIP setup so do it before the actual flash operation in this case+ * and stub it out from INVALIDATE_CACHE_UDELAY.  */-#undef INVALIDATE_CACHED_RANGE-#define INVALIDATE_CACHED_RANGE(x...)-#define XIP_INVAL_CACHED_RANGE(map, from, size) \-	do { if(map->inval_cache) map->inval_cache(map, from, size); } while(0)+#define XIP_INVAL_CACHED_RANGE(map, from, size)  \+	INVALIDATE_CACHED_RANGE(map, from, size)++#define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec)  \+	UDELAY(map, chip, adr, usec)  /*  * Extra notes:@@ -984,11 +1043,23 @@  #define xip_disable(map, chip, adr) #define xip_enable(map, chip, adr)--#define UDELAY(map, chip, adr, usec)  cfi_udelay(usec)- #define XIP_INVAL_CACHED_RANGE(x...) +#define UDELAY(map, chip, adr, usec)  \+do {  \+	spin_unlock(chip->mutex);  \+	cfi_udelay(usec);  \+	spin_lock(chip->mutex);  \+} while (0)++#define INVALIDATE_CACHE_UDELAY(map, chip, adr, len, usec)  \+do {  \+	spin_unlock(chip->mutex);  \+	INVALIDATE_CACHED_RANGE(map, adr, len);  \+	cfi_udelay(usec);  \+	spin_lock(chip->mutex);  \+} while (0)+ #endif  static int do_point_onechip (struct map_info *map, struct flchip *chip, loff_t adr, size_t len)@@ -1094,7 +1165,7 @@ 			if(chip->ref_point_counter == 0) 				chip->state = FL_READY; 		} else-			printk(KERN_ERR "Warning: unpoint called on non pointed region\n"); /* Should this give an error? */+			printk(KERN_ERR "%s: Warning: unpoint called on non pointed region\n", map->name); /* Should this give an error? */  		put_chip(map, chip, chip->start); 		spin_unlock(chip->mutex);@@ -1176,121 +1247,31 @@ 	return ret; } -#if 0-static int __xipram cfi_intelext_read_prot_reg (struct mtd_info *mtd,-						loff_t from, size_t len,-						size_t *retlen,-						u_char *buf,-						int base_offst, int reg_sz)-{-	struct map_info *map = mtd->priv;-	struct cfi_private *cfi = map->fldrv_priv;-	struct cfi_pri_intelext *extp = cfi->cmdset_priv;-	struct flchip *chip;-	int ofs_factor = cfi->interleave * cfi->device_type;-	int count = len;-	int chip_num, offst;-	int ret;--	chip_num = ((unsigned int)from/reg_sz);-	offst = from - (reg_sz*chip_num)+base_offst;--	while (count) {-	/* Calculate which chip & protection register offset we need */--		if (chip_num >= cfi->numchips)-			goto out;--		chip = &cfi->chips[chip_num];-		-		spin_lock(chip->mutex);-		ret = get_chip(map, chip, chip->start, FL_JEDEC_QUERY);-		if (ret) {-			spin_unlock(chip->mutex);-			return (len-count)?:ret;-		}--		xip_disable(map, chip, chip->start);--		if (chip->state != FL_JEDEC_QUERY) {-			map_write(map, CMD(0x90), chip->start);-			chip->state = FL_JEDEC_QUERY;-		}--		while (count && ((offst-base_offst) < reg_sz)) {-			*buf = map_read8(map,(chip->start+((extp->ProtRegAddr+1)*ofs_factor)+offst));-			buf++;-			offst++;-			count--;-		}--		xip_enable(map, chip, chip->start);-		put_chip(map, chip, chip->start);-		spin_unlock(chip->mutex);--		/* Move on to the next chip */-		chip_num++;-		offst = base_offst;-	}-	- out:	-	return len-count;-}-	-static int cfi_intelext_read_user_prot_reg (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)-{-	struct map_info *map = mtd->priv;-	struct cfi_private *cfi = map->fldrv_priv;-	struct cfi_pri_intelext *extp=cfi->cmdset_priv;-	int base_offst,reg_sz;-	-	/* Check that we actually have some protection registers */-	if(!extp || !(extp->FeatureSupport&64)){-		printk(KERN_WARNING "%s: This flash device has no protection data to read!\n",map->name);-		return 0;-	}--	base_offst=(1<<extp->FactProtRegSize);-	reg_sz=(1<<extp->UserProtRegSize);--	return cfi_intelext_read_prot_reg(mtd, from, len, retlen, buf, base_offst, reg_sz);-}--static int cfi_intelext_read_fact_prot_reg (struct mtd_info *mtd, loff_t from, size_t len, size_t *retlen, u_char *buf)-{-	struct map_info *map = mtd->priv;-	struct cfi_private *cfi = map->fldrv_priv;-	struct cfi_pri_intelext *extp=cfi->cmdset_priv;-	int base_offst,reg_sz;-	-	/* Check that we actually have some protection registers */-	if(!extp || !(extp->FeatureSupport&64)){-		printk(KERN_WARNING "%s: This flash device has no protection data to read!\n",map->name);-		return 0;-	}--	base_offst=0;-	reg_sz=(1<<extp->FactProtRegSize);--	return cfi_intelext_read_prot_reg(mtd, from, len, retlen, buf, base_offst, reg_sz);-}-#endif- static int __xipram do_write_oneword(struct map_info *map, struct flchip *chip,-				     unsigned long adr, map_word datum)+				     unsigned long adr, map_word datum, int mode) { 	struct cfi_private *cfi = map->fldrv_priv;-	map_word status, status_OK;+	map_word status, status_OK, write_cmd; 	unsigned long timeo; 	int z, ret=0;  	adr += chip->start; -	/* Let's determine this according to the interleave only once */+	/* Let's determine those according to the interleave only once */ 	status_OK = CMD(0x80);+	switch (mode) {+	case FL_WRITING:+		write_cmd = (cfi->cfiq->P_ID != 0x0200) ? CMD(0x40) : CMD(0x41);+		break;+	case FL_OTP_WRITE:+		write_cmd = CMD(0xc0);+		break;+	default:+		return -EINVAL;+	}  	spin_lock(chip->mutex);-	ret = get_chip(map, chip, adr, FL_WRITING);+	ret = get_chip(map, chip, adr, mode); 	if (ret) { 		spin_unlock(chip->mutex); 		return ret;@@ -1299,19 +1280,18 @@ 	XIP_INVAL_CACHED_RANGE(map, adr, map_bankwidth(map)); 	ENABLE_VPP(map); 	xip_disable(map, chip, adr);-	map_write(map, CMD(0x40), adr);+	map_write(map, write_cmd, adr); 	map_write(map, datum, adr);-	chip->state = FL_WRITING;+	chip->state = mode; -	spin_unlock(chip->mutex);-	INVALIDATE_CACHED_RANGE(map, adr, map_bankwidth(map));-	UDELAY(map, chip, adr, chip->word_write_time);-	spin_lock(chip->mutex);+	INVALIDATE_CACHE_UDELAY(map, chip,+				adr, map_bankwidth(map),+				chip->word_write_time);  	timeo = jiffies + (HZ/2); 	z = 0; 	for (;;) {-		if (chip->state != FL_WRITING) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品情趣视频| 毛片av中文字幕一区二区| 日本aⅴ亚洲精品中文乱码| 成人视屏免费看| 欧美午夜精品一区二区三区| 久久影视一区二区| 日韩精品一二三区| 色综合久久中文字幕| 国产清纯美女被跳蛋高潮一区二区久久w| 夜色激情一区二区| 91玉足脚交白嫩脚丫在线播放| 精品av久久707| 日韩电影在线观看一区| 在线看国产一区二区| 国产精品久久久久9999吃药| 国产精品一区二区三区99| 日韩免费观看高清完整版| 亚洲成人动漫在线观看| 91九色02白丝porn| 亚洲欧美日韩在线| 91视视频在线直接观看在线看网页在线看| 欧美电影免费观看高清完整版 | 亚洲伦理在线精品| 国产一区亚洲一区| 欧美精品一区二区三区很污很色的| 亚洲国产一区二区三区| 在线免费视频一区二区| 亚洲国产一区在线观看| 欧美在线小视频| 一区二区三区美女视频| 色婷婷久久久综合中文字幕| 亚洲激情第一区| 91精彩视频在线| 一区二区三区欧美日| 91福利国产精品| 一区二区三区成人| 制服丝袜中文字幕一区| 日本成人在线视频网站| 精品久久久久久久久久久院品网 | 国产精品久久毛片a| 国产999精品久久久久久| 国产夜色精品一区二区av| 国产成人aaaa| 亚洲婷婷综合久久一本伊一区| 国产v日产∨综合v精品视频| 国产精品视频看| 色综合一区二区三区| 亚洲国产日韩一区二区| 欧美日韩国产一二三| 麻豆精品视频在线观看免费| 久久品道一品道久久精品| 成人av高清在线| 亚洲成人av电影在线| 日韩免费观看高清完整版| 国产成人亚洲精品青草天美| 亚洲欧美国产三级| 制服丝袜一区二区三区| 国产精品自拍在线| 亚洲视频在线观看一区| 欧美丰满美乳xxx高潮www| 国产乱妇无码大片在线观看| 亚洲欧美经典视频| 日韩一级精品视频在线观看| 粉嫩av一区二区三区粉嫩| 亚洲电影欧美电影有声小说| 欧美电视剧免费全集观看| 99久久久精品| 玖玖九九国产精品| 中文字幕日韩一区| 欧美电视剧在线看免费| 日本高清成人免费播放| 久久99蜜桃精品| 一区二区三区日本| 国产亚洲精久久久久久| 欧美日韩国产乱码电影| 国产成人免费在线| 日本强好片久久久久久aaa| 中文字幕视频一区二区三区久| 欧美日韩午夜精品| 不卡视频一二三四| 久久99久久久欧美国产| 一区二区三区丝袜| 亚洲国产经典视频| 欧美精品一区二区三区久久久| 色综合激情五月| 国产一区二区在线看| 午夜精品久久一牛影视| 最近日韩中文字幕| 久久久久久亚洲综合| 91精品国产色综合久久ai换脸| 91蜜桃网址入口| 国产99久久久精品| 精品亚洲成a人在线观看| 亚洲一区二区免费视频| 亚洲视频图片小说| 中文字幕巨乱亚洲| 国产日产欧美一区| 精品国产一区二区三区久久久蜜月 | 一本到不卡精品视频在线观看| 国产麻豆视频精品| 极品美女销魂一区二区三区| 日韩精品高清不卡| 亚洲一二三四区| 一区二区三区电影在线播| 亚洲人被黑人高潮完整版| 久久久www免费人成精品| 日韩视频在线永久播放| 欧美一区二区三区成人| 欧美日韩不卡一区二区| 欧美色综合天天久久综合精品| 日本乱码高清不卡字幕| 91麻豆.com| 色婷婷久久久久swag精品| 色综合激情久久| 欧美色图一区二区三区| 欧美性大战久久久| 欧美色区777第一页| 精品视频资源站| 欧美另类videos死尸| 欧美军同video69gay| 欧美一区二区视频免费观看| 5858s免费视频成人| 日韩免费视频一区| 久久久精品tv| 成人欧美一区二区三区1314| 亚洲视频一区二区在线观看| 亚洲自拍与偷拍| 日韩不卡免费视频| 国产一区二区剧情av在线| 国产不卡视频一区| 91激情在线视频| 欧美一级精品大片| 欧美经典一区二区三区| 亚洲女人的天堂| 日韩精品欧美成人高清一区二区| 日本91福利区| 国产a视频精品免费观看| 一本色道久久综合亚洲精品按摩| 欧美中文字幕一二三区视频| 91麻豆精品国产综合久久久久久| 日韩一区二区精品| 欧美国产1区2区| 午夜欧美在线一二页| 国产精品99久久久久久久女警| 成人18视频在线播放| 在线不卡一区二区| 久久久久久99精品| 亚洲国产精品久久不卡毛片| 麻豆国产精品官网| 99麻豆久久久国产精品免费优播| 欧美另类高清zo欧美| 国产午夜精品在线观看| 亚洲成人av免费| 国产91在线观看| 91精品国产日韩91久久久久久| 欧美激情一区在线| 亚洲成人免费视| 国产成人亚洲综合a∨猫咪| 欧美性大战久久| 国产精品高潮呻吟| 九九久久精品视频| 欧洲色大大久久| 国产精品视频一区二区三区不卡 | 亚洲乱码一区二区三区在线观看| 免费成人在线影院| 色视频一区二区| 国产精品网站在线播放| 亚洲成av人影院在线观看网| 成人午夜视频网站| 2017欧美狠狠色| 免费成人你懂的| 在线亚洲免费视频| 国产精品国产三级国产aⅴ中文| 久久99久久久欧美国产| 欧美日韩一区久久| 亚洲人成网站精品片在线观看| 另类专区欧美蜜桃臀第一页| 色婷婷久久一区二区三区麻豆| 亚洲国产激情av| 国产精品1024久久| 精品国产精品网麻豆系列| 日韩在线卡一卡二| 日本久久一区二区三区| 国产精品免费av| 国产精品系列在线播放| 精品黑人一区二区三区久久| 日韩电影在线免费看| 欧美精品日韩精品| 亚洲狠狠爱一区二区三区| 日本二三区不卡| 亚洲欧美日韩在线不卡| aaa亚洲精品| 亚洲欧洲日韩女同| 99精品视频中文字幕| 国产精品午夜在线| 不卡一区二区三区四区| 中文字幕在线观看不卡视频| 成人高清视频免费观看| 欧美激情一区二区| 91性感美女视频|