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

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

?? ide-disk.c

?? ep9315平臺下硬盤驅動的源碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
			return startstop;		}		if (!drive->unmask)			local_irq_disable();		if (drive->mult_count) {			ide_hwgroup_t *hwgroup = HWGROUP(drive);	/*	 * Ugh.. this part looks ugly because we MUST set up	 * the interrupt handler before outputting the first block	 * of data to be written.  If we hit an error (corrupted buffer list)	 * in ide_multwrite(), then we need to remove the handler/timer	 * before returning.  Fortunately, this NEVER happens (right?).	 *	 * Except when you get an error it seems...	 *	 * MAJOR DATA INTEGRITY BUG !!! only if we error 	 */			hwgroup->wrq = *rq; /* scratchpad */			ide_set_handler(drive, &multwrite_intr, WAIT_CMD, NULL);			if (ide_multwrite(drive, drive->mult_count)) {				unsigned long flags;				spin_lock_irqsave(&io_request_lock, flags);				hwgroup->handler = NULL;				del_timer(&hwgroup->timer);				spin_unlock_irqrestore(&io_request_lock, flags);				return ide_stopped;			}		} else {			unsigned long flags;			char *to = ide_map_buffer(rq, &flags);			ide_set_handler(drive, &write_intr, WAIT_CMD, NULL);			taskfile_output_data(drive, to, SECTOR_WORDS);			ide_unmap_buffer(to, &flags);		}		return ide_started;	}	printk(KERN_ERR "%s: bad command: %d\n", drive->name, rq->cmd);	idedisk_end_request(drive, 0);	return ide_stopped;}#else /* CONFIG_IDE_TASKFILE_IO */static ide_startstop_t chs_rw_disk(ide_drive_t *, struct request *, unsigned long);static ide_startstop_t lba_28_rw_disk(ide_drive_t *, struct request *, unsigned long);static ide_startstop_t lba_48_rw_disk(ide_drive_t *, struct request *, unsigned long long);/* * __ide_do_rw_disk() issues READ and WRITE commands to a disk, * using LBA if supported, or CHS otherwise, to address sectors. * It also takes care of issuing special DRIVE_CMDs. */ide_startstop_t __ide_do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block){	if (!blk_fs_request(rq)) {		printk(KERN_ERR "%s: bad command: %d\n", drive->name, rq->cmd);		idedisk_end_request(drive, 0);		return ide_stopped;	}	/*	 * 268435455  == 137439 MB or 28bit limit	 *	 * need to add split taskfile operations based on 28bit threshold.	 */	if (drive->addressing == 1)		/* 48-bit LBA */		return lba_48_rw_disk(drive, rq, (unsigned long long) block);	if (drive->select.b.lba)		/* 28-bit LBA */		return lba_28_rw_disk(drive, rq, (unsigned long) block);	/* 28-bit CHS : DIE DIE DIE piece of legacy crap!!! */	return chs_rw_disk(drive, rq, (unsigned long) block);}static task_ioreg_t get_command (ide_drive_t *drive, int cmd){	int lba48bit = (drive->id->cfs_enable_2 & 0x0400) ? 1 : 0;#if 1	lba48bit = (drive->addressing == 1) ? 1 : 0;#endif	if ((cmd == READ) && (drive->using_dma))		return (lba48bit) ? WIN_READDMA_EXT : WIN_READDMA;	else if ((cmd == READ) && (drive->mult_count))		return (lba48bit) ? WIN_MULTREAD_EXT : WIN_MULTREAD;	else if (cmd == READ)		return (lba48bit) ? WIN_READ_EXT : WIN_READ;	else if ((cmd == WRITE) && (drive->using_dma))		return (lba48bit) ? WIN_WRITEDMA_EXT : WIN_WRITEDMA;	else if ((cmd == WRITE) && (drive->mult_count))		return (lba48bit) ? WIN_MULTWRITE_EXT : WIN_MULTWRITE;	else if (cmd == WRITE)		return (lba48bit) ? WIN_WRITE_EXT : WIN_WRITE;	else		return WIN_NOP;}static ide_startstop_t chs_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block){	ide_task_t		args;	int			sectors;	ata_nsector_t		nsectors;	task_ioreg_t command	= get_command(drive, rq_data_dir(rq));	unsigned int track	= (block / drive->sect);	unsigned int sect	= (block % drive->sect) + 1;	unsigned int head	= (track % drive->head);	unsigned int cyl	= (track / drive->head);	nsectors.all = (u16) rq->nr_sectors;#ifdef DEBUG	printk("%s: %sing: ", drive->name, (rq_data_dir(rq)==READ) ? "read" : "writ");	printk("CHS=%d/%d/%d, ", cyl, head, sect);	printk("sectors=%ld, ", rq->nr_sectors);	printk("buffer=0x%08lx\n", (unsigned long) rq->buffer);#endif	memset(&args, 0, sizeof(ide_task_t));	sectors	= (rq->nr_sectors == 256) ? 0x00 : rq->nr_sectors;	args.tfRegister[IDE_NSECTOR_OFFSET]	= sectors;	args.tfRegister[IDE_SECTOR_OFFSET]	= sect;	args.tfRegister[IDE_LCYL_OFFSET]	= cyl;	args.tfRegister[IDE_HCYL_OFFSET]	= (cyl>>8);	args.tfRegister[IDE_SELECT_OFFSET]	= head;	args.tfRegister[IDE_SELECT_OFFSET]	|= drive->select.all;	args.tfRegister[IDE_COMMAND_OFFSET]	= command;	args.command_type			= ide_cmd_type_parser(&args);	args.rq					= (struct request *) rq;	rq->special				= (ide_task_t *)&args;	return do_rw_taskfile(drive, &args);}static ide_startstop_t lba_28_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block){	ide_task_t		args;	int			sectors;	ata_nsector_t		nsectors;	task_ioreg_t command	= get_command(drive, rq_data_dir(rq));	nsectors.all = (u16) rq->nr_sectors;#ifdef DEBUG	printk("%s: %sing: ", drive->name, (rq_data_dir(rq)==READ) ? "read" : "writ");	printk("LBAsect=%lld, ", block);	printk("sectors=%ld, ", rq->nr_sectors);	printk("buffer=0x%08lx\n", (unsigned long) rq->buffer);#endif	memset(&args, 0, sizeof(ide_task_t));	sectors = (rq->nr_sectors == 256) ? 0x00 : rq->nr_sectors;	args.tfRegister[IDE_NSECTOR_OFFSET]	= sectors;	args.tfRegister[IDE_SECTOR_OFFSET]	= block;	args.tfRegister[IDE_LCYL_OFFSET]	= (block>>=8);	args.tfRegister[IDE_HCYL_OFFSET]	= (block>>=8);	args.tfRegister[IDE_SELECT_OFFSET]	= ((block>>8)&0x0f);	args.tfRegister[IDE_SELECT_OFFSET]	|= drive->select.all;	args.tfRegister[IDE_COMMAND_OFFSET]	= command;	args.command_type			= ide_cmd_type_parser(&args);	args.rq					= (struct request *) rq;	rq->special				= (ide_task_t *)&args;	return do_rw_taskfile(drive, &args);}/* * 268435455  == 137439 MB or 28bit limit * 320173056  == 163929 MB or 48bit addressing * 1073741822 == 549756 MB or 48bit addressing fake drive */static ide_startstop_t lba_48_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long long block){	ide_task_t		args;	int			sectors;	ata_nsector_t		nsectors;	task_ioreg_t command	= get_command(drive, rq_data_dir(rq));	nsectors.all = (u16) rq->nr_sectors;#ifdef DEBUG	printk("%s: %sing: ", drive->name, (rq_data_dir(rq)==READ) ? "read" : "writ");	printk("LBAsect=%lld, ", block);	printk("sectors=%ld, ", rq->nr_sectors);	printk("buffer=0x%08lx\n", (unsigned long) rq->buffer);#endif	memset(&args, 0, sizeof(ide_task_t));	sectors = (rq->nr_sectors == 65536) ? 0 : rq->nr_sectors;	args.tfRegister[IDE_NSECTOR_OFFSET]	= sectors;	args.tfRegister[IDE_SECTOR_OFFSET]	= block;	/* low lba */	args.tfRegister[IDE_LCYL_OFFSET]	= (block>>=8);	/* mid lba */	args.tfRegister[IDE_HCYL_OFFSET]	= (block>>=8);	/* hi  lba */	args.tfRegister[IDE_SELECT_OFFSET]	= drive->select.all;	args.tfRegister[IDE_COMMAND_OFFSET]	= command;	args.hobRegister[IDE_NSECTOR_OFFSET_HOB]= sectors >> 8;	args.hobRegister[IDE_SECTOR_OFFSET_HOB]	= (block>>=8);	/* low lba */	args.hobRegister[IDE_LCYL_OFFSET_HOB]	= (block>>=8);	/* mid lba */	args.hobRegister[IDE_HCYL_OFFSET_HOB]	= (block>>=8);	/* hi  lba */	args.hobRegister[IDE_SELECT_OFFSET_HOB]	= drive->select.all;	args.hobRegister[IDE_CONTROL_OFFSET_HOB]= (drive->ctl|0x80);	args.command_type			= ide_cmd_type_parser(&args);	args.rq					= (struct request *) rq;	rq->special				= (ide_task_t *)&args;	return do_rw_taskfile(drive, &args);}#endif /* CONFIG_IDE_TASKFILE_IO */static ide_startstop_t ide_do_rw_disk (ide_drive_t *drive, struct request *rq, unsigned long block){	ide_hwif_t *hwif	= HWIF(drive);	if (hwif->rw_disk)		return hwif->rw_disk(drive, rq, block);	else 		return __ide_do_rw_disk(drive, rq, block);}EXPORT_SYMBOL_GPL(__ide_do_rw_disk);static int idedisk_open (struct inode *inode, struct file *filp, ide_drive_t *drive){	MOD_INC_USE_COUNT;	if (drive->removable && drive->usage == 1) {		ide_task_t args;		int cf;		memset(&args, 0, sizeof(ide_task_t));		args.tfRegister[IDE_COMMAND_OFFSET] = WIN_DOORLOCK;		args.command_type = ide_cmd_type_parser(&args);		check_disk_change(inode->i_rdev);		/*		 * Ignore the return code from door_lock,		 * since the open() has already succeeded,		 * and the door_lock is irrelevant at this point.		 */		if (drive->doorlocking && ide_raw_taskfile(drive, &args, NULL))			drive->doorlocking = 0;		drive->wcache = 0;		/* Cache enabled ? */		if (drive->id->csfo & 1)			drive->wcache = 1;		/* Cache command set available ? */		if (drive->id->cfs_enable_1 & (1<<5))			drive->wcache = 1;		/* ATA6 cache extended commands */		cf = drive->id->command_set_2 >> 24;		if((cf & 0xC0) == 0x40 && (cf & 0x30) != 0)			drive->wcache = 1;	}	return 0;}static int do_idedisk_flushcache(ide_drive_t *drive);static int ide_cacheflush_p(ide_drive_t *drive){	if(drive->wcache)	{		if (do_idedisk_flushcache(drive))		{			printk (KERN_INFO "%s: Write Cache FAILED Flushing!\n",				drive->name);			return -EIO;		}		return 1;	}	return 0;}static void idedisk_release (struct inode *inode, struct file *filp, ide_drive_t *drive){	if (drive->removable && !drive->usage) {		ide_task_t args;		memset(&args, 0, sizeof(ide_task_t));		args.tfRegister[IDE_COMMAND_OFFSET] = WIN_DOORUNLOCK;		args.command_type = ide_cmd_type_parser(&args);		invalidate_bdev(inode->i_bdev, 0);		if (drive->doorlocking && ide_raw_taskfile(drive, &args, NULL))			drive->doorlocking = 0;	}	ide_cacheflush_p(drive);	MOD_DEC_USE_COUNT;}static int idedisk_media_change (ide_drive_t *drive){	/* if removable, always assume it was changed */	return drive->removable;}static void idedisk_revalidate (ide_drive_t *drive){	grok_partitions(HWIF(drive)->gd, drive->select.b.unit,			1<<PARTN_BITS,			current_capacity(drive));}static int idedisk_end_request (ide_drive_t *drive, int uptodate){	struct request *rq;	unsigned long flags;	int ret = 1;	spin_lock_irqsave(&io_request_lock, flags);	rq = HWGROUP(drive)->rq;	/*	 * decide whether to reenable DMA -- 3 is a random magic for now,	 * if we DMA timeout more than 3 times, just stay in PIO	 */	if (drive->state == DMA_PIO_RETRY && drive->retry_pio <= 3) {		drive->state = 0;		HWGROUP(drive)->hwif->ide_dma_on(drive);	}	if (!end_that_request_first(rq, uptodate, drive->name)) {		add_blkdev_randomness(MAJOR(rq->rq_dev));		blkdev_dequeue_request(rq);		HWGROUP(drive)->rq = NULL;		end_that_request_last(rq);		ret = 0;	}	spin_unlock_irqrestore(&io_request_lock, flags);	return ret;}static u8 idedisk_dump_status (ide_drive_t *drive, const char *msg, u8 stat){	ide_hwif_t *hwif = HWIF(drive);	unsigned long flags;	u8 err = 0;	local_irq_set(flags);	printk("%s: %s: status=0x%02x", drive->name, msg, stat);#if FANCY_STATUS_DUMPS	printk(" { ");	if (stat & BUSY_STAT)		printk("Busy ");	else {		if (stat & READY_STAT)	printk("DriveReady ");		if (stat & WRERR_STAT)	printk("DeviceFault ");		if (stat & SEEK_STAT)	printk("SeekComplete ");		if (stat & DRQ_STAT)	printk("DataRequest ");		if (stat & ECC_STAT)	printk("CorrectedError ");		if (stat & INDEX_STAT)	printk("Index ");		if (stat & ERR_STAT)	printk("Error ");	}	printk("}");#endif	/* FANCY_STATUS_DUMPS */	printk("\n");	if ((stat & (BUSY_STAT|ERR_STAT)) == ERR_STAT) {		err = hwif->INB(IDE_ERROR_REG);		printk("%s: %s: error=0x%02x", drive->name, msg, err);#if FANCY_STATUS_DUMPS		printk(" { ");		if (err & ABRT_ERR)	printk("DriveStatusError ");		if (err & ICRC_ERR)			printk("Bad%s ", (err & ABRT_ERR) ? "CRC" : "Sector");		if (err & ECC_ERR)	printk("UncorrectableError ");		if (err & ID_ERR)	printk("SectorIdNotFound ");		if (err & TRK0_ERR)	printk("TrackZeroNotFound ");		if (err & MARK_ERR)	printk("AddrMarkNotFound ");		printk("}");		if ((err & (BBD_ERR | ABRT_ERR)) == BBD_ERR ||		    (err & (ECC_ERR|ID_ERR|MARK_ERR))) {			if (drive->addressing == 1) {				__u64 sectors = 0;				u32 low = 0, high = 0;				low = idedisk_read_24(drive);				hwif->OUTB(drive->ctl|0x80, IDE_CONTROL_REG);				high = idedisk_read_24(drive);				sectors = ((__u64)high << 24) | low;				printk(", LBAsect=%llu, high=%d, low=%d",				       (unsigned long long) sectors,				       high, low);			} else {				u8 cur = hwif->INB(IDE_SELECT_REG);				if (cur & 0x40) {	/* using LBA? */					printk(", LBAsect=%ld", (unsigned long)					 ((cur&0xf)<<24)					 |(hwif->INB(IDE_HCYL_REG)<<16)					 |(hwif->INB(IDE_LCYL_REG)<<8)					 | hwif->INB(IDE_SECTOR_REG));				} else {					printk(", CHS=%d/%d/%d",					 (hwif->INB(IDE_HCYL_REG)<<8) +					  hwif->INB(IDE_LCYL_REG),					  cur & 0xf,					  hwif->INB(IDE_SECTOR_REG));				}			}			if (HWGROUP(drive) && HWGROUP(drive)->rq)				printk(", sector=%ld",					HWGROUP(drive)->rq->sector);		}	}#endif	/* FANCY_STATUS_DUMPS */	printk("\n");	local_irq_restore(flags);	return err;}ide_startstop_t idedisk_error (ide_drive_t *drive, const char *msg, u8 stat){	ide_hwif_t *hwif;	struct request *rq;	u8 err;	int i = (drive->mult_count ? drive->mult_count : 1) * SECTOR_WORDS;	err = idedisk_dump_status(drive, msg, stat);	if (drive == NULL || (rq = HWGROUP(drive)->rq) == NULL)		return ide_stopped;	hwif = HWIF(drive);	/* retry only "normal" I/O: */	switch (rq->cmd) {		case IDE_DRIVE_CMD:		case IDE_DRIVE_TASK:		case IDE_DRIVE_TASKFILE:			rq->errors = 1;			ide_end_drive_cmd(drive, stat, err);			return ide_stopped;#if 0		case IDE_DRIVE_TASKFILE:			rq->errors = 1;			ide_end_taskfile(drive, stat, err);			return ide_stopped;#endif		default:			break;	}	if (stat & BUSY_STAT || ((stat & WRERR_STAT) && !drive->nowerr)) {		/* other bits are useless when BUSY */		rq->errors |= ERROR_RESET;	} else if (stat & ERR_STAT) {		/* err has different meaning on cdrom and tape */		if (err == ABRT_ERR) {			if (drive->select.b.lba &&			    /* some newer drives don't support WIN_SPECIFY */			    hwif->INB(IDE_COMMAND_REG) == WIN_SPECIFY)				return ide_stopped;		} else if ((err & BAD_CRC) == BAD_CRC) {			/* UDMA crc error, just retry the operation */			drive->crc_count++;		} else if (err & (BBD_ERR | ECC_ERR)) {			/* retries won't help these */			rq->errors = ERROR_MAX;		} else if (err & TRK0_ERR) {			/* help it find track zero */			rq->errors |= ERROR_RECAL;		}	}	if ((stat & DRQ_STAT) && rq_data_dir(rq) == READ) {		/*		 * try_to_flush_leftover_data() is invoked in response to		 * a drive unexpectedly having its DRQ_STAT bit set.  As		 * an alternative to resetting the drive, this routine		 * tries to clear the condition by read a sector's worth		 * of data from the drive.  Of course, this may not help		 * if the drive is *waiting* for data from *us*.		 */		while (i > 0) {			u32 buffer[16];			unsigned int wcount = (i > 16) ? 16 : i;			i -= wcount;			taskfile_input_data(drive, buffer, wcount);		}	}	if (hwif->INB(IDE_STATUS_REG) & (BUSY_STAT|DRQ_STAT)) {		/* force an abort */		hwif->OUTB(WIN_IDLEIMMEDIATE,IDE_COMMAND_REG);	}	if (rq->errors >= ERROR_MAX)		DRIVER(drive)->end_request(drive, 0);	else {		if ((rq->errors & ERROR_RESET) == ERROR_RESET) {			++rq->errors;			return ide_do_reset(drive);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久先锋影音av鲁色资源网| 欧美一区二区高清| 国产成人免费在线| 国产乱码精品一区二区三区忘忧草 | 一区二区三区日韩精品| 久久精品日韩一区二区三区| 久久影院视频免费| 国产精品青草综合久久久久99| 国产精品久久久久天堂| 亚洲丝袜精品丝袜在线| 亚洲免费av在线| 亚洲成人精品一区| 蜜臀av一级做a爰片久久| 精品在线一区二区| 成人午夜av电影| 色天使久久综合网天天| 欧美三级欧美一级| 日韩一区二区视频| 国产日本欧美一区二区| 亚洲美女屁股眼交3| 香蕉加勒比综合久久| 精品中文字幕一区二区小辣椒| 国产精品一二三四| 一本色道久久综合亚洲91| 4438x亚洲最大成人网| 精品久久人人做人人爱| 国产精品网站在线| 日韩精品一级二级| 丁香天五香天堂综合| 欧美性xxxxx极品少妇| 日韩欧美一区二区久久婷婷| 中文字幕中文字幕在线一区| 人人爽香蕉精品| 成人动漫一区二区三区| 69堂精品视频| 亚洲人精品午夜| 麻豆成人免费电影| 欧美中文字幕不卡| 欧美韩国日本综合| 人人精品人人爱| 色综合久久中文综合久久97| 正在播放亚洲一区| 亚洲欧洲综合另类| 国产成人在线免费观看| 在线播放亚洲一区| 自拍偷拍亚洲综合| 国产一区二区三区在线观看免费视频| 色综合天天性综合| 久久久午夜电影| 日本伊人精品一区二区三区观看方式| 99精品欧美一区二区三区综合在线| 欧美老女人第四色| 亚洲精品国产无天堂网2021| 国产精品资源站在线| 91精品国产福利| 亚洲精品中文字幕乱码三区| 国产成人一区在线| 精品少妇一区二区三区免费观看 | 蜜桃精品视频在线| 色狠狠桃花综合| 中文字幕不卡在线播放| 国产在线精品一区二区| 日韩美女主播在线视频一区二区三区| 亚洲婷婷国产精品电影人久久| 国产黄人亚洲片| 久久中文娱乐网| 极品少妇一区二区| 日韩美女天天操| 另类成人小视频在线| 欧美精品久久天天躁| 亚洲福利一二三区| 欧美精品久久99久久在免费线 | 欧美一三区三区四区免费在线看 | 亚洲电影一级黄| 欧美综合在线视频| 一区二区免费在线播放| 北条麻妃一区二区三区| 中文字幕av资源一区| 波多野结衣在线aⅴ中文字幕不卡| 欧美成人国产一区二区| 国产一区二区三区免费| 欧美韩日一区二区三区四区| 懂色av噜噜一区二区三区av| 亚洲欧洲av一区二区三区久久| 不卡av在线免费观看| 亚洲啪啪综合av一区二区三区| 一本久久a久久免费精品不卡| 一区二区久久久久久| 911精品产国品一二三产区| 日韩不卡一二三区| 久久久九九九九| 99久久国产综合色|国产精品| 亚洲精品视频免费看| 在线观看av不卡| 日本成人在线网站| 久久久99久久| 色吊一区二区三区| 婷婷成人激情在线网| 久久亚洲一区二区三区四区| 国产1区2区3区精品美女| 1000部国产精品成人观看| 欧美日韩在线电影| 激情另类小说区图片区视频区| 欧美国产精品中文字幕| 欧美三级在线视频| 国产在线播放一区三区四| 亚洲精品综合在线| 精品国产乱码久久久久久免费 | 欧美日韩电影一区| 国产乱码精品1区2区3区| 亚洲精品成人在线| 欧美成人一区二区| 99re亚洲国产精品| 美女尤物国产一区| 亚洲女同ⅹxx女同tv| 精品久久久久久久一区二区蜜臀| 91原创在线视频| 日韩成人dvd| 亚洲人吸女人奶水| 久久久久国产精品麻豆| 欧美日韩精品一区二区在线播放| 国产精品一区二区在线观看不卡 | 欧美一级免费大片| 99久久精品免费精品国产| 精品一二三四在线| 亚洲国产婷婷综合在线精品| 国产视频一区二区三区在线观看 | 国产精品免费人成网站| 欧美成人在线直播| 欧美日韩激情在线| 色天使久久综合网天天| 国产91丝袜在线观看| 免费在线看成人av| 亚洲综合色噜噜狠狠| 中文字幕亚洲一区二区av在线| 精品国产免费人成在线观看| 91麻豆精品国产无毒不卡在线观看| 99久久99久久精品免费看蜜桃| 国产成人精品免费| 国产一区二区三区在线看麻豆 | 国产亚洲精品福利| 亚洲精品在线免费观看视频| 欧美日本国产视频| 欧美精品欧美精品系列| 欧美日韩久久久久久| 91黄色激情网站| 色天使色偷偷av一区二区| 色综合久久99| 色婷婷综合久久久中文一区二区 | 国产性色一区二区| 日韩美一区二区三区| 日韩美女主播在线视频一区二区三区 | 一区二区免费在线播放| 亚洲女同ⅹxx女同tv| 亚洲精品一二三| 一级做a爱片久久| 一区二区三区免费网站| 亚洲综合无码一区二区| 亚洲电影在线播放| 日产欧产美韩系列久久99| 日本在线播放一区二区三区| 久久成人精品无人区| 国产伦精品一区二区三区视频青涩 | 成人av网站在线观看| www.爱久久.com| 色综合天天视频在线观看| 欧美亚洲动漫精品| 91麻豆精品国产91久久久更新时间 | 在线免费观看日韩欧美| 欧美伊人精品成人久久综合97| 欧美日韩免费不卡视频一区二区三区| 欧美一区二区三区男人的天堂| 精品国产自在久精品国产| 国产亚洲午夜高清国产拍精品| 国产精品国产自产拍在线| 亚洲综合成人网| 国产尤物一区二区| 9色porny自拍视频一区二区| 91久色porny | 国产精品99久| 色老汉av一区二区三区| 日韩一区二区精品在线观看| 中文字幕乱码亚洲精品一区| 亚洲专区一二三| 国内偷窥港台综合视频在线播放| a亚洲天堂av| 日韩一区二区三区免费观看| 亚洲国产成人在线| 日本在线观看不卡视频| bt7086福利一区国产| 欧美一级一区二区| 亚洲美女淫视频| 黄页视频在线91| 91电影在线观看| 久久久久一区二区三区四区| 亚洲一区精品在线| 国产乱人伦精品一区二区在线观看| 欧美亚洲综合网| 国产精品国产三级国产普通话蜜臀| 蜜臀精品一区二区三区在线观看|