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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? mmc_slot_s3c2440.c

?? UDA1341音頻接口芯片的驅(qū)動(dòng)源碼,可以支持立體聲耳機(jī)與麥克風(fēng)
?? C
字號(hào):
/* * drivers/mmc/mmc_slot_s3c2410.c * * MMC slot interfaces specific to S3C2410 SD Controller * * Copyright (C) 2002-2003 MIZI Research, Inc. * * Author: Chan Gyun Jeong <cgjeong@mizi.com> * $Id: mmc_slot_s3c2440.c,v 1.2 2004/01/26 08:29:56 laputa Exp $ * * Revision History: * * 2002-12-07 Chan Gyun Jeong <cgjeong@mizi.com> * - initial release *  * 2003-01-13 Chan Gyun Jeong <cgjeong@mizi.com> * - clean up, and sort of improvements * * 2003-01-17 Chan Gyun Jeong <cgjeong@mizi.com> * - support for interrupt-driven data I/O * * 2004-01-06 kwang hyun LA <laputa: nala.la@samsung.com> * - pre-scaler caculate method changed for s3c2440 *  * */#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/irq.h>#include <linux/delay.h>#include <asm/hardware.h>#include <asm/arch/cpu_s3c2440.h>#include "mmc.h"/* Board-specific definitions */#ifdef CONFIG_S3C2440_SMDK#define SD_GPIO_CD		GPIO_nCD_SD#define SD_IRQ_CD		IRQ_nCD_SD#define SD_CD_LOWACTIVE#undef USE_POLLING#define USE_INTERRUPT#endifstatic struct tq_struct card_detect_task;static volatile int card_in;#ifdef USE_INTERRUPTstatic DECLARE_WAIT_QUEUE_HEAD(wq);static volatile int reading;static u_char *buffer;static int bufcnt;static int datalen;static volatile int error;#endif/* * MMC Data R/W functions  */static int read_data(struct mmc_slot *slot, u_char *buf, int len) {#ifdef USE_POLLING	int i = 0;	int cnt;	u32 stat;	DEBUG2(4, "[%s] ", __FUNCTION__);	while (i < len) {		stat = SDIDSTA;		if (!card_in) {			SDIDSTA = stat;			return -ENODEV;		}		if (stat & SDIDSTA_TOUT) {			DEBUG2(2, "[%s] Timeout Error\n", __FUNCTION__);			SDIDSTA = stat; /* clear */			return -EIO;		}		stat = SDIFSTA;		if (stat & SDIFSTA_RX) {			cnt = (stat & SDIFSTA_CNT);			while (cnt) {				*((u32 *)(buf + i)) = SDIDAT;#ifdef CONFIG_MMC_DEBUG				DEBUG2(4, "%02x", buf[i + 0]);				DEBUG2(4, "%02x", buf[i + 1]);				DEBUG2(4, "%02x", buf[i + 2]);				DEBUG2(4, "%02x", buf[i + 3]);#endif				i += sizeof(u32);				cnt -= sizeof(u32);			}		}	}	DEBUG2(4, "\n");	do {		stat = SDIDSTA;		if (!card_in) {			SDIDSTA = stat;			return -ENODEV;		}	} while (!(stat & SDIDSTA_TOUT) && !(stat & SDIDSTA_DFIN));	SDIDSTA = stat; /* clear */	return 0;#elif defined(USE_INTERRUPT)	interruptible_sleep_on(&wq);	if (!card_in) {		return -ENODEV;	}	if (error) {		return -EIO;	}	return 0;#endif /* USE_POLLING */}static int write_data(struct mmc_slot *slot, const u_char *buf, int len){#ifdef USE_POLLING	int i;	int cnt;	u32 stat;#ifdef CONFIG_MMC_DEBUG	DEBUG2(4, "[%s] ", __FUNCTION__);	for(i = 0; i < len; i++)		DEBUG2(4, "%02x", buf[i]);	DEBUG2(4, "\n");#endif	i = 0;	while (i < len) {		stat = SDIFSTA;		if (!card_in) {			SDIDSTA = stat;			return -ENODEV;		}		if (stat & SDIFSTA_TX) {			cnt = SDI_MAX_TX_FIFO - (stat & SDIFSTA_CNT);			while (cnt) {				SDIDAT = *((u32 *)(buf + i));				i += sizeof(u32);				cnt -= sizeof(u32);			}		}	}	do {		stat = SDIDSTA;		if (!card_in) {			SDIDSTA = stat;			return -ENODEV;		}	} while (!(stat & SDIDSTA_TOUT) && !(stat & SDIDSTA_DFIN));	SDIDSTA = stat; /* clear */	return 0;#elif defined(USE_INTERRUPT)	SDIIMSK |= SDIIMSK_TX_EMP;	//hzh, enable TX_EMP interrupt here!	interruptible_sleep_on(&wq);	if (!card_in) {		return -ENODEV;	}	if (error) {		return -EIO;	}	return 0;	#endif /* USE_POLLING */}#ifdef USE_INTERRUPTstatic void sdi_interrupt(int irq, void *dev_id, struct pt_regs *regs){	u32 stat;	u32 cnt;	if (reading) {#ifdef CONFIG_MMC_DEBUG		if (bufcnt == 0) {			DEBUG2(4, "[%s] RX: ", __FUNCTION__);		}#endif		stat = SDIFSTA;		if (stat & SDIFSTA_RX_LAST) {			DEBUG2(5, "\nRX_LAST\n");			cnt = (stat & SDIFSTA_CNT) / sizeof(u32);			while (cnt) {				*((u32 *)(buffer + bufcnt)) = SDIDAT;#ifdef CONFIG_MMC_DEBUG				DEBUG2(4, "%02x", buffer[bufcnt + 0]);				DEBUG2(4, "%02x", buffer[bufcnt + 1]);				DEBUG2(4, "%02x", buffer[bufcnt + 2]);				DEBUG2(4, "%02x", buffer[bufcnt + 3]);#endif				bufcnt += sizeof(u32);				cnt--;			}		} else if (stat & SDIFSTA_RX_FULL) {			DEBUG2(5, "\nRX_FULL\n");			cnt = SDI_MAX_RX_FIFO / sizeof(u32);			while (cnt && bufcnt < datalen) {				*((u32 *)(buffer + bufcnt)) = SDIDAT;#ifdef CONFIG_MMC_DEBUG				DEBUG2(4, "%02x", buffer[bufcnt + 0]);				DEBUG2(4, "%02x", buffer[bufcnt + 1]);				DEBUG2(4, "%02x", buffer[bufcnt + 2]);				DEBUG2(4, "%02x", buffer[bufcnt + 3]);#endif				bufcnt += sizeof(u32);				cnt--;			}		}		SDIFSTA = stat;	//add by hzh, clear fifo status		stat = SDIDSTA;		if (stat & SDIDSTA_DFIN) {			DEBUG2(4, "\n");			DEBUG2(5, "DFIN\n");			SDIDSTA = stat;			wake_up_interruptible(&wq);		} else if (stat & SDIDSTA_TOUT) {			DEBUG2(4, "\n");			DEBUG2(5, "DTOUT\n");			SDIDSTA = stat;			error = 1;			wake_up_interruptible(&wq);		}	} else {		stat = SDIFSTA;		if (stat & SDIFSTA_TX_EMP) {			DEBUG2(5, "TX_EMP\n");			cnt = SDI_MAX_TX_FIFO / sizeof(u32);			while (cnt && bufcnt < datalen) {				SDIDAT = *((u32 *)(buffer + bufcnt));				bufcnt += sizeof(u32);				cnt--;			}		}		SDIFSTA = stat;	//add by hzh, clear fifo status		stat = SDIDSTA;		if (stat & SDIDSTA_DFIN) {			DEBUG2(5, "DFIN\n");			SDIIMSK = 0;	//to prevent TX_EMP interrupt, add by hzh!!!			SDIDSTA = stat;			wake_up_interruptible(&wq);		} else if (stat & SDIDSTA_TOUT) {			DEBUG2(5, "DTOUT\n");			SDIDSTA = stat;			error = 1;			wake_up_interruptible(&wq);		}	}}#endif /* USE_INTERRRUPT *//* * SD Slot Interface funtions */static void power_up(struct mmc_slot *slot){	/* Set block size to 512 bytes */	SDIBSIZE = 0x200;	/* Set timeout count */	SDIDTIMER = 0x7ffffff; //  timeout value for 2440 [22..0]	/* Disable SDI interrupt */	SDIIMSK = 0x0;	/* Type B, FIFO reset, SD clock enable */	SDICON = SDICON_LE | SDICON_FRESET | SDICON_ENCLK;	/* clear all */	SDIDSTA = SDIDSTA_ALL;	/* Wait for power-up */	mdelay(125);}static void power_down(struct mmc_slot *slot){	/* Disable SD Controller */	SDICON = 0x0;	SDIIMSK = 0x0;	SDIDTIMER = 0x0;	SDIBSIZE = 0x0;}static void set_clock(struct mmc_slot *slot, int rate){	unsigned long val, pclk;	if (rate == MMC_MMC_CLOCK_HIGH) {		SDICON |= SDICON_CLKTYP;  // 1 MMC TYPE CLOCK		rate = 20000000;	}	pclk = s3c2440_get_bus_clk(GET_PCLK); // laputa to receive s3c2440 PCLK from 2.4.19#ifdef CONFIG_ARCH_FS2440	//hzh	if(pclk<=60000000)		val = (rate==MMC_MMC_CLOCK_HIGH)?2:150;	else if(pclk<=80000000)		val = (rate==MMC_MMC_CLOCK_HIGH)?3:200;	else		val = (rate==MMC_MMC_CLOCK_HIGH)?4:250;#else	val = (pclk / (rate)) ; // protect mmc over clocking to set prescler#endif	SDIPRE = (SDIPRE_MSK & val); // prescaler set value anding}static int send_cmd(struct mmc_slot *slot,  struct mmc_cmd *cmd){	int ret;	u32 stat;	if (cmd->res_flag & MMC_RES_FLAG_RDATA) {#ifdef USE_INTERRUPT		SDIIMSK = SDIIMSK_TOUT | SDIIMSK_DFIN | SDIIMSK_RX_LAST | 			SDIIMSK_RX_FULL;		reading = 1;		buffer = cmd->data;		bufcnt = 0;		datalen = cmd->data_len;		error = 0;#endif		//stat = SDIDCON_RACMD_1 | SDIDCON_BLK | SDIDCON_RX | 1 << 0;		stat = SDIDCON_RACMD_1 | SDIDCON_BLK | SDIDCON_RX | 1 | (1<<14) | (2<<22);//hzh		SDIBSIZE = cmd->data_len;		SDICON |= SDICON_FRESET;		SDIDCON = stat;	} else if (cmd->res_flag & MMC_RES_FLAG_WDATA) {#ifdef USE_INTERRUPT		//SDIIMSK = SDIIMSK_TOUT | SDIIMSK_DFIN | SDIIMSK_TX_EMP; 		SDIIMSK = SDIIMSK_TOUT | SDIIMSK_DFIN; //hzh, don't enable TX_EMP interrupt here!		reading = 0;		buffer = cmd->data;		bufcnt = 0;		datalen = cmd->data_len;		error = 0;#endif		//stat = SDIDCON_TARSP_1 | SDIDCON_BLK | SDIDCON_TX | 1 << 0;		stat = SDIDCON_TARSP_1 | SDIDCON_BLK | SDIDCON_TX | 1 | (1<<14) | (2<<22);//hzh		SDIBSIZE = cmd->data_len;		SDICON |= SDICON_FRESET;		SDIDCON = stat;	} else if (cmd->res_flag & MMC_RES_FLAG_DATALINE) {#ifdef USE_INTERRUPT		SDIIMSK = SDIIMSK_TOUT | SDIIMSK_DFIN | SDIIMSK_RX_LAST | 			SDIIMSK_RX_FULL;		reading = 1;		buffer = cmd->res;		bufcnt = 0;		datalen = cmd->data_len;		error = 0;#endif		stat = SDIDCON_RACMD_1 | SDIDCON_BLK | SDIDCON_RX | 1 << 0;		SDIBSIZE = cmd->data_len;		SDICON |= SDICON_FRESET;		SDIDCON = stat;	}	stat = SDICCON_START | cmd->cmd;	if (cmd->res_type != MMC_RES_TYPE_NONE) {		stat |=  SDICCON_WRSP;		if (cmd->res_type == MMC_RES_TYPE_R2) {			stat |= SDICCON_LRSP;		}	}	SDICARG = cmd->arg;	SDICCON = stat;	if (cmd->res_type != MMC_RES_TYPE_NONE) {		if (cmd->res_flag & MMC_RES_FLAG_DATALINE) {			ret = read_data(slot, cmd->res, cmd->data_len);			goto cmdexit;		} else {			while(1) {				stat = SDICSTA;				if (!card_in) {					SDICSTA = stat;					return -ENODEV;				}				if (stat & SDICSTA_TOUT) {					ret = -ETIMEDOUT;					SDICSTA = stat; /* clear bits */					DEBUG2(2, "[%s] Timeout Error\n",					       __FUNCTION__);					goto cmdexit;				}				if (stat & SDICSTA_RSP) break;			}			if (!(cmd->res_flag & MMC_RES_FLAG_NOCRC)) {				if ((stat & SDICSTA_ALLFLAG) != 				    (SDICSTA_SENT | SDICSTA_RSP)) {#if 0					ret = -EIO;					SDICSTA = stat; /* clear bits */					DEBUG2(2, "[%s] CRC Error\n",					       __FUNCTION__);					goto cmdexit;#endif				}			}			SDICSTA = stat; /* clear bits */			if (cmd->res_flag & MMC_RES_FLAG_RDATA) {				ret = read_data(slot, cmd->data, 						cmd->data_len);				goto cmdexit;			}			if (cmd->res_flag & MMC_RES_FLAG_WDATA) {				ret = write_data(slot, cmd->data, 						 cmd->data_len);				goto cmdexit;			}			if (mmc_get_res_len(cmd->res_type) == MMC_RES_LEN_LONG) {				stat = SDIRSP0;				stat = cpu_to_be32(stat);				memcpy(cmd->res, &stat, sizeof(stat));				stat = SDIRSP1;				stat = cpu_to_be32(stat);				memcpy(cmd->res + (1 * sizeof(stat)), 				       &stat, sizeof(stat));				stat = SDIRSP2;				stat = cpu_to_be32(stat);				memcpy(cmd->res + (2 * sizeof(stat)), 				       &stat, sizeof(stat));				stat = SDIRSP3;				stat = cpu_to_be32(stat);				memcpy(cmd->res + (3 * sizeof(stat)), 				       &stat, sizeof(stat));			} else {				stat = SDIRSP0;				stat = cpu_to_be32(stat);				memcpy(cmd->res, &stat, sizeof(stat));				stat = SDIRSP1;				stat = cpu_to_be32(stat);				memcpy(cmd->res + (1 * sizeof(stat)), 				       &stat, sizeof(stat));			}		}	} else {		do {			stat = SDICSTA;			if (!card_in) {				SDICSTA = stat;				return -ENODEV;			}		} while (!(stat & SDICSTA_SENT));		SDICSTA = stat; /* clear bits */	}	ret = 0; cmdexit:	return ret;}#define WIDE_BUS 0#define STANDARD_BUS 1static struct mmc_slot slot = {	id:			0,	narrow_bus:     WIDE_BUS,	power_up:		power_up,	power_down:		power_down,	set_clock:		set_clock,	send_cmd:		send_cmd,};static void add_task_handler(void *data){	struct mmc_slot *slot = (struct mmc_slot *)data;	int wp;#ifdef CONFIG_S3C2440_SMDK	/* Not available on SMDK2410 */	wp = 0;#endif	if (wp) {		slot->readonly = 1;	}	else {		slot->readonly = 0;	}	add_mmc_device(slot);}static void del_task_handler(void *data){	struct mmc_slot *slot = (struct mmc_slot *)data;	del_mmc_device(slot);}static void card_detect_interrupt(int irq, void *dev_id, struct pt_regs *regs){	int empty;#ifdef SD_CD_LOWACTIVE	empty = read_gpio_bit(SD_GPIO_CD);#else	empty = !read_gpio_bit(SD_GPIO_CD);#endif	DEBUG2(1, "[%s] SD CD = %d\n", __FUNCTION__, !empty);	if (!card_in && !empty) {		/* card inserted */		DEBUG2(1, "[%s] card inserted\n", __FUNCTION__);		card_in = 1;		card_detect_task.data = (void *)dev_id;		card_detect_task.routine = add_task_handler;		schedule_task(&card_detect_task);	} else if (card_in && empty) {		/* card ejected */		DEBUG2(1, "[%s] card ejected\n", __FUNCTION__);		card_in = 0;#ifdef USE_INTERRUPT		wake_up_interruptible(&wq);#endif		card_detect_task.data = (void *)dev_id;		card_detect_task.routine = del_task_handler;		schedule_task(&card_detect_task);	}}static int __init init_mmc_slot_s3c2410(void){	int ret;	CLKCON |= CLKCON_SDI;	//hzh	/* Initialize status variables */	card_in = 0;	/* Initialize h/w settings */	set_gpio_ctrl(GPIO_SDDAT3 | GPIO_MODE_SDDAT | GPIO_PULLUP_EN);	set_gpio_ctrl(GPIO_SDDAT2 | GPIO_MODE_SDDAT | GPIO_PULLUP_EN);	set_gpio_ctrl(GPIO_SDDAT1 | GPIO_MODE_SDDAT | GPIO_PULLUP_EN);	set_gpio_ctrl(GPIO_SDDAT0 | GPIO_MODE_SDDAT | GPIO_PULLUP_EN);	set_gpio_ctrl(GPIO_SDCMD | GPIO_MODE_SDCMD | GPIO_PULLUP_EN);	set_gpio_ctrl(GPIO_SDCLK | GPIO_MODE_SDCLK | GPIO_PULLUP_EN);#ifdef CONFIG_S3C2440_SMDK	set_gpio_ctrl(SD_GPIO_CD);#endif		/* Register IRQ handlers */	//set_external_irq(SD_IRQ_CD, EXT_BOTH_EDGES, GPIO_PULLUP_DIS);	set_external_irq(SD_IRQ_CD, EXT_BOTH_EDGES, GPIO_PULLUP_EN);	ret = request_irq(SD_IRQ_CD, card_detect_interrupt, 			  SA_INTERRUPT, "SD CD", (void *)&slot);	if (ret) {		printk("MMC Slot: request_irq(SD CD) failed\n");		goto err1;	}#ifdef USE_INTERRUPT	ret = request_irq(IRQ_SDI, sdi_interrupt, 			  SA_INTERRUPT, "SDI", (void *)&slot);	if (ret) {		printk("MMC Slot: request_irq(SDI) failed\n");		goto err2;	}#endif	printk("MMC Slot initialized\n");	card_detect_interrupt(SD_IRQ_CD, (void *)&slot, NULL);	return 0;#ifdef USE_INTERRUPT err2:	free_irq(SD_IRQ_CD, (void *)&slot);#endif err1:	return ret;}static void __exit exit_mmc_slot_s3c2410(void){#ifdef USE_INTERRUPT	free_irq(IRQ_SDI, (void *)&slot);#endif	free_irq(SD_IRQ_CD, (void *)&slot);	if (card_in) {		card_in = 0;		del_task_handler((void *)&slot);	}	CLKCON &= ~CLKCON_SDI;	//hzh}module_init(init_mmc_slot_s3c2410);module_exit(exit_mmc_slot_s3c2410);MODULE_AUTHOR("Chan Gyun Jeong <cgjeong@mizi.com>");MODULE_LICENSE("Not GPL, Proprietary License");MODULE_DESCRIPTION("MMC slot interfaces specific to S3C2410 SD Controller");

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲电影激情视频网站| 欧美人动与zoxxxx乱| 国产成人免费视频网站高清观看视频| 日韩精品一卡二卡三卡四卡无卡 | 美腿丝袜亚洲综合| 日韩精品电影一区亚洲| 五月天激情综合网| 婷婷综合五月天| 日韩黄色免费网站| 免费不卡在线视频| 伦理电影国产精品| 国产自产2019最新不卡| 国产福利视频一区二区三区| 成人午夜激情视频| 91网站在线播放| 欧美日韩色一区| 日韩欧美国产三级电影视频| 精品国产乱子伦一区| 欧美精彩视频一区二区三区| 中文字幕欧美一| 亚洲综合久久久| 麻豆精品精品国产自在97香蕉| 国内外成人在线| youjizz国产精品| 欧美视频三区在线播放| 日韩一级成人av| 国产欧美久久久精品影院| 亚洲色图视频网| 日韩av高清在线观看| 国产精品99久久久久久似苏梦涵| 99r国产精品| 欧美日韩综合在线| 久久亚洲一区二区三区四区| 中文字幕一区二区不卡 | 久久99蜜桃精品| 成人sese在线| 欧美日韩精品一区二区三区蜜桃 | 亚洲日本va在线观看| 亚洲国产精品天堂| 国产一区在线观看麻豆| 一本到高清视频免费精品| 91精品久久久久久久91蜜桃| 久久精品亚洲一区二区三区浴池| 亚洲欧美激情一区二区| 美女网站在线免费欧美精品| av一区二区三区四区| 91精品国产品国语在线不卡| 国产精品欧美一区喷水| 视频一区二区不卡| 成人黄色网址在线观看| 91精品国产一区二区三区 | 美女网站色91| 91麻豆国产福利精品| 日韩女优毛片在线| 亚洲色图另类专区| 精品亚洲欧美一区| 欧洲中文字幕精品| 国产人久久人人人人爽| 日日摸夜夜添夜夜添亚洲女人| 成人性色生活片| 欧美一区二区三区免费观看视频| 亚洲视频1区2区| 国产乱码一区二区三区| 777亚洲妇女| **欧美大码日韩| 国产福利精品导航| 欧美一区二区三区婷婷月色| 亚洲免费大片在线观看| 国产**成人网毛片九色 | 一区二区三区四区视频精品免费| 激情文学综合网| 91精品黄色片免费大全| 一区二区三区在线观看欧美| 成人蜜臀av电影| 精品国偷自产国产一区| 亚洲成av人片| 日本精品一区二区三区高清| 国产日韩欧美高清| 黄色成人免费在线| 欧美一区二区三区在线看| 亚洲一区免费视频| 色综合久久久久综合99| 国产精品久久久久久久久图文区 | 91麻豆.com| 国产精品国产自产拍在线| 国产精品一区2区| 精品捆绑美女sm三区| 热久久免费视频| 欧美美女bb生活片| 亚洲国产日韩综合久久精品| 日本福利一区二区| 亚洲美女少妇撒尿| 色妞www精品视频| 亚洲欧美另类图片小说| 一本色道久久综合亚洲91| 成人免费在线播放视频| 91丝袜国产在线播放| 中文字幕在线不卡一区| 91小视频免费看| 一区二区在线观看av| 91丝袜高跟美女视频| 亚洲免费在线看| 91精彩视频在线观看| 亚洲一区二区av电影| 欧美日韩亚州综合| 午夜精品久久久久久| 69堂亚洲精品首页| 免费国产亚洲视频| 精品少妇一区二区三区在线播放| 久久精品理论片| 久久看人人爽人人| 成人激情开心网| 亚洲精品国产视频| 精品污污网站免费看| 丝袜诱惑亚洲看片| 日韩欧美中文字幕一区| 国产精一品亚洲二区在线视频| 欧美激情在线一区二区| 99视频精品全部免费在线| 亚洲卡通动漫在线| 欧美日韩黄色一区二区| 蜜桃av一区二区| 国产日韩精品一区二区三区| 不卡的av网站| 亚洲综合成人在线| 欧美一卡二卡在线观看| 国产一区二区女| 中文字幕一区二区三区色视频| 日本精品视频一区二区三区| 天天亚洲美女在线视频| 日韩精品一区二区三区在线观看 | 欧美三区在线视频| 蜜臀a∨国产成人精品| 国产亚洲欧美中文| 色婷婷国产精品| 久久机这里只有精品| 亚洲国产精品av| 欧美三区在线视频| 韩国一区二区三区| 亚洲日本va午夜在线电影| 欧美一区二区性放荡片| 高清成人免费视频| 一区二区三区蜜桃| 日韩女优av电影| 91网址在线看| 麻豆91在线播放| 国产精品国产三级国产aⅴ入口| 欧美亚日韩国产aⅴ精品中极品| 免费高清在线视频一区·| 国产精品美女久久久久久久网站| 欧美精三区欧美精三区| 国产成人aaaa| 日韩av中文在线观看| 国产精品久久久久久久裸模 | √…a在线天堂一区| 日韩一区二区三区免费观看| 国产 日韩 欧美大片| 丝袜亚洲另类丝袜在线| 中文字幕欧美日韩一区| 日韩欧美在线网站| 色综合色综合色综合色综合色综合| 秋霞午夜av一区二区三区| 国产精品久久久久久久久免费丝袜 | 91精品国产91久久综合桃花| 成人av中文字幕| 美女视频黄频大全不卡视频在线播放| 国产精品看片你懂得| 日韩一区二区三区免费观看| 色悠悠亚洲一区二区| 国产在线不卡一区| 亚洲v中文字幕| 亚洲天堂成人网| 久久久国产一区二区三区四区小说 | 亚洲第一会所有码转帖| 国产精品另类一区| 日韩美女视频在线| 欧美日韩免费观看一区三区| av在线不卡免费看| 国产一区二区三区四区五区美女| 午夜视频久久久久久| 亚洲欧美电影一区二区| 国产欧美久久久精品影院| 日韩视频免费观看高清完整版在线观看 | 日韩在线一区二区| 一区二区三区在线观看动漫| 国产精品国产三级国产普通话三级| 久久伊人中文字幕| 欧美一区午夜精品| 欧美色区777第一页| 色噜噜偷拍精品综合在线| 成人av电影免费在线播放| 国产福利91精品一区二区三区| 免费观看91视频大全| 日韩电影在线一区| 日韩vs国产vs欧美| 午夜激情一区二区三区| 亚洲一区二区五区| 亚洲色图欧美在线| 亚洲免费观看视频| ...xxx性欧美|