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

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

?? dwc_otg_hcd_intr.c

?? host usb 主設備程序 支持sd卡 mouse keyboard 的最單單的驅動程序 gcc編譯
?? C
?? 第 1 頁 / 共 4 頁
字號:
/* ========================================================================== * * Synopsys HS OTG Linux Software Driver and documentation (hereinafter, * "Software") is an Unsupported proprietary work of Synopsys, Inc. unless * otherwise expressly agreed to in writing between Synopsys and you. * * The Software IS NOT an item of Licensed Software or Licensed Product under * any End User Software License Agreement or Agreement for Licensed Product * with Synopsys or any supplement thereto. You are permitted to use and * redistribute this Software in source and binary forms, with or without * modification, provided that redistributions of source code must retain this * notice. You may not view, use, disclose, copy or distribute this file or * any information contained herein except pursuant to this license grant from * Synopsys. If you do not agree with this notice, including the disclaimer * below, then you are not authorized to use the Software. * * THIS SOFTWARE IS BEING DISTRIBUTED BY SYNOPSYS SOLELY ON AN "AS IS" BASIS * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE HEREBY DISCLAIMED. IN NO EVENT SHALL SYNOPSYS BE LIABLE FOR ANY DIRECT, * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH * DAMAGE. * ========================================================================== */#ifndef DWC_DEVICE_ONLY#include <linux/version.h>#include "dwc_otg_driver.h"#include "dwc_otg_hcd.h"#include "dwc_otg_regs.h"/** @file * This file contains the implementation of the HCD Interrupt handlers. *//** This function handles interrupts for the HCD. */int32_t dwc_otg_hcd_handle_intr(dwc_otg_hcd_t * _dwc_otg_hcd){	int retval = IRQ_NONE;	dwc_otg_core_if_t *core_if = _dwc_otg_hcd->core_if;	gintsts_data_t gintsts;#ifdef DEBUG	dwc_otg_core_global_regs_t *global_regs = core_if->core_global_regs;#endif	/* Check if HOST Mode */	if (likely(dwc_otg_is_host_mode(core_if))) {		gintsts.d32 = dwc_otg_read_core_intr(core_if);		if (unlikely(!gintsts.d32)) {			return IRQ_NONE;		}		if (gintsts.b.sofintr) {			core_if->irq_pat[0]++;			retval |= dwc_otg_hcd_handle_sof_intr(_dwc_otg_hcd);		}		if (gintsts.b.rxstsqlvl) {			core_if->irq_pat[1]++;			retval |= dwc_otg_hcd_handle_rx_status_q_level_intr(_dwc_otg_hcd);		}		if (gintsts.b.nptxfempty) {			core_if->irq_pat[2]++;			retval |= dwc_otg_hcd_handle_np_tx_fifo_empty_intr(_dwc_otg_hcd);		}		if (gintsts.b.i2cintr) {			core_if->irq_pat[3]++;			/** @todo Implement i2cintr handler. */		}		if (gintsts.b.portintr) {			core_if->irq_pat[4]++;			retval |= dwc_otg_hcd_handle_port_intr(_dwc_otg_hcd);		}		if (gintsts.b.hcintr) {			core_if->irq_pat[5]++;			retval |= dwc_otg_hcd_handle_hc_intr(_dwc_otg_hcd);		}		if (gintsts.b.ptxfempty) {			core_if->irq_pat[6]++;			retval |= dwc_otg_hcd_handle_perio_tx_fifo_empty_intr(_dwc_otg_hcd);		}	}	return retval;}#ifdef DWC_TRACK_MISSED_SOFS#warning Compiling code to track missed SOFs#define FRAME_NUM_ARRAY_SIZE 1000/** * This function is for debug only. */static inline void track_missed_sofs(uint16_t _curr_frame_number){	static uint16_t frame_num_array[FRAME_NUM_ARRAY_SIZE];	static uint16_t last_frame_num_array[FRAME_NUM_ARRAY_SIZE];	static int frame_num_idx = 0;	static uint16_t last_frame_num = DWC_HFNUM_MAX_FRNUM;	static int dumped_frame_num_array = 0;	if (frame_num_idx < FRAME_NUM_ARRAY_SIZE) {		if ((((last_frame_num + 1) & DWC_HFNUM_MAX_FRNUM) != _curr_frame_number)) {			frame_num_array[frame_num_idx] = _curr_frame_number;			last_frame_num_array[frame_num_idx++] = last_frame_num;		}	} else if (!dumped_frame_num_array) {		int i;		printk(KERN_EMERG USB_DWC "Frame     Last Frame\n");		printk(KERN_EMERG USB_DWC "-----     ----------\n");		for (i = 0; i < FRAME_NUM_ARRAY_SIZE; i++) {			printk(KERN_EMERG USB_DWC "0x%04x    0x%04x\n",			       frame_num_array[i], last_frame_num_array[i]);		}		dumped_frame_num_array = 1;	}	last_frame_num = _curr_frame_number;}#endif/** * Handles the start-of-frame interrupt in host mode. Non-periodic * transactions may be queued to the DWC_otg controller for the current * (micro)frame. Periodic transactions may be queued to the controller for the * next (micro)frame. */int32_t dwc_otg_hcd_handle_sof_intr(dwc_otg_hcd_t * _hcd){	hfnum_data_t hfnum;	struct list_head *qh_entry;	dwc_otg_qh_t *qh;	dwc_otg_transaction_type_e tr_type;	gintsts_data_t gintsts = {.d32 = 0 };	hfnum.d32 = dwc_read_reg32(&_hcd->core_if->host_if->host_global_regs->hfnum);#ifdef DEBUG_SOF	DWC_DEBUGPL(DBG_HCD, "--Start of Frame Interrupt--\n");#endif	_hcd->frame_number = hfnum.b.frnum;#ifdef DEBUG	_hcd->frrem_accum += hfnum.b.frrem;	_hcd->frrem_samples++;#endif#ifdef DWC_TRACK_MISSED_SOFS	track_missed_sofs(_hcd->frame_number);#endif	/* Determine whether any periodic QHs should be executed. */	qh_entry = _hcd->periodic_sched_inactive.next;	while (qh_entry != &_hcd->periodic_sched_inactive) {		qh = list_entry(qh_entry, dwc_otg_qh_t, qh_list_entry);		qh_entry = qh_entry->next;		if (dwc_frame_num_le(qh->sched_frame, _hcd->frame_number)) {			/*			 * Move QH to the ready list to be executed next			 * (micro)frame.			 */			list_move(&qh->qh_list_entry, &_hcd->periodic_sched_ready);		}	}	tr_type = dwc_otg_hcd_select_transactions(_hcd);	if (tr_type != DWC_OTG_TRANSACTION_NONE) {		dbg_otg("%s() for queue_trans\n", __FUNCTION__);		_hcd->core_if->irq_pat[9]++;		dwc_otg_hcd_queue_transactions(_hcd, tr_type);	}	/* Clear interrupt */	gintsts.b.sofintr = 1;	dwc_write_reg32(&_hcd->core_if->core_global_regs->gintsts, gintsts.d32);	return 1;}/** Handles the Rx Status Queue Level Interrupt, which indicates that there is at * least one packet in the Rx FIFO.  The packets are moved from the FIFO to * memory if the DWC_otg controller is operating in Slave mode. */int32_t dwc_otg_hcd_handle_rx_status_q_level_intr(dwc_otg_hcd_t * _dwc_otg_hcd){	host_grxsts_data_t grxsts;	dwc_hc_t *hc = NULL;	DWC_DEBUGPL(DBG_HCD, "--RxStsQ Level Interrupt--\n");	grxsts.d32 = dwc_read_reg32(&_dwc_otg_hcd->core_if->core_global_regs->grxstsp);	hc = _dwc_otg_hcd->hc_ptr_array[grxsts.b.chnum];	/* Packet Status */	DWC_DEBUGPL(DBG_HCDV, "    Ch num = %d\n", grxsts.b.chnum);	DWC_DEBUGPL(DBG_HCDV, "    Count = %d\n", grxsts.b.bcnt);	DWC_DEBUGPL(DBG_HCDV, "    DPID = %d, hc.dpid = %d\n", grxsts.b.dpid, hc->data_pid_start);	DWC_DEBUGPL(DBG_HCDV, "    PStatus = %d\n", grxsts.b.pktsts);	switch (grxsts.b.pktsts) {	case DWC_GRXSTS_PKTSTS_IN:		/* Read the data into the host buffer. */		if (grxsts.b.bcnt > 0) {			dwc_otg_read_packet(_dwc_otg_hcd->core_if, hc->xfer_buff, grxsts.b.bcnt);			/* Update the HC fields for the next packet received. */			hc->xfer_count += grxsts.b.bcnt;			hc->xfer_buff += grxsts.b.bcnt;		}	case DWC_GRXSTS_PKTSTS_IN_XFER_COMP:	case DWC_GRXSTS_PKTSTS_DATA_TOGGLE_ERR:	case DWC_GRXSTS_PKTSTS_CH_HALTED:		/* Handled in interrupt, just ignore data */		break;	default:		DWC_ERROR("RX_STS_Q Interrupt: Unknown status %d\n", grxsts.b.pktsts);		break;	}	return 1;}/** This interrupt occurs when the non-periodic Tx FIFO is half-empty. More * data packets may be written to the FIFO for OUT transfers. More requests * may be written to the non-periodic request queue for IN transfers. This * interrupt is enabled only in Slave mode. */int32_t dwc_otg_hcd_handle_np_tx_fifo_empty_intr(dwc_otg_hcd_t * _dwc_otg_hcd){	DWC_DEBUGPL(DBG_HCD, "--Non-Periodic TxFIFO Empty Interrupt--\n");	dwc_otg_hcd_queue_transactions(_dwc_otg_hcd, DWC_OTG_TRANSACTION_NON_PERIODIC);	return 1;}/** This interrupt occurs when the periodic Tx FIFO is half-empty. More data * packets may be written to the FIFO for OUT transfers. More requests may be * written to the periodic request queue for IN transfers. This interrupt is * enabled only in Slave mode. */int32_t dwc_otg_hcd_handle_perio_tx_fifo_empty_intr(dwc_otg_hcd_t * _dwc_otg_hcd){	DWC_DEBUGPL(DBG_HCD, "--Periodic TxFIFO Empty Interrupt--\n");	dwc_otg_hcd_queue_transactions(_dwc_otg_hcd, DWC_OTG_TRANSACTION_PERIODIC);	return 1;}/** There are multiple conditions that can cause a port interrupt. This function * determines which interrupt conditions have occurred and handles them * appropriately. */int32_t dwc_otg_hcd_handle_port_intr(dwc_otg_hcd_t * _dwc_otg_hcd){	int retval = 0;	hprt0_data_t hprt0;	hprt0_data_t hprt0_modify;	hprt0.d32 = dwc_read_reg32(_dwc_otg_hcd->core_if->host_if->hprt0);	hprt0_modify.d32 = dwc_read_reg32(_dwc_otg_hcd->core_if->host_if->hprt0);	/* Clear appropriate bits in HPRT0 to clear the interrupt bit in	 * GINTSTS */	hprt0_modify.b.prtena = 0;	hprt0_modify.b.prtconndet = 0;	hprt0_modify.b.prtenchng = 0;	hprt0_modify.b.prtovrcurrchng = 0;	/* Port Connect Detected	 * Set flag and clear if detected */	if (hprt0.b.prtconndet) {		DWC_DEBUGPL(DBG_HCD, "--Port Interrupt HPRT0=0x%08x "			    "Port Connect Detected--\n", hprt0.d32);		_dwc_otg_hcd->flags.b.port_connect_status_change = 1;		_dwc_otg_hcd->flags.b.port_connect_status = 1;		hprt0_modify.b.prtconndet = 1;		/* B-Device has connected, Delete the connection timer.  */		del_timer(&_dwc_otg_hcd->conn_timer);		/* The Hub driver asserts a reset when it sees port connect		 * status change flag */		retval |= 1;	}	/* Port Enable Changed	 * Clear if detected - Set internal flag if disabled */	if (hprt0.b.prtenchng) {		DWC_DEBUGPL(DBG_HCD, "  --Port Interrupt HPRT0=0x%08x "			    "Port Enable Changed--\n", hprt0.d32);		hprt0_modify.b.prtenchng = 1;		if (hprt0.b.prtena == 1) {			int do_reset = 0;			dwc_otg_core_params_t *params = _dwc_otg_hcd->core_if->core_params;			dwc_otg_core_global_regs_t *global_regs =				_dwc_otg_hcd->core_if->core_global_regs;			dwc_otg_host_if_t *host_if = _dwc_otg_hcd->core_if->host_if;			/* Check if we need to adjust the PHY clock speed for			 * low power and adjust it */			if (params->host_support_fs_ls_low_power) {				gusbcfg_data_t usbcfg;				usbcfg.d32 = dwc_read_reg32(&global_regs->gusbcfg);				if ((hprt0.b.prtspd == DWC_HPRT0_PRTSPD_LOW_SPEED) ||				    (hprt0.b.prtspd == DWC_HPRT0_PRTSPD_FULL_SPEED)) {					/*					 * Low power					 */					hcfg_data_t hcfg;					if (usbcfg.b.phylpwrclksel == 0) {						/* Set PHY low power clock select for FS/LS devices */						usbcfg.b.phylpwrclksel = 1;						dwc_write_reg32(&global_regs->gusbcfg, usbcfg.d32);						do_reset = 1;					}					hcfg.d32 = dwc_read_reg32(&host_if->host_global_regs->hcfg);					if ((hprt0.b.prtspd == DWC_HPRT0_PRTSPD_LOW_SPEED) &&					    (params->host_ls_low_power_phy_clk ==					     DWC_HOST_LS_LOW_POWER_PHY_CLK_PARAM_6MHZ)) {						/* 6 MHZ */						DWC_DEBUGPL(DBG_CIL,							    "FS_PHY programming HCFG to 6 MHz (Low Power)\n");						if (hcfg.b.fslspclksel != DWC_HCFG_6_MHZ) {							hcfg.b.fslspclksel = DWC_HCFG_6_MHZ;							dwc_write_reg32(&host_if->host_global_regs->									hcfg, hcfg.d32);							do_reset = 1;						}					} else {						/* 48 MHZ */						DWC_DEBUGPL(DBG_CIL,							    "FS_PHY programming HCFG to 48 MHz ()\n");						if (hcfg.b.fslspclksel != DWC_HCFG_48_MHZ) {							hcfg.b.fslspclksel = DWC_HCFG_48_MHZ;							dwc_write_reg32(&host_if->host_global_regs->									hcfg, hcfg.d32);							do_reset = 1;						}					}				} else {					/*					 * Not low power					 */					if (usbcfg.b.phylpwrclksel == 1) {						usbcfg.b.phylpwrclksel = 0;						dwc_write_reg32(&global_regs->gusbcfg, usbcfg.d32);						do_reset = 1;					}				}				if (do_reset) {					tasklet_schedule(_dwc_otg_hcd->reset_tasklet);				}			}			if (!do_reset) {				/* Port has been enabled set the reset change flag */				_dwc_otg_hcd->flags.b.port_reset_change = 1;			}		} else {			_dwc_otg_hcd->flags.b.port_enable_change = 1;		}		retval |= 1;	}	/** Overcurrent Change Interrupt */	if (hprt0.b.prtovrcurrchng) {		DWC_DEBUGPL(DBG_HCD, "  --Port Interrupt HPRT0=0x%08x "			    "Port Overcurrent Changed--\n", hprt0.d32);		_dwc_otg_hcd->flags.b.port_over_current_change = 1;		hprt0_modify.b.prtovrcurrchng = 1;		retval |= 1;	}	/* Clear Port Interrupts */	dwc_write_reg32(_dwc_otg_hcd->core_if->host_if->hprt0, hprt0_modify.d32);	return retval;}/** This interrupt indicates that one or more host channels has a pending * interrupt. There are multiple conditions that can cause each host channel * interrupt. This function determines which conditions have occurred for each * host channel interrupt and handles them appropriately. */int32_t dwc_otg_hcd_handle_hc_intr(dwc_otg_hcd_t * _dwc_otg_hcd){	int i;	int retval = 0;	haint_data_t haint;	/* Clear appropriate bits in HCINTn to clear the interrupt bit in	 * GINTSTS */#if 0	haint.d32 = dwc_otg_read_host_all_channels_intr(_dwc_otg_hcd->core_if);	for (i = 0; i < _dwc_otg_hcd->core_if->core_params->host_channels; i++) {		if (haint.b2.chint & (1 << i)) {			retval |= dwc_otg_hcd_handle_hc_n_intr(_dwc_otg_hcd, i);		}	}#else	haint.d32 = readl(S3C_UDC_OTG_HAINT);	do {		i = ffs(haint.d32) - 1;		retval |= dwc_otg_hcd_handle_hc_n_intr(_dwc_otg_hcd, i);		dbg_otg("haint.d32: %08x, %d\n", haint.d32, i);		haint.d32 &= ~(1 << i);	} while (haint.d32);#endif	return retval;}/* Macro used to clear one channel interrupt */#define clear_hc_int(_hc_regs_,_intr_) \do { \	hcint_data_t hcint_clear = {.d32 = 0}; \	hcint_clear.b._intr_ = 1; \	dwc_write_reg32(&((_hc_regs_)->hcint), hcint_clear.d32); \} while (0)/* * Macro used to disable one channel interrupt. Channel interrupts are * disabled when the channel is halted or released by the interrupt handler. * There is no need to handle further interrupts of that type until the * channel is re-assigned. In fact, subsequent handling may cause crashes * because the channel structures are cleaned up when the channel is released. */#define disable_hc_int(_hc_regs_,_intr_) \do { \	hcintmsk_data_t hcintmsk = {.d32 = 0}; \	hcintmsk.b._intr_ = 1; \	dwc_modify_reg32(&((_hc_regs_)->hcintmsk), hcintmsk.d32, 0); \} while (0)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美激情一区二区三区全黄| 免费观看91视频大全| 日韩中文字幕亚洲一区二区va在线| 日韩成人av影视| 91麻豆成人久久精品二区三区| 欧美精品乱人伦久久久久久| 国产精品久久毛片a| 美女视频黄频大全不卡视频在线播放| 99精品偷自拍| 国产亚洲一本大道中文在线| 全国精品久久少妇| 欧美午夜在线一二页| 中文字幕一区在线| 国产九色sp调教91| 日韩精品影音先锋| 日本不卡一二三| 欧美精品1区2区3区| 尤物av一区二区| 91一区在线观看| 欧美日韩一区在线观看| 国产亚洲精品中文字幕| 亚洲午夜精品网| 成人福利视频网站| 国产情人综合久久777777| 麻豆一区二区99久久久久| 欧美久久久影院| 亚洲成a人片综合在线| 欧美日韩精品一区二区三区蜜桃 | 亚洲视频在线一区观看| 国产成人av自拍| 亚洲国产精品二十页| 丰满白嫩尤物一区二区| 日本一区二区三区免费乱视频 | 婷婷中文字幕一区三区| 欧美视频一区二区三区四区| 亚洲宅男天堂在线观看无病毒| 色哟哟一区二区在线观看| 亚洲一区二区在线免费观看视频 | 欧美精品一区二区不卡| 美国三级日本三级久久99| 日韩美女视频一区二区在线观看| 日韩av中文在线观看| 欧美tickling网站挠脚心| 久久草av在线| 国产亚洲成aⅴ人片在线观看| 国产ts人妖一区二区| 亚洲三级小视频| 欧美日韩高清在线| 久久精品99国产精品| 久久久亚洲高清| 色狠狠一区二区三区香蕉| 亚洲一区二区在线播放相泽| 欧美一级日韩不卡播放免费| 国产在线一区二区综合免费视频| 国产欧美一区二区三区沐欲| 日本高清不卡在线观看| 三级久久三级久久| 久久日一线二线三线suv| 成+人+亚洲+综合天堂| 一区二区三区在线视频观看| 欧美一区二区三区性视频| 国产在线不卡视频| 中文字幕一区二区不卡| 欧美久久久久中文字幕| 风间由美性色一区二区三区| 一区二区三区美女| 精品国产乱码久久久久久久久| bt欧美亚洲午夜电影天堂| 亚洲成av人片一区二区梦乃| 国产日韩在线不卡| 欧美日韩你懂得| 国产91丝袜在线播放九色| 亚洲国产成人91porn| 欧美激情一区不卡| 日韩午夜小视频| 色婷婷av一区二区| 国产高清成人在线| 日韩福利视频网| 亚洲色大成网站www久久九九| 精品欧美乱码久久久久久1区2区| 色美美综合视频| 国产成人精品综合在线观看| 日日夜夜免费精品| 亚洲色图另类专区| 亚洲国产成人在线| 日韩欧美色综合网站| 欧美伊人久久大香线蕉综合69| 国产成人免费网站| 久久精品国产精品亚洲红杏| 亚洲自拍都市欧美小说| 国产精品久久久久久久久免费桃花| 91精品国产一区二区人妖| 日本精品视频一区二区三区| 丁香婷婷综合激情五月色| 日韩高清不卡一区二区| 亚洲成av人影院| 亚洲综合一区二区| 亚洲激情av在线| 综合色天天鬼久久鬼色| 国产欧美日韩激情| 久久―日本道色综合久久| 欧美成人一级视频| 日韩精品最新网址| 91精品国产福利在线观看| 欧美性生交片4| 日本道色综合久久| 91久久精品网| 色8久久人人97超碰香蕉987| 成人黄色小视频在线观看| 国产精品一品视频| 成人在线视频一区二区| 国产风韵犹存在线视精品| 国产一区欧美一区| 国产老妇另类xxxxx| 国产成人亚洲精品青草天美| 国产精品18久久久久久久久| 国产曰批免费观看久久久| 激情五月播播久久久精品| 国产资源在线一区| 国产寡妇亲子伦一区二区| 国产高清精品网站| av午夜一区麻豆| 欧美亚洲一区二区在线观看| 欧美日韩色一区| 欧美一级免费观看| 2021久久国产精品不只是精品| 亚洲精品一区二区三区四区高清 | 亚洲色图清纯唯美| 亚洲国产精品久久人人爱| 五月天国产精品| 老司机午夜精品| 不卡视频一二三四| 在线观看亚洲精品| 91精品国产高清一区二区三区| 精品国产乱码久久久久久闺蜜| 国产网红主播福利一区二区| 日韩伦理av电影| 日韩主播视频在线| 国产精品1区二区.| 欧美三级三级三级爽爽爽| 日韩欧美高清在线| 国产精品伦理在线| 午夜精品福利久久久| 国产麻豆9l精品三级站| 99riav一区二区三区| 制服丝袜av成人在线看| 国产人伦精品一区二区| 亚洲主播在线观看| 国产成人综合在线观看| 在线观看中文字幕不卡| 久久久久久久综合| 亚洲小说春色综合另类电影| 激情综合网av| 91福利国产精品| 久久这里只有精品视频网| 一区二区三区.www| 国产99久久精品| 欧美挠脚心视频网站| 中文字幕va一区二区三区| 香蕉影视欧美成人| 99re在线精品| 久久久噜噜噜久久人人看| 午夜不卡av免费| 99国产精品久久久久| 欧美哺乳videos| 亚洲一区二区免费视频| 岛国av在线一区| 精品国产伦一区二区三区观看方式| 一区二区三区精密机械公司| 国产suv精品一区二区883| 欧美一级日韩免费不卡| 亚洲国产精品人人做人人爽| 99久久99久久精品国产片果冻| 欧美精品日日鲁夜夜添| 一区二区三区在线免费| 国产成人亚洲精品狼色在线| 日韩欧美久久一区| 日韩二区三区在线观看| 在线免费不卡电影| 自拍偷拍亚洲激情| 成人午夜私人影院| 国产欧美精品在线观看| 精品一区二区免费看| 日韩一级二级三级| 日本成人在线网站| 欧美一级一区二区| 日本欧美韩国一区三区| 91精品国产品国语在线不卡| 亚洲综合久久久| 欧美日韩免费观看一区三区| 自拍偷拍国产精品| 99久久精品国产观看| 亚洲色图19p| 日本久久电影网| 亚洲午夜精品在线| 欧美视频在线不卡| 亚洲高清免费视频| 欧美精品丝袜中出| 男女男精品视频网| 久久人人爽爽爽人久久久|