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

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

?? spi.c~

?? cmmb if101 linux driver sample
?? C~
字號:
#include <linux/init.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/fs.h>#include <linux/sched.h>#include <linux/mm.h>#include <asm/page.h>#include <linux/poll.h>#include <linux/kdev_t.h>#include <asm/semaphore.h>//#include <asm/arch/pxa-regs.h>#include <asm-arm/arch-pxa/pxa-regs.h>#include <linux/slab.h>#include <linux/delay.h>#include <asm/uaccess.h>#include <linux/i2c.h>//#include <asm/arch/gpio.h>//#include <asm/arch/ssp.h>//#include <asm/arch/mfp.h>#include <asm/arch/hardware.h>#include <asm/dma.h>#include <linux/dma-mapping.h>#include "IF101_Operation.h"#include "IF101_Communication.h"#include <linux/interrupt.h>#include <linux/sem.h>/************************************************************************** * *		Declaration for SPI part	 *****************************************************************************/#define SPI_MODE_0  	0     //idle low, transmit falling edge, receive rising edge.#define SPI_MODE_1	1     //idle high, transmit rising edge, receive falling edge#define SPI_MODE_2  	2     //idle low, transmit rising edge, receive falling edge#define SPI_MODE_3  	3     //idle high, transmit falling edge, receive rising edge.#define SSP_PORT	1#define SPI_CLK_PIN	23//MFP_PIN_GPIO85#define SPI_CS_PIN	24//MFP_PIN_GPIO86#define SPI_SDOUT_PIN	25//MFP_PIN_GPIO87#define SPI_SDIN_PIN	26//MFP_PIN_GPIO88#define DMA_BUFFER_SIZE		PAGE_SIZE#if(SSP_PORT==1)#define DRCMR_SPI_RX	DRCMR13#define DRCMR_SPI_TX	DRCMR14#elif(SSP_PORT==2)#define DRCMR_SPI_RX	DRCMR15#define DRCMR_SPI_TX	DRCMR16#elif(SSP_PORT==3)#define DRCMR_SPI_RX	DRCMR66#define DRCMR_SPI_TX	DRCMR67#elif(SSP_PORT==4)#define DRCMR_SPI_RX	DRCMR2#define DRCMR_SPI_TX	DRCMR3#endif#define PXA_SSP_PORTS 	1#if 0static struct mhn_pin_config ssp1_pins[] = {	MHN_MFP_CFG("CLK", SPI_CLK_PIN, MFP_AF1, MFP_DS03X, 0, MFP_LPM_PULL_HIGH, MFP_EDGE_NONE),//	MHN_MFP_CFG("CS",  SPI_CS_PIN, MFP_AF1, MFP_DS03X, 0, MFP_LPM_PULL_HIGH, MFP_EDGE_NONE),	MHN_MFP_CFG("CS",  SPI_CS_PIN, MFP_AF0, MFP_DS03X, 0, MFP_LPM_PULL_HIGH, MFP_EDGE_NONE),	// manual control cs	MHN_MFP_CFG("SOUT",SPI_SDOUT_PIN, MFP_AF1, MFP_DS03X, 0, MFP_LPM_PULL_HIGH, MFP_EDGE_NONE),	MHN_MFP_CFG("SIN", SPI_SDIN_PIN, MFP_AF1, MFP_DS03X, 0, MFP_LPM_PULL_HIGH, MFP_EDGE_NONE),};#endifstruct inno_spi_dma_info{	int		txdma;	int   		rxdma;	void		*txdma_addr;	void      	*rxdma_addr;	dma_addr_t  	txdma_addr_phys;	dma_addr_t  	rxdma_addr_phys;};struct ssp_dev {        u32 port;        u32 mode;        u32 flags;        u32 psp_flags;        u32 speed;};static int spi_inited = 0;static DECLARE_MUTEX(sem);static int use_count[PXA_SSP_PORTS] = {0, 0, 0};static unsigned short clk_mode = SPI_MODE_0;static struct ssp_dev	inno_spi_dev;struct inno_spi_dma_info inno_dma;static DECLARE_MUTEX_LOCKED(dma_sem);static void inno_spi_pin_config(void);static void inno_spi_dma_init(void);static void inno_spi_dma_uninit(void);void inno_spi_write_byte(u8 cmd);void inno_spi_read_bytes(u8* pdata, u32 len);static irqreturn_t ssp_interrupt(int irq, void *dev_id, struct pt_regs *regs){	struct ssp_dev *dev = (struct ssp_dev*) dev_id;	unsigned int status = SSSR_P(dev->port);	SSSR_P(dev->port) = status; /* clear status bits */	if (status & SSSR_ROR)		printk(KERN_WARNING "SSP(%d): receiver overrun\n", dev->port);	if (status & SSSR_TUR)		printk(KERN_WARNING "SSP(%d): transmitter underrun\n", dev->port);	if (status & SSSR_BCE)		printk(KERN_WARNING "SSP(%d): bit count error\n", dev->port);	return IRQ_HANDLED;}static int ssp_init(struct ssp_dev *dev, u32 port){	int ret, irq;	if (port > PXA_SSP_PORTS || port == 0)		return -ENODEV;	down(&sem);	if (use_count[port - 1]) {		up(&sem);		return -EBUSY;	}	use_count[port - 1]++;	if (!request_mem_region(__PREG(SSCR0_P(port)), 0x2c, "SSP")) {		use_count[port - 1]--;		up(&sem);		return -EBUSY;	}	switch (port) {		case 1:			irq = IRQ_SSP;			break;#if defined (CONFIG_PXA27x)		case 2:			irq = IRQ_SSP2;			break;		case 3:			irq = IRQ_SSP3;			break;#else		case 2:			irq = IRQ_NSSP;			break;		case 3:			irq = IRQ_ASSP;			break;#endif		default:			return -ENODEV;	}	dev->port = port;	ret = request_irq(irq, ssp_interrupt, 0, "SSP", dev);	if (ret)		goto out_region;	/* turn on SSP port clock */	switch (dev->port) {#if defined (CONFIG_PXA27x)		case 1:			pxa_set_cken(CKEN23_SSP1, 1);			break;		case 2:			pxa_set_cken(CKEN3_SSP2, 1);			break;		case 3:			pxa_set_cken(CKEN4_SSP3, 1);			break;#else		case 1:			pxa_set_cken(CKEN3_SSP, 1);			break;		case 2:			pxa_set_cken(CKEN9_NSSP, 1);			break;		case 3:			pxa_set_cken(CKEN10_ASSP, 1);			break;#endif	}	up(&sem);	return 0;out_region:	release_mem_region(__PREG(SSCR0_P(port)), 0x2c);	use_count[port - 1]--;	up(&sem);	return ret;}int ssp_write_word(struct ssp_dev *dev, u32 data){	while (!(SSSR_P(dev->port) & SSSR_TNF))		cpu_relax();	SSDR_P(dev->port) = data;	return 0;}void ssp_flush(struct ssp_dev *dev){	do {		while (SSSR_P(dev->port) & SSSR_RNE) {			(void) SSDR_P(dev->port);		}	} while (SSSR_P(dev->port) & SSSR_BSY);}int ssp_read_word(struct ssp_dev *dev){	int i = 0;	for(i = 0; i< 100; i++);	while (!(SSSR_P(dev->port) & SSSR_RNE))	{		for(i = 0; i < 100; i++);			cpu_relax();	}	return SSDR_P(dev->port);}void ssp_enable(struct ssp_dev *dev){	SSCR0_P(dev->port) |= SSCR0_SSE;}void ssp_disable(struct ssp_dev *dev){	SSCR0_P(dev->port) &= ~SSCR0_SSE;}int ssp_config(struct ssp_dev *dev, u32 mode, u32 flags, u32 psp_flags, u32 speed){	dev->mode = mode;	dev->flags = flags;	dev->psp_flags = psp_flags;	dev->speed = speed;	/* set up port type, speed, port settings */	SSCR0_P(dev->port) = (dev->speed | dev->mode);	SSCR1_P(dev->port) = dev->flags;	SSPSP_P(dev->port) = dev->psp_flags;	return 0;}void ssp_exit(struct ssp_dev *dev){	int irq;	down(&sem);	SSCR0_P(dev->port) &= ~SSCR0_SSE;	/* find irq, save power and turn off SSP port clock */	switch (dev->port) {#if defined (CONFIG_PXA27x)		case 1:			irq = IRQ_SSP;			pxa_set_cken(CKEN23_SSP1, 0);			break;		case 2:			irq = IRQ_SSP2;			pxa_set_cken(CKEN3_SSP2, 0);			break;		case 3:			irq = IRQ_SSP3;			pxa_set_cken(CKEN4_SSP3, 0);			break;#else		case 1:			irq = IRQ_SSP;			pxa_set_cken(CKEN3_SSP, 0);			break;		case 2:			irq = IRQ_NSSP;			pxa_set_cken(CKEN9_NSSP, 0);			break;		case 3:			irq = IRQ_ASSP;			pxa_set_cken(CKEN10_ASSP, 0);			break;#endif		default:			printk(KERN_WARNING "SSP: tried to close invalid port\n");			return;	}	free_irq(irq, dev);	release_mem_region(__PREG(SSCR0_P(dev->port)), 0x2c);	use_count[dev->port - 1]--;	up(&sem);}static void SPI_StartFrame(void){	GPCR(SPI_CS_PIN) |= GPIO_bit(SPI_CS_PIN);}static void SPI_EndFrame(void){	GPSR(SPI_CS_PIN) |= GPIO_bit(SPI_CS_PIN);}INNO_RETURN_CODE INNO_SPI_Init(int enable){	int ret;	int spi_timming_mode;	if(spi_inited)		return 0;	//printk("clk_mode ====== %d\n", clk_mode);	switch(clk_mode){		case SPI_MODE_3:	//idle high, transmit falling edge, receive rising edge.			spi_timming_mode = SSCR1_SPH | SSCR1_SPO;			break;		case SPI_MODE_1:	//idle high, transmit rising edge, receive falling edge			spi_timming_mode = SSCR1_SPO;	        break;		case SPI_MODE_2:	//idle low,transmit rising edge, receive falling edge		    spi_timming_mode = SSCR1_SPH;			break;		case SPI_MODE_0:	//idle low, transmit falling edge, receive rising edge.		default:			spi_timming_mode = 0;			break;	}	printk("SSP_PORT == %d", SSP_PORT);	if(SSP_PORT == 1)	{		pxa_gpio_mode ( GPIO23_SCLK_MD );		pxa_gpio_mode (SPI_CS_PIN | GPIO_OUT);		pxa_gpio_mode ( GPIO25_STXD_MD );		pxa_gpio_mode ( GPIO26_SRXD_MD );	}	else if(SSP_PORT == 2)	{		pxa_gpio_mode( SPI_SDIN_PIN  | GPIO_ALT_FN_2_IN);		pxa_gpio_mode( SPI_CS_PIN    | GPIO_OUT);		pxa_gpio_mode( SPI_CLK_PIN   | GPIO_ALT_FN_1_OUT);		pxa_gpio_mode( SPI_SDOUT_PIN | GPIO_ALT_FN_2_OUT);	}	else if(SSP_PORT == 3)	{		pxa_gpio_mode( SPI_SDOUT_PIN | GPIO_ALT_FN_1_OUT);		pxa_gpio_mode( SPI_SDIN_PIN  | GPIO_ALT_FN_1_IN);		pxa_gpio_mode( SPI_CS_PIN    | GPIO_OUT);		pxa_gpio_mode( SPI_CLK_PIN   | GPIO_ALT_FN_1_OUT);	}	//initial SPI_nCS level high	GPSR(SPI_CS_PIN) |= GPIO_bit(SPI_CS_PIN);	memzero(&inno_spi_dev, sizeof(struct ssp_dev));	ret = ssp_init(&inno_spi_dev, SSP_PORT);	if(ret){		printk("Unable Init SPI %d.\r\n", SSP_PORT);	}else{		printk("init SPI successfully!!!");		ssp_disable(&inno_spi_dev);		ssp_config(&inno_spi_dev, (SSCR0_Motorola | (SSCR0_DSS & 0x07)), // SPI, 8bit data			(spi_timming_mode),	\			0,	\			(1<<8));		//6.5MHz	ssp_enable(&inno_spi_dev);	ssp_flush(&inno_spi_dev);	}	spi_inited = 1;	return INNO_NO_ERROR;#if 0	int ret;	int spi_timming_mode = 0;	if(enable == 1){		inno_spi_pin_config();		memzero(&inno_spi_dev, sizeof(struct ssp_dev));		ret = ssp_init(&inno_spi_dev, SSP_PORT, 0);		if(ret){			printk("Unable Init SPI %d.\r\n", SSP_PORT);		}else{			ssp_disable(&inno_spi_dev);			ssp_config(&inno_spi_dev, (SSCR0_Motorola | (SSCR0_DSS & 0x07)), // SPI, 8bit data						(spi_timming_mode),	\						0,	\						SSCR0_SerClkDiv(2));		//6.5MHz			inno_spi_dma_init();			ssp_enable(&inno_spi_dev);			ssp_flush(&inno_spi_dev);		}	}	else{		inno_spi_dma_uninit();		ssp_exit(&inno_spi_dev);	}	return INNO_NO_ERROR;#endif}INNO_RETURN_CODE INNO_SPI_Write_One_Byte(unsigned char data){	inno_spi_write_byte(data);	return INNO_NO_ERROR;}INNO_RETURN_CODE INNO_SPI_Read_One_Byte(unsigned char *data){	inno_spi_read_bytes(data,1); 	return INNO_NO_ERROR;}INNO_RETURN_CODE INNO_SPI_Read_Bytes(unsigned char *buffer, int len){	inno_spi_read_bytes(buffer,len); 	return INNO_NO_ERROR;}/* * inno spi dma functions */static void inno_spi_dma_tx_intr(int dma, void *devid, struct pt_regs *regs){	if (DCSR(inno_dma.txdma) & DCSR_ENDINTR){		DCSR(inno_dma.txdma) |= DCSR_ENDINTR;	}}static void inno_spi_dma_rx_intr(int dma, void *devid, struct pt_regs *regs){	if (DCSR(inno_dma.rxdma) & DCSR_ENDINTR){		DCSR(inno_dma.rxdma) |= DCSR_ENDINTR;	}	up(&dma_sem);}static void inno_spi_dma_init(void){	SSCR1_P(SSP_PORT) |= (SSCR1_TSRE | SSCR1_RSRE); 		//enable DMA request    	SSCR1_P(SSP_PORT) |= SSCR1_TxTresh(8)|SSCR1_RxTresh(8); //set DMA request trig threshold//	SSCR1_P(SSP_PORT) |= SSCR1_TRAIL;	inno_dma.rxdma = pxa_request_dma("Inno Rx SPI DMA", DMA_PRIO_MEDIUM, inno_spi_dma_rx_intr, NULL);    	inno_dma.txdma = pxa_request_dma("Inno TX SPI DMA", DMA_PRIO_MEDIUM, inno_spi_dma_tx_intr, NULL);    	inno_dma.txdma_addr = NULL;	inno_dma.rxdma_addr = NULL;	inno_dma.txdma_addr = dma_alloc_coherent(NULL, DMA_BUFFER_SIZE, &inno_dma.txdma_addr_phys, GFP_KERNEL);	inno_dma.rxdma_addr = dma_alloc_coherent(NULL, DMA_BUFFER_SIZE, &inno_dma.rxdma_addr_phys, GFP_KERNEL);	if((NULL == inno_dma.txdma_addr) || (NULL == inno_dma.rxdma_addr))		printk("SPI DMA alloc memory error");	memzero(inno_dma.txdma_addr, PAGE_ALIGN(DMA_BUFFER_SIZE));	memzero(inno_dma.rxdma_addr, PAGE_ALIGN(DMA_BUFFER_SIZE));		DRCMR_SPI_TX = inno_dma.txdma | DRCMR_MAPVLD;	DRCMR_SPI_RX = inno_dma.rxdma | DRCMR_MAPVLD;}static void inno_spi_dma_uninit(void){	if(inno_dma.txdma != -1){		pxa_free_dma(inno_dma.txdma);		inno_dma.txdma = -1;	}	if(inno_dma.rxdma != -1){		pxa_free_dma(inno_dma.rxdma);		inno_dma.rxdma = -1;	}	if(inno_dma.txdma_addr != NULL){		dma_free_coherent(NULL, DMA_BUFFER_SIZE, inno_dma.txdma_addr, inno_dma.txdma_addr_phys);		inno_dma.txdma_addr = NULL;	}	if(inno_dma.rxdma_addr != NULL){		dma_free_coherent(NULL, DMA_BUFFER_SIZE, inno_dma.rxdma_addr, inno_dma.rxdma_addr_phys);		inno_dma.rxdma_addr = NULL;	}}/* * start launch DMA for transfer @size bytes */static void inno_spi_rxdma_start(u32 size){	DCSR(inno_dma.rxdma)  = DCSR_NODESC;    	DSADR(inno_dma.rxdma) = __PREG(SSDR_P(SSP_PORT));	DTADR(inno_dma.rxdma) = inno_dma.rxdma_addr_phys;	DCMD(inno_dma.rxdma)  = DCMD_INCTRGADDR | DCMD_FLOWSRC | DCMD_ENDIRQEN | DCMD_WIDTH1 | DCMD_BURST8 | (size & DCMD_LENGTH);	DCSR(inno_dma.rxdma) |= DCSR_RUN;}static void inno_spi_txdma_start(u32 size){	DCSR(inno_dma.txdma)  = DCSR_NODESC;	DSADR(inno_dma.txdma) = inno_dma.txdma_addr_phys;	DTADR(inno_dma.txdma) = __PREG(SSDR_P(SSP_PORT));	DCMD(inno_dma.txdma)  =  DCMD_INCSRCADDR | DCMD_FLOWTRG | DCMD_ENDIRQEN | DCMD_WIDTH1 | DCMD_BURST8 | (size & DCMD_LENGTH);    	DCSR(inno_dma.txdma) |= DCSR_RUN;}static void inno_spi_dma_start(u32 size){	SSCR0_P(SSP_PORT) &= ~SSCR0_SSE;	SSCR0_P(SSP_PORT) |= SSCR0_SSE;		inno_spi_rxdma_start(size);	inno_spi_txdma_start(size);}/* * configure SPI GPIO Setting */static void inno_spi_pin_config(void){#if 0	if(SSP_PORT == 1){		mhn_mfp_set_configs(ssp1_pins, ARRAY_SIZE(ssp1_pins));		mhn_gpio_set_direction(SPI_CLK_PIN, GPIO_DIR_OUT);	//clk		mhn_gpio_set_direction(SPI_CS_PIN, GPIO_DIR_OUT);	//ncs		mhn_gpio_set_direction(SPI_SDOUT_PIN, GPIO_DIR_OUT);	//sdout		mhn_gpio_set_direction(SPI_SDIN_PIN, GPIO_DIR_IN);	//sdin					mhn_gpio_set_level(SPI_CS_PIN, GPIO_LEVEL_HIGH);	//init ncs high	}#endif}static void inno_spi_start_frame(void){//	mhn_gpio_set_level(SPI_CS_PIN, GPIO_LEVEL_LOW);	GPCR(SPI_CS_PIN) |= GPIO_bit(SPI_CS_PIN);}static void inno_spi_end_frame(void){	//mhn_gpio_set_level(SPI_CS_PIN, GPIO_LEVEL_HIGH);	GPSR(SPI_CS_PIN) |= GPIO_bit(SPI_CS_PIN);}/* * inno_spi_write_byte * 		@cmd 		- 8-bit length mmis command * return *		@null */void inno_spi_write_byte(u8 cmd){	inno_spi_start_frame();	ssp_write_word(&inno_spi_dev, cmd);//    /* Read null data back from device to prevent SSP overflow *///    ssp_read_word(&inno_spi_dev);	ssp_flush(&inno_spi_dev);		inno_spi_end_frame();}/*  * note: if101 chip need nCS keep low staus when read until datas read end. * if we use spi controller to control nCS, the nCS will pull high after read every byte,  * so we should manual control nCS pin */void inno_spi_read_bytes(u8* pdata, u32 len){	u32 i;		SPI_StartFrame();	for(i=0; i<len; i++){		ssp_write_word(&inno_spi_dev, 0);	// in order to generate clock to receive		*(pdata+i) = (u8)(ssp_read_word(&inno_spi_dev));	}	SPI_EndFrame();#if 0	u32 count = 0;		u32 len_dma = len;	u8* pbuf = pdata;	inno_spi_start_frame();	if(len > 8){		if(len%8!=0)	//filled to multiple of 8bytes			len_dma = (len+7)/8*8;		while(len_dma > 0){			count = min(len_dma, (u32)DMA_BUFFER_SIZE);			inno_spi_dma_start(count);			down_interruptible(&dma_sem);			len_dma -= count;			memcpy(pbuf, inno_dma.rxdma_addr, min(count, len));			len -= min(count, len);			pbuf += min(count,len);		}		goto out;	}	for(count=0; count<len; count++){		ssp_write_word(&inno_spi_dev, 0);	// in order to generate clock to receive		*(pdata+count) = ssp_read_word(&inno_spi_dev);	}out:		inno_spi_end_frame();#endif}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲一区在线电影| 国产人伦精品一区二区| 麻豆精品视频在线观看视频| 国产精品二三区| 久久这里只精品最新地址| 欧美日韩精品二区第二页| 97se亚洲国产综合自在线不卡 | 不卡视频一二三| 成人涩涩免费视频| 99这里只有精品| 一本久久精品一区二区| 一本色道久久综合狠狠躁的推荐| 日韩免费视频一区| 久久久久综合网| 国产精品进线69影院| 久久99精品久久久久久| 国产九色sp调教91| 成人动漫一区二区| 久久看人人爽人人| 国产精品一二三| 久久久久国产成人精品亚洲午夜| 日本不卡123| 丁香网亚洲国际| 在线精品视频一区二区三四| 欧美高清在线一区二区| 香蕉成人伊视频在线观看| 青青草视频一区| 欧美高清精品3d| 久久综合色婷婷| 久久99久久99小草精品免视看| 久久蜜桃一区二区| 麻豆免费精品视频| 久久综合五月天婷婷伊人| 国产一区二区三区久久久 | 日日噜噜夜夜狠狠视频欧美人| 蜜桃av一区二区三区电影| 欧美日本国产一区| 另类小说色综合网站| 色悠久久久久综合欧美99| 亚洲精品中文字幕乱码三区| 日韩综合小视频| 日韩欧美中文字幕制服| 一区二区三区在线视频免费 | 蜜桃视频免费观看一区| 欧美xxxx老人做受| 亚洲激情五月婷婷| 色狠狠色狠狠综合| 国产欧美一区二区精品性色超碰 | 日韩精品一级二级| 欧美大片在线观看一区二区| 国产精品综合视频| 国产一区二区福利视频| 国产欧美一区二区精品久导航| 成人综合在线观看| 亚洲一级二级三级在线免费观看| 黑人巨大精品欧美一区| 欧美日韩国产一二三| 奇米综合一区二区三区精品视频 | 精品久久国产97色综合| 国产69精品一区二区亚洲孕妇| 中文字幕在线观看一区二区| 狠狠色丁香婷综合久久| 亚洲欧美二区三区| 99精品视频一区二区三区| 亚洲一区二区四区蜜桃| 日韩欧美激情在线| 99视频国产精品| 日韩国产在线一| 99久久免费视频.com| 五月综合激情婷婷六月色窝| 色综合久久九月婷婷色综合| 日韩综合一区二区| 中文字幕一区日韩精品欧美| 欧美人狂配大交3d怪物一区| 国产白丝精品91爽爽久久| 亚洲成a人v欧美综合天堂| 久久一二三国产| 欧美蜜桃一区二区三区| 国产激情一区二区三区| 26uuu成人网一区二区三区| 91亚洲精品一区二区乱码| 国产精品美女久久久久久久久久久| 国产一区三区三区| 偷拍一区二区三区| 亚洲精品免费在线观看| 久久久久久久久久久电影| 91麻豆精品国产91久久久使用方法| 亚洲二区在线观看| 日韩一级黄色片| 在线看日本不卡| 波多野结衣亚洲一区| 国产综合久久久久影院| 日韩激情av在线| 亚洲444eee在线观看| 亚洲人成精品久久久久久| 国产午夜亚洲精品理论片色戒| 成人h版在线观看| 韩国精品在线观看| 免费在线一区观看| 日韩精品久久久久久| 亚洲国产成人va在线观看天堂| 国产精品国产三级国产普通话99 | 日韩精品一区二区三区四区 | 一区视频在线播放| 中文字幕在线不卡| 国产精品成人免费| 中文字幕高清不卡| 欧美综合亚洲图片综合区| 国产中文字幕精品| 国产农村妇女精品| 狠狠色丁香婷婷综合| 亚洲成人免费看| 亚洲丶国产丶欧美一区二区三区| 精品亚洲国产成人av制服丝袜| 午夜精品免费在线| 午夜不卡av在线| 亚洲成人高清在线| 日韩激情一区二区| 狠狠色狠狠色综合系列| 国产精品一区三区| 成人av午夜电影| 91麻豆视频网站| 欧美日韩在线播| 日韩精品三区四区| 麻豆精品在线视频| 国产二区国产一区在线观看| 国产精品亚洲专一区二区三区| 国产馆精品极品| 色伊人久久综合中文字幕| 91久久精品日日躁夜夜躁欧美| 欧美日韩亚洲综合在线| 91精品国产麻豆| 欧美日韩一区小说| 欧美精品第1页| 久久在线免费观看| 综合在线观看色| 亚洲国产成人自拍| 亚洲免费观看高清完整版在线| 亚洲成人精品在线观看| 奇米色一区二区三区四区| 国产在线精品不卡| 色婷婷综合久色| 欧美xxxx在线观看| 中文字幕中文乱码欧美一区二区 | 欧美三级电影一区| 日韩三级视频在线观看| 国产精品蜜臀在线观看| 国产精品久久久久久久裸模| 亚洲伊人伊色伊影伊综合网| 麻豆91在线播放| 91在线porny国产在线看| 91.com在线观看| 国产精品美女一区二区三区| 偷拍自拍另类欧美| av一区二区不卡| 日韩欧美在线网站| 日本一区二区三区电影| 亚洲猫色日本管| 天天综合日日夜夜精品| 久久国产精品99久久久久久老狼| 国产高清不卡二三区| 91在线观看免费视频| 91精品欧美久久久久久动漫 | 欧美美女黄视频| 久久亚洲精品国产精品紫薇| 亚洲欧洲精品一区二区三区| 亚洲午夜私人影院| av不卡在线播放| 久久综合色一综合色88| 日本91福利区| 在线观看日韩电影| 国产精品毛片久久久久久久| 韩国精品免费视频| 91精品蜜臀在线一区尤物| 亚洲免费观看高清完整版在线观看 | 欧美成人r级一区二区三区| 亚洲欧美激情插| 福利电影一区二区| 欧美va天堂va视频va在线| 亚洲h精品动漫在线观看| 91在线码无精品| 国产丝袜欧美中文另类| 韩国欧美国产一区| 日韩一本二本av| 日本系列欧美系列| 欧美高清视频www夜色资源网| 一区二区在线观看av| 色噜噜狠狠一区二区三区果冻| 亚洲国产成人午夜在线一区| 国产一区二区不卡在线| 日韩一区二区三| 日本最新不卡在线| 在线成人免费观看| 日韩福利电影在线| 91麻豆精品国产无毒不卡在线观看 | 26uuu另类欧美| 精品一区二区三区在线播放视频| 在线视频欧美精品| 中文字幕电影一区| 色综合久久久久|