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

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

?? diskonchip.c

?? UBOOT 源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	uint16_t mfrid;	int i;	/* Max 4 chips per floor on DiskOnChip 2000 */	doc->chips_per_floor = 4;	/* Find out what the first chip is */	mfrid = doc200x_ident_chip(mtd, 0);	/* Find how many chips in each floor. */	for (i = 1; i < 4; i++) {		if (doc200x_ident_chip(mtd, i) != mfrid)			break;	}	doc->chips_per_floor = i;	printk(KERN_DEBUG "Detected %d chips per floor.\n", i);}static int doc200x_wait(struct mtd_info *mtd, struct nand_chip *this, int state){	struct doc_priv *doc = this->priv;	int status;	DoC_WaitReady(doc);	this->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);	DoC_WaitReady(doc);	status = (int)this->read_byte(mtd);	return status;}static void doc2001_write_byte(struct mtd_info *mtd, u_char datum){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	WriteDOC(datum, docptr, CDSNSlowIO);	WriteDOC(datum, docptr, Mil_CDSN_IO);	WriteDOC(datum, docptr, WritePipeTerm);}static u_char doc2001_read_byte(struct mtd_info *mtd){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	/*ReadDOC(docptr, CDSNSlowIO); */	/* 11.4.5 -- delay twice to allow extended length cycle */	DoC_Delay(doc, 2);	ReadDOC(docptr, ReadPipeInit);	/*return ReadDOC(docptr, Mil_CDSN_IO); */	return ReadDOC(docptr, LastDataRead);}static void doc2001_writebuf(struct mtd_info *mtd,			     const u_char *buf, int len){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	int i;	for (i=0; i < len; i++)		WriteDOC_(buf[i], docptr, DoC_Mil_CDSN_IO + i);	/* Terminate write pipeline */	WriteDOC(0x00, docptr, WritePipeTerm);}static void doc2001_readbuf(struct mtd_info *mtd,			    u_char *buf, int len){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	int i;	/* Start read pipeline */	ReadDOC(docptr, ReadPipeInit);	for (i=0; i < len-1; i++)		buf[i] = ReadDOC(docptr, Mil_CDSN_IO + (i & 0xff));	/* Terminate read pipeline */	buf[i] = ReadDOC(docptr, LastDataRead);}static int doc2001_verifybuf(struct mtd_info *mtd,			     const u_char *buf, int len){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	int i;	/* Start read pipeline */	ReadDOC(docptr, ReadPipeInit);	for (i=0; i < len-1; i++)		if (buf[i] != ReadDOC(docptr, Mil_CDSN_IO)) {			ReadDOC(docptr, LastDataRead);			return i;		}	if (buf[i] != ReadDOC(docptr, LastDataRead))		return i;	return 0;}static u_char doc2001plus_read_byte(struct mtd_info *mtd){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	u_char ret;	ReadDOC(docptr, Mplus_ReadPipeInit);	ReadDOC(docptr, Mplus_ReadPipeInit);	ret = ReadDOC(docptr, Mplus_LastDataRead);	if (debug) printk("read_byte returns %02x\n", ret);	return ret;}static void doc2001plus_writebuf(struct mtd_info *mtd,			     const u_char *buf, int len){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	int i;	if (debug)printk("writebuf of %d bytes: ", len);	for (i=0; i < len; i++) {		WriteDOC_(buf[i], docptr, DoC_Mil_CDSN_IO + i);		if (debug && i < 16)			printk("%02x ", buf[i]);	}	if (debug) printk("\n");}static void doc2001plus_readbuf(struct mtd_info *mtd,			    u_char *buf, int len){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	int i;	if (debug)printk("readbuf of %d bytes: ", len);	/* Start read pipeline */	ReadDOC(docptr, Mplus_ReadPipeInit);	ReadDOC(docptr, Mplus_ReadPipeInit);	for (i=0; i < len-2; i++) {		buf[i] = ReadDOC(docptr, Mil_CDSN_IO);		if (debug && i < 16)			printk("%02x ", buf[i]);	}	/* Terminate read pipeline */	buf[len-2] = ReadDOC(docptr, Mplus_LastDataRead);	if (debug && i < 16)		printk("%02x ", buf[len-2]);	buf[len-1] = ReadDOC(docptr, Mplus_LastDataRead);	if (debug && i < 16)		printk("%02x ", buf[len-1]);	if (debug) printk("\n");}static int doc2001plus_verifybuf(struct mtd_info *mtd,			     const u_char *buf, int len){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	int i;	if (debug)printk("verifybuf of %d bytes: ", len);	/* Start read pipeline */	ReadDOC(docptr, Mplus_ReadPipeInit);	ReadDOC(docptr, Mplus_ReadPipeInit);	for (i=0; i < len-2; i++)		if (buf[i] != ReadDOC(docptr, Mil_CDSN_IO)) {			ReadDOC(docptr, Mplus_LastDataRead);			ReadDOC(docptr, Mplus_LastDataRead);			return i;		}	if (buf[len-2] != ReadDOC(docptr, Mplus_LastDataRead))		return len-2;	if (buf[len-1] != ReadDOC(docptr, Mplus_LastDataRead))		return len-1;	return 0;}static void doc2001plus_select_chip(struct mtd_info *mtd, int chip){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	int floor = 0;	if(debug)printk("select chip (%d)\n", chip);	if (chip == -1) {		/* Disable flash internally */		WriteDOC(0, docptr, Mplus_FlashSelect);		return;	}	floor = chip / doc->chips_per_floor;	chip -= (floor *  doc->chips_per_floor);	/* Assert ChipEnable and deassert WriteProtect */	WriteDOC((DOC_FLASH_CE), docptr, Mplus_FlashSelect);	this->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);	doc->curchip = chip;	doc->curfloor = floor;}static void doc200x_select_chip(struct mtd_info *mtd, int chip){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	int floor = 0;	if(debug)printk("select chip (%d)\n", chip);	if (chip == -1)		return;	floor = chip / doc->chips_per_floor;	chip -= (floor *  doc->chips_per_floor);	/* 11.4.4 -- deassert CE before changing chip */	doc200x_hwcontrol(mtd, NAND_CTL_CLRNCE);	WriteDOC(floor, docptr, FloorSelect);	WriteDOC(chip, docptr, CDSNDeviceSelect);	doc200x_hwcontrol(mtd, NAND_CTL_SETNCE);	doc->curchip = chip;	doc->curfloor = floor;}static void doc200x_hwcontrol(struct mtd_info *mtd, int cmd){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	switch(cmd) {	case NAND_CTL_SETNCE:		doc->CDSNControl |= CDSN_CTRL_CE;		break;	case NAND_CTL_CLRNCE:		doc->CDSNControl &= ~CDSN_CTRL_CE;		break;	case NAND_CTL_SETCLE:		doc->CDSNControl |= CDSN_CTRL_CLE;		break;	case NAND_CTL_CLRCLE:		doc->CDSNControl &= ~CDSN_CTRL_CLE;		break;	case NAND_CTL_SETALE:		doc->CDSNControl |= CDSN_CTRL_ALE;		break;	case NAND_CTL_CLRALE:		doc->CDSNControl &= ~CDSN_CTRL_ALE;		break;	case NAND_CTL_SETWP:		doc->CDSNControl |= CDSN_CTRL_WP;		break;	case NAND_CTL_CLRWP:		doc->CDSNControl &= ~CDSN_CTRL_WP;		break;	}	if (debug)printk("hwcontrol(%d): %02x\n", cmd, doc->CDSNControl);	WriteDOC(doc->CDSNControl, docptr, CDSNControl);	/* 11.4.3 -- 4 NOPs after CSDNControl write */	DoC_Delay(doc, 4);}static void doc2001plus_command (struct mtd_info *mtd, unsigned command, int column, int page_addr){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	/*	 * Must terminate write pipeline before sending any commands	 * to the device.	 */	if (command == NAND_CMD_PAGEPROG) {		WriteDOC(0x00, docptr, Mplus_WritePipeTerm);		WriteDOC(0x00, docptr, Mplus_WritePipeTerm);	}	/*	 * Write out the command to the device.	 */	if (command == NAND_CMD_SEQIN) {		int readcmd;		if (column >= mtd->oobblock) {			/* OOB area */			column -= mtd->oobblock;			readcmd = NAND_CMD_READOOB;		} else if (column < 256) {			/* First 256 bytes --> READ0 */			readcmd = NAND_CMD_READ0;		} else {			column -= 256;			readcmd = NAND_CMD_READ1;		}		WriteDOC(readcmd, docptr, Mplus_FlashCmd);	}	WriteDOC(command, docptr, Mplus_FlashCmd);	WriteDOC(0, docptr, Mplus_WritePipeTerm);	WriteDOC(0, docptr, Mplus_WritePipeTerm);	if (column != -1 || page_addr != -1) {		/* Serially input address */		if (column != -1) {			/* Adjust columns for 16 bit buswidth */			if (this->options & NAND_BUSWIDTH_16)				column >>= 1;			WriteDOC(column, docptr, Mplus_FlashAddress);		}		if (page_addr != -1) {			WriteDOC((unsigned char) (page_addr & 0xff), docptr, Mplus_FlashAddress);			WriteDOC((unsigned char) ((page_addr >> 8) & 0xff), docptr, Mplus_FlashAddress);			/* One more address cycle for higher density devices */			if (this->chipsize & 0x0c000000) {				WriteDOC((unsigned char) ((page_addr >> 16) & 0x0f), docptr, Mplus_FlashAddress);				printk("high density\n");			}		}		WriteDOC(0, docptr, Mplus_WritePipeTerm);		WriteDOC(0, docptr, Mplus_WritePipeTerm);		/* deassert ALE */		if (command == NAND_CMD_READ0 || command == NAND_CMD_READ1 || command == NAND_CMD_READOOB || command == NAND_CMD_READID)			WriteDOC(0, docptr, Mplus_FlashControl);	}	/*	 * program and erase have their own busy handlers	 * status and sequential in needs no delay	*/	switch (command) {	case NAND_CMD_PAGEPROG:	case NAND_CMD_ERASE1:	case NAND_CMD_ERASE2:	case NAND_CMD_SEQIN:	case NAND_CMD_STATUS:		return;	case NAND_CMD_RESET:		if (this->dev_ready)			break;		udelay(this->chip_delay);		WriteDOC(NAND_CMD_STATUS, docptr, Mplus_FlashCmd);		WriteDOC(0, docptr, Mplus_WritePipeTerm);		WriteDOC(0, docptr, Mplus_WritePipeTerm);		while ( !(this->read_byte(mtd) & 0x40));		return;	/* This applies to read commands */	default:		/*		 * If we don't have access to the busy pin, we apply the given		 * command delay		*/		if (!this->dev_ready) {			udelay (this->chip_delay);			return;		}	}	/* Apply this short delay always to ensure that we do wait tWB in	 * any case on any machine. */	ndelay (100);	/* wait until command is processed */	while (!this->dev_ready(mtd));}static int doc200x_dev_ready(struct mtd_info *mtd){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	if (DoC_is_MillenniumPlus(doc)) {		/* 11.4.2 -- must NOP four times before checking FR/B# */		DoC_Delay(doc, 4);		if ((ReadDOC(docptr, Mplus_FlashControl) & CDSN_CTRL_FR_B_MASK) != CDSN_CTRL_FR_B_MASK) {			if(debug)				printk("not ready\n");			return 0;		}		if (debug)printk("was ready\n");		return 1;	} else {		/* 11.4.2 -- must NOP four times before checking FR/B# */		DoC_Delay(doc, 4);		if (!(ReadDOC(docptr, CDSNControl) & CDSN_CTRL_FR_B)) {			if(debug)				printk("not ready\n");			return 0;		}		/* 11.4.2 -- Must NOP twice if it's ready */		DoC_Delay(doc, 2);		if (debug)printk("was ready\n");		return 1;	}}static int doc200x_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip){	/* This is our last resort if we couldn't find or create a BBT.  Just	   pretend all blocks are good. */	return 0;}static void doc200x_enable_hwecc(struct mtd_info *mtd, int mode){	struct nand_chip *this = mtd->priv;	struct doc_priv *doc = this->priv;	void __iomem *docptr = doc->virtadr;	/* Prime the ECC engine */	switch(mode) {	case NAND_ECC_READ:		WriteDOC(DOC_ECC_RESET, docptr, ECCConf);		WriteDOC(DOC_ECC_EN, docptr, ECCConf);		break;	case NAND_ECC_WRITE:		WriteDOC(DOC_ECC_RESET, docptr, ECCConf);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区免费看| 99riav久久精品riav| 国产精品一区二区视频| jlzzjlzz欧美大全| 精品国产青草久久久久福利| 亚洲欧洲一区二区三区| 精品一区二区三区免费播放| 欧美这里有精品| 久久精品一区蜜桃臀影院| 亚洲一区二区欧美| 成人av影视在线观看| 精品乱码亚洲一区二区不卡| 亚洲激情男女视频| 成人av电影在线网| 精品av综合导航| 日韩精品色哟哟| 在线观看一区日韩| 亚洲欧洲www| 国产精品12区| 26uuuu精品一区二区| 日本午夜一本久久久综合| 日本电影亚洲天堂一区| 国产精品的网站| 国产99久久久精品| 国产婷婷色一区二区三区| 久久精品国产**网站演员| 久久婷婷国产综合国色天香| 午夜成人免费视频| 欧美日韩在线一区二区| 亚洲人精品一区| 色综合视频一区二区三区高清| 中文幕一区二区三区久久蜜桃| 韩国女主播成人在线| 精品久久久久久亚洲综合网 | 337p亚洲精品色噜噜狠狠| 亚洲图片激情小说| 色狠狠一区二区三区香蕉| 亚洲同性同志一二三专区| 91免费在线视频观看| 亚洲人成网站精品片在线观看| 99精品久久99久久久久| 亚洲欧美在线观看| 日本久久电影网| 亚洲国产精品麻豆| 欧美一级爆毛片| 精品一区二区久久久| 国产亚洲一二三区| av在线不卡免费看| 一区二区三区精品视频| 欧美视频一二三区| 免费人成网站在线观看欧美高清| 日韩三级免费观看| 国产成人午夜99999| 亚洲欧洲另类国产综合| 色婷婷精品大在线视频| 婷婷久久综合九色综合伊人色| 日韩欧美专区在线| 丁香激情综合五月| 亚洲第一综合色| 精品91自产拍在线观看一区| 国产.欧美.日韩| 一区二区三区欧美日韩| 日韩欧美国产精品一区| 一本大道av伊人久久综合| 亚洲电影激情视频网站| 日韩免费看网站| 97久久超碰国产精品| 亚洲成av人影院| 久久久久综合网| 色88888久久久久久影院野外| 日韩avvvv在线播放| 日本一区二区视频在线观看| 在线观看免费一区| 国产米奇在线777精品观看| 亚洲靠逼com| 2021国产精品久久精品| 色天天综合色天天久久| 精品在线一区二区| 亚洲一区二区三区小说| 久久综合九色综合欧美就去吻 | 秋霞午夜鲁丝一区二区老狼| 亚洲国产精品成人综合色在线婷婷 | 日本不卡一区二区三区| 国产精品久久精品日日| 精品区一区二区| 欧美日韩一级二级| av一区二区三区在线| 秋霞电影网一区二区| 亚洲精品视频在线看| 久久久久久久久久久电影| 3atv在线一区二区三区| 色婷婷国产精品| 懂色av一区二区在线播放| 日本麻豆一区二区三区视频| 亚洲人成人一区二区在线观看 | 欧美中文字幕一区| 成人免费高清在线| 国产自产高清不卡| 欧美a级一区二区| 亚洲r级在线视频| 亚洲欧美日本在线| 日本一区二区视频在线观看| 日韩一区二区三区电影在线观看| 在线欧美日韩精品| 99精品视频一区二区| 国产一二精品视频| 国产一区二区视频在线| 蜜桃视频免费观看一区| 日韩精品五月天| 亚洲123区在线观看| 一区二区免费在线播放| 一区二区三区四区av| 国产精品国产自产拍高清av| 久久精品一二三| 欧美mv日韩mv亚洲| 久久一区二区三区四区| 久久这里只精品最新地址| 日韩欧美另类在线| wwwwww.欧美系列| 久久影院视频免费| 久久精品视频免费| 国产女人aaa级久久久级| 久久久亚洲精品石原莉奈| 久久精品一区二区三区av| 久久日韩粉嫩一区二区三区| 国产亚洲精久久久久久| 欧美激情中文不卡| 中文字幕日本不卡| 亚洲永久免费视频| 日韩精品电影在线观看| 免费在线视频一区| 国产毛片一区二区| 99久久综合色| 色狠狠桃花综合| 欧美猛男gaygay网站| 日韩一卡二卡三卡国产欧美| 精品蜜桃在线看| 国产精品丝袜在线| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美亚洲丝袜传媒另类| 91麻豆精品国产91久久久使用方法 | 香蕉乱码成人久久天堂爱免费| 日韩国产在线一| 国产综合色在线| 色综合久久久久综合体| 欧美精品成人一区二区三区四区| 欧美大片顶级少妇| 中文字幕中文在线不卡住| 午夜影院久久久| 国产老肥熟一区二区三区| 色综合天天天天做夜夜夜夜做| 欧美一区二区三区日韩| 国产亚洲精品久| 亚洲高清免费在线| 国产一区二区不卡| 欧美视频一区在线观看| 久久综合色播五月| 亚洲免费av高清| 精一区二区三区| 在线视频亚洲一区| 国产日韩欧美精品电影三级在线 | 亚洲人成网站精品片在线观看| 日韩精品久久理论片| 不卡视频免费播放| 91精品国产91热久久久做人人| 欧美—级在线免费片| 蜜臀99久久精品久久久久久软件| 波多野结衣91| 日韩午夜av一区| 亚洲在线观看免费| 成人av电影免费在线播放| 日韩欧美激情四射| 亚洲国产日日夜夜| 99久久99精品久久久久久| 精品粉嫩aⅴ一区二区三区四区| 亚洲电影一区二区三区| 成人黄色777网| 精品福利视频一区二区三区| 亚洲精品高清视频在线观看| 国产精品中文欧美| 亚洲一区二区三区影院| 欧美tickling挠脚心丨vk| 亚洲欧美偷拍卡通变态| 国产在线精品一区二区夜色| 99久久综合国产精品| 久久综合色8888| 奇米四色…亚洲| 欧美电影影音先锋| 亚洲一级电影视频| 色菇凉天天综合网| 国产精品久久久久久福利一牛影视 | 久久 天天综合| 欧美另类变人与禽xxxxx| 一区二区高清视频在线观看| 成人亚洲精品久久久久软件| 国产午夜亚洲精品理论片色戒| 蜜臀av在线播放一区二区三区| 欧美天堂亚洲电影院在线播放 | 久久先锋资源网| 国产制服丝袜一区|