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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tmif.c

?? PNX系列設(shè)備驅(qū)動 PNX系列設(shè)備驅(qū)動
?? C
?? 第 1 頁 / 共 3 頁
字號:
/*---------------------------------------------------------------------------- 
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
//
//	960405	Tilakraj Roy 	Created
//	960710	Tilakraj Roy	Started adding code for tmman inteface 
//	961008	Tilakraj Roy	Added code for shared memory allocaiton interfaces.
//	961010	Tilakraj Roy	Added code for image loading, running & stopping
//	970806	Tilakraj Roy	Ported to Workstation V4.0
//
//////////////////////////////////////////////////////////////////////////////


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

#if (defined TMMAN_WINNT) || ( defined TMMAN_WIN98 )
#include "ntddk.h"
#endif

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

#include "tmmanapi.h"
#include "tmmanlib.h"
#include "platform.h"
#include "verinfo.h"
#include "tmif.h"

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


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


//////////////////////////////////////////////////////////////////////////////
//				PROTOTYPES
//////////////////////////////////////////////////////////////////////////////

TMStatus	tmmanKernelModeNegotiateVersion ( tmmanVersion* Version );

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

NTSTATUS tmmanOpen(
    IN PDEVICE_OBJECT pdo,
    IN PIRP Irp )
{
	NTSTATUS			NTStatus;
	UInt32				ClientIdx, DeviceIdx;
	ClientObject*		Client;
	PVOID			Process;

	Process = PsGetCurrentProcess();
	
	DPF(1,("tmman:tmmanOpen:Process[%x]:\n", Process ));

	// search for an empty slot.
	DPF(1,("tmman:tmmanOpen:ClientList:"));
	for ( ClientIdx = 0 ; ClientIdx < TMManGlobal->MaximumClients ; ClientIdx ++ )
	{
		if ( TMManGlobal->ClientList[ClientIdx] )
		{
			DPF(1,("[#%x:%x]", 
				ClientIdx, ((ClientObject*)TMManGlobal->ClientList[ClientIdx])->Process ));
			continue;
		}
		else
		{
			break;
		}
	}

	DPF(1,("\n"));

	if ( ClientIdx == TMManGlobal->MaximumClients )
	{
		DPF(0,("tmman:tmmanOpen:NoMoreClientsFree\n"));
		goto tmmanOpenExit1;
	}
		
	TMManGlobal->ClientList[ClientIdx] = memAllocate (  
		sizeof ( ClientObject ) + sizeof ( ClientDeviceObject ) * ( TMManGlobal->DeviceCount - 1 ) ); 

	if ( TMManGlobal->ClientList[ClientIdx] == Null )
	{
		DPF(0,("tmman:tmmanOpen:memAllocate:FAIL\n"));
		goto tmmanOpenExit1;	
	}
	
	Client = TMManGlobal->ClientList[ClientIdx];
	Client->Process = Process;
	Client->DeviceCount = TMManGlobal->DeviceCount;

	// initialize the per device data structures
	// BUGCHECK - we have to go by Client->DeviceCount since devices could have
	// gone away Workstation 5.0 problem.
	for ( DeviceIdx = 0 ; DeviceIdx < TMManGlobal->DeviceCount ; DeviceIdx++ )
	{
		TMManDeviceObject* TMManDevice = TMManGlobal->DeviceList[DeviceIdx];
		UInt32	Dummy, Length;
		UInt32	AddrKernel;
		
		Client->Device[DeviceIdx].Device = TMManDevice;

		halGetMMIOInfo (
			TMManDevice->HalHandle,
			(Pointer*)&Dummy,
			(Pointer*)&AddrKernel,
			&Length );

		// map mmio so that it can be acessed from user mode
		 if ( ( Client->Device[DeviceIdx].MMIOAddrUser = 
			sectionMapPhysicalAddress ( 
			AddrKernel, 
			Length,
			&Client->Device[DeviceIdx].MMIOHandleUser ) ) == NULL )
		{
			DPF(0,("tmman:tmmanOpen:sectionMapPhysicalAddress:MMIO:FAIL\n" ));
			goto	tmmanOpenExit2;
		}

		if ( TMManGlobal->MapSDRAM )
		{
			// if MapSDRAM is turned ON then MmMapMMIOSpace would have
			// been called already
			halGetSDRAMInfo (
				TMManDevice->HalHandle,
				(Pointer*)&Dummy,
				(Pointer*)&AddrKernel,
				&Length );

			if ( ( Client->Device[DeviceIdx].SDRAMAddrUser = 
				sectionMapPhysicalAddress ( 
				AddrKernel, 
				Length,
				&Client->Device[DeviceIdx].SDRAMHandleUser ) ) == NULL )
			{
				DPF(0,("tmman:tmmanOpen:sectionMapPhysicalAddress:SDRAM:FAIL\n" ));

				sectionUnmapPhysicalAddress ( 
					Client->Device[DeviceIdx].MMIOAddrUser,
					Client->Device[DeviceIdx].MMIOHandleUser );

				goto	tmmanOpenExit2;
			}
		}

		if ( ( Client->Device[DeviceIdx].MemoryAddrUser = 
			sectionMapPhysicalAddress ( 
			(UInt32)TMManDevice->MemoryBlock, 
			TMManDevice->MemoryBlockSize,
			&Client->Device[DeviceIdx].MemoryHandleUser ) ) == NULL )
		{
			DPF(0,("tmman:tmmanOpen:sectionMapPhysicalAddress:MEMORY:FAIL\n" ));

			if ( TMManGlobal->MapSDRAM )
			{
			
				sectionUnmapPhysicalAddress ( 
					Client->Device[DeviceIdx].SDRAMAddrUser,
					Client->Device[DeviceIdx].SDRAMHandleUser );
			}

			sectionUnmapPhysicalAddress ( 
				Client->Device[DeviceIdx].MMIOAddrUser,
				Client->Device[DeviceIdx].MMIOHandleUser );
			goto	tmmanOpenExit2;
		}

	}

	TMManGlobal->ClientCount++;
	
	Irp->IoStatus.Information = 0;
	Irp->IoStatus.Status = STATUS_SUCCESS;
	IoCompleteRequest (Irp, IO_NO_INCREMENT);
	return STATUS_SUCCESS;

tmmanOpenExit2:

	for ( /* use the current DeviceIdx */ ; DeviceIdx > 0 ; DeviceIdx-- )
	{
		sectionUnmapPhysicalAddress ( 
			Client->Device[DeviceIdx - 1].MemoryAddrUser,
			Client->Device[DeviceIdx - 1].MemoryHandleUser );

		if ( TMManGlobal->MapSDRAM )
		{

			sectionUnmapPhysicalAddress ( 
				Client->Device[DeviceIdx - 1].SDRAMAddrUser,
				Client->Device[DeviceIdx - 1].SDRAMHandleUser );
		}

		sectionUnmapPhysicalAddress ( 
			Client->Device[DeviceIdx - 1].MMIOAddrUser,
			Client->Device[DeviceIdx - 1].MMIOHandleUser );
	}

	memFree ( TMManGlobal->ClientList[ClientIdx] );

tmmanOpenExit1:
#if (defined TMMAN_WINNT) || ( defined TMMAN_WIN98 )
	Irp->IoStatus.Information = 0;
	Irp->IoStatus.Status = STATUS_DEVICE_BUSY;
	IoCompleteRequest (Irp, IO_NO_INCREMENT);
	return STATUS_DEVICE_BUSY;
#endif

}

NTSTATUS tmmanClose(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp )
{
	UInt32				ClientIdx, DeviceIdx;
	ClientObject*		Client;
	PVOID			Process;

	Process = PsGetCurrentProcess();
	
	DPF(1,("tmman:tmmanClose:Process[%x]\n", Process ));

	for ( ClientIdx = 0 ; ClientIdx < TMManGlobal->MaximumClients ; ClientIdx ++ )
	{
		if ( !TMManGlobal->ClientList[ClientIdx] )
			continue;

		if ( ((ClientObject*)TMManGlobal->ClientList[ClientIdx])->Process != Process )
			continue;
		break;
	}

	if ( ClientIdx == TMManGlobal->MaximumClients )
	{
		DPF(0,("tmman:tmmanClose:PANIC:InvalidHandle:Process[%x]\n", Process ));
		goto tmmanCloseExit1;
	}
	// assume one open handle per process context		
	// if we have more than slot of a single process than
	// we are smoking something we are not supposed to
	// since tmman32.dll is the only one who calls CreateProcess
	// during ATTACH_PROCESS
	
	Client = TMManGlobal->ClientList[ClientIdx];

	

	// initialize the per device data structures
	// BUGCHECK - we have to go by Client->DeviceCount 
	for ( DeviceIdx = 0 ; DeviceIdx < TMManGlobal->DeviceCount ; DeviceIdx++ )
	{
		TMManDeviceObject* TMManDevice = TMManGlobal->DeviceList[DeviceIdx];

		memoryManagerDestroyMemoryByClient (
			TMManDevice->MemoryManagerHandle, 
			(UInt32)Process );

		messageManagerDestroyMessageByClient (
			TMManDevice->MessageManagerHandle, 
			(UInt32)Process );

		eventManagerDestroyEventByClient (
			TMManDevice->EventManagerHandle, 
			(UInt32)Process );

		sgbufferManagerDestroySGBufferByClient (
			TMManDevice->SGBufferManagerHandle, 
			(UInt32)Process );

		sectionUnmapPhysicalAddress ( 
			Client->Device[DeviceIdx].MMIOAddrUser, 
			Client->Device[DeviceIdx].MMIOHandleUser );
		if ( TMManGlobal->MapSDRAM )
		{

			sectionUnmapPhysicalAddress ( 
				Client->Device[DeviceIdx].SDRAMAddrUser,
				Client->Device[DeviceIdx].SDRAMHandleUser );
		}

		sectionUnmapPhysicalAddress ( 
			Client->Device[DeviceIdx].MemoryAddrUser,
			Client->Device[DeviceIdx].MemoryHandleUser );
		
	
	}

	memFree ( TMManGlobal->ClientList[ClientIdx] );

	TMManGlobal->ClientList[ClientIdx] = NULL;
	
	TMManGlobal->ClientCount--;
#if (defined TMMAN_WINNT) || ( defined TMMAN_WIN98 )
	Irp->IoStatus.Information = 0;
	Irp->IoStatus.Status = STATUS_SUCCESS;
	IoCompleteRequest (Irp, IO_NO_INCREMENT);
	return STATUS_SUCCESS;
#endif

tmmanCloseExit1:
#if (defined TMMAN_WINNT) || ( defined TMMAN_WIN98 )
	Irp->IoStatus.Information = 0;
	Irp->IoStatus.Status = STATUS_DEVICE_BUSY;
	IoCompleteRequest (Irp, IO_NO_INCREMENT);
	return STATUS_DEVICE_BUSY;
#endif

}

NTSTATUS tmmanDeviceControl(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp )
{
#if (defined TMMAN_WINNT) || ( defined TMMAN_WIN98 )
    NTSTATUS Status;
	PIO_STACK_LOCATION  IOStackLocation;
	PVOID	IOParameters = Irp->AssociatedIrp.SystemBuffer;
	ULONG	ReturnInformation = 0;
 
    
	IOStackLocation = IoGetCurrentIrpStackLocation ( Irp );
#endif

    // assume that IO Manager will be calling us only with IRP_MJ_DEVICE_CONTROL

#if (defined TMMAN_WINNT) || ( defined TMMAN_WIN98 )
	switch ( IOStackLocation->Parameters.DeviceIoControl.IoControlCode )
#endif
	{

		case constIOCTLtmmanNegotiateVersion : // vxd callable
		{
			tmifNegotiateVersion* TMIF = 	
				(tmifNegotiateVersion*)IOParameters;

			TMIF->Status = tmmanKernelModeNegotiateVersion ( &TMIF->Version );
			ReturnInformation = sizeof ( tmifNegotiateVersion );
		}
		break;

		case constIOCTLtmmanDSPOpen : // vxd callable
		{
			tmifDSPOpen* TMIF = 	
				(tmifDSPOpen*)IOParameters;
			if ( TMIF->DSPNumber < TMManGlobal->DeviceCount )
			{
				TMIF->DSPHandle = (UInt32)TMManGlobal->DeviceList[TMIF->DSPNumber];
				TMIF->Status = statusSuccess;

			}
			else
			{
				TMIF->Status = statusDSPNumberOutofRange;
			}
			ReturnInformation = sizeof ( tmifDSPOpen );
			
		}
		break;

		case constIOCTLtmmanDSPClose : // vxd callable
		{
			tmifGenericFunction* TMIF = 	
				(tmifGenericFunction*)IOParameters;

			TMIF->Status = statusSuccess;
			ReturnInformation = sizeof ( tmifGenericFunction );

		}
		break;

		case constIOCTLtmmanDSPGetNum : // vxd callable
		{
			tmifDSPNum* TMIF = 	
				(tmifDSPNum*)IOParameters;
		
			TMIF->DSPCount = TMManGlobal->DeviceCount;
			TMIF->Status = statusSuccess;
			ReturnInformation = sizeof ( tmifDSPNum );

		}
		break;

		case	constIOCTLtmmanDSPInfo : // vxd callable
		{
			tmifDSPInfo*	TMIF =
				(tmifDSPInfo*)IOParameters;


			TMManDeviceObject* TMManDevice = (TMManDeviceObject*)TMIF->DSPHandle;
			UInt32	ClientIdx;
			UInt32	Dummy;
			PVOID			Process;
			ClientObject*		Client;

			Process = PsGetCurrentProcess();

			for ( ClientIdx = 0 ; ClientIdx < TMManGlobal->MaximumClients ; ClientIdx ++ )
			{
				if ( !TMManGlobal->ClientList[ClientIdx] )
					continue;

				if ( ((ClientObject*)TMManGlobal->ClientList[ClientIdx])->Process != Process )
					continue;
				break;
			}

			if ( ClientIdx == TMManGlobal->MaximumClients )
			{
				DPF(0,("tmman:tmmanDeviceControl:PANIC:tmmanDSPInfo:InvalidHandle:Process[%x]\n", 
					Process));
				TMIF->Status = statusInvalidHandle;
				ReturnInformation = sizeof ( tmifDSPInfo );
				break;
			}

			Client = TMManGlobal->ClientList[ClientIdx];
			
			TMIF->Info.MMIO.MappedAddress = 
				(UInt32)Client->Device[TMManDevice->DSPNumber].MMIOAddrUser;

			TMIF->Info.SDRAM.MappedAddress = 
				(UInt32)Client->Device[TMManDevice->DSPNumber].SDRAMAddrUser;

			halGetMMIOInfo (
				TMManDevice->HalHandle,
				(Pointer*)&TMIF->Info.MMIO.PhysicalAddress,
				(Pointer*)&Dummy,
				&TMIF->Info.MMIO.Size );
	

			halGetSDRAMInfo (
				TMManDevice->HalHandle,
				(Pointer*)&TMIF->Info.SDRAM.PhysicalAddress,
				(Pointer*)&Dummy,
				&TMIF->Info.SDRAM.Size );


			halGetTMPCIInfo ( 
				TMManDevice->HalHandle,
				&TMIF->Info.TMDeviceVendorID,
				&TMIF->Info.TMSubSystemID,
				&TMIF->Info.TMClassRevisionID );

			halGetBridgePCIInfo ( 
				TMManDevice->HalHandle,
				&TMIF->Info.BridgeDeviceVendorID,
				&TMIF->Info.BridgeSubsystemID,
				&TMIF->Info.BridgeClassRevisionID );

			TMIF->Info.DSPNumber = TMManDevice->DSPNumber;
			TMIF->Status = statusSuccess;
			ReturnInformation = sizeof ( tmifDSPInfo );

		}
		break;


		case	constIOCTLtmmanDSPLoad :
		{
			tmifDSPLoad*	TMIF =

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人综合精品三级| 蜜桃精品视频在线观看| 99热这里都是精品| 国产精品美女久久久久久| 国产成人自拍网| 国产目拍亚洲精品99久久精品| 国产精品一色哟哟哟| 欧美激情一区不卡| 91福利区一区二区三区| 亚洲一区二区欧美| 欧美一区二区三区免费大片| 国产美女娇喘av呻吟久久| 国产精品毛片a∨一区二区三区| www..com久久爱| 亚洲午夜一区二区| 日韩精品一区二区三区四区| 国产成人精品亚洲777人妖| 亚洲精品欧美综合四区| 欧美日本韩国一区| 激情综合网av| 国产精品私人自拍| 欧美群妇大交群中文字幕| 国产麻豆视频一区二区| 亚洲免费色视频| 91精品国产色综合久久ai换脸| 国产一本一道久久香蕉| 亚洲最大成人综合| 欧美精品一区二区三区在线| 91看片淫黄大片一级在线观看| 婷婷国产v国产偷v亚洲高清| 日本一区二区成人在线| 欧美嫩在线观看| 成人sese在线| 日韩电影在线一区二区三区| 国产精品毛片久久久久久久| 欧美一区中文字幕| 99久久国产综合精品女不卡| 乱中年女人伦av一区二区| 国产精品国产a| 精品美女在线播放| 欧美色精品天天在线观看视频| 国产精品99精品久久免费| 午夜精品一区二区三区免费视频 | 久久久午夜精品| 欧美曰成人黄网| 国产成人在线视频网站| 美国十次综合导航| 亚洲无线码一区二区三区| 亚洲国产精品传媒在线观看| 日韩一区二区三区电影在线观看 | 国产欧美一区二区三区网站| 欧美一区日韩一区| 欧美精品第一页| 成人永久看片免费视频天堂| 美脚の诱脚舐め脚责91| 亚洲777理论| 亚洲欧美福利一区二区| 欧美国产禁国产网站cc| 精品美女被调教视频大全网站| 欧美人xxxx| 欧美日韩国产经典色站一区二区三区 | 精品国产亚洲在线| 91精品一区二区三区在线观看| 色综合久久综合网欧美综合网| 粉嫩av一区二区三区在线播放| 美女视频一区二区三区| 日本视频在线一区| 亚洲成a人v欧美综合天堂下载| 亚洲精品国产无套在线观| 中文字幕欧美一区| 中文字幕日韩精品一区| 欧美激情综合五月色丁香| 日韩免费视频线观看| 欧美一级理论性理论a| 5858s免费视频成人| 欧美乱妇20p| 欧美日韩一区二区在线视频| 日本韩国精品一区二区在线观看| 99久久综合国产精品| 成人黄色软件下载| av毛片久久久久**hd| 91网站视频在线观看| 91福利区一区二区三区| 欧美日韩一区三区| 欧美高清dvd| 日韩手机在线导航| 精品va天堂亚洲国产| 2023国产精品| 中文字幕不卡的av| 综合久久久久久| 亚洲午夜激情网页| 免费人成在线不卡| 国产乱淫av一区二区三区| 高清视频一区二区| 色综合视频一区二区三区高清| 日本久久一区二区三区| 欧美日韩在线播放一区| 欧美一区二区三区小说| 久久蜜桃av一区二区天堂| 国产精品久久久久久久午夜片| 亚洲视频1区2区| 五月婷婷久久综合| 国产乱对白刺激视频不卡 | 色综合久久久久综合| 欧美日韩一区二区电影| 精品国产一区二区三区不卡 | 99国内精品久久| 欧美性色综合网| 欧美精品在线观看播放| 久久噜噜亚洲综合| 亚洲精品欧美激情| 麻豆成人免费电影| 成人高清伦理免费影院在线观看| 欧美日韩专区在线| 久久久噜噜噜久久人人看 | 亚洲大片一区二区三区| 精品一区二区三区视频在线观看| 国产成人午夜99999| 色94色欧美sute亚洲13| 久久久久青草大香线综合精品| 18涩涩午夜精品.www| 蜜桃视频在线观看一区| av电影在线观看完整版一区二区| 欧美精品自拍偷拍| 中文字幕欧美国产| 日韩成人午夜精品| 91农村精品一区二区在线| 日韩欧美激情在线| 亚洲精品国产第一综合99久久 | 日韩国产精品久久| 成人h动漫精品一区二区| 日韩一级成人av| 一区二区三区四区高清精品免费观看 | 欧美α欧美αv大片| 亚洲伦理在线精品| 国产成人一级电影| 正在播放一区二区| 亚洲欧美日韩国产综合| 国产精品综合网| 欧美一区二区三区在| 一区二区三区四区激情| 成人av影院在线| 久久综合久久综合久久| 日韩av电影免费观看高清完整版 | 在线播放日韩导航| 亚洲精品视频一区二区| www.爱久久.com| 国产欧美精品一区二区三区四区| 日韩电影免费一区| 欧美日韩aaaaa| 亚洲一区二区三区四区五区中文| 成人精品鲁一区一区二区| 久久一区二区三区国产精品| 人妖欧美一区二区| 91麻豆精品国产91久久久久久| 一二三四社区欧美黄| 91丨porny丨蝌蚪视频| 国产精品丝袜久久久久久app| 国产福利91精品一区二区三区| 26uuu国产一区二区三区| 奇米在线7777在线精品 | 狠狠狠色丁香婷婷综合激情| 欧美一区二区三区婷婷月色| 亚洲成人在线网站| 欧美日韩免费视频| 亚洲福利视频导航| 欧美人xxxx| 日本人妖一区二区| 欧美岛国在线观看| 久久精品国产精品亚洲综合| 91精品国产综合久久久久久久久久 | 日韩精品一区二区三区中文不卡| 美腿丝袜亚洲综合| 精品日韩av一区二区| 狠狠狠色丁香婷婷综合激情| 久久免费视频一区| 成人一区二区三区视频| 国产精品国产自产拍在线| 波多野结衣亚洲| 亚洲精品国产精华液| 欧美日韩国产综合一区二区| 日韩av中文在线观看| 久久综合狠狠综合久久激情| 成人永久看片免费视频天堂| 亚洲男人的天堂网| 欧美日韩免费在线视频| 久久99热狠狠色一区二区| 久久久精品中文字幕麻豆发布| 成av人片一区二区| 亚洲一二三四久久| 日韩一区二区精品葵司在线| 国产成人综合自拍| 一区二区三区久久| 欧美一级片在线| 国产成人精品免费在线| 一区二区三区国产精华| 欧美不卡一二三| 不卡欧美aaaaa| 亚洲成人av电影在线| 久久日一线二线三线suv|