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

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

?? dwc_otg_hcd_intr.c

?? host usb 主設備程序 支持sd卡 mouse keyboard 的最單單的驅(qū)動程序 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一区二区三区免费野_久草精品视频
精品第一国产综合精品aⅴ| 欧美韩日一区二区三区| 国产精品亚洲专一区二区三区| 国产精品久久精品日日| 在线不卡中文字幕播放| 97久久超碰精品国产| 精品制服美女丁香| 亚洲v精品v日韩v欧美v专区| 中文字幕精品三区| 精品91自产拍在线观看一区| 欧美亚男人的天堂| 白白色亚洲国产精品| 九九九精品视频| 五月激情综合婷婷| 亚洲理论在线观看| 国产精品视频九色porn| 日韩精品中文字幕在线一区| 欧美美女直播网站| 色婷婷久久久久swag精品 | 日韩一区二区三区三四区视频在线观看| 国产成人午夜片在线观看高清观看 | 久久夜色精品一区| 欧美视频在线一区| 欧美性生活大片视频| 成人黄色一级视频| 国产九色精品成人porny| 日本不卡不码高清免费观看| 一区二区三区中文字幕精品精品| 国产欧美一区二区精品性| 日韩视频在线观看一区二区| 在线播放91灌醉迷j高跟美女| 在线视频中文字幕一区二区| 99视频一区二区| 99亚偷拍自图区亚洲| 国产成人高清视频| 国产精品资源站在线| 国产在线视频不卡二| 久久电影国产免费久久电影| 免费高清在线视频一区·| 免费高清视频精品| 免费视频一区二区| 国模一区二区三区白浆| 极品瑜伽女神91| 九九在线精品视频| 国产一区三区三区| 国产福利视频一区二区三区| 成人激情电影免费在线观看| 成人免费va视频| 色综合久久久久久久久久久| 91国产精品成人| 欧美无人高清视频在线观看| 欧美高清性hdvideosex| 日韩欧美区一区二| 久久久久综合网| 国产精品成人午夜| 一区二区三区精品视频在线| 亚洲成人你懂的| 免费av网站大全久久| 国产麻豆视频一区| 色偷偷一区二区三区| 欧美久久久一区| 日韩精品专区在线影院重磅| 久久久久久99精品| 国产精品成人免费在线| 亚洲成人自拍偷拍| 喷白浆一区二区| 久久er精品视频| 国产iv一区二区三区| 欧美在线观看视频在线| 欧美大片顶级少妇| 国产精品国产三级国产三级人妇 | 在线精品视频免费观看| 3d动漫精品啪啪1区2区免费| 欧美tickle裸体挠脚心vk| 日本一区二区成人| 亚洲一区二区在线播放相泽| 日本不卡一区二区三区| 国产v日产∨综合v精品视频| 一本一道波多野结衣一区二区| 欧美一区二区三区四区久久| 国产色一区二区| 亚洲综合成人在线| 狠狠狠色丁香婷婷综合久久五月| 91在线小视频| 欧美不卡在线视频| 亚洲免费高清视频在线| 精品一区二区三区免费观看| 91麻豆国产香蕉久久精品| 欧美一区二区在线免费播放| 中文字幕在线不卡一区二区三区| 午夜av一区二区三区| 懂色av噜噜一区二区三区av| 欧美日韩国产综合一区二区| 国产精品网站在线| 日本 国产 欧美色综合| 97成人超碰视| 久久久久久一二三区| 亚洲成人高清在线| 国产成人精品亚洲日本在线桃色| 高清免费成人av| 精品国产一区二区三区久久影院| 国产黄色成人av| 欧美在线制服丝袜| 国产日韩精品视频一区| 午夜不卡av免费| 精品88久久久久88久久久| 一本到三区不卡视频| 综合中文字幕亚洲| 久久精品国产精品青草| 91在线云播放| 国产欧美综合在线观看第十页| 亚洲午夜激情av| 欧美熟乱第一页| 国产揄拍国内精品对白| 免费成人在线观看视频| 日韩亚洲欧美中文三级| 欧美军同video69gay| 亚洲色欲色欲www在线观看| 国产成人精品一区二区三区四区| 日韩欧美一区二区视频| 亚洲国产一区二区三区| 色综合久久久久网| 亚洲欧洲国产日韩| 成人爱爱电影网址| 国产日韩欧美精品一区| 极品瑜伽女神91| 精品日韩成人av| 九九精品一区二区| 欧美v国产在线一区二区三区| 三级不卡在线观看| 在线播放国产精品二区一二区四区| 一区二区三区资源| 色哟哟欧美精品| 玉米视频成人免费看| 99久久久精品| 亚洲女同女同女同女同女同69| av中文字幕不卡| 亚洲素人一区二区| 色婷婷亚洲一区二区三区| 亚洲激情欧美激情| 欧美在线啊v一区| 午夜不卡在线视频| 欧美一二三四区在线| 老司机免费视频一区二区 | 91伊人久久大香线蕉| 综合亚洲深深色噜噜狠狠网站| 不卡一卡二卡三乱码免费网站| 国产精品久久夜| 91在线视频播放| 亚洲午夜免费福利视频| 欧美精品高清视频| 久久国产婷婷国产香蕉| 久久久久国产免费免费 | 国产成人无遮挡在线视频| 久久精品这里都是精品| 日韩高清不卡在线| 天天色天天操综合| 亚洲国产一区二区三区| 日韩成人av影视| 国产综合久久久久久久久久久久| 国精产品一区一区三区mba视频 | 日韩欧美一二三| 国产精品日韩精品欧美在线| 亚洲综合小说图片| 捆绑调教美女网站视频一区| 国产乱码精品一区二区三区av| av电影天堂一区二区在线观看| 欧美图片一区二区三区| 2021久久国产精品不只是精品| 国产精品网曝门| 色综合天天综合狠狠| 欧美伦理影视网| 中文乱码免费一区二区| 青草国产精品久久久久久| 粉嫩av一区二区三区粉嫩| 欧美日韩国产天堂| 亚洲图片激情小说| 韩国av一区二区三区四区| 欧美色图片你懂的| **欧美大码日韩| 成人永久aaa| 精品国精品国产| 久久精品国产在热久久| 欧美色倩网站大全免费| 亚洲人成伊人成综合网小说| 久久99国产精品免费| 欧美一二三在线| 午夜天堂影视香蕉久久| 欧美午夜片在线观看| 亚洲色图一区二区三区| 99久久精品费精品国产一区二区| 国产性色一区二区| 国产精品99久久不卡二区| 久久久国产一区二区三区四区小说 | 欧美日韩一区二区三区在线| 亚洲天堂免费看| 欧美三级日韩三级国产三级| 午夜精品一区二区三区电影天堂| 欧美日韩国产bt| 久久精品国产999大香线蕉|