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

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

?? mtd.patch

?? patches for linux-2.6.
?? PATCH
?? 第 1 頁 / 共 5 頁
字號:
+		if (chip->state != mode) { 			/* Someone's suspended the write. Sleep */ 			DECLARE_WAITQUEUE(wait, current); @@ -1331,23 +1311,22 @@ 		 		/* OK Still waiting */ 		if (time_after(jiffies, timeo)) {+			map_write(map, CMD(0x70), adr); 			chip->state = FL_STATUS; 			xip_enable(map, chip, adr);-			printk(KERN_ERR "waiting for chip to be ready timed out in word write\n");+			printk(KERN_ERR "%s: word write error (status timeout)\n", map->name); 			ret = -EIO; 			goto out; 		}  		/* Latency issues. Drop the lock, wait a while and retry */-		spin_unlock(chip->mutex); 		z++; 		UDELAY(map, chip, adr, 1);-		spin_lock(chip->mutex); 	} 	if (!z) { 		chip->word_write_time--; 		if (!chip->word_write_time)-			chip->word_write_time++;+			chip->word_write_time = 1; 	} 	if (z > 1)  		chip->word_write_time++;@@ -1355,19 +1334,31 @@ 	/* Done and happy. */ 	chip->state = FL_STATUS; -	/* check for lock bit */-	if (map_word_bitsset(map, status, CMD(0x02))) {-		/* clear status */+	/* check for errors */+	if (map_word_bitsset(map, status, CMD(0x1a))) {+		unsigned long chipstatus = MERGESTATUS(status);++		/* reset status */ 		map_write(map, CMD(0x50), adr);-		/* put back into read status register mode */ 		map_write(map, CMD(0x70), adr);-		ret = -EROFS;+		xip_enable(map, chip, adr);++		if (chipstatus & 0x02) {+			ret = -EROFS;+		} else if (chipstatus & 0x08) {+			printk(KERN_ERR "%s: word write error (bad VPP)\n", map->name);+			ret = -EIO;+		} else {+			printk(KERN_ERR "%s: word write error (status 0x%lx)\n", map->name, chipstatus);+			ret = -EINVAL;+		}++		goto out; 	}  	xip_enable(map, chip, adr);  out:	put_chip(map, chip, adr); 	spin_unlock(chip->mutex);- 	return ret; } @@ -1399,7 +1390,7 @@ 		datum = map_word_load_partial(map, datum, buf, gap, n);  		ret = do_write_oneword(map, &cfi->chips[chipnum],-					       bus_ofs, datum);+					       bus_ofs, datum, FL_WRITING); 		if (ret)  			return ret; @@ -1420,7 +1411,7 @@ 		map_word datum = map_word_load(map, buf);  		ret = do_write_oneword(map, &cfi->chips[chipnum],-				ofs, datum);+				       ofs, datum, FL_WRITING); 		if (ret) 			return ret; @@ -1444,7 +1435,7 @@ 		datum = map_word_load_partial(map, datum, buf, 0, len);  		ret = do_write_oneword(map, &cfi->chips[chipnum],-					       ofs, datum);+				       ofs, datum, FL_WRITING); 		if (ret)  			return ret; 		@@ -1456,19 +1447,23 @@   static int __xipram do_write_buffer(struct map_info *map, struct flchip *chip, -				    unsigned long adr, const u_char *buf, int len)+				    unsigned long adr, const struct kvec **pvec,+				    unsigned long *pvec_seek, int len) { 	struct cfi_private *cfi = map->fldrv_priv;-	map_word status, status_OK;+	map_word status, status_OK, write_cmd, datum; 	unsigned long cmd_adr, timeo;-	int wbufsize, z, ret=0, bytes, words;+	int wbufsize, z, ret=0, word_gap, words;+	const struct kvec *vec;+	unsigned long vec_seek;  	wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize; 	adr += chip->start; 	cmd_adr = adr & ~(wbufsize-1);-	+ 	/* Let's determine this according to the interleave only once */ 	status_OK = CMD(0x80);+	write_cmd = (cfi->cfiq->P_ID != 0x0200) ? CMD(0xe8) : CMD(0xe9);  	spin_lock(chip->mutex); 	ret = get_chip(map, chip, cmd_adr, FL_WRITING);@@ -1500,15 +1495,13 @@  	z = 0; 	for (;;) {-		map_write(map, CMD(0xe8), cmd_adr);+		map_write(map, write_cmd, cmd_adr);  		status = map_read(map, cmd_adr); 		if (map_word_andequal(map, status, status_OK, status_OK)) 			break; -		spin_unlock(chip->mutex); 		UDELAY(map, chip, cmd_adr, 1);-		spin_lock(chip->mutex);  		if (++z > 20) { 			/* Argh. Not ready for write to buffer */@@ -1520,44 +1513,68 @@ 			map_write(map, CMD(0x50), cmd_adr); 			map_write(map, CMD(0x70), cmd_adr); 			xip_enable(map, chip, cmd_adr);-			printk(KERN_ERR "Chip not ready for buffer write. status = %lx, Xstatus = %lx\n",-			       status.x[0], Xstatus.x[0]);+			printk(KERN_ERR "%s: Chip not ready for buffer write. status = %lx, Xstatus = %lx\n",+			       map->name, status.x[0], Xstatus.x[0]); 			ret = -EIO; 			goto out; 		} 	} +	/* Figure out the number of words to write */+	word_gap = (-adr & (map_bankwidth(map)-1));+	words = (len - word_gap + map_bankwidth(map) - 1) / map_bankwidth(map);+	if (!word_gap) {+		words--;+	} else {+		word_gap = map_bankwidth(map) - word_gap;+		adr -= word_gap;+		datum = map_word_ff(map);+	}+ 	/* Write length of data to come */-	bytes = len & (map_bankwidth(map)-1);-	words = len / map_bankwidth(map);-	map_write(map, CMD(words - !bytes), cmd_adr );+	map_write(map, CMD(words), cmd_adr );  	/* Write data */-	z = 0;-	while(z < words * map_bankwidth(map)) {-		map_word datum = map_word_load(map, buf);-		map_write(map, datum, adr+z);+	vec = *pvec;+	vec_seek = *pvec_seek;+	do {+		int n = map_bankwidth(map) - word_gap;+		if (n > vec->iov_len - vec_seek)+			n = vec->iov_len - vec_seek;+		if (n > len)+			n = len; -		z += map_bankwidth(map);-		buf += map_bankwidth(map);-	}+		if (!word_gap && len < map_bankwidth(map))+			datum = map_word_ff(map);+			+		datum = map_word_load_partial(map, datum,+					      vec->iov_base + vec_seek, +					      word_gap, n); -	if (bytes) {-		map_word datum;+		len -= n;+		word_gap += n;+		if (!len || word_gap == map_bankwidth(map)) {+			map_write(map, datum, adr);+			adr += map_bankwidth(map);+			word_gap = 0;+		} -		datum = map_word_ff(map);-		datum = map_word_load_partial(map, datum, buf, 0, bytes);-		map_write(map, datum, adr+z);-	}+		vec_seek += n;+		if (vec_seek == vec->iov_len) {+			vec++;+			vec_seek = 0;+		}+	} while (len);+	*pvec = vec;+	*pvec_seek = vec_seek;  	/* GO GO GO */ 	map_write(map, CMD(0xd0), cmd_adr); 	chip->state = FL_WRITING; -	spin_unlock(chip->mutex);-	INVALIDATE_CACHED_RANGE(map, adr, len);-	UDELAY(map, chip, cmd_adr, chip->buffer_write_time);-	spin_lock(chip->mutex);+	INVALIDATE_CACHE_UDELAY(map, chip, +				cmd_adr, len,+				chip->buffer_write_time);  	timeo = jiffies + (HZ/2); 	z = 0;@@ -1581,23 +1598,22 @@  		/* OK Still waiting */ 		if (time_after(jiffies, timeo)) {+			map_write(map, CMD(0x70), cmd_adr); 			chip->state = FL_STATUS; 			xip_enable(map, chip, cmd_adr);-			printk(KERN_ERR "waiting for chip to be ready timed out in bufwrite\n");+			printk(KERN_ERR "%s: buffer write error (status timeout)\n", map->name); 			ret = -EIO; 			goto out; 		} 		 		/* Latency issues. Drop the lock, wait a while and retry */-		spin_unlock(chip->mutex);-		UDELAY(map, chip, cmd_adr, 1); 		z++;-		spin_lock(chip->mutex);+		UDELAY(map, chip, cmd_adr, 1); 	} 	if (!z) { 		chip->buffer_write_time--; 		if (!chip->buffer_write_time)-			chip->buffer_write_time++;+			chip->buffer_write_time = 1; 	} 	if (z > 1)  		chip->buffer_write_time++;@@ -1605,13 +1621,26 @@ 	/* Done and happy. */  	chip->state = FL_STATUS; -	/* check for lock bit */-	if (map_word_bitsset(map, status, CMD(0x02))) {-		/* clear status */+	/* check for errors */+	if (map_word_bitsset(map, status, CMD(0x1a))) {+		unsigned long chipstatus = MERGESTATUS(status);++		/* reset status */ 		map_write(map, CMD(0x50), cmd_adr);-		/* put back into read status register mode */-		map_write(map, CMD(0x70), adr);-		ret = -EROFS;+		map_write(map, CMD(0x70), cmd_adr);+		xip_enable(map, chip, cmd_adr);++		if (chipstatus & 0x02) {+			ret = -EROFS;+		} else if (chipstatus & 0x08) {+			printk(KERN_ERR "%s: buffer write error (bad VPP)\n", map->name);+			ret = -EIO;+		} else {+			printk(KERN_ERR "%s: buffer write error (status 0x%lx)\n", map->name, chipstatus);+			ret = -EINVAL;+		}++		goto out; 	}  	xip_enable(map, chip, cmd_adr);@@ -1620,57 +1649,40 @@ 	return ret; } -static int cfi_intelext_write_buffers (struct mtd_info *mtd, loff_t to, -				       size_t len, size_t *retlen, const u_char *buf)+static int cfi_intelext_writev (struct mtd_info *mtd, const struct kvec *vecs,+				unsigned long count, loff_t to, size_t *retlen) { 	struct map_info *map = mtd->priv; 	struct cfi_private *cfi = map->fldrv_priv; 	int wbufsize = cfi_interleave(cfi) << cfi->cfiq->MaxBufWriteSize; 	int ret = 0; 	int chipnum;-	unsigned long ofs;+	unsigned long ofs, vec_seek, i;+	size_t len = 0;++	for (i = 0; i < count; i++)+		len += vecs[i].iov_len;  	*retlen = 0; 	if (!len) 		return 0;  	chipnum = to >> cfi->chipshift;-	ofs = to  - (chipnum << cfi->chipshift);--	/* If it's not bus-aligned, do the first word write */-	if (ofs & (map_bankwidth(map)-1)) {-		size_t local_len = (-ofs)&(map_bankwidth(map)-1);-		if (local_len > len)-			local_len = len;-		ret = cfi_intelext_write_words(mtd, to, local_len,-					       retlen, buf);-		if (ret)-			return ret;-		ofs += local_len;-		buf += local_len;-		len -= local_len;+	ofs = to - (chipnum << cfi->chipshift);+	vec_seek = 0; -		if (ofs >> cfi->chipshift) {-			chipnum ++;-			ofs = 0;-			if (chipnum == cfi->numchips)-				return 0;-		}-	}--	while(len) {+	do { 		/* We must not cross write block boundaries */ 		int size = wbufsize - (ofs & (wbufsize-1));  		if (size > len) 			size = len; 		ret = do_write_buffer(map, &cfi->chips[chipnum], -				      ofs, buf, size);+				      ofs, &vecs, &vec_seek, size); 		if (ret) 			return ret;  		ofs += size;-		buf += size; 		(*retlen) += size; 		len -= size; @@ -1680,10 +1692,22 @@ 			if (chipnum == cfi->numchips) 				return 0; 		}-	}+	} while (len);+ 	return 0; } +static int cfi_intelext_write_buffers (struct mtd_info *mtd, loff_t to,+				       size_t len, size_t *retlen, const u_char *buf)+{+	struct kvec vec;++	vec.iov_base = (void *) buf;+	vec.iov_len = len;++	return cfi_intelext_writev(mtd, &vec, 1, to, retlen);+}+ static int __xipram do_erase_oneblock(struct map_info *map, struct flchip *chip, 				      unsigned long adr, int len, void *thunk) {@@ -1720,10 +1744,9 @@ 	chip->state = FL_ERASING; 	chip->erase_suspended = 0; -	spin_unlock(chip->mutex);-	INVALIDATE_CACHED_RANGE(map, adr, len);-	UDELAY(map, chip, adr, chip->erase_time*1000/2);-	spin_lock(chip->mutex);+	INVALIDATE_CACHE_UDELAY(map, chip,+				adr, len,+				chip->erase_time*1000/2);  	/* FIXME. Use a timer to check this, and return immediately. */ 	/* Once the state machine's known to be working I'll do that */@@ -1753,24 +1776,16 @@ 		 		/* OK Still waiting */ 		if (time_after(jiffies, timeo)) {-			map_word Xstatus; 			map_write(map, CMD(0x70), adr); 			chip->state = FL_STATUS;-			Xstatus = map_read(map, adr);-			/* Clear status bits */-			map_write(map, CMD(0x50), adr);-			map_write(map, CMD(0x70), adr); 			xip_enable(map, chip, adr);-			printk(KERN_ERR "waiting for erase at %08lx to complete timed out. status = %lx, Xstatus = %lx.\n",-			       adr, status.x[0], Xstatus.x[0]);+			printk(KERN_ERR "%s: block erase error: (status timeout)\n", map->name); 			ret = -EIO; 			goto out; 		}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人综合亚洲网站| 亚洲国产精品一区二区www| 午夜欧美2019年伦理| 成人性生交大片| 欧美国产丝袜视频| 美女免费视频一区二区| 91激情在线视频| 中文乱码免费一区二区| 久久不见久久见免费视频7 | 成人精品国产免费网站| 欧美酷刑日本凌虐凌虐| 亚洲一区二区精品视频| 色94色欧美sute亚洲13| 国产精品久久久久久久浪潮网站| 国内不卡的二区三区中文字幕 | 国产69精品久久777的优势| 91精品国产高清一区二区三区| 久久国产精品露脸对白| 欧美肥大bbwbbw高潮| 日韩激情视频在线观看| 欧美一卡二卡三卡| 狠狠色2019综合网| 亚洲黄色录像片| 看电影不卡的网站| 精品国产一区二区三区四区四| 亚洲国产综合色| 日韩一区二区三区视频| 精品午夜一区二区三区在线观看| 国产亚洲午夜高清国产拍精品| 豆国产96在线|亚洲| 亚洲三级小视频| 欧美精品丝袜久久久中文字幕| 国产在线观看一区二区| 成人免费在线视频观看| 精品卡一卡二卡三卡四在线| av一二三不卡影片| 精品在线播放免费| 亚洲成人在线观看视频| 国产精品美女久久久久久久久久久| 成人深夜福利app| 激情图片小说一区| 男女视频一区二区| 亚洲一区二区在线观看视频 | 精品电影一区二区三区| 欧美色综合影院| 色综合欧美在线| 色综合中文字幕| 波多野结衣的一区二区三区| 精品在线一区二区三区| 久久精品国产一区二区三| 亚洲午夜激情av| 一区二区激情小说| 国产精品久久久久一区二区三区共| 亚洲精品高清在线观看| 国产成人在线视频网址| 这里只有精品电影| 亚洲女性喷水在线观看一区| 亚洲欧美日韩一区二区三区在线观看| 奇米影视7777精品一区二区| 色婷婷久久综合| 亚洲国产精品久久人人爱蜜臀 | 日日夜夜一区二区| 成人听书哪个软件好| 欧美影院午夜播放| 日本一区二区三区国色天香| 一区二区三区久久久| 成人国产精品视频| 成人免费毛片片v| 色av成人天堂桃色av| 国产精品美日韩| 97久久超碰国产精品电影| 在线免费亚洲电影| 91在线视频在线| 亚洲成人免费观看| 国产精品不卡一区| 亚洲激情男女视频| 成人性色生活片| 欧美va天堂va视频va在线| 日韩伦理电影网| 国产一区在线不卡| 欧美一区二区视频在线观看| 亚洲丝袜制服诱惑| 成人91在线观看| 国产亚洲女人久久久久毛片| 日韩高清在线观看| 欧美巨大另类极品videosbest| 中文字幕永久在线不卡| 国产综合成人久久大片91| 日韩三级在线观看| 老汉av免费一区二区三区| 欧美高清精品3d| 美女免费视频一区| 欧美mv日韩mv亚洲| 国模一区二区三区白浆| 精品国产亚洲在线| 国产一区激情在线| 国产日韩精品一区二区三区在线| 国产一区二区三区在线看麻豆 | 奇米影视一区二区三区| 欧美一级视频精品观看| 67194成人在线观看| www日韩大片| 国产精品麻豆一区二区| 国产精品色噜噜| 麻豆国产欧美一区二区三区| 欧美日韩精品一区二区三区蜜桃 | 亚洲精品在线观| 国产成人精品网址| 亚洲欧美一区二区三区国产精品 | 久久99久久99精品免视看婷婷| 日韩精品一区二区三区视频在线观看| 麻豆一区二区三区| 国产精品久久久久影院老司| 欧美在线一区二区三区| 久久精品久久99精品久久| 国产精品无码永久免费888| 在线国产亚洲欧美| 久久国产福利国产秒拍| 亚洲精品精品亚洲| 精品国产三级a在线观看| 99久久精品国产网站| 国产露脸91国语对白| 亚洲夂夂婷婷色拍ww47| 久久精品人人爽人人爽| 欧美人伦禁忌dvd放荡欲情| 99久久99久久久精品齐齐| 韩国视频一区二区| 日本午夜一本久久久综合| 亚洲乱码国产乱码精品精可以看 | 激情综合网天天干| 午夜精品久久久久影视| 国产蜜臀97一区二区三区| 日韩欧美www| 欧美xxx久久| 欧美videossexotv100| 91精品欧美福利在线观看| 精品视频一区二区不卡| 色综合欧美在线| 91啦中文在线观看| 91麻豆精品在线观看| 91麻豆国产福利在线观看| av在线不卡观看免费观看| 成人av在线电影| 日韩精品中午字幕| 韩国欧美一区二区| 精品久久久久久亚洲综合网| 成人avav影音| 99久久久免费精品国产一区二区| 福利一区二区在线观看| 91视频在线观看| 97se亚洲国产综合在线| 欧美中文一区二区三区| 制服丝袜亚洲精品中文字幕| 精品久久一二三区| 国产精品久久久久久久久图文区 | 91视频免费观看| 国产在线乱码一区二区三区| 国产精品视频免费| 亚洲人成7777| 久久99精品国产| 91久久国产最好的精华液| 3d动漫精品啪啪| 国产精品国产精品国产专区不片| 一区二区三区四区精品在线视频| 奇米精品一区二区三区在线观看 | 亚洲精品一区二区精华| 成人免费一区二区三区视频| 亚洲一区二区三区四区五区中文| 久久精品国产精品亚洲综合| 在线影视一区二区三区| 99久久夜色精品国产网站| 色综合久久久久网| 国产亚洲欧美日韩日本| 美女国产一区二区三区| 欧美日韩国产区一| 一个色妞综合视频在线观看| 国产黄人亚洲片| 久久综合九色综合欧美亚洲| 肉肉av福利一精品导航| 欧美色爱综合网| 亚洲永久免费视频| 福利视频网站一区二区三区| 日韩久久久精品| 成人在线视频一区二区| 欧美96一区二区免费视频| 欧美va亚洲va香蕉在线| 国产成人免费在线观看不卡| 亚洲精品成a人| 国产欧美日本一区二区三区| 欧美美女一区二区三区| caoporn国产一区二区| 九九热在线视频观看这里只有精品| 国产精品久久久久久亚洲伦| 精品国产一区久久| 欧美高清hd18日本| www..com久久爱| 99久久国产综合精品色伊| 久久99九九99精品| 亚洲欧美成人一区二区三区| 国产精品无圣光一区二区|