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

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

?? usb.c

?? 嵌入式LINUX9系統應用開發詳解中USB編程實例
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*********************************************************************
 *
 * Copyright:
 *	MOTOROLA, INC. All Rights Reserved.  
 *  You are hereby granted a copyright license to use, modify, and
 *  distribute the SOFTWARE so long as this entire notice is
 *  retained without alteration in any modified and/or redistributed
 *  versions, and that such modified versions are clearly identified
 *  as such. No licenses are granted by implication, estoppel or
 *  otherwise under any patents or trademarks of Motorola, Inc. This 
 *  software is provided on an "AS IS" basis and without warranty.
 *
 *  To the maximum extent permitted by applicable law, MOTOROLA 
 *  DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED, INCLUDING 
 *  IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR
 *  PURPOSE AND ANY WARRANTY AGAINST INFRINGEMENT WITH REGARD TO THE 
 *  SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF) AND ANY 
 *  ACCOMPANYING WRITTEN MATERIALS.
 * 
 *  To the maximum extent permitted by applicable law, IN NO EVENT
 *  SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER (INCLUDING 
 *  WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS PROFITS, BUSINESS 
 *  INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR OTHER PECUNIARY
 *  LOSS) ARISING OF THE USE OR INABILITY TO USE THE SOFTWARE.   
 * 
 *  Motorola assumes no responsibility for the maintenance and support
 *  of this software
 ********************************************************************/

/*
 * File:		usb.c
 * Purpose:		Device Driver for the USB module of the MCF5272
 */

#include "mcf5272.h"
#include "init.h"

/********************************************************************/

/* Global Endpoint Status Structures */
USB_EP_STATE ep[NUM_ENDPOINTS];

/* Global Remote Wakeup Flag */
volatile int fRemoteWakeup = 0;

/* Global USB Descriptor Data (application specific) */
extern USB_DEVICE_DESC Descriptors;

/********************************************************************/
void 
usb_init(void)
{
	uint32 i, DescSize;
	uint32 *pConfigRam;
	uint32 *pDevDesc;
	MCF5272_IMM *imm = mcf5272_get_immp();

	/* Initialize Descriptor pointers and variables */
	pConfigRam = (uint32 *)((uint32)imm + MCF5272_USB_CFG_RAM);
	pDevDesc = (uint32 *)usb_get_desc(-1, -1, -1, -1);
	DescSize = usb_get_desc_size() + 3;

	/* Initialize Endpoint status structures */
	ep[0].ttype = CONTROL;
	ep[0].packet_size = ((USB_DEVICE_DESC *)pDevDesc)->bMaxPacketSize0;
	ep[0].fifo_length = (uint16)(ep[0].packet_size * FIFO_DEPTH);
	ep[0].buffer.start = 0;
	ep[0].buffer.free = 0;

	/* Set the EP0 IN-BUSY bit -- This is only required on
	   pre-2K75N masks. This bit is set by HW beginning with
	   the 2K75N silicon. */
	MCF5272_WR_USB_EP0CTL(imm, MCF5272_RD_USB_EP0CTL(imm) 
		| MCF5272_USB_EP0CTL_IN_BUSY);
	
	for (i = 1; i < NUM_ENDPOINTS; i++)
		ep[i].ttype = DISABLED;

	/* Invalidate Configuration RAM and disable Endpoint 0 */
	MCF5272_WR_USB_EP0CTL(imm, 0);

	/* Load the Configuration RAM with the descriptors */
	for (i = 0; i < (DescSize/4); i++)
		pConfigRam[i] = pDevDesc[i];

	/* Initialize FIFOs */
	usb_fifo_init();

	/* Initialize the Interrupts */
	usb_isr_init();

	/* Enable USB controller, Config RAM, EXT AFE */
#if (DEBUG)
	MCF5272_WR_USB_EP0CTL(imm, 0
		| MCF5272_USB_EP0CTL_DEBUG
	/*	| MCF5272_USB_EP0CTL_AFE_EN	*/
		| MCF5272_USB_EP0CTL_USB_EN
		| MCF5272_USB_EP0CTL_CFG_RAM_VAL);
#else
	MCF5272_WR_USB_EP0CTL(imm, 0
	/*	| MCF5272_USB_EP0CTL_AFE_EN	*/
		| MCF5272_USB_EP0CTL_USB_EN
		| MCF5272_USB_EP0CTL_CFG_RAM_VAL);
#endif
	
	/* Enable desired interrupts on EP0 */
	MCF5272_WR_USB_EP0IMR(imm, 0
		| MCF5272_USB_EP0IMR_DEV_CFG_EN
		| MCF5272_USB_EP0IMR_VEND_REQ_EN
		| MCF5272_USB_EP0IMR_WAKE_CHG_EN
		| MCF5272_USB_EP0IMR_RESUME_EN
		| MCF5272_USB_EP0IMR_SUSPEND_EN
		| MCF5272_USB_EP0IMR_RESET_EN
		| MCF5272_USB_EP0IMR_OUT_EOT_EN
		| MCF5272_USB_EP0IMR_OUT_EOP_EN
		| MCF5272_USB_EP0IMR_IN_EOT_EN
		| MCF5272_USB_EP0IMR_IN_EOP_EN
		| MCF5272_USB_EP0IMR_UNHALT_EN
		| MCF5272_USB_EP0IMR_HALT_EN);
}

/********************************************************************/
void 
usb_isr_init(void)
{
	MCF5272_IMM *imm = mcf5272_get_immp();

	/* Clear any pending interrupts in all Endpoints */
	MCF5272_WR_USB_EP0ISR(imm, 0x0001FFFF);
	MCF5272_WR_USB_EP1ISR(imm, 0x001F);
	MCF5272_WR_USB_EP2ISR(imm, 0x001F);
	MCF5272_WR_USB_EP3ISR(imm, 0x001F);
	MCF5272_WR_USB_EP4ISR(imm, 0x001F);
	MCF5272_WR_USB_EP5ISR(imm, 0x001F);
	MCF5272_WR_USB_EP6ISR(imm, 0x001F);
	MCF5272_WR_USB_EP7ISR(imm, 0x001F);

	/* Enable all interrupts on all Endpoints */
	/* These will be altered on configuration/interface changes */
	MCF5272_WR_USB_EP0IMR(imm, 0x0001FFFF);
	MCF5272_WR_USB_EP1IMR(imm, 0x001F);
	MCF5272_WR_USB_EP2IMR(imm, 0x001F);
	MCF5272_WR_USB_EP3IMR(imm, 0x001F);
	MCF5272_WR_USB_EP4IMR(imm, 0x001F);
	MCF5272_WR_USB_EP5IMR(imm, 0x001F);
	MCF5272_WR_USB_EP6IMR(imm, 0x001F);
	MCF5272_WR_USB_EP7IMR(imm, 0x001F);

	/* Initialize Interrupt Control Registers */
	MCF5272_WR_SIM_ICR2(imm, 0
		| (0x00008888)
		| (USB_EP0_LEVEL << 12) 
		| (USB_EP1_LEVEL << 8) 
		| (USB_EP2_LEVEL << 4) 
		| (USB_EP3_LEVEL << 0));
	MCF5272_WR_SIM_ICR3(imm, 0
		| (0x88880000)
		| (USB_EP4_LEVEL << 28) 
		| (USB_EP5_LEVEL << 24) 
		| (USB_EP6_LEVEL << 20) 
		| (USB_EP7_LEVEL << 16));
}

/********************************************************************/
void 
usb_endpoint0_isr(void)
{
	MCF5272_IMM *imm = mcf5272_get_immp();
	uint32 event;

	event = MCF5272_RD_USB_EP0ISR(imm) & MCF5272_RD_USB_EP0IMR(imm);

	if (event & MCF5272_USB_EP0ISR_DEV_CFG)
	{
		usb_devcfg_service();
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EP0ISR(imm, MCF5272_USB_EP0ISR_DEV_CFG);
	}
	if (event & MCF5272_USB_EP0ISR_VEND_REQ)
	{
		/* Is this a GET_DESCRIPTOR(String) request? */
		if ((MCF5272_RD_USB_DRR1(imm) & 0xFF00 >> 8) == GET_DESCRIPTOR)
		{
			/* To do: Return STRING Descriptor if it exists */
			printf("Host requested the String Descriptor\n");
			while (1) ;
		}
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EP0ISR(imm, MCF5272_USB_EP0ISR_VEND_REQ);
		usb_vendreq_service(
			(uint8)(MCF5272_RD_USB_DRR1(imm) & 0xFF),
			(uint8)(MCF5272_RD_USB_DRR1(imm) >> 8),
			(uint16)(MCF5272_RD_USB_DRR1(imm) >> 16),
			(uint16)(MCF5272_RD_USB_DRR2(imm) & 0xFFFF),
			(uint16)(MCF5272_RD_USB_DRR2(imm) >> 16));
	}
	if (event & MCF5272_USB_EP0ISR_FRM_MAT)
	{
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EP0ISR(imm, MCF5272_USB_EP0ISR_FRM_MAT);
	}
	if (event & MCF5272_USB_EP0ISR_ASOF)
	{
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EP0ISR(imm, MCF5272_USB_EP0ISR_ASOF);
	}
	if (event & MCF5272_USB_EP0ISR_SOF)
	{
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EP0ISR(imm, MCF5272_USB_EP0ISR_SOF);
	}
	if (event & MCF5272_USB_EP0ISR_WAKE_CHG)
	{
        if (MCF5272_RD_USB_EP0SR(imm) & MCF5272_USB_EP0SR_WAKE_ST)
        {
            /* Enable Wake-on-Ring */
            MCF5272_WR_USB_EP0CTL(imm,
                  MCF5272_RD_USB_EP0CTL(imm)
                | MCF5272_USB_EP0CTL_WOR_EN);
            /* Wake-on-Ring function is invoked when /INT1 pin is 0 */
            MCF5272_WR_USB_EP0CTL(imm,
                  MCF5272_RD_USB_EP0CTL(imm)
                & ~MCF5272_USB_EP0CTL_WOR_LVL);
 		    #if (DEBUG)
			    printf("Wake-on-Ring enabled.\n");
		    #endif
        }
        else
        {
			/* Disable Wake-on-Ring */
			MCF5272_WR_USB_EP0CTL(imm,
				   MCF5272_RD_USB_EP0CTL(imm)
				& ~MCF5272_USB_EP0CTL_WOR_EN);
			#if (DEBUG)
				printf("Wake-on-Ring disabled.\n");
			#endif
        }
        /* Clear this interrupt bit */
		MCF5272_WR_USB_EP0ISR(imm, MCF5272_USB_EP0ISR_WAKE_CHG);
	}
	if (event & MCF5272_USB_EP0ISR_RESUME)
	{
        usb_bus_state_chg_service(RESUME);
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EP0ISR(imm, MCF5272_USB_EP0ISR_RESUME);
	}
	if (event & MCF5272_USB_EP0ISR_SUSPEND)
	{
        if (MCF5272_RD_USB_EP0SR(imm) & MCF5272_USB_EP0SR_WAKE_ST)
            usb_bus_state_chg_service(SUSPEND | ENABLE_WAKEUP);
        else
            usb_bus_state_chg_service(SUSPEND);
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EP0ISR(imm, MCF5272_USB_EP0ISR_SUSPEND);
	}
	if (event & MCF5272_USB_EP0ISR_RESET)
	{
        usb_bus_state_chg_service(RESET);
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EP0ISR(imm, MCF5272_USB_EP0ISR_RESET);
	}
	if (event & ( MCF5272_USB_EP0ISR_OUT_EOT
				| MCF5272_USB_EP0ISR_OUT_EOP
				| MCF5272_USB_EP0ISR_OUT_LVL))
	{
		usb_out_service(0, event);
	}
	if (event & ( MCF5272_USB_EP0ISR_IN_EOT
				| MCF5272_USB_EP0ISR_IN_EOP
				| MCF5272_USB_EP0ISR_IN_LVL))
	{
		usb_in_service(0, event);
	}
	if (event & MCF5272_USB_EP0ISR_UNHALT)
	{
		#if (DEBUG)
			printf("Endpoint 0 has been UNHALTed\n");
		#endif
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EP0ISR(imm, MCF5272_USB_EP0ISR_UNHALT);
	}
	if (event & MCF5272_USB_EP0ISR_HALT)
	{
		#if (DEBUG)
			printf("Endpoint 0 has been HALTed\n");
		#endif
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EP0ISR(imm, MCF5272_USB_EP0ISR_HALT);
	}

}

/********************************************************************/
void 
usb_endpoint_isr(uint32 epnum)
{
	int event;
	MCF5272_IMM *imm = mcf5272_get_immp();

	#if (DEBUG)
		printf("Received interrupt for Endpoint %d\n",epnum);
	#endif

	event = MCF5272_RD_USB_EPISR(imm, epnum) 
		  & MCF5272_RD_USB_EPIMR(imm, epnum);

	if (event & ( MCF5272_USB_EPNISR_EOT	
				| MCF5272_USB_EPNISR_EOP
				| MCF5272_USB_EPNISR_FIFO_LVL))
	{
		/* IN Endpoint */
		if (MCF5272_RD_USB_EPISR(imm, epnum) & MCF5272_USB_EPNISR_DIR)
			usb_in_service(epnum, event);
		/* OUT Endpoint */
		else
			usb_out_service(epnum,event);
	}
	if (event & MCF5272_USB_EPNISR_HALT)
	{
		/* Call Project specific routine */
		usb_ep_halt(epnum);
		MCF5272_WR_USB_EPISR(imm, epnum, MCF5272_USB_EPNISR_HALT);
	}
	if (event & MCF5272_USB_EPNISR_UNHALT)
	{
		/* Call Project specific routine */
		usb_ep_unhalt(epnum);
		MCF5272_WR_USB_EPISR(imm, epnum, MCF5272_USB_EPNISR_UNHALT);
	}

}

/********************************************************************/
void 
usb_in_service(uint32 epnum, uint32 event)
{
	MCF5272_IMM *imm = mcf5272_get_immp();
	uint16 i;
	uint32 free_space;

	#if (DEBUG)
		if (event & MCF5272_USB_EP0ISR_IN_EOT)
			printf("Received IN_EOT for EP #%d\n",epnum);
		if (event & MCF5272_USB_EP0ISR_IN_EOP)
			printf("Received IN_EOP for EP #%d\n",epnum);
		if (event & MCF5272_USB_EP0ISR_IN_LVL)
			printf("Received IN_LVL for EP #%d\n",epnum);
	#endif

	/* Clear the FIFO Level interrupt now */
	if (event & MCF5272_USB_EPNISR_FIFO_LVL)
		MCF5272_WR_USB_EPISR(imm, epnum, MCF5272_USB_EPNISR_FIFO_LVL);

	if (event & (MCF5272_USB_EPNISR_EOP | MCF5272_USB_EPNISR_FIFO_LVL))
	{	
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EPISR(imm, epnum, MCF5272_USB_EPNISR_EOP);

		if (ep[epnum].buffer.position < ep[epnum].buffer.length)
		{
			/* USBEPDP0 only monitors the OUT FIFO */
			if (epnum == 0)
				free_space = ep[0].packet_size;
			else
				free_space = (uint16)(ep[epnum].fifo_length \
								- MCF5272_RD_USB_EPDPR(imm, epnum));
	
			for (i = ep[epnum].buffer.position; \
				 i < ep[epnum].buffer.position + free_space; )
			{
				/* Write from the buffer to the FIFO */
				if ((((ep[epnum].buffer.position + free_space) - i) > 3) 
					&& ((i + 4) < ep[epnum].buffer.length))
				{
					MCF5272_WR_USB_EPDR(imm, epnum, 32,
						*(uint32 *)(&ep[epnum].buffer.start[i]));
					i += 4;
				}
				else
				{
					MCF5272_WR_USB_EPDR(imm,epnum,8,ep[epnum].buffer.start[i]);
					i++;
				}
				if ( i >= ep[epnum].buffer.length )
				{
					/* All done -> Clear the IN-BUSY bit */
					MCF5272_WR_USB_EPCTL(imm, epnum, 
						MCF5272_RD_USB_EPCTL(imm, epnum)
						& ~MCF5272_USB_EPNCTL_IN_BUSY);
					break;
				}
			}
			ep[epnum].buffer.position = i;
		}
	}
	if ((event & MCF5272_USB_EPNISR_FIFO_LVL) && 
		(ep[epnum].ttype == ISOCHRONOUS))
	{
		/* Clear this interrupt bit */
		MCF5272_WR_USB_EPISR(imm, epnum, 0
			| MCF5272_USB_EPNISR_FIFO_LVL );
		if (ep[epnum].buffer.start && 
			 (ep[epnum].buffer.length == ep[epnum].buffer.position))
		{
			usb_ep_tx_done(epnum);
			ep[epnum].buffer.start = 0;
			ep[epnum].buffer.length = 0;
			ep[epnum].buffer.position = 0;
			ep[epnum].buffer.free = 0;

		}
	}
	if (event & MCF5272_USB_EPNISR_EOT)
	{
		MCF5272_WR_USB_EPISR(imm, epnum, 0
			| MCF5272_USB_EPNISR_EOT);
		if (ep[epnum].buffer.start)
		{
			if (ep[epnum].buffer.free)
				free(ep[epnum].buffer.start);

			/* Call the Tx Handler */
			usb_ep_tx_done(epnum);
		}
		ep[epnum].buffer.start = 0;
		ep[epnum].buffer.length = 0;
		ep[epnum].buffer.position = 0;
		ep[epnum].buffer.free = 0;

		/* Set the IN-BUSY bit
		   This is only required on pre-2K75N masks. This bit is set by 
		   HW beginning with the 2K75N silicon. */
		MCF5272_WR_USB_EPCTL(imm, epnum, MCF5272_RD_USB_EPCTL(imm, epnum) 
			| MCF5272_USB_EPNCTL_IN_BUSY);
	}
}

/********************************************************************/
void 
usb_out_service(uint32 epnum, uint32 event)
{
	MCF5272_IMM *imm = mcf5272_get_immp();
	uint32 i;
	uint16 fifo_data;

	#if (DEBUG)
		if (event & (MCF5272_USB_EP0ISR_OUT_EOT | MCF5272_USB_EPNISR_EOT))
			printf("Received OUT_EOT on EP%d\n",epnum);
		if (event & (MCF5272_USB_EP0ISR_OUT_EOP | MCF5272_USB_EPNISR_EOP))
			printf("Received OUT_EOP on EP%d\n",epnum);
		if (event & (MCF5272_USB_EP0ISR_OUT_LVL | MCF5272_USB_EPNISR_FIFO_LVL))
			printf("Received OUT_LVL on EP%d\n",epnum);
	#endif
	
	if (event & (MCF5272_USB_EP0ISR_OUT_LVL | MCF5272_USB_EPNISR_FIFO_LVL))
	{
		/* Clear the FIFO Level Interrupt bits now */
		MCF5272_WR_USB_EPISR(imm, epnum, 0
			| MCF5272_USB_EP0ISR_OUT_LVL
			| MCF5272_USB_EPNISR_FIFO_LVL);
	}
	if (event & ( MCF5272_USB_EP0ISR_OUT_LVL 
				| MCF5272_USB_EPNISR_FIFO_LVL
				| MCF5272_USB_EP0ISR_OUT_EOP
				| MCF5272_USB_EPNISR_EOP))
	{
		/* Clear the EOP interrupt bits */
		MCF5272_WR_USB_EPISR(imm, epnum, 0 
			| MCF5272_USB_EP0ISR_OUT_EOP
			| MCF5272_USB_EPNISR_EOP);

		/* Read the Data Present register */
		fifo_data = MCF5272_RD_USB_EPDPR(imm, epnum);

		if (ep[epnum].buffer.start &&
		   (ep[epnum].buffer.position + fifo_data > ep[epnum].buffer.length))
		{
			/* Buffer is going to overflow! */
			/* To do: realloc() to avoid this problem */
			usb_ep_rx_done(epnum,OVERFLOW_ERROR);
			ep[epnum].buffer.start = 0;
		}
		if (ep[epnum].buffer.start == 0)
		{
			/* No Buffer allocated! */
			ep[epnum].buffer.start = (uint8 *) malloc(BUFFER_SIZE);
			if (!ep[epnum].buffer.start)
			{
				/* Could not allocate buffer */
				usb_ep_rx_done(epnum,MALLOC_ERROR);
				return;
			}
			ep[epnum].buffer.free = TRUE;
			ep[epnum].buffer.length = BUFFER_SIZE;
			ep[epnum].buffer.position = 0;
		}

		/* Read the data from the FIFO into the buffer */
		for (i = ep[epnum].buffer.position; \
			 i < ep[epnum].buffer.position + fifo_data;)
		{
			if (ep[epnum].buffer.position + fifo_data - i > 3)
			{
				*((uint32 *)(&ep[epnum].buffer.start[i])) = 
					MCF5272_RD_USB_EPDR(imm, epnum,32);
				i += 4;
			}
			else
			{
				ep[epnum].buffer.start[i] = 
					MCF5272_RD_USB_EPDR(imm, epnum,8);
				i++;
			}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品少妇30p| 男人的天堂久久精品| 欧美一区二区三区啪啪| 国产69精品久久久久毛片 | xfplay精品久久| 色视频欧美一区二区三区| 国产在线精品视频| 性欧美大战久久久久久久久| 国产精品美女久久久久久久网站| 69堂亚洲精品首页| 91看片淫黄大片一级在线观看| 精品综合久久久久久8888| 亚洲高清一区二区三区| 亚洲色图视频网| 久久精品一二三| 日韩视频免费观看高清完整版在线观看 | 日本道精品一区二区三区 | 欧美日韩大陆在线| 99精品欧美一区二区三区小说 | 国产黑丝在线一区二区三区| 男人的天堂亚洲一区| 亚洲国产精品久久不卡毛片 | 久久综合九色综合欧美亚洲| 欧美三级电影在线观看| 在线亚洲一区观看| 色一情一乱一乱一91av| 成年人午夜久久久| 不卡的电视剧免费网站有什么| 国产精品中文字幕日韩精品| 精品一区二区三区在线观看国产| 日韩国产欧美在线观看| 日韩精品午夜视频| 首页国产欧美久久| 日韩电影免费一区| 日韩av一级电影| 奇米影视在线99精品| 天堂蜜桃一区二区三区| 五月综合激情网| 日日夜夜精品免费视频| 香蕉av福利精品导航| 日韩电影免费一区| 久久国产婷婷国产香蕉| 国内成人精品2018免费看| 激情偷乱视频一区二区三区| 国产一区二区剧情av在线| 国产高清亚洲一区| 成人午夜免费视频| 99久久婷婷国产精品综合| 色综合久久久久综合体| 欧洲一区二区三区在线| 欧美日韩一区二区在线观看| 666欧美在线视频| 日韩精品一区二区三区swag| 国产午夜久久久久| 最近中文字幕一区二区三区| 亚洲欧美激情视频在线观看一区二区三区 | 欧美日韩亚洲综合一区| 制服丝袜激情欧洲亚洲| 日韩视频在线你懂得| 精品久久国产97色综合| 欧美国产一区二区在线观看| 日韩一区在线看| 亚洲v日本v欧美v久久精品| 日韩av电影免费观看高清完整版 | 国产综合色在线视频区| 国产精选一区二区三区| 99久久综合狠狠综合久久| 欧洲视频一区二区| 欧美电影免费观看完整版| 亚洲国产精品成人久久综合一区 | 国产一区二区在线观看免费| 成人激情图片网| 欧美性生活一区| 久久久99久久| 亚洲综合免费观看高清完整版在线 | 成人午夜激情视频| 色又黄又爽网站www久久| 制服丝袜一区二区三区| 国产精品污网站| 婷婷开心久久网| 高清不卡在线观看| 欧美日韩www| 中文字幕av一区二区三区高| 亚洲成a人在线观看| 国产老肥熟一区二区三区| 欧洲色大大久久| 欧美激情一区在线观看| 日本成人在线看| 色婷婷av一区二区三区大白胸 | 色噜噜狠狠色综合中国| 精品国产一区二区三区久久影院| 亚洲精品视频在线观看免费| 韩国欧美一区二区| 欧美美女黄视频| 国产精品国产三级国产aⅴ无密码| 日韩国产精品久久久久久亚洲| 99久久伊人久久99| 久久嫩草精品久久久精品一| 亚洲国产三级在线| 国产99精品国产| 日韩网站在线看片你懂的| 亚洲精品中文在线观看| 国产91富婆露脸刺激对白| 5566中文字幕一区二区电影| 亚洲欧美日韩久久精品| 国产jizzjizz一区二区| 欧美大片在线观看一区| 亚洲成av人片一区二区| 91影院在线免费观看| 国产午夜亚洲精品羞羞网站| 免费成人在线播放| 69久久99精品久久久久婷婷 | 日本欧美肥老太交大片| 91美女在线看| 国产精品视频免费| 国产麻豆视频一区二区| 精品美女一区二区| 日本欧美大码aⅴ在线播放| 欧美午夜影院一区| 夜夜亚洲天天久久| 色综合一区二区| 国产精品久久久久久久久晋中 | 亚洲自拍都市欧美小说| 波多野结衣中文字幕一区二区三区 | 亚洲品质自拍视频网站| 福利一区二区在线| 国产日韩精品一区二区三区| 国产毛片精品视频| 欧美大度的电影原声| 美女视频黄a大片欧美| 777久久久精品| 美日韩一区二区| 欧美成人女星排名| 国产美女精品一区二区三区| 久久精品日产第一区二区三区高清版| 久久99精品一区二区三区 | 亚洲免费成人av| 在线中文字幕一区二区| 亚洲成a人在线观看| 欧美精品日韩一本| 免费观看成人av| 久久精品视频在线免费观看| 高清beeg欧美| 亚洲免费观看高清完整 | 国产亚洲一区二区三区在线观看| 激情六月婷婷综合| 国产视频一区二区在线| 成人性生交大合| 亚洲素人一区二区| 欧美亚洲日本国产| 视频在线观看91| 久久先锋影音av鲁色资源网| 国产成人亚洲精品狼色在线| 国产精品色一区二区三区| 91网址在线看| 亚洲gay无套男同| 日韩久久久久久| 波波电影院一区二区三区| 一区二区三区欧美日| 日韩视频免费直播| 成人亚洲一区二区一| 一区二区三区蜜桃| 日韩欧美一级在线播放| 丁香婷婷综合网| 一区二区三区在线播| 91精品国产一区二区三区| 国产精品自拍一区| 一区二区三区日韩在线观看| 欧美第一区第二区| 91一区二区三区在线观看| 日韩在线一区二区| 国产欧美日韩三区| 在线免费观看视频一区| 国产在线精品免费av| 亚洲黄色片在线观看| 精品少妇一区二区三区| 91浏览器在线视频| 精品亚洲porn| 一区二区国产盗摄色噜噜| 亚洲成人免费观看| 久久亚洲欧美国产精品乐播| 91国内精品野花午夜精品| 精品一区二区免费视频| 亚洲久草在线视频| 国产肉丝袜一区二区| 91麻豆精品久久久久蜜臀| 丁香激情综合五月| 日本成人中文字幕在线视频| 综合久久综合久久| 亚洲精品在线观看视频| 欧美无人高清视频在线观看| 国产乱码精品1区2区3区| 视频一区二区中文字幕| 亚洲图片你懂的| 久久精品一级爱片| 欧美一区二区大片| 在线观看免费一区| 99热这里都是精品| 精品一二三四区| 天堂成人国产精品一区|