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

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

?? otgsvc.c

?? 此為philip 1362 USB DOS下的驅動程式包, 已經共測試並內含有說明文件
?? C
字號:
/*
   //*************************************************************************
   //
   //                  P H I L I P S   P R O P R I E T A R Y
   //
   //           COPYRIGHT (c)   2000-2002 BY PHILIPS SINGAPORE.
   //                     --  ALL RIGHTS RESERVED  --
   //
   // File Name:	OTGSVC.C
   // Created:		Feb. 1, 2000
   // Modified:		Jun. 6, 2002 by wang.zhong.wei@philips.com
   // Revision:		1.0
   //
   //*************************************************************************
   // Abstract:
   //
 //*************************************************************************
*/

#include <stdio.h>
#include <string.h>
#include <bios.h>
#include <dos.h>
#include <malloc.h>

#include "BasicTyp.h"
#include "common.h"
#include "SysCnfg.h"


#include "HAL4Sys.h"
#include "HAL4ISA.h"
#include "HAL4IKit.h"
#include "HAL4D13.h"
#include "HAL4HC.h"

#include "D13_Reg.h"
#include "D13_Dcs.h"
#include "DcCommon.h"
#include "DCISR.h"

#include "PHC_Reg.h"

#include "USB100.h"
#include "USBstd.h"

#include "Hal4OTG.h"
#include "OTGSvc.h"

//*************************************************************************
//  Public/Global static data
//*************************************************************************

extern OTG_REG	OtgReg;
OTG_TCB			OtgTcb;

//*************************************************************************
//  OTG Functions
//*************************************************************************

void OTGCtrl_LocalVBus(BOOL bOn)
{
	if(1 == OtgTcb.id)
		Hal4OTG_VBUS_SessionReq(bOn);
	else
		Hal4OTG_VBUS_PowerUp(bOn);
}

void OTGCtrl_LocalPullup(BOOL bOn)
{
	Hal4OTG_PULLUP_CTRL(bOn);
}

void OTGCtrl_LocalPulldown(BOOL bOn)
{
	Hal4OTG_PULLDOWN_CTRL(bOn);
}

void OTGCtrl_LocalSOF(BOOL bOn)
{
#if 1
	if(bOn)
	{
		PHC_Control(0x00000080);	// HOST Controller in Operation Mode
	}
	else
	{
		PHC_Control(0x000000C0);    // HOST Controller in Suspend Mode
	}
#else
	Hal4OTG_SuspendOTGPort(bOn);
#endif
}

void OTGStatus_Probe(void)
{
	SLH_REG_ULONG	SlhReg;
	ULONG			IR;

	Hal4OTG_Status();
//	printf("Debug: OTG status/int reigsters are: %x / %x\n", OtgReg.StatusPort.Word, OtgReg.StatusChangePort.Word);

	OtgTcb.id = OtgReg.StatusPort.bitmap.ID;
	OtgTcb.a_vbus_vld = OtgReg.StatusPort.bitmap.a_vbus_vld;
	OtgTcb.a_sess_vld = OtgReg.StatusPort.bitmap.a_sess_vld;
	OtgTcb.b_sess_end = OtgReg.StatusPort.bitmap.b_sess_end;
	OtgTcb.b_sess_vld = OtgReg.StatusPort.bitmap.b_sess_vld;
	OtgTcb.b_se0_srp = OtgReg.StatusPort.bitmap.b_se0_srp;

	if(OtgReg.StatusChangePort.bitmap.otg_tmr_tmout)
		OtgTcb.TimeOut = 1;

	if(OtgTcb.id == 0)  	//A-device
	{
		OtgTcb.b_conn = OtgReg.StatusPort.bitmap.rmt_conn;
		if(OtgReg.StatusChangePort.bitmap.bus_resume)
			OtgTcb.b_bus_resume = 1;

		if(OtgReg.StatusChangePort.bitmap.a_srp_det)
			OtgTcb.a_srp_det = 1;
	}
	else         			//B-device
	{
		OtgTcb.a_conn = OtgReg.StatusPort.bitmap.rmt_conn;

		if(OtgReg.StatusChangePort.bitmap.bus_resume)
			OtgTcb.a_bus_resume = 1;
	}
}

void OTG_StartTimer(ULONG	uTime, USHORT uTimerID )
{
	OtgTcb.TimerID = uTimerID;
	OtgTcb.TimeOut = 0;
	Hal4OTG_StartTimer(uTime*100);	//OTG HW timer base is 0.01ms
}

void OTG_StopTimer(void)
{
	OtgTcb.TimeOut = 0;
	Hal4OTG_StopTimer();
//	OtgTcb.TimerRunning = FALSE;
}

void OTG_FSM4DeviceB()
{
	switch (OtgTcb.FSM)
	{
		// B StateMachine
		case B_IDLE:

			OTGCtrl_LocalVBus(FALSE);
			OTGCtrl_LocalPullup(FALSE);
			OTGCtrl_LocalPulldown(TRUE);
			OTGCtrl_LocalSOF(FALSE);
			Hal4OTG_HC_DC_Sel(TRUE);	//default is DC

			if(	0 == OtgTcb.id )
			{
				OTGsup_SetVarible();
				OtgTcb.err_code = OTG_ERR_PLUGA_INSERTED;
				Hal4OTG_SRP_Det_En(TRUE);	//enable SRP detection
				OtgTcb.FSM = A_IDLE;
			}
			else if ( 1 == OtgTcb.bus_req && \
					  1 == OtgTcb.b_sess_end && \
					  1 == OtgTcb.b_se0_srp && \
					  0 == OtgTcb.b_srp_done) \
			{
				OtgTcb.FSM = B_SRP_INIT;
			}
			else if ( 1 == OtgTcb.b_sess_vld )
			{
				DcS_EnableIRQ();
				OtgTcb.FSM = B_PERIPHERAL;
			}
			else if ( 1 == OtgTcb.TimeOut )
			{
				OtgTcb.TimeOut = 0;
				OtgTcb.err_code = OTG_ERR_SRP_FAIL;
			}
			break;

		case B_SRP_INIT:

			if(	0 == OtgTcb.id || 1 == OtgTcb.b_srp_done )
			{
				if(1==OtgTcb.b_srp_done )
					OTG_StartTimer(B_BUS_REQ_TIMER,B_BUS_REQ_TIMER_ID);	//Allow 5s for A-device responding SRP
				OtgTcb.FSM = B_IDLE;
			}
			break;

		case B_PERIPHERAL:

			OTGCtrl_LocalPullup(TRUE);
			OTGCtrl_LocalSOF(FALSE);
			Hal4OTG_HC_DC_Sel(TRUE);

			if( 0 == OtgTcb.b_sess_vld \
				|| 0 == OtgTcb.id ) \
			{
				DcS_DisableIRQ();
				OTGsup_SetVarible();
				OtgTcb.FSM = B_IDLE;
			}
			else if ( 1 == OtgTcb.bus_req \
					&& 1 == OtgTcb.b_hnp_en \
					&& (1 == OtgTcb.a_bus_suspend) \
			)
			{
				DcS_DisableIRQ();
				Hal4OTG_RconLse0_En(TRUE);	//to meet the 1ms tight requirement
				OTGCtrl_LocalPullup(FALSE);
				Hal4Sys_WaitinUS(100);
				Hal4OTG_HC_DC_Sel(FALSE);
				OTG_StartTimer(B_ASE0_BRST_TIMER,B_ASE0_BRST_TIMER_ID);
				OtgTcb.FSM = B_WAIT_ACON;
			}
			break;

		case B_WAIT_ACON:

			OTGCtrl_LocalPullup(FALSE);
			OTGCtrl_LocalSOF(FALSE);
			Hal4OTG_HC_DC_Sel(FALSE);

			if(	0 == OtgTcb.b_sess_vld || 0 == OtgTcb.id )
			{
				OTG_StopTimer();
				Hal4OTG_RconLse0_En(FALSE);
				OTGsup_SetVarible();
				OtgTcb.FSM = B_IDLE;
			}
			else if( 1 == OtgTcb.a_conn )
			{
				OTG_StopTimer();
				Hal4OTG_RconLse0_En(FALSE);
				OtgTcb.FSM = B_HOST;
			}
			else if( 1 == OtgTcb.TimeOut || 1 == OtgTcb.a_bus_resume/* || 1 == OtgTcb.a_bus_reset*/ )
			{
				if( 1 == OtgTcb.TimeOut)
				{
					OtgTcb.TimeOut = 0;
					OtgTcb.a_bus_reset = 1;	//SE0 >3.125ms should be taken as bus reset
					OtgTcb.a_alt_hnp_support = 0;
					OtgTcb.a_hnp_support = 0;
					OtgTcb.b_hnp_en = 0;
					OtgTcb.err_code = OTG_ERR_B_ASE0_BRST_TMOUT;
				}
				else
				{
					OtgTcb.a_bus_resume = 0;
				}
				Hal4OTG_RconLse0_En(FALSE);
				DcS_EnableIRQ();
				OtgTcb.FSM = B_PERIPHERAL;
			}
			break;

		case B_HOST:

			OTGCtrl_LocalPullup(FALSE);
			OTGCtrl_LocalSOF(TRUE);
			Hal4OTG_HC_DC_Sel(FALSE);

			if(	0 == OtgTcb.b_sess_vld || 0 == OtgTcb.id )
			{
				OTGsup_SetVarible();
				OtgTcb.FSM = B_IDLE;
			}
			else if( (0 == OtgTcb.a_conn || 0 == OtgTcb.bus_req))
			{
				DcS_EnableIRQ();
				OtgTcb.FSM = B_PERIPHERAL;
			}
			break;

		default:
			break;
	}
}

void OTG_FSM4DeviceA()
{

	USHORT wTemp;

	switch (OtgTcb.FSM)
	{
		// A_device statemachine
		case A_IDLE:

			OTGCtrl_LocalVBus(FALSE);
			OTGCtrl_LocalPullup(FALSE);
			OTGCtrl_LocalPulldown(TRUE);
			OTGCtrl_LocalSOF(FALSE);
			Hal4OTG_HC_DC_Sel(FALSE);     //default HC

			if( 1 == OtgTcb.id )
			{
				Hal4OTG_SRP_Det_En(FALSE);  //Disable SRP detection
				OTGsup_SetVarible();
				OtgTcb.err_code = OTG_ERR_PLUGA_REMOVED;
				OtgTcb.FSM = B_IDLE;
			}
			else if( (1 == OtgTcb.bus_req || 1 == OtgTcb.a_srp_det) \
					&& 0 == OtgTcb.bus_drop )
			{
				Hal4OTG_SRP_Det_En(FALSE);
				if(1 == OtgTcb.a_srp_det)
				{
					OtgTcb.a_srp_det = 0;
					Hal4Sys_WaitinMS(100);	//don't respond to SRP too fast
				}
				OTG_StartTimer(A_WAIT_VRISE_TIMER,A_WAIT_VRISE_TIMER_ID);
				OtgTcb.FSM = A_WAIT_VRISE;
			}
			break;

		case A_WAIT_VRISE:

			OTGCtrl_LocalVBus(TRUE);
			OTGCtrl_LocalPullup(FALSE);
			OTGCtrl_LocalSOF(FALSE);
			Hal4OTG_HC_DC_Sel(FALSE);

			if ( (1 == OtgTcb.a_vbus_vld && 1 == OtgTcb.b_sess_vld) \
				|| (1 == OtgTcb.TimeOut && A_WAIT_VRISE_TIMER_ID == OtgTcb.TimerID) \
			)
			{
				OtgTcb.TimeOut = 0;
				Hal4Sys_WaitinMS(3);
				OTG_StartTimer(A_WAIT_BCON_TIMER,A_WAIT_BCON_TIMER_ID);
				OtgTcb.FSM = A_WAIT_BCON;
			}
			break;

		case A_WAIT_BCON:

			OTGCtrl_LocalVBus(TRUE);
			OTGCtrl_LocalPullup(FALSE);
			OTGCtrl_LocalSOF(FALSE);
			Hal4OTG_HC_DC_Sel(FALSE);

			if( 1 == OtgTcb.id || \
				1 == OtgTcb.bus_drop || \
				(1 == OtgTcb.TimeOut && A_WAIT_BCON_TIMER_ID == OtgTcb.TimerID))
			{
				if ( 1 == OtgTcb.TimeOut)
				{
					OtgTcb.TimeOut = 0;
					OtgTcb.err_code = OTG_ERR_A_WAIT_BCON_TMOUT;
				}
				OtgTcb.bus_req = 0;   //this bit should be cleared by application
				OTG_StopTimer();
				OtgTcb.FSM = A_WAIT_VFALL;
			}
			else if ( 0 == OtgTcb.a_vbus_vld )
			{
				OtgTcb.FSM = A_VBUS_ERR;
				OtgTcb.err_code = OTG_ERR_A_OVERCURRENT;
			}
			else if (1 == OtgTcb.b_conn)
			{
				if(A_BCON_LDBC_TIMER_ID != OtgTcb.TimerID)
					OTG_StartTimer(A_BCON_LDBC_TIMER,A_BCON_LDBC_TIMER_ID);
				else if (1 == OtgTcb.TimeOut)
				{
					OtgTcb.TimeOut = 0;
					OtgTcb.a_host_done = 0;	//A_HOST starts to use the bus
					OtgTcb.FSM = A_HOST;
				}
			}
			break;

		case A_HOST:

			OTGCtrl_LocalVBus(TRUE);
			OTGCtrl_LocalPullup(FALSE);
			OTGCtrl_LocalSOF(TRUE);
			Hal4OTG_HC_DC_Sel(FALSE);

			if(1==OtgTcb.id || 1==OtgTcb.bus_drop || 0==OtgTcb.b_conn)
			{
				OTG_StartTimer(A_WAIT_BCON_TIMER,A_WAIT_BCON_TIMER_ID);
				OtgTcb.FSM = A_WAIT_BCON;
			}
			else if(0==OtgTcb.a_vbus_vld)
			{
				OtgTcb.FSM = A_VBUS_ERR;
				OtgTcb.err_code = OTG_ERR_A_OVERCURRENT;
			}
			else if( 0==OtgTcb.bus_req && 1==OtgTcb.a_host_done)
			{
				if(1 == OtgTcb.a_set_b_hnp_en)
					Hal4OTG_RdisLcon_En(TRUE); 	// if B-device disconnected, then A-device assert pull-up immediately
				OTG_StartTimer(A_AIDL_BDIS_TIMER,A_AIDL_BDIS_TIMER_ID);
				OtgTcb.FSM = A_SUSPEND;
			}
			break;

		case A_SUSPEND:

			OTGCtrl_LocalVBus(TRUE);
			OTGCtrl_LocalPullup(FALSE);
			OTGCtrl_LocalSOF(FALSE);
			Hal4OTG_HC_DC_Sel(FALSE);

			if(	1 == OtgTcb.id || 1 == OtgTcb.bus_drop || 1 == OtgTcb.TimeOut)
			{
				if ( 1 == OtgTcb.TimeOut)
				{
					OtgTcb.TimeOut = 0;
					OtgTcb.err_code = OTG_ERR_A_AIDL_BDIS_TMOUT;
				}
				OTG_StopTimer();
				Hal4OTG_RdisLcon_En(FALSE);
				OtgTcb.FSM = A_WAIT_VFALL;
			}
			else if (0 == OtgTcb.a_vbus_vld )
			{
				OtgTcb.FSM = A_VBUS_ERR;
				OtgTcb.err_code = OTG_ERR_A_OVERCURRENT;
			}
			else if ( 0 == OtgTcb.b_conn && 1 == OtgTcb.a_set_b_hnp_en)
			{
				OTGCtrl_LocalPullup(TRUE);
				Hal4OTG_RdisLcon_En(FALSE);
				DcS_EnableIRQ();
				OtgTcb.FSM = A_PERIPHERAL;

			}
			else if ( 0 == OtgTcb.b_conn && 0 == OtgTcb.a_set_b_hnp_en)
			{
				Hal4OTG_RdisLcon_En(FALSE);
				OTG_StartTimer(A_WAIT_BCON_TIMER,A_WAIT_BCON_TIMER_ID);
				OtgTcb.FSM = A_WAIT_BCON;
			}
			else if(1 == OtgTcb.bus_req \
					|| 1 == OtgTcb.b_bus_resume)
			{
				Hal4OTG_RdisLcon_En(FALSE);
				OtgTcb.FSM = A_HOST;
			}
			break;

		case A_PERIPHERAL:

			OTGCtrl_LocalVBus(TRUE);
			OTGCtrl_LocalPullup(TRUE);
			OTGCtrl_LocalSOF(FALSE);
			Hal4Sys_WaitinUS(10);
			Hal4OTG_HC_DC_Sel(TRUE);

			if(
				1 == OtgTcb.id || \
				1 == OtgTcb.bus_drop )

			{
				OtgTcb.FSM = A_WAIT_VFALL;
			}
			else if (0 == OtgTcb.a_vbus_vld )
			{
				OtgTcb.FSM = A_VBUS_ERR;
				OtgTcb.err_code = OTG_ERR_A_OVERCURRENT;
			}
			else if (1 == OtgTcb.b_bus_suspend)
			{
				OtgTcb.b_bus_suspend = 0;
				DcS_DisableIRQ();
				OTG_StartTimer(A_WAIT_BCON_TIMER,A_WAIT_BCON_TIMER_ID);
				OtgTcb.FSM = A_WAIT_BCON;
			}
			break;

		case A_WAIT_VFALL:

			OTGCtrl_LocalVBus(FALSE);
			OTGCtrl_LocalPullup(FALSE);
			OTGCtrl_LocalSOF(FALSE);

			Hal4OTG_HC_DC_Sel(FALSE);

			if(
				1 == OtgTcb.id || \
				1 == OtgTcb.bus_req || \
				(0 == OtgTcb.a_sess_vld && 0 == OtgTcb.b_conn))
			{
				OTGsup_SetVarible();
				Hal4OTG_SRP_Det_En(TRUE);	//enable SRP detection
				OtgTcb.FSM = A_IDLE;
			}
			break;

		case A_VBUS_ERR:

			OTGCtrl_LocalVBus(FALSE);
			OTGCtrl_LocalPullup(FALSE);
			OTGCtrl_LocalSOF(FALSE);

			Hal4OTG_HC_DC_Sel(FALSE);

//			if(1 == OtgTcb.a_clr_err)
			if(1 == OtgTcb.id || 1 == OtgTcb.bus_drop)
			{
//				OtgTcb.a_clr_err = 0;
				OtgTcb.FSM = A_WAIT_VFALL;
			}
			break;

		default:
			break;
	}

}

void OTG_FSM(void)
{
	if(OtgTcb.FSM >= A_IDLE)	//device is in A state machine
	{
		OTG_FSM4DeviceA();
	}
	else		//device is in B state machine
	{
		OTG_FSM4DeviceB();
	}
}

void OTG_HW_emulator(void)
{
	// Input of FSM
	OTGStatus_Probe();

	// FSM
	OTG_FSM();

	// Timer Routine
/*	if( 1 == OtgTcb.TimerRunning)
	{
		if(0 == OtgTcb.TimerTick)
		{
			OtgTcb.TimerRunning = 0;
			OtgTcb.TimeOut = 1;
		}
		else
		{
			OtgTcb.TimerTick --;
		}
	}*/
}

void OTGsup_SetVarible(void)
{

	RaiseIRQL();

//	OtgTcb.UsageBased = 1;

	OtgTcb.a_bus_resume = 0;
	OtgTcb.a_bus_suspend = 0;
	OtgTcb.a_bus_reset = 0;
	OtgTcb.b_bus_resume = 0;
	OtgTcb.b_bus_suspend = 0;

	OtgTcb.b_hnp_en = 0;
	OtgTcb.a_set_b_hnp_en = 0;
	OtgTcb.a_hnp_support = 0;
	OtgTcb.a_alt_hnp_support = 0;

	OtgTcb.TimerRunning = 0;
	OtgTcb.TimeOut = 0;
	OtgTcb.TimerTick = 0;
	OtgTcb.TimerID = 0;

	//these variables should be initialized by application
//	OtgTcb.bus_req = 0;
//	OtgTcb.bus_drop = 0;
//	OtgTcb.a_suspend_req = 0;
	OtgTcb.err_code = 0;
	OtgTcb.VendorID = 0;
	OtgTcb.ProductID = 0;
	OtgTcb.DevAddr = 0;

	LowerIRQL();
}

void OTG_Init(void )
{
	OTGsup_SetVarible();

	OTGStatus_Probe();

	//Select on-chip charge-pump or external 5v for OTG VBUS.
	//on-chip charge-pump supports up to 8mA, on-board 5v supports up to 500mA
	Hal4OTG_Sel_Vbus();

	switch(OtgTcb.id)
	{
		case 0:
			OtgTcb.FSM = A_IDLE;
			Hal4OTG_HC_DC_Sel(FALSE);	//default HC
			Hal4OTG_SRP_Det_En(TRUE);	//enable SRP detection
			break;

		case 1:
			OtgTcb.FSM = B_IDLE;
			Hal4OTG_HC_DC_Sel(TRUE);	//default DC
			break;

		default:
			break;
	}
}

void OTG_Acquire(void)
{
	OTG_Init();
	Hal4ISA_AcquireIRQ4Timer();
}

void OTG_Release(void)
{
	Hal4ISA_ReleaseIRQ4Timer();
}

BOOLEAN OTGSup_ADevGiveupMastership(void)
{

	if( TRUE == UsbStd_SetFeature(
		OtgTcb.DevAddr, //DevAddr,
		0,//Speed,
		8,//RmtDev.PktSize,

		0,//byRecipient,
		USB_FEATURE_B_HNP_ENABLE,//wFeatureSelector,
		0//wIndex
		)
	)
	{
		RaiseIRQL();
		OtgTcb.a_set_b_hnp_en = 1;
		LowerIRQL();

		return TRUE;
	}
	else
	{
		RaiseIRQL();
		OtgTcb.a_set_b_hnp_en = 0;

		LowerIRQL();

		return FALSE;
	}
}

void OTG_do_srp(void)
{

	// Data line Pulsing
	OTGCtrl_LocalPullup(TRUE);
	Hal4Sys_WaitinMS(B_DATA_PLS_TIMER);	// DATA LINE HIGH FOR 5-10MS
	OTGCtrl_LocalPullup(FALSE);

	// VBUS Pulsing
	OTGCtrl_LocalVBus(TRUE);
	Hal4Sys_WaitinMS(B_VBUS_PLS_TIMER);
	OTGCtrl_LocalVBus(FALSE);

	// VBUS discharge
	Hal4OTG_VBUS_DisChrg(TRUE);
	Hal4Sys_WaitinMS(VBUS_DISCHRG_TIMER);
	Hal4OTG_VBUS_DisChrg(FALSE);
	OtgTcb.b_srp_done = 1;

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产在线日韩欧美| 3atv在线一区二区三区| 欧美蜜桃一区二区三区| 久久久蜜臀国产一区二区| 亚洲成人免费观看| 成人av在线一区二区| 91精品国产福利在线观看 | av一区二区久久| 宅男噜噜噜66一区二区66| 国产精品美女久久久久久2018| 亚洲一区二区三区四区五区黄| 成人综合婷婷国产精品久久| 日韩精品一区二区三区视频| 亚洲一卡二卡三卡四卡无卡久久| 99久久99久久久精品齐齐| 久久免费视频色| 麻豆freexxxx性91精品| 欧美午夜电影网| 亚洲日本成人在线观看| 国产1区2区3区精品美女| 精品免费日韩av| 久久精品72免费观看| 3d成人h动漫网站入口| 午夜精品一区在线观看| 欧美日韩在线播放三区四区| 亚洲欧洲日韩在线| 丁香六月综合激情| 国产精品美女久久久久久| 国产高清不卡二三区| 久久精子c满五个校花| 国产一区二区日韩精品| 26uuu亚洲综合色| 国产一区二区精品久久99| 欧美va亚洲va在线观看蝴蝶网| 麻豆精品国产91久久久久久| 欧美一区二区精美| 黑人巨大精品欧美一区| 久久久99免费| www.成人网.com| 亚洲欧美日本在线| 在线亚洲一区二区| 亚洲成人av一区| 日韩欧美国产电影| 韩国中文字幕2020精品| 国产欧美日韩中文久久| 成人av在线网站| 一区二区三区在线免费| 欧美另类一区二区三区| 激情小说亚洲一区| 亚洲欧洲日产国产综合网| 91黄色激情网站| 美国十次了思思久久精品导航| 久久综合九色综合久久久精品综合| 国产精品综合av一区二区国产馆| 国产精品久久久久久久久晋中| 一本大道久久a久久综合婷婷| 午夜视频在线观看一区| 337p粉嫩大胆色噜噜噜噜亚洲 | 中文字幕不卡在线播放| 91麻豆产精品久久久久久| 午夜国产精品影院在线观看| 久久亚洲精品国产精品紫薇| a美女胸又www黄视频久久| 午夜精品国产更新| 欧美激情在线看| 色欧美片视频在线观看在线视频| 轻轻草成人在线| 国产精品欧美久久久久无广告 | 久久综合色之久久综合| 91麻豆蜜桃一区二区三区| 日韩vs国产vs欧美| 亚洲视频一区二区免费在线观看| 在线成人av网站| 99精品桃花视频在线观看| 日日噜噜夜夜狠狠视频欧美人| 日本一区二区三区dvd视频在线| 精品视频一区 二区 三区| 国产成人精品亚洲午夜麻豆| 午夜视频在线观看一区二区三区| 欧美国产一区在线| 日韩欧美一区在线观看| 91在线国内视频| 国产一级精品在线| 五月综合激情日本mⅴ| 亚洲欧美日韩小说| 国产精品午夜久久| 欧美一区日本一区韩国一区| 色综合色综合色综合| 国产精品一区二区久久不卡| 丝袜国产日韩另类美女| 夜夜揉揉日日人人青青一国产精品| 精品乱人伦小说| 91精品国产黑色紧身裤美女| 欧美综合一区二区| 92国产精品观看| 懂色av一区二区三区免费观看| 美女精品一区二区| 午夜视频在线观看一区| 亚洲一区在线看| 一区二区三区在线观看网站| 亚洲欧洲99久久| 国产日韩欧美一区二区三区乱码| 日韩欧美中文字幕公布| 欧美丰满少妇xxxxx高潮对白| 色猫猫国产区一区二在线视频| av激情成人网| 9l国产精品久久久久麻豆| 粉嫩av一区二区三区粉嫩| 国产91清纯白嫩初高中在线观看| 美女爽到高潮91| 久久精品国产精品亚洲红杏| 日韩精品亚洲专区| 日本欧美一区二区| 麻豆精品在线播放| 精品在线播放免费| 国产麻豆成人传媒免费观看| 国产精品中文字幕欧美| 国产精品99精品久久免费| 国产激情一区二区三区| 粉嫩aⅴ一区二区三区四区五区 | 国产麻豆精品在线| 国产成人av电影在线| 国产福利91精品| 成人免费毛片app| 成人高清免费在线播放| 成人免费看片app下载| 91老师片黄在线观看| 91成人网在线| 日韩一区和二区| 久久久久久久久免费| 中文字幕中文字幕在线一区 | 欧美一区二区三区小说| 日韩精品一区二区三区老鸭窝| 精品1区2区在线观看| 中文字幕精品一区二区三区精品 | 青青草97国产精品免费观看 | 国产精品看片你懂得| 亚洲猫色日本管| 丝袜美腿亚洲一区| 国产精品乡下勾搭老头1| 91网址在线看| 日韩写真欧美这视频| 欧美激情综合五月色丁香小说| 亚洲女同女同女同女同女同69| 亚洲第一二三四区| 黄网站免费久久| 91老师片黄在线观看| 日韩精品影音先锋| 国产精品第五页| 蜜桃av噜噜一区| 91天堂素人约啪| 91麻豆精品国产91| 国产精品国产三级国产aⅴ无密码| 亚洲国产一区二区在线播放| 国产一区二区精品在线观看| 欧美做爰猛烈大尺度电影无法无天| 日韩三级在线观看| 艳妇臀荡乳欲伦亚洲一区| 激情av综合网| 欧美日本不卡视频| 国产精品欧美久久久久一区二区| 青青草成人在线观看| 91尤物视频在线观看| 久久久国产午夜精品| 午夜精品久久久| 97se亚洲国产综合自在线观| 久久综合久久综合久久综合| 亚洲第一福利一区| 91网站最新网址| 国产欧美一二三区| 精品制服美女久久| 欧美精品免费视频| 亚洲精品中文在线| 丁香另类激情小说| 久久久久97国产精华液好用吗| 婷婷久久综合九色国产成人 | 亚洲精品成a人| 国产成人精品一区二| 一级中文字幕一区二区| 精品亚洲aⅴ乱码一区二区三区| 欧美伊人久久久久久久久影院| 亚洲国产精品二十页| 国产一区日韩二区欧美三区| 欧美一区二区黄| 免费成人在线观看视频| 7777精品伊人久久久大香线蕉的| 依依成人精品视频| av网站一区二区三区| 国产精品国产自产拍高清av王其 | 欧美日韩在线直播| 亚洲精品一卡二卡| 色噜噜偷拍精品综合在线| 亚洲人精品一区| 一本色道**综合亚洲精品蜜桃冫| 国产精品久久久久久亚洲伦 | 国产黄人亚洲片| 久久青草欧美一区二区三区| 国产乱码精品一区二区三区五月婷| 精品1区2区在线观看| 国产黄色精品网站|