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

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

?? isp116x-hcd.c

?? host usb 主設備程序 支持sd卡 mouse keyboard 的最單單的驅動程序 gcc編譯
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* * ISP116x HCD (Host Controller Driver) for USB. * * Derived from the SL811 HCD, rewritten for ISP116x. * Copyright (C) 2005 Olav Kongas <ok@artecdesign.ee> * * Portions: * Copyright (C) 2004 Psion Teklogix (for NetBook PRO) * Copyright (C) 2004 David Brownell * * Periodic scheduling is based on Roman's OHCI code * Copyright (C) 1999 Roman Weissgaerber * *//* * The driver basically works. A number of people have used it with a range * of devices. * * The driver passes all usbtests 1-14. * * Suspending/resuming of root hub via sysfs works. Remote wakeup works too. * And suspending/resuming of platform device works too. Suspend/resume * via HCD operations vector is not implemented. * * Iso transfer support is not implemented. Adding this would include * implementing recovery from the failure to service the processed ITL * fifo ram in time, which will involve chip reset. * * TODO: + More testing of suspend/resume.*//*  ISP116x chips require certain delays between accesses to its  registers. The following timing options exist.  1. Configure your memory controller (the best)  2. Implement platform-specific delay function possibly  combined with configuring the memory controller; see  include/linux/usb-isp116x.h for more info. Some broken  memory controllers line LH7A400 SMC need this. Also,  uncomment for that to work the following  USE_PLATFORM_DELAY macro.  3. Use ndelay (easiest, poorest). For that, uncomment  the following USE_NDELAY macro.*/#define USE_PLATFORM_DELAY//#define USE_NDELAY//#define DEBUG//#define VERBOSE/* Transfer descriptors. See dump_ptd() for printout format  *///#define PTD_TRACE/* enqueuing/finishing log of urbs *///#define URB_TRACE#include <linux/module.h>#include <linux/delay.h>#include <linux/debugfs.h>#include <linux/seq_file.h>#include <linux/errno.h>#include <linux/init.h>#include <linux/list.h>#include <linux/usb.h>#include <linux/usb/isp116x.h>#include <linux/platform_device.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/system.h>#include <asm/byteorder.h>#include "../core/hcd.h"#include "isp116x.h"#define DRIVER_VERSION	"03 Nov 2005"#define DRIVER_DESC	"ISP116x USB Host Controller Driver"MODULE_DESCRIPTION(DRIVER_DESC);MODULE_LICENSE("GPL");static const char hcd_name[] = "isp116x-hcd";/*-----------------------------------------------------------------*//*  Write len bytes to fifo, pad till 32-bit boundary */static void write_ptddata_to_fifo(struct isp116x *isp116x, void *buf, int len){	u8 *dp = (u8 *) buf;	u16 *dp2 = (u16 *) buf;	u16 w;	int quot = len % 4;	if ((unsigned long)dp2 & 1) {		/* not aligned */		for (; len > 1; len -= 2) {			w = *dp++;			w |= *dp++ << 8;			isp116x_raw_write_data16(isp116x, w);		}		if (len)			isp116x_write_data16(isp116x, (u16) * dp);	} else {		/* aligned */		for (; len > 1; len -= 2)			isp116x_raw_write_data16(isp116x, *dp2++);		if (len)			isp116x_write_data16(isp116x, 0xff & *((u8 *) dp2));	}	if (quot == 1 || quot == 2)		isp116x_raw_write_data16(isp116x, 0);}/*  Read len bytes from fifo and then read till 32-bit boundary. */static void read_ptddata_from_fifo(struct isp116x *isp116x, void *buf, int len){	u8 *dp = (u8 *) buf;	u16 *dp2 = (u16 *) buf;	u16 w;	int quot = len % 4;	if ((unsigned long)dp2 & 1) {		/* not aligned */		for (; len > 1; len -= 2) {			w = isp116x_raw_read_data16(isp116x);			*dp++ = w & 0xff;			*dp++ = (w >> 8) & 0xff;		}		if (len)			*dp = 0xff & isp116x_read_data16(isp116x);	} else {		/* aligned */		for (; len > 1; len -= 2)			*dp2++ = isp116x_raw_read_data16(isp116x);		if (len)			*(u8 *) dp2 = 0xff & isp116x_read_data16(isp116x);	}	if (quot == 1 || quot == 2)		isp116x_raw_read_data16(isp116x);}/*  Write ptd's and data for scheduled transfers into  the fifo ram. Fifo must be empty and ready.*/static void pack_fifo(struct isp116x *isp116x){	struct isp116x_ep *ep;	struct ptd *ptd;	int buflen = isp116x->atl_last_dir == PTD_DIR_IN	    ? isp116x->atl_bufshrt : isp116x->atl_buflen;	isp116x_write_reg16(isp116x, HCuPINT, HCuPINT_AIIEOT);	isp116x_write_reg16(isp116x, HCXFERCTR, buflen);	isp116x_write_addr(isp116x, HCATLPORT | ISP116x_WRITE_OFFSET);	for (ep = isp116x->atl_active; ep; ep = ep->active) {		ptd = &ep->ptd;		dump_ptd(ptd);		dump_ptd_out_data(ptd, ep->data);		isp116x_write_data16(isp116x, ptd->count);		isp116x_write_data16(isp116x, ptd->mps);		isp116x_write_data16(isp116x, ptd->len);		isp116x_write_data16(isp116x, ptd->faddr);		buflen -= sizeof(struct ptd);		/* Skip writing data for last IN PTD */		if (ep->active || (isp116x->atl_last_dir != PTD_DIR_IN)) {			write_ptddata_to_fifo(isp116x, ep->data, ep->length);			buflen -= ALIGN(ep->length, 4);		}	}	BUG_ON(buflen);}/*  Read the processed ptd's and data from fifo ram back to  URBs' buffers. Fifo must be full and done*/static void unpack_fifo(struct isp116x *isp116x){	struct isp116x_ep *ep;	struct ptd *ptd;	int buflen = isp116x->atl_last_dir == PTD_DIR_IN	    ? isp116x->atl_buflen : isp116x->atl_bufshrt;	isp116x_write_reg16(isp116x, HCuPINT, HCuPINT_AIIEOT);	isp116x_write_reg16(isp116x, HCXFERCTR, buflen);	isp116x_write_addr(isp116x, HCATLPORT);	for (ep = isp116x->atl_active; ep; ep = ep->active) {		ptd = &ep->ptd;		ptd->count = isp116x_read_data16(isp116x);		ptd->mps = isp116x_read_data16(isp116x);		ptd->len = isp116x_read_data16(isp116x);		ptd->faddr = isp116x_read_data16(isp116x);		buflen -= sizeof(struct ptd);		/* Skip reading data for last Setup or Out PTD */		if (ep->active || (isp116x->atl_last_dir == PTD_DIR_IN)) {			read_ptddata_from_fifo(isp116x, ep->data, ep->length);			buflen -= ALIGN(ep->length, 4);		}		dump_ptd(ptd);		dump_ptd_in_data(ptd, ep->data);	}	BUG_ON(buflen);}/*---------------------------------------------------------------*//*  Set up PTD's.*/static void preproc_atl_queue(struct isp116x *isp116x){	struct isp116x_ep *ep;	struct urb *urb;	struct ptd *ptd;	u16 len;	for (ep = isp116x->atl_active; ep; ep = ep->active) {		u16 toggle = 0, dir = PTD_DIR_SETUP;		BUG_ON(list_empty(&ep->hep->urb_list));		urb = container_of(ep->hep->urb_list.next,				   struct urb, urb_list);		ptd = &ep->ptd;		len = ep->length;		spin_lock(&urb->lock);		ep->data = (unsigned char *)urb->transfer_buffer		    + urb->actual_length;		switch (ep->nextpid) {		case USB_PID_IN:			toggle = usb_gettoggle(urb->dev, ep->epnum, 0);			dir = PTD_DIR_IN;			break;		case USB_PID_OUT:			toggle = usb_gettoggle(urb->dev, ep->epnum, 1);			dir = PTD_DIR_OUT;			break;		case USB_PID_SETUP:			len = sizeof(struct usb_ctrlrequest);			ep->data = urb->setup_packet;			break;		case USB_PID_ACK:			toggle = 1;			len = 0;			dir = (urb->transfer_buffer_length			       && usb_pipein(urb->pipe))			    ? PTD_DIR_OUT : PTD_DIR_IN;			break;		default:			ERR("%s %d: ep->nextpid %d\n", __func__, __LINE__,			    ep->nextpid);			BUG();		}		ptd->count = PTD_CC_MSK | PTD_ACTIVE_MSK | PTD_TOGGLE(toggle);		ptd->mps = PTD_MPS(ep->maxpacket)		    | PTD_SPD(urb->dev->speed == USB_SPEED_LOW)		    | PTD_EP(ep->epnum);		ptd->len = PTD_LEN(len) | PTD_DIR(dir);		ptd->faddr = PTD_FA(usb_pipedevice(urb->pipe));		spin_unlock(&urb->lock);		if (!ep->active) {			ptd->mps |= PTD_LAST_MSK;			isp116x->atl_last_dir = dir;		}		isp116x->atl_bufshrt = sizeof(struct ptd) + isp116x->atl_buflen;		isp116x->atl_buflen = isp116x->atl_bufshrt + ALIGN(len, 4);	}}/*  Analyze transfer results, handle partial transfers and errors*/static void postproc_atl_queue(struct isp116x *isp116x){	struct isp116x_ep *ep;	struct urb *urb;	struct usb_device *udev;	struct ptd *ptd;	int short_not_ok;	u8 cc;	for (ep = isp116x->atl_active; ep; ep = ep->active) {		BUG_ON(list_empty(&ep->hep->urb_list));		urb =		    container_of(ep->hep->urb_list.next, struct urb, urb_list);		udev = urb->dev;		ptd = &ep->ptd;		cc = PTD_GET_CC(ptd);		short_not_ok = 1;		spin_lock(&urb->lock);		/* Data underrun is special. For allowed underrun		   we clear the error and continue as normal. For		   forbidden underrun we finish the DATA stage		   immediately while for control transfer,		   we do a STATUS stage. */		if (cc == TD_DATAUNDERRUN) {			if (!(urb->transfer_flags & URB_SHORT_NOT_OK)) {				DBG("Allowed data underrun\n");				cc = TD_CC_NOERROR;				short_not_ok = 0;			} else {				ep->error_count = 1;				if (usb_pipecontrol(urb->pipe))					ep->nextpid = USB_PID_ACK;				else					usb_settoggle(udev, ep->epnum,						      ep->nextpid ==						      USB_PID_OUT,						      PTD_GET_TOGGLE(ptd));				urb->actual_length += PTD_GET_COUNT(ptd);				urb->status = cc_to_error[TD_DATAUNDERRUN];				spin_unlock(&urb->lock);				continue;			}		}		/* Keep underrun error through the STATUS stage */		if (urb->status == cc_to_error[TD_DATAUNDERRUN])			cc = TD_DATAUNDERRUN;		if (cc != TD_CC_NOERROR && cc != TD_NOTACCESSED		    && (++ep->error_count >= 3 || cc == TD_CC_STALL			|| cc == TD_DATAOVERRUN)) {			if (urb->status == -EINPROGRESS)				urb->status = cc_to_error[cc];			if (ep->nextpid == USB_PID_ACK)				ep->nextpid = 0;			spin_unlock(&urb->lock);			continue;		}		/* According to usb spec, zero-length Int transfer signals		   finishing of the urb. Hey, does this apply only		   for IN endpoints? */		if (usb_pipeint(urb->pipe) && !PTD_GET_LEN(ptd)) {			if (urb->status == -EINPROGRESS)				urb->status = 0;			spin_unlock(&urb->lock);			continue;		}		/* Relax after previously failed, but later succeeded		   or correctly NAK'ed retransmission attempt */		if (ep->error_count		    && (cc == TD_CC_NOERROR || cc == TD_NOTACCESSED))			ep->error_count = 0;		/* Take into account idiosyncracies of the isp116x chip		   regarding toggle bit for failed transfers */		if (ep->nextpid == USB_PID_OUT)			usb_settoggle(udev, ep->epnum, 1, PTD_GET_TOGGLE(ptd)				      ^ (ep->error_count > 0));		else if (ep->nextpid == USB_PID_IN)			usb_settoggle(udev, ep->epnum, 0, PTD_GET_TOGGLE(ptd)				      ^ (ep->error_count > 0));		switch (ep->nextpid) {		case USB_PID_IN:		case USB_PID_OUT:			urb->actual_length += PTD_GET_COUNT(ptd);			if (PTD_GET_ACTIVE(ptd)			    || (cc != TD_CC_NOERROR && cc < 0x0E))				break;			if (urb->transfer_buffer_length != urb->actual_length) {				if (short_not_ok)					break;			} else {				if (urb->transfer_flags & URB_ZERO_PACKET				    && ep->nextpid == USB_PID_OUT				    && !(PTD_GET_COUNT(ptd) % ep->maxpacket)) {					DBG("Zero packet requested\n");					break;				}			}			/* All data for this URB is transferred, let's finish */			if (usb_pipecontrol(urb->pipe))				ep->nextpid = USB_PID_ACK;			else if (urb->status == -EINPROGRESS)				urb->status = 0;			break;		case USB_PID_SETUP:			if (PTD_GET_ACTIVE(ptd)			    || (cc != TD_CC_NOERROR && cc < 0x0E))				break;			if (urb->transfer_buffer_length == urb->actual_length)				ep->nextpid = USB_PID_ACK;			else if (usb_pipeout(urb->pipe)) {				usb_settoggle(udev, 0, 1, 1);				ep->nextpid = USB_PID_OUT;			} else {				usb_settoggle(udev, 0, 0, 1);				ep->nextpid = USB_PID_IN;			}			break;		case USB_PID_ACK:			if (PTD_GET_ACTIVE(ptd)			    || (cc != TD_CC_NOERROR && cc < 0x0E))				break;			if (urb->status == -EINPROGRESS)				urb->status = 0;			ep->nextpid = 0;			break;		default:			BUG();		}		spin_unlock(&urb->lock);	}}/*  Take done or failed requests out of schedule. Give back  processed urbs.*/static void finish_request(struct isp116x *isp116x, struct isp116x_ep *ep,			   struct urb *urb)__releases(isp116x->lock) __acquires(isp116x->lock){	unsigned i;	urb->hcpriv = NULL;	ep->error_count = 0;	if (usb_pipecontrol(urb->pipe))		ep->nextpid = USB_PID_SETUP;	urb_dbg(urb, "Finish");	spin_unlock(&isp116x->lock);	usb_hcd_giveback_urb(isp116x_to_hcd(isp116x), urb);	spin_lock(&isp116x->lock);	/* take idle endpoints out of the schedule */	if (!list_empty(&ep->hep->urb_list))		return;	/* async deschedule */	if (!list_empty(&ep->schedule)) {		list_del_init(&ep->schedule);		return;	}	/* periodic deschedule */	DBG("deschedule qh%d/%p branch %d\n", ep->period, ep, ep->branch);	for (i = ep->branch; i < PERIODIC_SIZE; i += ep->period) {		struct isp116x_ep *temp;		struct isp116x_ep **prev = &isp116x->periodic[i];		while (*prev && ((temp = *prev) != ep))			prev = &temp->next;		if (*prev)			*prev = ep->next;		isp116x->load[i] -= ep->load;	}	ep->branch = PERIODIC_SIZE;	isp116x_to_hcd(isp116x)->self.bandwidth_allocated -=	    ep->load / ep->period;	/* switch irq type? */	if (!--isp116x->periodic_count) {		isp116x->irqenb &= ~HCuPINT_SOF;		isp116x->irqenb |= HCuPINT_ATL;	}}/*  Scan transfer lists, schedule transfers, send data off  to chip. */static void start_atl_transfers(struct isp116x *isp116x){	struct isp116x_ep *last_ep = NULL, *ep;	struct urb *urb;	u16 load = 0;	int len, index, speed, byte_time;	if (atomic_read(&isp116x->atl_finishing))		return;	if (!HC_IS_RUNNING(isp116x_to_hcd(isp116x)->state))		return;	/* FIFO not empty? */	if (isp116x_read_reg16(isp116x, HCBUFSTAT) & HCBUFSTAT_ATL_FULL)		return;	isp116x->atl_active = NULL;	isp116x->atl_buflen = isp116x->atl_bufshrt = 0;	/* Schedule int transfers */	if (isp116x->periodic_count) {		isp116x->fmindex = index =		    (isp116x->fmindex + 1) & (PERIODIC_SIZE - 1);		if ((load = isp116x->load[index])) {			/* Bring all int transfers for this frame			   into the active queue */			isp116x->atl_active = last_ep =			    isp116x->periodic[index];			while (last_ep->next)				last_ep = (last_ep->active = last_ep->next);			last_ep->active = NULL;		}	}	/* Schedule control/bulk transfers */	list_for_each_entry(ep, &isp116x->async, schedule) {		urb = container_of(ep->hep->urb_list.next,				   struct urb, urb_list);		speed = urb->dev->speed;		byte_time = speed == USB_SPEED_LOW		    ? BYTE_TIME_LOWSPEED : BYTE_TIME_FULLSPEED;		if (ep->nextpid == USB_PID_SETUP) {			len = sizeof(struct usb_ctrlrequest);		} else if (ep->nextpid == USB_PID_ACK) {			len = 0;		} else {			/* Find current free length ... */			len = (MAX_LOAD_LIMIT - load) / byte_time;			/* ... then limit it to configured max size ... */			len = min(len, speed == USB_SPEED_LOW ?				  MAX_TRANSFER_SIZE_LOWSPEED :				  MAX_TRANSFER_SIZE_FULLSPEED);			/* ... and finally cut to the multiple of MaxPacketSize,			   or to the real length if there's enough room. */			if (len <			    (urb->transfer_buffer_length -			     urb->actual_length)) {				len -= len % ep->maxpacket;				if (!len)					continue;			} else				len = urb->transfer_buffer_length -				    urb->actual_length;			BUG_ON(len < 0);		}		load += len * byte_time;		if (load > MAX_LOAD_LIMIT)			break;		ep->active = NULL;		ep->length = len;		if (last_ep)			last_ep->active = ep;		else			isp116x->atl_active = ep;		last_ep = ep;	}	/* Avoid starving of endpoints */	if ((&isp116x->async)->next != (&isp116x->async)->prev)		list_move(&isp116x->async, (&isp116x->async)->next);	if (isp116x->atl_active) {		preproc_atl_queue(isp116x);		pack_fifo(isp116x);	}}/*  Finish the processed transfers*/static void finish_atl_transfers(struct isp116x *isp116x){	struct isp116x_ep *ep;	struct urb *urb;	if (!isp116x->atl_active)		return;	/* Fifo not ready? */	if (!(isp116x_read_reg16(isp116x, HCBUFSTAT) & HCBUFSTAT_ATL_DONE))		return;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文字幕一区二区三中文字幕| 精品一区二区免费在线观看| 美女精品自拍一二三四| 成人综合在线观看| 欧美一级精品大片| 亚洲精品成人精品456| 激情成人午夜视频| 欧美日韩一级二级| 亚洲视频 欧洲视频| 国产一区二区三区av电影 | 国产一区二区三区电影在线观看 | 色综合久久久久综合| 久久免费偷拍视频| 亚洲午夜国产一区99re久久| 国产在线不卡一区| 9191久久久久久久久久久| 亚洲精品伦理在线| 国产99一区视频免费| 欧美一级高清大全免费观看| 一区二区三区中文免费| av午夜精品一区二区三区| 91精品国产丝袜白色高跟鞋| 亚洲精品欧美在线| 成人黄色大片在线观看| 亚洲精品一区二区三区四区高清| 婷婷国产v国产偷v亚洲高清| 在线免费av一区| 18欧美亚洲精品| 成人性生交大片免费看中文| 国产亚洲欧美日韩在线一区| 久久精品久久99精品久久| 欧美日韩国产综合久久| 亚洲与欧洲av电影| 99精品桃花视频在线观看| 国产色婷婷亚洲99精品小说| 国产99久久久精品| 欧美高清在线一区二区| 国产精品自拍在线| 中文字幕精品一区| 成人精品视频一区| 中文字幕久久午夜不卡| av网站免费线看精品| 一区二区三区精品视频在线| 欧美男女性生活在线直播观看| 午夜不卡av免费| 91精品国产色综合久久不卡电影| 日本成人在线视频网站| 精品欧美黑人一区二区三区| 国产精品一区专区| 中文字幕制服丝袜成人av| 91高清在线观看| 日韩精彩视频在线观看| 26uuu久久天堂性欧美| 成人v精品蜜桃久久一区| 亚洲人成网站精品片在线观看| 在线免费观看不卡av| 另类调教123区 | 亚洲在线观看免费| 欧美色视频在线| 久久精品二区亚洲w码| 亚洲国产精品精华液2区45| 色综合 综合色| 日本伊人色综合网| 亚洲国产经典视频| 欧美日韩国产综合久久| 国产精品99久久久久久久vr| 亚洲精品中文在线| 欧美成人午夜电影| 日本久久电影网| 免费观看在线综合色| 国产精品免费看片| 日韩欧美综合一区| 91在线国产福利| 久久超碰97人人做人人爱| 亚洲人成网站影音先锋播放| 欧美一级二级三级蜜桃| 国产精品99久久久久久似苏梦涵| 伊人开心综合网| 国产亚洲视频系列| 91精品一区二区三区在线观看| 成人国产精品免费观看| 日韩va亚洲va欧美va久久| 自拍偷拍亚洲激情| 精品入口麻豆88视频| 欧美色视频在线| 一本色道a无线码一区v| 国产成人在线色| 青娱乐精品视频| 一区二区三区蜜桃网| 国产精品不卡在线观看| 国产日产欧美精品一区二区三区| 欧美日韩www| 一本色道**综合亚洲精品蜜桃冫| 国产精品一区二区x88av| 日韩黄色免费网站| 亚洲在线视频网站| 亚洲品质自拍视频| 国产精品久久精品日日| 久久久久国产精品麻豆| 精品国产乱码久久久久久闺蜜 | 亚洲一区二区三区四区不卡| 中文字幕免费不卡| 国产欧美日韩不卡| 久久综合九色综合97_久久久| 在线成人av网站| 欧美色倩网站大全免费| 一本色道a无线码一区v| 91麻豆国产精品久久| 成人黄色网址在线观看| 成人黄色在线网站| 成人a级免费电影| 风间由美一区二区三区在线观看| 精品伊人久久久久7777人| 亚洲成人av中文| 亚洲综合在线免费观看| 一区二区三区在线播放| 一区二区三区在线视频观看| 一区二区三区毛片| 亚洲国产日日夜夜| 五月婷婷另类国产| 蜜桃视频在线观看一区| 麻豆精品在线播放| 黄色精品一二区| 高清不卡在线观看av| 成人aa视频在线观看| 99久久精品国产一区| 色天天综合色天天久久| 欧美精三区欧美精三区| 日韩免费一区二区| 久久久不卡网国产精品一区| 欧美激情一区二区三区不卡| 国产精品久久一卡二卡| 亚洲精选一二三| 日韩av午夜在线观看| 精品一区二区影视| 成人国产亚洲欧美成人综合网| 91在线精品秘密一区二区| 精品婷婷伊人一区三区三| 日韩欧美成人一区二区| 欧美激情艳妇裸体舞| 亚洲精品高清在线| 免费观看30秒视频久久| 成人免费的视频| 欧美日韩高清不卡| 久久免费视频一区| 一区二区三区四区在线免费观看 | 懂色av中文一区二区三区| 92精品国产成人观看免费| 欧美剧情片在线观看| 久久一日本道色综合| 亚洲免费在线观看| 久久国产尿小便嘘嘘| 99久久婷婷国产综合精品电影| 欧美日韩一区成人| 国产精品色噜噜| 免费观看久久久4p| 色欲综合视频天天天| 久久嫩草精品久久久精品一| 亚洲精品老司机| 国产福利一区二区三区在线视频| 在线影院国内精品| 国产欧美精品一区二区三区四区| 亚洲一级二级在线| 成人黄色一级视频| 精品99久久久久久| 亚洲国产欧美日韩另类综合| 国产91富婆露脸刺激对白| 欧美日韩成人综合| 亚洲欧美日韩国产手机在线| 韩国视频一区二区| 欧美福利视频导航| 亚洲男女一区二区三区| 国产成人精品综合在线观看 | 在线看一区二区| 国产午夜精品在线观看| 日韩国产成人精品| 欧美在线小视频| 中文字幕在线播放不卡一区| 麻豆91免费观看| 欧美日本乱大交xxxxx| 日韩久久一区二区| 成人午夜视频网站| 久久久综合网站| 久久国产人妖系列| 欧美精品1区2区| 五月天精品一区二区三区| 不卡欧美aaaaa| 国产欧美日韩亚州综合 | gogogo免费视频观看亚洲一| 精品久久久久久久久久久久久久久| 亚洲自拍偷拍网站| 欧美最猛性xxxxx直播| 中文字幕综合网| 91一区二区在线| 中文字幕亚洲成人| 99久久精品免费看| 中文字幕欧美一| av资源网一区| 综合久久一区二区三区| 97久久精品人人做人人爽|