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

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

?? ehci-q.c

?? 硬實(shí)時(shí)linux補(bǔ)丁rtai下usb協(xié)議棧
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(hào):
/* * Copyright (C) 2001-2004 by David Brownell *  * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the * Free Software Foundation; either version 2 of the License, or (at your * option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License * for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 675 Mass Ave, Cambridge, MA 02139, USA. *//* this file is part of ehci-hcd.c *//*-------------------------------------------------------------------------*//* * EHCI hardware queue manipulation ... the core.  QH/QTD manipulation. * * Control, bulk, and interrupt traffic all use "qh" lists.  They list "qtd" * entries describing USB transactions, max 16-20kB/entry (with 4kB-aligned * buffers needed for the larger number).  We use one QH per endpoint, queue * multiple urbs (all three types) per endpoint.  URBs may need several qtds. * * ISO traffic uses "ISO TD" (itd, and sitd) records, and (along with * interrupts) needs careful scheduling.  Performance improvements can be * an ongoing challenge.  That's in "ehci-sched.c". *  * USB 1.1 devices are handled (a) by "companion" OHCI or UHCI root hubs, * or otherwise through transaction translators (TTs) in USB 2.0 hubs using * (b) special fields in qh entries or (c) split iso entries.  TTs will * buffer low/full speed data so the host collects it at high speed. *//*-------------------------------------------------------------------------*//* fill a qtd, returning how much of the buffer we were able to queue up */static intqtd_fill (struct ehci_qtd *qtd, dma_addr_t buf, size_t len,		int token, int maxpacket){	int	i, count;	u64	addr = buf;	/* one buffer entry per 4K ... first might be short or unaligned */	qtd->hw_buf [0] = cpu_to_le32 ((u32)addr);	qtd->hw_buf_hi [0] = cpu_to_le32 ((u32)(addr >> 32));	count = 0x1000 - (buf & 0x0fff);	/* rest of that page */	if (likely (len < count))		/* ... iff needed */		count = len;	else {		buf +=  0x1000;		buf &= ~0x0fff;		/* per-qtd limit: from 16K to 20K (best alignment) */		for (i = 1; count < len && i < 5; i++) {			addr = buf;			qtd->hw_buf [i] = cpu_to_le32 ((u32)addr);			qtd->hw_buf_hi [i] = cpu_to_le32 ((u32)(addr >> 32));			buf += 0x1000;			if ((count + 0x1000) < len)				count += 0x1000;			else				count = len;		}		/* short packets may only terminate transfers */		if (count != len)			count -= (count % maxpacket);	}	qtd->hw_token = cpu_to_le32 ((count << 16) | token);	qtd->length = count;	return count;}/*-------------------------------------------------------------------------*/static inline voidqh_update (struct ehci_hcd *ehci, struct ehci_qh *qh, struct ehci_qtd *qtd){	/* writes to an active overlay are unsafe */	BUG_ON(qh->qh_state != QH_STATE_IDLE);	qh->hw_qtd_next = QTD_NEXT (qtd->qtd_dma);	qh->hw_alt_next = EHCI_LIST_END;	/* Except for control endpoints, we make hardware maintain data	 * toggle (like OHCI) ... here (re)initialize the toggle in the QH,	 * and set the pseudo-toggle in udev. Only usb_clear_halt() will	 * ever clear it.	 */	if (!(qh->hw_info1 & cpu_to_le32(1 << 14))) {		unsigned	is_out, epnum;		is_out = !(qtd->hw_token & cpu_to_le32(1 << 8));		epnum = (le32_to_cpup(&qh->hw_info1) >> 8) & 0x0f;		if (unlikely (!rtdm_usb_gettoggle (qh->dev, epnum, is_out))) {			qh->hw_token &= ~__constant_cpu_to_le32 (QTD_TOGGLE);			rtdm_usb_settoggle (qh->dev, epnum, is_out, 1);		}	}	/* HC must see latest qtd and qh data before we clear ACTIVE+HALT */	wmb ();	qh->hw_token &= __constant_cpu_to_le32 (QTD_TOGGLE | QTD_STS_PING);}/* if it weren't for a common silicon quirk (writing the dummy into the qh * overlay, so qh->hw_token wrongly becomes inactive/halted), only fault * recovery (including urb dequeue) would need software changes to a QH... */static voidqh_refresh (struct ehci_hcd *ehci, struct ehci_qh *qh){	struct ehci_qtd *qtd;	if (list_empty (&qh->qtd_list))		qtd = qh->dummy;	else {		qtd = list_entry (qh->qtd_list.next,				struct ehci_qtd, qtd_list);		/* first qtd may already be partially processed */		if (cpu_to_le32 (qtd->qtd_dma) == qh->hw_current)			qtd = NULL;	}	if (qtd)		qh_update (ehci, qh, qtd);}/*-------------------------------------------------------------------------*/static void qtd_copy_status (	struct ehci_hcd *ehci,	struct rtdm_urb *urb,	size_t length,	u32 token){	/* count IN/OUT bytes, not SETUP (even short packets) */	if (likely (QTD_PID (token) != 2))		urb->actual_length += length - QTD_LENGTH (token);	/* don't modify error codes */	if (unlikely (urb->status != -EINPROGRESS))		return;	/* force cleanup after short read; not always an error */	if (unlikely (IS_SHORT_READ (token)))		urb->status = -EREMOTEIO;	/* serious "can't proceed" faults reported by the hardware */	if (token & QTD_STS_HALT) {		if (token & QTD_STS_BABBLE) {			/* FIXME "must" disable babbling device's port too */			urb->status = -EOVERFLOW;		} else if (token & QTD_STS_MMF) {			/* fs/ls interrupt xfer missed the complete-split */			urb->status = -EPROTO;		} else if (token & QTD_STS_DBE) {			urb->status = (QTD_PID (token) == 1) /* IN ? */				? -ENOSR  /* hc couldn't read data */				: -ECOMM; /* hc couldn't write data */		} else if (token & QTD_STS_XACT) {			/* timeout, bad crc, wrong PID, etc; retried */			if (QTD_CERR (token))				urb->status = -EPIPE;			else {				ehci_dbg (ehci, "devpath %s ep%d%s 3strikes\n",					urb->dev->devpath,					rtdm_usb_pipeendpoint (urb->pipe),					rtdm_usb_pipein (urb->pipe) ? "in" : "out");				urb->status = -EPROTO;			}		/* CERR nonzero + no errors + halt --> stall */		} else if (QTD_CERR (token))			urb->status = -EPIPE;		else	/* unknown */			urb->status = -EPROTO;		ehci_vdbg (ehci,			"dev%d ep%d%s qtd token %08x --> status %d\n",			rtdm_usb_pipedevice (urb->pipe),			rtdm_usb_pipeendpoint (urb->pipe),			rtdm_usb_pipein (urb->pipe) ? "in" : "out",			token, urb->status);		/* if async CSPLIT failed, try cleaning out the TT buffer */		if (urb->status != -EPIPE				  && urb->dev->tt && !rtdm_usb_pipeint (urb->pipe)				&& ((token & QTD_STS_MMF) != 0					|| QTD_CERR(token) == 0)				&& (!ehci_is_TDI(ehci)                	                || urb->dev->tt->hub !=					   ehci_to_hcd(ehci)->self.root_hub)) {#ifdef DEBUG			struct rtdm_usb_device *tt = urb->dev->tt->hub;			rtdm_dev_dbg(&tt->dev,				"clear tt buffer port %d, a%d ep%d t%08x\n",				urb->dev->ttport, urb->dev->devnum,				rtdm_usb_pipeendpoint (urb->pipe), token);#endif /* DEBUG */			rtdm_usb_hub_tt_clear_buffer (urb->dev, urb->pipe);		}	}}static voidehci_urb_done (struct ehci_hcd *ehci, struct rtdm_urb *urb){	if (likely (urb->hcpriv != NULL)) {		struct ehci_qh	*qh = (struct ehci_qh *) urb->hcpriv;		/* S-mask in a QH means it's an interrupt urb */		if ((qh->hw_info2 & __constant_cpu_to_le32 (QH_SMASK)) != 0) {			/* ... update hc-wide periodic stats (for usbfs) */			ehci_to_hcd(ehci)->self.bandwidth_int_reqs--;		}		qh_put (qh);	}	rtdm_lock_get (&urb->rt_lock);	urb->hcpriv = NULL;	switch (urb->status) {	case -EINPROGRESS:		/* success */		urb->status = 0;	default:			/* fault */		COUNT (ehci->stats.complete);		break;	case -EREMOTEIO:		/* fault or normal */		if (!(urb->transfer_flags & RTDM_URB_SHORT_NOT_OK))			urb->status = 0;		COUNT (ehci->stats.complete);		break;	case -ECONNRESET:		/* canceled */	case -ENOENT:		COUNT (ehci->stats.unlink);		break;	}	rtdm_lock_put (&urb->rt_lock);#ifdef EHCI_URB_TRACE	ehci_dbg(ehci,		"%s %s urb %p ep%d%s status %d len %d/%d\n",		__FUNCTION__, urb->dev->devpath, urb,		rtdm_usb_pipeendpoint (urb->pipe),		rtdm_usb_pipein (urb->pipe) ? "in" : "out",		urb->status,		urb->actual_length, urb->transfer_buffer_length);#endif	/* complete() can reenter this HCD */	rtdm_lock_put(&ehci->rt_lock);	rtdm_usb_hcd_giveback_urb (ehci_to_hcd(ehci), urb);	rtdm_lock_get (&ehci->rt_lock);}static void start_unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh);static void unlink_async (struct ehci_hcd *ehci, struct ehci_qh *qh);static void intr_deschedule (struct ehci_hcd *ehci, struct ehci_qh *qh);static int qh_schedule (struct ehci_hcd *ehci, struct ehci_qh *qh);/* * Process and free completed qtds for a qh, returning URBs to drivers. * Chases up to qh->hw_current.  Returns number of completions called, * indicating how much "real" work we did. */#define HALT_BIT __constant_cpu_to_le32(QTD_STS_HALT)static unsignedqh_completions (struct ehci_hcd *ehci, struct ehci_qh *qh){	struct ehci_qtd		*last = NULL, *end = qh->dummy;	struct list_head	*entry, *tmp;	int			stopped;	unsigned		count = 0;	int			do_status = 0;	u8			state;	if (unlikely (list_empty (&qh->qtd_list)))		return count;	/* completions (or tasks on other cpus) must never clobber HALT	 * till we've gone through and cleaned everything up, even when	 * they add urbs to this qh's queue or mark them for unlinking.	 *	 * NOTE:  unlinking expects to be done in queue order.	 */	state = qh->qh_state;	qh->qh_state = QH_STATE_COMPLETING;	stopped = (state == QH_STATE_IDLE);	/* remove de-activated QTDs from front of queue.	 * after faults (including short reads), cleanup this urb	 * then let the queue advance.	 * if queue is stopped, handles unlinks.	 */	list_for_each_safe (entry, tmp, &qh->qtd_list) {		struct ehci_qtd	*qtd;		struct rtdm_urb	*urb;		u32		token = 0;		qtd = list_entry (entry, struct ehci_qtd, qtd_list);		urb = qtd->urb;		/* clean up any state from previous QTD ...*/		if (last) {			if (likely (last->urb != urb)) {				ehci_urb_done (ehci, last->urb);				count++;			}			ehci_qtd_free (ehci, last);			last = NULL;		}		/* ignore urbs submitted during completions we reported */		if (qtd == end)			break;		/* hardware copies qtd out of qh overlay */		rmb ();		token = le32_to_cpu (qtd->hw_token);		/* always clean up qtds the hc de-activated */		if ((token & QTD_STS_ACTIVE) == 0) {			if ((token & QTD_STS_HALT) != 0) {				stopped = 1;			/* magic dummy for some short reads; qh won't advance.			 * that silicon quirk can kick in with this dummy too.			 */			} else if (IS_SHORT_READ (token)					&& !(qtd->hw_alt_next & EHCI_LIST_END)) {				stopped = 1;				goto halt;			}		/* stop scanning when we reach qtds the hc is using */		} else if (likely (!stopped				&& HC_IS_RUNNING (ehci_to_hcd(ehci)->state))) {			break;		} else {			stopped = 1;			if (unlikely (!HC_IS_RUNNING (ehci_to_hcd(ehci)->state)))				urb->status = -ESHUTDOWN;			/* ignore active urbs unless some previous qtd			 * for the urb faulted (including short read) or			 * its urb was canceled.  we may patch qh or qtds.			 */			if (likely (urb->status == -EINPROGRESS))				continue;						/* issue status after short control reads */			if (unlikely (do_status != 0)					&& QTD_PID (token) == 0 /* OUT */) {				do_status = 0;				continue;			}			/* token in overlay may be most current */			if (state == QH_STATE_IDLE					&& cpu_to_le32 (qtd->qtd_dma)						== qh->hw_current)				token = le32_to_cpu (qh->hw_token);			/* force halt for unlinked or blocked qh, so we'll			 * patch the qh later and so that completions can't			 * activate it while we "know" it's stopped.			 */			if ((HALT_BIT & qh->hw_token) == 0) {halt:				qh->hw_token |= HALT_BIT;				wmb ();			}		} 		/* remove it from the queue */		rtdm_lock_get (&urb->rt_lock);		qtd_copy_status (ehci, urb, qtd->length, token);		do_status = (urb->status == -EREMOTEIO)					&& rtdm_usb_pipecontrol (urb->pipe);		rtdm_lock_put (&urb->rt_lock);		if (stopped && qtd->qtd_list.prev != &qh->qtd_list) {			last = list_entry (qtd->qtd_list.prev,					struct ehci_qtd, qtd_list);			last->hw_next = qtd->hw_next;		}		list_del (&qtd->qtd_list);		last = qtd;	}	/* last urb's completion might still need calling */	if (likely (last != NULL)) {		ehci_urb_done (ehci, last->urb);		count++;		ehci_qtd_free (ehci, last);	}	/* restore original state; caller must unlink or relink */	qh->qh_state = state;	/* be sure the hardware's done with the qh before refreshing	 * it after fault cleanup, or recovering from silicon wrongly	 * overlaying the dummy qtd (which reduces DMA chatter).	 */	if (stopped != 0 || qh->hw_qtd_next == EHCI_LIST_END) {		switch (state) {		case QH_STATE_IDLE:			qh_refresh(ehci, qh);			break;		case QH_STATE_LINKED:			/* should be rare for periodic transfers,			 * except maybe high bandwidth ...			 */			if ((__constant_cpu_to_le32 (QH_SMASK)					& qh->hw_info2) != 0) {				intr_deschedule (ehci, qh);				(void) qh_schedule (ehci, qh);			} else				unlink_async (ehci, qh);			break;		/* otherwise, unlink already started */		}	}	return count;}/*-------------------------------------------------------------------------*/// high bandwidth multiplier, as encoded in highspeed endpoint descriptors#define hb_mult(wMaxPacketSize) (1 + (((wMaxPacketSize) >> 11) & 0x03))// ... and packet size, for any kind of endpoint descriptor#define max_packet(wMaxPacketSize) ((wMaxPacketSize) & 0x07ff)/* * reverse of qh_urb_transaction:  free a list of TDs. * used for cleanup after errors, before HC sees an URB's TDs. */static void qtd_list_free (	struct ehci_hcd		*ehci,	struct rtdm_urb		*urb,	struct list_head	*qtd_list) {	struct list_head	*entry, *temp;	list_for_each_safe (entry, temp, qtd_list) {		struct ehci_qtd	*qtd;		qtd = list_entry (entry, struct ehci_qtd, qtd_list);		list_del (&qtd->qtd_list);		ehci_qtd_free (ehci, qtd);	}}/* * create a list of filled qtds for this URB; won't link into qh. */static struct list_head *qh_urb_transaction (	struct ehci_hcd		*ehci,	struct rtdm_urb		*urb,	struct list_head	*head//,//	int			flags) {	struct ehci_qtd		*qtd, *qtd_prev;	dma_addr_t		buf;	int			len, maxpacket;	int			is_input;	u32			token;	/*	 * URBs map to sequences of QTDs:  one logical transaction	 */	qtd = ehci_qtd_alloc (ehci);	if (unlikely (!qtd))		return NULL;	list_add_tail (&qtd->qtd_list, head);	qtd->urb = urb;	token = QTD_STS_ACTIVE;	token |= (EHCI_TUNE_CERR << 10);	/* for split transactions, SplitXState initialized to zero */	len = urb->transfer_buffer_length;	is_input = rtdm_usb_pipein (urb->pipe);	if (rtdm_usb_pipecontrol (urb->pipe)) {		/* SETUP pid */		qtd_fill (qtd, urb->setup_dma, sizeof (struct usb_ctrlrequest),			token | (2 /* "setup" */ << 8), 8);		/* ... and always at least one more pid */		token ^= QTD_TOGGLE;		qtd_prev = qtd;		qtd = ehci_qtd_alloc (ehci);		if (unlikely (!qtd))			goto cleanup;		qtd->urb = urb;		qtd_prev->hw_next = QTD_NEXT (qtd->qtd_dma);		list_add_tail (&qtd->qtd_list, head);	} 	/*	 * data transfer stage:  buffer setup	 */	if (likely (len > 0))		buf = urb->transfer_dma;	else		buf = 0;	/* for zero length DATA stages, STATUS is always IN */	if (!buf || is_input)		token |= (1 /* "in" */ << 8);	/* else it's already initted to "out" pid (0 << 8) */	maxpacket = max_packet(rtdm_usb_maxpacket(urb->dev, urb->pipe, !is_input));	/*	 * buffer gets wrapped in one or more qtds;	 * last one may be "short" (including zero len)	 * and may serve as a control status ack	 */	for (;;) {		int this_qtd_len;		this_qtd_len = qtd_fill (qtd, buf, len, token, maxpacket);		len -= this_qtd_len;		buf += this_qtd_len;		if (is_input)			qtd->hw_alt_next = ehci->async->hw_alt_next;		/* qh makes control packets use qtd toggle; maybe switch it */

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
豆国产96在线|亚洲| 亚洲精品中文字幕乱码三区| 无码av中文一区二区三区桃花岛| 色哟哟国产精品| 一级日本不卡的影视| 欧美吞精做爰啪啪高潮| 五月激情综合婷婷| 精品动漫一区二区三区在线观看| 韩国三级中文字幕hd久久精品| 一区二区三区蜜桃| 在线视频亚洲一区| 丝袜国产日韩另类美女| 精品国产乱码久久久久久免费| 国内精品视频666| 国产精品大尺度| 色999日韩国产欧美一区二区| 亚洲亚洲人成综合网络| 欧美精品一区二| 91在线观看下载| 一区二区三区美女视频| 日韩视频一区二区| 粉嫩在线一区二区三区视频| 亚洲国产美女搞黄色| 久久伊人蜜桃av一区二区| www.性欧美| 日本不卡的三区四区五区| 中文字幕成人av| 91麻豆精品国产91久久久使用方法| 韩国一区二区三区| 国产精品白丝在线| 欧美色网一区二区| 免费日韩伦理电影| 一区在线观看视频| av不卡一区二区三区| 亚洲国产精品一区二区久久恐怖片 | 中文字幕亚洲一区二区av在线| 成人av网址在线| 国产精品欧美久久久久一区二区| av午夜精品一区二区三区| 久久久久国产精品麻豆| 波多野结衣中文字幕一区二区三区| 亚洲图片你懂的| www.日韩大片| 狂野欧美性猛交blacked| 中文字幕不卡三区| 欧美美女网站色| 国产电影一区在线| 亚洲国产成人91porn| 久久久久久亚洲综合| 欧美日韩综合不卡| 丁香激情综合国产| 奇米一区二区三区av| 中文字幕在线不卡视频| 在线观看av不卡| 韩国视频一区二区| 亚洲精品一卡二卡| 欧美电影免费观看高清完整版| 99这里只有精品| 国产麻豆精品在线| 婷婷国产v国产偷v亚洲高清| 国产精品乱人伦| 精品久久久久久无| 欧美色大人视频| 丁香一区二区三区| 久久精品国产精品亚洲精品| 亚洲一区在线视频观看| 国产精品美女视频| 精品久久久三级丝袜| 欧美久久久久久蜜桃| 成人av网站大全| 国产白丝精品91爽爽久久| 青青国产91久久久久久| 亚洲国产精品久久人人爱| 中文字幕一区二区三区色视频| 日韩精品一区二区在线观看| 欧美日韩免费高清一区色橹橹 | 色噜噜狠狠一区二区三区果冻| 九九九久久久精品| 日韩国产一二三区| 国产精品国产精品国产专区不片| 国产欧美一区二区精品久导航| 日韩一区二区三区在线| 欧美日韩成人激情| 欧美视频你懂的| 精品婷婷伊人一区三区三| 91视频你懂的| 99re免费视频精品全部| 国产91对白在线观看九色| 国产麻豆视频一区二区| 国产一区二区剧情av在线| 久久精品国产99国产| 青椒成人免费视频| 蜜臀av性久久久久蜜臀aⅴ流畅 | 亚洲精品国产无天堂网2021| 国产亚洲美州欧州综合国| 久久精品无码一区二区三区| 337p粉嫩大胆噜噜噜噜噜91av| 日韩午夜激情免费电影| 日韩一区二区三区av| 日韩午夜小视频| 久久伊99综合婷婷久久伊| 精品国产一二三区| 国产亚洲欧美中文| 国产午夜亚洲精品理论片色戒 | 日韩一区二区三区视频在线观看| 宅男在线国产精品| 日韩视频一区二区三区| 欧美大片一区二区三区| 久久色在线视频| 国产日韩av一区二区| 国产精品久久综合| 亚洲欧美另类久久久精品 | 亚洲另类在线制服丝袜| 亚洲最大成人网4388xx| 亚洲成a人片在线不卡一二三区| 亚洲特黄一级片| 一区二区三区在线免费播放| 日本不卡一区二区三区| 国产福利视频一区二区三区| a4yy欧美一区二区三区| 欧美日本精品一区二区三区| 欧美一区二区三区在线观看视频 | 久久久久久久网| 中文字幕一区免费在线观看 | 亚洲一区二区三区四区五区黄| 午夜亚洲国产au精品一区二区| 久久成人精品无人区| 成人精品小蝌蚪| 欧美私模裸体表演在线观看| 日韩欧美在线影院| 国产精品水嫩水嫩| 国产在线精品一区二区三区不卡| 成人av资源在线| 69p69国产精品| 国产精品视频免费| 天堂成人免费av电影一区| 国产福利91精品一区| 在线观看亚洲精品| xf在线a精品一区二区视频网站| 国产精品国产三级国产专播品爱网| 一区二区三区在线视频播放| 日韩欧美国产不卡| 在线亚洲精品福利网址导航| 成人午夜av电影| 日韩一区二区三区视频在线观看| 国产女人水真多18毛片18精品视频| 亚洲成人高清在线| 成人中文字幕在线| 精品国产凹凸成av人导航| 一区二区三区四区激情| 国产91清纯白嫩初高中在线观看 | 亚洲日本欧美天堂| 亚洲va韩国va欧美va| 91色在线porny| 久久久久久99精品| 九九精品一区二区| 欧美久久久久久久久久| 亚洲六月丁香色婷婷综合久久 | 欧美猛男超大videosgay| 中文字幕第一区二区| 伦理电影国产精品| 欧美日本在线视频| 伊人色综合久久天天| 激情小说欧美图片| www.激情成人| 日韩欧美国产综合| 亚洲午夜免费视频| 一本大道久久a久久综合 | 国产精品欧美一区二区三区| 在线观看免费成人| 一区二区三区日本| 欧美性淫爽ww久久久久无| 亚洲人成人一区二区在线观看 | 日韩精品一区二区三区中文精品| 国产精品伦理在线| 捆绑调教美女网站视频一区| 精品久久久久久久久久久院品网 | 日韩欧美一级二级| 日本欧美在线观看| 色婷婷亚洲综合| 亚洲精品成人悠悠色影视| 国产精品夜夜爽| 中文字幕免费观看一区| 国产精品中文字幕日韩精品| 国产午夜精品一区二区三区视频| 久久99日本精品| 欧美精品一区二区蜜臀亚洲| 国产综合色产在线精品| 久久综合九色综合欧美就去吻| 免费在线观看视频一区| 欧美成人精品福利| 亚洲五月六月丁香激情| 色婷婷av一区| 亚洲一区在线观看免费观看电影高清 | 欧美日韩国产乱码电影| 亚洲国产成人av网| 欧美一级夜夜爽| 麻豆精品视频在线| 久久综合丝袜日本网| 国产91清纯白嫩初高中在线观看|