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

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

?? mcbsp.c

?? linux 內(nèi)核源代碼
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* * linux/arch/arm/plat-omap/mcbsp.c * * Copyright (C) 2004 Nokia Corporation * Author: Samuel Ortiz <samuel.ortiz@nokia.com> * * * 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. * * Multichannel mode not supported. */#include <linux/module.h>#include <linux/init.h>#include <linux/device.h>#include <linux/wait.h>#include <linux/completion.h>#include <linux/interrupt.h>#include <linux/err.h>#include <linux/clk.h>#include <linux/delay.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/arch/dma.h>#include <asm/arch/mux.h>#include <asm/arch/irqs.h>#include <asm/arch/dsp_common.h>#include <asm/arch/mcbsp.h>#ifdef CONFIG_MCBSP_DEBUG#define DBG(x...)	printk(x)#else#define DBG(x...)			do { } while (0)#endifstruct omap_mcbsp {	u32                          io_base;	u8                           id;	u8                           free;	omap_mcbsp_word_length       rx_word_length;	omap_mcbsp_word_length       tx_word_length;	omap_mcbsp_io_type_t         io_type; /* IRQ or poll */	/* IRQ based TX/RX */	int                          rx_irq;	int                          tx_irq;	/* DMA stuff */	u8                           dma_rx_sync;	short                        dma_rx_lch;	u8                           dma_tx_sync;	short                        dma_tx_lch;	/* Completion queues */	struct completion            tx_irq_completion;	struct completion            rx_irq_completion;	struct completion            tx_dma_completion;	struct completion            rx_dma_completion;	spinlock_t                   lock;};static struct omap_mcbsp mcbsp[OMAP_MAX_MCBSP_COUNT];#ifdef CONFIG_ARCH_OMAP1static struct clk *mcbsp_dsp_ck = 0;static struct clk *mcbsp_api_ck = 0;static struct clk *mcbsp_dspxor_ck = 0;#endif#ifdef CONFIG_ARCH_OMAP2static struct clk *mcbsp1_ick = 0;static struct clk *mcbsp1_fck = 0;static struct clk *mcbsp2_ick = 0;static struct clk *mcbsp2_fck = 0;#endifstatic void omap_mcbsp_dump_reg(u8 id){	DBG("**** MCBSP%d regs ****\n", mcbsp[id].id);	DBG("DRR2:  0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, DRR2));	DBG("DRR1:  0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, DRR1));	DBG("DXR2:  0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, DXR2));	DBG("DXR1:  0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, DXR1));	DBG("SPCR2: 0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, SPCR2));	DBG("SPCR1: 0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, SPCR1));	DBG("RCR2:  0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, RCR2));	DBG("RCR1:  0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, RCR1));	DBG("XCR2:  0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, XCR2));	DBG("XCR1:  0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, XCR1));	DBG("SRGR2: 0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, SRGR2));	DBG("SRGR1: 0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, SRGR1));	DBG("PCR0:  0x%04x\n", OMAP_MCBSP_READ(mcbsp[id].io_base, PCR0));	DBG("***********************\n");}static irqreturn_t omap_mcbsp_tx_irq_handler(int irq, void *dev_id){	struct omap_mcbsp * mcbsp_tx = (struct omap_mcbsp *)(dev_id);	DBG("TX IRQ callback : 0x%x\n", OMAP_MCBSP_READ(mcbsp_tx->io_base, SPCR2));	complete(&mcbsp_tx->tx_irq_completion);	return IRQ_HANDLED;}static irqreturn_t omap_mcbsp_rx_irq_handler(int irq, void *dev_id){	struct omap_mcbsp * mcbsp_rx = (struct omap_mcbsp *)(dev_id);	DBG("RX IRQ callback : 0x%x\n", OMAP_MCBSP_READ(mcbsp_rx->io_base, SPCR2));	complete(&mcbsp_rx->rx_irq_completion);	return IRQ_HANDLED;}static void omap_mcbsp_tx_dma_callback(int lch, u16 ch_status, void *data){	struct omap_mcbsp * mcbsp_dma_tx = (struct omap_mcbsp *)(data);	DBG("TX DMA callback : 0x%x\n", OMAP_MCBSP_READ(mcbsp_dma_tx->io_base, SPCR2));	/* We can free the channels */	omap_free_dma(mcbsp_dma_tx->dma_tx_lch);	mcbsp_dma_tx->dma_tx_lch = -1;	complete(&mcbsp_dma_tx->tx_dma_completion);}static void omap_mcbsp_rx_dma_callback(int lch, u16 ch_status, void *data){	struct omap_mcbsp * mcbsp_dma_rx = (struct omap_mcbsp *)(data);	DBG("RX DMA callback : 0x%x\n", OMAP_MCBSP_READ(mcbsp_dma_rx->io_base, SPCR2));	/* We can free the channels */	omap_free_dma(mcbsp_dma_rx->dma_rx_lch);	mcbsp_dma_rx->dma_rx_lch = -1;	complete(&mcbsp_dma_rx->rx_dma_completion);}/* * omap_mcbsp_config simply write a config to the * appropriate McBSP. * You either call this function or set the McBSP registers * by yourself before calling omap_mcbsp_start(). */void omap_mcbsp_config(unsigned int id, const struct omap_mcbsp_reg_cfg * config){	u32 io_base = mcbsp[id].io_base;	DBG("OMAP-McBSP: McBSP%d  io_base: 0x%8x\n", id+1, io_base);	/* We write the given config */	OMAP_MCBSP_WRITE(io_base, SPCR2, config->spcr2);	OMAP_MCBSP_WRITE(io_base, SPCR1, config->spcr1);	OMAP_MCBSP_WRITE(io_base, RCR2, config->rcr2);	OMAP_MCBSP_WRITE(io_base, RCR1, config->rcr1);	OMAP_MCBSP_WRITE(io_base, XCR2, config->xcr2);	OMAP_MCBSP_WRITE(io_base, XCR1, config->xcr1);	OMAP_MCBSP_WRITE(io_base, SRGR2, config->srgr2);	OMAP_MCBSP_WRITE(io_base, SRGR1, config->srgr1);	OMAP_MCBSP_WRITE(io_base, MCR2, config->mcr2);	OMAP_MCBSP_WRITE(io_base, MCR1, config->mcr1);	OMAP_MCBSP_WRITE(io_base, PCR0, config->pcr0);}static int omap_mcbsp_check(unsigned int id){	if (cpu_is_omap730()) {		if (id > OMAP_MAX_MCBSP_COUNT - 1) {		       printk(KERN_ERR "OMAP-McBSP: McBSP%d doesn't exist\n", id + 1);		       return -1;		}		return 0;	}	if (cpu_is_omap15xx() || cpu_is_omap16xx() || cpu_is_omap24xx()) {		if (id > OMAP_MAX_MCBSP_COUNT) {			printk(KERN_ERR "OMAP-McBSP: McBSP%d doesn't exist\n", id + 1);			return -1;		}		return 0;	}	return -1;}#ifdef CONFIG_ARCH_OMAP1static void omap_mcbsp_dsp_request(void){	if (cpu_is_omap15xx() || cpu_is_omap16xx()) {		clk_enable(mcbsp_dsp_ck);		clk_enable(mcbsp_api_ck);		/* enable 12MHz clock to mcbsp 1 & 3 */		clk_enable(mcbsp_dspxor_ck);		/*		 * DSP external peripheral reset		 * FIXME: This should be moved to dsp code		 */		__raw_writew(__raw_readw(DSP_RSTCT2) | 1 | 1 << 1,			     DSP_RSTCT2);	}}static void omap_mcbsp_dsp_free(void){	if (cpu_is_omap15xx() || cpu_is_omap16xx()) {		clk_disable(mcbsp_dspxor_ck);		clk_disable(mcbsp_dsp_ck);		clk_disable(mcbsp_api_ck);	}}#endif#ifdef CONFIG_ARCH_OMAP2static void omap2_mcbsp2_mux_setup(void){	if (cpu_is_omap2420()) {		omap_cfg_reg(Y15_24XX_MCBSP2_CLKX);		omap_cfg_reg(R14_24XX_MCBSP2_FSX);		omap_cfg_reg(W15_24XX_MCBSP2_DR);		omap_cfg_reg(V15_24XX_MCBSP2_DX);		omap_cfg_reg(V14_24XX_GPIO117);	}	/*	 * Need to add MUX settings for OMAP 2430 SDP	 */}#endif/* * We can choose between IRQ based or polled IO. * This needs to be called before omap_mcbsp_request(). */int omap_mcbsp_set_io_type(unsigned int id, omap_mcbsp_io_type_t io_type){	if (omap_mcbsp_check(id) < 0)		return -EINVAL;	spin_lock(&mcbsp[id].lock);	if (!mcbsp[id].free) {		printk (KERN_ERR "OMAP-McBSP: McBSP%d is currently in use\n", id + 1);		spin_unlock(&mcbsp[id].lock);		return -EINVAL;	}	mcbsp[id].io_type = io_type;	spin_unlock(&mcbsp[id].lock);	return 0;}int omap_mcbsp_request(unsigned int id){	int err;	if (omap_mcbsp_check(id) < 0)		return -EINVAL;#ifdef CONFIG_ARCH_OMAP1	/*	 * On 1510, 1610 and 1710, McBSP1 and McBSP3	 * are DSP public peripherals.	 */	if (id == OMAP_MCBSP1 || id == OMAP_MCBSP3)		omap_mcbsp_dsp_request();#endif#ifdef CONFIG_ARCH_OMAP2	if (cpu_is_omap24xx()) {		if (id == OMAP_MCBSP1) {			clk_enable(mcbsp1_ick);			clk_enable(mcbsp1_fck);		} else {			clk_enable(mcbsp2_ick);			clk_enable(mcbsp2_fck);		}	}#endif	spin_lock(&mcbsp[id].lock);	if (!mcbsp[id].free) {		printk (KERN_ERR "OMAP-McBSP: McBSP%d is currently in use\n", id + 1);		spin_unlock(&mcbsp[id].lock);		return -1;	}	mcbsp[id].free = 0;	spin_unlock(&mcbsp[id].lock);	if (mcbsp[id].io_type == OMAP_MCBSP_IRQ_IO) {		/* We need to get IRQs here */		err = request_irq(mcbsp[id].tx_irq, omap_mcbsp_tx_irq_handler, 0,				  "McBSP",				  (void *) (&mcbsp[id]));		if (err != 0) {			printk(KERN_ERR "OMAP-McBSP: Unable to request TX IRQ %d for McBSP%d\n",			       mcbsp[id].tx_irq, mcbsp[id].id);			return err;		}		init_completion(&(mcbsp[id].tx_irq_completion));		err = request_irq(mcbsp[id].rx_irq, omap_mcbsp_rx_irq_handler, 0,				  "McBSP",				  (void *) (&mcbsp[id]));		if (err != 0) {			printk(KERN_ERR "OMAP-McBSP: Unable to request RX IRQ %d for McBSP%d\n",			       mcbsp[id].rx_irq, mcbsp[id].id);			free_irq(mcbsp[id].tx_irq, (void *) (&mcbsp[id]));			return err;		}		init_completion(&(mcbsp[id].rx_irq_completion));	}	return 0;}void omap_mcbsp_free(unsigned int id){	if (omap_mcbsp_check(id) < 0)		return;#ifdef CONFIG_ARCH_OMAP1	if (cpu_class_is_omap1()) {		if (id == OMAP_MCBSP1 || id == OMAP_MCBSP3)			omap_mcbsp_dsp_free();	}#endif#ifdef CONFIG_ARCH_OMAP2	if (cpu_is_omap24xx()) {		if (id == OMAP_MCBSP1) {			clk_disable(mcbsp1_ick);			clk_disable(mcbsp1_fck);		} else {			clk_disable(mcbsp2_ick);			clk_disable(mcbsp2_fck);		}	}#endif	spin_lock(&mcbsp[id].lock);	if (mcbsp[id].free) {		printk (KERN_ERR "OMAP-McBSP: McBSP%d was not reserved\n", id + 1);		spin_unlock(&mcbsp[id].lock);		return;	}	mcbsp[id].free = 1;	spin_unlock(&mcbsp[id].lock);	if (mcbsp[id].io_type == OMAP_MCBSP_IRQ_IO) {		/* Free IRQs */		free_irq(mcbsp[id].rx_irq, (void *) (&mcbsp[id]));		free_irq(mcbsp[id].tx_irq, (void *) (&mcbsp[id]));	}}/* * Here we start the McBSP, by enabling the sample * generator, both transmitter and receivers, * and the frame sync. */void omap_mcbsp_start(unsigned int id){	u32 io_base;	u16 w;	if (omap_mcbsp_check(id) < 0)		return;	io_base = mcbsp[id].io_base;	mcbsp[id].rx_word_length = ((OMAP_MCBSP_READ(io_base, RCR1) >> 5) & 0x7);	mcbsp[id].tx_word_length = ((OMAP_MCBSP_READ(io_base, XCR1) >> 5) & 0x7);	/* Start the sample generator */	w = OMAP_MCBSP_READ(io_base, SPCR2);	OMAP_MCBSP_WRITE(io_base, SPCR2, w | (1 << 6));	/* Enable transmitter and receiver */	w = OMAP_MCBSP_READ(io_base, SPCR2);	OMAP_MCBSP_WRITE(io_base, SPCR2, w | 1);	w = OMAP_MCBSP_READ(io_base, SPCR1);	OMAP_MCBSP_WRITE(io_base, SPCR1, w | 1);	udelay(100);	/* Start frame sync */	w = OMAP_MCBSP_READ(io_base, SPCR2);	OMAP_MCBSP_WRITE(io_base, SPCR2, w | (1 << 7));	/* Dump McBSP Regs */	omap_mcbsp_dump_reg(id);}void omap_mcbsp_stop(unsigned int id){	u32 io_base;	u16 w;	if (omap_mcbsp_check(id) < 0)		return;	io_base = mcbsp[id].io_base;        /* Reset transmitter */	w = OMAP_MCBSP_READ(io_base, SPCR2);	OMAP_MCBSP_WRITE(io_base, SPCR2, w & ~(1));	/* Reset receiver */	w = OMAP_MCBSP_READ(io_base, SPCR1);	OMAP_MCBSP_WRITE(io_base, SPCR1, w & ~(1));	/* Reset the sample rate generator */	w = OMAP_MCBSP_READ(io_base, SPCR2);	OMAP_MCBSP_WRITE(io_base, SPCR2, w & ~(1 << 6));}/* polled mcbsp i/o operations */int omap_mcbsp_pollwrite(unsigned int id, u16 buf){	u32 base = mcbsp[id].io_base;	writew(buf, base + OMAP_MCBSP_REG_DXR1);	/* if frame sync error - clear the error */	if (readw(base + OMAP_MCBSP_REG_SPCR2) & XSYNC_ERR) {		/* clear error */		writew(readw(base + OMAP_MCBSP_REG_SPCR2) & (~XSYNC_ERR),		       base + OMAP_MCBSP_REG_SPCR2);		/* resend */		return -1;	} else {		/* wait for transmit confirmation */		int attemps = 0;		while (!(readw(base + OMAP_MCBSP_REG_SPCR2) & XRDY)) {			if (attemps++ > 1000) {				writew(readw(base + OMAP_MCBSP_REG_SPCR2) &				       (~XRST),				       base + OMAP_MCBSP_REG_SPCR2);				udelay(10);				writew(readw(base + OMAP_MCBSP_REG_SPCR2) |				       (XRST),				       base + OMAP_MCBSP_REG_SPCR2);				udelay(10);				printk(KERN_ERR				       " Could not write to McBSP Register\n");				return -2;			}		}	}	return 0;}int omap_mcbsp_pollread(unsigned int id, u16 * buf){	u32 base = mcbsp[id].io_base;	/* if frame sync error - clear the error */	if (readw(base + OMAP_MCBSP_REG_SPCR1) & RSYNC_ERR) {		/* clear error */		writew(readw(base + OMAP_MCBSP_REG_SPCR1) & (~RSYNC_ERR),		       base + OMAP_MCBSP_REG_SPCR1);		/* resend */		return -1;	} else {		/* wait for recieve confirmation */		int attemps = 0;		while (!(readw(base + OMAP_MCBSP_REG_SPCR1) & RRDY)) {			if (attemps++ > 1000) {				writew(readw(base + OMAP_MCBSP_REG_SPCR1) &				       (~RRST),				       base + OMAP_MCBSP_REG_SPCR1);				udelay(10);				writew(readw(base + OMAP_MCBSP_REG_SPCR1) |				       (RRST),				       base + OMAP_MCBSP_REG_SPCR1);				udelay(10);				printk(KERN_ERR				       " Could not read from McBSP Register\n");				return -2;			}		}	}	*buf = readw(base + OMAP_MCBSP_REG_DRR1);	return 0;}/* * IRQ based word transmission. */void omap_mcbsp_xmit_word(unsigned int id, u32 word){	u32 io_base;	omap_mcbsp_word_length word_length = mcbsp[id].tx_word_length;	if (omap_mcbsp_check(id) < 0)		return;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99精品1区2区| 国产婷婷色一区二区三区| 在线看一区二区| 99国产精品国产精品久久| 国产成人av电影在线播放| 国产一区视频在线看| 国产精品99久久久| 国产精品一区二区久久不卡| 国产成人精品午夜视频免费| 国产成人丝袜美腿| 丰满亚洲少妇av| 97se亚洲国产综合自在线不卡| 97精品久久久久中文字幕| 色综合久久综合网| 欧美日韩一区二区三区四区五区 | 欧美三区在线视频| 欧美视频一区二| 欧美福利视频导航| 精品欧美久久久| 久久精品人人做人人爽97| 成人免费在线播放视频| 亚洲精品视频免费看| 亚洲成人激情自拍| 精品综合久久久久久8888| 国产精品自拍一区| 91在线视频网址| 欧美精品三级在线观看| 精品国产免费一区二区三区香蕉| 国产视频一区二区三区在线观看 | 国内精品免费**视频| 成人污污视频在线观看| 色系网站成人免费| 日韩一区二区三区在线| 国产精品无码永久免费888| 亚洲一级二级三级在线免费观看| 日本欧美一区二区| 国产.欧美.日韩| 欧美美女一区二区| 国产欧美精品一区二区三区四区| 一区二区三区在线免费视频| 日本 国产 欧美色综合| 成+人+亚洲+综合天堂| 欧美美女一区二区三区| 国产欧美日韩综合精品一区二区| 亚洲一区在线观看网站| 韩国av一区二区三区| 欧美综合天天夜夜久久| 26uuu精品一区二区| 亚洲欧美激情插| 久久国产精品99久久人人澡| bt7086福利一区国产| 91精品婷婷国产综合久久竹菊| 欧美国产精品劲爆| 五月婷婷激情综合| www.66久久| 精品成a人在线观看| 亚洲精品久久嫩草网站秘色| 国产一区啦啦啦在线观看| 欧美在线影院一区二区| 国产亚洲成年网址在线观看| 日日夜夜免费精品| aaa欧美大片| 久久日一线二线三线suv| 亚洲午夜免费电影| 国产xxx精品视频大全| 91精品国产欧美一区二区| 亚洲视频你懂的| 国产成人一区二区精品非洲| 欧美一卡2卡三卡4卡5免费| 亚洲人成网站在线| 国产精品一区二区在线观看不卡| 欧美精品123区| 一区二区三区成人| 国产91在线|亚洲| 精品国产伦一区二区三区观看体验| 亚洲综合激情另类小说区| 国产 欧美在线| 久久蜜桃av一区精品变态类天堂 | 国产一区二区三区| 69堂精品视频| 亚洲一区二区三区四区在线观看| 床上的激情91.| 国产日韩精品一区二区三区| 麻豆精品一区二区av白丝在线| 欧美日韩精品专区| 一区二区三区色| eeuss鲁片一区二区三区在线观看| 精品国产伦一区二区三区观看方式 | 曰韩精品一区二区| 粉嫩一区二区三区性色av| 精品福利一二区| 麻豆中文一区二区| 日韩欧美你懂的| 视频一区二区国产| 欧美精品日韩一本| 亚洲国产一区二区三区| 欧美亚洲高清一区| 一区二区三区四区激情| 91官网在线免费观看| 亚洲人成网站色在线观看| 91影视在线播放| 亚洲精品乱码久久久久久久久| 不卡视频一二三| 成人免费在线视频观看| 91在线国产福利| 亚洲欧美日韩国产另类专区| 91蜜桃在线免费视频| 亚洲欧美偷拍另类a∨色屁股| 91视频免费观看| 亚洲精品久久久蜜桃| 在线观看日韩毛片| 亚洲福利电影网| 欧美一区二区三区思思人| 蜜臀av一区二区在线观看| 精品国产一二三区| 国产成人精品一区二| 国产精品传媒视频| 欧美在线观看你懂的| 热久久免费视频| 精品国产亚洲一区二区三区在线观看 | 蜜臀av一区二区在线免费观看| 日韩欧美黄色影院| 国产精品 欧美精品| 中文字幕在线观看一区| 一本色道久久综合狠狠躁的推荐| 一区二区三区不卡视频| 欧美美女黄视频| 国产美女精品人人做人人爽 | 日本亚洲视频在线| 久久综合九色综合97婷婷| 成人教育av在线| 一级日本不卡的影视| 777精品伊人久久久久大香线蕉| 久久国产夜色精品鲁鲁99| 久久久久久免费网| 色婷婷国产精品| 免费看日韩a级影片| 中文字幕的久久| 欧美日韩中文字幕一区| 久久电影网电视剧免费观看| 国产免费成人在线视频| 欧美四级电影在线观看| 精品一区二区日韩| 亚洲欧洲另类国产综合| 91精品视频网| 波多野结衣在线一区| 午夜在线成人av| 久久久久久**毛片大全| 色av成人天堂桃色av| 精品中文av资源站在线观看| 亚洲图片激情小说| 欧美成人性战久久| 91丨九色丨黑人外教| 免费高清不卡av| 亚洲精品视频一区| 国产亚洲精品bt天堂精选| 欧美视频精品在线观看| 国产.精品.日韩.另类.中文.在线.播放 | 国产精品毛片久久久久久| 欧美日韩一区二区三区四区| 成人免费黄色大片| 男女性色大片免费观看一区二区 | 欧美极品aⅴ影院| 欧美美女激情18p| 99久久精品免费看国产 | 欧美喷潮久久久xxxxx| 国产.欧美.日韩| 裸体一区二区三区| 亚洲自拍偷拍综合| 久久精品欧美日韩精品| 欧美亚洲综合久久| 成人深夜福利app| 蜜桃视频一区二区| 亚洲高清久久久| 国产精品久久福利| 久久综合色综合88| 777色狠狠一区二区三区| 色欧美日韩亚洲| 高清视频一区二区| 精东粉嫩av免费一区二区三区| 婷婷成人激情在线网| 夜夜揉揉日日人人青青一国产精品| 国产偷国产偷亚洲高清人白洁| 日韩欧美电影一区| 91精品午夜视频| 欧美日韩电影在线| 色综合久久久久网| 不卡大黄网站免费看| 成人三级伦理片| 国产精品911| 国产在线精品一区二区夜色| 偷窥少妇高潮呻吟av久久免费| 亚洲精品欧美专区| 亚洲欧洲综合另类| 成人免费视频在线观看| 国产精品国产三级国产普通话99 | 久久成人免费网| 日本伊人精品一区二区三区观看方式| 亚洲午夜精品网| 亚洲3atv精品一区二区三区|