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

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

?? sa1100.c

?? Linux2.4.20針對三星公司的s3c2440內核基礎上的一些設備驅動代碼
?? C
?? 第 1 頁 / 共 4 頁
字號:
	free_irq (SA1100_GPIO_TO_IRQ (CONFIG_SA1100_USBCABLE_GPIO), NULL);#endif}/** * udc_release_io - release UDC io region */void udc_release_io (){	sa1100_free_dma (usbd_rcv_dma);	sa1100_free_dma (usbd_tx_dma);}/* ep0 dma engine functions ******************************************************************** *//*  * EP0 State - See the Intel Application Note */#define EP0_STATE_IDLE 0#define EP0_STATE_IN_DATA_PHASE 1#define EP0_STATE_END_IN 2char *ep0_state_desc[] = {	"idle", "in", "end"};static int ep0_state = EP0_STATE_IDLE;//struct urb ep0_urb;struct urb *ep0_urb;static unsigned char *buffer;static unsigned int buffer_cnt;/* * There are two scenarios:  * *   1. Data to be sent is an exact multiple of the packetsize and less than *   the requested size. An empty packet needs to be sent. * *   2. Everything else. The last packet will be recognized as the last *   because it is less than the packetsize OR because we have sent exactly *   the required amount of data. */static unsigned int send_zlp;struct usb_endpoint_instance *ep0_endpoint;char *send_zlp_description[] = {	"exact", "forced"};int ep0_enable (struct usb_device_instance *device, struct usb_endpoint_instance *endpoint){	ep0_endpoint = endpoint;        dbg_ep0(0, "ep0_urb: %p", ep0_urb);	if (!ep0_urb) {		if (!(ep0_urb = usbd_alloc_urb (device, device->function_instance_array, 0, 512))) {			dbg_ep0 (1, "ep0_enable: usbd_alloc_urb failed\n");		}	} else {		dbg_ep0 (1, "ep0_enable: ep0_urb already allocated\n");	}	return 0;}void ep0_disable (void){        dbg_ep0(0, "ep0_urb: %p", ep0_urb);	if (ep0_urb) {		usbd_dealloc_urb (ep0_urb);		ep0_urb = 0;	} else {		dbg_ep0 (1, "ep0_disable: ep0_urb already NULL\n");	}}int ep0_reset (void){	dbgENTER (dbgflg_usbdbi_ep0, 1);	ep0_state = EP0_STATE_IDLE;	udc_reset_ep (0);	return 0;}/*  * ep0_set_opr * * Set OPR and optionally DE. */static void ep0_set_opr (void){        int ok;        IOIOIO(UDCCS0, UDCCS0_S0, *(UDCCS0) = UDCCS0_SO , (*(UDCCS0) & UDCCS0_OPR), ok);        if (!ok) {                dbg_ep0(0, "failed to reset OPR");        }        dbg_ep0(1,"CS0: %02x ok: %d", *(UDCCS0), ok);}/*  * ep0_set_opr_and_de * * Set OPR and optionally DE. */static void ep0_set_opr_and_de (void){        int ok;        IOIOIO(UDCCS0, UDCCS0_S0, *(UDCCS0) = (UDCCS0_SO | UDCCS0_DE) , (*(UDCCS0) & UDCCS0_OPR), ok);        if (!ok) {                dbg_ep0(0, "failed to reset OPR");        }        dbg_ep0(1,"CS0: %02x ok: %d", *(UDCCS0), ok);}/* * ep0_read_data * * Retreive setup data from FIFO. */__inline__ static int ep0_read_data (struct usb_device_request *request, int max){	int fifo_count;	int bytes_read;	int i;	int reads;	unsigned char *cp = (unsigned char *) request;        int udcwc;        int udccs0;        udccs0 = *(UDCCS0);	udcwc = fifo_count = udc(UDCWC) & 0xff;	if (fifo_count != max) {		dbg_ep0 (0, "ep0_read_data: have %d bytes; want max\n", fifo_count);	}	reads = 0;	bytes_read = 0;	for (reads = 0, bytes_read = 0; udcwc && fifo_count--;) {		i = 0;		do {			*cp = (unsigned char) *(UDCD0);                        // XXX without this reads may be corrupt, typically the wLength field                        // will contain bad data, which in turn will cause get descriptor config                        // to return the full set of descriptors in response to limited first                        // get descriptor 9, which will BSOD windows			udelay(10);			reads++;			i++;		} while ((((udcwc = udc(UDCWC) & 0xff)) > fifo_count) && (i < 10));		if (i == 10) {			dbg_ep0 (0, "failed: UDCWC: %2x %2x bytes: %d fifo: %d reads: %d no change\n",                                         udcwc, *(UDCWC), bytes_read, fifo_count, reads);		}                if (udcwc < (fifo_count - 1)) {			dbg_ep0 (0, "failed: UDCWC: %2x %2x bytes: %d fifo: %d reads: %d too low\n",                                         udcwc, *(UDCWC), bytes_read, fifo_count, reads);                }		cp++;		bytes_read++;		if ((bytes_read >= max) && (fifo_count > 0)) {			dbg_ep0 (0, "reading too much data\n");			break;		}	}        dbg_ep0 ((bytes_read == max)?2:0,                         "ep0_read_data: reads: %d want: %d fifo_count: %d bytes_read: %d CS0: %02x:%02x CWC: %02x",                        reads, max, fifo_count, bytes_read, *(UDCCS0), udccs0, udcwc);	return bytes_read;}/* * * ep0_read_request * * Called when in IDLE state to get a setup packet. */static void ep0_read_request (unsigned int udccs0, unsigned int udccr){	int i;	int ok;	if (!(udccr & UDCCR_UDA)) {		dbg_ep0 (3, "warning, UDC not active");	}	// reset SST	if (udccs0 & UDCCS0_SST) {		IOIOIO (UDCCS0, UDCCS0_SST, *(UDCCS0) = UDCCS0_SST, *(UDCCS0) & UDCCS0_SST, ok);		if (!ok) {			dbg_ep0 (0, "failed to reset SST CS0: %02x ok: %d", *(UDCCS0), ok);		}	}	// check UDC Endpoint 0 Control/Status register for OUT Packet Ready (OPR) (c.f. 11.8.7.1)	if (!(udccs0 & UDCCS0_OPR)) {		// wait for another interrupt		dbg_ep0 (3, "wait for another interrupt CS0: %02x", udccs0);		return;	}	// read a device request	ep0_urb->actual_length = 0;	if ((i = ep0_read_data (&ep0_urb->device_request, 8)) < 8) {		ep0_set_opr ();		dbg_ep0 (2, "not enough data: %d", i);		return;	}	//ep0_need_data = le16_to_cpu(ep0_urb->device_request.wLength);	dbg_ep0 (3, "bmRequestType:%02x bRequest:%02x wValue:%04x wIndex:%04x wLength:%04x",		 ep0_urb->device_request.bmRequestType,		 ep0_urb->device_request.bRequest,		 le16_to_cpu (ep0_urb->device_request.wValue),		 le16_to_cpu (ep0_urb->device_request.wIndex),		 le16_to_cpu (ep0_urb->device_request.wLength));	{		char *cp = (char *) &ep0_urb->device_request;		dbg_ep0 (1, "%02x %02x %02x %02x %02x %02x %02x %02x",			 cp[0], cp[1], cp[2], cp[3], cp[4], cp[5], cp[6], cp[7]		    );	}	// check if we have been initialized	if (!ep0_urb->device) {		ep0_set_opr_and_de ();		udc_stall_ep (0);		return;	}	// check direction of data transfer        if ((ep0_urb->device_request.bmRequestType & USB_REQ_DIRECTION_MASK) == USB_REQ_HOST2DEVICE) {                // if this is a set address save it                if ((ep0_urb->device_request.bmRequestType == 0) && (ep0_urb->device_request.bRequest == USB_REQ_SET_ADDRESS)) {                        usb_address = le16_to_cpu(ep0_urb->device_request.wValue) & 0xff;                        /*                         * very occasionally register write will fail, delay and redo twice                         * to ensure that it actually got through, cannot check as UDC                         * will not propagate until SO and DE are set. We also need a delay                         * after setting SO and DE, exiting too soon can also result in                         * problems if address has not propagated.                         */                        *(UDCAR) = usb_address;                        udelay(2);                        *(UDCAR) = usb_address;                        udelay(2);                        *(UDCAR) = usb_address;                        ep0_set_opr_and_de();                           udelay(40);                                    if (usbd_recv_setup(ep0_urb)) {                                dbg_ep0(5, "usb_recv_setup failed, not stalling");                        }                }                else {                        //ep0_set_opr_and_de();                        // submit urb to ep0, stall if non-zero result                        if (usbd_recv_setup(ep0_urb)) {                                dbg_ep0(1, "usb_recv_setup failed, stalling");                                udc_stall_ep(0);                        }                        ep0_set_opr_and_de(); // tbr getting better results with this.                }                return;	}	// submit urb to ep0, stall if non-zero result	if (usbd_recv_setup (ep0_urb)) {		dbg_ep0 (2, "usb_recv_setup failed, stalling");		ep0_set_opr_and_de ();		udc_stall_ep (0);		return;	}	// device reqeust has specified Device-to-Host, so we should be returning data	// check request length, zero is not legal	if (!le16_to_cpu (ep0_urb->device_request.wLength)) {		dbg_ep0 (0, "wLength zero, stall");		ep0_set_opr_and_de ();		udc_stall_ep (0);		return;	}	// check that we have some data to send back, zero should not be possible	if (!ep0_urb->actual_length) {		dbg_ep0 (0, "no data, stall");		ep0_set_opr_and_de ();		udc_stall_ep (0);		return;	}	// everything looks sane, so set buffer pointers and setup for data transfer	buffer = ep0_urb->buffer;	buffer_cnt = ep0_urb->actual_length;	/*	 * IFF we are sending a multiple of the packet size AND less than was	 * requested we will need to send an empty packet after all the data packets.	 */	if (!(buffer_cnt % 8) && (buffer_cnt < le16_to_cpu (ep0_urb->device_request.wLength))) {		send_zlp = 1;		dbg_ep0 (1, "DEVICE2HOST: SEND ZLP %x %x", ep0_urb->actual_length,			 le16_to_cpu (ep0_urb->device_request.wLength));	} else {		send_zlp = 0;		dbg_ep0 (2, "DEVICE2HOST: NO ZLP %x %x", ep0_urb->actual_length,			 le16_to_cpu (ep0_urb->device_request.wLength));	}	ep0_state = EP0_STATE_IN_DATA_PHASE;}/*  * ep0_in * * Send some data to host. */static void ep0_in (unsigned int udccs0){	int transfer_cnt = 0;	unsigned int fifo_count;	volatile int writes = 0;	unsigned long start = jiffies;	int ok;	udccs0 = *(UDCCS0);	dbg_ep0 (2, "CS0: %02x", udccs0);	// check for non empty FIFO	if (*(UDCWC)) {		dbg_ep0 (0, "FIFO not empty");		return;	}	// process iff ep0 is not stalled, no premature end and IPR is clear	if (udccs0 & (UDCCS0_SE | UDCCS0_SST)) {		dbg_ep0 (1, "ep0_in: SE or SST set\n");		return;	}	// first check that IPR is not set, if it is then we wait for it to clear.	if (udccs0 & UDCCS0_IPR) {		for (ok = 0; (*(UDCCS0) & UDCCS0_IPR) && ok < 2000; ok++) {			udelay (25);	// XXX 		}		if (ok == 2000) {			dbg_ep0 (0, "IPR clear timed out");		}		dbg_ep0 (0, "IPR was set count: %d", ok);	}	// get up to first 8 bytes of data	transfer_cnt = MIN (8, buffer_cnt);	buffer_cnt -= transfer_cnt;	fifo_count = 0;	do {		int count = 0;                int udcwc;		do {			*(UDCD0) = (unsigned long) buffer[fifo_count];			count++;			writes++;		} while (((udcwc = udc (UDCWC)) == fifo_count) && (count < 2000));		if (udcwc <= fifo_count) {			dbg_ep0 (0,				 "sending STALL, failed writing FIFO transfer: %d fifo_count: %x CS0: %02x CWC: %02x",				 transfer_cnt, fifo_count, *(UDCCS0), udcwc);			udc_stall_ep (0);			ep0_state = EP0_STATE_IDLE;			return;		}		fifo_count++;	} while (fifo_count < transfer_cnt);	dbg_ep0 (3, "elapsed: %lx writes: %d fifo_count: %d transfer_cnt: %d buffer_cnt: %d CS0: %02x CWC: %02x",		 jiffies - start, writes, fifo_count, transfer_cnt, buffer_cnt, *(UDCCS0), *(UDCWC));	buffer += transfer_cnt;	// set data end, and start 	if (buffer_cnt == 0) {		ep0_state = EP0_STATE_END_IN;	}	IOIOIO (UDCCS0, UDCCS0_IPR,		*(UDCCS0) = (UDCCS0_IPR | ((((!buffer_cnt) && (send_zlp != 1)) ? UDCCS0_DE : 0))),		!(*(UDCCS0) & UDCCS0_IPR), ok);	if (!ok) {		dbg_ep0 (0, "failed to set IPR CS0: %02x ok: %d", *(UDCCS0), ok);	}}/* * ep0_end_in * * Handle end of IN, possibly with ZLP. */static void ep0_end_in (unsigned int udccs0){	int ok;	dbg_ep0 (2, " status: %02x CS0: %02x", udccs0, *(UDCCS0));	// reset SST if necessary	if (udccs0 & UDCCS0_SST) {		IOIOIO (UDCCS0, UDCCS0_SST, *(UDCCS0) = UDCCS0_SST, *(UDCCS0) & UDCCS0_SST, ok);		if (!ok) {			dbg_ep0 (0, "failed to reset SST");		}	}	// reset SE if necessary	if (udccs0 & UDCCS0_SE) {		IOIOIO (UDCCS0, UDCCS0_SSE, *(UDCCS0) = UDCCS0_SSE, *(UDCCS0) & UDCCS0_SSE, ok);		if (!ok) {			dbg_ep0 (0, "failed to reset SE");		}	}	// ensure that IPR is not set and send zero length packet if necessary	if (!(udc (UDCCS0) & UDCCS0_IPR) && (send_zlp == 1)) {                IOIOIO (UDCCS0, UDCCS0_DE | UDCCS0_IPR,                                 *(UDCCS0) = (UDCCS0_DE | UDCCS0_IPR),                                 (*(UDCCS0) & (UDCCS0_DE | UDCCS0_IPR)) != (UDCCS0_DE | UDCCS0_IPR), ok);                if (!ok) {                        dbg_ep0 (0, "failed to set DE and IPR CS0: %02x", *(UDCCS0));                }                else {                        dbg_ep0 (1, "set DE and IPR, ZLP sent CS0: %02x", *(UDCCS0));                }	}	// set state to IDLE	ep0_state = EP0_STATE_IDLE;	send_zlp = 0;}/*  * ep0_int_hndlr * * Handle ep0 interrupts. * * Generally follows the example in the Intel Application Note. * */void ep0_int_hndlr (unsigned int status){	unsigned int udccs0;	unsigned int udccr;	udccs0 = udc (UDCCS0);	udccr = udc (UDCCR);	ep0_interrupts++;	dbg_ep0 (4, "------------>[%d:%s:%s CCR: %02x CS0: %02x CWC: %02x CAR: %02x]",		 ep0_interrupts, ep0_state_desc[ep0_state], send_zlp_description[send_zlp], udccr,		 udccs0, *(UDCWC), *(UDCAR));	if (udccs0 == UDCCS0_IPR) {		dbg_ep0 (3, "IPR SET [%d:%02x]", ep0_state, udccs0);		return;	}	if (udccs0 & UDCCS0_SST) {		dbg_ep0 (3, "previously sent stall [%d:%02x]", ep0_state, udccs0);	}	// SE 	if (udccs0 & UDCCS0_SE) {		int ok;		dbg_ep0 (3, "unloading, found UDCCS0_SE: CS0: %02x", udccs0);		// reset SE		IOIOIO (UDCCS0, UDCCS0_SSE, *(UDCCS0) = UDCCS0_SSE, *(UDCCS0) & UDCCS0_SE, ok);		if (!ok) {			dbg_ep0 (0, "failed to reset SE CS0: %02x ok: %d", *(UDCCS0), ok);		}		// clear SE before unloading any setup packets 		if (udccs0 & UDCCS0_OPR) {			// reset OPR			*(UDCCS0) = UDCCS0_SO;		}		ep0_state = EP0_STATE_IDLE;                if (send_zlp) {			dbg_ep0 (0, "not sending ZLP CS0: %02x", *(UDCCS0));                }		send_zlp = 0;	}	if ((ep0_state != EP0_STATE_IDLE) && (udccs0 & UDCCS0_OPR)) {		dbg_ep0 (3, "Forcing EP0_STATE_IDLE CS0: %02x", udccs0);		ep0_state = EP0_STATE_IDLE;	}	switch (ep0_state) {	case EP0_STATE_IDLE:		dbg_ep0 (4, "state: EP0_STATE_IDLE CS0: %02x", udccs0);		ep0_read_request (udccs0, udccr);		if (ep0_state != EP0_STATE_IN_DATA_PHASE) {			break;		}		// fall through to data phase		ep0_set_opr ();	case EP0_STATE_IN_DATA_PHASE:		dbg_ep0 (4, "state: EP0_STATE_IN_DATA_PHASE %x", udccs0);		ep0_in (udccs0);		break;	case EP0_STATE_END_IN:		dbg_ep0 (4, "state: EP0_STATE_END_IN %x", udccs0);		ep0_end_in (udccs0);		break;	}	dbg_ep0 (4, "<------------[%s:%s CCR: %02x CS0: %02x CWC: %02x]",		 ep0_state_desc[ep0_state], send_zlp_description[send_zlp], *(UDCCR), *(UDCCS0),		 *(UDCWC));}/* ep1 dma engine functions ******************************************************************** */static int dmachn_rx;		// rx dma channelstatic int dma_enabled;		// dma channel has been setupstatic int dma_is_active;		// dma engine is runningstatic int dma_rx_active;		// dma engine is runningstatic dma_addr_t dma_rx_curpos;struct usb_device_instance *ep1_device;struct usb_endpoint_instance *ep1_endpoint;/* * * ep1_stop_dma - stop the DMA engine * * Stop the DMA engine.  */static void ep1_stop_dma (struct urb *urb){	if (urb && dma_enabled) {		unsigned long flags;		save_flags_cli (flags);		if (!dma_is_active) {			restore_flags (flags);			dbg_rx (1, "dma OFF: %x %x %x", dmachn_rx, dma_enabled, dma_is_active);			return;		}		dma_is_active = 0;		restore_flags (flags);		if (ep1_endpoint->rcv_packetSize > 20) {			_sa1100_bi_dma_flush_all_irq(dmachn_rx);		}	}}/* * * ep1_start_dma - start the DMA engine running * * Start the DMA engine. This should allow incoming data to be stored * in the DMA receive buffer. * */static void ep1_start_dma (struct urb *urb){	if (urb && dma_enabled) {		unsigned long flags;		int ok;		save_flags_cli (flags);		if (dma_is_active) {			restore_flags (flags);			dbg_rx (1, "dma ON: %x %x %x", dmachn_rx, dma_enabled, dma_is_active);			return;		}		dma_is_active = 1;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品sm捆绑视频| 经典三级一区二区| 精品一二三四区| 91精品视频网| 国产精品综合二区| 成人小视频免费观看| 欧美日韩一区二区三区四区五区 | 欧美性极品少妇| 欧美一区二区精品久久911| 国产欧美综合在线观看第十页| 亚洲黄色av一区| 久久不见久久见免费视频1| av一二三不卡影片| 日韩欧美二区三区| 亚洲午夜精品在线| 成人免费av资源| 日韩免费性生活视频播放| 亚洲小说春色综合另类电影| 欧美一区二区免费视频| 色综合天天狠狠| 5566中文字幕一区二区电影| 中文字幕一区在线观看视频| 免费观看一级特黄欧美大片| 99视频超级精品| 久久久av毛片精品| 综合久久久久久久| 岛国一区二区在线观看| 日韩欧美一二区| 亚洲高清三级视频| 91麻豆6部合集magnet| 国产日韩欧美麻豆| 蜜臀久久99精品久久久画质超高清 | 欧美精品 日韩| 国产精品高潮久久久久无| 精品一区二区三区日韩| 欧美日韩高清一区| 一区二区三区四区视频精品免费 | 久久蜜桃av一区二区天堂 | 欧美伦理电影网| 一区二区视频在线看| 国产成人av电影| 国产亚洲精品bt天堂精选| 男女性色大片免费观看一区二区| 欧美日韩二区三区| 亚洲成人综合视频| 色呦呦日韩精品| 亚洲欧美日韩国产另类专区| 国产精品一区三区| 久久久精品免费观看| 国产麻豆一精品一av一免费| 精品卡一卡二卡三卡四在线| 美女在线视频一区| 欧美sm极限捆绑bd| 国产麻豆精品久久一二三| 久久先锋资源网| 国产精品一区久久久久| 久久久久99精品一区| 粉嫩嫩av羞羞动漫久久久 | 日韩欧美综合在线| 精品一二三四区| 中文字幕国产一区二区| 国产 日韩 欧美大片| 中文字幕一区二区三区乱码在线| 国产99精品在线观看| 亚洲三级久久久| 在线免费观看成人短视频| 亚洲国产另类精品专区| 91精品久久久久久蜜臀| 另类小说图片综合网| 国产亚洲欧洲997久久综合| 国产精品一级片在线观看| 中文字幕精品一区二区精品绿巨人 | 精品一区二区三区av| 91精品国产综合久久久久| 国产一区二区三区香蕉| 国产精品天干天干在观线| 在线亚洲免费视频| 精品在线播放免费| 国产精品乱子久久久久| 在线观看区一区二| 麻豆精品国产91久久久久久| 国产欧美久久久精品影院| 色就色 综合激情| 久88久久88久久久| 亚洲激情五月婷婷| 日韩欧美国产综合| 色一情一乱一乱一91av| 国产一区二区h| 美女视频免费一区| 亚洲一区二区三区在线播放| 国产精品丝袜久久久久久app| 91精品国产91久久综合桃花 | 一区二区欧美在线观看| 国产日韩欧美高清| 精品国产伦理网| 日韩一区二区三区电影在线观看 | 欧美精品乱码久久久久久| 成人午夜在线视频| 国产在线精品一区二区| 美女视频一区二区三区| 日日夜夜免费精品| 亚洲一区二区四区蜜桃| 亚洲天堂av老司机| 国产精品久久久久精k8| 国产精品久久综合| 亚洲欧洲日韩在线| 国产精品国产三级国产a | 2014亚洲片线观看视频免费| 欧美日韩国产免费| 欧美精品视频www在线观看| 欧美亚洲国产怡红院影院| 色婷婷亚洲综合| 在线观看日韩一区| 欧美少妇bbb| 7777精品伊人久久久大香线蕉完整版 | 欧美精品vⅰdeose4hd| 日本高清不卡在线观看| 91浏览器打开| 色婷婷亚洲综合| 欧美影片第一页| 欧美日韩三级在线| 欧美日韩一区二区电影| 欧美日韩国产综合草草| 欧美久久一区二区| 精品日韩在线一区| 久久综合精品国产一区二区三区 | 久久精品免视看| 久久嫩草精品久久久久| 国产日韩欧美a| 亚洲精品久久嫩草网站秘色| 日本免费新一区视频| 日韩激情av在线| 国产综合色产在线精品| 成人18视频在线播放| 91精品办公室少妇高潮对白| 欧美日韩视频一区二区| 精品免费日韩av| 国产精品美女久久久久久久久 | 国产精品久久久久久久久免费丝袜 | 石原莉奈一区二区三区在线观看| 亚洲一区二区欧美激情| 看电视剧不卡顿的网站| 成人免费视频免费观看| 欧洲精品视频在线观看| 日韩欧美的一区| 中文字幕一区二区三区乱码在线 | 欧美精品vⅰdeose4hd| 久久欧美中文字幕| 亚洲男女一区二区三区| 久久99精品久久久久久动态图| 国产一区二区福利| 91福利在线播放| 精品国产一区二区三区av性色| 国产精品久久久久久户外露出| 亚洲成av人片一区二区三区| 国产精品一区二区三区99| 色婷婷激情久久| 国产亚洲短视频| 日韩中文字幕区一区有砖一区 | 国产精品蜜臀av| 石原莉奈一区二区三区在线观看| 国产白丝网站精品污在线入口| 在线视频欧美精品| 国产欧美日韩中文久久| 亚洲成人黄色小说| 99久久久久免费精品国产| 欧美一级国产精品| 亚洲在线中文字幕| 成人激情小说乱人伦| 亚洲精品在线观看视频| 亚洲成人免费观看| 97se亚洲国产综合自在线| 久久无码av三级| 日本va欧美va瓶| 欧美日韩精品高清| 青椒成人免费视频| 色呦呦一区二区三区| 久久久国产精品不卡| 麻豆国产精品官网| 欧美高清你懂得| 亚洲综合激情网| 97久久超碰精品国产| 日本一区二区三级电影在线观看| 日韩av在线发布| 精品视频在线看| 亚洲伦在线观看| 成人av在线资源网| 欧美高清在线精品一区| 久久99精品国产麻豆不卡| 91精品在线麻豆| 婷婷国产在线综合| 欧美日韩一区久久| 天堂精品中文字幕在线| 欧美日韩色一区| 天堂资源在线中文精品| 欧美日韩国产首页| 日韩av一级电影| 欧美一级片免费看| 美腿丝袜一区二区三区| 欧美电影免费观看完整版|