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

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

?? tmhal.c

?? PNX系列設備驅動 PNX系列設備驅動
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*---------------------------------------------------------------------------- 
COPYRIGHT (c) 1997 by Philips Semiconductors

THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED AND COPIED IN 
ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH A LICENSE AND WITH THE 
INCLUSION OF THE THIS COPY RIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIES 
OF THIS SOFTWARE MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER
PERSON. THE OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. 

THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT ANY PRIOR NOTICE
AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY Philips Semiconductor. 

PHILIPS ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF THIS SOFTWARE
ON PLATFORMS OTHER THAN THE ONE ON WHICH THIS SOFTWARE IS FURNISHED.
----------------------------------------------------------------------------*/

//////////////////////////////////////////////////////////////////////////////
//	HISTORY
//
//	960510	TR 	Created
//	979527  TR  Ported to Windows NT with TMMan V4.0 interfaces
//	970806	Tilakraj Roy Ported to Windows NT with TMMan V5.0 interfaces
//
//  Following SCCS macros added by Nadeem:
//
//  Module name              : tmhal.c    1.12 
//
//  Last update              : 09:43:43 - 99/06/24
//////////////////////////////////////////////////////////////////////////////

	


//////////////////////////////////////////////////////////////////////////////
//				SYSTEM INCLUDE FILES
//////////////////////////////////////////////////////////////////////////////

#define WANTVXDWRAPS
#include <basedef.h>
#include <vmm.h>
#include <vxdwraps.h>
#include <vpicd.h>
#include <configmg.h>
#pragma VxD_LOCKED_CODE_SEG
#pragma	VxD_LOCKED_DATA_SEG


//////////////////////////////////////////////////////////////////////////////
//				DRIVER SPECIFIC INCLUDE FILES
//////////////////////////////////////////////////////////////////////////////

#include "tmmanlib.h"
#include "platform.h"
#include "mmio.h"

//////////////////////////////////////////////////////////////////////////////
//				MANIFEST CONSTANTS
//////////////////////////////////////////////////////////////////////////////

#define		HalFourCC		tmmanOBJECTID ( 'H', 'A', 'L', ' ' )

//////////////////////////////////////////////////////////////////////////////
//				TYPEDEFS
//////////////////////////////////////////////////////////////////////////////

typedef struct tagHalObject
{
	GenericObject		Object;
    ULONG				TMDeviceVendorID;
	ULONG				TMSubsystemID;
	ULONG				TMClassRevisionID;

    ULONG				BridgeDeviceVendorID;
    ULONG				BridgeSubsystemID;
	ULONG				BridgeClassRevisionID;

	UInt32				SelfInterrupt;	// from Target -> Host 
	UInt32				PeerInterrupt;	// Host -> Target 
	HalInterruptHandler	Handler;
	Pointer				Context;

	HalControl*			Control;
	/*	true -  target processor is running in different indianess */
	/*	false -  target processor is running in different indianess */
	Bool				Swapping;	

	UInt32				PeerMajorVersion;
	UInt32				PeerMinorVersion;

	/* BEGIN Platform Specific */

    ULONG				BusNumber;
	ULONG				DeviceNumber;
	ULONG				FunctionNumber;

    PHYSICAL_ADDRESS    MMIOHostAddrPhysical;
    PHYSICAL_ADDRESS    MMIOAddrPhysical;
    ULONG               MMIOLength;
	PUCHAR				MMIOAddrKernel;

	PHYSICAL_ADDRESS    SDRAMHostAddrPhysical;
    PHYSICAL_ADDRESS    SDRAMAddrPhysical;
    ULONG               SDRAMLength;
	PUCHAR				SDRAMAddrKernel;
	

	ULONG				MappedInterruptVector;

	BOOLEAN				FirstTimeReset;

	ULONG				InterruptObject;

	ULONG				DPCObject;

	UInt32				DSPNumber;
	ULONG				NumberOfMapRegisters;

	ULONG				SpeculativeLoadFix;

	ULONG				SDRAMMapCount;

	ULONG				PCIRegisters[constTMMANPCIRegisters];
    UInt32				Offset;
}	HalObject;


//////////////////////////////////////////////////////////////////////////////
//				PROTOTYPES
//////////////////////////////////////////////////////////////////////////////
void	halDumpObject (
 	UInt32	HalHandle );

VOID	halUnmapUserAddress ( 
	PVOID UserModeVirtualAddress );

PVOID	halMapKernelAddressToUserAddress ( 
	HANDLE PhysicalMemoryHandle, 
	PVOID KernelModeVirtualAddress, 
	ULONG Length );

BOOL	halHardwareInterruptHandler(
	ULONG VMHandle, 
	ULONG IRQHandle, 
	PVOID Context );

VOID    halDeferredInterruptHandler  ( 
	ULONG VMHandle, 
	PVOID Context,
	PVOID ClientRegister );

//////////////////////////////////////////////////////////////////////////////
//				IMPLEMENTATION
//////////////////////////////////////////////////////////////////////////////

TMStatus	halCreate ( 
	Pointer Parameters,
	UInt32* HalHandlePointer )
{
	TMStatus		Status = statusHalInitializationFail;
	HalObject*		Hal;
	ULONG			AddressSpace;
	VID				IRQDescriptors;
	ULONG			Idx;


	if ( ( Hal = objectAllocate ( 
		sizeof ( HalObject ),
		HalFourCC ) ) == NULL )
	{
	    DPF(0,("tmman:halCreate:objectAllocate:FAIL\n" ));
		Status = statusObjectAllocFail; 
		goto halCreateExit1;
	}

	Hal->SelfInterrupt = ((halParameters*)Parameters)->PCIIrq;// from Target -> Host 
	Hal->PeerInterrupt = ((halParameters*)Parameters)->TMIrq;// Host -> Target 

	Hal->Handler = Null;
	Hal->Context = Null;
	Hal->Swapping = False; // target running in same endianness

    Hal->TMDeviceVendorID = ((halParameters*)Parameters)->TMDeviceVendorID;
	Hal->TMSubsystemID = ((halParameters*)Parameters)->TMSubsystemID;
	Hal->TMClassRevisionID = ((halParameters*)Parameters)->TMClassRevisionID;

    Hal->BridgeDeviceVendorID = ((halParameters*)Parameters)->BridgeDeviceVendorID;
    Hal->BridgeSubsystemID = ((halParameters*)Parameters)->BridgeSubsystemID;
	Hal->BridgeClassRevisionID = ((halParameters*)Parameters)->BridgeClassRevisionID;


	//Hal->CPURevision = ((halParameters*)Parameters)->CPURevision;
	//Hal->BoardRevision = ((halParameters*)Parameters)->BoardRevision;

	/* BEGIN Platform Specific */
    Hal->BusNumber		= ((halParameters*)Parameters)->BusNumber;
	Hal->DeviceNumber	= ((halParameters*)Parameters)->DeviceNumber;
	Hal->FunctionNumber	= ((halParameters*)Parameters)->FunctionNumber;

	Hal->DSPNumber			= ((halParameters*)Parameters)->DSPNumber;
    Hal->MMIOAddrPhysical	= ((halParameters*)Parameters)->MMIOAddrPhysical;
	Hal->MMIOLength			= ((halParameters*)Parameters)->MMIOLength;

    Hal->SDRAMAddrPhysical	= ((halParameters*)Parameters)->SDRAMAddrPhysical;
	Hal->SDRAMLength		= ((halParameters*)Parameters)->SDRAMLength;
	Hal->Control			= ((halParameters*)Parameters)->SharedData;

	Hal->SpeculativeLoadFix	= ((halParameters*)Parameters)->SpeculativeLoadFix;

	Hal->MMIOHostAddrPhysical = Hal->MMIOAddrPhysical;
	Hal->SDRAMHostAddrPhysical = Hal->SDRAMAddrPhysical;

	// get a handle to the physical memory for mapping user sections
	Hal->MMIOAddrKernel = (PUCHAR)winMapPhysToLinear (
		Hal->MMIOHostAddrPhysical.LowPart,
		Hal->MMIOLength,
		0 );

	if (Hal->MMIOAddrKernel == (PUCHAR)0xFFFFFFFF)
	{
		DPF(0,("tmman:halCreate:winMapPhysToLinear:MMIO:FAIL\n" ));
		goto halCreateExit2;
	}

	if ( TMManGlobal->MapSDRAM )
	{
		Hal->SDRAMAddrKernel = (PUCHAR)winMapPhysToLinear (
			Hal->SDRAMHostAddrPhysical.LowPart,
			Hal->SDRAMLength,
			0 );
	
		if (Hal->SDRAMAddrKernel == (PUCHAR)0xFFFFFFFF)
		{
			DPF(0,("tmman:halCreate:winMapPhysToLinear:SDRAM:FAIL\n" ));
			goto halCreateExit2;
		}
	}

	if ( ((halParameters*)Parameters)->BridgeDeviceVendorID == 
		( ( constTMMANDECBridgeDeviceID << 16 ) | constTMMANDECBridgeVendorID ) )
    {
        Hal->Offset = ((halParameters*)Parameters)->SystemBaseAddress;
		/*
		Modify the physical addresses for SDRAM and MMIO to reflect actual
		address on the trimedia. After this point only relocation software 
		is going to use physical addresses. Host based software is going to
		use linear addresses
		*/
        Hal->MMIOAddrPhysical.LowPart =  ((halParameters*)Parameters)->MMIOBaseAddress;
        Hal->SDRAMAddrPhysical.LowPart = ((halParameters*)Parameters)->SDRAMBaseAddress;
    }
    else
	{
        Hal->Offset = 0;
	}
	// NM added code ends

	/* do the interrupt stuff */
    IRQDescriptors.VID_IRQ_Number		= ((halParameters*)Parameters)->InterruptVector;
	IRQDescriptors.VID_Options			= 	VPICD_OPT_CAN_SHARE | VPICD_OPT_SHARE_PMODE_ONLY | VPICD_OPT_REF_DATA;
	IRQDescriptors.VID_Hw_Int_Proc		= (DWORD)vxdIRQHandlerA;	
	IRQDescriptors.VID_Virt_Int_Proc	= 0;                     
	IRQDescriptors.VID_EOI_Proc			= 0;
	IRQDescriptors.VID_Mask_Change_Proc	= 0;
	IRQDescriptors.VID_IRET_Proc		= 0;
	IRQDescriptors.VID_IRET_Time_Out	= 500;
	IRQDescriptors.VID_Hw_Int_Ref		= (DWORD)Hal;

	Hal->InterruptObject =
			winVPICD_Virtualize_IRQ( &IRQDescriptors );

    if ( ! Hal->InterruptObject ) 
    {
        DPF(0,("tmman:halCreate:winVPICD_Virtualize_IRQ:FAIL\n"));
        goto  halCreateExit2;
    }

	winVPICD_Physically_Unmask( Hal->InterruptObject );

	for ( Idx = 0 ; Idx < constTMMANPCIRegisters ; Idx ++ )
	{
		Hal->PCIRegisters[Idx] = 
			((halParameters*)Parameters)->PCIRegisters[Idx];
	}

	/* do this only if we have to run in INTEL MODE */

    // assume TM1S+
    if ( ( *(PULONG)(Hal->MMIOAddrKernel + BIU_CTL) &
        (constTMManBIU_CTL_SE | constTMManBIU_CTL_BO | constTMManBIU_CTL_HE) ) == 0x0 )
    {	// virgin biu control
		ULONG	SwappedBIUControl;
		UCHAR	TempByte;

        SwappedBIUControl = 
            ( constTMManBIU_CTL_SE | constTMManBIU_CTL_BO | constTMManBIU_CTL_HE | constTMManBIU_CTL_SR );
        // do a dword swap
        TempByte = ((PUCHAR)&SwappedBIUControl)[0];
        ((PUCHAR)&SwappedBIUControl)[0] = ((PUCHAR)&SwappedBIUControl)[3];
        ((PUCHAR)&SwappedBIUControl)[3] = TempByte;
        TempByte = ((PUCHAR)&SwappedBIUControl)[1];
        ((PUCHAR)&SwappedBIUControl)[1] = ((PUCHAR)&SwappedBIUControl)[2];
        ((PUCHAR)&SwappedBIUControl)[2] = TempByte;

        *(PULONG)(Hal->MMIOAddrKernel + BIU_CTL) = SwappedBIUControl;
        Hal->FirstTimeReset = TRUE;
    }
    else
    {
        Hal->FirstTimeReset  = FALSE;
    }


    // set the cache details every time this function is called
    *(PULONG)(Hal->MMIOAddrKernel + DRAM_LIMIT) = Hal->SDRAMAddrPhysical.LowPart + Hal->SDRAMLength; 
    //this->MMIO.pCache->dwDRAMCacheableLimit = this->dwSDRAMPhys;
    *(PULONG)(Hal->MMIOAddrKernel + DRAM_CACHEABLE_LIMIT) = Hal->SDRAMAddrPhysical.LowPart + Hal->SDRAMLength;

	*(PULONG)(Hal->MMIOAddrKernel + ICLEAR) = (ULONG)(0x0);
	*(PULONG)(Hal->MMIOAddrKernel + IMASK) = (ULONG)(~0x0);


	*HalHandlePointer = (UInt32)Hal;
	halDumpObject ( (UInt32)Hal );
	return statusSuccess;
	/* SEH code */


/*
halCreateExit3:
	winVPICD_Physically_Mask ( Hal->InterruptObject );
	winVPICD_Force_Default_Behavior ( Hal->InterruptObject );
*/

halCreateExit2:
	objectFree ( Hal );

halCreateExit1:
	return Status;
}

TMStatus	halDestroy ( 
	UInt32 HalHandle )
{
	HalObject*	Hal = (HalObject*)HalHandle;


	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
        DPF(0,("tmman:halDestroy:objectValidate:FAIL\n" ));
		return statusInvalidHandle;
	}

	winVPICD_Physically_Mask ( Hal->InterruptObject );

	winVPICD_Force_Default_Behavior ( Hal->InterruptObject );


	objectFree ( Hal );

	return statusSuccess;;
}

TMStatus	halReset (
	UInt32	HalHandle )
{
	HalObject*	Hal = (HalObject*)HalHandle;

	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
        DPF(0,("tmman:halReset:objectValidate:FAIL\n" ));
		return statusInvalidHandle;
	}

	Hal->Control->HostInterruptSpinLock = 
		halAccess32 ( HalHandle, False );

	Hal->Control->TargetInterruptSpinLock = 
		halAccess32 ( HalHandle, False );

	return statusSuccess;
}

TMStatus	halSetPeerVersion (
	UInt32	HalHandle, 
	UInt32	MajorVersion,
	UInt32	MinorVersion )
{
	HalObject*	Hal = (HalObject*)HalHandle;

	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
        DPF(0,("tmman:halSetPeerVersion:objectValidate:FAIL\n" ));
		return statusInvalidHandle;
	}

	Hal->PeerMajorVersion = MajorVersion;
	Hal->PeerMinorVersion = MinorVersion;

	return statusSuccess;
}

TMStatus	halGetPeerVersion (
	UInt32	HalHandle,
	UInt32*	MajorVersionPtr,
	UInt32*	MinorVersionPtr )
{
	HalObject*	Hal = (HalObject*)HalHandle;

	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
        DPF(0,("tmman:halGetPeerVersion:objectValidate:FAIL\n" ));
		return statusInvalidHandle;
	}

	*MajorVersionPtr = Hal->PeerMajorVersion;
	*MinorVersionPtr = Hal->PeerMinorVersion;

	return statusSuccess;
}

TMStatus	halStartDSP (
	UInt32	HalHandle )
{
	HalObject*	Hal = (HalObject*)HalHandle;

	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
        DPF(0,("tmman:halStartDSP:objectValidate:FAIL\n" ));
		return statusInvalidHandle;
	}
	if ( Hal->SpeculativeLoadFix )
	{
		/* disable the PCI apperture */
		*(PULONG)(Hal->MMIOAddrKernel + DC_LOCK_CTL) = 
			/* read the value of DC_LOCK_CTL - retain all bits except bits 5 & 6 */
			( ( (*(PULONG)(Hal->MMIOAddrKernel + DC_LOCK_CTL)) & (~constTMManDC_LOCK_CTL_MASK) ) | 
			/* or it with the new values of bits 5 & 6 */
			( constTMManDC_LOCK_CTL_MASK  & ( ( constTMManDC_LOCK_CTL_PDS ) << constTMManDC_LOCK_CTL_POSITION ) ) );
	}
	else
	{
		/* enable the PCI apperture */
		*(PULONG)(Hal->MMIOAddrKernel + DC_LOCK_CTL) = 
			/* read the value of DC_LOCK_CTL - retain all bits except bits 5 & 6 */
			( ( (*(PULONG)(Hal->MMIOAddrKernel + DC_LOCK_CTL)) & (~constTMManDC_LOCK_CTL_MASK) ) | 
			/* or it with the new values of bits 5 & 6 */
			( constTMManDC_LOCK_CTL_MASK  & ( ( constTMManDC_LOCK_CTL_HEN ) << constTMManDC_LOCK_CTL_POSITION ) ) );
	}

	// clear the IMask & IClear register 
	*(PULONG)(Hal->MMIOAddrKernel + ICLEAR) = (ULONG)(0x0);
	*(PULONG)(Hal->MMIOAddrKernel + IMASK) = (ULONG)(~0x0);
	*(PULONG)(Hal->MMIOAddrKernel + BIU_CTL) &= (~constTMManBIU_CTL_SR);
	*(PULONG)(Hal->MMIOAddrKernel + BIU_CTL) |= constTMManBIU_CTL_CR;

	return statusSuccess;
}

TMStatus	halStopDSP (
	UInt32	HalHandle )
{
	HalObject*	Hal = (HalObject*)HalHandle;
	ULONG	Idx;

	if ( objectValidate ( Hal, HalFourCC ) != True )
	{
        DPF(0,("tmman:halStopDSP:objectValidate:FAIL\n" ));
		return statusInvalidHandle;
	}

	// biu reset BIU_CTL
	*(PULONG)(Hal->MMIOAddrKernel + BIU_CTL) &= (~constTMManBIU_CTL_CR);
	*(PULONG)(Hal->MMIOAddrKernel + BIU_CTL) |= constTMManBIU_CTL_SR;

	// reset the peripherals
	// audio out AO_CTL
	*(PULONG)( Hal->MMIOAddrKernel + AO_CTL ) = 0x80000000;
	*(PULONG)( Hal->MMIOAddrKernel + AO2_CTL ) = 0x80000000;

	// audio in AI_CTL
	*(PULONG)( Hal->MMIOAddrKernel +AI_CTL ) = 0x80000000;
	*(PULONG)( Hal->MMIOAddrKernel +AI2_CTL ) = 0x80000000;

	// video in VI_CTL
	*(PULONG)( Hal->MMIOAddrKernel +VI_CTL ) = 0x00080000;
	*(PULONG)( Hal->MMIOAddrKernel +VI2_CTL ) = 0x00080000;

	// video out VO_CTL
	*(PULONG)( Hal->MMIOAddrKernel +VO_CTL ) = 0x80000000;

	//ssi SSI_CTL
	*(PULONG)( Hal->MMIOAddrKernel +SSI_CTL ) = 0xc0000000;

	//SPDIF SDO_CTL
	*(PULONG)( Hal->MMIOAddrKernel +SPDO_CTL ) = 0x80000000;

	//IIC Slave IICS_CTL
	*(PULONG)( Hal->MMIOAddrKernel +IICS_CTL ) = 0x00200000;

	// disable 
	*(PULONG)( Hal->MMIOAddrKernel + IIC_CTL ) &= ~(0x00000001);
	//enable
	*(PULONG)( Hal->MMIOAddrKernel + IIC_CTL ) |= 0x00000001;

	// reset the VLD once
	*(PULONG)( Hal->MMIOAddrKernel + VLD_COMMAND ) = 0x00000401;

	// reset the HDVO
	*(PULONG)( Hal->MMIOAddrKernel + (HDVO_BASE + (0x20 << 1 )) ) = (ULONG)( 3 << 1 );

	// reset the transport demux
	*(PULONG)( Hal->MMIOAddrKernel + TP1_CTL ) = 0x80000000;
	*(PULONG)( Hal->MMIOAddrKernel + TP2_CTL ) = 0x80000000;

	//icp ICP_SR
	for ( Idx= 0 ; Idx < 10 ; Idx ++ )
	{
		// do it 10 times just to make sure ....
		if ( *( Hal->MMIOAddrKernel + ICP_SR ) & 0x01 ) 
			break;
		// changed on usman's request TRC970225
		*( Hal->MMIOAddrKernel + ICP_SR )  = 0x80;
	}

	//jtag JTAG_CTL
	*(PULONG)( Hal->MMIOAddrKernel + JTAG_DATA_IN ) = 0x00000000;
	*(PULONG)( Hal->MMIOAddrKernel + JTAG_DATA_OUT ) = 0x00000000;
	*(PULONG)( Hal->MMIOAddrKernel + JTAG_CTL ) = 0x00000004;
	return statusSuccess;

}

TMStatus	halResetDSP (
	UInt32	HalHandle )
{
	HalObject*	Hal = (HalObject*)HalHandle;
	ULONG	Idx;

	// we don't write anything into the first 3 registers
	// we write the command status at the very end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩成人一级大片| 欧美成人a视频| 国产精品久久久久一区二区三区 | 91麻豆国产福利在线观看| 色8久久人人97超碰香蕉987| 日韩欧美区一区二| 日韩av电影天堂| 欧美午夜精品免费| 一区二区三区丝袜| 色视频成人在线观看免| 亚洲日本电影在线| 91视频91自| 亚洲精品videosex极品| 色综合久久中文综合久久牛| 亚洲人成精品久久久久| 91丝袜美女网| 一区二区三区丝袜| 欧美日韩视频不卡| 日韩黄色片在线观看| 717成人午夜免费福利电影| 亚洲资源中文字幕| 欧美日韩在线精品一区二区三区激情 | 亚洲男人的天堂av| 色婷婷av一区二区三区之一色屋| 一区二区三区毛片| 欧美日韩黄色一区二区| 日韩综合在线视频| 欧美成人欧美edvon| 高清免费成人av| 亚洲日本乱码在线观看| 欧美乱妇20p| 精品一区二区三区视频 | 99久久免费精品| 一区二区三区四区不卡在线 | eeuss鲁片一区二区三区在线观看 eeuss鲁片一区二区三区在线看 | 日韩欧美一区二区久久婷婷| 亚洲国产综合在线| 欧美精品久久天天躁| 日韩精品久久久久久| xfplay精品久久| 一本大道久久a久久精二百 | 亚洲色图清纯唯美| 欧美久久久久久蜜桃| 国产麻豆精品95视频| 亚洲精品成人a在线观看| 欧美成人在线直播| 成人动漫在线一区| 天使萌一区二区三区免费观看| 精品国产一区二区精华| av亚洲精华国产精华精华| 亚洲国产一区二区a毛片| 日韩欧美国产午夜精品| 成人激情av网| 日韩中文字幕区一区有砖一区| 久久久国产精品午夜一区ai换脸| 欧美在线一区二区| 国模大尺度一区二区三区| 最新中文字幕一区二区三区| 欧美男同性恋视频网站| 国产成人福利片| 一区二区三区在线播放| 欧美一区二区成人6969| 国产一区三区三区| 亚洲国产va精品久久久不卡综合| 精品国产123| 欧美日韩视频不卡| 成人毛片视频在线观看| 一区二区三区四区蜜桃| 777久久久精品| 99riav久久精品riav| 蜜桃91丨九色丨蝌蚪91桃色| 国产精品二三区| 欧美va亚洲va在线观看蝴蝶网| 色偷偷久久一区二区三区| 激情综合网av| 亚洲国产毛片aaaaa无费看| 精品黑人一区二区三区久久| 欧美综合视频在线观看| 97精品视频在线观看自产线路二| 狠狠狠色丁香婷婷综合激情 | 一区二区三区不卡在线观看| 国产色产综合色产在线视频| 91麻豆精品国产91久久久资源速度 | 午夜欧美大尺度福利影院在线看| 国产精品美女久久久久久久网站| 欧美不卡视频一区| 欧美一区二区三区在线看| 欧美日韩一区二区三区免费看| 91美女在线看| 91麻豆国产在线观看| 91在线视频18| 不卡的av在线播放| 国产高清一区日本| 极品少妇一区二区三区精品视频| 亚洲一区二区三区激情| 亚洲另类一区二区| 中文字幕一区二区视频| 国产清纯美女被跳蛋高潮一区二区久久w | 国产盗摄女厕一区二区三区| 韩国视频一区二区| 国产成人综合视频| 国产精品亚洲视频| 久久精品国产亚洲高清剧情介绍 | 99v久久综合狠狠综合久久| 成人一级黄色片| 成年人网站91| 99久久免费视频.com| 在线欧美一区二区| 欧美性猛交一区二区三区精品| 色成年激情久久综合| av亚洲精华国产精华| 一本大道久久a久久精品综合| 在线亚洲+欧美+日本专区| 欧美三级日本三级少妇99| 91精品久久久久久久99蜜桃| 欧美一卡二卡三卡四卡| 久久伊人蜜桃av一区二区| 久久久国产精品麻豆| 亚洲欧洲av在线| 亚洲综合男人的天堂| 日韩中文字幕亚洲一区二区va在线| 轻轻草成人在线| 粉嫩av一区二区三区粉嫩| 色先锋aa成人| 欧美一级一区二区| 国产丝袜欧美中文另类| 精品99久久久久久| 亚洲国产精品精华液ab| 国产精品高潮呻吟久久| 亚洲人成在线播放网站岛国| 天堂精品中文字幕在线| 高清不卡在线观看| 精品视频在线免费观看| 久久精品欧美一区二区三区麻豆| 亚洲欧美激情一区二区| 日本aⅴ亚洲精品中文乱码| 国产经典欧美精品| 欧美日韩极品在线观看一区| 久久久久久电影| 亚洲国产精品久久久男人的天堂| 精品在线观看免费| 97se狠狠狠综合亚洲狠狠| 8v天堂国产在线一区二区| 中文字幕av不卡| 日韩激情中文字幕| 99久久精品情趣| 日韩三级视频在线观看| 精品成人佐山爱一区二区| 亚洲欧洲成人av每日更新| 五月天一区二区| 成人av免费在线观看| 91麻豆精品久久久久蜜臀| 国产精品伦理在线| 裸体歌舞表演一区二区| 91麻豆123| 国产喂奶挤奶一区二区三区| 天使萌一区二区三区免费观看| 99久久婷婷国产综合精品电影| 欧美一卡二卡三卡| 亚洲大尺度视频在线观看| 99视频一区二区三区| 精品三级av在线| 亚洲福利国产精品| 91香蕉视频黄| 中文成人综合网| 日韩av电影免费观看高清完整版在线观看 | 欧美一区二区三区色| 国产女同性恋一区二区| 日本成人在线电影网| 欧美午夜精品一区| 中文字幕一区在线| 国产精品99久久久久久宅男| 久久综合狠狠综合久久激情| 老汉av免费一区二区三区| 日韩欧美在线一区二区三区| 日本不卡在线视频| 精品国精品自拍自在线| 国产精品一卡二| 日本一区二区免费在线观看视频 | 日韩毛片高清在线播放| 97精品久久久久中文字幕| 亚洲美女视频一区| 欧美日韩免费电影| 视频一区二区三区入口| 日韩美女天天操| 国产成人亚洲综合色影视| 国产精品青草综合久久久久99| av在线不卡网| 一区二区三区蜜桃| 欧美一级片在线| 国产精品亚洲一区二区三区在线| 国产精品国产a| 欧美日韩精品免费| 国内成人自拍视频| 综合亚洲深深色噜噜狠狠网站| 欧美亚洲动漫精品| 久久精品72免费观看| 中日韩免费视频中文字幕| 日本高清无吗v一区| 日产精品久久久久久久性色|