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

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

?? tmhal.c

?? PNX系列設備驅動 PNX系列設備驅動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*---------------------------------------------------------------------------- 
COPYRIGHT (c) 1998 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	Tilakraj Roy	Created
//	970527  Tilakraj Roy	Ported to Windows NT with TMMan V4.0 interfaces
//	970806	Tilakraj Roy	Ported to Windows NT with TMMan V5.0 interfaces
//
//	010828	Wim de Haan		Changed code to remove compiler warnings:
//							line 937	'!=' : signed/unsigned mismatch
//							line 669	'halResetDSP' : not all control paths
//										 return a value
//							Moved "HalObject" struct typedef to "platform.h"
//							for because it is needed by "osal.c"
//////////////////////////////////////////////////////////////////////////////


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

#include "wdm.h"

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

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

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

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

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

#define		PCI_CONFIG_ADDR_PORT		((PULONG)0xcf8)
#define		PCI_CONFIG_DATA_PORT		((PULONG)0xcfc)

typedef		struct _PCI_CONFIG_ADDRESS
{
	union
	{
		struct{
			ULONG	Zeros:2;
			ULONG	RegisterNumber:6;
			ULONG	FunctionNumber:3;
			ULONG	DeviceNumber:5;
			ULONG	BusNumber:8;
			ULONG	Reserved:7;
			ULONG	Enable:1;
		}Bits;
		ULONG	Long;
	}u;
}	PCI_CONFIG_ADDRESS, *PPCI_CONFIG_ADDRESS;

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

VOID	halUnmapUserAddress ( 
	PVOID Mdl );

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

BOOLEAN	halHardwareInterruptHandler (
    PKINTERRUPT Interrupt,
    PVOID ServiceContext  );

VOID	halDeferredInterruptHandler (
	PKDPC Dpc,
	PDEVICE_OBJECT DeviceObject,
	PIRP Irp,
	PVOID Context );


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

TMStatus	halCreate ( 
	Pointer Parameters,
	UInt32* HalHandlePointer )
{
	TMStatus		Status = statusHalInitializationFail;
	NTSTATUS		NTStatus;
	HalObject*		Hal;
	//ULONG			AddressSpace;
	ULONG			Idx;
	DEVICE_DESCRIPTION	DeviceDescription;

	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;

	/* BEGIN Platform Specific */
    Hal->BusNumber	= ((halParameters*)Parameters)->BusNumber;
	Hal->SlotNumber			= ((halParameters*)Parameters)->SlotNumber;
	// global device & driver object
	Hal->DeviceObject	= ((halParameters*)Parameters)->DeviceObject;
	Hal->DriverObject	= ((halParameters*)Parameters)->DriverObject;

	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->PhysicalDeviceObject	= ((halParameters*)Parameters)->PhysicalDeviceObject;
	Hal->FunctionalDeviceObject		= ((halParameters*)Parameters)->FunctionalDeviceObject;
	Hal->StackDeviceObject			= ((halParameters*)Parameters)->StackDeviceObject;

	// performance counters
	Hal->DPCRequested		= 0;
	Hal->DPCLatency			= 0;
	Hal->DPCDuration		= 0;
	Hal->LastInterrupt		= 0;
	Hal->InterruptInterval	= 0;

	for ( Idx = 0 ; Idx < constTMMANPCIRegisters ; Idx ++ )
	{
		Hal->PCIRegisters[Idx] = 
			((halParameters*)Parameters)->PCIRegisters[Idx];
	}
/*
	// Map MMIO address space
    AddressSpace = 0x0; // request memory (0x1 for io space)

	if ( ! HalTranslateBusAddress (
        PCIBus,
        Hal->BusNumber,         
        Hal->MMIOAddrPhysical,	
        &AddressSpace,			
        &Hal->MMIOAddrTranslated ) )
	{
        DPF(0,("tmman:halCreate:HalTranslateBusAddress:MMIO:FAIL\n" ));
		goto	halCreateExit2;
	}
*/

	if ( ( Hal->MMIOAddrKernel = MmMapIoSpace(
		Hal->MMIOAddrPhysical, 
		Hal->MMIOLength,
		FALSE ) ) == NULL )
	{
		DPF(0,("tmman:halCreate:MmMapIoSpace:MMIO:Phys[0x%x:%x]:Len[0x%x]:FAIL\n",
			Hal->MMIOAddrPhysical.HighPart, Hal->MMIOAddrPhysical.LowPart, 
			Hal->MMIOLength ));
		goto	halCreateExit2;
	}

/*
    // Now map in the SDRAM Window
    AddressSpace = 0x0; // request memory (0x1 for io space)
    if ( ! HalTranslateBusAddress(
		PCIBus,
		Hal->BusNumber,              
		Hal->SDRAMAddrPhysical,
		&AddressSpace,        
		&Hal->SDRAMAddrTranslated ) )
	{
	    DPF(0,("tmman:halCreate:HalTranslateBusAddress:SDRAM:FAIL\n" ));
		goto	halCreateExit3;
	}
*/

    // Put error handling in here, in case it doesn't work.  Note that the translated address is the same as the one
    // read directly from the configuration register, so this isn't a complete test yet.
	if ( ( Hal->SDRAMAddrKernel = MmMapIoSpace(
		Hal->SDRAMAddrPhysical,
		Hal->SDRAMLength,
		FALSE ) ) == NULL )
	{
		DPF(0,("tmman:halCreate:MmMapIoSpace:SDRAM:Phys[0x%x:%x]:Len[0x%x]:FAIL\n",
			Hal->SDRAMAddrPhysical.HighPart, Hal->SDRAMAddrPhysical.LowPart, 
			Hal->SDRAMLength ));

		goto	halCreateExit3;
	}


	if ( ((halParameters*)Parameters)->BridgeDeviceVendorID == 
		( ( constTMMANDECBridgeDeviceID << 16 ) | constTMMANDECBridgeVendorID ) )
    {
 		/*
		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->MMIOAddrPhysicalBridge = Hal->MMIOAddrPhysical;
		Hal->SDRAMAddrPhysicalBridge = Hal->SDRAMAddrPhysical;
		
		Hal->Offset = ((halParameters*)Parameters)->SystemBaseAddress;

        Hal->MMIOAddrPhysical.LowPart =  ((halParameters*)Parameters)->MMIOBaseAddress;
        Hal->SDRAMAddrPhysical.LowPart = ((halParameters*)Parameters)->SDRAMBaseAddress;
    }
    else
	{
        Hal->Offset = 0;
	}


	/* do the interrupt stuff */


    // Irql needed for HalGetInterruptVector.  
	//Irql is type KIRQL, which is UCHAR; InterruptLevel is ULONG.
	// According to ddk, this must be set on entry to HalGetInterruptVector.
	/*
    Hal->Irql = (KIRQL) ((halParameters*)Parameters)->InterruptLevel; 

    Hal->MappedInterruptVector = HalGetInterruptVector (
         PCIBus, // IN INTERFACE_TYPE  InterfaceType,
         ((halParameters*)Parameters)->BusNumber, // IN ULONG  BusNumber,
         ((halParameters*)Parameters)->InterruptLevel, // IN ULONG  BusInterruptLevel,
         ((halParameters*)Parameters)->InterruptVector, // IN ULONG  BusInterruptVector,
         &Hal->Irql, // OUT PKIRQL  Irql,
         &Hal->ProcessorEnableMask // OUT PKAFFINITY  Affinity
     );
	*/

    NTStatus = IoConnectInterrupt(
         &Hal->InterruptObject, // OUT PKINTERRUPT  *InterruptObject,
         halHardwareInterruptHandler, // IN PKSERVICE_ROUTINE  ServiceRoutine,
         Hal, // IN PVOID  ServiceContext,
         NULL, // IN PKSPIN_LOCK  SpinLock,            /* optional */
         ((halParameters*)Parameters)->InterruptVector, // IN ULONG  Vector,
         ((halParameters*)Parameters)->InterruptLevel, // IN KIRQL  Irql,
         ((halParameters*)Parameters)->InterruptLevel, // IN KIRQL  SynchronizeIrql,
         ((halParameters*)Parameters)->InterruptMode, // IN KINTERRUPT_MODE  InterruptMode,
         TRUE, // IN BOOLEAN  ShareVector, no interrupt sharing
         ((halParameters*)Parameters)->InterruptAffinity, // IN KAFFINITY  ProcessorEnableMask,
         FALSE // IN BOOLEAN  FloatingSave
		 );

    if (!NT_SUCCESS ( NTStatus)) 
    {
        DPF(0,("tmman:halCreate:IoConnectInterrupt:FAIL[%x]\n", NTStatus ));
        goto  halCreateExit4;
    }


    // register the DPC routine for the ISR
    IoInitializeDpcRequest ( Hal->FunctionalDeviceObject, halDeferredInterruptHandler );

	// allocate the adapter for bus master DMA

    DeviceDescription.Version			= DEVICE_DESCRIPTION_VERSION1;
    DeviceDescription.Master			= TRUE;
    DeviceDescription.ScatterGather	= TRUE;;
    DeviceDescription.DemandMode		= FALSE;
    DeviceDescription.AutoInitialize	=  FALSE;
    DeviceDescription.Dma32BitAddresses	= TRUE;
    DeviceDescription.IgnoreCount		= TRUE;
    DeviceDescription.Reserved1			= FALSE;
    //DeviceDescription.BusNumber		= Hal->BusNumber;
	DeviceDescription.InterfaceType		= PCIBus;
    DeviceDescription.DmaWidth			= Width32Bits;
    DeviceDescription.DmaSpeed			= TypeC;
    DeviceDescription.MaximumLength		= 8 * 1024 * 1024;

	//DeviceDescription->DmaChannel;
    //DeviceDescription->DmaPort;


	Hal->AdapterObject = IoGetDmaAdapter (
		Hal->PhysicalDeviceObject,
		&DeviceDescription,
		&Hal->NumberOfMapRegisters );

	if ( Hal->AdapterObject == NULL )
    {
        DPF(0,("tmman:halCreate:HalGetAdapter:FAIL\n" ));
        goto  halCreateExit5;
    }
		

	/* 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);

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



halCreateExit5:
	IoDisconnectInterrupt ( Hal->InterruptObject );

halCreateExit4:
	MmUnmapIoSpace ( Hal->SDRAMAddrKernel, Hal->SDRAMLength );

halCreateExit3:
	MmUnmapIoSpace ( Hal->MMIOAddrKernel, Hal->MMIOLength );

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;
	}

	IoDisconnectInterrupt ( Hal->InterruptObject );


	MmUnmapIoSpace ( Hal->SDRAMAddrKernel, Hal->SDRAMLength );

	MmUnmapIoSpace ( Hal->MMIOAddrKernel, Hal->MMIOLength );

	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;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产午夜久久久久| 麻豆精品久久久| 精品在线观看视频| 在线免费观看成人短视频| 日韩欧美一区二区三区在线| 欧美国产视频在线| 久久爱www久久做| 欧美剧情片在线观看| 国产精品久久国产精麻豆99网站 | 欧美经典一区二区| 日韩国产在线一| 在线一区二区三区| 国产精品麻豆欧美日韩ww| 极品少妇xxxx精品少妇| 欧美精品日韩精品| 亚洲综合一区二区精品导航| 丁香亚洲综合激情啪啪综合| 欧美精品一区二区高清在线观看| 亚洲国产精品视频| 日本韩国精品在线| 亚洲综合一区二区精品导航| 9人人澡人人爽人人精品| 欧美激情一区三区| 国产传媒一区在线| 国产夜色精品一区二区av| 激情小说亚洲一区| 26uuu亚洲婷婷狠狠天堂| 色综合天天综合| 中文字幕在线观看不卡视频| www.亚洲人| 亚洲精品中文在线影院| 91色porny| 一二三区精品视频| 欧美丰满高潮xxxx喷水动漫| 亚洲观看高清完整版在线观看 | 成人污污视频在线观看| 国产偷国产偷亚洲高清人白洁| 国内精品写真在线观看| 久久亚洲影视婷婷| 成人精品gif动图一区| 亚洲国产精品二十页| av中文字幕在线不卡| 国产精品久久久久久久久果冻传媒| 国v精品久久久网| 亚洲欧洲日韩女同| 欧美日韩美女一区二区| 麻豆一区二区三| 中文字幕欧美日韩一区| 99国产一区二区三精品乱码| 亚洲一区二区中文在线| 一区二区高清免费观看影视大全| 在线看日本不卡| 免费观看在线色综合| 精品少妇一区二区三区视频免付费| 国产在线国偷精品免费看| 国产精品毛片高清在线完整版| 91视视频在线观看入口直接观看www | 亚洲最色的网站| 69堂精品视频| 国产成人啪午夜精品网站男同| 亚洲欧洲av色图| 欧美一区在线视频| 懂色av一区二区三区免费看| 亚洲综合偷拍欧美一区色| 欧美一区二区三区在线观看| 成人免费视频视频在线观看免费| 一区二区三区四区亚洲| 精品国产一区二区三区四区四 | 久久国产三级精品| 国产精品传媒入口麻豆| 欧美一区二区三区视频免费播放| 国产精品原创巨作av| 亚洲成人av资源| 亚洲国产精品黑人久久久| 欧美日韩国产成人在线免费| 国产剧情一区在线| 三级影片在线观看欧美日韩一区二区 | 精品一区二区三区免费播放| 亚洲欧美一区二区三区极速播放 | 国产一区二区三区四| 一区二区国产视频| 国产婷婷色一区二区三区在线| 欧美日韩美少妇| 色香蕉成人二区免费| 精品在线免费观看| 午夜成人在线视频| 亚洲精品老司机| 国产欧美一区二区精品性色超碰 | 免费观看日韩av| 一二三四社区欧美黄| 国产精品久久免费看| 2024国产精品视频| 日韩欧美一级在线播放| 欧美日本精品一区二区三区| 91啪亚洲精品| 成人美女在线视频| 国产乱码精品一区二区三区五月婷| 亚洲成人av资源| 亚洲高清免费一级二级三级| 亚洲色图视频免费播放| 中文字幕一区二区三区av| 久久亚洲综合av| 久久久久国产一区二区三区四区| 日韩一区二区三区电影| 欧美一区二区三区公司| 欧美日韩电影在线播放| 欧美少妇bbb| 欧美高清你懂得| 欧美一区二区美女| 精品成人佐山爱一区二区| 日韩精品影音先锋| 日韩久久久精品| 久久这里只有精品6| 精品99999| 国产日韩精品一区二区三区| 中文字幕成人网| 亚洲久草在线视频| 亚洲成av人片在线| 日韩高清不卡一区| 国内精品久久久久影院一蜜桃| 九九**精品视频免费播放| 国产美女一区二区| 成人午夜在线免费| 日本大香伊一区二区三区| 在线观看av一区二区| 欧美理论电影在线| 欧美va亚洲va| 国产日韩欧美制服另类| 1024成人网| 性久久久久久久| 国产一区欧美日韩| 99久久精品情趣| 欧美日韩日日骚| 亚洲国产综合人成综合网站| 青青草原综合久久大伊人精品优势| 久久99这里只有精品| 国产成人无遮挡在线视频| 99久久婷婷国产综合精品电影 | 91麻豆视频网站| 欧美老肥妇做.爰bbww| 日韩精品一区二区三区四区视频| 久久久精品日韩欧美| 亚洲三级在线免费观看| 日韩精品每日更新| 国产成人日日夜夜| 欧美日韩情趣电影| 国产午夜精品一区二区三区视频 | 在线一区二区视频| 精品剧情在线观看| 亚洲人成精品久久久久久| 五月天中文字幕一区二区| 国产精品1区二区.| 欧美日韩aaaaa| 国产精品久久久久桃色tv| 丝袜亚洲精品中文字幕一区| 成人免费毛片aaaaa**| 6080午夜不卡| 中文字幕一区视频| 狠狠色丁香九九婷婷综合五月| 91麻豆成人久久精品二区三区| 精品少妇一区二区三区视频免付费 | 秋霞电影网一区二区| av中文字幕亚洲| 精品国产免费一区二区三区香蕉| 亚洲精品成人精品456| 国产盗摄精品一区二区三区在线 | 亚洲婷婷国产精品电影人久久| 日韩中文字幕一区二区三区| 成人a免费在线看| 精品99久久久久久| 三级一区在线视频先锋| 91久久精品网| 国产精品久线在线观看| 国产乱人伦偷精品视频不卡| 日韩一区二区免费电影| 亚洲一区二区欧美| 成人av网在线| 亚洲国产精品99久久久久久久久 | 欧美精品一区二区三| 日韩激情中文字幕| 欧美日韩视频专区在线播放| 国产精品成人午夜| 成人小视频在线| 国产丝袜欧美中文另类| 国产一区二区网址| 欧美成人一区二区三区片免费| 亚洲第一狼人社区| 欧美视频在线一区| 亚洲一区在线观看网站| 一本到不卡免费一区二区| |精品福利一区二区三区| 成人免费高清在线| 中文字幕不卡在线播放| 国产黄人亚洲片| 国产农村妇女毛片精品久久麻豆| 欧美电影一区二区三区| 日韩极品在线观看| 日本二三区不卡| 色婷婷av一区二区三区大白胸| 国产麻豆精品久久一二三|