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

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

?? wbsd.c

?? The latest MontaVista Linux driver about SD/MMC code
?? C
?? 第 1 頁 / 共 2 頁
字號:
	DBGF("Ending data transfer (%d bytes)\n", data->bytes_xfered);		wbsd_request_end(host, host->mrq);}/* * MMC Callbacks */static void wbsd_request(struct mmc_host* mmc, struct mmc_request* mrq){	struct wbsd_host* host = mmc_priv(mmc);	struct mmc_command* cmd;	/*	 * Disable tasklets to avoid a deadlock.	 */	spin_lock_bh(&host->lock);	BUG_ON(host->mrq != NULL);	cmd = mrq->cmd;	host->mrq = mrq;		/*	 * If there is no card in the slot then	 * timeout immediatly.	 */	if (!(inb(host->base + WBSD_CSR) & WBSD_CARDPRESENT))	{		cmd->error = MMC_ERR_TIMEOUT;		goto done;	}	/*	 * Does the request include data?	 */	if (cmd->data)	{		wbsd_prepare_data(host, cmd->data);				if (cmd->data->error != MMC_ERR_NONE)			goto done;	}		wbsd_send_command(host, cmd);	/*	 * If this is a data transfer the request	 * will be finished after the data has	 * transfered.	 */		if (cmd->data && (cmd->error == MMC_ERR_NONE))	{				spin_unlock_bh(&host->lock);		return;	}		done:	wbsd_request_end(host, mrq);	spin_unlock_bh(&host->lock);}static void wbsd_set_ios(struct mmc_host* mmc, struct mmc_ios* ios){	struct wbsd_host* host = mmc_priv(mmc);	u8 clk, setup, pwr;		DBGF("clock %uHz busmode %u powermode %u Vdd %u\n",		ios->clock, ios->bus_mode, ios->power_mode, ios->vdd);	spin_lock_bh(&host->lock);	/*	 * Reset the chip on each power off.	 * Should clear out any weird states.	 */	if (ios->power_mode == MMC_POWER_OFF)		wbsd_init_device(host);		if (ios->clock >= 24000000)		clk = WBSD_CLK_24M;	else if (ios->clock >= 16000000)		clk = WBSD_CLK_16M;	else if (ios->clock >= 12000000)		clk = WBSD_CLK_12M;	else		clk = WBSD_CLK_375K;	/*	 * Only write to the clock register when	 * there is an actual change.	 */	if (clk != host->clk)	{		wbsd_write_index(host, WBSD_IDX_CLK, clk);		host->clk = clk;	}	if (ios->power_mode != MMC_POWER_OFF)	{		/*		 * Power up card.		 */		pwr = inb(host->base + WBSD_CSR);		pwr &= ~WBSD_POWER_N;		outb(pwr, host->base + WBSD_CSR);		/*		 * This behaviour is stolen from the		 * Windows driver. Don't know why, but		 * it is needed.		 */		setup = wbsd_read_index(host, WBSD_IDX_SETUP);		if (ios->bus_mode == MMC_BUSMODE_OPENDRAIN)			setup |= WBSD_DAT3_H;		else			setup &= ~WBSD_DAT3_H;		wbsd_write_index(host, WBSD_IDX_SETUP, setup);		mdelay(1);	}	spin_unlock_bh(&host->lock);}/* * Tasklets */inline static struct mmc_data* wbsd_get_data(struct wbsd_host* host){	WARN_ON(!host->mrq);	if (!host->mrq)		return NULL;	WARN_ON(!host->mrq->cmd);	if (!host->mrq->cmd)		return NULL;	WARN_ON(!host->mrq->cmd->data);	if (!host->mrq->cmd->data)		return NULL;		return host->mrq->cmd->data;}static void wbsd_tasklet_card(unsigned long param){	struct wbsd_host* host = (struct wbsd_host*)param;	u8 csr;		spin_lock(&host->lock);		csr = inb(host->base + WBSD_CSR);	WARN_ON(csr == 0xff);		if (csr & WBSD_CARDPRESENT)		DBG("Card inserted\n");	else	{		DBG("Card removed\n");				if (host->mrq)		{			printk(KERN_ERR DRIVER_NAME				": Card removed during transfer!\n");			wbsd_reset(host);						host->mrq->cmd->error = MMC_ERR_FAILED;			tasklet_schedule(&host->finish_tasklet);		}	}		/*	 * Unlock first since we might get a call back.	 */	spin_unlock(&host->lock);	mmc_detect_change(host->mmc, 0);}static void wbsd_tasklet_fifo(unsigned long param){	struct wbsd_host* host = (struct wbsd_host*)param;	struct mmc_data* data;		spin_lock(&host->lock);			if (!host->mrq)		goto end;		data = wbsd_get_data(host);	if (!data)		goto end;	if (data->flags & MMC_DATA_WRITE)		wbsd_fill_fifo(host);	else		wbsd_empty_fifo(host);	/*	 * Done?	 */	if (host->size == data->bytes_xfered)	{		wbsd_write_index(host, WBSD_IDX_FIFOEN, 0);		tasklet_schedule(&host->finish_tasklet);	}end:		spin_unlock(&host->lock);}static void wbsd_tasklet_crc(unsigned long param){	struct wbsd_host* host = (struct wbsd_host*)param;	struct mmc_data* data;		spin_lock(&host->lock);		WARN_ON(!host->mrq);	if (!host->mrq)		goto end;		data = wbsd_get_data(host);	if (!data)		goto end;		DBGF("CRC error\n");	data->error = MMC_ERR_BADCRC;		tasklet_schedule(&host->finish_tasklet);end:			spin_unlock(&host->lock);}static void wbsd_tasklet_timeout(unsigned long param){	struct wbsd_host* host = (struct wbsd_host*)param;	struct mmc_data* data;		spin_lock(&host->lock);		WARN_ON(!host->mrq);	if (!host->mrq)		goto end;		data = wbsd_get_data(host);	if (!data)		goto end;		DBGF("Timeout\n");	data->error = MMC_ERR_TIMEOUT;		tasklet_schedule(&host->finish_tasklet);end:		spin_unlock(&host->lock);}static void wbsd_tasklet_finish(unsigned long param){	struct wbsd_host* host = (struct wbsd_host*)param;	struct mmc_data* data;		spin_lock(&host->lock);		WARN_ON(!host->mrq);	if (!host->mrq)		goto end;		data = wbsd_get_data(host);	if (!data)		goto end;	wbsd_finish_data(host, data);	end:		spin_unlock(&host->lock);}static void wbsd_tasklet_block(unsigned long param){	struct wbsd_host* host = (struct wbsd_host*)param;	struct mmc_data* data;		spin_lock(&host->lock);	if ((wbsd_read_index(host, WBSD_IDX_CRCSTATUS) & WBSD_CRC_MASK) !=		WBSD_CRC_OK)	{		data = wbsd_get_data(host);		if (!data)			goto end;				DBGF("CRC error\n");		data->error = MMC_ERR_BADCRC;			tasklet_schedule(&host->finish_tasklet);	}end:		spin_unlock(&host->lock);}/* * Interrupt handling */static irqreturn_t wbsd_irq(int irq, void *dev_id, struct pt_regs *regs){	struct wbsd_host* host = dev_id;	int isr;		isr = inb(host->base + WBSD_ISR);	/*	 * Was it actually our hardware that caused the interrupt?	 */	if (isr == 0xff || isr == 0x00)		return IRQ_NONE;	/*	 * Schedule tasklets as needed.	 */	if (isr & WBSD_INT_CARD)		tasklet_schedule(&host->card_tasklet);	if (isr & WBSD_INT_FIFO_THRE)		tasklet_hi_schedule(&host->fifo_tasklet);	if (isr & WBSD_INT_CRC)		tasklet_hi_schedule(&host->crc_tasklet);	if (isr & WBSD_INT_TIMEOUT)		tasklet_hi_schedule(&host->timeout_tasklet);	if (isr & WBSD_INT_BUSYEND)		tasklet_hi_schedule(&host->block_tasklet);	if (isr & WBSD_INT_TC)		tasklet_schedule(&host->finish_tasklet);		return IRQ_HANDLED;}/* * Support functions for probe */static int wbsd_scan(struct wbsd_host* host){	int i, j, k;	int id;		/*	 * Iterate through all ports, all codes to	 * find hardware that is in our known list.	 */	for (i = 0;i < sizeof(config_ports)/sizeof(int);i++)	{		if (!request_region(config_ports[i], 2, DRIVER_NAME))			continue;					for (j = 0;j < sizeof(unlock_codes)/sizeof(int);j++)		{			id = 0xFFFF;						outb(unlock_codes[j], config_ports[i]);			outb(unlock_codes[j], config_ports[i]);						outb(WBSD_CONF_ID_HI, config_ports[i]);			id = inb(config_ports[i] + 1) << 8;			outb(WBSD_CONF_ID_LO, config_ports[i]);			id |= inb(config_ports[i] + 1);						for (k = 0;k < sizeof(valid_ids)/sizeof(int);k++)			{				if (id == valid_ids[k])				{									host->chip_id = id;					host->config = config_ports[i];					host->unlock_code = unlock_codes[i];									return 0;				}			}						if (id != 0xFFFF)			{				DBG("Unknown hardware (id %x) found at %x\n",					id, config_ports[i]);			}			outb(LOCK_CODE, config_ports[i]);		}				release_region(config_ports[i], 2);	}		return -ENODEV;}static int wbsd_request_regions(struct wbsd_host* host){	if (io & 0x7)		return -EINVAL;		if (!request_region(io, 8, DRIVER_NAME))		return -EIO;		host->base = io;			return 0;}static void wbsd_release_regions(struct wbsd_host* host){	if (host->base)		release_region(host->base, 8);	if (host->config)		release_region(host->config, 2);}static void wbsd_init_dma(struct wbsd_host* host){	host->dma = -1;		if (dma < 0)		return;		if (request_dma(dma, DRIVER_NAME))		goto err;		/*	 * We need to allocate a special buffer in	 * order for ISA to be able to DMA to it.	 */	host->dma_buffer = kmalloc(65536,		GFP_NOIO | GFP_DMA | __GFP_REPEAT | __GFP_NOWARN);	if (!host->dma_buffer)		goto free;	/*	 * Translate the address to a physical address.	 */	host->dma_addr = isa_virt_to_bus(host->dma_buffer);				/*	 * ISA DMA must be aligned on a 64k basis.	 */	if ((host->dma_addr & 0xffff) != 0)		goto kfree;	/*	 * ISA cannot access memory above 16 MB.	 */	else if (host->dma_addr >= 0x1000000)		goto kfree;	host->dma = dma;		return;	kfree:	/*	 * If we've gotten here then there is some kind of alignment bug	 */	BUG_ON(1);		kfree(host->dma_buffer);	host->dma_buffer = NULL;free:	free_dma(dma);err:	printk(KERN_WARNING DRIVER_NAME ": Unable to allocate DMA %d. "		"Falling back on FIFO.\n", dma);}static struct mmc_host_ops wbsd_ops = {	.request	= wbsd_request,	.set_ios	= wbsd_set_ios,};/* * Device probe */static int wbsd_probe(struct device* dev){	struct wbsd_host* host = NULL;	struct mmc_host* mmc = NULL;	int ret;		/*	 * Allocate MMC structure.	 */	mmc = mmc_alloc_host(sizeof(struct wbsd_host), dev);	if (!mmc)		return -ENOMEM;		host = mmc_priv(mmc);	host->mmc = mmc;		/*	 * Scan for hardware.	 */	ret = wbsd_scan(host);	if (ret)		goto freemmc;	/*	 * Reset the chip.	 */		wbsd_write_config(host, WBSD_CONF_SWRST, 1);	wbsd_write_config(host, WBSD_CONF_SWRST, 0);	/*	 * Allocate I/O ports.	 */	ret = wbsd_request_regions(host);	if (ret)		goto release;	/*	 * Set host parameters.	 */	mmc->ops = &wbsd_ops;	mmc->f_min = 375000;	mmc->f_max = 24000000;	mmc->ocr_avail = MMC_VDD_32_33|MMC_VDD_33_34;		spin_lock_init(&host->lock);	/*	 * Select SD/MMC function.	 */	wbsd_write_config(host, WBSD_CONF_DEVICE, DEVICE_SD);		/*	 * Set up card detection.	 */	wbsd_write_config(host, WBSD_CONF_PINS, 0x02);		/*	 * Configure I/O port.	 */	wbsd_write_config(host, WBSD_CONF_PORT_HI, host->base >> 8);	wbsd_write_config(host, WBSD_CONF_PORT_LO, host->base & 0xff);	/*	 * Allocate interrupt.	 */	ret = request_irq(irq, wbsd_irq, SA_SHIRQ, DRIVER_NAME, host);	if (ret)		goto release;		host->irq = irq;		/*	 * Set up tasklets.	 */	tasklet_init(&host->card_tasklet, wbsd_tasklet_card, (unsigned long)host);	tasklet_init(&host->fifo_tasklet, wbsd_tasklet_fifo, (unsigned long)host);	tasklet_init(&host->crc_tasklet, wbsd_tasklet_crc, (unsigned long)host);	tasklet_init(&host->timeout_tasklet, wbsd_tasklet_timeout, (unsigned long)host);	tasklet_init(&host->finish_tasklet, wbsd_tasklet_finish, (unsigned long)host);	tasklet_init(&host->block_tasklet, wbsd_tasklet_block, (unsigned long)host);		/*	 * Configure interrupt.	 */	wbsd_write_config(host, WBSD_CONF_IRQ, host->irq);		/*	 * Allocate DMA.	 */	wbsd_init_dma(host);		/*	 * If all went well, then configure DMA.	 */	if (host->dma >= 0)		wbsd_write_config(host, WBSD_CONF_DRQ, host->dma);		/*	 * Maximum number of segments. Worst case is one sector per segment	 * so this will be 64kB/512.	 */	mmc->max_hw_segs = NR_SG;	mmc->max_phys_segs = NR_SG;		/*	 * Maximum number of sectors in one transfer. Also limited by 64kB	 * buffer.	 */	mmc->max_sectors = 128;		/*	 * Maximum segment size. Could be one segment with the maximum number	 * of segments.	 */	mmc->max_seg_size = mmc->max_sectors * 512;		/*	 * Enable chip.	 */	wbsd_write_config(host, WBSD_CONF_ENABLE, 1);		/*	 * Power up chip.	 */	wbsd_write_config(host, WBSD_CONF_POWER, 0x20);		/*	 * Power Management stuff. No idea how this works.	 * Not tested.	 */#ifdef CONFIG_PM	wbsd_write_config(host, WBSD_CONF_PME, 0xA0);#endif	/*	 * Reset the chip into a known state.	 */	wbsd_init_device(host);		dev_set_drvdata(dev, mmc);		/*	 * Add host to MMC layer.	 */	mmc_add_host(mmc);	printk(KERN_INFO "%s: W83L51xD id %x at 0x%x irq %d dma %d\n",		mmc_hostname(mmc), (int)host->chip_id, (int)host->base,		(int)host->irq, (int)host->dma);	return 0;release:	wbsd_release_regions(host);freemmc:	mmc_free_host(mmc);	return ret;}/* * Device remove */static int wbsd_remove(struct device* dev){	struct mmc_host* mmc = dev_get_drvdata(dev);	struct wbsd_host* host;		if (!mmc)		return 0;	host = mmc_priv(mmc);		/*	 * Unregister host with MMC layer.	 */	mmc_remove_host(mmc);	/*	 * Power down the SD/MMC function.	 */	wbsd_unlock_config(host);	wbsd_write_config(host, WBSD_CONF_DEVICE, DEVICE_SD);	wbsd_write_config(host, WBSD_CONF_ENABLE, 0);	wbsd_lock_config(host);		/*	 * Free resources.	 */	if (host->dma_buffer)		kfree(host->dma_buffer);		if (host->dma >= 0)		free_dma(host->dma);	free_irq(host->irq, host);		tasklet_kill(&host->card_tasklet);	tasklet_kill(&host->fifo_tasklet);	tasklet_kill(&host->crc_tasklet);	tasklet_kill(&host->timeout_tasklet);	tasklet_kill(&host->finish_tasklet);	tasklet_kill(&host->block_tasklet);		wbsd_release_regions(host);		mmc_free_host(mmc);	return 0;}/* * Power management */#ifdef CONFIG_PMstatic int wbsd_suspend(struct device *dev, u32 state, u32 level){	DBGF("Not yet supported\n");	return 0;}static int wbsd_resume(struct device *dev, u32 level){	DBGF("Not yet supported\n");	return 0;}#else#define wbsd_suspend NULL#define wbsd_resume NULL#endifstatic void wbsd_release(struct device *dev){}static struct platform_device wbsd_device = {	.name		= DRIVER_NAME,	.id			= -1,	.dev		= {		.release = wbsd_release,	},};static struct device_driver wbsd_driver = {	.name		= DRIVER_NAME,	.bus		= &platform_bus_type,	.probe		= wbsd_probe,	.remove		= wbsd_remove,		.suspend	= wbsd_suspend,	.resume		= wbsd_resume,};/* * Module loading/unloading */static int __init wbsd_drv_init(void){	int result;		printk(KERN_INFO DRIVER_NAME		": Winbond W83L51xD SD/MMC card interface driver, "		DRIVER_VERSION "\n");	printk(KERN_INFO DRIVER_NAME ": Copyright(c) Pierre Ossman\n");		result = driver_register(&wbsd_driver);	if (result < 0)		return result;	result = platform_device_register(&wbsd_device);	if (result < 0)		return result;	return 0;}static void __exit wbsd_drv_exit(void){	platform_device_unregister(&wbsd_device);		driver_unregister(&wbsd_driver);	DBG("unloaded\n");}module_init(wbsd_drv_init);module_exit(wbsd_drv_exit);module_param(io, uint, 0444);module_param(irq, uint, 0444);module_param(dma, int, 0444);MODULE_LICENSE("GPL");MODULE_DESCRIPTION("Winbond W83L51xD SD/MMC card interface driver");MODULE_PARM_DESC(io, "I/O base to allocate. Must be 8 byte aligned. (default 0x248)");MODULE_PARM_DESC(irq, "IRQ to allocate. (default 6)");MODULE_PARM_DESC(dma, "DMA channel to allocate. -1 for no DMA. (default 2)");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女脱光内衣内裤视频久久网站| 欧美一级日韩一级| 国产精品久久久99| 成人动漫av在线| 亚洲国产精品成人综合| 成人av网址在线| 亚洲欧美成aⅴ人在线观看| 一本久道中文字幕精品亚洲嫩| 亚洲丝袜精品丝袜在线| 欧美亚州韩日在线看免费版国语版| 亚洲国产一区二区三区| 91精品国产一区二区三区| 久久成人久久鬼色| 中文一区二区在线观看| 色综合天天综合| 琪琪久久久久日韩精品| 久久品道一品道久久精品| 99亚偷拍自图区亚洲| 五月综合激情婷婷六月色窝| 日韩一区二区免费高清| 成人午夜私人影院| 亚洲一区二区免费视频| www国产精品av| 99久久99久久精品免费观看| 亚洲动漫第一页| 久久精子c满五个校花| 色老头久久综合| 日韩高清不卡一区| 中文字幕av资源一区| 在线视频国内自拍亚洲视频| 老司机一区二区| 一区二区成人在线| 日韩免费视频一区| 91精彩视频在线| 成人做爰69片免费看网站| 一区二区三区四区亚洲| 精品少妇一区二区三区免费观看 | 国产精品美女一区二区| 欧美日本韩国一区| 99久久国产综合精品麻豆| 日本不卡视频一二三区| 最近日韩中文字幕| 久久婷婷综合激情| 欧美精品视频www在线观看| 国产成人午夜高潮毛片| 日韩vs国产vs欧美| 一区二区三区中文在线| 欧美激情在线一区二区| 欧美成人a视频| 91精品国模一区二区三区| 91视频在线看| 国产精品亚洲午夜一区二区三区| 午夜av电影一区| 一区二区三区电影在线播| 中文字幕欧美国产| 国产亚洲精品aa午夜观看| 日韩欧美一区在线观看| 欧美自拍偷拍一区| 一本色道久久综合亚洲aⅴ蜜桃| 国产成人午夜99999| 麻豆一区二区99久久久久| 五月天亚洲精品| 亚洲一区二区三区在线播放| 亚洲欧美在线观看| 亚洲国产精品高清| 久久精品男人的天堂| 久久久亚洲精华液精华液精华液| 欧美电视剧在线观看完整版| 欧美日韩高清一区二区不卡| 国产不卡视频在线播放| 国产在线精品国自产拍免费| 欧美日韩国产经典色站一区二区三区| 欧美国产在线观看| 色婷婷精品久久二区二区蜜臂av| 丰满少妇在线播放bd日韩电影| 经典三级视频一区| 狠狠色狠狠色综合| 精一区二区三区| 韩国av一区二区三区在线观看| 男男gaygay亚洲| 石原莉奈在线亚洲二区| 日本中文字幕一区二区视频| 看国产成人h片视频| 国模冰冰炮一区二区| 国产永久精品大片wwwapp| 国产乱子伦视频一区二区三区| 国产一区亚洲一区| 成人免费黄色大片| 色哟哟精品一区| 欧美蜜桃一区二区三区| 欧美一卡2卡3卡4卡| 精品99一区二区| 日本一区二区视频在线观看| 亚洲欧洲韩国日本视频| 国产美女视频一区| 国产精品69久久久久水密桃| 国产激情一区二区三区四区| 国产欧美精品一区二区色综合 | 国产精品18久久久久| 狠狠色2019综合网| 丁香一区二区三区| 色综合天天综合网天天看片| 欧美精品v国产精品v日韩精品| 欧美mv日韩mv亚洲| 国产精品国产自产拍高清av王其| 亚洲欧美激情一区二区| 日韩电影在线一区| 国产91对白在线观看九色| 91亚洲大成网污www| 在线综合亚洲欧美在线视频| 精品福利一区二区三区| ...av二区三区久久精品| 婷婷中文字幕一区三区| 国产尤物一区二区在线| 欧洲精品一区二区三区在线观看| 欧美一区国产二区| 国产精品美女久久久久高潮| 午夜久久久久久| 国产一区二区三区国产| 99亚偷拍自图区亚洲| 成人av网站免费| 粉嫩av一区二区三区粉嫩| 91亚洲精品久久久蜜桃网站| 色欧美片视频在线观看| 欧美一区二区三区婷婷月色 | 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 欧美tickle裸体挠脚心vk| 一区二区在线免费观看| 国产一区福利在线| 欧美性大战xxxxx久久久| 国产欧美一区二区精品仙草咪| 亚洲精品视频在线观看免费| 国产乱码字幕精品高清av| 欧美日韩国产123区| 综合久久国产九一剧情麻豆| 久久精品国产色蜜蜜麻豆| 91天堂素人约啪| 国产**成人网毛片九色| 精品美女在线播放| 伊人性伊人情综合网| 91精品国产综合久久久蜜臀粉嫩 | 三级一区在线视频先锋| 国产·精品毛片| 欧美成人a视频| 午夜精品成人在线| 91免费观看在线| 国产精品你懂的| 国产麻豆一精品一av一免费| 91精品国产全国免费观看| 亚洲一区二区三区四区在线免费观看 | 久久99深爱久久99精品| 欧美老女人在线| 夜夜精品视频一区二区| 成熟亚洲日本毛茸茸凸凹| 久久亚洲免费视频| 黄色小说综合网站| 日韩免费观看高清完整版在线观看| 亚洲大片在线观看| 欧美日韩综合色| 亚洲午夜久久久| 亚洲一区二区三区小说| 日本一区二区成人| 在线不卡一区二区| 亚洲成人动漫精品| 欧美精品一卡两卡| 日韩福利电影在线| 日韩欧美国产麻豆| 裸体一区二区三区| 欧美成人三级电影在线| 久久er99热精品一区二区| 91精品欧美综合在线观看最新| 亚洲一级二级在线| 欧美精品一卡二卡| 视频在线在亚洲| 欧美成人一区二区三区| 久久99蜜桃精品| 国产日韩亚洲欧美综合| 成人精品免费视频| 亚洲天堂2014| 在线精品视频一区二区| 首页欧美精品中文字幕| 亚洲精品一区二区三区影院| 国产专区欧美精品| 日本一区二区免费在线| 国产91综合网| 一区二区视频在线看| 欧美日韩三级一区二区| 麻豆91小视频| 国产欧美日韩久久| 色猫猫国产区一区二在线视频| 亚洲区小说区图片区qvod| 欧美日韩一区二区三区视频| 欧美a一区二区| 国产午夜精品一区二区| 91美女片黄在线观看| 天天免费综合色| 国产日产欧产精品推荐色| 色综合久久中文综合久久97| 日本亚洲最大的色成网站www| 精品国产乱码久久|