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

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

?? nand.c

?? linux和2410結(jié)合開發(fā) 用他可以生成2410所需的zImage文件
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* *  drivers/mtd/nand.c * *  Overview: *   This is the generic MTD driver for NAND flash devices. It should be *   capable of working with almost all NAND chips currently available. *    *	Additional technical information is available on *	http://www.linux-mtd.infradead.org/tech/nand.html *	 *  Copyright (C) 2000 Steven J. Hill (sjhill@realitydiluted.com) * 		  2002 Thomas Gleixner (tglx@linutronix.de) * *  10-29-2001  Thomas Gleixner (tglx@linutronix.de) * 		- Changed nand_chip structure for controlline function to *		support different hardware structures (Access to *		controllines ALE,CLE,NCE via hardware specific function.  *		- exit out of "failed erase block" changed, to avoid *		driver hangup *		- init_waitqueue_head added in function nand_scan !! * *  01-30-2002  Thomas Gleixner (tglx@linutronix.de) *		change in nand_writev to block invalid vecs entries * *  02-11-2002  Thomas Gleixner (tglx@linutronix.de) *		- major rewrite to avoid duplicated code *		  common nand_write_page function   *		  common get_chip function  *		- added oob_config structure for out of band layouts *		- write_oob changed for partial programming *		- read cache for faster access for subsequent reads *		from the same page. *		- support for different read/write address *		- support for device ready/busy line *		- read oob for more than one page enabled * *  02-27-2002	Thomas Gleixner (tglx@linutronix.de) *		- command-delay can be programmed *		- fixed exit from erase with callback-function enabled * *  03-21-2002  Thomas Gleixner (tglx@linutronix.de) *		- DEBUG improvements provided by Elizabeth Clarke  *		(eclarke@aminocom.com) *		- added zero check for this->chip_delay * *  04-03-2002  Thomas Gleixner (tglx@linutronix.de) *		- added added hw-driver supplied command and wait functions *		- changed blocking for erase (erase suspend enabled) *		- check pointers before accessing flash provided by *		John Hall (john.hall@optionexist.co.uk) * *  04-09-2002  Thomas Gleixner (tglx@linutronix.de) *		- nand_wait repaired * *  04-28-2002  Thomas Gleixner (tglx@linutronix.de)	 *		- OOB config defines moved to nand.h  * *  08-01-2002  Thomas Gleixner (tglx@linutronix.de)	 *		- changed my mailaddress, added pointer to tech/nand.html * *  08-07-2002 	Thomas Gleixner (tglx@linutronix.de) *		forced bad block location to byte 5 of OOB, even if *		CONFIG_MTD_NAND_ECC_JFFS2 is not set, to prevent *		erase /dev/mtdX from erasing bad blocks and destroying *		bad block info * *  08-10-2002 	Thomas Gleixner (tglx@linutronix.de) *		Fixed writing tail of data. Thanks to Alice Hennessy *		<ahennessy@mvista.com>. * *  08-10-2002 	Thomas Gleixner (tglx@linutronix.de) *		nand_read_ecc and nand_write_page restructured to support *		hardware ECC. Thanks to Steven Hein (ssh@sgi.com) *		for basic implementation and suggestions. *		3 new pointers in nand_chip structure: *		calculate_ecc, correct_data, enabled_hwecc 					  *		forcing all hw-drivers to support page cache *		eccvalid_pos is now mandatory * *  08-17-2002	tglx: fixed signed/unsigned missmatch in write.c *		Thanks to Ken Offer <koffer@arlut.utexas.edu> 	 * *  08-29-2002  tglx: use buffered read/write only for non pagealigned  *		access, speed up the aligned path by using the fs-buffer *		reset chip removed from nand_select(), implicit done *		only, when erase is interrupted *		waitfuntion use yield, instead of schedule_timeout *		support for 6byte/512byte hardware ECC *		read_ecc, write_ecc extended for different oob-layout *		selections: Implemented NAND_NONE_OOB, NAND_JFFS2_OOB, *		NAND_YAFFS_OOB. fs-driver gives one of these constants *		to select the oob-layout fitting the filesystem. *		oobdata can be read together with the raw data, when *		the fs-driver supplies a big enough buffer. *		size = 12 * number of pages to read (256B pagesize) *		       24 * number of pages to read (512B pagesize) *		the buffer contains 8/16 byte oobdata and 4/8 byte *		returncode from calculate_ecc *		oobdata can be given from filesystem to program them *		in one go together with the raw data. ECC codes are *		filled in at the place selected by oobsel. * *  09-04-2002  tglx: fixed write_verify (John Hall (john.hall@optionexist.co.uk)) * *  11-11-2002  tglx: fixed debug output in nand_write_page  *		(John Hall (john.hall@optionexist.co.uk)) * *  11-25-2002  tglx: Moved device ID/ manufacturer ID from nand_ids.h *		Splitted device ID and manufacturer ID table.  *		Removed CONFIG_MTD_NAND_ECC, as it defaults to ECC_NONE for *		mtd->read / mtd->write and is controllable by the fs driver *		for mtd->read_ecc / mtd->write_ecc *		some minor cleanups * *  12-05-2002  tglx: Dave Ellis (DGE@sixnetio) provided the fix for *		WRITE_VERIFY long time ago. Thanks for remembering me.	 * *  02-14-2003  tglx: Reject non page aligned writes 	 *		Fixed ecc select in nand_write_page to match semantics.  * *  02-18-2003	tglx: Changed oobsel to pointer. Added a default oob-selector *			 *  02-18-2003	tglx: Implemented oobsel again. Now it uses a pointer to +		a structure, which will be supplied by a filesystem driver *		If NULL is given, then the defaults (none or defaults *		supplied by ioctl (MEMSETOOBSEL) are used. *		For partitions the partition defaults are used (mtdpart.c) * *  06-04-2003  tglx: fix compile errors and fix write verify problem for *		some chips, which need either a delay between the readback *		and the next write command or have the CE removed. The *		CE disable/enable is much faster than a 20us delay and *		it should work on all available chips. *	 * $Id: nand.c,v 1.57 2003/10/15 13:23:56 dwmw2 Exp $ * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * */#include <linux/delay.h>#include <linux/errno.h>#include <linux/sched.h>#include <linux/types.h>#include <linux/mtd/mtd.h>#include <linux/mtd/nand.h>#include <linux/mtd/nand_ecc.h>#include <linux/mtd/compatmac.h>#include <linux/interrupt.h>#include <asm/io.h>/* * NAND low-level MTD interface functions */static void nand_write_buf(struct mtd_info *mtd, const u_char *buf, int len);static void nand_read_buf(struct mtd_info *mtd, u_char *buf, int len);static int nand_verify_buf(struct mtd_info *mtd, const u_char *buf, int len);static int nand_read (struct mtd_info *mtd, loff_t from, size_t len, size_t * retlen, u_char * buf);static int nand_read_ecc (struct mtd_info *mtd, loff_t from, size_t len,			  size_t * retlen, u_char * buf, u_char * eccbuf, struct nand_oobinfo *oobsel);static int nand_read_oob (struct mtd_info *mtd, loff_t from, size_t len, size_t * retlen, u_char * buf);static int nand_write (struct mtd_info *mtd, loff_t to, size_t len, size_t * retlen, const u_char * buf);static int nand_write_ecc (struct mtd_info *mtd, loff_t to, size_t len,			   size_t * retlen, const u_char * buf, u_char * eccbuf, struct nand_oobinfo *oobsel);static int nand_write_oob (struct mtd_info *mtd, loff_t to, size_t len, size_t * retlen, const u_char *buf);static int nand_writev (struct mtd_info *mtd, const struct iovec *vecs,			unsigned long count, loff_t to, size_t * retlen);static int nand_writev_ecc (struct mtd_info *mtd, const struct iovec *vecs,			unsigned long count, loff_t to, size_t * retlen, u_char *eccbuf, struct nand_oobinfo *oobsel);static int nand_erase (struct mtd_info *mtd, struct erase_info *instr);static void nand_sync (struct mtd_info *mtd);static int nand_write_page (struct mtd_info *mtd, struct nand_chip *this, int page, int col, 			int last, u_char *oob_buf, struct nand_oobinfo *oobsel);/* * Macros for low-level register control */static u_char nand_read_byte(struct mtd_info *mtd){//	struct nand_chip *this = mtd->priv;//	return readb(this->IO_ADDR_R);	return (u_char)NFDATA;}static void nand_write_byte(struct mtd_info *mtd, u_char byte){//	struct nand_chip *this = mtd->priv;//	writeb(byte, this->IO_ADDR_W);	NFDATA=(u_char)byte;}static void nand_select_chip(struct mtd_info *mtd, int chip){	struct nand_chip *this = mtd->priv;	switch(chip) {	case -1:		this->hwcontrol(mtd, NAND_CTL_CLRNCE);			break;	case 0:		this->hwcontrol(mtd, NAND_CTL_SETNCE);		break;	default:		BUG();	}}static void nand_write_buf(struct mtd_info *mtd, const u_char *buf, int len){	int i;//	struct nand_chip *this = mtd->priv;	for (i=0; i<len; i++)//		writeb(buf[i], this->IO_ADDR_W);		NFDATA=(u_char)buf[i];}static void nand_read_buf(struct mtd_info *mtd, u_char *buf, int len){	int i;//	struct nand_chip *this = mtd->priv;	for (i=0; i<len; i++)//		buf[i] = readb(this->IO_ADDR_R);		buf[i]=(u_char)NFDATA;}static int nand_verify_buf(struct mtd_info *mtd, const u_char *buf, int len){	int i;//	struct nand_chip *this = mtd->priv;	for (i=0; i<len; i++)//		if (buf[i] != readb(this->IO_ADDR_R))		if (buf[i] != (u_char)NFDATA)			return i;	return 0;}/* Appropriate chip should already be selected */static int nand_block_bad(struct mtd_info *mtd, unsigned long page){	struct nand_chip *this = mtd->priv;		this->cmdfunc (mtd, NAND_CMD_READOOB, NAND_BADBLOCK_POS, page);	if (this->read_byte(mtd) != 0xff)		return 1;	return 0;}/* * Send command to NAND device */static void nand_command (struct mtd_info *mtd, unsigned command, int column, int page_addr){	register struct nand_chip *this = mtd->priv;	/* Begin command latch cycle */	this->hwcontrol(mtd, NAND_CTL_SETCLE);	/*	 * 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;		}//		this->write_byte(mtd, readcmd);		this->write_cmd(mtd, readcmd);	}//	this->write_byte(mtd, command);	this->write_cmd(mtd, command);	/* Set ALE and clear CLE to start address cycle */	this->hwcontrol(mtd, NAND_CTL_CLRCLE);	if (column != -1 || page_addr != -1) {		this->hwcontrol(mtd, NAND_CTL_SETALE);		/* Serially input address */		if (column != -1)//			this->write_byte(mtd, column);			this->write_addr(mtd, column);		if (page_addr != -1) {//			this->write_byte(mtd, (unsigned char) (page_addr & 0xff));			this->write_addr(mtd, (unsigned char) (page_addr & 0xff));//			this->write_byte(mtd, (unsigned char) ((page_addr >> 8) & 0xff));			this->write_addr(mtd, (unsigned char) ((page_addr >> 8) & 0xff));			/* One more address cycle for higher density devices */			if (mtd->size & 0x0c000000) //				this->write_byte(mtd, (unsigned char) ((page_addr >> 16) & 0x0f));				this->write_addr(mtd, (unsigned char) ((page_addr >> 16) & 0x0f));		}		/* Latch in address */		this->hwcontrol(mtd, NAND_CTL_CLRALE);	}		/* 	 * 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);		this->hwcontrol(mtd, NAND_CTL_SETCLE);//		this->write_byte(mtd, NAND_CMD_STATUS);		this->write_cmd(mtd, NAND_CMD_STATUS);		this->hwcontrol(mtd, NAND_CTL_CLRCLE);		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(mtd)){			udelay (this->chip_delay);			return;		}		}		/* wait until command is processed */	while (!this->dev_ready(mtd))			udelay (this->chip_delay);}/* *	Get chip for selected access */static inline void nand_get_chip (struct nand_chip *this, struct mtd_info *mtd, int new_state, int *erase_state){	DECLARE_WAITQUEUE (wait, current);	/* 	 * Grab the lock and see if the device is available 	 * For erasing, we keep the spinlock until the	 * erase command is written. 	*/retry:	spin_lock_bh (&this->chip_lock);	if (this->state == FL_READY) {		this->state = new_state;		if (new_state != FL_ERASING)			spin_unlock_bh (&this->chip_lock);		return;	}#if 1 /* This was broken. And of dubious utility */	if (this->state == FL_ERASING) {		if (new_state != FL_ERASING) {			this->state = new_state;			spin_unlock_bh (&this->chip_lock);			this->select_chip(mtd, 0);	/* select in any case */			this->cmdfunc(mtd, NAND_CMD_RESET, -1, -1);			return;		}	}#endif	set_current_state (TASK_UNINTERRUPTIBLE);	add_wait_queue (&this->wq, &wait);	spin_unlock_bh (&this->chip_lock);	schedule ();	remove_wait_queue (&this->wq, &wait);	goto retry;}/* * Wait for command done. This applies to erase and program only * Erase can take up to 400ms and program up to 20ms according to  * general NAND and SmartMedia specs **/static int nand_wait(struct mtd_info *mtd, struct nand_chip *this, int state){	unsigned long	timeo = jiffies;	int	status;		if (state == FL_ERASING)		 timeo += (HZ * 400) / 1000;	else		 timeo += (HZ * 20) / 1000;	spin_lock_bh (&this->chip_lock);	this->cmdfunc (mtd, NAND_CMD_STATUS, -1, -1);	while (time_before(jiffies, timeo)) {				/* Check, if we were interrupted */		if (this->state != state) {			spin_unlock_bh (&this->chip_lock);			return 0;		}		if (this->dev_ready) {			if (this->dev_ready(mtd))				break;		}		if (this->read_byte(mtd) & 0x40)			break;								spin_unlock_bh (&this->chip_lock);		yield ();		spin_lock_bh (&this->chip_lock);	}	status = (int) this->read_byte(mtd);	spin_unlock_bh (&this->chip_lock);	return status;}/* *	Nand_page_program function is used for write and writev ! *	This function will always program a full page of data *	If you call it with a non page aligned buffer, you're lost :) */static int nand_write_page (struct mtd_info *mtd, struct nand_chip *this,			    int page, int col, int last, u_char *oob_buf, struct nand_oobinfo *oobsel){	int 	i, status;	u_char	ecc_code[6], *oob_data;	int	eccmode = oobsel->useecc ? this->eccmode : NAND_ECC_NONE;	int  	*oob_config = oobsel->eccpos;		/* pad oob area, if we have no oob buffer from fs-driver */	if (!oob_buf) {		oob_data = &this->data_buf[mtd->oobblock];		for (i = 0; i < mtd->oobsize; i++)			oob_data[i] = 0xff;	} else 		oob_data = oob_buf;	/* software ecc 3 Bytes ECC / 256 Byte Data ? */	if (eccmode == NAND_ECC_SOFT) {		/* Read back previous written data, if col > 0 */		if (col) {			this->cmdfunc (mtd, NAND_CMD_READ0, 0, page);			this->read_buf(mtd,&this->data_poi[0],col);		}				if ((col < this->eccsize) && (last >= this->eccsize)) {			this->calculate_ecc (mtd,&this->data_poi[0], &(ecc_code[0]));			for (i = 0; i < 3; i++)				oob_data[oob_config[i]] = ecc_code[i];		}		/* Calculate and write the second ECC if we have enough data */		if ((mtd->oobblock == 512) && (last == 512)) {			this->calculate_ecc (mtd,&this->data_poi[256], &(ecc_code[3]));			for (i = 3; i < 6; i++)				oob_data[oob_config[i]] = ecc_code[i];		} 	} else {		/* For hardware ECC skip ECC, if we have no full page write */		if (eccmode != NAND_ECC_NONE && (col || last != mtd->oobblock))			eccmode = NAND_ECC_NONE;	}				/* Prepad for partial page programming !!! */	for (i = 0; i < col; i++)		this->data_poi[i] = 0xff;	/* Postpad for partial page programming !!! oob is already padded */	for (i = last; i < mtd->oobblock; i++)		this->data_poi[i] = 0xff;	/* Send command to begin auto page programming */	this->cmdfunc (mtd, NAND_CMD_SEQIN, 0x00, page);	/* Write out complete page of data, take care of eccmode */	switch (eccmode) {	/* No ecc and software ecc 3/256, write all */	case NAND_ECC_NONE://		printk (KERN_WARNING "Writing data without ECC to NAND-FLASH is not recommended\n");//		this->write_buf(mtd, this->data_poi, mtd->oobblock);//		break;	case NAND_ECC_SOFT://		this->calculate_ecc(mtd, &this->data_poi[0], &(ecc_code[0]));//		for (i = 0; i < 3; i++)//			oob_data[oob_config[i]] = ecc_code[i];		/* Calculate and write the second ECC for 512 Byte page size *///		if (mtd->oobblock == 512) {//			this->calculate_ecc(mtd, &this->data_poi[256], &(ecc_code[3]));//			for (i = 3; i < 6; i++)//				oob_data[oob_config[i]] = ecc_code[i];//		} 		this->write_buf(mtd, this->data_poi, mtd->oobblock);		break;			/* Hardware ecc 3 byte / 256 data, write first half, get ecc, then second, if 512 byte pagesize */		case NAND_ECC_HW3_256:				this->enable_hwecc(mtd, NAND_ECC_WRITE);	/* enable hardware ecc logic for write */		this->write_buf(mtd, this->data_poi, mtd->eccsize);				this->calculate_ecc(mtd, NULL, &(ecc_code[0]));		for (i = 0; i < 3; i++)			oob_data[oob_config[i]] = ecc_code[i];

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
2020国产精品久久精品美国| 免费美女久久99| 成人精品gif动图一区| 久久免费精品国产久精品久久久久 | 日本韩国一区二区三区视频| 亚洲精品乱码久久久久久黑人 | 精品一区二区三区久久| 日韩视频在线你懂得| 久草中文综合在线| 国产欧美日韩在线看| 99r精品视频| 午夜成人免费电影| 精品噜噜噜噜久久久久久久久试看| 激情综合亚洲精品| 国产精品国产精品国产专区不蜜 | 日韩亚洲欧美在线观看| 2欧美一区二区三区在线观看视频| 国产精品一区二区黑丝| 成人欧美一区二区三区视频网页| 欧美中文字幕一区二区三区| 日韩电影免费在线| 欧美国产精品一区二区三区| 色哟哟日韩精品| 奇米精品一区二区三区四区| 国产性做久久久久久| 色久综合一二码| 美女免费视频一区二区| 国产精品美女久久久久高潮| 欧美私人免费视频| 国产一区福利在线| 亚洲一区视频在线观看视频| 精品国产乱码久久久久久免费| av成人免费在线| 美女高潮久久久| 亚洲三级免费观看| 精品99久久久久久| 91官网在线观看| 国产激情一区二区三区桃花岛亚洲| 亚洲欧洲99久久| 精品国产免费久久| 欧美日韩午夜精品| 成人国产精品免费观看视频| 日本不卡一区二区三区高清视频| 国产精品免费久久久久| 精品国产免费人成在线观看| 欧美色综合天天久久综合精品| 国产视频一区在线播放| 678五月天丁香亚洲综合网| 成人av动漫网站| 精品在线视频一区| 亚洲成av人片观看| 国产精品欧美久久久久无广告| 在线播放视频一区| 在线视频你懂得一区二区三区| 国产盗摄视频一区二区三区| 日本视频在线一区| 亚洲午夜精品在线| 亚洲女与黑人做爰| 亚洲国产精品成人综合色在线婷婷| 3atv一区二区三区| 欧美色图天堂网| 99这里都是精品| 国产91在线看| 国产精品亚洲一区二区三区在线| 免费三级欧美电影| 亚洲动漫第一页| 尤物av一区二区| 一区二区中文视频| 国产精品成人免费精品自在线观看 | 亚洲国产成人一区二区三区| 精品国产3级a| 精品卡一卡二卡三卡四在线| 欧美一级一区二区| 欧美精品1区2区3区| 欧美日韩国产综合一区二区| 在线看一区二区| 日本精品视频一区二区| 日本乱码高清不卡字幕| 色播五月激情综合网| 91麻豆精品在线观看| 99久久精品费精品国产一区二区| 成人综合婷婷国产精品久久免费| 国产99精品国产| 成人免费黄色在线| 99久久久久久99| 在线观看区一区二| 欧美久久高跟鞋激| 欧美一区二区精品久久911| 欧美一区二区三区免费视频| 欧美一级片在线| 26uuu国产一区二区三区| 精品国内二区三区| 久久毛片高清国产| 一区二区中文字幕在线| 亚洲综合无码一区二区| 亚洲成人午夜影院| 黄色成人免费在线| 高清日韩电视剧大全免费| caoporn国产一区二区| 日本韩国欧美在线| 777亚洲妇女| 欧美精品一区二区久久婷婷| 国产欧美日韩三区| 亚洲欧美日韩中文播放| 婷婷丁香激情综合| 国内精品久久久久影院一蜜桃| 国产盗摄精品一区二区三区在线| 99精品黄色片免费大全| 欧美午夜理伦三级在线观看| 在线成人免费视频| 欧美va亚洲va在线观看蝴蝶网| 亚洲精品国产无天堂网2021| 无吗不卡中文字幕| 国产成人亚洲综合色影视| 99这里只有精品| 欧美放荡的少妇| 国产精品乱码一区二三区小蝌蚪| 亚洲一本大道在线| 美女一区二区视频| 色综合色狠狠综合色| 欧美高清视频在线高清观看mv色露露十八| 欧美不卡在线视频| 亚洲欧美色图小说| 狠狠色狠狠色合久久伊人| 97精品久久久午夜一区二区三区| 欧美日韩日日夜夜| 欧美国产1区2区| 五月天丁香久久| 成人天堂资源www在线| 欧美在线制服丝袜| 国产日韩欧美亚洲| 视频一区国产视频| 91色|porny| 久久免费看少妇高潮| 亚洲影院免费观看| 成人免费av资源| 日韩一区二区三区免费看| 亚洲欧美综合色| 开心九九激情九九欧美日韩精美视频电影 | 欧美日韩精品一区视频| 国产精品私人影院| 激情六月婷婷久久| 欧美另类变人与禽xxxxx| 中日韩免费视频中文字幕| 老司机一区二区| 91精品福利在线一区二区三区| 亚洲男人电影天堂| 99久久精品免费观看| 国产亚洲欧美在线| 激情综合五月天| 日韩一区二区视频| 五月婷婷综合在线| 在线影院国内精品| 亚洲欧洲综合另类| 99国产精品久久| 欧美一级日韩不卡播放免费| 亚洲第一激情av| 欧美日韩国产美| 亚洲成av人片一区二区三区| 91久久国产综合久久| 亚洲欧美一区二区不卡| 99久久综合色| 国产成人免费xxxxxxxx| 久久综合99re88久久爱| 麻豆精品一区二区三区| 欧美艳星brazzers| 中文av一区特黄| 成人av动漫在线| 亚洲免费成人av| 色美美综合视频| 一区二区在线观看免费| 色八戒一区二区三区| 亚洲精品国久久99热| 色爱区综合激月婷婷| 亚洲一区二区黄色| 一本色道久久综合亚洲91| 制服丝袜av成人在线看| 亚洲视频狠狠干| 国产成人av一区二区| 欧美日韩亚洲丝袜制服| 日韩在线一区二区| 欧美zozo另类异族| 亚洲精品少妇30p| 99视频在线观看一区三区| 欧美一区二区三区免费视频| 亚洲国产精品人人做人人爽| 色哟哟在线观看一区二区三区| 亚洲精品免费电影| 91精品国产综合久久精品图片| 久久精品免费观看| 国产欧美日韩另类一区| 91麻豆免费视频| 日韩影院免费视频| 欧美日韩精品系列| 欧美日韩一级大片网址| 久久不见久久见免费视频7| 国产欧美视频在线观看| 色94色欧美sute亚洲线路二| 日本不卡免费在线视频| 久久五月婷婷丁香社区|