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

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

?? mmc_core.c

?? 三星公司ARM芯片S3C2410 SD/MMC LINUX 驅動程序源碼。
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * Core MMC driver functions * * Copyright 2002 Hewlett-Packard Company * * Use consistent with the GNU GPL is permitted, * provided that this copyright notice is * preserved in its entirety in all copies and derived works. * * HEWLETT-PACKARD COMPANY MAKES NO WARRANTIES, EXPRESSED OR IMPLIED, * AS TO THE USEFULNESS OR CORRECTNESS OF THIS CODE OR ITS * FITNESS FOR ANY PARTICULAR PURPOSE. * * Many thanks to Alessandro Rubini and Jonathan Corbet! * * Author:  Andrew Christian *          6 May 2002 */#include <linux/config.h>#include <linux/module.h>#include <linux/version.h>#include <linux/proc_fs.h>#include <linux/init.h>#include <linux/interrupt.h>#include <linux/delay.h>#include <linux/list.h>#include <linux/sysctl.h>#include <linux/pm.h>#include "mmc_core.h"#define STATE_CMD_ACTIVE   (1<<0)#define STATE_CMD_DONE     (1<<1)#define STATE_INSERT       (1<<2)#define STATE_EJECT        (1<<3)static struct mmc_dev          g_mmc_dev;static struct proc_dir_entry  *proc_mmc_dir;#ifdef CONFIG_MMC_DEBUGint g_mmc_debug = CONFIG_MMC_DEBUG_VERBOSE;EXPORT_SYMBOL(g_mmc_debug);#endif/************************************************************************** * Debugging functions **************************************************************************/static char * mmc_result_strings[] = {	"NO_RESPONSE",	"NO_ERROR",	"ERROR_OUT_OF_RANGE",	"ERROR_ADDRESS",	"ERROR_BLOCK_LEN",	"ERROR_ERASE_SEQ",	"ERROR_ERASE_PARAM",	"ERROR_WP_VIOLATION",	"ERROR_CARD_IS_LOCKED",	"ERROR_LOCK_UNLOCK_FAILED",	"ERROR_COM_CRC",	"ERROR_ILLEGAL_COMMAND",	"ERROR_CARD_ECC_FAILED",	"ERROR_CC",	"ERROR_GENERAL",	"ERROR_UNDERRUN",	"ERROR_OVERRUN",	"ERROR_CID_CSD_OVERWRITE",	"ERROR_STATE_MISMATCH",	"ERROR_HEADER_MISMATCH",	"ERROR_TIMEOUT",	"ERROR_CRC",	"ERROR_DRIVER_FAILURE",};char * mmc_result_to_string( int i ){	return mmc_result_strings[i+1];}static char * card_state_strings[] = {	"empty",	"idle",	"ready",	"ident",	"stby",	"tran",	"data",	"rcv",	"prg",	"dis",};static inline char * card_state_to_string( int i ){	return card_state_strings[i+1];}/************************************************************************** * Utility functions **************************************************************************/#define PARSE_U32(_buf,_index) \	(((u32)_buf[_index]) << 24) | (((u32)_buf[_index+1]) << 16) | \        (((u32)_buf[_index+2]) << 8) | ((u32)_buf[_index+3]);#define PARSE_U16(_buf,_index) \	(((u16)_buf[_index]) << 8) | ((u16)_buf[_index+1]);int mmc_unpack_csd( struct mmc_request *request, struct mmc_csd *csd ){	u8 *buf = request->response;		if ( request->result ) return request->result;	csd->csd_structure      = (buf[1] & 0xc0) >> 6;	csd->spec_vers          = (buf[1] & 0x3c) >> 2;	csd->taac               = buf[2];	csd->nsac               = buf[3];	csd->tran_speed         = buf[4];	csd->ccc                = (((u16)buf[5]) << 4) | ((buf[6] & 0xf0) >> 4);	csd->read_bl_len        = buf[6] & 0x0f;	csd->read_bl_partial    = (buf[7] & 0x80) ? 1 : 0;	csd->write_blk_misalign = (buf[7] & 0x40) ? 1 : 0;	csd->read_blk_misalign  = (buf[7] & 0x20) ? 1 : 0;	csd->dsr_imp            = (buf[7] & 0x10) ? 1 : 0;	csd->c_size             = ((((u16)buf[7]) & 0x03) << 10) | (((u16)buf[8]) << 2) | (((u16)buf[9]) & 0xc0) >> 6;	csd->vdd_r_curr_min     = (buf[9] & 0x38) >> 3;	csd->vdd_r_curr_max     = buf[9] & 0x07;	csd->vdd_w_curr_min     = (buf[10] & 0xe0) >> 5;	csd->vdd_w_curr_max     = (buf[10] & 0x1c) >> 2;	csd->c_size_mult        = ((buf[10] & 0x03) << 1) | ((buf[11] & 0x80) >> 7);	if (csd->read_bl_len > 9) {		csd->c_size_mult += csd->read_bl_len - 9;		csd->read_bl_len = 9;	}	switch ( csd->csd_structure ) {	case CSD_STRUCT_VER_1_0:	case CSD_STRUCT_VER_1_1:		csd->erase.v22.sector_size    = (buf[11] & 0x7c) >> 2;		csd->erase.v22.erase_grp_size = ((buf[11] & 0x03) << 3) | ((buf[12] & 0xe0) >> 5);		break;	case CSD_STRUCT_VER_1_2:	default:		csd->erase.v31.erase_grp_size = (buf[11] & 0x7c) >> 2;		csd->erase.v31.erase_grp_mult = ((buf[11] & 0x03) << 3) | ((buf[12] & 0xe0) >> 5);		break;	}	csd->wp_grp_size        = buf[12] & 0x1f;	csd->wp_grp_enable      = (buf[13] & 0x80) ? 1 : 0;	csd->default_ecc        = (buf[13] & 0x60) >> 5;	csd->r2w_factor         = (buf[13] & 0x1c) >> 2;	csd->write_bl_len       = ((buf[13] & 0x03) << 2) | ((buf[14] & 0xc0) >> 6);	csd->write_bl_partial   = (buf[14] & 0x20) ? 1 : 0;	csd->file_format_grp    = (buf[15] & 0x80) ? 1 : 0;	csd->copy               = (buf[15] & 0x40) ? 1 : 0;	csd->perm_write_protect = (buf[15] & 0x20) ? 1 : 0;	csd->tmp_write_protect  = (buf[15] & 0x10) ? 1 : 0;	csd->file_format        = (buf[15] & 0x0c) >> 2;	csd->ecc                = buf[15] & 0x03;	MMC_DEBUG(2,"csd_structure=%d  spec_vers=%d  taac=%02x  nsac=%02x  tran_speed=%02x\n"		  "  ccc=%04x  read_bl_len=%d  read_bl_partial=%d  write_blk_misalign=%d\n"		  "  read_blk_misalign=%d  dsr_imp=%d  c_size=%d  vdd_r_curr_min=%d\n"		  "  vdd_r_curr_max=%d  vdd_w_curr_min=%d  vdd_w_curr_max=%d  c_size_mult=%d\n"		  "  wp_grp_size=%d  wp_grp_enable=%d  default_ecc=%d  r2w_factor=%d\n"		  "  write_bl_len=%d  write_bl_partial=%d  file_format_grp=%d  copy=%d\n"		  "  perm_write_protect=%d  tmp_write_protect=%d  file_format=%d  ecc=%d",		  csd->csd_structure, csd->spec_vers, 		  csd->taac, csd->nsac, csd->tran_speed,		  csd->ccc, csd->read_bl_len, 		  csd->read_bl_partial, csd->write_blk_misalign,		  csd->read_blk_misalign, csd->dsr_imp, 		  csd->c_size, csd->vdd_r_curr_min,		  csd->vdd_r_curr_max, csd->vdd_w_curr_min, 		  csd->vdd_w_curr_max, csd->c_size_mult,		  csd->wp_grp_size, csd->wp_grp_enable,		  csd->default_ecc, csd->r2w_factor, 		  csd->write_bl_len, csd->write_bl_partial,		  csd->file_format_grp, csd->copy, 		  csd->perm_write_protect, csd->tmp_write_protect,		  csd->file_format, csd->ecc);	switch (csd->csd_structure) {	case CSD_STRUCT_VER_1_0:	case CSD_STRUCT_VER_1_1:		MMC_DEBUG(2,"V22 sector_size=%d erase_grp_size=%d", 		      csd->erase.v22.sector_size, 		      csd->erase.v22.erase_grp_size);		break;	case CSD_STRUCT_VER_1_2:	default:		MMC_DEBUG(2,"V31 erase_grp_size=%d erase_grp_mult=%d", 		      csd->erase.v31.erase_grp_size,		      csd->erase.v31.erase_grp_mult);		break;			}	if ( buf[0] != 0x3f )  return MMC_ERROR_HEADER_MISMATCH;	return 0;}int mmc_unpack_r1( struct mmc_request *request, struct mmc_response_r1 *r1, enum card_state state ){	u8 *buf = request->response;	if ( request->result )        return request->result;	r1->cmd    = buf[0];	r1->status = PARSE_U32(buf,1);	MMC_DEBUG(2,"cmd=%d status=%08x", r1->cmd, r1->status);	/* SD card return in upper status the cardid */	if (R1_STATUS(r1->status) && request->cmd!=MMC_SET_RELATIVE_ADDR) {		if ( r1->status & R1_OUT_OF_RANGE )       return MMC_ERROR_OUT_OF_RANGE;		if ( r1->status & R1_ADDRESS_ERROR )      return MMC_ERROR_ADDRESS;		if ( r1->status & R1_BLOCK_LEN_ERROR )    return MMC_ERROR_BLOCK_LEN;		if ( r1->status & R1_ERASE_SEQ_ERROR )    return MMC_ERROR_ERASE_SEQ;		if ( r1->status & R1_ERASE_PARAM )        return MMC_ERROR_ERASE_PARAM;		if ( r1->status & R1_WP_VIOLATION )       return MMC_ERROR_WP_VIOLATION;		if ( r1->status & R1_CARD_IS_LOCKED )     return MMC_ERROR_CARD_IS_LOCKED;		if ( r1->status & R1_LOCK_UNLOCK_FAILED ) return MMC_ERROR_LOCK_UNLOCK_FAILED;		if ( r1->status & R1_COM_CRC_ERROR )      return MMC_ERROR_COM_CRC;		if ( r1->status & R1_ILLEGAL_COMMAND )    return MMC_ERROR_ILLEGAL_COMMAND;		if ( r1->status & R1_CARD_ECC_FAILED )    return MMC_ERROR_CARD_ECC_FAILED;		if ( r1->status & R1_CC_ERROR )           return MMC_ERROR_CC;		if ( r1->status & R1_ERROR )              return MMC_ERROR_GENERAL;		if ( r1->status & R1_UNDERRUN )           return MMC_ERROR_UNDERRUN;		if ( r1->status & R1_OVERRUN )            return MMC_ERROR_OVERRUN;		if ( r1->status & R1_CID_CSD_OVERWRITE )  return MMC_ERROR_CID_CSD_OVERWRITE;	}	if ( buf[0] != request->cmd ) return MMC_ERROR_HEADER_MISMATCH;	/* This should be last - it's the least dangerous error */	if ( R1_CURRENT_STATE(r1->status) != state ) return MMC_ERROR_STATE_MISMATCH;	return 0;}int mmc_unpack_cid_mmc( struct mmc_request *request, struct mmc_cid *cid ){	u8 *buf = request->response;	int i;	if ( request->result ) return request->result;	cid->mid = buf[1];	cid->oid = PARSE_U16(buf,2);	for ( i = 0 ; i < 6 ; i++ )		cid->pnm[i] = buf[4+i];	cid->pnm[6] = 0;	cid->prv = buf[10];	cid->psn = PARSE_U32(buf,11);	cid->mdt = buf[15];		MMC_DEBUG(2,"mid=%d oid=%d pnm=%s prv=%d.%d psn=%08x mdt=%d/%d",	      cid->mid, cid->oid, cid->pnm, 	      (cid->prv>>4), (cid->prv&0xf), 	      cid->psn, (cid->mdt>>4), (cid->mdt&0xf)+1997);	if ( buf[0] != 0x3f )  return MMC_ERROR_HEADER_MISMATCH;      	return 0;}int mmc_unpack_cid_sd( struct mmc_request *request, struct mmc_cid *cid ){	u8 *buf = request->response;	int i;	if ( request->result ) return request->result;	/*	 * Packed CID Format	 *	 * Field|size|   slice   | byte  | Description	 *	 *  MID |  8 | [127:120] | [ 0: 0] | Manufacture ID [$02 = Toshiba ]	 *  OID | 16 | [119:104] | [ 1: 2] | Manufacture ID [$544D "TM" = Toshiba ]	 *  PNM | 40 | [103: 64] | [ 3: 7] | Product Name Manufacture [SD044 | SD128 | SD256 for toshiba sdcard ]	 *  PRV |  8 | [ 63: 56] | [ 8: 8] | Product Revision	 *  PSN | 32 | [ 55: 24] | [ 9:12] | Product Serial Number	 *   -  |  4 | [ 23: 20] | [13:13] | All zeros	 *  MDT | 12 | [ 19:  8] | [13:14] | Manufacture Date [11:8] Month / [19:12] Year + 2000	 *  CRC |  7 | [  7:  1] | [15:15] | CRC	 *   -  |  1 | [  0:  0] | [15:15] | 1	 */	cid->mid = buf[1];	cid->oid = PARSE_U16(buf,2);	for ( i = 0 ; i < 5 ; i++ )		cid->pnm[i] = buf[4+i];	cid->pnm[5] = 0;	cid->prv = buf[9];	cid->psn = PARSE_U32(buf,10);	cid->mdt = (buf[14]<<4)|buf[15];		MMC_DEBUG(2,"mid=%d oid=%d pnm=%s prv=%d.%d psn=%08x mdt=%d/%d",	      cid->mid, cid->oid, cid->pnm, 	      (cid->prv>>4), (cid->prv&0xf), 	      cid->psn, (cid->mdt>>4), (cid->mdt&0xf)+2000);	if ( buf[0]  != 0x3f )  return MMC_ERROR_HEADER_MISMATCH;	if ( !(buf[16]&1)    )  return MMC_ERROR_CARD_ECC_FAILED;      	return 0;}int mmc_unpack_r3( struct mmc_request *request, struct mmc_response_r3 *r3 ){	u8 *buf = request->response;	if ( request->result ) return request->result;	r3->ocr = PARSE_U32(buf,1);	MMC_DEBUG(2,"ocr=%08x", r3->ocr);	if ( buf[0] != 0x3f )  return MMC_ERROR_HEADER_MISMATCH;	return 0;}/**************************************************************************/#define KBPS 1#define MBPS 1000static u32 ts_exp[] = { 100*KBPS, 1*MBPS, 10*MBPS, 100*MBPS, 0, 0, 0, 0 };static u32 ts_mul[] = { 0,    1000, 1200, 1300, 1500, 2000, 2500, 3000, 			3500, 4000, 4500, 5000, 5500, 6000, 7000, 8000 };u32 mmc_tran_speed( u8 ts ){	u32 rate = ts_exp[(ts & 0x7)] * ts_mul[(ts & 0x78) >> 3];	if ( rate <= 0 ) {		MMC_DEBUG(0, ": error - unrecognized speed 0x%02x", ts);		return 1;	}	return rate;}/**************************************************************************/void mmc_send_cmd( struct mmc_dev *dev, int cmd, u32 arg, 		   u16 nob, u16 block_len, enum mmc_rsp_t rtype ){	dev->request.cmd       = cmd;	dev->request.arg       = arg;	dev->request.rtype     = rtype;	dev->request.nob       = nob;	dev->request.block_len = block_len;	dev->request.buffer    = NULL;	if ( nob && dev->io_request )		dev->request.buffer = dev->io_request->buffer;	dev->state  |= STATE_CMD_ACTIVE;	dev->sdrive->send_cmd(&dev->request);}void mmc_finish_io_request( struct mmc_dev *dev, int result ){	struct mmc_io_request *t = dev->io_request;	struct mmc_slot *slot = dev->slot + t->id;	dev->io_request = NULL;     // Remove the old request (the media driver may requeue)	if ( slot->media_driver )		slot->media_driver->io_request_done( t, result );}/* Only call this when there is no pending request - it unloads the media driver */int mmc_check_eject( struct mmc_dev *dev ){	unsigned long   flags;	int             state;	int             i;	MMC_DEBUG(2,"dev state=%x", dev->state);	local_irq_save(flags);	state = dev->state;	dev->state = state & ~STATE_EJECT;	local_irq_restore(flags);	if ( !(state & STATE_EJECT) )		return 0;	for ( i = 0 ; i < dev->num_slots ; i++ ) {		struct mmc_slot *slot = dev->slot + i;		if ( slot->flags & MMC_SLOT_FLAG_EJECT ) {			slot->state = CARD_STATE_EMPTY;			if ( slot->media_driver ) {				slot->media_driver->unload( slot );				slot->media_driver = NULL;			}			/* Clear eject & SD card here in case the next			 * card is an MMC. Cannot clear all as suspend			 * resume will queue eject & insert together. */			slot->flags &=				~(MMC_SLOT_FLAG_EJECT | MMC_SLOT_FLAG_SDCARD);			run_sbin_mmc_hotplug(dev,i,0);		}	}	return 1;}int mmc_check_insert( struct mmc_dev *dev ){	unsigned long   flags;	int             state;	int             i;	int             card_count = 0;	MMC_DEBUG(2,"dev state=%x", dev->state);	local_irq_save(flags);	state = dev->state;	dev->state = state & ~STATE_INSERT;	local_irq_restore(flags);	if ( !(state & STATE_INSERT) ) 		return 0;	for ( i = 0 ; i < dev->num_slots ; i++ ) {		struct mmc_slot *slot = dev->slot + i;		if ( slot->flags & MMC_SLOT_FLAG_INSERT ) {			if  (!dev->sdrive->is_empty(i)) {				slot->state = CARD_STATE_IDLE;				card_count++;			}			slot->flags &= ~MMC_SLOT_FLAG_INSERT;		}	}	return card_count;}/****************************************************************** * * Hotplug callback card insertion/removal

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品久久久久久久91蜜桃| 亚洲国产精品久久艾草纯爱| 国产欧美一区二区三区在线看蜜臀| 国产日韩精品久久久| 一区二区三区国产| 国产激情精品久久久第一区二区 | 欧美一级精品在线| 亚洲综合一二三区| 黑人巨大精品欧美黑白配亚洲| 成人ar影院免费观看视频| 欧美一区二区三区日韩视频| 亚洲欧洲日韩av| 国产在线一区二区| 日韩一区二区免费电影| 亚洲综合一区二区| 91麻豆福利精品推荐| 国产午夜亚洲精品羞羞网站| 日韩成人精品视频| 欧美日韩一区二区不卡| 亚洲蜜臀av乱码久久精品| 成人精品gif动图一区| 久久亚洲捆绑美女| 精油按摩中文字幕久久| 欧美一区二区三区视频免费播放| 亚洲影院免费观看| 欧美综合亚洲图片综合区| 亚洲欧美激情一区二区| 不卡的av电影在线观看| 国产精品你懂的在线欣赏| 国产馆精品极品| 久久久久久日产精品| 国产一区二区三区在线观看免费| 日韩精品一区国产麻豆| 久久99精品国产麻豆婷婷洗澡| 91麻豆精品国产91久久久使用方法 | 日韩精品一区第一页| 欧美日韩第一区日日骚| 久久99热这里只有精品| 亚洲精品亚洲人成人网| av一区二区不卡| 中文字幕在线免费不卡| 99精品视频在线观看| 亚洲人成人一区二区在线观看| 不卡的电影网站| 一区二区三区毛片| 欧美一区二区视频网站| 全部av―极品视觉盛宴亚洲| 日韩午夜激情视频| 国产九九视频一区二区三区| 国产日本欧洲亚洲| 一本一道久久a久久精品综合蜜臀| 亚洲精品乱码久久久久久日本蜜臀| 91麻豆国产自产在线观看| 玉足女爽爽91| 日韩视频一区二区在线观看| 韩国理伦片一区二区三区在线播放 | 欧美人狂配大交3d怪物一区| 色婷婷综合久久久中文一区二区| 亚洲精品一区二区三区影院| 国产曰批免费观看久久久| 国产欧美视频在线观看| 91亚洲大成网污www| 午夜电影一区二区三区| 久久久噜噜噜久久中文字幕色伊伊 | 亚洲国产va精品久久久不卡综合| 欧美伦理电影网| 国产成人综合在线| 亚洲电影欧美电影有声小说| 精品国内片67194| 色综合久久综合| 久久91精品久久久久久秒播| 中文字幕一区二区三区视频| 制服丝袜亚洲色图| av网站免费线看精品| 日韩成人精品视频| 亚洲欧美日韩中文字幕一区二区三区| 欧美精品在欧美一区二区少妇| 国产大片一区二区| 日本在线观看不卡视频| 亚洲三级在线看| 精品99999| 欧美猛男男办公室激情| 粉嫩高潮美女一区二区三区 | 国产精品国产三级国产三级人妇| 欧美日韩国产高清一区二区| 成人免费黄色在线| 免费观看久久久4p| 亚洲一区欧美一区| 国产精品沙发午睡系列990531| 91精品国产手机| 91麻豆免费观看| 成人黄色777网| 精品午夜一区二区三区在线观看| 一区二区三区视频在线观看| 久久久久9999亚洲精品| 日韩小视频在线观看专区| 综合激情成人伊人| 成人高清av在线| 日本欧美一区二区三区乱码| 中文在线一区二区| 日韩欧美一二区| 欧美日韩精品一二三区| 色综合久久综合| 972aa.com艺术欧美| 国产成人免费视频网站高清观看视频 | 午夜电影网亚洲视频| 亚洲蜜臀av乱码久久精品蜜桃| 国产免费久久精品| 国产亚洲综合在线| 2023国产精品| 2024国产精品| 久久久精品免费免费| 欧美国产欧美亚州国产日韩mv天天看完整 | 亚洲福中文字幕伊人影院| 成人欧美一区二区三区黑人麻豆| 久久久久久一二三区| 久久精品一区二区三区不卡 | 亚洲精品国产第一综合99久久| 日本一区二区综合亚洲| 国产三级精品三级| 国产精品卡一卡二卡三| 成人欧美一区二区三区在线播放| 国产精品污网站| 中文字幕精品—区二区四季| 国产精品视频免费看| 国产精品久久久久一区二区三区| 国产亚洲欧洲997久久综合 | 国产精品久久久久桃色tv| 国产精品不卡在线| 亚洲欧美日韩一区二区三区在线观看| 亚洲免费在线播放| 偷拍自拍另类欧美| 久久国产夜色精品鲁鲁99| 久久国产精品区| 丰满少妇在线播放bd日韩电影| 成人免费毛片片v| 91在线国内视频| 欧美日韩一级片网站| 日韩三级精品电影久久久| 国产区在线观看成人精品| 国产精品久久久久四虎| 亚洲国产日韩一区二区| 久久99精品久久久久久动态图| 国产不卡在线一区| 欧美中文字幕久久| 精品美女被调教视频大全网站| 国产清纯在线一区二区www| 亚洲精品视频观看| 精品一区二区三区在线视频| 国产福利91精品| 欧美日韩精品一二三区| 国产午夜精品一区二区| 亚洲一区二区在线免费看| 久久草av在线| 色综合欧美在线视频区| 欧美大片免费久久精品三p| 国产精品理论片| 看片网站欧美日韩| 色偷偷久久一区二区三区| 日韩视频免费观看高清完整版在线观看| 久久久国际精品| 亚洲电影一级黄| 成人午夜在线播放| 欧美一级艳片视频免费观看| 国产视频一区二区在线| 午夜影视日本亚洲欧洲精品| 国产98色在线|日韩| 欧美一级电影网站| 成人免费在线播放视频| 久久国产麻豆精品| 在线精品亚洲一区二区不卡| 久久欧美一区二区| 日韩福利电影在线| 7777精品伊人久久久大香线蕉| 国产精品网曝门| 国产一区在线观看麻豆| 4438x亚洲最大成人网| 一二三四区精品视频| 国产成人精品影视| 亚洲精品一线二线三线| 日韩电影在线观看电影| 欧美亚洲综合在线| 亚洲精品视频免费看| 成人动漫一区二区在线| 久久久精品tv| 国产在线看一区| 日韩一级片网站| 石原莉奈一区二区三区在线观看| 99免费精品视频| 欧美激情在线一区二区| 国产乱码字幕精品高清av| 欧美一级专区免费大片| 欧美aⅴ一区二区三区视频| 欧美三区在线观看| 亚洲一区二区综合| 精品婷婷伊人一区三区三| 一区二区在线免费观看| 色综合色综合色综合色综合色综合 | 色88888久久久久久影院按摩| 国产精品久久久久久久久快鸭|